Двумерный массив, Pascal

PCJakeD
Сообщения: 19
Зарегистрирован: 13 ноя 2008, 01:34

Помогите решить задачку в паскале.
Ввести двумерный массив чисел, содержащий N строк и М столбцов. Значения N и М задать самим и лучше взять небольшие, например, 4 строки и 6 столбцов.
Выполнить обработку по варианту: Преобразовать массив, элементы той строки матрицы, в которой находится максимальный элемент матрицы, заменить на нули.
Исходный массив и результаты вывести на экран, при этом двумерный массив выводить в форме матрицы.
Для отладки программы значения элементов массива придумать самим.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Код: Выделить всё

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;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
PCJakeD
Сообщения: 19
Зарегистрирован: 13 ноя 2008, 01:34

Что то я не понял как делать, код должен выглядеть так?

Код: Выделить всё

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.
Если можете исправте как правильно
Mary Yu
Сообщения: 40
Зарегистрирован: 24 сен 2008, 00:15

а ты пробовал запускать в ТР?
PCJakeD
Сообщения: 19
Зарегистрирован: 13 ноя 2008, 01:34

да, но все что я могу сделать это ввести m и n.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Обработка массива есть а ввода нет! :)

После ввода 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;
PCJakeD
Сообщения: 19
Зарегистрирован: 13 ноя 2008, 01:34

Сделал как вы говорили теперь ввежу 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);
PCJakeD
Сообщения: 19
Зарегистрирован: 13 ноя 2008, 01:34

странно, допустим я ввел n = 3 m = 3 и когда я ввожу А[3,3] у меня ничего не выводт просто выбрасует и все. В Command shel пишет:
Runtime error 201 at ...
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

А, чёрт... Ну да...
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.
Ответить