Ошибка выполнения 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.