Здравствуйте! Опять с тупыми вопросами, наверно. В общем, есть такая задача, где нужно найти столбец в матрице с повторяющимися элементами. Подумала, что элементы столбцов я сначала отсортирую, потом проверю, есть ли одинаковые.
const
n=6; { Количество столбцов }
m=5; { Количество строк массива }
k=20;
var
a:array[1..n, 1..m] of integer;
i,j,min,t,d:integer;
begin
randomize;
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(k);
for j:=1 to m do
begin
for i:=1 to n do
begin
for i:=1 to n-1 do begin
min:=i;
for d:=i+1 to n do
if a[d]<a[min] then min:=d;
t:=a[i];
a[i]:=a[min];
a[min]:=t;
end;
if a[i]=a[i+1] then writeln ('da',' ',j);
end;
for i:=1 to n do begin
for j:=1 to m do
write(a[i,j],' ');
writeln; end;
readln;
end.
Ну, перед этим тебе должна выводиться еще ошибка, "Illegal assignment to for-loop variable", потому как FPC не позволяет менять переменную, по которой идет цикл, а ты хочешь запустить второй цикл по той же переменной (20 строка)
Что касается
volvo, я не знаю, как это в один цикл объединить... Такая ошибка наблюдаться будет только в FPC?
Диагностироваться эта ошибка будет только на новых компиляторах, старые ее просто замалчивают. От этого программа не становится более правильной. В документации по языку программирования Паскаль явно сказано: "нельзя менять управляющую переменную цикла FOR". Все. Точка. Все, кто это делают - делают на свой страх и риск. Пускай не удивляются, что очередная версия компилятора перестала компилировать их программы. Нужен полный контроль над циклом - While/Repeat.
Но в твоем случае это не поможет, поскольку все равно значение переменной i будет безнадежно испорчено.
Вот так я бы решал задачу (если вообще допустимо изменять содержимое матрицы):
const
n=5;
m=6;
var
a:array[1..n, 1..m] of integer;
i,j,k, min,t:integer;
begin
randomize;
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(20);
{ Заполнили матрицу, распечатываем }
for i:=1 to n do begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
{ для каждого столбца (j - номер столбца) делаем следующее: }
for j:=1 to m do begin
{
это, насколько я понимаю, сортировка методом поиска минимумов?
обрати внимание, обращаемся к двумерному массиву - используя 2 индекса
}
for i:=1 to n-1 do begin
min:=i;
for k:=i+1 to n do begin
if a[k, j]<a[min, j] then min := k;
t:=a[i, j];
a[i, j]:=a[min, j];
a[min, j]:=t;
end;
end;
{ после того, как отсортировали столбец - проверяем его на наличие дубликатов }
for i := 1 to n - 1 do begin
if a[i, j]=a[i+1, j] then begin
writeln ('da',' ',j);
break; { <--- нашли - печатаем и выходим!!! чтобы не было несколько "Да" на столбец }
end;
end;
end;
{ это - матрица с отсортированными столбцами }
for i:=1 to n do begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
readln;
end.
Большое спасибо