Страница 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.