ПРОГРАММИРОВАНИЕ ПРОЦЕССОВ с разветвляющейся структурой

Цель работы: овладение практическими навыками разработки алгоритмов и программ с разветвляющейся структурой на языках Turbo Pascal и С.

Теоретический материал

На практике редко удается представить схему алгоритма решения задачи в виде линейной структуры. Часто в зависимости от каких-либо значений промежуточных результатов необходимо организовать вычисления по одним или другим формулам. В зависимости от выполнения некоторого логического условия вычислительный процесс осуществляется по одной или другой ветви.

Алгоритм такого вычислительного процесса называется алгоритмом разветвляющейся структуры.

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

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

Стандартные блок-схемы разветвляющегося алгоритма приведены ниже:

ПРОГРАММИРОВАНИЕ ПРОЦЕССОВ с разветвляющейся структурой - student2.ru

Условные конструкции в ТР.

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

1) Оператор безусловного перехода GOTO позволяет изменять последовательность выполнения операторов в программе.

Формат записи оператора:

GOTO <метка>; где

<метка> - имя метки, отличающей ту строку, на которую требуется выполнить переход.

Имя метки должно быть предварительно описано в разделе описания меток Label.

Неправильное использование в программе оператора GOTO усложняет читаемость программы.

Например:

Label 1,3,8,10;

. . . . .

Goto 8

. . . . .

8: x : = A+ B

2) Составной оператор ( begin … end ) представляет собой совокупность последовательно выполняемых операторов, заключенных в операторные скобки begin … end.

Этот оператор записывается следующим образом:

begin

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

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

. . . . . . . . . . . . . . . . . .

<оператор N>

end;

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

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

Например:

Begin

A:=2;

B:=x+y;

End;

3) Условный оператор IF обеспечивает в зависимости от условия выбор одного из возможных действий.

ПРОГРАММИРОВАНИЕ ПРОЦЕССОВ с разветвляющейся структурой - student2.ru ПРОГРАММИРОВАНИЕ ПРОЦЕССОВ с разветвляющейся структурой - student2.ru

Существует два варианта записи оператора:

a) Полный вариант:

If S then A else B ;

b) Укороченный вариант:

If S then A ;

где: S – условие (логическое выражение), которое проверяется на истинность.

A – оператор (только один!), выполняющейся, если выражение S – истинно.

B – оператор (только один!), выполняющейся, если выражение S – ложно.

Если вместо A или B требуется использовать несколько операторов, то применяется составной оператор (BEGIN . . . END).

Примеры использования оператора IF приведены в Приложении 1.

4) Оператор выбора варианта Case … of … end.

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

Существует две формы записи этого оператора:

1) Case S of c1: <оператор 1>; c2: < оператор 2>; …………………. cN: < оператор N> else < оператор> end; 2) Case S of c1: <оператор 1>; c2: < оператор 2>; …………………. cN: < оператор N> end;

где S – выражение порядкового типа, значение которого вычисляется;

сl,c2,...,сN—это константы или метки, с которыми сравниваются значения выражения селектора (S). Они должны быть одного гита с селектором.

Выбор оператора определяется совпадением значения селектора S и константы (метки сl,c2,...,cN), стоящей перед оператором.

< оператор 1 >, < оператор 2 >, < оператор N > — один оператор, либо составной оператор (begin... end),

< оператор > — оператор, который выполнится, если значение выражения S не совпадет ни с одной из меток (констант) сl,c2,...,cN.

Примеры использования оператора IF.

a) IF p>0.5 THEM GOTO 15;

b) IF (x>0) AND (x<=10) THEN T:=x*3 ELSE T:=SQRT(y);

Вложенные IF:

IF X<=A THEN Z:=sin(x) ELSE IF x>0 THEN Z:=sin(x)/cos(x) ELSE Z:=cos(x);

Ключевое слово ELSE всегда относится к ближайшему ему IF.

Пример 1. Вычислить и вывести на экран значение заданной функции

ПРОГРАММИРОВАНИЕ ПРОЦЕССОВ с разветвляющейся структурой - student2.ru

где t=2.2.

ПРОГРАММИРОВАНИЕ ПРОЦЕССОВ с разветвляющейся структурой - student2.ru

Текст программы:

Program Lab21;

Const

t=2.2;

Var

x,z:real;

Begin

Writeln('Введите x');

Read(x);

If x<0.5 then z:=(ln(exp(3*ln(x)))+sqr(x))/sqrt(x+t)

else if x=0.5 then z:=sqrt(x+t)+1/x

else z:=cos(x)+t*(sqr(sin(x)));

Writeln ('z=',z:8:3);

End.

Результат выполнения программы:

z(0.1)=-4.548

z(0.5)=3.643

z(1)=2.098

Пример 2. Ввести число от 0 до 5. Вывести его название на английском языке.

ПРОГРАММИРОВАНИЕ ПРОЦЕССОВ с разветвляющейся структурой - student2.ru

Текст программы:

Program lab22;

Var

i:0..5;

Begin

Writeln('Введите целое число от 0 до 5');

Read(i);

Case i of

0:writeln('zero');

1:writeln('one');

2:writeln('two');

3:writeln('three');

4:writeln('four');

5:writeln('five');

end;

End.

Пример 3. Определение частного от деления целых чисел

{Вариант № 1 (с применением оператора GOTO)}

Program DELZEL_1(input,output);

Label metka1;

Var x, y, Res : integer ;

BEGIN

Write ( ‘ Введите делимое: ’);

Readln (x);

Write ( ‘ Введите делитель: ’);

Readln (y);

If y = 0 then

begin

Writeln ( ‘ Деление на ноль! ’);

GOTO metka1;

end;

Res : = x div y;

Writeln ( ‘ Частное равно : ‘, Res : 10 : 3 );

metka1; {метка пустого оператора}

END.

{Вариант № 2 (без оператора GOTO)}

Program DELZEL_1(input,output);

Var x, y, Res : integer ;

BEGIN

Write ( ‘ Введите делимое: ’);

Readln (x);

Write ( ‘ Введите делитель: ’);

Readln (y);

If y < > 0 then

begin

Res : = x div y;

Writeln ( ‘ Частное равно : ‘, Res : 10 : 3 );

end

Else Write ( ‘ Деление на ноль! ’);

END.

Условные конструкции в Си/С++.

1. Операторы if

Эти операторы иначе называются условными операторами и позволяют реализовывать разветвления в программах.

Пример 4. Программа осуществляет преобразование дюймов в сантиметры и сантиметров в дюймы; предполагается, что Вы укажете единицы измерения вводимых данных, добавляя i для дюймов и c для сантиметров:

#include <iostream.h>

void main()

{

const float fac = 2.54;

float x, in, cm;

char ch = 0;

cout << "введите длину: ";

cin >> x >> ch;

if (ch == 'i') { // inch - дюймы

in = x;

cm = x*fac;

}

else if (ch == 'c') // cm - сантиметры

{ in = x/fac;

cm = x;

}

cout << in << " in = " << cm << " cm\n";

}

Условие в операторе if должно быть заключено в круглые скобки.

2. Операторы switch

Оператор switch производит сопоставление значения с множеством констант.

Проверки в предыдущем примере можно записать так:

switch (ch) {

case 'i':

in = x;

cm = x*fac;

break;

case 'c':

in = x/fac;

break;

default:

in = cm = 0;

break;

}

Операторы break применяются для выхода из оператора switch. Константы в вариантах case должны быть различными, и если проверяемое значение не совпадает ни с одной из констант, выбирается вариант default. Программисту не обязательно предусматривать default.

3. Проверки

Проверка значения может осуществляться или оператором if, или оператором switch:

If ( выражение ) оператор

Наши рекомендации