Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по информатике 2009.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
12 Мб
Скачать
☆

2.4. Оператор варианта

Оператор варианта (CASE ... OF) предназначен для программирования алгоритмов с множественным выбором.

Пример 2.4.1. Составить программу для вывода названий месяцев по их номеру.

VAR N:integer;

B EGIN

write(’Введите номер месяца : ’); readln(N);

CASE N OF

1: writeln(’ ЯНВАРЬ’);

2: writeln(’ ФЕВРАЛЬ’);

3: writeln(’ МАРТ’);

4: writeln(’ АПРЕЛЬ’);

5: writeln(’ МАЙ’);

6: writeln(’ ИЮНЬ’);

7: writeln(’ ИЮЛЬ’);

8: writeln(’ АВГУСТ’);

9: writeln(’ СЕНТЯБРЬ’);

10: writeln(’ ОКТЯБРЬ’);

11: writeln(’ НОЯБРЬ’);

12: writeln(’ ДЕКАБРЬ’);

ELSE writeln(’Вы неправильно ввели номер месяца ! ’);

END.

Пример 2.4.2. Составить программу вычисления сумм арифметической и геометрической прогрессий, а также определения значения заданного члена прогрессии.

Для арифметической прогрессии:

Для геометрической прогрессии:

VAR V, N:integer;

A1, B1, AN, BN, SA, SB, d, q:real;

B EGIN

writeln(’Выберите вид прогрессии : ’);

writeln(’ 1- арифметическая’);

writeln(’ 2- геометрическая’);

readln(V);

CASE V OF

1: BEGIN

writeln(’Вы выбрали арифметическую прогрессию.’);

write(’Введите первый член прогрессии A1 =’); readln(A1);

write(’Введите разность прогрессии d =’); readln(d);

write(’Введите номер N =’); readln(N);

AN:=A1+d(N-1);

SA:=(A1+AN)N/2;

writeln(N, ’-й член прогрессии равен =’,AN:6:3);

writeln(’Сумма первых ’,N,’ членов прогрессии равна =’,SA:6:3);

END;

2: BEGIN

writeln(’Вы выбрали геометрическую прогрессию.’);

write(’Введите первый член прогрессии B1 =’); readln(B1);

write(’Введите знаменатель прогрессии q =’); readln(q);

write(’Введите номер N =’); readln(N);

BN:=B1exp((N-1)ln(q));

SB:=(BNq-B1)/(q-1);

writeln(N, ’-й член прогрессии равен =’,BN:6:3);

writeln(’Сумма первых ’,N,’ членов прогрессии равна =’,SB:6:3);

END;

END.

2.5. Программирование циклических алгоритмов

Алгоритмы, в которых действия повторяются многократно, называются циклическими. Виды циклических алгоритмов и способы их программирования приведены в табл. 2.5.1. Часто используются циклы для расчета сумм, произведений, количества. Виды сумм и способы их расчета приведены в табл. 2.5.2. Примеры программ с циклическими алгоритмами приведены также в следующих разделах: 6, 7, 8.

В языке Паскаль существуют три оператора цикла: FOR … TO … DO, WHILE … DO, REPEAT … UNTIL.

Общий вид оператора WHILE A DO ST, где А – логическое выражение, ST – оператор, простой или составной.

WHILE X< >0 DO BEGIN G:= C+1/X; x:=x-1 END; В данном примере вычисляется логическое выражение типа X< >0.

Если оно «истина», то будут выполняться операторы G:= 1/X; X:=X-1; и управление опять будет передаваться вновь на проверку выражения X< >0. Как только условие X<>0, будет «ложь», будет выполняться оператор, следующий за END. То есть цикл повторяется пока X< >0.

Оператор цикла FOR:

FOR i:=n1 TO n2 DO ST;

где i - переменная цикла; n1 - конечное значение переменной; n2 - конечное значение переменой ST - оператор, простой или составной.

FOR i:= 1 TO 20 DO a:=a+1; При такой записи будет выполняться оператор A:=A+1; пока i поочередно принимает значения i= 1,2,...,20.

В операторе FOR шаг изменения параметра цикла равен 1, однако имеется разновидность цикла For или цикл по убывающим значениям параметра цикла,в этом случае параметр цикла изменяет свое значение с шагом -1 от N2 до N1 : FOR I:= n2 DOWNTO n1 DO ST; , FOR i:= 20 DOWNTO n2 DO A:=A+1;

Оператор с постпроверкой условия имеет следующий вид: REPEAT ... UNTIL, где REPEAT < операторы > UNTIL < условие >. Операторы выполняются хотя бы один раз, после чего вычисляется условие. Если значение условия есть FALSE, операторы повторяются, в противном случае оператор завершает свою работу.

Однако цикл может быть организован с помощью условного оператора и оператора безусловного перехода. Метки. Для указания последовательности выполнения программ используют метки. Метка может состоять из букв и цифр, но первой должна стоять буква. В качестве исключения метка может состоять только из цифр, в диапазоне от 0 до 9999. Все метки, используемые в программе, должны быть обозначены с помощью служебного слова LABEL. (Например, label c1,c2;).

Оператор безусловного перехода имеет следующий общий вид:

GOTO N,

где N – имя метки; GOTO - служебное слово.

Метка N описывается с помощью служебного слова LABEL и ставится перед следующим оператором, который должен быть выполнен.

Пример 2.5.1.

PROGRAM Met;

LABEL d1;

VAR p, y, x:real;

BEGIN

read(p);

GOTO d1;

Y:=ln(p)+1;

d1:X:= sqr(p);

write(x);

END.

В результате выполнения данной программы будет вычислена величина X. Значение У останется незаданным, так как управление в программе передается на оператор с меткой d1.

Пример 2.5.2. Составить программу для определения гидравлического сопротивления слоя насадки при изменении скорости газа от 10 до 15 м/с с шагом h=0.5 м/с.

где H - высота слоя, м,

dэ - эквивалентный диаметр, м,

 - плотность газа, кг/м3,

wг - скорость газа, м/с.

Коэффициент гидравлического сопротивления рассчитывается по формуле:

где Re - критерий Рейнольдса – равен:

.

 - динамическая вязкость газа, Пас.

Рассмотрим пример решения задачи с использованием оператора цикла WHILE ... DO.

VAR dP, L, H, d, w, p, Re, m, wn, wk, hw:real;

BEGIN

H:=1; d:=0.005; p:=1.35; m:=2.45E-6;

writeln(’ wn wk hw’);

readln(wn,wk,hw);

writeln(’ w Re L dP’);

w:=wn;

WHILE w<=wk DO

BEGIN

Re:=wdp/m;

IF Re<40 THEN L:=140/Re ELSE L:=16/exp(0.2ln(Re));

dP:=LH/dsqr(w)p/2;

writeln(w:5:2,’ ’,Re:10,’ ’,L:10,’ ’,dP:10);

w:=w+wh;

END;

END.

Рассмотрим пример решения задачи с использованием оператора цикла REPEAT ... UNTIL.

VAR dP, L, H, d, w, p, Re, m, wn, wk, hw:real;

BEGIN

H:=1;

d:=0.005;

p:=1.35;

m:=2.45E-6;

writeln(’ wn wk hw’);

readln(wn,wk,hw);

writeln(’ w Re L dP’);

w:=wn;

REPEAT

Re:=wdp/m;

IF Re<40 THEN L:=140/Re ELSE L:=16/exp(0.2ln(Re));

dP:=LH/dsqr(w)p/2;

writeln(w:5:2,’ ’,Re:10,’ ’,L:10,’ ’,dP:10);

w:=w+wh

UNTIL w>wk

END.

Пример 2.5.3. Составить программу для расчета удельной теплоемкости метана по эмпирической зависимости:

,

где a, b, c, d, e - эмпирические коэффициенты.

a=4.171;

b=14.4510-3;

c=0.26710-6;

d=0.0;

e=-1.72210-9.

Произвести расчеты для интервала температур от 0 до 500  К, с шагом 50  К.

LABLE 1;

CONST a=4.171;

b=14.45E-03;

c=0.267E-06;

d=0.0;

e=-1.722E-9;

VAR T, T1, T2, dT, Cp:real;

B EGIN

T1:=0;

T2:=500;

dT:=50;

T:=T1;

writeln(’Т,К Cp, Дж/мольK’);

1: Cp:=a+bT+csqr(T)+d/sqr(T)+eexp(3ln(T));

writeln(T:3:0,’ ’,Cp :9:4);

T:=T+dT;

IF T<T2 THEN GOTO 1;

writeln(’Расчет окончен ! ’);

END.

Пример 2.5.4. Составить программу для расчета выражения:

.

VAR F, S, P, x:real; i, k:integer;

BEGIN

write(’x=’); readln(x);

S:=0;

FOR i:=1 TO 11 DO

S:=S+exp(iln(x));

P:=1;

FOR k:=1 TO 20 DO

P:=Pexp(1/kln(x));

F:=exp(1/3ln(S))+P;

writeln(’S=’,S:10,’ P=’,P:10,’ F=’,F:10)

END.

Пример 2.5.5. Составить программу вычисления бесконечного ряда:

.

Условие окончания расчета ряда: , ( = 0.0001).

CONST e=0.0001;

VAR i:integer; X, S, Y:real;

BEGIN

write(’Введите значение X =’); readln(X);

i:=0; {Номер слагаемого.}

y:=1; {Значение i-го слагаемого.}

S:=0; {Сумма ряда.}

REPEAT

S:=S+y; {Расчет суммы.}

i:=i+1;

y:=yx/i {Расчет следующего слагаемого.}

UNTIL y<e;

writeln(’Cумма бесконечного ряда =’, S:10:6);

END.

Пример 2.5.6.

PROGRAM sum;

VAR i,n:integer; s:real;

BEGIN

write('укажите число n ');

readln(n); s:=0; FOR i:=n DOWNTO 1 DO s:=s+i;

writeln('значение суммы ',s);

END.

Таблица 2.5.1

Способы программирования циклов различной структуры

(на примере расчета суммы ).

Фрагмент блок – схемы

Операторы

1. Цикл с предварительным условием

а) С использованием

цикла WHILE ... DO.

S:=0; i:=1;

WHILE i<=n DO

BEGIN

S:=S+a/sqr(i);

i:=i+1

END;

б) С использованием

операторов IF ... THEN и GOTO.

S:=0; i:=1;

1: IF i<=n THEN

BEGIN

S:=S+a/sqr(i);

i:=i+1;

GOTO 1

END;

Продолжение табл. 2.5.1.

  1. Цикл с последующим условием

а) С использованием

цикла REPEAT ... UNTIL

S:=0; i:=1;

REPEAT

S:=S+a/sqr(i);

i:=i+1

UNTIL i>n;

б) С использованием

операторов IF ... THEN и GOTO.

S:=0; i:=1;

1: S:=S+a/sqr(i);

i:=i+1

IF i<=n THEN GOTO 1;

Таблица 2.5.2

Расчет сумм (произведений, количества)

Вид суммы

Фрагмент программы

1. «Простая» сумма

S:=0;

FOR i:=1 TO N DO

S:=S+1/sqr(i);

  1. Сумма «с условием»

S:=0;

FOR k:=3 TO 15 DO

IF 2i>10 THEN S:=S+sqr(-4+2i);

  1. Расчет нескольких сумм

S1:=0; S2:=0;

FOR i:=1 TO n DO

BEGIN

S1:=S1+sqr(i); S2:=S2+sqrt(i)

END;

  1. «Сумма в сумме»

а)

а) S:=0;

FOR i:=1 TO 5 DO

FOR j:=1 TO 6 DO

S:=S+exp(j-i);

Продолжение таб. 2.5.2.

б)

б) S:=0;

FOR i:=1 TO n DO

BEGIN

S2:=0;

FOR j:=1 TO m DO S2:=S2+ij;

S:=S+ln(i)S2;

END;

  1. Сумма с реккурентной формулой

,

где ai=2ai-1, a1=1.

a:=1; S:=0;

FOR i:=1 TO 10 DO

BEGIN

S:=S+sqr(a); a:=2a;

END;

Расчет произведения аналогичен расчету суммы, только до цикла пишется оператор P:=1, а в цикле – выражение вида P:=P<выражение, стоящее под знаком произведения>. Расчет количества – это расчет суммы вида , поэтому до цикла пишется оператор K:=0, а в цикле - K:=K+1.