Pascal ошибка при запуске программы

Неописанная переменная

begin
  S := 1; // Неизвестное имя S
end.

Все используемые переменные должны быть предварительно описаны с помощью ключевого слова var (внутри блока begin/end или, что обычно хуже, в разделе описаний вначале программы).

Отсутствующая ;

begin
  var S: integer 
  S := 1;         // Компилятор здесь скажет: Ожидалась ; — имеется ввиду предыдущая строка!
end.
begin
  var S := 1 
  S := S + 1  // Аналогично: проблема на предыдущей строке, а на текущей нет, потому что после неё идёт end.
end.

Очень частая ошибка у начинающих. Курсор, как правило, позиционируется в начале следующей строки.

Несовместимость типов при присваивании

begin
  var S: integer := 1.3; // Нельзя преобразовать тип real к integer
end.

Безболезненно можно присваивать только данные одного типа. Если данные — разных типов, то в редких случаях можно преобразовать данные одного типа в данные другого. Например, целое можно преобразовать в вещественное, а символ — в строку. Обратные преобразования не допускаются.

Чтобы не ошибаться в подобных простых случаях в Паскале есть следующая краткая форма объявления и инициализации переменной:

begin
  var S := 1.3; // Тип real будет выведен компилятором автоматически
end.

Отсутствие закрывающего апострофа литеральной строки

begin
  var x := 2;   // x получает тип integer
  var y := 3;   // y получает тип integer
  writeln('Результат сложения равен =, x + y); // Не хватает закрывающего апострофа
end.

Закрыть апостроф надо на той же строке, где расположен открывающий апостроф

Ошибки расстановки запятых и апострофов при выводе строк и выражений

begin
  var x := 2;   // x получает тип integer
  var y := 3;   // y получает тип integer
  writeln(x, '+,' y, '=', x+y); // Неверная расстановка запятых и апострофов
end.

Слишком много запятых и апострофов рядом, потому начинающие часто путаются  :)
Надо уяснить правила:

  • запятые разделяют разные элементы вывода
  • все, что находится в апострофах, будет выведено на экран без изменений

Ошибка ввода

begin
  var x: integer;
  read(x); // введите блаблабла и посмотрите, что получится
end.

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

Аналогичный фрагмент в более современном и предпочтительном синтаксисе:

begin
  var x := ReadInteger;
end.

Ошибка неинициализированной переменной

begin
  var x: integer;
  // Забыли инициализировать или ввести x
  var r := x * x;  // r получает тип integer
  writeln('Квадрат числа ', x, ' = ', r);
end.

Перед использованием любую переменную надо ввести или присвоить ей начальное значение. Это действие называется инициализацией переменной.

Деление на 0

begin
  var x := 0;
  var c := 666 div x; // Здесь происходит деление на 0
end.

Если во время выполнения программа выполнит деление на 0, то она завершится с ошибкой.

Корень из отрицательного числа

begin
  writeln(sqrt(-1)); // Корень из отрицательного числа 
end.

В обычном Паскале возникает ошибка времени выполнения.
В PascalABC.NET выводится NaN — Not a Number

Ссылки

  • Программы для начинающих
  • Сайт PascalABC.NET: Программы и алгоритмы для начинающих
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
unit ЕГЭ;
 
const
  числоПредметов = 5;
  длинаНазванияПредмета = 12;
  Предметы : array [1..числоПредметов] of String[длинаНазванияПредмета] = ('математика', 'информатика', 'физика', 'русский язык', 'химия');
  имяФайлаБД = 'СписокУчеников.БД';
  
const
  имяФайлаСреднийБалл             = 'Средний балл.txt';
  имяФайлаМаксимальныйБалл        = 'Максимальный балл.txt';
  имяФайлаНаибольшийСуммарныйБалл = 'Наибольший суммарный балл.txt';
  имяФайлаНепреодавелшихПорог     = 'Непреодалевшие порог.txt';
 
type
  типУченик = record
    Фамилия : String[20];
    Имя     : String[15];
    Школа   : Byte;
    Баллы   : array [1..числоПредметов] of Byte;
    
    function СуммаБаллов : Integer;
    begin
      Result := 0;
      for var i := 1 to числоПредметов do Result += Баллы[i];
    end;
  end;
  
var СписокИзменён := False;
 
function rnd : List<типУченик>;
const
  mNames  = ' Александр Максим  Иван      Артём  Никита Дмитрий Егор     Даниил     Михаил  Андрей  '
          + ' Алексей   Илья    Владислав Марк   Сергей Роман   Владимир Тимофей    Матвей  Николай '
          + ' Павел     Арсений Денис     Степан Фёдор  Данила  Антон    Глеб       Ярослав Семйн   '
          + ' Григорий  Игорь   Евгений   Тимур  Руслан Пётр    Вячеслав Вадим      Василий Олег    '
          + ' Виктор    Юрий    Артемий   Леонид Давид  Кирилл  Лев      Константин Артур   Георгий ';
  wNames  = ' Анастасия Анна       Мария    Елена     Дарья    Алина     Ирина    Екатерина Арина    Полина '
          + ' Ольга     Юлия       Татьяна  Наталья   Виктория Елизавета Ксения   Милана    Вероника Алиса  '
          + ' Валерия   Александра Ульяна   Кристина  София    Марина    Светлана Варвара   Софья    Диана  '
          + ' Яна       Кира       Ангелина Маргарита Ева      Алёна     Дарина   Карина    Василиса Олеся  '
          + ' Аделина   Оксана     Таисия   Надежда   Евгения  Элина     Злата    Есения    Милена   Вера   ';
  Fam     = ' Иванов   Cмирнов   Кузнецов Попов     Васильев   Петров      Соколов   Михайлов Новиков   Фёдоров   '
          + ' Морозов  Волков    Алексеев Лебедев   Семёнов    Егоров      Павлов    Козлов   Степанов  Николаев  '
          + ' Орлов    Андреев   Макаров  Никитин   Захаров    Зайцев      Соловьёв  Борисов  Яковлев   Григорьев '
          + ' Романов  Воробьёв  Сергеев  Кузьмин   Фролов     Александров Дмитриев  Королёв  Гусев     Кисилёв   '
          + ' Ильин    Максимов  Поляков  Сорокин   Виноградов Ковалёв     Белов     Медведев Антонов   Тарасов   '
          + ' Жуков    Баранов   Филиппов Комаров   Давыдов    Беляев      Герасимов Богданов Осипов    Сидоров   '
          + ' Матвеев  Титов     Марков   Миронов   Крылов     Куликов     Карпов    Влавов   Мельников Денисов   '
          + ' Гаврилов Тихонов   Казаков  Афанасьев Данилов    Савельев    Тимофеев  Фомин    Чернов    Абрамов   '
          + ' Мартынов Ефимов    Фёдотов  Щербаков  Назаров    Калинин     Исаев     Чернышёв Быков     Маслов    '
          + ' Родионов Коновалов Лазарев  Воронин   Климов     Филатов     Пономарёв Голубев  Кудрявцев Прохоров  ';
begin
  Result := New List<типУченик>;
  var(aFam,aMNames,aWNames) := (Fam.ToWords(' '),mNames.ToWords(' '),wNames.ToWords(' '));
  loop Random(100,500) do
    begin
      var f,n : String;
      var inList : Boolean;
      repeat
        case Random(2) of
          0 : // мальчик
              (f,n) := (aFam[Random(aFam.Count)],aMNames[Random(aMNames.Count)]);
          1 : // девочка
              (f,n) := (aFam[Random(aFam.Count)]+'а',aWNames[Random(aMNames.Count)]);
        end;
      until Result.Count(x->((x.Фамилия = f) and (x.Имя = n))) = 0;
      
      var Ученик : типУченик;
      (Ученик.Фамилия, Ученик.Имя, Ученик.Школа) := (f,n,Random(1,100));
      
      case Random(6) of
        1 : // Почти полный отличник
            for var i := 1 to числоПредметов do Ученик.Баллы[i] := Random(90,100);
        2 : // Средний балл около 75
            for var i := 1 to числоПредметов do Ученик.Баллы[i] := Random(50,100);
        3 : // Твёрдая четвёрка, но не отлично
            for var i := 1 to числоПредметов do Ученик.Баллы[i] := Random(50,90);
        4 : // Твёрдая тройка - почти отлично
            for var i := 1 to числоПредметов do Ученик.Баллы[i] := Random(25,90);
        5 : // Ниже среднего
            for var i := 1 to числоПредметов do Ученик.Баллы[i] := Random(10,75);
      else // Совершенно случайное распредедение
        for var i := 1 to числоПредметов do Ученик.Баллы[i] := Random(0,100);
      end;
      
      Result.Add(Ученик);
    end;
    
  СписокИзменён := True;
end;
 
function ВоостановитьСписокИзФайла(начальныйСписок : List<типУченик> := nil) : List<типУченик>;
begin
  if начальныйСписок <> nil then
    begin
      var Ответ := ReadLnString('Текущее состояние списка будет утеряно.' + NewLine +
      'Действительно хотите восстановить? (1 - да / иначе - нет) >').Trim;
      if (Ответ.Length > 0) and (Ответ[1] = '1') then
      else
        begin
          Result := начальныйСписок;
          Exit;
        end;
    end;
    
  Result := New List<типУченик>;
  if Not System.IO.File.Exists(имяФайлаБД) then Exit;
  var f : File of типУченик;
  Reset(f, имяФайлаБД);
  
  var Ученик : типУченик;
  while Not EOF(f) do
    begin
      Read(f, Ученик);
      Result.Add(Ученик);
    end;
  
  Close(f);
  СписокИзменён := False;
end;
 
procedure СохранитьСписокВФайл(Список : List<типУченик>);
begin
  if Not СписокИзменён then Exit;
 
  var f : File of типУченик;
  Rewrite(f, имяФайлаБД);
  
  foreach var Ученик in Список do
    Write(f, Ученик);
  
  Close(f);
  СписокИзменён := False;
end;
 
procedure ВыводСписка(var Список : List<типУченик>);
begin
  var s : String := '';
  foreach var w in Предметы do s += Format('{0,' + (длинаНазванияПредмета+1) + '} |', w);
  WriteLn(' № п/п |         Фимилия, Имя ученика         | Школа | ' + s);
  var n := 0;
  foreach var Ученик in Список do
    begin
      n += 1;
      s := '';
      foreach var b in Ученик.Баллы do s += Format('{0,' + (длинаНазванияПредмета+1) + '} |', b);
      WriteLnFormat(' {0,5} | {1,-36} |  {2,3}  | {3}',
      n, Ученик.Фамилия + ' ' + Ученик.Имя, Ученик.Школа, s);
    end;
end;
 
procedure ДобавитьЗапись(var Список : List<типУченик>);
begin
  WriteLn('Данные ученика:');
  var Ученик : типУченик;
  var ПравильныйОтвет : Boolean;
  
  repeat
    var Фамилия := ReadLnString('    Фамилия:').Trim.ToWords(' ').JoinIntoString;
    ПравильныйОтвет := Фамилия.Length > 0;
    if ПравильныйОтвет then
      Ученик.Фамилия := Фамилия
    else
      WriteLn('Ошибка: Фамилия не может быть пустой.' + NewLine +
      'Повторите ввод.');
  until ПравильныйОтвет;
  
  repeat
    var Имя := ReadLnString('        Имя:').Trim.ToWords(' ').JoinIntoString;
    ПравильныйОтвет := Имя.Length > 0;
    if ПравильныйОтвет then
      Ученик.Имя := Имя
    else
      WriteLn('Ошибка: Имя не может быть пустым.' + NewLine +
      'Повторите ввод.');
  until ПравильныйОтвет;
 
  repeat
    var Школа    := ReadLnString('Номер школы:');
    try
      ПравильныйОтвет := StrToInt(Школа).InRange(1,250);
    except
      ПравильныйОтвет := False;
    end;
    if ПравильныйОтвет then
      Ученик.Школа := StrToInt(Школа)
    else
      WriteLn('Ошибка: Необходимо ввести номер школы - число от 1 до 250.' + NewLine +
      'Повторите ввод.');
  until ПравильныйОтвет;
  
  for var i := 1 to числоПредметов do
    repeat
      var Баллы  := ReadLnString('Количество баллов за предмет ' + Предметы[i] + ':');
      try
        ПравильныйОтвет := StrToInt(Баллы).InRange(0,100);
      except
        ПравильныйОтвет := False;
      end;
      if ПравильныйОтвет then
        Ученик.Баллы[i] := StrToInt(Баллы)
      else
        WriteLn('Ошибка: Необходимо ввести баллы - число от 0 до 100.' + NewLine +
        'Повторите ввод.');
    until ПравильныйОтвет;
    
  Список.Add(Ученик);
  СписокИзменён := True;
end;
 
procedure УдалитьЗапись(var Список : List<типУченик>);
begin
  case Список.Count of
    0 : begin
          WriteLn('Список пуст. Нечего удалять!');
          Exit;
        end;
    1 : begin
          var Ученик := Список[0];
          var Ответ := ReadLnString('В базе запись только об одном ученике.' + NewLine +
          'Ученик школы ' + Ученик.Школа + ': ' + Ученик.Фамилия + ' ' + Ученик.Имя + NewLine +
          'Действительно хотите удалить (1 - да / иначе - нет)?').Trim;
          if (Ответ.Length > 0) and (Ответ[1] = '1') then
            begin
              Список.RemoveAt(0);
              WriteLn('Запись 1 удалена.');
              СписокИзменён := True;
            end;
        end;
  else
    var Номер := ReadLnString('Введите номер удаляемой записи (от 1 до ' + Список.Count + ') :');
    try
      if StrToInt(Номер).InRange(1, Список.Count) then
        begin
          var n := Pred(StrToInt(Номер));
          var Ученик := Список[n];
          var Ответ := ReadLnString('Ученик школы ' + Ученик.Школа + ': ' + Ученик.Фамилия + ' ' + Ученик.Имя + NewLine +
          'Действительно хотите удалить (1 - да / иначе - нет)?').Trim;
          if (Ответ.Length > 0) and (Ответ[1] = '1') then
            begin
              Список.RemoveAt(n);
              WriteLn('Запись ' + Succ(n) + ' удалена.');
              СписокИзменён := True;
            end;
        end
      else
        WriteLn('Нет записи с таким номером.');
    except
      WriteLn('Нельзя удаить запись с номером <' + Номер + '>.');
    end;
  end;
end;
 
procedure СписокПоПредметам(Список : List<типУченик>);
begin
  for var n := 1 to числоПредметов do
    begin
      var sList := New List<string>;
      foreach var Ученик in Список do
        sList.Add(Format('{0} {1} {2} {3}', Ученик.Фамилия, Ученик.Имя, Ученик.Школа, Ученик.Баллы[n]));
      var ИмяФайла := Предметы[n] + '.txt';
      WriteAllLines(ИмяФайла, sList.ToArray);
      WriteLn('Создан файл по предмету ' + ИмяФайла);
    end;
  WriteLn('Все файлы созданы.');
end;
 
procedure СохранитьОтчётВФайл(имяФайла : String; sList : List<string>);
begin
  var Ответ := ReadLnString('Сохранить отчёт в файл ' + имяФайла + '? (1 - да / иначе - нет) >').Trim;
  if (Ответ.Length > 0) and (Ответ = '1') then
    begin
      WriteAllLines(имяФайла, sList.ToArray);
      WriteLn('Создан файл ' + имяФайла);
    end;
end;
 
procedure СреднийБалл(Список : List<типУченик>);
begin
  var sList := New List<string>;
  for var n := 1 to числоПредметов do
    begin
      var СреднийБалл := Список.Select(x->Integer(x.Баллы[n])).Average;
      sList.Add(Format('Средний балл по предмету {0,-' + длинаНазванияПредмета + '} = {1:f1}', Предметы[n], СреднийБалл));
    end;
  sList.PrintLines;
  СохранитьОтчётВФайл(имяФайлаСреднийБалл, sList);
end;
 
procedure МаксимальныйБалл(Список : List<типУченик>);
begin
  var sList := New List<string>;
  for var n := 1 to числоПредметов do
    begin
      var МаксимальныйБалл := Список.Select(x->x.Баллы[n]).Max;
      var Максимальные := Список
        .Where(x->x.Баллы[n] = МаксимальныйБалл) // Выбрать только тех, у кого максимальный балл
        .Select(x->Format('{0} {1} школа № {2}', x.Фамилия, x.Имя, x.Школа)); // Представить в виде строки заданного формата
      sList.Add( Format('Максимальный балл по предмету {0,-' + длинаНазванияПредмета + '} = {1} принадлежит ', Предметы[n], МаксимальныйБалл)
        + (Максимальные.Count = 1 ? 'ученику ' + Максимальные.First : 'ученикам' + NewLine + Максимальные.JoinIntoString(NewLine)) );
    end;
  sList.PrintLines;
 
  СохранитьОтчётВФайл(имяФайлаМаксимальныйБалл, sList);
end;
 
procedure МаксимальнаяСуммаБаллов(Список : List<типУченик>);
begin
  var Ответ := ReadLnString('Сколько учеников вывести? (натуральное число или всех) >').Trim;
  var Количество : Integer;
  if Not TryStrToInt(Ответ, Количество) or (Количество < 1) then Количество := Integer.MaxValue;
  Количество := min(Количество, Список.Count);
 
  var sList := New List<string>;
  sList.Add('Список ' + Количество + ' учеников в порядке убывания суммы баллов:');
  sList.Add( Список.OrderByDescending(x->x.СуммаБаллов) // Сортировать в порядке убывания суммы баллов
    .Numerate // Пронумеровать с единицы
    .Where(x->x[0]<=Количество) // Отобрать только первые Количество
    .Select(x->Format('{0}) {1,3} баллов : {2} {3} школа № {4}', x[0], x[1].СуммаБаллов, x[1].Фамилия, x[1].Имя, x[1].Школа)) // Представить в виде строки заданного формата
    .JoinIntoString(NewLine) ); // Соединить в одну строку с разделителем строк в виде переноса строки
  sList.PrintLines;
 
  СохранитьОтчётВФайл(имяФайлаНаибольшийСуммарныйБалл, sList) ;
end;
 
procedure КтоНеПредолелПорог(Список : List<типУченик>);
begin
  var Ответ := ReadLnString('Введите порог? (число больше 0) >').Trim;
  var Порог : Integer;
  if Not TryStrToInt(Ответ, Порог) then begin WriteLn('Порог задан неверно!'); Exit; end;
  
  var sList := New List<string>;
  sList.Add('Список непреодалевших порог в ' + Порог + ' баллов:');
  sList.Add( Список.Where(x->x.СуммаБаллов<=Порог) // Только не преодолевшие порог
    .Numerate // Пронумеровать с единицы
    .Select(x->Format('{0}) {1,3} баллов : {2} {3} школа № {4}', x[0], x[1].СуммаБаллов, x[1].Фамилия, x[1].Имя, x[1].Школа)) // Представить в виде строки заданного формата
    .JoinIntoString(NewLine) ); // Соединить в одну строку с разделителем строк в виде переноса строки
  sList.PrintLines;
 
  СохранитьОтчётВФайл(имяФайлаНепреодавелшихПорог, sList);
end;
 
end.
1 Out of memory (Выход за границы памяти). 2 Identifier expected (Не указан идентификатор). 3 Unknown identifier (Неизвестный идентификатор). 4 Duplicate identifier (Двойной идентификатор). 5 Syntax error (Синтаксическая ошибка). 6 Error in real constant (Ошибка в вещественной константе). 7 Error in integer constant (Ошибка в целой константе). 8 String constant exceeds line (Строковая константа превышает допустимые размеры). 9 Too many nested files (Слишком много вложенных файлов). 10 Unexpected end of file (He найден конец файла). 11 Line too long (Слишком длинная строка) 12 Type identifier expected (Здесь нужен идентификатор типа). 13 Too many open files (Слишком много открытых файлов). 14 Invalid file name (Неверное имя файла). 15 File not found (Файл не найден). 16 Disk full (Диск заполнен). 17 Invalid compiler directive (Неправильная директива компилятора). 18 Too many files (Слишком много файлов). 19 Undefined type in pointer definition (Неопределенный тип в объявлении указателя). 20 Variable identifier expected (Отсутствует идентификатор переменной). 21 Error in type (Ошибка в объявлении типа). 22 Structure too large (Слишком большая структура). 23 Set base type of range (Базовый тип множества нарушает границы). 24 File components may not be files (Компонентами файла не могут быть файлы) . 25 Invalid string length (Неверная длина строки). 26 Type mismatch (Несоответствие типов). 27 Invalid subrange base type (Неправильный базовый тип для типа-диапазона). 28 Lower bound greater than upper bound (Нижняя граница больше верхней). 29 Ordinal type expected (Нужен порядковый тип). 30 Integer constant expected (Нужна целая константа). 31 Constant expected (Нужна константа). 32 Integer or real constant expected (Нужна целая или вещественная константа) . 33 Type identifier expected (Нужен идентификатор типа) 34 Invalid function result type (Неправильный тип результата функции) 35 Label identifier expected (Нужен идентификатор метки). 36 BEGIN expected (Нужен BEGIN). 37 END expected (Нужен END). 38 Integer expression expected (Нужно выражение типа INTEGER). 39 Ordinal expression expected (Нужно выражение перечисляемого типа). 40 Boolean expression expected (Нужно выражение типа BOOLEAN). 41 Operand types do not match operator (Типы операндов не соответствуют операции). 42 Error in expression (Ошибка в выражении). 43 Illegal assignment (Неверное присваивание). 44 Field identifier expected (Нужен идентификатор поля) . 45 Object file too large (Объектный файл слишком большой). 46 Undefined external (Неопределенная внешняя процедура). 47 Invalid object file record (Неправильная запись объектного файла). 48 Code segment too large (Сегмент кода слишком большой). 49 Data segment too large (Сегмент данных слишком велик). 50 DO expected (Нужен оператор DO). 51 Invalid PUBLIC definition (Неверное PUBLIC-определение). 52 Invalid EXTRN definition (Неправильное EXTRN-определение). 53 Too many EXTRN definition (Слишком много EXTRN-определений). 54 OF expected (Требуется OF). 55 INTERFACE expected (Требуется интерфейсная секция). 56 Invalid relocatable reference (Неправильная перемещаемая ссылка). 57 THEN expected (Требуется THEN). 58 TO or DOWNTO expected (Требуется TO или DOWNTO). 59 Undefined forward (Неопределенное опережающее описание). 60 Too many procedures (Слишком много процедур). 61 Invalid typecast (Неверное преобразование типа). 62 Division by zero (Деление на ноль). 63 Invalid file type (Неверный файловый тип). 64 Cannot Read or Write variables of this type (Нет возможности считать или записать переменные данного типа). 65 Pointer variable expected (Нужно использовать переменную-указатель). 66 String variable expected (Нужна строковая переменная). 67 String expression expected (Нужно выражение строкового типа). 68 Circular unit reference (Перекрестная ссылка модулей). 69 Unit name mismatch (Несоответствие имен программных модулей). 70 Unit version mismatch (Несоответствие версий модулей). 71 Duplicate unit name (Повторное имя программного модуля). 72 Unit file format error (Ошибка формата файла модуля). 73 IMPLEMENTATION expected (Отсутствует исполняемая часть модуля). 74 Constant and case types do not match (Типы констант и тип выражения опе- ратора CASE не соответствуют друг другу). 75 Record variable expected (Нужна переменная типа запись). 76 Constant out of range (Константа нарушает границы). 77 File variable expected (Нужна файловая переменная). 78 Pointer expression expected (Нужно выражение типа указатель). 79 Integer or real expression expected (Нужно выражение вещественного или целого типа). 80 Label not within current block (Метка не находится внутри текущего блока) 81 Label already defined (Метка уже определена). 82 Undefined label in processing statement part (Неопределенная метка в предшествующем разделе операторов). 83 Invalid @ argument (Неправильный аргумент операции @). 84 Unit expected (Нужно кодовое слово UNIT). 85 ”;” expected (Нужно указать”;”). 86 ”:” expected (Нужно указать”:”). 87 ”,”expected (Нужно указать”,”). 88 ”(” expected (Нужно указать ”(”). 89 ”)” expected (Нужно указать”)”). 90 ”=” expected (Нужно указать”=”) 91 ”:=” expected (Нужно указать”:=”) 92 ”[” or ”(.”expected (Нужно указать ”[” или ”(.”). 93 ”]” or ”.)” expected (Нужно указать”]” или ”.)”). 94 ”.” expected (Нужно указать”.”) 95 ”..” expected (Нужно указать”..”). 96 Too many variables (Слишком много переменных). 97 Invalid FOR control variable (Неправильный параметр цикла оператора FOR). 98 Integer variable expected (Нужна переменная целого типа). 99 File and procedure types are not allowed here (Здесь не могут использоваться файлы или процедурные типы). 100 String length mismatch (Несоответствие длины строки). 101 Invalid ordering of fields (Неверный порядок полей). 102 String constant expected (Нужна константа строкового типа). 103 Integer or real variable expected (Нужна переменная типа INTEGER или REAL). 104 Ordinal variable expected (Нужна переменная порядкового типа). 105 INLINE error (Ошибка в операторе INLINE) 106 Character expression expected (Предшествующее выражение должно иметь символьный тип). 107 Too many relocation items (Слишком много перемещаемых элементов). 108 Overflow in arithmetic operator (Переполнение при выполнении арифметического оператора). 109 No enclosing FOR, WHILE or REPEAT statement (Нет операторов, заканчивающих операторы FOR, WHILE или REPEAT). 110 Debug information table overflow (Переполнение информационной таблицы отладки) 111 N/A 112 CASE constant out of range (Константа CASE нарушает допустимые границы) . 113 Error in statement (Ошибка в операторе). 114 114 Cannot call an interrupt procedure (Невозможно вызвать процедуру npерывания). 115 N/A 116 Must be in 8087 mode to compile this (Для компиляции необходим режим 8087). 117 Target address not found (Указанный адрес не найден). 118 118 Include files are not allowed here (Здесь не допускаются включаемые файлы). 119 No inherited methods are accessible here (В этом месте программы нет унаследованных методов). 120 N/A 121 Invalid qualifier (Неверный квалификатор). 122 Invalid variable reference (Недействительная ссылка на переменную). 123 Too many symbols (Слишком много символов). 124 Statement part too large (Слишком большой раздел операторов). 125 N/A 126 Files must be var parameters (Файлы должны передаваться как параметры-переменные). 127 Too many conditional symbols (Слишком много условных символов). 128 Misplaced conditional directive (Пропущена условная директива). 129 ENDIF directive missing (Пропущена директива ENDIF). 130 Error in initial conditional defines (Ошибка в условных определениях). 131 Header does not match previous definition (Заголовок не соответствует предыдущему определению). 132 Critical disk error (Критическая ошибка диска). 133 Cannot evaluate this expression (Нельзя вычислить данное выражение). 134 Expression incorrectly germinated (Некорректное завершение выражения). 135 Invalid format specifier (Неверный спецификатор формата). 136 Invalid indirect reference (Недопустимая косвенная ссылка). 137 Structured variable are not allowed here (Здесь нельзя использовать переменную структурного типа). 138 Cannot evaluate without System unit (Нельзя вычислить выражение без мо-дуля SYSTEM). 139 Cannot access this symbol (Нет доступа к данному символу). 140 Invalid floating-point operation (Недопустимая операция с плавающей запятой). 141 Cannot compile overlay to memory (Нельзя выполнить компиляцию оверлейных модулей в память). 142 Procedure or function variable expected (Должна использоваться перемен- ная процедурного типа). 143 Invalid procedure or function reference (Недопустимая ссылка на процедуру или функцию) . 144 Cannot overlay this unit (Этот модуль не может использоваться в качестве оверлейного). 145 Too many nested scopes (Слишком много вложений). 146 File access denied (Отказано в доступе к файлу). 147 Object type expected (Здесь должен быть тип OBJECT) . 148 object types are not allowed (Нельзя объявлять локальные объекты). 149 VIRTUAL expected (Пропущено слово VIRTUAL). 150 Method identifier expected (Пропущен идентификатор инкапсулированного правила). 151 Virtual constructor are not allowed (Конструктор не может быть виртуальным). 153 Destructor identifier expected (Пропущен идентификатор деструктора). 154 Fail only allowed within constructor (Обращение к стандартной процедуре FAIL может содержаться только в конструкторе). 155 Invalid combination of opcode and operands (Недопустимая комбинация кода команды и операндов). 156 Memory reference expected (Отсутствует адрес). 157 Cannot add or subtract relocatable symbols (Нельзя складывать или вычитать перемещаемые символы). 158 Invalid register combination (Недопустимая комбинация регистров). 159 286/287 instructions are not enabled (Недоступен набор команд микропроцессоров 286/287). 160 Invalid symbol reference (Недопустимая ссылка на символ). 161 Code generation error (Ошибка генерации кода). 162 ASM expected (Отсутствует зарезервированное слово ASM).
  • B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

anyaekb


  • #1

Добрый вечер. Мне надо написать в паскале программу для решения задачи. Я написала, исправила все ошибки, а программа все равно не запускается. Наверное ошибка в сути программы, а найти ее я не могу. Подскажите пожалуйста.
Задача: Вычислить среднее арифметическое значение тех элементов одномерного массива, которые расположены за первым по порядку минимальным элементом. Размерность массива 20. Заполнение массива осуществить случайными числами от 0 до 500.
Сама я плохо в этом разбираюсь, поэтому наверняка ерунду написала в программе))

program massiv1;
const N=20;
var a:array [1..N] of integer;
min:integer;
sr:real;
begin
randomize;
for i:1 to N do
a:=random(501);
min:=1;
for i:=1 to N do
if a<a[min] then
min:=i;
sr:=0;
for i=min+1 to N do
sr:=sr+a;
sr:=sr/(N-min);
writeln;
end.

Senset


  • #2

Я написала, исправила все ошибки, а программа все равно не запускается.

Не запускается в смысле выдает ошибку на компиляции? Значит, вы не исправили все ошибки
И кажется, вывода среднего арифметического не хватает, паузы перед закрытием, и еще бы очистку экрана + вывод исходного массива, вывод минимального элемента и его позиции.

anyaekb


  • #3

Не запускается в смысле выдает ошибку на компиляции? Значит, вы не исправили все ошибки
И кажется, вывода среднего арифметического не хватает, паузы перед закрытием, и еще бы очистку экрана + вывод исходного массива, вывод минимального элемента и его позиции.

я переписала программу как вы сказали, но все равно что-то паскалю не нравится.
program massiv1;
const N=20;
var a:array [1..N] of integer;
min,sr,summa:real;
i:integer;
begin
randomize;
for i:=1 to N do begin
a:=random(501) [0..499] + random[0..1];
writeln (‘Массив:’);
end;
min:=1;
for i:=1 to N do
if a<a[min] then
min:=i;
summa:=0;
summa:=summa+massiv;
writeln(‘Сумма элементов:’);
sr:=summa/(N-i);
writeln;
readln;
end.
Но мне кажется, что программа не найдет минимальный элемент. А еще при компиляции паскалю не нравятся мои скобки при random(501) [0..499] + random[0..1]. Пропускает, только если заменю «[» на «{«. Это нормально?

Senset


  • #4

Но мне кажется, что программа не найдет минимальный элемент. А еще при компиляции паскалю не нравятся мои скобки при random(501) [0..499] + random[0..1]. Пропускает, только если заменю «[» на «{«. Это нормально?

Алгоритм я еще не смотрел. Символами «{«,»}» обозначаются комментарии. Функция random() принимает 1 значение типа word (0<=word<=65536). Значение передается в скобках.
Если хотите получить число от нуля до x: делаете: random(x);

Модераторы:Naeel Maqsudov, C_O_D_E

Аватара пользователя

FE-DOS

Сообщения:2
Зарегистрирован:29 дек 2006, 22:55

Я новичек в паскале. У меня есть проблема. Когда я компилирую программу, то выдает ошибку номер 14 Инвалид файл нэйм. Перезапускал оболочку, все равно таже самая ошибка. Есть также вторая проблема, вроде бы чтобы запускался паскаль всегда, для начала его нужно запустить через МС-ДОС. Как ни пробывал запускать, все шло насмарку. Тоесть программа запускалась, но из корневого каталога паскаля я запускаю и выдает ошибку(16-разрядная подсистема Ms-dos» неправильно указана рабочая папка, проверьте содержимое Pif-файла. Для завершения работы приложения нажмите кнопку «закрыть»)—>это я запустил Turbo.exe, потом запустил Turbo.pif и таже ошибка. Могу сказать только одно, раньше у меня все работало нормально, а сейчас никакие способы не помогают. Надеюсь поможете бедному ламеру решить эту проблемы :d

«…Рожден он был, чтобы смутить и поразить любой разумный совет.»

Аватара пользователя

FE-DOS

Сообщения:2
Зарегистрирован:29 дек 2006, 22:55

30 дек 2006, 17:44

&quot писал(а):удали turbo.pif нафиг.

Насчет этого спасибо, теперь я могу запускать. Осталась одна проблема, эта выскакивающая ошибка, если можешь подскажи как от нее избавиться. Выскакивает во время коммпиляции программы. :confused:

«…Рожден он был, чтобы смутить и поразить любой разумный совет.»

Аватара пользователя

Oleg_Rus

Сообщения:330
Зарегистрирован:16 окт 2006, 09:56
Откуда:г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

06 янв 2007, 08:20

Открой Pif-файл через текстовый редактор и перепрвавь текущие пути к ресурсам на свои.

Должно Сработать…

xFlow

Сообщения:2
Зарегистрирован:14 фев 2009, 00:20

14 фев 2009, 00:33

У меня такая ошибка при запуске скомпилированных программ Изображение если кто знает в чём дело пожалуйста помогите!!!!!

Аватара пользователя

Naeel Maqsudov

Сообщения:2551
Зарегистрирован:20 фев 2004, 19:17
Откуда:Moscow, Russia
Контактная информация:

14 фев 2009, 16:00

А что это за паскаль такой у Вас?
Это же даже не наколенная поделка типа ABC Pascal….

Аватара пользователя

Naeel Maqsudov

Сообщения:2551
Зарегистрирован:20 фев 2004, 19:17
Откуда:Moscow, Russia
Контактная информация:

18 фев 2009, 12:44

У меня та же ошибка. Это непоборимо.
Хоть эта среда и заявлена как «for Windows» на самом деле она компилирует каким-то старым борландовским компилятором и компилирует DOS-овские EXE-шники, неработоспособные на современных компах программы.
Фтопку эту версию.
Если Вам в учебных целях, то возьмите хоть ABCPascal, но там, правда, есть несколько отличий в языке (описаны в документации).

atavin-ta

Сообщения:572
Зарегистрирован:30 янв 2009, 06:38

18 фев 2009, 12:59

&quot писал(а):У меня та же ошибка. Это непоборимо.
Хоть эта среда и заявлена как «for Windows» на самом деле она компилирует каким-то старым борландовским компилятором и компилирует DOS-овские EXE-шники, неработоспособные на современных компах программы.

Windа с dosом совместима, так что если получающиеся проги не идут под windой, то компилотр плох и как кроссwindowsнаdos.

Вопрос: «Почему вы все сионисты? Нельзя ли писать на чём то другом?».
Ответ: «Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!».

Аватара пользователя

Naeel Maqsudov

Сообщения:2551
Зарегистрирован:20 фев 2004, 19:17
Откуда:Moscow, Russia
Контактная информация:

25 фев 2009, 18:04

xFlow, я нашел в чем причина! Чтобы в этом конкретном паскале избавиться от ошибок 104 и 105 при выполнении соответственно команд Read[ln] и Write[ln], надо в начале программы писать

Uses WinCRT;

Такая уж версия. Она по умолчанию не компилирует консольных приложений, а следовательно она не может пользоваться стандартными потоками ввода-вывода, а следовательно не работает.
WinCRT эмулирует консольный ввод и вывод.

Как заставить этот паскаль компилировать консольное приложение я не знаю. В Delphi есть специальная директива компилятора. Компилятор же TPCW, который используется здесь эту директиву не понимает. Может быть Uses WinCRT — это единственное решение проблемы.

Понравилась статья? Поделить с друзьями:
  • Parsec ошибка инициализации com порта
  • Parsec ошибка 6023 как исправить
  • Parsec ошибка 15000 как исправить
  • Parse error not well formed ошибка
  • Parking light opel astra ошибка