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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2014, 19:33   #1
yulia.a
Пользователь
 
Регистрация: 08.03.2014
Сообщений: 21
По умолчанию Двумерные массивы. Ошибка 26

В Интернете очень много подобного по этой 26 ошибке, что-то связано с несовпадением типов, но, как ее исправить, все равно понятнее не стало. Как сделать правильно?
Ошибка в этой строке:
Код:
a[i,j]:=(2*b[i,j]+bmin)/(bmax);
Код целиком:
Код:
Program L;
  Const
    n=3;
    m=4;
  Type 
    matr:array[1..n,1..m] of integer;
    i,j,bmin,bmax: integer;
  Begin
    randomize;
    writeln(‘Матрица В: ‘);
    for i:=1 to n do 
      begin
        for j:=1 to m do
          begin
            b[i,j]:=random(31)-15;
            write(b[i,j]:3,’ ‘:3);
          end;
          writeln;
      end;
      bmax:=b[1,1]
      for i:=1 to n do
        for j:=1 to m do
          begin
            if b[i,j]>bmax
              then
                bmax:=b[i,j];
          end;
          writeln(‘Max – ‘,bmax);
      bmin:=b[1,1]
      for i:=1 to n do
        for j:=1 to m do
          begin
            if b[i,j]<bmin
              then
                bmin:=b[i,j];
          end;
          writeln(‘Min – ‘,bmin);
      for i:=1 to n do
        for j:=1 to m do
          begin
            a[i,j]:=(2*b[i,j]+bmin)/(bmax);
            write(a[i,j]:3,’ ‘:3);
          end;
          writeln;
  End.
yulia.a вне форума Ответить с цитированием
Старый 03.05.2014, 19:45   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Код целиком:
Чет не верится..

Цитата:
matr:array[1..n,1..m] of integer;
У Вас массив целых чисел
Цитата:
a[i,j]:=(2*b[i,j]+bmin)/(bmax);
А в результате получается вещественное число..
Poma][a вне форума Ответить с цитированием
Старый 03.05.2014, 19:51   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

пока вот что замечено:
1. Поменяйте слово type на слово var
2. Объявите массив b
3. замените символы ` на '
Вадим Мошев вне форума Ответить с цитированием
Старый 03.05.2014, 21:27   #4
yulia.a
Пользователь
 
Регистрация: 08.03.2014
Сообщений: 21
По умолчанию

Поменяла массив целых чисел integer на массив вещественных чисел real. Программа запустилась, но в исходной матрице выводятся непонятные огромные числа (ниже скрин), да и матрица А, наверное, из-за этого тоже неправильная. Помогите, пожалуйста, исправить.

Код:
Program L;
  Const
    n=3;
    m=4;
  Type 
    matr:array[1..n,1..m] of real;
  Var
    a,b:matr;
    i,j: integer;
    bmin,bmax:real;
  Begin
    randomize;
    writeln(‘Исходная матрица В: ‘);
    for i:=1 to n do 
      begin
        for j:=1 to m do
          begin
            b[i,j]:=random(31)-15;
            write(b[i,j]:3:0,’ ‘:3);
          end;
          writeln;
      end;
      bmax:=b[1,1];
      for i:=1 to n do
        for j:=1 to m do
          begin
            if b[i,j]>bmax
              then
                bmax:=b[i,j];
          end;
          writeln(‘Max – ‘,bmax:0:0);
      bmin:=b[1,1];
      for i:=1 to n do
        for j:=1 to m do
          begin
            if b[i,j]<bmin
              then
                bmin:=b[i,j];
          end;
          writeln(‘Min – ‘,bmin:0:0);
      writeln('Матрица А:');
      for i:=1 to n do
        begin
          for j:=1 to m do
            begin
              a[i,j]:=(2*b[i,j]+bmin)/(bmax);
              write(a[i,j]:3:5,’ ‘:3);
            end;
            writeln;
        end;
  End.
Изображения
Тип файла: jpg Безымянный.JPG (10.4 Кб, 22 просмотров)

Последний раз редактировалось yulia.a; 03.05.2014 в 21:47.
yulia.a вне форума Ответить с цитированием
Старый 03.05.2014, 21:39   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

И что это компилируется? Смотрите как тип объявляете. Да и точек с запятой в паре мест не хватает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.05.2014, 21:46   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Меня шушуть настораживает тот факт, что у ТС в коде во WriteLn'e русские букофки, а на скрине уже транслит..
Poma][a вне форума Ответить с цитированием
Старый 03.05.2014, 21:56   #7
yulia.a
Пользователь
 
Регистрация: 08.03.2014
Сообщений: 21
По умолчанию

Да, это, как ни странно, даже компилируется и запускается...
А что не так в его объявлении? Потому что делала по примеру в методичке, там было так.
Точки с запятой в самой программе-то есть, здесь пропустила, наверное, когда печатала)

Здесь русские буквы, а там транслит, потому что сюда печатала вручную и перешла на русский, а в Турбо Паскале на русский не переключается, поэтому на английском, а так это одна и та же программа)

Так в чем же моя ошибка я никак не могу понять?
yulia.a вне форума Ответить с цитированием
Старый 03.05.2014, 21:59   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
Program L;
  Const
    n=3;
    m=4;
  Type 
    matr=array[1..n,1..m] of real;
  Var
    a,b:matr;
    i,j: integer;
    bmin,bmax:real;
  Begin
    randomize;
    writeln('Исходная матрица В: ');
    for i:=1 to n do 
      begin
        for j:=1 to m do
          begin
            b[i,j]:=random(31)-15;
            write(b[i,j]:3:0,' ':3);
          end;
          writeln;
      end;
      bmax:=b[1,1];
      for i:=1 to n do
        for j:=1 to m do
          begin
            if b[i,j]>bmax
              then
                bmax:=b[i,j];
          end;
          writeln('Max – ',bmax:0:0);
      bmin:=b[1,1];
      for i:=1 to n do
        for j:=1 to m do
          begin
            if b[i,j]<bmin
              then
                bmin:=b[i,j];
          end;
          writeln('Min – ',bmin:0:0);
      writeln('Матрица А:');
      for i:=1 to n do
        begin
          for j:=1 to m do
            begin
              a[i,j]:=(2*b[i,j]+bmin)/(bmax);
              write(a[i,j]:3:5,' ':3);
            end;
            writeln;
        end;
  End.
Попробуйте так..
Poma][a вне форума Ответить с цитированием
Старый 03.05.2014, 22:14   #9
yulia.a
Пользователь
 
Регистрация: 08.03.2014
Сообщений: 21
По умолчанию

Насколько я вижу, изменилось только ` на ', но дело в том, что в синтаксисе самой программы все правильно (просто сюда я ее скопировала из ворда, а там автозамена этого символа), если бы у меня были не те знаки, она бы даже не запустилась, а прога запускается.
Я подозреваю, что неправильно что-то в типах данных, но не понимаю, что конкретно. Потому что в изначальном варианте с массивом integer исходная матрица была с нормальными числами, но не запускалась, а с real дурацкие числа, но при этом запускается...
yulia.a вне форума Ответить с цитированием
Старый 03.05.2014, 22:16   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Дело в том, что у меня всё работает.. и работает правильно.тыц
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерные массивы, двумерные массивы, строки Sand093 C++ Builder 11 20.05.2012 21:48
Ошибка в подпрограмме. Basic. Двумерные массивы Cimilia Помощь студентам 9 24.02.2012 14:58
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
Двумерные массивы, С Ciel Помощь студентам 2 07.01.2012 19:58
Двумерные массивы(массивы указателей на массивы) krytishka99 Помощь студентам 1 29.12.2011 19:51