Просмотр полной версии : ПАСКАЛЬ =\
rubik-nerubik
27.12.2007, 16:17
Вообщем есть задача:
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 плиз
я не уверен на счёт того как у тебя компилятор принимает это, но в стандартном паскале обычно пишут не [i][j], а [i,j]
ps пожелание: делай отступы, так будет легче другим код читать, да и тебе тоже, циклы и условия хорошо отделять от основной проги, парами enter'ов
и комментарии, потому что сейчас сидишь и разбираешь, что ты хотел в каждой строке сделать, комменты помогают алгоритм понять
rubik-nerubik
27.12.2007, 16:40
VERte][ я просил помочь -) это он нормально воспримент, ибо работает =\
не стал разбираться(по приведённым выше причинам), вот код для поиска по первому условию (по второму полный аналог):
размер n*m, обошёлся одним массивом x[i,j]
i,j - индексы; k,ind - доп. переменные индексов; ok-boolean, для проверки условия.
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;
rubik-nerubik
27.12.2007, 17:27
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.
висьнет че-то
rubik-nerubik
27.12.2007, 17:35
бля, когда кароче так виснет:
3 3
1 1 1
3 2 3
1 1 1
или
3 3
1 1 1
3 3 2
1 1 1
тут уже чисто твой код работает
попробуй так(тут ток один вариан седловой точки):
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 максимальных элемента!!! (тогда придётся все варианты с ними рассматривать)
rubik-nerubik
27.12.2007, 17:52
виснет, ладно возьму #5, подсуну. =\
rubik-nerubik
27.12.2007, 17:57
стой!
смотри, если работать так:
3 3
1 1 1
2 3 3
1 1 1
он в первый символ парвильно выводит, но последний - 0 =\
а если работать так:
3 3
3 1 1
2 1 1
3 1 1
это он праввильно считает
слушай, как чтоб выводило первую и последнюю цифры в отдельные переменные
rubik-nerubik
27.12.2007, 17:58
после отпишись 350-659-776 в аську, буду примерно через два часа:
спсибо
Всё проверил и исправил) вот окончательный вариант:
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.
rubik-nerubik
27.12.2007, 20:07
слушай, она странное выводит -)))
т.е. бред какой-то
22
11
31
Выводить примерно надо: Элемент находиться на 1 строке втором столбце =\ типа того, а там ваще =)
rubik-nerubik
27.12.2007, 20:08
ааааа Ясно!)) выводит все! сПАсибо!
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot