10.10.2011, 17:37 | #1 (permalink) |
Member
Регистрация: 08.10.2011
Сообщений: 49
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Программа на Паскаль
дан двумерный массив, поменять местами в этом массиве максимальный и минимальный элемент. считать что максимальный и минимальный элемент единственны. program upr1; const n=2; m=2; type mas=array[1..n,1..m] of integer; procedure vv( var a:mas); var i,j:integer; begin for i:=1 to n do for j:=1 to m do a[i,j]:=random(10); end; procedure vv1( var a:mas); var i,j:integer; begin for i:=1 to n do begin for j:=1 to m do write(a[i,j]:3); writeln; end; end; procedure vv2(var max:integer; a:mas); var i,j,k,l:integer; begin max:=a[1,1]; k:=1; l:=1; for i:=1 to n do for j:=1 to m do begin if a[i, j] > Max then begin Max := a[i, j]; k:=i; l:=j; end; end; end; procedure vv3(var min:integer; a:mas); var i,j,b,d:integer; begin min:=a[1,1]; b:=1; d:=1; for i:=1 to n do begin for j:=1 to m do if a[i, j] < Min then begin Min := a[i, j]; b:=i; d:=j; end; end; end; procedure vv4( var a:mas); var i,j,k,l,b,d,c,min,max:integer; begin c:=a[k,l]; a[k,l]:=a[b,d]; a[b,d]:=c; end; procedure vv5(var a:mas); var i,j:integer; begin for i:=1 to n do begin for j:=1 to m do begin write (a[i,j]:3); writeln; end; end; end; var a:mas; min,max:integer; begin writeln('введите массив'); vv(a); vv1(a); vv2(max,a); vv3(min,a); vv4(a); writeln('измененный двумерный массив '); vv5(a); end. и если можно помогите решить: 2)дана целочисленная квадратная матрица,порядка n, найти номера столбцов ,элементы в каждой из которых образуют монотонную последовательность. (возрастающую или убывающую). |
10.10.2011, 17:37 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
На форуме ранее создавались топики которые так или иначе похожи на ваш Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл Паскаль АВС Паскаль Паскаль Паскаль |
10.10.2011, 20:57 | #2 (permalink) |
Member
Регистрация: 15.02.2009
Сообщений: 695
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 523
|
Первую программу вроде подправил, работает.
Код:
program upr1; const n=3; m=3; type mas=array[1..n,1..m] of integer; var a:mas; min,max,k,l,b,d:integer; procedure vv( var a:mas); var i,j:integer; begin randomize; for i:=1 to n do for j:=1 to m do a[i,j]:=random(100)+1; end; procedure vv1( var a:mas); var i,j:integer; begin for i:=1 to n do begin for j:=1 to m do write(a[i,j]:3); writeln; end; end; procedure vv2(var max:integer; a:mas); var i,j:integer; begin max:=a[1,1]; k:=1; l:=1; for i:=1 to n do for j:=1 to m do begin if a[i, j] > Max then begin Max := a[i, j]; k:=i; l:=j; end; end; end; procedure vv3(var min:integer; a:mas); var i,j:integer; begin min:=a[1,1]; b:=1; d:=1; for i:=1 to n do begin for j:=1 to m do if a[i, j] < Min then begin Min := a[i, j]; b:=i; d:=j; end; end; end; procedure vv4( var a:mas); var i,j,c,min,max:integer; begin c:=a[k,l]; a[k,l]:=a[b,d]; a[b,d]:=c; end; procedure vv5(var a:mas); var i,j:integer; begin for i:=1 to n do begin for j:=1 to m do begin write (a[i,j]:3); end; writeln; end; end; begin writeln('введите массив'); vv(a); vv1(a); vv2(max,a); vv3(min,a); vv4(a); writeln('измененный двумерный массив '); vv5(a); end. |
10.10.2011, 22:06 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
М-да...
Боюсь, тут не одна ошибка. Ну прежде всего. Конечно, отрадно, что Вы не боитесь использовать процедуры (обычно начинающие от них шарахаются), но надо это делать в меру и грамотно. Ну зачем для каждого чиха процедуру оформлять? Вообще-то, по большому счету, они тут вовсе не нужны: программа у Вас линейная, все операторы выполняются последовательно, многократные обращения к процедурам отсутствуют, так зачем они? Ну ладно, хотите через процедуры - дело Ваше. Но! Вот сравните процедуры vv1 и vv5 - они выполняют одно и то же (вывод массива на экран), только вот vv1 написана грамотно и правильно, а вот vv5 - не очень. Ну а теперь - о главном. Вы, очевидно, не вполне уяснили разницу между глобальными, формальными, фактическими параметрами и параметрами, определяемыми в теле процедуры. Звучит, понимаю, страшновато, но уж если Вы работаете с процедурами, то будьте любезны во всём этом разобраться. А чтобы было понятнее, поясню на примере. Вот вы вводите параметры k,l в теле процедуры vv2 и параметры b,d в теле процедуры vv3. Но они существуют только внутри названных процедур, и как только Вы из процедуры выходите, программа о них забывает напрочь! Поэтому когда в теле процедуры vv4 Вы вновь определяете те же 4 параметра, то никакого отношения (с точки зрения программы) к предыдущим они не имеют, а существуют только в процедуре vv4, где по умолчанию им присваиваются нулевые значения. Надеюсь, понятно объяснил. Сейчас нарисую боле ли менее приличное решение задачки. Код:
const n=7; m=7; type mas=array[1..n,1..m] of integer; var a:mas; min,max,b,d,k,l,c:integer; procedure vv; var i,j:integer; begin for i:=1 to n do for j:=1 to m do a[i,j]:=random(10); end; procedure vv1; var i,j:integer; begin for i:=1 to n do begin for j:=1 to m do write(a[i,j]:3); writeln; end; writeln; end; procedure vv2; var i,j:integer; begin max:=a[1,1]; min:=a[1,1]; k:=1; l:=1; b:=1; d:=1; for i:=1 to n do for j:=1 to m do begin if a[i,j]>Max then begin Max:=a[i,j]; k:=i; l:=j; end; if a[i,j]<Min then begin Min:=a[i,j]; b:=i; d:=j; end; end; end; procedure vv4; begin c:=a[k,l]; a[k,l]:=a[b,d]; a[b,d]:=c; end; begin writeln('Initial 2-dimensional array:'); vv; vv1; vv2; vv4; writeln('Changed 2-dimensional array:'); vv1; readln; end. |
11.10.2011, 08:45 | #4 (permalink) |
Member
Регистрация: 08.10.2011
Сообщений: 49
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо большое что все объяснили!!!на самом деле с локальными и глобальными переменными проблема.Спасибо!!
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|