Неописанная переменная
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: Программы и алгоритмы для начинающих
gomerkahacker 0 / 0 / 1 Регистрация: 14.02.2015 Сообщений: 26 |
||||
1 |
||||
06.04.2016, 16:52. Показов 3892. Ответов 4 Метки нет (Все метки)
Пишет: неизвестное имя ‘n’.(Выделил)
__________________
0 |
volvo Супер-модератор 32456 / 20948 / 8107 Регистрация: 22.10.2011 Сообщений: 36,218 Записей в блоге: 7 |
||||
06.04.2016, 16:55 |
2 |
|||
Или используй динамические массивы, если размер массива станет известен только во время выполнения программы.
1 |
SoI_diEr 0 / 0 / 0 Регистрация: 06.04.2016 Сообщений: 7 |
||||
06.04.2016, 16:56 |
3 |
|||
нужно N обьявить еще перед type как const, то есть вот так:
0 |
capricornus CF 318 / 208 / 162 Регистрация: 08.12.2015 Сообщений: 863 |
||||
06.04.2016, 16:57 |
4 |
|||
РешениеПозаботьтесь, чтобы вводилось n не менее 7
1 |
0 / 0 / 1 Регистрация: 14.02.2015 Сообщений: 26 |
|
06.04.2016, 17:07 [ТС] |
5 |
Позаботьтесь, чтобы вводилось n не менее 7 Спасибо, учту)
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
06.04.2016, 17:07 |
5 |
Сообщения
об ошибках.Ошибки в
программах делятся на те, которые
Паскаль замечает, и на те, что не замечает
и в принципе заметить не может. К первым
относятся все синтаксические погрешности,
например,BIGINвместоBEGIN.
Их Паскаль замечает еще на стадии
компиляции. На стадии выполнения он
замечает такие ошибки, какSqrt(-25),
то есть квадратный корень из ‑25. Но
вот, если вы, желая возвести числоa
в куб, вместоa*a*aпишетеa*a,
то этого не заметит ни один язык в мире.
Обнаружив
грамматическую ошибку, Паскаль выдает
золотыми буквами на красном фоне краткое
описание ошибки и ставит курсор в то
место программы, где, по его мнению, она
находится.
Обнаружив ошибку
на стадии выполнения, Паскаль выдает
белыми буквами на черном фоне окна
пользователя сообщение Runtime
errorи иногда золотыми буквами
на красном фоне краткое описание ошибки
и ставит курсор в то место программы,
где, по его мнению, она находится.
Вот наиболее
типичные для начинающих сообщения об
ошибках того и другого рода:
Сообщение |
Перевод |
Вероятная |
Unexpected end of file |
Неожиданный |
Вы забыли |
“;” expected |
Ждал точку с |
Вы забыли |
“,” expected |
Ждал запятую |
Вы указали |
“)” expected |
Ждал скобку “)” |
Вы указали |
Unknown identifier |
Неизвестное |
Вы забыли описать
Неправильно |
Type mismatch |
Несовпадение |
В вашей программе |
Duplicate identifier |
Дубль имени |
Одно и то же имя |
Syntax error |
Синтаксическая |
Паскаль |
BEGIN |
Ждал BEGIN |
Возможно, не |
END |
Ждал |
Возможно, не |
String |
Строковая |
Вы забыли закрыть |
Line too long |
Строчка слишком |
Слишком длинная |
Disk full |
Диск заполнен |
На вашем диске |
Lower bound greater than |
Нижняя граница |
Например, вы |
Invalid floating point |
Неправильная |
Sqrt(-25)илиa/0или что-нибудь в этом роде |
Ordinal expression |
Ждал выражение |
Например, вы |
Error in expression |
Ошибка в выражении |
Например, вы |
Range check error |
Ошибка проверки |
Переменная |
Constant out of range |
Константа не в |
Величина |
Invalid numeric format |
Неправильный |
Если, например, |
Более подробное
описание некоторых ошибок вы найдете
в 0.3.
Понять смысл
многих других сообщений об ошибках вам
поможет перевод некоторых часто
встречающихся в сообщениях слов:
expected
ждал
identifier
имя
invalid
неправильный
operation операция
error
ошибка
variable переменная
Невозможно создать
компилятор, который бы всегда точно
находил место и причину ошибки. Поэтому
приготовьтесь к тому, что некоторые
сообщения вы будете долго разглядывать
в недоумении. Считайте их не реальными
ошибками, а намеками на реальные ошибки.