Начало. Возможные ошибки: различия между версиями
Mikst (обсуждение | вклад) |
Juliet (обсуждение | вклад) Нет описания правки |
||
Строка 7: | Строка 7: | ||
=== Отсутствующая ; === | === Отсутствующая ; === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
begin | begin | ||
var S: integer // Ожидалась ; | |||
S := 1; | S := 1; | ||
end.</source> | end.</source> | ||
<p> | <p> | ||
<source lang="pascal"> | <source lang="pascal"> | ||
begin | begin | ||
S := 1 // Ожидалась ; | var S: integer := 1 // Ожидалась ; | ||
S := S + 1 | S := S + 1 | ||
end.</source> | end.</source> | ||
Строка 20: | Строка 21: | ||
=== Несовместимость типов при присваивании === | === Несовместимость типов при присваивании === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
begin | begin | ||
S := 1.3; // Нельзя преобразовать тип real к integer | var S: integer := 1.3; // Нельзя преобразовать тип real к integer | ||
end.</source> | end.</source> | ||
Безболезненно можно присваивать только данные одного типа. Если данные - разных типов, то в редких случаях можно преобразовать данные одного типа в данные другого. Например, целое можно преобразовать в вещественное, а символ - в строку. Обратные преобразования не допускаются. | Безболезненно можно присваивать только данные одного типа. Если данные - разных типов, то в редких случаях можно преобразовать данные одного типа в данные другого. Например, целое можно преобразовать в вещественное, а символ - в строку. Обратные преобразования не допускаются. | ||
=== Отсутствие закрывающего апострофа литеральной строки === | === Отсутствие закрывающего апострофа литеральной строки === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
begin | begin | ||
x := 2; y := 3; | var x, y: integer; | ||
writeln('Результат сложения равен=,x+y); // Не хватает закрывающего апострофа | x := 2; | ||
y := 3; | |||
writeln('Результат сложения равен =, x + y); // Не хватает закрывающего апострофа | |||
end.</source> | end.</source> | ||
Закрыть апостроф надо на той же строке, где расположен открывающий апостроф | Закрыть апостроф надо на той же строке, где расположен открывающий апостроф | ||
=== Ошибки расстановки запятых и апострофов при выводе строк и выражений === | === Ошибки расстановки запятых и апострофов при выводе строк и выражений === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
begin | begin | ||
x := 2; y := 3; | var x, y: integer; | ||
writeln(x,'+,'y,'=',x+y); // Неверная расстановка запятых и апострофов | x := 2; | ||
y := 3; | |||
writeln(x, '+,' y, '=', x+y); // Неверная расстановка запятых и апострофов | |||
end.</source> | end.</source> | ||
Слишком много запятых и апострофов рядом, потому начинающие часто путаются :) | Слишком много запятых и апострофов рядом, потому начинающие часто путаются :) | ||
Строка 46: | Строка 51: | ||
=== Ошибка ввода === | === Ошибка ввода === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
begin | begin | ||
var x: integer; | |||
read(x); // введите блаблабла и посмотрите, что получится | read(x); // введите блаблабла и посмотрите, что получится | ||
end.</source> | end.</source> | ||
Строка 53: | Строка 59: | ||
=== Ошибка неинициализированной переменной === | === Ошибка неинициализированной переменной === | ||
<source lang="pascal"> | <source lang="pascal"> | ||
begin | begin | ||
var x: integer; | |||
// Забыли инициализировать или ввести x | // Забыли инициализировать или ввести x | ||
r := x*x; | var r := x * x; // r получает тип integer | ||
writeln('Квадрат числа ',x,' = ',r); | writeln('Квадрат числа ', x, ' = ', r); | ||
end.</source> | end.</source> | ||
Перед использованием любую переменную надо ввести или присвоить ей начальное значение. Это действие называется инициализацией переменной. | Перед использованием любую переменную надо ввести или присвоить ей начальное значение. Это действие называется инициализацией переменной. | ||
Строка 64: | Строка 71: | ||
<source lang="pascal">var x,c: integer; | <source lang="pascal">var x,c: integer; | ||
begin | begin | ||
x := 0; | var x: integer := 0; | ||
c := 666 div x; // Здесь происходит деление на 0 | var c: integer := 666 div x; // Здесь происходит деление на 0 | ||
end.</source> | end.</source> | ||
Если во время выполнения программа выполнит деление на 0, то она завершится с ошибкой. | Если во время выполнения программа выполнит деление на 0, то она завершится с ошибкой. |
Версия от 09:55, 20 сентября 2014
Неописанная переменная
begin
S := 1; // Неизвестное имя S
end.
Все используемые переменные должны быть предварительно описаны в разделе описаний. В PascalABC.NET допускаются также описания переменных внутри блока.
Отсутствующая ;
begin
var S: integer // Ожидалась ;
S := 1;
end.
begin
var S: integer := 1 // Ожидалась ;
S := S + 1
end.
Очень частая ошибка у начинающих. Курсор, как правило, позиционируется в начале следующей строки
Несовместимость типов при присваивании
begin
var S: integer := 1.3; // Нельзя преобразовать тип real к integer
end.
Безболезненно можно присваивать только данные одного типа. Если данные - разных типов, то в редких случаях можно преобразовать данные одного типа в данные другого. Например, целое можно преобразовать в вещественное, а символ - в строку. Обратные преобразования не допускаются.
Отсутствие закрывающего апострофа литеральной строки
begin
var x, y: integer;
x := 2;
y := 3;
writeln('Результат сложения равен =, x + y); // Не хватает закрывающего апострофа
end.
Закрыть апостроф надо на той же строке, где расположен открывающий апостроф
Ошибки расстановки запятых и апострофов при выводе строк и выражений
begin
var x, y: integer;
x := 2;
y := 3;
writeln(x, '+,' y, '=', x+y); // Неверная расстановка запятых и апострофов
end.
Слишком много запятых и апострофов рядом, потому начинающие часто путаются :) Надо уяснить правила:
- запятые разделяют разные элементы вывода
- все, что находится в апострофах, будет выведено на экран без изменений
Ошибка ввода
begin
var x: integer;
read(x); // введите блаблабла и посмотрите, что получится
end.
Это - ошибка во время выполнения. Программа пытается преобразовать введенную строку в число, не может это сделать и завершается с ошибкой
Ошибка неинициализированной переменной
begin
var x: integer;
// Забыли инициализировать или ввести x
var r := x * x; // r получает тип integer
writeln('Квадрат числа ', x, ' = ', r);
end.
Перед использованием любую переменную надо ввести или присвоить ей начальное значение. Это действие называется инициализацией переменной.
Деление на 0
var x,c: integer;
begin
var x: integer := 0;
var c: integer := 666 div x; // Здесь происходит деление на 0
end.
Если во время выполнения программа выполнит деление на 0, то она завершится с ошибкой.
Корень из отрицательного числа
begin
writeln(sqrt(-1)); // Корень из отрицательного числа
end.
В обычном Паскале возникает ошибка времени выполнения. В PascalABC.NET выводится NaN - Not a Number