- •Программирование
- •Язык программирования Паскаль. Алфавит языка
- •Структура программы на языке Паскаль
- •Элементарные конструкции
- •Арифметические значения
- •Константы
- •Типы данных
- •Типы данных
- •Типы данных
- •Типы данных
- •Типы данных
- •Типы данных
- •Операторы языка Паскаль. Оператор присваивания
- •Операторы языка Паскаль. Оператор присваивания
- •Операторы языка Паскаль. Выражения
- •Процедуры ввода данных
- •Процедуры вывода данных
- •Операторы языка
- •Условный оператор
- •Оператор выбора
- •Оператор выбора
- •Оператор цикла с параметром
- •Оператор цикла с параметром
- •Оператор цикла с параметром
- •Оператор цикла
- •Оператор цикла
- •Оператор цикла с предусловием
- •Оператор цикла с предусловием
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Оператор цикла с постусловием
- •Пример
- •Операторы языка
- •Данные типа запись RECORD
- •Данные типа запись RECORD
- •Данные типа запись RECORD
- •Данные типа запись RECORD
- •Данные типа строка знаков String
- •Строковые функции
- •Строковые процедуры
- •Пример
- •Подпрограммы
- •Подпрограммы
- •Подпрограммы
- •Подпрограммы
- •Подпрограммы
- •Параметры-переменные
- •Пример
- •Параметры-константы
- •Область действия имен
- •Область действия имен
- •Рекурсивные процедуры и функции
- •Рекурсивные процедуры и функции
- •Рекурсивные процедуры и функции
- •Рекурсивные процедуры и функции
- •Рекурсивные процедуры и функции
- •Файлы
- •Файлы
- •Процедуры и функции для работы с файлами
- •Процедуры и функции для работы с файлами
- •Особенности обработки типизированных файлов
- •Особенности обработки текстовых файлов
- •Особенности обработки текстовых файлов
- •Модули
- •Математические функции
- •Функции округления и преобразования типов
- •Процедуры порядкового типа
Оператор выбора
|
cos x , при k=3 |
… CASE K OF |
||
|
0: Z := LN(X) ; |
|||
Z |
sin x |
, при k=2 |
1: Z := EXP(X) |
|
e x |
, |
при |
; |
|
k=1 |
ln x , |
при |
k=0 |
2: Z := |
|
SIN(X) ; |
|||
случаях |
0 в остальных |
3: Z := COS(X) |
||
|
|
|
ELSE Z := 0 |
|
В следующем примере переменная OTVET получает значение YES или NO в зависимости от |
||||
|
|
|
|
END ; … |
введенного значения символьной переменной V. Здесь метки варианта задаются |
||||
перечислением. |
|
|
|
|
VAR V : CHAR; |
OTVET : STRING; |
|
|
|
Begin … CASE V OF |
|
|
|
‘D’, ‘d’, ‘Д’, ‘д’ : OTVET := ‘YES’; ‘N’, ‘n’, ‘Н’, ‘н’ : OTVET := ‘NO’ ELSE OTVET := ‘ ‘
END; …
В следующем примере метки выбора заданы интервалом.
… VAR V : CHAR; OTVET : STRING; Begin … CASE V OF
‘A’ . . ‘Z’,’a’ . . ‘z’ : OTVET := ‘буква’; ‘0’ . . ‘9’ : OTVET := ‘цифра’
ELSE
OTVET := ‘специальный символ‘ END; …
Оператор цикла с параметром |
|
|
FOR<параметр цикла>:=<выраж.1> |
TO |
<выраж.2> |
DOWNTO |
|
|
DO < оператор > ; |
|
|
< параметр цикла > - это переменная цикла любого порядкового типа (целого, символьного, перечисляемого, интервального); TO – выбирается следующее значение параметра цикла в соответствии с его типом при упорядочивании по возрастанию (алфавиту);
DOWNTO - выбирается следующее значение параметра цикла в соответствии с его типом при упорядочивании по убыванию.
<выражение 1> - начальное значение параметра цикла, выражение того же типа, что и параметр цикла;
<выражение 2> - конечное значение параметра цикла, выражение того же типа, что и параметр цикла;
<оператор>- тело цикла - простой или составной оператор.
Оператор цикла с параметром
При выполнении оператора FOR выполняются следующие действия:
вычисляется < выражение 1> , которое присваивается параметру цикла;проверяется условие окончания цикла: <параметр цикла> больше
<выражения 2> при использовании конструкции TO и <параметр цикла> меньше <выражения 2> при использовании конструкции
DOWNTO;
выполняется тело цикла;выбирается следующее значение параметра при упорядочивании
по возрастанию (TO) или выбирается следующее значение параметра при упорядочивании по убыванию (DOWNTO);все этапы, кроме первого, циклически повторяются.
При использовании оператора необходимо помнить:
Внутри цикла FOR нельзя изменять начальное, текущее или конечное значения параметра цикла.
Оператор цикла с параметром
После завершения цикла значение параметра цикла считается неопределенным, за исключением тех случаев, когда выход из цикла осуществляется оператором GOTO или с помощью процедуры BREAK.
Телом цикла может быть другой оператор цикла. Например, для того, чтобы вычислить значение
факториала F=N! можно воспользоваться следующими операторами:
a) … F:=1; |
b) … F:=1; |
FOR I:=1 TO N DO |
FOR I:=N DOWNTO 1 DO |
F:=F*I; … |
F:=F*I; … |
Оператор цикла
Если телом цикла является другой цикл, то циклы называются
вложенными или сложными.
Цикл, содержащий в себе другой цикл, называют внешним. Цикл, содержащийся внутри другого цикла, называется
внутренним.
Внутренний и внешний циклы могут быть любыми из трех видов: FOR, WHILE или REPEAT. При построении вложенных циклов необходимо, чтобы все операторы внутреннего цикла полностью находились в теле внешнего цикла. Возможная глубина вложенности циклов ограничивается объемом памяти компьютера. Вначале выполняется самый внутренний цикл при фиксированных значениях параметров циклов с меньшим уровнем вложенности, затем изменяется параметр цикла следующего (за внутренним) уровня и снова выполняется самый внутренний цикл и т.д.
Оператор цикла
Пример. Вычислить значение Y , определяемое по формуле
PROGRAM SP; |
N |
M |
|
|
|
||
CONST N=10; |
M=15; |
Y |
A ij |
VAR A: ARRAY [1..N,1..M] OF REAL; |
i 1 |
j 1 |
|
I,J: INTEGER; |
|
|
|
P,Y: REAL; |
|
|
|
BEGIN |
|
|
|
FOR I:=1 TO N DO FOR J:=1 TO M DO |
READ (A[I,J]); |
||
Y:=0; |
|
|
|
FOR I:=1 TO N DO |
|
|
|
BEGIN |
P:=1; |
|
|
FOR J:=1 TO M DO P:=P*A[I,J]; |
|
|
|
Y:=Y+P |
END; |
|
|
WRITELN(‘Y=’,Y) |
|
|
|
END. |
|
|
|
Оператор цикла с предусловием
WHILE <логическое выражение > DO <оператор>; Логическое выражение вычисляется перед каждым выполнением тела цикла. Если логическое выражение принимает значение TRUE, то тело цикла выполняется, если значение FALSE, происходит выход из цикла. Тело цикла может не выполниться ни разу, если логическое выражение сразу ложно. Телом цикла является простой или составной оператор.
Любой алгоритм, реализуемый с помощью оператора FOR, может быть записан с использованием конструкции WHILE. Например, вычисление значения факториала F=N!:
… F:=1;
I:=1;
WHILE I<=N DO BEGIN
F:=F*I;
I:=I+1;
END; …
Оператор цикла с предусловием
В следующем примере требуется подсчитать значение Sin (x) с использованием разложения функции в ряд:
|
|
x |
3 |
|
x |
5 |
|
x |
7 |
|
|
|
|
Y |
x |
|
|
... |
|
U i |
|||||||
|
|
|
|
|
|
||||||||
3 |
! |
5 |
! |
7 |
! |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
i 1 |
В сумму включить только те члены ряда, для которых выполняется условие:
|
U i |
|
|
|
|
|
т.е. очередной член ряда должен быть больше заданной точности вычислений .
PROGRAM SINX;
VAR X,Y,E,U,Z : REAL; K: INTEGER; |
|
BEGIN |
READ (X,E); |
K:=0; |
Y:=0; U:=X; Z:=SQR(X); |
WHILE ABS(U)>E DO
BEGIN
Y:=Y+U;
K:=K+2;
U:= -U* Z/ (K*(K+1));
END;
WRITELN( ‘ SIN(X)=’, SIN(X), ‘ Y=’,Y);
END.
Оператор цикла с предусловием
Рассмотрим пример вычисления значения квадратного корня из числа
Х по итерационной формуле |
Yi+1 =(Yi + X/ Y i ) /2 с точностью |
|||
Yi+1 - Yi |
<= |
|
|
|
PROGRAM SQRTX; |
|
|
|
|
VAR X: REAL; {аргумент |
} |
|
||
EPS: REAL; {точность вычисления |
} |
|||
Y0: REAL; {предыдущее приближение} |
||||
Y1: REAL; {очередное приближение |
} |
|||
A: REAL; {начальное приближение |
} |
|||
BEGIN READ( A,EPS,X); |
|
|
||
IF X>0 THEN |
|
|
|
|
BEGIN |
Y0:=A; |
Y1:=(Y0+X/Y0)/2; |
|
|
WHILE ABS(Y1-Y0)>EPS DO |
|
|||
BEGIN |
Y0:=Y1; |
Y1:=(Y0+X/Y0)/2 END; |
||
WRITELN(‘Y1=’,Y1,’ при X=’,X) |
|
END
ELSE WRITELN(‘Число ’, X, ' меньше нуля'); END.
Оператор цикла с постусловием
REPEAT
<оператор 1 > [;
<оператор 2 >] [;
…
<оператор n >]
UNTIL <логическое выражение>;
Данная конструкция оператора цикла используется, если число повторений цикла заранее неизвестно, но известно условие выхода из цикла. Управляющее циклом логическое выражение является условием выхода из цикла. Если оно принимает значение TRUE, то выполнение цикла прекращается. При использовании оператора REPEAT цикл выполняется хотя бы один раз. В отличие от других операторов цикла оператор данного вида не требует операторных скобок BEGIN - END, так как их роль выполняют REPEAT - UNTIL.