Лекции.ИНФО


Составной и пустой операторы



Составной оператор используется в том случае, когда по правилам синтаксиса сложного оператора должен стоять только один оператор, а в алгоритме необходимо выполнить некоторую последовательность действий. Составной оператор объединяет эту последовательность в единый по син­таксису оператор путем заключения в операторные скобки begin иend. Например:

ВEGIN

<оператор1>;

<оператор2>;

. . .;

<операторN>

END;

Для составного оператора допускается любая глубина вложенности:

BEGIN

BEGIN

. . .

BEGIN

. . .

END;

. . .

END;

END ;

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

Например, пустыми операторами будут следующие записи:

1) ; ; 2) <метка>: ;

 

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

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

Структура такого оператора:

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 используется для досрочного выхо­да из любого сложного оператора или вложенных операторов цикла.

 

4.5. Пример и задания с оператором IF

Пример. Вычислить значения функции y(x) в зависимости от интервала, в который попадает аргумент x.

Для xÎ [-10,5]

 

 

где а = 1.5, b = 0.5 ;

Напишем программу, соответствующую схеме алгоритма (рис. 5):

Program Lr2;

Label m1, 10;

Const A = 1.5; B = 0.5;

var x, y: real; // переменные вещественного типа

Begin

m1: read(x); // вводим значение переменной x

IF (x < -10) or (x>5) then goto m1;

IF x<0 then begin y:= a*x+b ; goto 10 end ;

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 = ax2 Ln(x+1)
y=Ax+b  
y=eax+1 cos(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-bx sin 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, найти площадь квадрата; в противном случае подсчитать площадь трапеции.


4.6. Оператор выбора варианта 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;

<Константа_выбора> не является меткой оператора, поэтому в разде­ле меток описывать её нельзя.


4.7. Примеры и задания с оператором 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$.

Для программирования решения этой задачи определим математичес­кую формулировку задачи:

50, если ST < 5;

ZP =
100, если 5 ≤ ST £ 15;

100 + (ST -15)*10 при 15 < ST ≤ 30;

300, если ST > 30;

где ZP – зарплата, ST – стаж работы.

Реализация задачи для примера 2

представлена следующим алгоритмом

(рис. 6) и программой:

Program zarplata;

var ST: byte; {стаж (байтовый) тип)}

Рис. 6
ZP: real; {вещественный тип}

Begin

writeln('введите стаж');

read(ST); {ввод стажа}

caseST of{выбор из }

1..4: ZP:=50;

5..15: ZP:=100;

16..29: ZP:=100+(ST-15)*10

else ZP:=300

end;

writeln(' Зарплата = ' , ZP:10:2,' $'); {вывод результата}

End.

Задания к самостоятельному выполнению (программа 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_значение>TO<max_значение>DO<оператор>;

Параметром цикла называется переменная, служащая для управления циклом. Для оператора цикла 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едусловием и постусловием) прове­ряют условия повторения или окончания цикла, но сами не изменяют значения параметра цикла. Они организуют выполнение цикла с неизвестным заранее числом повторений.

 

5.2. Примеры и задания для оператора цикла со счётчиком

Пример 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ледующая программа:

Program Lab3;

Const а = -pi/4; b = pi;

Var F1, F2, x, dx: real; {dx – шаг изменения х}

i, n: integer; {i – параметр цикла}

Begin

writeln ('введите число точек N'); read(n);

dx: = abs(b-a)/(n-1);

x:=a;

writeln (' ___________________________');

writeln ('| I | X | F1 | F2 |');

writeln ('|---|------------|------------|------------|');

for I := 1 to n do {опеpатоp цикла}

Begin

F2:= sin(x);

F1:= F2/cos(x); {вычисление tg x}

writeln('|', i:3,' |', x:8:3,'|', f1:8:4,' |', f2:8:4,' |');

Рис. 8
x := x + dx;

end;

writeln( ' | ________________________| );.

End.

Задания к самостоятельному выполнению

Задание 1 (программа_3_1)

Для заданных с клавиатуры значений переменных x и n вычислить:

1. X = 1 + 1/2 + 1/3 + ... + 1/10. 2. Z = 2 × 4 × 6 × 8 × ...× 20.

3. Y = -x + 4x - 9x + ... - 81 x. 4. Y = x + x/3 + x/5 + ... + x/17.

5. Y = n! = 1× 2 × 3 × ....n. 6. Y = 1 - 3 + 32 - 33 + . . . + 310.

7. Y= x2 / ( 2i-1). 8. Z = ( x+i) / i.

9. Y = x2/i. 10. Y = 1 + x/2 + x2/4 + x3/6 + ... + xi/2i + ... + x9 /18 .

11. Y = 1 + x2/1! + x4/2! + x6/3! + … + x20/10! = 1+ x2i/i!.

12. Y = 1 - x + x3/3! - x5/5! + ... + (-1)n x2n-1/(2n-1)! + ... + x11/11!.

13. е = 1 + 1/1! + 1/2! + ... + 1/n! + ... (сравнить результат со значением функции EXP(1), определенной в Паскале).

14. π = 4(1 - 1/3 + 1/5 - 1/7 + … + (-1)n/(2n+1) + …) (результаты сравнить с определенным в языке Паскаль числом Pi).

15. Y = arctg x = x-x3/3 +x5/5- ... +(-1)n x2n+1/(2n+1)+ ... (|х|<1).

16. Z = LN(1+x) = x - x2/2 + x3/3 - ... + (-1)n-1 xn/n + ... (|x|<1).

17. S = x - x3/3! + x5/5! - ... +(-1)n x2n+1/(2n+1)! + ... .

18. Вычислить суммы положительных и отрицательных значений функции

z = cos(nx+a) sin(nx-a),

где n =1, 2, ... , 5, a и x - вещественные числа.

19. Вычислить сумму четных и сумму нечетных чисел натурального ряда
в диапазоне от 1 до N.

20. Найти сумму факториала .

Задание 2 (программа_3_2)

Вычислить значения двух функций в n точках, равномерно распределенных в диапазоне а ≤ x ≤ b. Результаты оформить в виде таблицы.









Последнее изменение этой страницы: 2017-03-16; Просмотров: 14;


lektsia.info 2017 год. Все права принадлежат их авторам! Главная