Страница 1 из 2
Двумерный массив, Pascal
Добавлено: 13 ноя 2008, 22:42
PCJakeD
Помогите решить задачку в паскале.
Ввести двумерный массив чисел, содержащий N строк и М столбцов. Значения N и М задать самим и лучше взять небольшие, например, 4 строки и 6 столбцов.
Выполнить обработку по варианту: Преобразовать массив, элементы той строки матрицы, в которой находится максимальный элемент матрицы, заменить на нули.
Исходный массив и результаты вывести на экран, при этом двумерный массив выводить в форме матрицы.
Для отладки программы значения элементов массива придумать самим.
Re: Двумерный массив, Pascal
Добавлено: 15 ноя 2008, 12:36
Хыиуду
Код: Выделить всё
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;
Re: Двумерный массив, Pascal
Добавлено: 26 ноя 2008, 18:45
PCJakeD
Что то я не понял как делать, код должен выглядеть так?
Код: Выделить всё
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.
Если можете исправте как правильно
Re: Двумерный массив, Pascal
Добавлено: 26 ноя 2008, 19:31
Mary Yu
а ты пробовал запускать в ТР?
Re: Двумерный массив, Pascal
Добавлено: 26 ноя 2008, 19:49
PCJakeD
да, но все что я могу сделать это ввести m и n.
Re: Двумерный массив, Pascal
Добавлено: 27 ноя 2008, 18:19
Naeel Maqsudov
Обработка массива есть а ввода нет!
После ввода 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;
Re: Двумерный массив, Pascal
Добавлено: 27 ноя 2008, 20:14
PCJakeD
Сделал как вы говорили теперь ввежу 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.
В чем может быть проблема?
Re: Двумерный массив, Pascal
Добавлено: 27 ноя 2008, 22:40
Naeel Maqsudov
Нет никакой проблемы.
Код рабочий. Все выводится.
Правда из-за "writeln(A[i,j]:6)" результат не похож на двумерный массив.
Замените на write(A[i,j]:6);
Re: Двумерный массив, Pascal
Добавлено: 27 ноя 2008, 23:54
PCJakeD
странно, допустим я ввел n = 3 m = 3 и когда я ввожу А[3,3] у меня ничего не выводт просто выбрасует и все. В Command shel пишет:
Runtime error 201 at ...
Re: Двумерный массив, Pascal
Добавлено: 28 ноя 2008, 01:34
Naeel Maqsudov
А, чёрт... Ну да...
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.
PS
Использование CRТ я убрал, так как нету TP у меня под рукой. Только Delphi.