trains_hr.gif
 


В ПОМОЩЬ СТУДЕНТУ И ШКОЛЬНИКУ

 


Горбачев Л.И. Основы программирования в среде Turbo Pascal.

[НАЗАД]    [ДАЛЕЕ]

2. Структурные операторы. Программирование ветвящихся и циклических структур.

   Структурные операторы представляют собой структуры, построенные из других операторов по строго определенным правилам. Все структурные операторы подразделяются на три группы: составные, условные и повтора.

   2.1. Составной оператор.

   Составной оператор - это объединение нескольких операторов в одну группу. Общий вид этого оператора следующий:
begin
оператор_1;
оператор_2;
...........
оператор_n
end;

   В этой конструкции слова begin и end выполняют роль операторных скобок: открывающей и закрывающей.

   Составной оператор можно вставлять в любое место программы, где допускается использование одного оператора. В свою очередь любой из операторов составного оператора также может быть составным. Нельзя извне составного оператора передавать управление внутрь его (оператором goto).

Пример:
begin
A := A * B + (N - D);
Res := A + B * Pi;
Writeln(Res:12:6)
end;

   Составной оператор воспринимается как единое целое и может находиться в любом месте программы, где синтаксис языка допускает наличие оператора. Обычно составной оператор используется при написании условных операторов.

   2.2. Оператор условного перехода (if...then...else).

   Условный оператор удобно применять, когда требуется выбрать одну из двух альтернатив. Условные операторы обеспечивают выполнение некоторого оператора, группы операторов или блока в зависимости от заданных условий. Паскаль допускает использование двух условных операторов: if и case.

Общий вид оператора условного перехода:
if <лог_выр> then <опер_1> [else <опер_2>];

Здесь квадратные скобки означают, что конструкция else с <опер_2> может отсутствовать.
Перед else точка с запятой не ставится. <Опер_1> или <опер_2> - это простые или составные операторы.
<Лог_выр> - это выражение булевского типа. Оно может быть простым или сложным. Сложные условия образуются с помощью логических операций AND, OR, NOT. При записи условий могут использоваться все возможные операции отношения. Результат <лог_выр> всегда имеет булевский тип.
Если <лог_выр> истинно, то выполняется <опер_1>, иначе - <опер_2> (или следующий за if оператор, если else отсутствует).
В качестве <опер_1> или <опер_2> могут использоваться другие операторы if. В этом случае каждое else относится к ближайшему слева if, не имеющему else. Для удобства восприятия программы рекомендуется слово else писать под соответствующим ему словом then.

Пример: Вычислить:
Y={ x+1, при x < 0
sin(x), при 0 <= x < 5
cos(x), при x >= 5

Фрагмент программы, описывающий эту алгебраическую конструкцию:
....................
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 часто используется пустой или составной оператор.

Пример:
if a = 0 then
{ применение пустого оператора }
else y := x * a;
if x1 < x2 then
{ применение составного оператора }
begin
y := x2;
x2 := x1;
x1 := y
end;

Пример: Разберем программу с одним из вариантов вычисления выражения:
K={ 15 * A2 + 21 * B2 при A > B,
15 * B2 + 21 * A2 при 1 < A <= B

где 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. Очевидно, что реальный вес может быть меньше оптимального, равняться ему или превышать. Следующая программа вычисляет оптимальное значение веса, сравнивает его с реальным и выводит соответствующую рекомендацию.
Program Optimum;
Uses CRT;
Var W : real; { Вес }
H : real; { Рост }
Opt : real; { Оптимальный вес }
d : real; { Отклонение от оптимального веса }
Begin
ClrScr;
Write('Ваш вес (кг)'); ReadLn(W);
Write('Ваш рост (см)'); ReadLn(H);
Opt := H - 100;
if W = Opt then WriteLn('Вес оптимальный!')
else if W < Opt then
begin
d := Opt - W;
WriteLn('Нужно поправляться на ', d:5:2, ' кг');
end
else
begin
d := W - Opt;
WriteLn('Нужно худеть на ', d:5:2, ' кг');
end;
ReadLn
End.

   2.3. Оператор множественного выбора (case).

   Оператор выбора case является обобщением оператора if и позволяет сделать выбор из конечного числа имеющихся альтернатив. Он состоит из выражения, называемого селектором, и списка констант выбора (список может состоять и из одной константы). Как и в операторе if, здесь может присутствовать слово else, имеющее тот же смысл. Его общий вид следующий:

case <выражение_селектор> of
список_констант_1: оператор_1;
список_констант_2: оператор_2;
..............................
список_констант_n: оператор_n
else
оператор
end;

   Здесь значения <выражение_селектор> и констант должны быть одного и того же скалярного типа (кроме real), т.е. integer, boolean, char, ограниченного типа или иметь тип "перечисление".

   Оператор case работает следующим образом. Сначала вычисляется значение <выражение-селектор>, затем обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора. Если ни одна из констант не равна текущему значению селектора, выполняется оператор, стоящий за словом else. Если слово else отсутствует, активизируется оператор, находящийся за словом end, т.е. первый оператор за границей case.

   Ниже приведены типичные формы записи оператора CASE. Селектор интервального типа:
case I of
1..10 : Writeln('Число ', I:4, ' в диапазоне 1 - 10');
11..20 : Writeln('Число ', I:4, ' в диапазоне 11 - 20');
21..30 : Writeln('Число ', I:4, ' в диапазоне 21 - 30')
else Writeln('Число ', I:4, ' вне предела контроля')
end;

Селектор целочисленного типа:
case K of
1 : Z := K + 10;
2 : Z := K + 100;
3 : Z := K + 1000
end;

case I + 1 of
2 : x := 0;
100, 3 : x := x * x;
4 : x := Sin(x)
end;

   Например, если значение I + 1 есть 100 или 3, то выполняется оператор x * x и т.д.
ПРИМЕЧАНИЕ: Метки оператора CASE не описываются в разделе меток (label), и на них нельзя переходить оператором goto.

Селектор перечисляемого типа:
var Season: (Winter, Spring, Summer, Autumn);
Begin
......
case Season of
Winter: Writeln('Зима');
Spring: Writeln('Весна');
Summer: Writeln('Лето');
Autumn: Writeln('Осень')
end;

Пример: Программа, с помощью которой инициируется нажатие клавиши на клавиатуре.
program prg;
uses CRT;
var I : char;
Begin
ClrScr;
Write('Введите символ с клавиатуры'); ReadLn(I);
case I of
'A'..'Z':Write('Прописная буква латинского алфавита',I);
'a'..'z':Write('Строчная буква латинского алфавита',I);
'0'..'9':Write('Введена цифра',I);
'А'..'Я':Write('Прописная буква русского алфавита',I);
'а'..'я':Write('Строчная буква русского алфавита',I)
else Write('Введен символ - ',I)
end;
ReadLn
End.

Пример программы с селектором логического типа. Вычислить значение функции:
Y{ Sin(X), если X < 0
Sqrt(X), если X >= 0

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.

[НАЗАД]    [ДАЛЕЕ]


Главная
Новости
TurboPascal
Учебное пособие
Лекции
Исходники
Математика
Книги
Лекции
Шпоры
ЦТ и ЕГЭ
Физика

Книги

Шпоры
ЦТ и ЕГЭ

Литература

Сочинения

Краткие содержания

Другое
Мой родной край
Фотогалерея
Форум
Ссылки

Гостевая






 

                                        © Copyright(c) 2004 Amro Group. All rights reserved

 

Hosted by uCoz