Файл: Основы программирования на языке Pascal ( Основные элементы ).pdf
Добавлен: 01.04.2023
Просмотров: 193
Скачиваний: 1
Выражения на языке Паскаль зависят от типа выражения. Рассмотрим сначала выражения арифметические, то есть те, результатом которых является число [10].
В состав арифметического выражения на языке Паскаль могут входить:
• числовые константы;
• имена переменных;
• знаки математических операций;
• математические функции и функции, возвращающие число;
• открывающиеся и закрывающиеся круглые скобки.
Правила построения выражений напоминают математические с некоторыми уточнениями. Выражение записывается в одну строку (никакой многоэтажности), между операндами обязательно должен стоять знак операции, знаки некоторых операций и названия некоторых функций отличны от привычных вам.
Операции:
• + сложение;
• - вычитание;
• / деление;
• * умножение;
• MOD остаток от деления (записывается так: A MOD B; читается: остаток от деления A на B); эта операция применима только к целым числам;
• DIV целочисленное деление (записывается так A DIV B; читается: результат деления A на B без дробной части); эта операция тоже применяется только для целых операндов.
Аргументы функций всегда записываются в круглых скобках:
• SIN(X) sin x;
• COS(X) cos x;
• ARCTAN(X) arctg x;
• ABS(X) абсолютное значение x (в математике - |x|);
• SQR(X) возведение x в квадрат;
• SQRT(X) извлечение квадратного корня;
• TRUNC(X) отбрасывание дробной части х;
• ROUND(X) округление х до ближайшего целого числа;
После выполнения второго оператора присваивания в участке памяти, отведенном под переменную R, окажется результат указанного выражения [5].
2.3 Составной оператор
Составной оператор представляет собой последовательность некоторых операторов, которые выполняются в том порядке, в котором они содержаться в тексте программы. При этом зарезервированные слова BEGIN и END являются так называемыми операторными скобками, в которые заключены операторы, входящие в составной оператор. Когда, в зависимости от определенного условия, требуется обеспечить последовательное выполнение некоторого набора операторов, без составного оператора не обойтись.
Begin
<Оператор 1>;
<Оператор 2>;.
<Оператор N>
End;
Возможно, такая структура напоминает основную структуру программы. Действительно, отличие только в том, что после End в конце составного оператора ставится точка с запятой, а в конце программы - точка. По своей сути вся программа представляет собой большой составной оператор [3].
Обратите внимание на то, что точка с запятой перед End может не ставиться.
Составной оператор предоставляет возможность выполнить произвольное количество команд там, где подразумевается использование только одного оператора. Такая необходимость бывает очень часто [9].
2.4 Операторы ввода и вывода информации
Во многих случаях возникает необходимость посмотреть на результат выполнения программы. Что бы узнать какое значение имеет переменная в настоящее время, необходимо использовать операцию вывода на экран.
Взаимодействие устройств обработки и хранения информации с внешней средой (хотя бы с пользователем) является абсолютно необходимым. За такой интерфейс в языке Паскаль отвечают операторы ввода-вывода информации. Эти инструкции позволяют ввести аргументы, параметры расчетов во время выполнения программы (а не на этапе ее написания), осуществить вывод рассчитанных данных в понятном человеку виде [1].
Операторы ввода (форматы операторов):
Read(<Список ввода>);
Readln(<Список ввода>);
В этой форме команды позволяют вводить данные переменных во время работы программы с клавиатуры. В элементах входного списка можно указать имя переменной, в которую нужно ввести значение, введенное с клавиатуры.
Оператор ввода выполняется следующим образом: программа приостанавливается, на экране появляется курсор, и компьютер ожидает, что пользователь заполнит список ввода данными переменных, имена которых перечислены. Пользователь вводит необходимые значения с клавиатуры в нужном порядке в списке ввода, а затем нажимает клавишу Enter. После этого собранные данные классифицируются по соответствующим переменным, и программа продолжается. Примечание: данные при вводе разделяются пробелами [3].
Разница между работой процедур Read и Readln (от Read line) состоит в следующем: после выполнения Read значение следующего данного считывается с этой же строчки, а после выполнения Readln - с новой строки.
Для вывода информации в Паскале также есть две команды:
Write(<Список вывода>);
Writeln(<Список вывода>);
Такой формат использования Write и Writeln позволяет выводить на экран монитора данные из списка вывода. Для элементов выходного списка можно использовать имена переменных, выражения и константы. Значение выражения вычисляется первым перед отображением компьютера. Элементы списка разделяются запятыми, как и в операциях ввода.
Различия операторов вывода таково: после выполнения оператора Writeln (от Write line) происходит переход на новую строчку, а после выполнения инструкции Write, переход на новую строчку не происходит и печать по последующим командам вывода Write или Writeln будет происходить на той же строчке. При вызове оператора Writeln без параметров просто происходит переход на новую строчку [6].
Приведем пример использования операторов ввода и вывода:
Program Inteface;
Var
R,S : Real;
Begin
Write('Введите радиус круга '); {Печать на экране просьбы о вводе}
Readln(R); {Ввод значения в переменную R с клавиатуры}
S:=4*ARCTAN(1)*SQR(R); {Вычисление площади круга (pR2)}
Writeln('Площадь круга радиусом ',R,' равна ',S)
End.
Эта программа запрашивает у пользователя значение радиуса круга, обеспечивает возможность ввести его значение, рассчитывает и выводит на экран величину площади круга с таким радиусом. Таким образом, появляется возможность, не внося изменений в текст программы, вводить различные значения радиуса и получать, соответствующие им значения площади круга. Для этого достаточно несколько раз запустить программу. Также эта программа демонстрирует следующее правило: выдача результатов должна быть прокомментирована так, чтобы был ясен смысл напечатанных чисел. Действительно, ведь можно было бы ограничиться Writeln(S), но значение выведенного программой числа в этом случае было бы ясно только тому, кто эту программу написал [4].
2.5 Условный оператор
Одной из основных алгоритмических структур является ветвление (альтернатива).
Рисунок 1 – Форма условного оператора
Если условие выполняется, то будет выполнен оператор1, если нет, то – оператор2. В схеме имеются два действия, но из них будет выполнено только одно, так как условие либо ложно, либо истинно, другого не дано. Такая схема позволяет решать задачи, для решения которых, в зависимости от ситуации требуется совершить то или иное действие. Нет никаких сомнений в том, что число задач такого рода составляет большое значение. Кроме того, очень сложно придумать реально значимое задание, алгоритм выполнения которого содержал бы в себе простое прямое следование команд. Даже простейшая задача, взятая из курса математики, не может быть решена без использования ветвления. Итак, необходимо вычислить значение выражения y=1/x. Вам известно, что данная функция не всегда имеет значение, то есть не для всех значений аргумента существует значение результата. Наша задача так составить алгоритм, чтобы исполнитель ни в коем случае не встал в тупик, даже при получении нуля в качестве аргумента. Сформулировать это на естественном языке не трудно:
1. Получить значение x.
2. Если x=0, то сообщить, что выражение значения не имеет, иначе - вычислить y как 1/x.
Таким образом используется приведенная выше алгоритмическая структура. Она может быть выражена простыми словами:
Если <усл.> {Если выполняется условие}
то <действие 1> {то выполнить действие № 1 }
иначе <действие 2> {иначе - выполнить действие № 2 }
все
Как это записать на Паскале? Да точно так же, только по-английски.
Формат условного оператора на языке Паскаль:
If <условие>
Then <оператор 1>
Else <оператор 2>;
Обратим внимание на то, что в Then- и Else- части стоит только один оператор. Но что делать, чтобы решить задачу, в которой по выполнению или невыполнению условия нужно совершить не одно, а несколько действий? Здесь приходит на помощь уже известный вам составной оператор. В операторные скобки можно заключить любое количество операторов.
Вариант условного оператора в этом случае:
If <условие>
Then Begin <группа операторов 1> end
Else Begin < группа операторов 2> end;
Знак «точка с запятой» не ставится перед служебным словом Else, но операторы в группах, естественно, отделяются друг от друга этим знаком.
В программе Pascal условием является выражение, значение которого является значением логического (Boolean) типа. Либо переменная указанного типа, либо сложная последовательность операторов, связанных с логической операцией.
В простых условиях могут применяться знаки операций сравнения: >(больше), <(меньше), =(равно), <>(не равно), >=(больше или равно), <=(меньше или равно).
Примеры простых условий: A=5 {Значение переменной А равно 5}
(C+D3)>=(D1*(45-2))
{Значение выражения в левой части больше либо равно значению выражения из правой части}
S<>'ABC' {Значение переменной S не равно строковой константе 'ABC'}
Приведем пример решения еще одной задачи: «Из двух чисел выбрать наибольшее».
На первый взгляд решение очевидно, но оно не столь тривиально, как кажется [4].
Program Example;
Var A,B,C : Real; {A,B - для хранения аргументов, C - результат}
Begin
Writeln('Введите два числа');
Readln(A,B); {Вводим аргументы с клавиатуры}
If A>B Then C:=A Else C:=B; {Если A>B, то результат - A, иначе результат - B}
Writeln(C); {Выводим результат на экран}
End.
2.6 Метки. Оператор безусловного перехода
Рассмотренные управляющие структуры обеспечивают основные потребности в программировании. Однако, в языке Паскаль имеется возможность для выполнения безусловного перехода.
Безусловный переход приводит к передаче управления из одного места программы в другое. Для выполнения безусловного перехода нужно сделать следующие действия:
- Оператор, получающий управление должен иметь метку в виде идентификатора, заканчивающегося символом двоеточие.
- В начале программы, в разделе Label, следует описать эту метку.
- Оператор goto должен быть помещен в то место программы, откуда выполняется переход. Оператор goto передает управление на оператор с заданной меткой. Этот оператор можно располагать в любом месте программы, где содержаться операторы языка.
Пример программы:
Program Prim3;
Label M;
Var x:real;
BEGIN
x:=0;
M: writeln('x=',x,'cos x = ',cos(x));
x:=x+0.01;
goto M;
readln;
END.
Программа будет выполняться таким образом: х присвоится значение 0; writeln выведет на экран текст. Далее значение x будет увеличено на 0,01 и оператор goto передаст управление на метку M, то есть опять будет выведено значение в операторе writeln. И так будет происходить до бесконечности, так как в текущем алгоритме окончание работы не предусмотрено. Для завершения работы следует применить оператор if [2].
2.7 Цикл. Виды Циклов
Наиболее распространенной в практике программирования является циклическая программа. В периодической программе алгоритм повторяется много раз при изменении одного из параметров. Операторов цикла в Паскале три: for, repeat, while.
Цикл For.
Оператор состоит из заголовка. Заголовок определяет порядок переменных в параметрах цикла и тело цикла, которое является итерационным алгоритмом. Общий вид оператора:
for – параметр цикла: = начальное значение to, конечное значение do {заголовок}; оператор; {тело цикла}. Этот оператор применяется, если начальное значение < конечного значения;
for – параметр цикла:=начальное значение downto, конечное значение do; оператор; применяется, если начальное значение > конечного значения.
Пример: найти сумму квадратов целых чисел от 8 до 1.24.
Program Prim;
Var i,s:integer;
BEGIN
s:=0;
for i:= 8 to 124 do
s:=s+sqr(i);
writeln('s=',s);
readln;
END.
Правила применения оператора цикла for
1.Тело цикла - всегда один оператор. Чтобы использовать в теле цикла несколько операторов, то их объединяют в один с помощью операторных скобок begin, end.
for i:=l to n do
Begin
S:=S+sin(x)/cos(x);
x=x+0.01;
writeln('S=' ,S)
end.
Операторы, взятые в операторные скобки begin, end, считаются одним составным оператором.