Начало. Возможные ошибки: различия между версиями

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Строка 67: Строка 67:
   c := 666 div x; // Здесь происходит деление на 0
   c := 666 div x; // Здесь происходит деление на 0
end.</source>
end.</source>
Если во время выполнения программа выполнит деление на 0, то она завершится с ошибкой.


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

Версия от 20:57, 6 января 2010

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

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

Все используемые переменные должны быть предварительно описаны в разделе описаний.

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

var S: integer // Ожидалась ;
begin
  S := 1; 
end.

var S: integer;
begin
  S := 1 // Ожидалась ;
  S := S + 1
end.

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

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

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

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

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

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

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

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

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

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

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

Ошибка ввода

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

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

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

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

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

Деление на 0

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

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

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

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

В PascalABC.NET выводит NaN - Not a Number

Ссылки

Оглавление