Ошибка выполнения 201 при добавлении константной строки в переменную PASCAL

Здравствуйте, мне дали задание на чтение файла ввода трехзначных сокращений месяца и дня, и я должен вычислить юлианскую дату для каждого (сумма дней с 1 января). Независимо от того, что я делаю, когда добавляю два INTEGERS, я получаю ошибку 201 (несовместимые типы данных). Я попытался создать новую программу и заставить ее работать, но как только я внедрил ее в свой существующий код, она больше не работает. Это очень расстраивает, пожалуйста, помогите. Я устал от этого глупого класса, заставляющего меня говорить на этом языке, где я не могу найти дерьмо онлайн, чтобы помочь. Вот код:

program prg6_150;
const
      MONABV:array[1..12] of string[03] = ('JAN','FEB','MAR','APR','MAY','JUN',
                                           'JUL','AUG','SEP','OCT','NOV','DEC');
      MONDAYS:array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);

var
      more_rec:Boolean;                    { EOF flag }
      DAY:integer;                         { input day }
      MONTH:string[03];                    { input month abbreviation }
      JULIAN:integer;                      { computed Julian day }
      ch:char;                             { spacer character for input }
      FileIn:Text;
      FileOut:Text;

{ your module, to be called "JULIAN_DAY" inserted here }


    procedure JULIAN_DAY;
    var
    j,sum_days:integer;
    begin
    j := 0;
    sum_days := 0;
    if MONTH = 'JAN' then j := 1 else
    if MONTH = 'FEB' then j := 2 else
    if MONTH = 'MAR' then j := 3 else
    if MONTH = 'APR' then j := 4 else
    if MONTH = 'MAY' then j := 5 else
    if MONTH = 'JUN' then j := 6 else
    if MONTH = 'JUL' then j := 7 else
    if MONTH = 'AUG' then j := 8 else
    if MONTH = 'SEP' then j := 9 else
    if MONTH = 'OCT' then j := 10 else
    if MONTH = 'NOV' then j := 11 else
    if MONTH = 'DEC' then j := 12; 
    for J:= 2 to 12 do
    repeat
        sum_days := MONDAYS[1] + sum_days;
        j := j - 1
    until j = 1;
    Julian := DAY + sum_days;
    end;

    procedure read_rec;
    begin
      if Eof(FileIn) then
        more_rec := False
      else
        readln(FileIn,day,ch,month)
    end;  { read_rec }

    procedure initialize;
    begin
      more_rec := True;
      Assign(FileIn,'JULIAN.DAT');
      Reset(FileIn);
      Assign(FileOut,'JULIAN.OUT');
      Rewrite(FileOut);
      read_rec
    end;  { initialize }

    procedure process;
    begin
      Julian_Day;
      writeln(FileOut,day:2,' ',month,' ',julian:3);
      read_rec
    end;  { process }

    procedure wrapup;
    begin
      Close(FileOut);
      Close(FileIn)
    end;  { wrapup }

    begin  { main }
      initialize;
      while more_rec do
        process;
      wrapup
    end.

Ошибка командной строки

1 ответ

Ошибка выполнения 201 не означает incompatible types! Это значит Range check error как задокументировано:

201 Ошибка проверки диапазона Если вы скомпилировали свою программу с включенной проверкой диапазона, вы можете получить эту ошибку в следующих случаях:

1. Доступ к массиву с индексом за пределами заявленного диапазона.

2. Попытка присвоить значение переменной вне ее диапазона (например, перечисляемый тип).

Другая ошибка в вашем коде заключается в том, что вы меняете for loop управляющий j в цикле. Это не разрешено. Вы должны оставить управляющую переменную в покое и использовать отдельную переменную, которую вы можете изменять по мере необходимости.

Вы должны переосмыслить свои вложенные for loop а также repeat .. until, Возможно, беспорядок был создан во время проб и ошибок, чтобы исправить ошибку 201.

Другие вопросы по тегам