Составной и пустой операторы
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

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

VAR operation: 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);     {ввод стажа}

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

 


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

Пример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. Результаты оформить в виде таблицы.

№ п/п a b n F1(х) F2(х)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0 1 -1 -2 0 - -1 -4 1 1 0 - 0 1 2 2 0 1 3 1 2 2 5 5 3 4 3 4 2 2 4 4 5 3 20 18 15 14 16 20 20 12 15 20 20 18 16 12 10 16 18 20 15 18 sin x cos x 1+2x+5 4e-|x|-1 | x+10|5 2 sin 2x +1 2-cos x 2x/10 x3e2x 1/(1+ ) 5-3 cos x |sinx|+|cosx| e-x+cos2x e-x lg x cos x/2 2x lg x - 3x lg x 3-x/50 e2x  - sin x 2x arctg x - 5  1,5arctg x sin x + cos x -1 (x-1)3 cos x e-(x+5) (x+5)3(1+sin2x) 20/(1+x2) ex sin x x ln2 x 2x/(1-4x) |sin x| - |cos x| e -2x x + sin x  +  e -x ctg x x e -x +ln x 10/(2+x2) e -ахx е2x lg x - 3ax  

Дата: 2019-02-02, просмотров: 260.