Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



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

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

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

Для программной реализации этого типа алгоритмов в языке программирования Pascal можно использовать три оператора:

1. Условный оператор (оператор условного перехода).

2. Оператор выбора (оператор варианта).

3. Оператор безусловного перехода. Рассмотрим все эти операторы подробнее. Оператор безусловного перехода имеет вид: GOTO < метка>

GOTO — зарезервированное слово (перейти на метку) < метка> — метка

Метка в Турбо Паскале — это произвольный идентифи­катор, позволяющий именовать некоторый оператор про-


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

Метка располагается непосредственно перед помечае­мым оператором и отделяется от него двоеточием.

Перед тем как использовать метку в программе, она должна быть описана. Описание меток состоит из заре­зервированного слова LABEL (метка), за которым следует список меток:

Label 1оор, 1Ы;

Begin

goto lbl; loop: ... lbl:... goto loop;

End.

Действие оператора GOTO состоит в передаче управле­ния соответствующему меченному оператору. Правила использования меток:

- метка, на которую ссылается оператор GOTO, должна быть описана в разделе описаний

- метки, описанные в процедуре (функции) локализуют­ся в ней.

Условный оператор. Условный оператор позволяет проверить некоторое условие и в зависимости от резуль­татов проверки выполнить то или иное действие.

Структура условного оператора:

IF < условие> THEN < оператор 1> ELSE < оператор 2>;

IF, THEN, ELSE — зарезервированные слова (если, то, иначе)

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

< оператор 1>, < оператор 2> — операторы языка Турбо Паскаль.

Часть ELSE < оператор 2> условного оператора может быть опущена.


 




Тогда при значении true выражения, стоящего в усло­вии, выполняется < оператор 1>, в противном случае этот оператор пропускается.

Пример.

Написать программу расчета функции: [cos2*, при 0< х< 2 [1-sinx, иначе.

Решение: Program wetw; Vary, x: real; Begin

writeln('x=');

readln(x); {ввод х}

if (x> 0)and(x< 2) then y: =Sqr(cos(x)) else y: =1-sin(sqr(x));

{вычисление значения у}

writeln('y(', x:?!: 2, ')=', y: 8: 2); {вывод значения у на экран}

readln; {пауза} End.

Пример.

Написать программу, которая в переменную max запи­сывает наибольшее из двух чисел х и у.

\х, если х > у

max = < "

[у, если у > х

Решение: Program wetw2; Var max, x, y: real; Begin

write('x=');

readln(x); {вводх}


write('y=');

readln(y); {ввод у}

max: =y;

if x> y then max: =x;

{ если х> у max: =x, иначе значение max не меняется}

writeln('max=', max: 8: 2); {вывод значение переменной max

на экран}

Readln; {пауза} End.

Вложенные операторы условия. Если < оператор 1> или < оператор 2> является, в свою очередь, условным оператором, то такая конструкция называется вложенным условным оператором.

Пример.

Вычислить у =

х + 3, если х < О х2, если 0< х< 4 ех~6, если х> 4

Решение: Program Gg; Var x, y: real; Begin Write('x='); Readln(x); if x< 0 then y: =x+3 else

if x> 4 then y: =exp(x-6) else y: =sqr(x); writeln('y=', y: 8: 2); Readln; End.

Оператор выбора (оператор варианта) . Условный оператор при выполнении программы позволяет выбрать одно из двух возможных действий. Если же необходимо выполнить много взаимоисключающих проверок, то удоб­нее воспользоваться оператором выбора (варианта). Общий вид оператора: CASE < селектор> OF

< список меток варианта >: < оператор1 >;

< список меток варианта >: < оператор2 >;


 



7. Информатика



< список меток варианта >: < операторЗ >;

ELSE

< onepaTopN>

END;

Селектор представляет собой выражение скалярного типа (но не вещественного). Выполнение оператора вари­анта начинается с вычисления значения селектора. Затем для исполнения выбирается оператор, одна из меток ко­торого совпадает с полученным значением. После выпол­нения этого оператора (он может быть простым или со­ставным) управление передается на оператор, следующий за оператором варианта. Если же значение селектора не совпало ни с одной из меток, то выполняется оператор, стоящий после служебного слова ELSE.

Вообще говоря, ветвь ELSE может и отсутствовать.

Рассмотрим пример использования оператора варианта. Заметим сразу, что оператор варианта удобно использовать для ввода и вывода значений перечисляемых скалярных типов данных. Например, в следующем фрагменте програм­мы с внешнего носителя вводится порядковый номер объек­та из списка значений перечисляемого типа COLOR (цвет). Оператор CFSE присваивает соответствующее значение пе­ременной CLR. Аналогично осуществляется вывод значе­ний CLR при помощи оператора варианта.

Program cas;

Type color = (red, blue, black);

Varx: integer;

Clr: color;

Begin

Write ('Введите порядковый номер /0-1-2/ => '); Readln (x); Case x of

0: clr: =red;

1: clr: =blue;

2: clr: =black; else

writeln ('Неправильный ввод') 194


end;

Write ('цвет = ');

Case clr of

0: writeln ('red');

1: writeln ('blue');

2: writeln ('black'); end; End.

Протокол работы программы: Введите порядковый номер /0-1-2/ => 2 цвет = black

Выводы_____________________________________

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

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

Для реализации разветвляющихся алгоритмов на язы­ке программирования Pascal используются операторы:

1. Оператор безусловного перехода — GOTO < метка>;

2. Условный оператор IF < условие> THEN < опе-ратор 1> ELSE < оператор 2>;

3. Оператор выбора (оператор варианта):
CASE < селектор> OF

< список меток варианта >: < оператор1 >;

< список меток варианта >: < оператор2 >;

< список меток варианта >: < операторЗ >;

ELSE

< операторЫ>
END;

Контрольные вопросы

1. Ниже приведены блок-схемы некоторых алгоритмов. Укажите, какая из вышеприведенных блок-схем явля­ется блок-схемой алгоритма ветвящейся структуры?


                           
   
   
     
 
     
 
       
 
   
 
 
 
 


2. Для реализации алгоритмов ветвящейся структуры
используются операторы:

а) GOTO < метка>;

б) If < условие> then < действие> else;
в): =

г) case < параметр> of < метка1>: < действие1>; < метка-
2>: < действие2> else < действие> end;

Один из пунктов" Вдесь лишний. Укажите, какой именно.

3. Метка в Турбо Паскале — это произвольный иден­
тификатор, позволяющий именовать некоторый оператор
программы и таким образом ссылаться на него.

Верно ли данное высказывание?

4. Выберите неправильные операторы из списка:

а) if a> b then;

б) if x and y then s: =s+l; else s; =s-l;

в) if k< > m then k: =m;
r) if 5 then s: =s+5;

д) if (a< b)and с then c: =false;

е) If 2< x or x< 5 then d: =0 else d: =l;

ж) if (a=b) and p then p: =p+105;

5. Часть ELSE < оператор 2> условного оператора не
может быть опущена.

Верно ли данное высказывание?


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

Верно ли данное высказывание?

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

Верно ли данное высказывание?

Ответы _________ _^

а. в. ДА. а, б, г, д, ж. НЕТ. ДА. НЕТ.

1. Правильный ответ

2. Правильный ответ

3. Правильный ответ

4. Правильный ответ

5. Правильный ответ

6. Правильный ответ

7. Правильный ответ

Задачи и упражнения______________________

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

Задание Ml. Дана программа, запрашивающая у пользователя его пол и выводящая на экран сообщение «мальчики — хорошие студенты», если нажата клавиша «М» или сообщение «девушки — хорошие студенты», если нажата клавиша «Ж». Если нажата любая другая клави­ша, то выводится сообщение о неправильном вводе. Про­тестировать эту программу на компьютере и записать про­токол ее работы. Текст программы: Program Priml; uses CRT;

Var c: char; {символьная переменная} Begin CLRSCR;

Write ('Введите ваш пол —'); Readln (с); Case с of

'M': writeln (мальчики — хорошие студенты); 'Ж': writeln (девочки — хорошие студенты);


 




else

write ('неправильный ввод');

readln; end.

Протокол работы программы: Введите ваш пол — та девочки — хорошие студенты

Задание №2. Составить программу нахождения дей­ствительных корней квадратного уравнения ах2 + Ъх - с. Примечание. Действительные корни квадратного урав­нения находятся по формуле:

-b±ylb2 -4ас
Xl'2 =

При этом могут возникнуть три основных случая:

1. D = Ъ2 - 4ас > 0, тогда оба корня уравнения действи­
тельны и различны, т. е.,

_-Ь + ыЪг -Аас _-Ь-у1Ьг -Аас
2

2. D = Ъ2 — Аас = 0, тогда оба корня уравнения действи­
тельны и равны между собой, т. е.

х, =

1

3. D = Ъ2 - 4ас < 0^ тогда уравнение не имеет действи­
тельных корней (оба корня уравнения мнимые).

Список используемых переменных: исходные данные;

а, Ь, с — коэффициенты уравнения; выходные данные;

XI, Х2 — корни уравнения или сообщение на экране об отсутствии действительных корней. Текст программы: Program Prim2; uses CRT;

const Str='HeT действительных корней'; Vara, b, c, Diskr, x1, x2: real; Selektor: integer; Begin CLRSCR;


Write ('Введите коэффициент при старшей степени');

Readln (a);

Write ('Введите коэффициент при младшей степени');

Readln (b);

Write ('Введите свободный член');

Readln (с);

Diskr: =sqr(b)-4*a*c;

If Diskr> 0 then Selektor: =1;

If Diskr=0 then Selektor: =2;

If Diskr< 0 then Selektor: =3;

Case Selektor of

1: begin

writeln ('два различных действительных корня');

x1: =sqr((-b)+diskr)/(2*a);

x2: =sqr ((-b)-diskr) / (2*a);

writeln ('x1= ', x1);

writeln ('x2=', x2); end; 2: begin

writeln ('два одинаковых действительных корня');

x1: =(-b)/(2*a);

х2: =х1;

writeln ('x1 = х2 = ', х1); end;

3: writeln (Str); readln; end. Отладочный пример:

1. Пусть а = 2, Ъ = 3, с = 6. В этом случае D = Ь2 - Аас = = 9-4*2*6 = 9-48 = -39< 0, тогда оба корня уравнения мнимые, т. е. Нет действительных корней.

2. Пусть а - 2, b = 5, с = 0. В этом случае D = Ь2 - 4ас = = 25 - 4 * 2 * 0 = 25 - 0 = 25 > 0, оба корня уравнения действительны и различаются между собой, т. е.

-5 + 50 _-5-5_-10_

1 2*2 4 х 2*2 4

Протокол работы программы:

1. Введите коэффициент при старшей степени 2

Введите коэффициент при младшей степени 3


 




Введите свободный член 6 Нет действительных корней

2. Введите коэффициент при старшей степени 2

Введите коэффициент при младшей степени 3

Введите свободный член 6

два различных действительных корня

xl = О

х2 = -2, 5

Анализ проделанной работы:

программа работает верно.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-06-04; Просмотров: 3284; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.056 с.)
Главная | Случайная страница | Обратная связь