Когда некоторая совокупность действий должна выполняться в нескольких различных местах программы, то нежелательно каждый раз повторять группу операторов, реализующих эти действия. Чтобы избежать повторений, указанную группу операторов можно записать в программе один раз в виде подпрограммы и обращаться к ней, когда в этом возникает необходимость.
Именно в разделе описания процедур и функций размещаются тела подпрограмм.
Подпрограмма – программная единица (часть программы), имеющая имя, по которому она может быть вызвана из других частей программы.
В языке Паскаль подпрограммы делятся на процедуры и функции, которые бывают стандартными и определенными пользователем. Стандартные процедуры и функции являются частью языка и вызываются без предварительного описания. Описание процедур и функций пользователя выполняется в специальном разделе программы. В общем случае подпрограмма имеет ту же структуру, что и программа.
Процедурой называется часть программы, предназначенная для решения определенной задачи или подзадачи. Для описания процедуры используется зарезервированное слово procedure.
Объявление процедуры:
procedure <имя процедуры > {<параметры>};
<разделы описаний>
<раздел операторов>
end;
где параметры – перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов, которые отделяются друг от друга точкой с запятой.
Например: Procedure Summa (a, b: real; n: integer);
Подпрограмма-функция предназначена для вычисления какого-либо параметра. Структура функции такая же как и у процедуры. Для описания функции используется зарезервированное словоfunction.
Объявление функции:
function <имя функции> {<параметры>}:<тип результата>;
<разделы описаний>
<раздел операторов>
end;
Например: Function Summa (a, b: real): real;
2.5.4 Блок операторов
В программе на Паскале этот блок является самым основным, т.к. именно здесь с предварительно описанными величинами выполняются действия, позволяющие получить результат, ради которого составлялась вся программа. Раздел операторов начинается зарезервированным словом BEGIN затем следуют операторы, отделенные друг от друга точкой с запятой завершает раздел зарезервированное слово ENDсточкой. Слова BEGIN и END – аналог открывающей и закрывающей скобок в арифметических выражениях.
Основной блок программы состоит из последовательности операторов, причем работа программы начинается именно с первого оператора основного блока программы. Операторы выполняются строго последовательно в том порядке, в котором они записаны в соответствии с синтаксисом и правилами пунктуации.
Формат:
BEGIN
<оператор 1>;
<оператор 2>;
…...…………;
<оператор n>;
END.
Необходимо обратить внимание на наличие точки после служебного слова END.После последнего оператора END всегда ставится точка, что означает окончание текста программы.
КОММЕНТАРИИ
В программе на Паскале также может быть использован комментарий — выделенная в фигурные скобки информация для пояснения, которая не исполняется программой.
Комментарии можно записать в любом месте программы, где разрешен пробел. Кроме фигурных скобок { }, могут использоваться также пары символов (* и *) слева и справа от комментария соответственно.
Текст комментария может содержать любые комбинации латинских и русских букв, цифр и других символов алфавита. Ограничений на длину нет, он может занимать несколько строк. В ограничителях (* и *) пробелы запрещены между звездочкой и скобкой. Ограничители { }, (* *) удобно использовать при отладке программы, т.к. с их помощью можно временно исключить выполнение какой-либо части программы.
Программы с подробными пояснительными комментариями значительно легче отладить, так как они содержат дополнительную информацию для работы с программой.
Рассмотрев основные блоки программы на языке Паскаль, структуру программыможно представить в следующем виде:
Program имя программы;
uses список модулей;
label метки;
const объявление констант;
type определение типов данных;
var объявление переменных;
procedure имя;
function имя;
BEGIN
тело программы (операторы)
END.
Контрольные вопросы
1. Укажите буквы, символы, составные символы:
Y, !, ^, 1, *, <=, S, д, +
2. Что в списке можно рассматривать как идентификаторы:
Summa, 25_dney, GOD_R, 453, Курс, Nomer.GR
3. Сколько в списке зарезервированных слов:
begin, read, cos, then, summa, произведение
4. В каких случаях надо использовать переменные:
- если в программе используются выражения?
- если в вычислениях какой-либо операнд постоянно меняет свое значение?
- если в программе используется какое-то число?
5. Для чего используется указание типа данных величины?
6. Какие типы данных относятся к скалярным?
7. Охарактеризуйте целочисленные типы данных, какие они могут принимать значения, в каких операциях могут участвовать?
8. Какие результаты выполнения выражений неправильны:
12/3=4 ?
12 div 3 = 3 ?
15 +21 mod 7 = 18 ?
2 div 3 =1 ?
9. Какие стандартные функции определены для целых чисел?
10. Если необходимы вещественные числа из диапазона [a, b], каким образом применить функцию random?
11. Чем отличаются вещественные числа от целых?
12. Какие из следующих соотношений неправильны:
6.17Е+03 =617 ?
0.12Е05=12000 ?
14Е-02=0.14 ?
1200Е+03 = 12000.0 ?
13. Где применяется булевский тип данных?
14. Чему равен результат выражения:
61>91
10>-7
208>175
15. Какой тип подходит для данного диапазона :
6 . . 90
-40 . . 45
10 . . 65000
100,0 . . 10000,0
16. Определить тип выражения :
1+0.0
sqrt(16)
20/4
sin(0)
sqr(4)
trunc(-3.14)
17. Если y – вещественная переменная, а n – целая, то какие из следующих операторов присваивания правильны, а какие – нет:
y:=n+1;
n:=y-1;
n:=4.0;
y:=trunc(y);
y:= n div 2;
y:= y div 2;
n:= n/2;
n:= sqr(sqrt(n));
18. Какие результаты выполнения выражения неправильны :
Not (22<12) = False ?
(12<45) or (24>100)= True ?
(23<17) and (40>213) = True ?
47>>14 = True ?
19. Что такое выражение, операнд, операция ? Какие операции в языке Паскаль вы знаете?
20. Чем отличаются следующие выражения и каким будет результат их выполнения:
10+6*2/2
(10+6)*2/2
(10+6*2)/2
10+6*(2/2)
21. Какая структура программы правильна:
Program MyProg;
Program MyFirst;
begin
begin
Writeln(‘ Привет ‘);
X:=Y+100;
end.
end.
22. Какой из перечисленных разделов обязателен в программе:
раздел var ?
раздел const ?
раздел type ?
раздел begin … end ?
раздел program ?
23. Какие из комментариев неправильны :
{Программа для вычисления}
(* Это тоже комментарий *)
{{ Комментарий в комментарии }}
(* { Другой вариант }*)
{ (* Следующий вариант *) }
(* (* Возможный вариант *) *)
24. Для чего используется слово uses ?
1) такого слова нет в языке Паскаль
2) это пользовательский идентификатор
3) с его помощью подключают стандартные модули
4) это стандартная константа
5) это описание процедуры
25. В разделе процедур и функций описываются :
1) только стандартные процедуры
2) только пользовательские процедуры
3) и стандартные, и пользовательские
4) такого раздела в программе не может быть
26. Наберите и откомпилируйте простейшую программу :
Program MyProg;
begin
Writeln (5*6);
Writeln(‘ Привет ‘);
end.
Каков будет результат ее выполнения ?
27. Где ошибки (их три) в следующей программе ?
Program Ошибки;
begin
Summa := 6+8;
end;
28. Где ошибки (их три) в следующей программе ?
Program Ошибки1;
{{ Программа с ошибками }}
begin
var X: integer;
X:= 6+8;
Write (X);
end.
29. Где ошибка в следующей программе ?
Program Oshibka;
uses ;
{(* Программа с ошибкой *)}
begin
end.
30. Где ошибка в следующей программе ?
Program Summa;
var X, Y, Сумма : integer;
begin
Writeln(‘ Введите Х ‘);
Readln (X);
Writeln(‘ Введите Y ‘);
Readln (Y);
Сумма:=Х+Y;
Writeln(Сумма);
end.
ГЛАВА 3
Операторы языка ПАСКАЛЬ
3.1 ВВОД-ВЫВОД ДАННЫХ
Часто первыми действиями, выполняемыми программой, являются действия по вводу и выводу данных.
Ввод данных – передача информации от внешнего носителя в оперативную память для обработки.
Основные устройства ввода - клавиатура и дисковый файл. Программа получает входные данные из файла Input и помещает результат обработки в файл Output. Стандартно файлу Input назначена клавиатура, файлу Output – экран терминала.
Для ввода и вывода данных в языке Паскаль предусмотрены следующие процедуры ввода-вывода: Read, Readln, Write, Writeln. Часто эти процедуры называют операторами.
3.1.1 Процедура чтения Read
Обеспечивает ввод числовых данных, символов, строк для их последующей обработки.
Формат:
Read (а1, а2, а3, …,аn) ;
Readln;
Readln (а1, а2, а3, …,аn) ;
где а1, а2, а3, …,аn – переменные допустимых типов данных integer, real, char, string.
Третий оператор эквивалентен первым двум, выполненным последовательно. Значения набираются на клавиатуре через пробел и высвечиваются на экране. После набора данных для одной процедуры нажимается Enter.
Значения переменных должны вводиться в строгом соответствии с синтаксисом языка Паскаль. Если элемент ввода типа integer, а набирается с клавиатуры значение типа char – возникает ошибка ввода-вывода.
Пример:
Var x : integer;
y : real;
z : boolean;
.....
Read (x, y, z) ;
С клавиатуры можно ввести
True
Типовые ошибки при вводе:
3.2 -1.8 true {В качестве х введено действительное значение}
х = 32 {В качестве х введено символьное значение}
32 -1,8 true {В качестве у введено символьное значение}
В случае несоответствия типа введенных данных типу переменной, значение которой вводится с клавиатуры, программа завершает работу и на экране выводится сообщение об ошибке ввода-вывода. Если программа запущена из среды Turbo Pascal – Error 106 Invalid numeric format (Неверный числовой формат).
Если в программе несколько процедур Read, данные вводятся потоком, т.е. после считывания значений переменных для одной процедуры, данные для следующей процедуры набираются в той же строке.
Например,
Read (x, y);
Read (z);
С клавиатуры можно ввести данные через пробел на одной строке
True
Процедура чтения Readln аналогична Read. Единственное отличие состоит в том, что если в программе несколько процедур Readln, то после считывания значений переменных для одной процедуры Readln, данные для следующей процедуры будут считываться с начала новой строки.
Например,
Readln(x, y);
Read(z);
С клавиатуры ввели данные через пробел на одной строке
32 -1.8 true{Значение переменной z считываться не будет}
Инструкция Readln при вводе с клавиатуры предпочтительней Read, т.к. полностью освобождает буфер клавиатуры – рабочую область памяти, в которой временно хранятся введенные с клавиатуры символы. Инструкция Read оставляет в буфере клавиатуры код клавиши Enter, которой завершает процесс.
Процедура Readln без переменных обычно записывается в конце программы и служит для создания паузы, которая длится до нажатия клавиши Enter. В противном случае по окончании программы окно с текстом программы закроет экран с полученным результатом.
3.1.2 Процедура записи Write
Вывод данных – передача информации после обработки из оперативной памяти на внешнее устройство (экран, принтер, файл на диске).
Обеспечивает вывод числовых данных, символов, строк и булевских значений.
Формат:
Write (а1, а2, а3, …,аn) ;
Writeln;
Writeln (а1, а2, а3, …,аn) ;
где а1, а2, а3, …,аn – выражение типа integer, byte, real, char, boolean.
Инструкции Write и Writeln предназначены для вывода констант различных типов, значений переменных или выражений. Число параметров – произвольное. Данные выводятся на экран.
Из констант наиболее часто выводятся строки текста (строковые константы заключаются в апострофы). Если в конструкции вывода записано выражение, оно сначала будет вычислено, а затем выполнен вывод полученного результата.
Процедура Writeln аналогична Write, отличие заключается в том, что после вывода последней переменной из списка, курсор автоматически переходит в начало новой строки. Инструкция Writeln без параметров переводит курсор в начало следующей строки, что позволяет, например, отделять результаты работы программы друг от друга пустыми строками.
ФОРМАТ ВЫВОДА
В операторах вывода имеется возможность записи выражения, определяющего ширину поля вывода для каждой выводимой переменной или константы:
Write(y1:n:m, y2:n:m, …);
Writeln(y1:n:m, y2:n:m, …);
где y1, y2,…- выражение, переменная или константа;
n– определяет общую ширину поля вывода;
m – определяет место под дробную часть.
Если заданное n мало, при выводе ширина поля будет увеличена, если мало m – то производится округление.
Кроме того, в операторах вывода можно задавать количество пробелов. Для этого необходимо записать оператор вывода в виде:
Write (‘ ‘ : q);
гдеq — константа целого типа, указывающая число пробелов.
Примеры:
· x - целое число
х– выводится десятичное представление величины х, начиная с позиции расположения курсора
Значение x
Выражение
Результат
Write(x)
Write(x,x)
х : n – выводится десятичное представление величины х в крайние правые позиции поля шириной n
Значение x
Выражение
Результат
Write(x:5)
_ _ 123
Write(x*х:7)
_ _ _ _ _16
· R – вещественное число
R – в поле шириной 16 символов выводится десятичное представление величины R в формате с плавающей точкой:
± #.# # # # # # # # # # E ± # #
Значение R
Выражение
Результат
123.432
Write(R)
_ 1.2343200000Е+02
-0.25
Write(R)
- 2.5000000000Е-01
Write(R/2)
_ 1.0000000000Е+02
R : n– в крайние правые позиции поля шириной n символов выводится десятичное представление величины R в формате с плавающей точкой (минимальная длина поля вывода 8 символов для отрицательного значения и 7 символов для положительного значения R, после десятичной точки выводится по крайней мере одна цифра):
Значение R
Выражение
Результат
123.432
Write(R:12)
1.234320Е+02
-0.25
Write(R:9)
-2.50Е-01
R : n: m– в крайние правые позиции поля шириной n символов выводится десятичное представление величины R в формате с фиксированной точкой, после десятичной точки выводится m цифр, представляющих дробную часть. Если m=0, ни десятичная точка, ни дробная часть не выводятся.
Значение R
Выражение
Результат
123.432
Write(R:8:4)
123.4320
-0.25
Write(R:7:1)
_ _ _- 0.3
Write(R:3:0)
· Ch – выражение символьного типа
Ch – начиная с ткущей позиции курсора выводится значение Ch
Значение Ch
Выражение
Результат
‘123’
Write(Ch)
‘No’
Write(Ch)
No
‘?!’
Write(Ch, Ch)
?!?!
Ch : n– в крайние правые позиции поля шириной n символов выводится значение Ch
Значение Ch
Выражение
Результат
‘123’
Write(Ch:5)
_ _ 123
‘?!’
Write(Ch:3, Ch:5)
_ ?! _ _ _?!
· S – выражение строкового типа
S– начиная с позиции расположения курсора выводится значение S
Значение S
Выражение
Результат
‘DAY NEDELY’
Write(S)
DAY NEDELY
‘No’
Write(S, S)
NoNo
S : n– в крайние правые позиции поля шириной n символов выводится значение S
Значение S
Выражение
Результат
‘DAY NEDELY’’
Write(S:12)
_ _DAY NEDELY
‘No’
Write(S:3, S:5)
_No _ _ _ No
· В – выражение логического типа
В – начиная с текущей позиции курсора значение В выводится True или False
Значение В
Выражение
Результат
True
Write(В)
True
False
Write(В, not В)
FalseTrue
В : n– в крайние правые позиции поля шириной n символов выводится результат True или False булевского выражения В
Значение В
Выражение
Результат
True
Write(В:5)
_ True
False
Write(В:6, not В:5)
_ False_ True
Пример программы с использованием Write:
Var A: integer;
B, C, D: real;
begin
А:=2; В:=5.8;
Write(A:3,’ ’:2); Writeln(B:4:2);
C:=A+B;
D:=A*B;
Writeln;
Writeln(‘Сумма ‘, ‘ C=‘, C:3:1);
Writeln(‘Произведение ‘, ‘ D=‘, D);
end.
Результат выполнения:
_ _ 2_ _5.80
Сумма C=5.8
Произведение D=1.1600000000Е+01
3.2 ОПЕРАТОРЫ
Основная часть программы на языке Паскаль представляет собой последовательность операторов, разделенных точкой с запятой.
Оператором называется предложение языка программирования, задающее полное описание некоторого действия, которое необходимо выполнить.
Операторы языка Паскаль можно разделить на простые и структурные.
Операторы, не содержащие никаких других операторов, называются простыми:
· оператор присваивания
· оператор безусловного перехода
· оператор вызова процедуры
· пустой оператор
Структурные (сложные) – представляют собой конструкции, содержащие простые операторы.