Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2020, 12:41   #1
maverick231
Пользователь
 
Регистрация: 17.11.2020
Сообщений: 15
Восклицание Выход за пределы массива

Программа должна находить последнюю строку матрицы, в которой все символы одинаковы.
Проблема в том, что она выходит за пределы как строк, так и столбцов. Помогите, пожалуйста, разобраться в чём может быть проблема.

Код:
program 1212;

{$APPTYPE CONSOLE}
{$R+}
uses SysUtils;
var
 A: array[1..5,1..5] of Char;
 dat,res: textfile;
 ans,err, n, i, j, m, cnt: integer;
 flag: boolean;
begin
  assignfile(dat,paramstr(1));
  assignfile(res,paramstr(2));
  cnt:=0;err:=0;ans:=0;
  try//1
   reset(dat);
    try//2
      try//3
       readln(dat,n); readln(dat,m);
       for i := 1 to n do
         begin
          for j := 1 to m do
           read(dat,a[i][j]);
           readln(dat);
         end;
       i := n; flag:=false;
       while (n >= i)  and ( flag=false)  do
        begin
         j:=1; cnt:=1;
         while (A[i][j] = A[i][j+1]) and (j < m) do
          begin
           inc(cnt);
           inc(j);
           end;
         if (cnt=m) then
          begin
          ans:=i;
          flag:=true;
          end;
          i:=i-1;
        end;
      except err:=2
      end; //3
    finally closefile(dat)
    end; //2
  except err:=1
  end; //1
  if err>0 then
   begin
     case err of
     1: writeln('Не удалось открыть файл с входными данными');
     2: writeln('Некорректные данные в файле');
     end;
   writeln('Enter...');
   exit;
   end;
 try//4
   try//5
   rewrite(res);
      try//6
      writeln(res,'A(',n,'x',m,')');
      for i:=1 to n do
        begin
         for j:=1 to m do write(res, a[i,j],' ');
         writeln(res);
        end;
      if ans<>0 then writeln(res,ans,' - Номер строки')
      else
       writeln(res,'Строк с одинаковыми элементами - нет');
     except err:=4
     end;//6
   finally closefile(res)
   end;//5
 except err:=3
 end; //4
  if err>0 then
   begin
     case err of
     3: writeln('Не удалось создать выходной файл');
     4: writeln('Не удалось вывести выходные данные');
     end;
   writeln('Enter...');
   exit;
   end;
 writeln('OK');
end.
maverick231 вне форума Ответить с цитированием
Старый 17.11.2020, 13:54   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Код:
i := n;
while (n >= i)  and ( flag=false)  do
begin
  ...
  i:=i-1;
end;
Может в условие поставить i>0?
Arigato вне форума Ответить с цитированием
Старый 17.11.2020, 15:05   #3
maverick231
Пользователь
 
Регистрация: 17.11.2020
Сообщений: 15
По умолчанию

Не помогает
maverick231 вне форума Ответить с цитированием
Старый 17.11.2020, 15:46   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
readln(dat,n); readln(dat,m);
if n>5 then ... ; // очень много строк(столбцов)
if m>5 then ... ; //очень много столбцов(строк)
Цитата:
Код:
 while (A[i][j] = A[i][j+1]) and (j < m) do
m=5 j=m ???
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 17.11.2020 в 15:50.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка -ошибка:выход за пределы массива Вероника99 C# (си шарп) 14 19.11.2015 23:43
Выход за пределы массива NFXrus Помощь студентам 10 09.12.2011 23:13
выход за пределы массива(с++) Lazy maximka Помощь студентам 2 13.11.2011 16:11
C++ выход за пределы строки (char) Alex11223 Помощь студентам 4 20.04.2011 20:27
C++ - выход за пределы массива kefir Помощь студентам 5 12.06.2010 14:09