program ( {, }); заголовок программы раздел описаний (описания) begin блок ; ; раздел операторов... (тело программы) end. Структура Паскаль-программы
Общие требования к программе 1. Все используемые в программе объекты (переменные, метки, типы и т.д.) обязательно должны быть описаны в разделе описаний. Использовать неописанный объект нельзя. Это не относится лишь к стандартным объектам (maxint, true, false, sin, exp и т.д.), которые считаются описанными заранее. 2. Одно и то же имя нельзя давать разным объектам программы. 3. Любой объект может быть использован только после того, как он описан, т.е. «сначала опиши, а уж затем используй». 4. В начале выполнения программы ни одна из ее переменных не имеет значения. Пробелы Относительно пробелов в Паскале действуют следующие правила: 1) нельзя ставить пробелы внутри идентификаторов и чисел, а также внутри следующих комбинаций символов: <> = :=.. 2) обязательно надо ставить пробел, если рядом по тексту расположены идентификаторы и/или числа, иначе они сольются в одну конструкцию. 3) в остальных местах пробелы можно ставить, а можно и не ставить, причем там, где может стоять пробел, можно указывать два и больше пробелов.
Формально, программа на Паскале - это одна длинная строка символов. Реально приходится разбивать ее на более короткие строки. Где же можно делать переход на новые строки? Переходить на новую строку можно в любом месте, где это нам удобно. Однако есть важное ограничение: формально, перевод строки в каком-то месте программы эквивалентен заданию пробела в этом месте, поэтому перевод строки допустим только там, где по правилам может стоять пробел. В частности, запрещен перевод строки внутри чисел и идентификаторов, но допустим между операндом и знаком операции. При этом никаких знаков переноса не ставится, никакой символ повторять не надо. Переводы строк Комментарии Кроме такого наглядного разбиения текста программы на строки, для облегчения понимания программы в нее можно вставлять еще и пояснения, комментарии. Синтаксически, комментарий – это любая последовательность символов (кроме «}»), заключенная в фигурные скобки. Где можно указывать комментарий? Формально, весь комментарий эквивалентен пробелу, поэтому в тексте его можно размещать только там, где может стоять пробел.
Пример программы program gun (input,output); const g = 9.81; Pi = 3.14; var v0, alpha, t, dt, x, y,x0, y0, vx0, vy0, tc: Real; N, i: Integer; begin WriteLn('Введите начальную скорость в м.с'); ReadLn(v0); WriteLn; WriteLn('Введите наклон траектории в градусах'); ReadLn(alpha); WriteLn; WriteLn('Введите число точек'); ReadLn(N); alpha := Pi * alpha / 180; vx0 := v0 * Cos(alpha); vy0 := v0 + Sin(alpha); x0 := 0; y0 := 0; T := 2 * vy0 / g; dt := T / (N-1); i := 1; tc := 0;
while i < N do begin x := x0 + vx0 * tc; y := y0 + vy0 * tc - g * Sqr(tc) / 2; WriteLn(x, ' ', y); i := i + 1; tc := tc + dt; if (i mod 20) = 0 then begin WriteLn('Нажмите '); ReadLn; end; WriteLn('Нажмите '); ReadLn; end. { Вставьте свои комментарии к этой программе} Пример программы(продолжение)
Операторы операторы простые: 1. присваивания 2. пустой 3. перехода 4. процедуры сложные: 1. составной 2. условный 3. варианта 4. цикла 5. присоединения ::= ::= begin {; } end ::= if then else | if then
Неопределенность оператора if В определении условного оператора есть одно неясное место - как понимать запись: if B1 then if B2 then S1 else S2 ? К какому из двух then относится единственный else? Возможны две трактовки: 1) полный оператор вложен в сокращенный оператор: if B1 then if B2 then S1 else S2 2) в полный оператор вложен сокращенный оператор: if B1 then if B2 then S1 else S2 В Паскале на этот счет принято следующее соглашение: else всегда относится к ближайшему слева then. Следовательно, верен первый вариант, который для большей ясности можно записать так: if B1 then begin if B2 then S1 else S2 end Что же касается второго варианта, то его можно записать только с использованием операторных скобок: if B1 then begin if B2 then S1 end else S2