| ||||||||||||||||||||||||||||||||||||
|
2. Структурные операторы. Программирование ветвящихся и циклических структур.Структурные операторы представляют собой структуры, построенные из других операторов по строго определенным правилам. Все структурные операторы подразделяются на три группы: составные, условные и повтора. 2.1. Составной оператор. Составной оператор - это объединение нескольких
операторов в одну группу. Общий вид этого оператора
следующий: В этой конструкции слова begin и end выполняют роль операторных скобок: открывающей и закрывающей. Составной оператор можно вставлять в любое место
программы, где допускается использование одного оператора. В свою очередь любой
из операторов составного оператора также может быть составным. Нельзя извне
составного оператора передавать управление внутрь его (оператором
goto). Составной оператор воспринимается как единое целое и может находиться в любом месте программы, где синтаксис языка допускает наличие оператора. Обычно составной оператор используется при написании условных операторов. 2.2. Оператор условного перехода (if...then...else). Условный оператор удобно применять, когда требуется
выбрать одну из двух альтернатив. Условные операторы обеспечивают выполнение
некоторого оператора, группы операторов или блока в зависимости от заданных
условий. Паскаль допускает использование двух условных операторов: if и
case.
Фрагмент программы, описывающий эту алгебраическую конструкцию: .................... if x < 0 then y := x +1; if (x >= 0) and (x < 5) then y := sin(x); if x >= 5 then y := cos(x); .................... В этом примере наличие скобок в логических выражениях оператора if является обязательным, т.к. операции сравнения имеют более низкий приоритет, чем логические операции. В операторе if после then или else часто
используется пустой или составной оператор.
где A = 2.34E+2 и B = 17.2 program PR1; uses CRT; const A = 2.34E+2; B = 17.2; var K, K1, K2 : real; Begin ClrScr; K1 := Sqrt(15 * A * A + 21 * B * B); K2 := Sqrt(15 * B * B + 21 * A * A); if A > B then K := K1; if (1 < A) and (A <= B) then K := K2; if A <= 1 then Write('Результат неопределен') else Write(' K =', K:5:5); ReadLn End. Пример: Программа решения квадратного уравнения. program KvUr; uses CRT; var a, b, c : real; { коэффициенты уравнения } x1, x2 : real; { корни уравнения } d : real; { дискриминант } Begin { начало раздела операторов } ClrScr; { процедура очистки экрана } Write('Введите A: '); ReadLn(a); Write('Введите B: '); ReadLn(b); Write('Введите C: '); ReadLn(c); d := b * b - 4 * a * c; { вычисление дискриминанта } if d >= 0 then{ если D >= 0, то ... } begin x1 := (-b - SQRT(d)) / (2 * a); x2 := (-b + SQRT(d)) / (2 * a); WriteLn('Корни уравнения: '); WriteLn('x1 =', x1, ' x2=', x2); end else WriteLn('Корней нет'); End. { конец раздела операторов } Пример: Программа нахождения большего из двух введенных чисел. program Numbers; uses CRT; var a, b : real; Begin { начало раздела операторов } ClrScr; Write('Введите два числа: '); ReadLn(a, b); { если два числа равны, то ... } if a = b then WriteLn('Числа равны') else if a > b then { ... иначе, если a > b, то ... } WriteLn('Число A больше числа B') else WriteLn('Число B больше числа A') End. { конец раздела операторов } Пример: Программа для вычисления стоимости разговора по телефону. Предусмотрен запрос длительности разговора и дня недели, после чего происходит вычисление стоимости разговора. Если день недели суббота или воскресенье, то стоимость уменьшается на величину скидки. Цена минуты разговора и величина скидки приняты за постоянные величины 5 рублей за минуту разговора и 20% соответственно. Program Call; Uses CRT; Var Time : integer; { Длительность разговора } Day : integer; { День недели } SumCall : real; { Стоимость разговора } Begin ClrScr; Write('Длительность разговора (мин)'); ReadLn(Time); Write('День недели'); Write('1 - понедельник, 2 - вторник, 3 - среда ...'); ReadLn(Day); SumCall := 5 * Time; if (Day = 6) or (Day = 7) then SumCall := SumCall * 0.8; WriteLn('Стоимость разговора:', SumCall:8:2); ReadLn End. Часто в программе необходимо реализовать выбор
более чем из двух вариантов. Например, известно, что для каждого человека
существует оптимальное значение веса (в кг), которое может быть вычислено по
формуле: Рост(см) - 100. Очевидно, что реальный вес может быть меньше
оптимального, равняться ему или превышать. Следующая программа вычисляет
оптимальное значение веса, сравнивает его с реальным и выводит соответствующую
рекомендацию. 2.3. Оператор множественного выбора (case). Оператор выбора case является обобщением оператора
if и позволяет сделать выбор из конечного числа имеющихся альтернатив. Он
состоит из выражения, называемого селектором, и списка констант выбора (список
может состоять и из одной константы). Как и в операторе if, здесь может
присутствовать слово else, имеющее тот же смысл. Его общий вид
следующий: Здесь значения <выражение_селектор> и констант должны быть одного и того же скалярного типа (кроме real), т.е. integer, boolean, char, ограниченного типа или иметь тип "перечисление". Оператор case работает следующим образом. Сначала вычисляется значение <выражение-селектор>, затем обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора. Если ни одна из констант не равна текущему значению селектора, выполняется оператор, стоящий за словом else. Если слово else отсутствует, активизируется оператор, находящийся за словом end, т.е. первый оператор за границей case. Ниже приведены типичные формы записи оператора
CASE. Селектор интервального типа: Например, если значение I + 1 есть 100 или 3, то
выполняется оператор x * x и т.д.
program DemoCase; uses CRT; var X, Y: real; Begin ClrScr; Write('Введите любое число: '); ReadLn(X); case X < 0 of True : Y := sin(X); False : Y := sqrt(X); end; Writeln('Значение функции равно: ', Y:5:2); ReadLn End. |
| ||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||
© Copyright(c) 2004 Amro Group. All rights reserved |
|