Оператор безусловного перехода позволяет изменить обычный последовательный порядок выполнения операторов и непосредственно перейти к нужному оператору, предварительно помеченному меткой.
Структура такого оператора:
GOTO<метка>;
гдеGOTO - ключевое слово, обозначающее перейти к <метке>,
<метка> является произвольным идентификатором, который позволяет пометить любой оператор в программе и потом ссылаться на него. Оператор от метки отделяется двоеточием. В языке Pascal ABC допускается использовать в качестве метки также целое число без знака.
Пример:
LABEL m1, loop;
VAR a, b, c, d: word;
BEGIN
m1: a := b+c*d;
. . .
goto m1;
loop: END.
Все использованные в программе метки должны быть описаны в разделе описаний программы с указанием ключевого слова “LABEL”. Описанные в этом операторе метки обязательно должны быть использованы в программе.
Метки, описанные в функции или процедуре, локализуются только в ней, передача управления извне процедуры на метку внутри ее невозможна. С помощью оператора GOTO не рекомендуется осуществлять переход во внутреннюю часть сложного оператора (цикла, составного оператора). Запрещается переход с одной альтернативной части (ветви) сложного оператора на другую.
Современная технология структурного программирования основана на принципе программирования без GOTO. Считается, что злоупотребление этими операторами затрудняет чтение программы, усложняет ее отладку.
Тем не менее, в некоторых случаях использование оператора перехода может упростить программу. Обычно GOTO используется для досрочного выхода из любого сложного оператора или вложенных операторов цикла.
Пример и задания с оператором IF
Пример. Вычислить значения функции y(x) в зависимости от интервала, в который попадает аргумент x.
if (x >= 0) and (x<=2) then y :=A*SQR(x)*LN(x+1) ;
if x>2 then y := EXP(A*x+1)*COS(B*x);
10: writeln( ' x= ', x :8:1 , ' y= ' , y :8:2); //вывод значений x и y
End.
y = ax2Ln(x+1)
y=Ax+b
y=eax+1cos(bx)
Да
Нет
Нет
Да
Да
Каждому условному оператору в программе соответствует символ “решение” в схеме алгоритма на рис. 5. Программу можно упростить, используя вложенные условные операторы. Например, если в первом и втором операторах IF добавить их альтернативные части ELSE, тогда в третьем IF условие упростится до вида (x <= 2) и не потребуется последний оператор IF.
Нет
Рис. 5
Задания к самостоятельному выполнению (программа_2_1)
Вычислить значение функции в зависимости от интервала, в который попадает вводимый с клавиатуры аргумент:
1. Для t [0,3], at2lnt при 1 £ t £ 2,
где a = -0.5,b = 2 z = 1 при t < 1,
eatcosbt при t > 2,
2. Для x [0,4], при x > 2,
где а = 2.3 f = х при 0.3 < x £ 2,
cos(x-a) при x £ 0.3,
3. Для x [0,7], (a+b)/(ex+cosx) при 0 £ x < 2.3,
где a = -2.7,b = -0.27 z = (a+b)/(x+1) при 2.3 £ x < 5,
ex+sinx при 7 ³ х ³ 5,
4. Для i [7,12], ai4+bi при I < 10,
где a = 2.2,b = 0.3. y = tg(i+0.5) при I = 10,
e2i+ при I > 10,
5. Для x [0.9,5], x2-7/x2 при x < 1.3,
где a = 1.5 y = ax3+7 при 1.3 £ x < 3,
lg(x+7 ) при x ³ 3,
6. Для t [-1.4], при t < 0.1,
где a = 2.1,b = 0.37. z = at+b при 0.1 £ t < 2,
при t ³ 2,
7. Для x [0,6], a esinx+2.5 при x < 0.3,
где a = 1.5. y = ecosx+a при 0.3 £ x < 4,
(sin x)/(a+ex) при x ³ 4,
y =
8. Для x [1,2], a/x+bx2-c при x £ 1.2,
где a = 1.8,b = -0.5, c = 3.5 (a+bx)/ при x > 1.2,
9. Для t [1,5], t при t > a,
где a = 2.5 z = t sin at при t = a,
e-at cos at при t < a,
10. Для x [0,4], e-bxsin bx при x < 2.3,
где a = 1,b = 3 y = сos bx при 2.3 £ x £ 3,
e-ax cos bx при x ³ 3,
11. Для t [0.5,3], at2-b при t < a,
где a = 1.3, b = 6.5 z = a-b при a £ t £ b,
a t2/3- при t > b,
12. Для x [0,2], |e-2x sin bx| при x >1,
где b = -2.9 y = cos bx при x = 1,
e-x cos bx при x < 1,
13. Для x [0.5,2] sin (cos ax) при x >1,
где a = -0.8 z = tg ax при x = 1,
a2 x при x < 1,
14. Для x [1,2], ln bx - 1/(bx+1) при x < 1.3,
где b = 1.3 y = bx + 1 при 1.3 ³ x ³ 1.7,
ln bx +1/(bx+1) при x > 1.7,
15. Для x [-1,1], ax2+bx2/3 при x < 0.1,
где a = 2.5,b = -0.9 z = a x2 при x = 0.1,
b x2/3 при x > 0.1.
16. Ввести координаты точки (x, y). Напечатать, в каком квадранте или на какой оси координат находится эта точка.
17. Ввести радиусы R1, R2 и высоту. Вычислить объем усеченного конуса: , где S – площадь оснований. Если R1 = R2 – объем и площадь цилиндра, если R1 = 0 или R2 = 0 – объем (hπr2) и площадь πr( ) поверхности конуса.
18. Ввести с клавиатуры цифру. Определить, какой системе счисления она может принадлежать.
19. Ввести число. Определить, делится ли оно нацело на два, три или на пять.
20. Ввести a, b, h. Если h = 0, вычислить площадь прямоугольника; при a = b, найти площадь квадрата; в противном случае подсчитать площадь трапеции.
Оператор выбора варианта CASE
Оператор CASE позволяет в зависимости от значения какой-либо переменной или выражения порядкового типа выполнить те или иные действия.
Его структура имеет следующий вид:
CASE<ключ_выбора> OF
<константа_выбора1>: <оператор1>;
<константа_выбора2>: <оператор2>;
. . .
<константа_выбораN>: <операторN>
ELSE <оператор>
END;
где <ключ_выбора> - переменная (или выражение) любого порядкового типа; <константа_выбора> - константа того же типа, что и <ключ_выбора>; <оператор> - произвольный оператор Pascal ABC.
Принцип действия оператора. Сначала вычисляется <ключ_выбора>, затем в списке констант выбора отыскивается нужная константа, равная <ключу_выбора>, и выполняется стоящий за ней оператор. После этого оператор CASE завершает работу. Если в списке не найдена константа, совпадающая с "ключом", выполняется оператор, стоящий после ELSE.
Заметим, что стоящая в конце часть ELSE <оператор> является не обязательной. При отсутствии в списке выбора нужной константы оператор выбора просто завершает свою работу.
Любому из операторов <списка выбора> может предшествовать несколько <констант выбора>. В этом случае они разделяются запятыми или представляют собой диапазон значений.
Пример:
CASE <ключ> OF
1: <оператор1>;
2, 3:<оператор2>;
4 ..6:<оператор3>
ELSE <оператор>
END;
<Константа_выбора> не является меткой оператора, поэтому в разделе меток описывать её нельзя.
Примеры и задания с оператором CASE
Пример 1. Выполнить арифметическую операцию в зависимости от введенного с клавиатуры символа.
VARoperation: char;
x, y, z: real;
BEGIN
read(x,y);
read (operation);
CASE operation OF
'+': z:=x+y;
'-':z:=x-y;
'*': z:=x*y;
'/':z:=x/y;
ELSE write('нет опеpаций')
END;
WRITELN( ' z= ' , z )
END.
Пример 2. Составить программу для начисления зарплаты согласно следующему правилу: если стаж работы сотрудника менее пяти лет, то зарплата равна 50$, при стаже работы от пяти до 15 лет – 100$, свыше 15 лет зарплата повышается с каждым годом на 10$, причем при стаже, превышающем 30 лет, она составляет 300$.
Для программирования решения этой задачи определим математическую формулировку задачи:
Задания к самостоятельному выполнению (программа 2_2)
1. Определить остаток от деления на восемь введенного числа х и написать восьмеричную цифру прописью.
2. По цифре (0..9), введенной с клавиатуры, напечатать название этой цифры.
3. С клавиатуры ввести число k (1..30). Определить, какому дню недели оно соответствует, если первое число – понедельник.
4. Ввести число и номер месяца. Напечатать дату с названием месяца прописью.
5. Идет k секунда суток. Вычислить, сколько прошло часов и полных минут к этому моменту, при этом согласовать со значением слова (час, часа, часов, минута, минуты, минут).
6. В зависимости от номера (N) типа фигуры организовать ввод необходимых данных и вычислить при N = 1 – площадь круга, N = 2 – объем шара (4/3πR3), N = 3 – объем цилиндра, N = 4 – площадь поверхности сферы 4πr2.
7. Ввести число N (0 ≤ N ≤ 15). Определить и напечатать шестнадцатеричную цифру, ему соответствующую.
8. Для целого числа R (1…99) напечатать фразу « Мне R лет », при некоторых значениях R слово «лет» заменить словом «год» или «года».
9. В зависимости от заданного номера фигуры ввести необходимые данные и вычислить при к = 1 площадь прямоугольника, при к = 2 площадь параллелограмма, а при к = 3 площадь трапеции по формуле (a+b) h/2. Во втором случае напечатать: является ли фигура параллелограммом или ромбом.
10. Перевести введенное целое число 0 ≤ х ≤ 31 в шестнадцатеричную систему счисления.
5. ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ЦИКЛИЧЕСКОЙ СТРУКТУРЫ
5.1.Оператор счётного цикла
В языке Pascal существует три разновидности операторов цикла:
1) счетный оператор цикла (оператор цикла со счётчиком);
2) оператор цикла с предусловием;
3) оператор цикла с постусловием.
Для любого оператора цикла вход в цикл возможен только через его начало, выход осуществляется как вследствие естественного окончания цикла, так и путем выполнения оператора перехода GOTO или процедур выхода, содержащихся внутри цикла.
Счетный оператор цикла FOR реализует циклический процесс с известным числом повторений. Этот оператор имеет две формы записи. Первая форма позволяет наращивать <параметр цикла> на единицу и имеет вид
Параметром цикла называется переменная, служащая для управления циклом. Для оператора цикла FOR в качестве <параметра_цикла> используется переменная целого либо любого порядкового типа. Здесь <min_значение>и <max_значение>- это константы (или выражения), определяющие соответственно начальное и конечное значения параметра цикла. Их типы должны быть совместимыми с типом параметра цикла.
Вторая форма позволяет уменьшать на единицу значение параметра цикла:
FOR <параметр цикла> := <max значение> DOWNTO
<min значение> DO <оператор>;
Пример. Вычислить Y = 1 + 1/2 + 1/3 + ... + 1/N.
Для вычисления в программе необходимо многократно произвести сложение по “формуле суммы” Y =Y+1/I при изменении параметра I от одного до N.
Реализация 1: Y:=0;
FOR I:=1 TO N DO Y=Y+1/I;
Реализация 2: Y:=0;
FOR I:=N DOWNTO 1 DO Y=Y+1/I;
Значение параметра цикла в теле цикла может не использоваться, а лишь выполнять функцию счетчика. Например, пусть необходимо вычислить Y = Xn. Тогда фрагмент тела программы запишется в следующем виде:
Y:=1;
FOR I :=1 TO N DO Y=Y*X;
Два других оператора цикла (с пpедусловием и постусловием) проверяют условия повторения или окончания цикла, но сами не изменяют значения параметра цикла. Они организуют выполнение цикла с неизвестным заранее числом повторений.
Примеры и задания для оператора цикла со счётчиком
Пример 1. Вычислить сумму членов ряда: s = 1 +1/4 +1/9+ 1/16 + ... .
Учитывая, что параметр - знаменатель числового ряда – изменяется как квадрат натурального числа, определим алгоритм решения задачи в виде циклической структуры (pис. 7) и напишем соответствующую программу:
PROGRAM summa;
VAR s, r: REAL;
i, N: INTEGER;
BEGIN
s:=0;
WRITELN('введите N');
READ(N);
FOR I :=1 TO N DO
begin
r := 1/sqr(i);
s := s + r;
end;
WRITELN( ' Сумма= ' , s:6:2 );
END.
Пример 2.Вычислить значения двух функций F1(x) = tg (x) и F2(x) = sin(x) в n точках, равномерно распределенных на интервале a ≤ x ≤ b, где a = -π/4, b = π.
Для реализации данной задачи разработана схема алгоритма (pис. 8) и cледующая программа: