Двумерный массив, Pascal
Помогите решить задачку в паскале.
Ввести двумерный массив чисел, содержащий N строк и М столбцов. Значения N и М задать самим и лучше взять небольшие, например, 4 строки и 6 столбцов.
Выполнить обработку по варианту: Преобразовать массив, элементы той строки матрицы, в которой находится максимальный элемент матрицы, заменить на нули.
Исходный массив и результаты вывести на экран, при этом двумерный массив выводить в форме матрицы.
Для отладки программы значения элементов массива придумать самим.
Ввести двумерный массив чисел, содержащий N строк и М столбцов. Значения N и М задать самим и лучше взять небольшие, например, 4 строки и 6 столбцов.
Выполнить обработку по варианту: Преобразовать массив, элементы той строки матрицы, в которой находится максимальный элемент матрицы, заменить на нули.
Исходный массив и результаты вывести на экран, при этом двумерный массив выводить в форме матрицы.
Для отладки программы значения элементов массива придумать самим.
Код: Выделить всё
for i:=1 to m do
for j:=1 to n do
if A[imax,jmax]<A[i,j] then
begin imax:=i; jmax:=j; end;
for i:=1 to m do
A[i, jmax]:=0;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Что то я не понял как делать, код должен выглядеть так?
Если можете исправте как правильно
Код: Выделить всё
program chibi;
uses crt;
var
a:array [1..100,1..100] of integer;
m,n,imax,jmax,i,j:integer;
begin clrscr;
write('m = ');
read (m);
write('n = ');
read (n);
for i:=1 to m do
for j:=1 to n do
if A[imax,jmax]<A[i,j] then
begin imax:=i;
jmax:=j;
end;
for i:=1 to m do
A[i,jmax]:=0;
readkey;
end.
а ты пробовал запускать в ТР?
да, но все что я могу сделать это ввести m и n.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Обработка массива есть а ввода нет! 
После ввода N
Сделайте
А в конце еще и вывод результата:

После ввода N
Сделайте
Код: Выделить всё
for i:=1 to m do for j:=1 to n do begin
writeln('A[', i , ',' , j, ']:=');
readln(A[i,j]);
end;
Код: Выделить всё
for i:=1 to m do begin
for j:=1 to n do write(A[i,j]:6);
writeln;
end;
Сделал как вы говорили теперь ввежу m, n и заполняю масив но он ничего не вводит. Вот как выглядит у меня код:
В чем может быть проблема?
Код: Выделить всё
program chibi;
uses crt;
var
a:array [1..100,1..100] of integer;
m,n,imax,jmax,i,j:integer;
begin clrscr;
write('m = ');
read (m);
write('n = ');
read (n);
for i:=1 to m do for j:=1 to n do begin
writeln('A[',i,',',j,']:=');
readln(A[i,j]);
end;
for i:=1 to m do
for j:=1 to n do
if A[imax,jmax]<A[i,j] then
begin imax:=i;
jmax:=j;
end;
for i:=1 to m do
A[i,jmax]:=0;
for i:=1 to m do begin
for j:=1 to n do writeln(A[i,j]:6);
writeln;
end;
readkey;
end.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Нет никакой проблемы.
Код рабочий. Все выводится.
Правда из-за "writeln(A[i,j]:6)" результат не похож на двумерный массив.
Замените на write(A[i,j]:6);
Код рабочий. Все выводится.
Правда из-за "writeln(A[i,j]:6)" результат не похож на двумерный массив.
Замените на write(A[i,j]:6);
странно, допустим я ввел n = 3 m = 3 и когда я ввожу А[3,3] у меня ничего не выводт просто выбрасует и все. В Command shel пишет:
Runtime error 201 at ...
Runtime error 201 at ...
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
А, чёрт... Ну да...
imax и jmax -то у нас не проинициализированы, стало быть равны нулю, а А[0,0] - это выход индекса за пределы массива.
В следующий раз внимательно читайте сообщение об ошибке.
После runtime error TP возвращается в среду разработки и сообщение об ошибке показывается в верхней строке. Там небось и написано, что был выход индекса за пределы.
У меня проверка индексов по выключена по умолчанию. Поэтому я и не заметил ошибку. Вот окончательный вариант:
PS
Использование CRТ я убрал, так как нету TP у меня под рукой. Только Delphi.
imax и jmax -то у нас не проинициализированы, стало быть равны нулю, а А[0,0] - это выход индекса за пределы массива.
В следующий раз внимательно читайте сообщение об ошибке.
После runtime error TP возвращается в среду разработки и сообщение об ошибке показывается в верхней строке. Там небось и написано, что был выход индекса за пределы.
У меня проверка индексов по выключена по умолчанию. Поэтому я и не заметил ошибку. Вот окончательный вариант:
Код: Выделить всё
var
a:array [1..100,1..100] of integer;
m,n,imax,jmax,i,j:integer;
begin
write('m = ');
read (m);
write('n = ');
read (n);
for i:=1 to m do for j:=1 to n do begin
write('A[',i,',',j,']:=');
readln(A[i,j]);
end;
imax:=1;jmax:=1;
for i:=1 to m do for j:=1 to n do if A[imax,jmax]<A[i,j] then begin
imax:=i;
jmax:=j;
end;
for i:=1 to m do A[i,jmax]:=0;
for i:=1 to m do begin
for j:=1 to n do write(A[j,i]:6);
writeln;
end;
readln;
end.
Использование CRТ я убрал, так как нету TP у меня под рукой. Только Delphi.