Вообщем есть задача: Code: program two; uses crt; const MAX=20; type line=Array[1..MAX] of real; var smin:real; imin:Integer; i,j,n,m:Integer; x:Array[1..MAX] of line; buf:line; juf:Array[1..MAX] of Integer; inp:Text; begin Assign(inp,'matrix.txt'); Reset(inp); Read(inp,n,m);{Є®«ЁзҐбвў® бвp®Є Ё бв®«Ўж®ў} if (MAX<n) or (MAX<m) then Write('*Ґ¦Ґ«*о бзЁв*вм! ') else begin for i:=1 to n do for j:=1 to m do Read(inp,x[i][j]); for i:=1 to n do begin buf[i]:=x[i][1]; juf[i]:=1; for j:=2 to m do if buf[i]<x[i][j] then begin buf[i]:=x[i][j]; juf[i]:=j end end; smin:=buf[1]; for i:=2 to n do begin if smin>buf[i] then begin smin:=buf[i]; imin:=i end end; Writeln; Write('‘Ґ¤«®ўaп в®зЄa x=',juf[imin],' y=',imin) end; Close(inp) end. А вот условие: Элемент матрицы назовем седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот, является наибольшим в своей строке и наименьшим в своем столбце. Для заданной целой матрицы A(nxm) напечатать индексы всех ее седловых точек И вот собственно бага: Она ищет(второе условие): 3 3 3 1 1 2 1 1 3 1 1 И не ищет, т.е. не ищет первое условие(выделенное): 3 3 1 1 1 2 3 3 1 1 1 Помогите исправить! ПЖЛ, мне до завтра , т.е. сегодня до хоть до 00 00 плиз
я не уверен на счёт того как у тебя компилятор принимает это, но в стандартном паскале обычно пишут не [j], а [i,j] ps пожелание: делай отступы, так будет легче другим код читать, да и тебе тоже, циклы и условия хорошо отделять от основной проги, парами enter'ов и комментарии, потому что сейчас сидишь и разбираешь, что ты хотел в каждой строке сделать, комменты помогают алгоритм понять
не стал разбираться(по приведённым выше причинам), вот код для поиска по первому условию (по второму полный аналог): размер n*m, обошёлся одним массивом x[i,j] i,j - индексы; k,ind - доп. переменные индексов; ok-boolean, для проверки условия. Code: for i:=1 to n do {проход по строкам} begin min:=x[i,1]; ok:=true; for j:=2 to m do {поиск наименьшего в строке} if x[i,j]<min then begin min:=x[i,j]; ind:=j; end; for k:=i downto 1 do {проверка на макс в столбце} if x[k,ind]>min then begin ok:=false; k:=n; end; if ok then for k:=i to n do if x[k,ind]>min then begin ok:=false; k:=n; end; if ok then write (i,ind); end;
Code: program two; uses crt; const MAX=20; type line=Array[1..MAX] of real; var smin,min:real; imin:Integer; i,j,n,m,ind,k:Integer; ok:boolean; x:Array[1..MAX] of line; buf:line; juf:Array[1..MAX] of Integer; inp:Text; begin Assign(inp,'matrix.txt'); Reset(inp); Read(inp,n,m);{Є®«ЁзҐбвў® бвp®Є Ё бв®«Ўж®ў} if (MAX<n) or (MAX<m) then Write('*Ґ¦Ґ«*о бзЁв*вм! ') else begin for i:=1 to n do for j:=1 to m do Read(inp,x[i][j]); for i:=1 to n do begin buf[i]:=x[i][1]; juf[i]:=1; for j:=2 to m do if buf[i]<x[i][j] then begin buf[i]:=x[i][j]; juf[i]:=j end end; smin:=buf[1]; for i:=2 to n do begin if smin>buf[i] then begin smin:=buf[i]; imin:=i end end; for i:=1 to n do begin min:=x[i,1]; ok:='true'; for j:=2 to m do if x[i,j]<min then begin min:=x[i,j]; ind:=j; end; for k:=i downto 1 do if x[k,ind]>min then begin ok:='false'; k:=n; end; if ok then for k:=i to n do if x[k,ind]>min then begin ok:='false'; k:=n; end; if ok then write (i,ind); end; Writeln; Write('‘Ґ¤«®ўaп в®зЄa x=',juf[imin],' y=',imin) end; Close(inp) end. висьнет че-то
бля, когда кароче так виснет: 3 3 1 1 1 3 2 3 1 1 1 или 3 3 1 1 1 3 3 2 1 1 1 тут уже чисто твой код работает
попробуй так(тут ток один вариан седловой точки): Code: program matrix(input, output); const lim=20; var i,j,k,ind,min,n,m:integer; x:array[1..lim,1..lim] of integer; ok:boolean inp:Text; begin Assign(inp,'matrix.txt'); Reset(inp); Read(inp,n,m); if (n>lim) or (m>lim) then Write('*Ґ¦Ґ«*о бзЁв*вм! ') else begin for i:=1 to n do for j:=1 to m do Read(inp,x[i][j]); for i:=1 to n do begin min:=x[i,1]; ok:=true; for j:=2 to m do if x[i,j]<min then begin min:=x[i,j]; ind:=j; end; for k:=i downto 1 do if x[k,ind]>min then begin ok:=false; k:=n; end; if ok then for k:=i to n do if x[k,ind]>min then begin ok:=false; k:=n; end; if ok then writeln(i,ind); end; end end. зы. ещё 1 вещь, подумай над тем если у тебя в строке 2 максимальных элемента!!! (тогда придётся все варианты с ними рассматривать)
стой! смотри, если работать так: 3 3 1 1 1 2 3 3 1 1 1 он в первый символ парвильно выводит, но последний - 0 =\ а если работать так: 3 3 3 1 1 2 1 1 3 1 1 это он праввильно считает слушай, как чтоб выводило первую и последнюю цифры в отдельные переменные
Всё проверил и исправил) вот окончательный вариант: Code: program matrix(input, output,inp); const lim=20; var i,j,k,ind,min,max,n,m:integer; x:array[1..lim,1..lim] of integer; ok:boolean; inp:Text; begin Assign(inp,'matrix.txt'); Reset(inp); Read(inp,n,m); if (n>lim) or (m>lim) then Write('*Ґ¦Ґ«*о бзЁв*вм! ') else begin for i:=1 to n do for j:=1 to m do Read(inp,x[i,j]); for i:=1 to n do begin min:=x[i,1]; ok:=true; ind:=1; for j:=2 to m do if x[i,j]<min then begin min:=x[i,j]; ind:=j; end; for k:=i downto 1 do if x[k,ind]>min then begin ok:=false; k:=1; end; if ok then for k:=i to n do if x[k,ind]>min then begin ok:=false; k:=n; end; if ok then writeln(i,ind); end; for i:=1 to n do begin max:=x[i,1]; ok:=true; ind:=1; for j:=2 to m do if x[i,j]>max then begin max:=x[i,j]; ind:=j; end; for k:=i downto 1 do if x[k,ind]<max then begin ok:=false; k:=1; end; if ok then for k:=i to n do if x[k,ind]<max then begin ok:=false; k:=n; end; if ok then writeln(i,ind); end; end end.
слушай, она странное выводит -))) т.е. бред какой-то 22 11 31 Выводить примерно надо: Элемент находиться на 1 строке втором столбце =\ типа того, а там ваще =)