- •Язык программирования Паскаль
- •Алфавит языка. Структура программы.
- •Cтруктура Pascal-программы.
- •Var Var_Name : Var_Type; где Var_Name - имя определяемой переменной, Var_Type - ее тип.
- •Стандартные типы данных. Операции над стандартными типами.
- •Процедуры ввода/вывода. Ввод и вывод данных различных типов.
- •Оператор присваивания. Стандартные арифметические функции.
- •Процедуры и функции.
- •Условный оператор. Составной оператор.
- •Оператор цикла с постусловием.
- •Оператор цикла с параметром.
- •Массивы.
- •Var I: Integer; {для организации цикла}
Процедуры и функции.
Назначение процедур и функций - облегчить разработку программы, разбив ее на более мелкие единицы, взаимодействующие между собой через параметры. В случае повторяющихся фрагментов программы применение процедур и функций также позволит сократить ее размер.
Процедуры и функции называют также подпрограммами.
Параметры делятся на входные - те, которые подпрограмма использует в качестве аргументов, и выходные - возвращаемые результаты.
Подпрограммы обычно меняют значения выходных параметров, входные же параметры подпрограмма изменять не может.
Основное отличие процедур от функций то, что процедуры могут иметь количество выходных параметров, отличное от одного, в то время как функции всегда имеют один и только один выходной параметр.
Функции и процедуры должны быть описаны в разделе описания данных. Описание подпрограмм схоже с описанием основной программы:
Procedure Name (I1:TypeI1; I2:TypeI2, ... ;
Var O1:TypeO1, O2: ... );
Const описание локальных констант;
Type описание локальных типов;
Var описание локальных переменных;
Begin
тело процедуры
End;
Function Name (I1:TypeI1; I2:TypeI2, ... ): TypeOfFunction;
Const описание локальных констант;
Type описание локальных типов;
Var описание локальных переменных;
Begin
тело функции
End;
Здесь:
Name - имя процедуры или функции;
I1, I2, ... - входные параметры, имеющие типы TypeI1, TypeI2, ... соотв-но; O1,O2, ... - выходные параметры процедуры с типами TypeO1,TypeO2, ... соотв-но; TypeOfFunction - тип результата, возвращаемого функцией.
Локальными называются константы, типы и переменные, определенные и доступные только внутри подпрограммы. Константы, типы и переменные, определенные в основной программе или в вызывающей процедуре верхнего уровня, называются глобальными и являются доступными из подпрограммы.
К локальным данным можно отнести также процедуры и функции, описанные внутри подпрограммы. В этом случае они будут доступны только из подпрограммы, внутри которой они описаны:
Program ProcedureExample;
Procedure A;
Procedure B;
Begin
End;
Begin
A {из процедуры A можно вызвать B}
End;
Begin
A; {из основной программы можно вызвать только процедуру A} B {этот вызов даст ошибку, т.к. процедура B доступна
только внутри процедуры A}
End.
Имена используемых локальных данных могут совпадать с глобальными именами. В этом случае обращение внутри подпрограммы будет происходить к локальным данным. Например, будет работоспособной следующая программа:
Program FunctionExample;
Var I, N: Integer;
Function Summa (N: Integer) : Integer;
Var I, S: Integer;
Begin
S := 0;
For I := 1 To N Do S := S + I;
Summa := S
End;
Begin
Write ('Введите количество чисел: ');
Read (N);
For I := 1 To N Do WriteLn ('Сумма первых ', I, ' чисел равна ', Summa (I) ) End.
Здесь дублируются имена I, N.
Условный оператор. Составной оператор.
Иногда бывает необходимо предусмотреть в программе "развилку", т.е. в зависимости от истинности или ложности какого-то условия выполнить соответствующие действия.
В языке Pascal условный оператор имееет вид:
IF условие THEN оператор1 ELSE оператор2
Он выполняется следующим образом:
1) вычисляется выражение (его результат должен быть типа Boolean);
2) если результат - True, то выполняется оператор1;
3) если результат - False, то выполняется оператор2.
Существует также сокращенная форма условного оператора:
IF условие THEN оператор
В этом случае, если условие истинно, то выполняется оператор, если же оно ложно, то оператор не выполняется.
Примеры:
Program IfExample;
{наити максимальное из двух чисел - a и b}
Var a, b : Real;
Begin
Write ('Введите 2 числа: ');
Read (a, b);
If a > b Then Write ('Первое')
Else Write ('Второе');
Writeln (' число больше.')
End.
Обратите внимание, что внутри условного оператора, как следует из формы его записи, разделитель НЕ СТАВИТСЯ (нет точки с запятой после вызова процедуры Write перед служебным словом Else).
Для облегчения чтения программы условный оператор удобно оформлять так:
IF условие
THEN оператор1
ELSE оператор 2
или так
IF условие THEN оператор1
ELSE оператор2
Условные операторы могут быть также "вложены" друг в друга, а также содержать сложные условия, составленные с помощью логических операций (not, or, and, xor).
Например, следующий оператор присваивает переменной x максимальное из трех чисел a, b и c:
If a > b and a > c Then x := a
Else If b > c Then x := b
Else x := c
После Then или Else мы можем записать лишь один оператор. Как быть, если нам необходимо выполнить несколько действий подряд в зависимости от условия? Язык Pascal предоставляет такую возможность с использованием составного оператора, который имеет вид:
BEGIN оператор1; оператор2; . . . END
В этом случае последовательность операторов, заключенных между служебными словами Begin и End (они называются операторными скобками) воспринимаются Pascal'ем как один оператор. Таким образом, ограничение в один оператор после Then или Else можно обойти, применив составной оператор.
Пример: решить квадратное уравнение с коэффициентами a, b и c с точностью 0.1.
Var a, b, c, d, x1, x2: Real;
Begin
Write ('Введите коэффициенты a, b и c: ');
Read (a, b, c);
d := Sqr (b) - 4 * a * c;
If d < 0 Then Writeln ('Корней нет.')
Else Begin
x1 := (-b - Sqrt (d)) / 2 / a;
x2 := (-b + Sqrt (d)) / 2 / a;
Writeln ('Корни уравнения ', x1:1:1, ' ', x2:1:1) End
End.
Оператор варианта.
Оператора выбора имеет вид:
CASE выражение OF
константа1: оператор1;
константа2: оператор2;
. . .
ELSE операторN
END
Выполняется оператор так:
1) вычисляется значение выражения (оно может быть и просто переменной);
2) выполняется оператор, чья константа (ее тип дожен совпадать с типом выражения) совпадает с вычисленным значением выражения;
3) если соответствующей константы не найдено, то выполняется оператор после служебного слова ELSE.
Как и для условного оператора, существует сокращенная форма оператора варианта (без ветви ELSE).
Оператор цикла с предусловием.
Иногда в программе необходимо многократно выполнить какое-либо действие, например, напечатать какую-нибудь таблицу. Оператор имеет вид:
WHILE выражение DO оператор
Работает оператор так:
1) вычисляется выражение (его результат должен быть типа Boolean); 2) если результат выражения - True, то выполняется оператор, а затем управление в программе передается опять на начало оператора WHILE; 3) если результат выражения - False, то происходит выход из цикла.
Например, ту же программу можно записать так:
Program WhileExample1;
Var Angle: Integer;
Begin
Angle := 0; {начальное значение}
While Angle <= 90 Do Begin
Writeln ('синус ', Angle:2, ' градусов равен ', Sin (Angle*Pi/180):1:3); Inc (Angle, 5)
End
End.
Здесь внутри цикла был использован составной оператор, так как нам необходимо было выполнить 2 действия: напечатать значение синуса и увеличить угол на 5 градусов.
Другой пример: пусть требуется вычислить сумму с точностью 0.0001
1 1 1 1
S = 1 + + + + . . . + , где N вводится с клавиатуры. 2 3 4 N
Program WhileExample2;
Var N: Integer;
S: Real;
Begin
Write ('N='); Read (N);
S := 0;
While N > 0 Do Begin
S := S + 1/N;
Dec (N)
End;
WriteLn ('S=', S:1:4)
End.
Особенностью оператора цикла с предусловием является то, что он может не выполниться ни разу, если условие продолжения выполнения цикла ложно. Поэтому он и называется оператором цикла с предусловием.
Другая его особенность - то, что количество повторений цикла заранее не определено, в том числе может и быть бесконечным, если условие всегда истинно.
