Двойной за выпуск индекса цикла - PullRequest
0 голосов
/ 12 октября 2018

Я изучал Delphi сегодня и столкнулся со странной ошибкой:

type
  TMatriz = array[1..10,1..10] of Integer;

var
  i, j: Integer;
  tablaDeMultiplicar: TMatriz;

begin
  for i := 1 to 10 do
  begin
    for j := 1 to 10 do
    begin
      tablaDeMultiplicar[i-1,j-1] := i*j;
    end;
  end;
  for i := 0 to 9 do
  begin
    for j := 0 to 9 do
    begin
      Write(tablaDeMultiplicar[i,j]:6);
    end;
    Writeln;
  end;
  Readln;
end.

Это, насколько я знаю, показывает таблицу умножения.Прямо сейчас он показывает строку 1 2 ... 9 0, остальные 0.

Когда я пытаюсь изменить индексы с 1 и 10 на 0 и 9 и соответственно скорректировать линию, он ничего не показывает.Я пробовал другие вещи, и я только заставил его работать таким образом:

Program working weirdly

Единственный вывод, который я здесь получил, заключается в том, что вы не можете работать с переменнымииз за: /

1 Ответ

0 голосов
/ 12 октября 2018

Ваши индексы отключены на 1. Ваш tablaDeMultiplicar объявлен как:

TMatriz = array[1..10,1..10] of Integer;

Имеет индексы [1..10, 1..10]

Но вы получаете к нему доступ с индексами 0..9 и0..9:

for i := 1 to 10 do
begin
  for j := 1 to 10 do
  begin
    tablaDeMultiplicar[i-1,j-1] := i*j;  // i-1 and j-1 are 0..9 each

Измените это на:

    tablaDeMultiplicar[i,j] := i*j;

И измените также свой второй набор циклов.В целом:

{$R+}{$Q+}
type
  TMatriz = array[1..10, 1..10] of Integer;

var
  i, j: Integer;
  tablaDeMultiplicar: TMatriz;

begin
  for i := 1 to 10 do
  begin
    for j := 1 to 10 do
    begin
      tablaDeMultiplicar[i, j] := i * j;
    end;
  end;
  for i := 1 to 10 do
  begin
    for j := 1 to 10 do
    begin
      Write(tablaDeMultiplicar[i, j]:6);
    end;
    Writeln;
  end;
  Readln;
end.

Примечание: нет 1..11 или for 0 to 10 do в любом месте.1 и 10 все время, потому что именно так вы объявили TMatriz.

, который компилируется и работает так, как ожидалось:

     1     2     3     4     5     6     7     8     9    10
     2     4     6     8    10    12    14    16    18    20
     3     6     9    12    15    18    21    24    27    30
     4     8    12    16    20    24    28    32    36    40
     5    10    15    20    25    30    35    40    45    50
     6    12    18    24    30    36    42    48    54    60
     7    14    21    28    35    42    49    56    63    70
     8    16    24    32    40    48    56    64    72    80
     9    18    27    36    45    54    63    72    81    90
    10    20    30    40    50    60    70    80    90   100

Иприслушайтесь к этому совету @LURD: Активируйте проверку диапазона и переполнения на этапе разработки.Это быстро обнаружит ошибки такого рода .

Кроме того, если у вас есть такие проблемы, попробуйте для отладки вашего кода.Это проще, чем вы думаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...