Неописанная переменная
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. |
-
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
" писал(а):удали turbo.pif нафиг.
Насчет этого спасибо, теперь я могу запускать. Осталась одна проблема, эта выскакивающая ошибка, если можешь подскажи как от нее избавиться. Выскакивает во время коммпиляции программы.
«…Рожден он был, чтобы смутить и поразить любой разумный совет.»
-
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
" писал(а):У меня та же ошибка. Это непоборимо.
Хоть эта среда и заявлена как «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 — это единственное решение проблемы.