Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИНФОРМАТИКА_Паскаль.doc
Скачиваний:
7
Добавлен:
08.05.2019
Размер:
1.77 Mб
Скачать

Var X, y : Real;

BEGIN

ClrScr;

Write('Введите вещественное число X='); ReadLn(X);

IFX>0 THEN

BEGIN

Writeln('Введите вещественное число Y= '); ReadLn(Y);

Writeln(' Сумма чисел Х и Y равна ',(X+Y):5:2);

END

ELSE

WriteLn(' Квадратчисла X равен ',(X*X):5:2);

READLN END.

Предлагается самостоятельно изобразить две распечатки выполнения данной программы (при Х больше и меньше нуля) и при наличии возможности проверить их справедливость с помощью персонального компьютера.

6.2. Оператор безусловного перехода

В языке программирования Паскаль принят естественный порядок выполнения составленных программ: все операторы выполняются последовательно один за другим в том порядке, как они записаны. Однако в практике программирования задач иногда возникает необходимость нарушения этого порядка. Например, необходимо пропустить часть программы, состоящей из нескольких операторов, выполнить группу операторов, расположенных за этой частью, а затем вернуться к ней. Для этого предназначен простой (без других операторов в его составе)и оператор безусловного перехода, имеющий форму записи: GOTO<метка> .

Меткой является любое целое число без знака в диапазоне от 1 до 9 999. Оно записывается перед помечаемым оператором программы и отделяется от него двоеточием. Одна метка или их список должны быть объявлены в разделе описаний программы LABEL по форме: LABEL10; или LABEL 10, 20, 30, 40, 50;

Рассмотрим в качестве примера использование операторов безусловного перехода для программного вычисления факториала любого целого числа N.

Program FAKTORIAL;

LABEL 10, 20;

Var n, p, X : Real;

BEGIN

Write(' Bведитечисло N='); ReadLn(N);

P:=1; X:=1;

10: X:=X+1; P:=P*X;

WriteLn(' X= ',X:4:2,' P= ',P:4:2);

If X<N Then GOTO 10 Else GOTO 20;

20: WriteLn('Факториал числа ' , n:4:2,' равен ' ,p:4:2);

ReadLnEND.

В распечатке выполнения приведенной программы

BRectangle 87 ведите число N=5

X= 2.00 P= 2.00

X= 3.00 P= 6.00

X= 4.00 P= 24.00

X= 5.00 P= 120.00

Факториал числа 5.00 равен 120.00

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

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

а) извлечение квадратного корня из выражения, значение которого в процессе выполнения программы превращается из положительного в отрицательное,

б) вычисление частного от деления делимого на делитель, математическое выражение которого при выполнении программы обращается в нуль,

в) вычисление логарифма какого то выражения, результат вычисления которого в процессе выполнения программы становится отрицательным,

г) и другие тому подобные ситуации.

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

Program Kriticheska_Situacia;

USES Crt;

LABEL 10, 20; Var Y, X, Z : Real; N : Integer;

BEGIN

Write(‘ Bведитечисло X= '); ReadLn(X); ClrScr; N:=1;

10: X:=X-2; Z:=X+2;

If Z<0 Then GOTO 20 Else Y:=Sqrt(Z);

WriteLn(N, ') Кв. корень из числа ',Z:3:1,' равен ',Y:4:2);

GOTO 10;

20: Write(' Очередное число становится отрицательным, равным',Z:3:1);

WriteLn(' . Поэтому выполнение программы прекращается.');

READLN END.

Свидетельством верности приведенной программы является одна из множества возможных (и не требующих разъяснений) распечаток её выполнения.

Rectangle 88

1) Кв. корень из числа 15.4 равен 3.92

2) Кв. корень из числа 13.4 равен 3.66

3) Кв. корень из числа 11.4 равен 3.38

4) Кв. корень из числа 9.4 равен 3.07

5) Кв. корень из числа 7.4 равен 2.72

6) Кв. корень из числа 5.4 равен 2.32

7) Кв. корень из числа 3.4 равен 1.84

8) Кв. корень из числа 1.4 равен 1.18

Очередное число становится отрицательным, равным -0.6. Поэтому

выполнение программы прекращается.

6.3. Оператор выбора case

Оператор выбора (варианта) используется в Паскаль-программах в тех случаях, когда в зависимости от значения какого либо выражения необходимо выполнить один из нескольких последовательно расположенных операторов. Данный оператор относится к числу сложных

(состоящих из нескольких операторов) и представляется в программах по формату вида:

Rectangle 89

CASE<селектор>OF

M1, M2, …, Mn : оператор 1;

K1, K2, …, Kn : оператор 2;

----------------------------------

W1, W2, …, Wn : оператор i;

END

В этом операторе слова CASE(в случае), OF (из) и END (конец) являются служебными (ключевыми, зарезервированными). Селектором (переключателем) может быть любое выражение (или просто имя одиночной переменной) стандартного типа, кроме действительного (REAL). Имя селектора и его тип должны быть описаны (объявлены) в разделе описаний программы. M1, …, Mn , K1, …, Kn, W1, …, Wn – константы, называемые метками, которые отличаются по смыслу от меток, описываемых в разделе описаний LABEL. Тип любой константы (метки) должен совпадать с типом селектора (селекторного выражения). Число меток перед любым оператором может быть любым: от одной до n включительно. В качестве меток могут использоваться знаки арифметических операций ‘+’, ‘-‘, ‘*’, ‘/’ (символьного типа, взятые в апострофы) и символьные константы вида A’, ‘B’, ‘C’, ‘.’ и другие.

Оператор выбора действует следующим образом.

Если результат вычисления селекторного выражения или присвоенное его имени числовое значение совпадут со значением одной из меток оператора выбора, то программа выполнит соответствующей ей (этой метке) оператор. После этого управление будет передано за пределы оператора выбора, то есть на оператор, следующий за ключевым словом END. Управление за пределы оператора выбора будет передаваться и в том случае, если полученное значение селектора окажется не совпадающим со значениями всех меток этого оператора.

В операторе выбора допускается перед словом END (конец) вставлять слово ELSE (иначе). Тогда после его выполнения (или не выполнения) управление будет передаваться на оператор, расположенный за словом ELSE.

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

Program VIBOR;

USES Crt; Var N : Integer;

BEGIN ClrScr;

WriteLn(' ОКТЯБРЬ 2008 года.');

Write(' Для определения дня недели введите число N= '); ReadLn(N);

CASENOF

6,13,20,27: WriteLn('':5,N,'-го октября - ПОНЕДЕЛЬНИК.');

7,14,21,28: WriteLn('':6,N,'-го октября - ВТОРНИК.');

1, 8,15,22,29: WriteLn('':7,N,'-го октября – СРЕДА.');

2, 9,16,23,30: WriteLn('':8,N,'-гo октября – ЧЕТВЕРГ.');

3,10,17,24,31: WriteLn('':7,N,'-го октября – ПЯТНИЦА.');

4,11,18,25 : WriteLn('':6, N,'-гo октября – СУББОТА.');

5,12,19,26 : WriteLn('':5, N,'-гo октября – ВОСКРЕСЕНЬЕ.');

ELSEWriteLn('Нет числа',N, ' в этом месяце!'); END;

WriteLn('B октябре месяце 31 день!'); READLN END.

При запуске приведенной программы и вводе по её запросу числа 18 первый раз и числа 35 второй раз она выдаст распечатки, смысл которых не требует разъяснений.

Rectangle 90 ОКТЯБРЬ 2008 года!

Для определения дня недели введите число N= 18

18-го октября – СУББОТА.

В октябре месяце 31 день!

Rectangle 91 ОКТЯБРЬ 2008 года!

Для определения дня недели введите число N= 35

Нет числа 35 в этом месяце!

В октябре месяце 31 день!

Для закрепления полученных сведений об операторе выбора предлагается самостоятельно разработать программу вывода фамилии имя и отчества студента своей учебной группы по номеру его студенческого билета или по номеру в списке учебного журнала.