Пожалуйста, помогите исправить программу. Просто перемкнуло на ней. Текст задания: Найти max среди всех элементов тех строк заданной матрицы, которые упорядочены по возрастанию.
program pract11_4; const n=3;m=3; type mas=array[1..n,1..m] of integer; mas2=array[1..n] of integer; function max(n:byte;a:mas):integer; var i,j:integer;mix:integer; begin mix:=a[1,j]; for i:=2 to n do for j:=1 to m do begin if a[i,j]>mix then mix:=a[i,j]; max:=mix; end; end; var i,j:integer;k1:byte;a:mas; begin for i:=1 to n do for j:=1 to m do begin writeln('wwedite ',i,',',j,' element matrici'); read(a[i,j]);end; for i:=1 to n-1 do for j:=1 to m do begin if a[i,j]<a[i+1,j] then begin k1:=k1+1;end;end; if k1=n-1 then begin max(n,a); end; writeln('max= ',max(n,a):6); end.
.
мисс_граффити
25.02.2007 16:48
1. Сделай нормальное форматирование - не видно, какой begin к какому end относится 2.
function max(n:byte;a:mas):integer; var i,j:integer;mix:integer; begin mix:=a[1,j]; {чему здесь, по-твоему, равно j?} for i:=2 to n do {почему с 2?} for j:=1 to m do begin if a[i,j]>mix then mix:=a[i,j]; max:=mix; end; end;
3.
k1:=k1+1;end;end; if k1=n-1 then begin max(n,a);
а обнулять k1 для каждой строчки кто будет? и ты, кстати, m и n не перепутал? n-это число строк, а не число элементов в строке... то есть ты сравниваешь не по строкам, а по столбцам.
klem4
25.02.2007 17:03
Я бы делал так:
{$B-} uses crt;
const n = 5; // размерность матрицы
type TMatrix = array[1..n, 1..n] of Integer; // тип - матрица
(* функция возвращает TRUE, если строка с номером ROW матрицы M упорядочена по возрастанию *) function IsSorted(const M: TMatrix; const row: Byte): Boolean; var i: Byte; begin i := 1; while (i <= n - 1) and (M[row, i] < M[row, i + 1]) do inc(i); // <= IsSorted := (i = n); end;
(* Функция возвращает номер строки из упорядоченных по возрастанию, в которой находится макс. элемент, если упорядоченных по вохрастанию строк нет, функция вернет 0 *)
function FindResult(const M: TMatrix): Integer; var i, row: Byte; begin row := 0; for i := 1 to n do if IsSorted(M, i) and ((row = 0) or (M[i, n] > M[row, n])) then row := i; FindResult := row; end;
begin clrscr; maxRow := FindResult(M); if maxrow = 0 then writeln('No') else writeln(M[maxRow, n]); readln; end.
mikle
25.02.2007 18:40
Большое спасибо! Очень помогли.
mikle
25.02.2007 20:59
Ещё одна проблема. Подскажите что делать. Если ввожу матрицу как константу, то выдаёт ошибку, а если ввожу матрицу вручную, то на печать выдаётся последний элемент матрицы.
volvo
25.02.2007 21:09
Цитата
Если ввожу матрицу как константу, то выдаёт ошибку
Какую ошибку, и какой у тебя компилятор?
Цитата
а если ввожу матрицу вручную
показывай, КАК вводишь...
mikle
25.02.2007 22:12
При ввводе таким образом получаем ошибку №85 на строке var M:TMatrix=((3,4,55,112,442),(2,3,1,0,4),(3,5,15,16,500),(1,10,9,0,110),(4,44,45, 46,47));
program pract11_4; uses crt; const n=5; type tmatrix=array[1..n,1..n] of integer; function IsSorted(const M:tmatrix;const row:byte):boolean; var i:byte; begin i:=1; while (i<=n-1) and (M[row,i]<M[row,i+1]) do inc(i); IsSorted:=(i=n);end; function FindResult(const M:TMatrix):integer; var i,row:byte; begin row:=0; for i:=1 to n do if IsSorted(M,i) and ((row=0) or (M[i,n]>M[row,n])) then row:=i; row:=i; FindResult:=row;end; var M:TMatrix=((3,4,55,112,442),(2,3,1,0,4),(3,5,15,16,500),(1,10,9,0,110),(4,44,45, 46,47)); maxRow:byte; begin clrscr; maxRow:=FindResult(M); if maxrow=0 then writeln('No') else writeln(M[maxrow,n]); readln; end.
.
При этои варианте выводит последний элемент матрицы
program pract11_4; uses crt; const n=5; type tmatrix=array[1..n,1..n] of integer; function IsSorted(const M:tmatrix;const row:byte):boolean; var i:byte; begin i:=1; while (i<=n-1) and (M[row,i]<M[row,i+1]) do inc(i); IsSorted:=(i=n); end; function FindResult(const M:TMatrix):integer; var i,row:byte; begin row:=0; for i:=1 to n do if IsSorted(M,i) and ((row=0) or (M[i,n]>M[row,n])) then row:=i; row:=i; FindResult:=row; end; var M:TMatrix; maxRow:byte;i,j:integer; begin clrscr; for i:=1 to n do for j:=1 to n do begin writeln('vvedite ',i,',',j,' element matrici'); read(M[i,j]); end; maxRow:=FindResult(M); if maxrow=0 then writeln('No') else writeln(M[maxrow,n]); readln; end.
.
Bokul
25.02.2007 22:40
Цитата
При ввводе таким образом получаем ошибку №85 на строке
var M:TMatrix=((3,4,55,112,442),(2,3,1,0,4),(3,5,15,16,500),(1,10,9,0,110),(4,44,45, 46,47));
Замени var на const, но потом все равно не забудь поставить var. Хотя результат и так будет не верным.
PS хочешь помощи, обращай внимание на замечания:
Цитата(мисс_граффити @ 25.02.2007 4:48)
1. Сделай нормальное форматирование - не видно, какой begin к какому end относится
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.