Глава 3 Управляющие структуры языка (операторы). § 3.1 Общая структура программы. Структура программы в Паскале имеет вид: Program Имя программы; Uses Подключаемые библиотеки (модули); Label Список меток основной программы; Const Введение констант; Type Описание новых типов; Var Описание переменных Определение процедур. Определение функций. Begin Тело основной программы; End. Подчеркнуты служебные слова, обозначающие начало блока. Program – блок описания заголовка программы в Турбо-Паскале имеет декоративное значение и может отсутствовать. Uses – в Турбо-Паскале вспомогательные готовые программы собранные в библиотеки (модули). Например, процедуры рисования точек, линий, окружностей на экране содержатся в модуле graph. Модули объявляются в этом блоке. Если подключать библиотеки не нужно, блок отсутствует. Label – блок описания меток, содержит их имена перечисленные через запятую. Метки используются для организации переходов в программе. Если метки не нужны, блок отсутствует. Const – блок описания простых и типизированных констант. Может отсутствовать. Type - блок описания типов программиста. Может отсутствовать. Var - блок описания переменных с указанием типа. Может встречаться в программе несколько раз для организации глобальных и локальных переменных (т.е. до описания процедур и функций, в них, и после них). Определение процедур и функций – способ оформления вспомогательных алгоритмов, о которых будем говорить отдельно. Begin-end. – служебные слова, обрамляющие тело основной программы, где находятся операторы, которые машина выполняет. Таким образом, Beginначинает исполняемую часть программы, а end. –ее завершает. Замечание: в любом месте программы могут находиться комментарии, заключенные в фигурные скобки {…} или (*…*). § 3.2 Оператор присваивания. Общий вид: переменная := выражение; может быть: переменной, элементом массива, полем записи и др. не может быть: константа, может быть: константой, переменной, элементом массива, арифметическим или логическим выражением. 1 выражение. Работа оператора: если справа стоит выражение, то сначала вычисляется его значение, а затем это значение пересылается в переменную стоящую слева. Тип значения выражения справа от присваивания должен совпадать с типом переменной слева. Исключения: Оба типа (слева и справа от :=) являются вещественными. Оба типа являются целыми. Один тип строковой, другой строковой или символьный. Слева переменная вещественного типа, справа выражение (переменная) целого типа. И в некоторых других случаях. §3.3 Арифметические выражения. Арифметические выражения – это конструкции, содержащие данные, знаки математических операций, математические функции. Сложение Вычитание Математические операции Знак Тип Тип результата операндов + Целое, вещ. Целое вещ. Целое, вещ. Целое вещ. Умножение * Название Деление / Целое частное от div деления Целый остаток mod от деления . Функция abs(x) Pi sin(x) cos(x) Целое, вещ. Целое вещ. Целое вещ. целое вещ. целое 12.5 + 3 {=15.5} 15.5 - 3 {=12.5} 15 - 3 {=12} 3.5*2 {=7.0} 3*2 {=7} 3/5 {=0.6} 3 div 5 {=0} целoе целoе 3 mod 5 {=3} Математические функции. назначение Тип аргумента sqrt(x) x Число π sin(x), x-радианы cos(x), x-радианы arctg(x), в рад, в пределах от –π/2 до π/2 x , x>0 sqr(x) exp(x) ln(x) random x² eх ln x, x>0 случайное число ArcTan(x) Пример Целое, вещ. Целое, вещ. Вещ. (радиан) Вещ.(радиан) Вещ. Целое, вещ. Целое, вещ. вещ. вещ. - Тип значения функции как у аргумента Вещ. Вещ. Вещ. Вещ. как у аргумента Как у аргумента вещ. вещ. вещ. 2 random(x) odd(x) trunc(x) frac(x) int(x) round(x) [0,1[ случайное число [0,х[ возвращает True,если х-нечетное целая часть x дробная часть х целая часть х округление х до ближайшего целого Word Word Целое Логический вещ. вещ. вещ. вещ. longint вещ. вещ. longint Пример1. Алгебраическая запись 2∙105 cos3x x2 y2 103 e x 2 5 sin x 1 cos 2 x arctg cos x Запись на Паскале 2E5*cos(3*x) sqrt(x*x+y*y) sqrt(sqr(x)+sqr(y)) 1E3*exp(sqr(x)+sqrt(5*sin(x))) arctan((1-sqr(cos(x)))/cos(x)) Пример2. Вычисление arcos(x). Т.е. нужно найти такой угол α, что cos(α)=x или tgα= sin = cos 1 cos 2 = cos 1 x 2 x 1 x2 180 1 и α= arctg x {в программе alfa - угол в радианах [-π/2;π/2]; alfa1 - угол в градусах [-90˚; 90˚]}. Program Prim2; var x,alfa,alfa1: real; begin writeln(‘Введите значение косинуса ’); read(x); alfa:=arctan(sqrt(1-sqr(x))/x); alfa1:=alfa*180/pi; write(‘угол в радианах’,alfa); write(‘угол в градусах’,alfa1); end. 3 Пример3. Возведение в степень. Воспользуемся свойством: ln(xa)=a*ln(x), то (xa)=exp(ln(xa))=exp(a*ln(x)). Program Prim3; var Pwr,x,a,:real; Begin writeln(‘Введите аргумент и степень ’); read(x,a); Pwr:=exp(a*ln(x)); write(x,’в степени‘,a,’равно’,Pwr); end. Пример 4. Получение случайных чисел Program Prim4; var a:real; b:integer; Begin Randomize; a:=random; b:=random(10); writeln(’a=‘,a:6:4,’ b=’,b); end. Приоритет 1 2 3 4 5 6 Приоритет математических операций. Тип действия Вычисления в скобках (…) Вычисление функций унарные операции (например: not) Операции типа умножения, деления (*, /, div, mod, and) Операции типа сложения (+, -, or, xor) Операции отношений (=, <>, <, >, <=, >=) §3.4 Блок-схемы. При записи алгоритма в виде блок-схемы, каждая операция записывается в виде графического блока, изображение которого указывает на характер выполняемой операции. Необходимые параметры записываются внутри блока. Блоки "Начало" и "Конец" 4 Блоки ввода и вывода Блок выражений Блок условия Блоки соединяется линиями, показывающими порядок выполнения операций. При направлении выполнения операций снизу вверх и справа налево на концах линий изображают стрелки. В противном случае считается, что направление выполнения операций - сверху вниз и слева направо. §3.4 Логические выражения. Логическое выражение – конструкция, состоящая из данных, операций отношения, логических операций, арифметических выражений. Имеет значение True (истина) или False (ложь). Операция Операции отношения. значение пример = <> < <= > >= равно не равно меньше меньше либо равно больше больше либо равно х=0 x<>25 x<5 x<=2 x>2 x>=2 Логические операции (здесь L1,L2 – логические выражения или переменные) 5 обозна чение not название запись результат пример логическое “не” not L1 not(x>0) {верно, если х≤0} and логическое “и” L1 and L2 or логическое “или” L1 or L2 xor логическое исключающее “или” L1 xor L2 Логическое значение, противоположное значению L1 Значение True, если L1 и L2 оба имеют значение True.Иначе- false Значение True, если L1 или L2 имеют значение True, и значение false, если L1 и L2 =false Значение True, если значение L1 и L2 – различны и false если равны (х>0) and (y>15) {верно, если х>0 и y>15 одновременно верны} (x<-2) or (x>2) {верно, если │х│>2, т.е. (x<-2) или (x>2)} Q1>0 xor Q2>0 {верно, если Q1, Q2 имеют разные знаки } Примеры a>=0 (a<>0)and (x=2) (x<20) or (x>20) x or y Рассмотренные логические выражения используются в условном операторе, операторе варианта, в операторах цикла с пред и пост условием. §3.5 Условный оператор. общий вид условного оператора if условие then оператор1 else оператор2; где условие – это логическое выражение. Работа оператора: Если условие выполняется, то выполняется ветвь then, т.е. оператор1; если условие не выполняется – то оператор2. Пример: из двух чисел а и b найти минимальное. Program Prim2; var a,b,c:real; begin read(a,b); if a>b then c:=b else c:=a; writeln(‘минимальное’,c); end. Условный оператор часто используется в сокращенной форме: if условие then оператор1; Например, та же задача о минимуме. Program Prim3; 6 var a,b,c:real; begin read(a,b); c:=a; if b<a then c:=b; writeln(‘минимальное’,c); end. В отдельных случаях можно использовать вложенные условные операторы: if условие1 then if условие2 then оператор1 else оператор2 else оператор3; Правило: альтернатива else считается принадлежащей ближайшему оператору if , не имеющему else. §3.6 Составной оператор. begin Оператор 1; Оператор 2; ……… Оператор n; end; Вся такая совокупность из n операторов рассматривается как один оператор или блок. Пример: Program Prim4; var x,f:real; begin write(‘введите х’); read(x); if x>=1 then begin f:=sqrt(sqr(x)-1); writeln(‘f(x):=sqrt(sqr(x)-1)=’,f:6:3); end else begin f:=1-sqr(x); writeln(‘f(x):=1-sqr(x)=’,f:6:3); end; end. §3.7 Оператор выбора (варианта). Используется, когда нужно организовать несколько ветвей. Общий вид: case селектор of значение 1: оператор 1; значение 2: оператор 2; ……… 7 значение N: оператор N; else оператор end; ,где селектор -это переменная или выражение целого, символьного (char), логического типов, перечисляемого типа или типа – диапазона. Набор значений - это конкретные значения селектора, при которых будет выполнен соответственно нужный оператор. Работа оператора: сначала вычисляется значение сектора, если он является выражением. Затем выполняется тот оператор, который соответствует значению, совпадающему со значением селектора. Если значение селектора не совпало ни с одним из указанным значением, то выполняется ветвь else. Замечание1. В качестве значения селектора может быть указан набор значений через запятую или диапазон значений разделенный двумя точками. Замечание2. Ветвь else можно опустить. Замечание3. В написании оператора можно использовать как простой , так и составной оператор. Пример: запрограммируем вычисление функции: 1, 0≤x<1 f(x)= √x+5 , 1≤x<3 x² , 3≤x<10 при х<0 и x>10 функция не определена. Program Prim6; var x,f:real; begin writeln(‘введите 0<=x<10’); read(x); case trunc(x) of 0: writeln(‘f=1’); 1,2: begin f:= sqrt(x+5); writеln(‘f=’,f); end; 3..9 writeln(‘f=’,sqr(x)); else writeln(‘введено значение вне диапазона’); end; end. Ту же задачу можно написать по-другому: Program Prim7; var x,f:real; n:byte; begin read(x); n:=0; f:=0; n:=ord((0<=x) and (x<1))+ 2*ord((1<=x) and (x<3))+ +3*ord((3<=x) and (x<10)); case n of 1: f:=1; 8 2: f:=sqrt(x+5); 3: f:=x*x; end; writeln(‘f=’,f:6:3); end. 9