Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Матрица

Автор: -Анастасия- 31.10.2006 17:59

Помогите, будте добры!!!!!!!!!!!!!!!!!
Дана матрица размера 5 на 10ю найти минимальный\максимальный среди тех строк\столбцов, которые упорядочены либо по возрастанию, либо по убыванию. если такие строки\столбцы отсутствуют,то вывести 0.

я конечно чего-й-то написала, но не работают некоторые процедуры.
еще такой вопрос как сократить количество этих самых процедур????

program matrix21;
type matrix=array[1..50,1..50] of integer;
var
a:matrix;
i,j,p,p2,r,r2,s,d,max:integer;
{************************************************}
procedure ybuBaniestroki(a:matrix; var r:integer; var max:integer);
begin
{ystanoBka fla*ka}
r:=0;
for i:=1 to 4 do begin
for j:=1 to 9 do begin
if a[i,j+1]>=a[i,j] then r:=1; {Smena fla*ka} end;
begin if r=0 then writeln('Stroka #',i,' ybuBaet');
end;

end;
end;
{*************************************************}
procedure Bozrastaniestroki(a:matrix; var p:integer);
begin
{ystanoBka fla*ka}
p:=0;
for i:=1 to 4 do begin
for j:=1 to 9 do begin
if a[i,j+1]<=a[i,j] then p:=1; {Smena fla*ka} end;
begin
if p=0 then writeln('Stroka ',i,' Bozrastaet');
end;
for j:=2 to 5 do
max:=a[i,1];
begin if a[i,j]>max then max:=a[i,j];
end;
writeln('max=',max:5);
end;
end;
{**************************************************}
procedure ybuBaniestolbca(a:matrix; var r2:integer);
begin
{ystanoBka fla*ka}
r2:=0;
for i:=1 to 4 do begin
for j:=1 to 9 do begin
if a[i+1,j]>=a[i,j] then r2:=1; {Smena fla*ka} end;
begin
if r2=0 then writeln('Stolbec ',j,' ybuBaet');
end;
end;
end;
{**************************************************}
procedure Bozrastaniestolbca(a:matrix; var p2:integer);
begin
{ystanoBka fla*ka}
p2:=0;
for i:=1 to 4 do begin
for j:=1 to 9 do begin
if a[i+1,j]<=a[i,j] then p:=1; {Smena fla*ka} end;
begin
if p=0 then writeln('Stroka ',j,' Bozrastaet');
end;
end;
end;
{*************************************************}
procedure BuBodnylj(p,r,p2,r2:integer; var s:integer);
begin
s:=0;
if (p=0) and (r=0) and (r2=0) and (p2=0) then writeln('0');
end;
{*************************************************}

begin
{BBod matricu}
writeln('BBedite elementu matricu razmera 5*10');
for i:=1 to 5 do begin
for j:=1 to 10 do begin
write('a[',i,',',j,']=');
readln(a[i,j]) end;
end;
writeln;

{BuBod matricu}
writeln('Bawa matrica');
for i:=1 to 5 do begin
for j:=1 to 10 do write(a[i,j]:5);
writeln;
end;
{Obrawenie k proceduram}
ybuBaniestroki(a,r,max);
Bozrastaniestroki(a,p);
ybuBaniestolbca(a,r2);
Bozrastaniestolbca(a,p2);
BuBodnylj(p,r,p2,r2,s);
end.

М
Теги используем...


Автор: volvo 31.10.2006 20:31

Через функции (а не процедуры), можно... Переводить на процедуры не буду, ибо это извращение. Нужно - делай сама...

program matrix21;
type matrix=array[1..50,1..50] of integer;

const
strOrder: array[boolean] of string = (
' A_Z', ' Z_A'
);

function checkLine(a:matrix; m, n: integer; order: boolean): integer;
var
flag: boolean;
min, max: integer;
i, j, count: integer;
begin
count := 0;
for i:=1 to m do begin
flag := true;
for j:=1 to n-1 do
if (a[i, j+1] >= a[i,j]) = order then flag := false;

if flag then begin
inc(count);
writeln('Stroka #', i, strOrder[order]);
min := a[i, 1]; max := min;
for j := 2 to n do begin

if min > a[i, j] then min := a[i, j];
if max < a[i, j] then max := a[i, j];

end;
writeln('min = ', min, ' max = ', max);
end;
end;
checkLine := count;

end;

function checkColumn(a:matrix; m, n: integer; order: boolean): integer;
var
flag: boolean;
min, max: integer;
i, j, count: integer;
begin
count := 0;
for j:=1 to n do begin
flag := true;
for i:=1 to m-1 do
if (a[i+1, j] >= a[i,j]) = order then flag := false;

if flag then begin
inc(count);
writeln('Stolbec #', i, strOrder[order]);
min := a[1, j]; max := min;
for i := 2 to m do begin

if min > a[i, j] then min := a[i, j];
if max < a[i, j] then max := a[i, j];

end;
writeln('min = ', min, ' max = ', max);
end;
end;
checkColumn := count;

end;


var
i, j: integer;
a: matrix;

begin
{BBod matricu}
writeln('BBedite elementu matricu razmera 5*10');
for i:=1 to 5 do begin
for j:=1 to 10 do begin
write('a[',i,',',j,']=');
readln(a[i,j]) end;
end;
writeln;

{BuBod matricu}
writeln('Bawa matrica');
for i:=1 to 5 do begin
for j:=1 to 10 do write(a[i,j]:5);
writeln;
end;
{Obrawenie k proceduram}
if
checkLine(a, 5, 10, false) +
checkLine(a, 5, 10, true) +
checkColumn(a, 5, 10, false) +
checkColumn(a, 5, 10, true) = 0 then writeln('0');
end.