Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
28.doc
Скачиваний:
31
Добавлен:
30.04.2022
Размер:
605.18 Кб
Скачать

6.4. Программирование алгоритмов разветвляющейся структуры

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

Для программной реализации этого типа алгоритма используют условный оператор, который имеет вид (полное условное предложение)

if b then < оператор 1>

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

где b – логическое выражение (условие).

При прочтении данного оператора машина вычисляет значение логического выражения b и если оно истинно (true), то выполняется < оператор 1>, а < оператор 2> игнорируется. Если же значение выражения b ложно (false), то < оператор 1> игнорируется и выполняется < оператор 2>.

Укороченное условное предложение записывается в виде

If b then < оператор 1>;

В этом случае при выполнении условия b реализуется < оператор 1>, а если b ложно, < оператор 1> игнорируется и выполняется оператор, следующий за оператором if. < Оператор 1> и < оператор 2> могут быть составными.

Составной оператор

Если при некотором условии необходимо выполнить определенную последовательность операторов, то их объединяют в один оператор, заключая в так называемые операторные скобки – зарезервированные слова begin …end. Составные операторы обрабатываются как один оператор, что имеет важное значение в ситуации, когда синтаксис языка Pascal требует использования только одного оператора.

Пример

Составить программу для нахождения действительных корней квадратного уравнения

program Scr;

var a, b, c, d, p, q, z, x1, x2: real;

BEGIN

writeln (‘Введите значения коэффициентов a, b, c’);

readln (a, b, c);

d:= b*b-4*a*c;

z:= 2*a;

p:= -b/z;

q:= sqrt(abs(d)/z);

if d>0 then

begin

x1:= p+q; x2:= p-q;

writeln (‘Корни действительные’);

writeln (‘x1=’, x1:8:3,’… x2=’, x2:8:3)

end

else

writeln (‘Действительных корней нет’)

END.

6.5. Программирование алгоритмов циклической структуры

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

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

Общий вид: GOTO n, где n – метка некоторого оператора программы (произвольный идентификатор или целая константа без знака в диапазоне 1. .9999), обозначает место в программе, куда надо передать управление.

При прочтении данного оператора ЭВМ находит в программе оператор с указанной меткой n и продолжает выполнение программы, начиная с этого оператора.

Пример

Вычислить значение функции в интервале [-2; 3] с шагом . Значения констант а=1,71; b=3,2; р=2,1.

program tabul;

label m1;

const a=1.71; b=3.2; p=2.1;

var x,y: real;

BEGIN

x:=-2;

m1: y:=a*exp(-p*x)+b*sin(x/2)/cos(x/2);

writeln (‘x=’, x:6:1,’…y=’, y:7:2);

x:=x+0.3;

if x<=3 then goto m1

END.

Помимо организации цикла «вручную» в языке Turbo Pascal имеются три различных оператора, которые реализуют циклические процедуры.

Оператор цикла с предусловием

Структура WHILE <условие> DO < оператор>;

<условие> – выражение логического типа;

<оператор> – произвольный оператор ТР (один!).

При прочтении данного оператора ЭВМ определяет значение логического выражения (условия); если оно истинно, то выполняется <оператор>, затем вышеописанная процедура повторяется до тех пор, пока значение логического выражения не станет ложным, и тогда оператор цикла while прекращает свою работу. Если выражение было ложно сразу при первом входе в цикл, то <оператор> не выполняется ни разу.

Пример

Предыдущее задание с использованием оператора WHILE приводится к следующей программе:

program tabul1;

const a=1.71; b=3.2; p=2.1;

var x,y: real;

BEGIN

x:=-2;

while x<=3 do

begin

y:=a*exp(-p*x)+b*sin(x/2)/cos(x/2);

writeln (‘x=’, x:6:1,’…y=’, y:7:2);

x:=x+0.3;

end

END.

Оператор цикла с постусловием

Структура

REPEAT

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

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

…………………….

<оператор n>

UNTIL <условие>;

<условие> – выражение логического типа;

<оператор1>, <оператор2>,..., <оператор n> – произвольные операторы языка Turbo Pascal.

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

Пример

Выполнить предыдущее задание, но для произвольного интервала [хн, хк] и шага табулирования h.

program tabul2;

const a=1.71; b=3.2; p=2.1;

var x,y, xn, xk,h: real;

BEGIN

{Ввод начального xn, конечного xk значений интервала и шага h}

writeln(‘Введите xn, xk,h’);

readln (xn, xk,h);

x:=xn;

repeat

y:=a*exp(-p*x)+b*sin(x/2)/cos(x/2);

writeln (‘x=’, x:6:1,’…y=’, y:7:2);

x:=x+h

until x>xk

END.

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

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

Общий вид оператора

FOR I:=M1 TO M2 DO <оператор>;

где I – параметр цикла (переменная порядкового типа). Он выполняет роль счетчика, то есть следит за количеством повторений в цикле;

М1 и М2 – соответственно начальное и конечное значения параметра цикла;

<оператор> – произвольный оператор ТР (один!).

При прочтении данного оператора ЭВМ присваивает параметру цикла I начальное значение М1, затем I сравнивается со своим конечным значением М2, то есть проверяется условие I≤М2. Если это условие выполняется, то выполняется <оператор> и параметр цикла получает новое значение (например, для целого типа это означает I:=I+1) и цикл повторяется. Если же нет, то оператор цикла завершает свою работу.

Ограничения действующие для оператора FOR:

1. Начальное и конечное значения параметра цикла изменять внутри цикла нельзя.

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

Пример

Вычислить сумму четных чисел от 2 до 100.

Четные числа в заданном интервале формульно могут быть представлены в виде 2n, где n меняется от 1 до 50. Для получения значения необходимо n раз выполнить операцию сложения, когда к предыдущему результату добавляется значение последующего слагаемого, то есть многократно выполняется участок алгоритма вида

.

Этой инструкцией можно осуществить постепенное последовательное накопление суммы, если предварительно выполнено действие s=0.

program Sum;

var n, s: integer;

BEGIN

s: =Ø;

for n:=1 to 50 do

s:=s+2*n;

writeln (‘Сумма=’,s)

END.

В разобранном примере мы использовали простую формульную зависимость для получения в качестве слагаемых последовательных четных чисел в диапазоне от 2 до 100. Однако данная программа неприменима для произвольного числа слагаемых n и любых величин слагаемых а1, а2,… аn.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]