русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Разветвляющиеся алгоритмы


Дата добавления: 2014-11-28; просмотров: 6417; Нарушение авторских прав


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

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

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

Простым условием (отношением) называется выражение, составленное из двух арифметических выражений или двух текстовых величин (иначе их еще называют операндами), связанных одним из знаков:

< - меньше, чем...

> - больше, чем...

<= - меньше, чем... или равно

>= - больше, чем... или равно

<> - не равно

= - равно

Например, простыми отношениями являются следующие:

x-y>10; k<=sqr(c)+abs(a+b); 9<>11; ‘мама’<>‘папа’.

В приведенных примерах первые два отношения включают в себя переменные, поэтому о верности этих отношений можно судить только при подстановке некоторых значений:

если х=25, у=3, то отношение x-y>10 будет верным, т.к. 25-3>10

если х=5, у=30, то отношение x-y>10 будет неверным, т.к. 5-30<10

Проверьте верность второго отношения при подстановке следующих значений:

а) k=5, a=1, b=-3, c=-8

b) k=65, a=10, b=-3, c=2

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

Примечание. Название “булевые” произошло от имени математика Джорджа Буля, разработавшего в XIX веке булевую логику и алгебру логики.

Определение. Переменная, которая может принимать одно из двух значений: True (правда) или False (ложь), называется булевой (логической) переменной. Например,



К:=True;

Flag:=False;

Second:=a+sqr(x)>t

Рассмотрим пример.

Задача. Вычислить значение модуля и квадратного корня из выражения (х-у).

Для решения этой задачи нужны уже знакомые нам стандартные функции нахождения квадратного корня - Sqr и модуля - Abs. Поэтому Вы уже можете записать следующие операторы присваивания:

Koren:=Sqrt(x-y);

Modul:=Abs(x-y).

В этом случае программа будет иметь вид:

Program Znachenia;

Uses

Crt;

Var

x, y : integer;

Koren, Modul : real;

Begin

ClrScr;

write (‘Введите значения переменных х и у через пробел ‘);

read (x, y);

Koren:=Sqrt(x-y);

Modul:=Abs(x-y).

write (‘Значение квадратного корня из выражения (х-у) равно ‘);

write (‘Значение модуля выражения (х-у) равно ‘);

readln;

End.

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

Поэтому наша программа имеет свою допустимую область исходных данных. Найдем эту область. Для этого запишем неравенство х-у>=0 и решив его получим х>=у. Значит, если пользователем нашей программы будут введены такие числа, что при подстановке значение этого неравенства будет равно True, то квадратный корень из выражения (х-у) извлечь можно. А если значение неравенства будет равно False, то выполнение программы закончится аварийно.

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

а) х=23, у=5; б) х=-5, у=15; в) х=8, у=8.

Каждая программа, насколько это возможно, должна осуществлять контроль за допустимостью величин, участвующих в вычислениях. Здесь мы сталкиваемся с разветвлением нашего алгоритма в зависимости от условия. Для реализации таких условных переходов в языке Паскаль используют операторы If и Else, а также оператор безусловного перехода Goto.

Рассмотрим оператор If.

Для нашей задачи нужно выполить следующий алгоритм:

если х>=у,

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

иначе выдать на экран сообщение об ошибочном введении данных.

Запишем его с помощью оператора If. Это будет выглядеть так.

if x>=y

Then

Koren:=Sqr(x-y)

Else

write (‘Введены недопустимые значения переменных‘);

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

В общем случае полная форма конструкции условного оператора имеет вид:

if <логическое выражение>

Then

<оператор 1>

Else

<оператор 2>

Условный оператор работает по следующему алгоритму.

Сначала вычисляется значение логического выражения, расположенного за служебным словом IF. Если его результат истина, выполняется <оператор 1>, расположенный после слова THEN, а действия после ELSE пропускаются; если результат ложь, то, наоборот, действия после слова THEN пропускаются, а после ELSE выполняется <оператор 2>.

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

Если в качестве оператора должна выполниться серия операторов, то они заключаются в операторные скобки begin-end. Конструкция Begin ... End называется составным оператором.

if <логическое выражение>

Then

Begin

оператор 1;

оператор 2;

...

End

Else

Begin

оператор 1;

оператор 2;

...

end;

Определение. Составной оператор -объединение нескольких операторов в одну группу. Группа операторов внутри составного оператора заключается в операторные скобки (begin-end).

begin

оператор 1;

оператор 2;

end;

С учетом полученных знаний преобразуем нашу программу.

Program Znachenia;

Uses

Crt;

Var

x, y : integer;

Koren, Modul : real;

Begin

ClrScr;

write (‘Введите значения переменных х и у через пробел ‘);

read (x, y);

if x>=y

Then

Begin

Koren:=Sqr(x-y)

Modul:=Abs(x-y)

write (‘Значение квадратного корня из выражения (х-у) равно ‘);

write (‘Значение модуля выражения (х-у) равно ‘);

End

Else

write (‘Введены недопустимые значения переменных‘);

readln;

End.

Составным оператором является и такой оператор

begin

S:=0;

end.

Cимвол “;” в данном случае разделяет оператор присваивания S:=0 и пустой оператор.

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

Например, составной оператор

begin

end.

включает лишь один пустой оператор.

Если Вы обратили внимание, программа на языке Паскаль всегда содержит один составной оператор – раздел операторов программы.

Внимание! Перед служебным словом Else разделитель (точка с запятой) не ставится.

 

Отметим, что большинство операторов в программах на языке Паскаль заканчиваются точкой с запятой, но после некоторых операторов точка с запятой не ставится. Сформулируем общие правила употребления точки с запятой:

1. Каждое описание переменной и определение константы заканчиваются точкой с запятой.

2. Каждый оператор в теле программы завершается точкой с запятой, если сразу за ним не следуют зарезервированные слова End, Else, Until.

3. После определенных зарезервированных слов, таких, как Then, Else, Var, Const, Begin, никогда не ставится точка с запятой.

Рассмотрим еще один пример.

Задача. Вывести на экран большее из двух данных чисел.

Program Example1;

Var

x, y : integer; {вводимые числа}

Begin

writeln(‘Введите 2 числа ‘); {вводим два целых числа через пробел}

readln(x,y);

if x>y

Then

writeln (x) {если х больше y, то выводим х}

Else

writeln (y) {иначе выводим y}

readln;

End.

 

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

Неполная форма условного оператора имеет следующий вид.

if <логическое выражение>

Then

<оператор>

Тогда если выражение, расположенное за служебным словом IF. в результате дает истину, выполняются действия после слова THEN, в противном случае эти действия пропускаются.

Задача. Составить программу, которая, если введенное число отрицательное меняет его на противоположное.

Program Chisla;

Var

x : integer; {вводимое число}

Begin

writeln(‘Введите число ‘); {вводим целое число}

readln(x);

if x<0

Then

x:=-x;

writeln (x);

readln;

End.

 



<== предыдущая лекция | следующая лекция ==>
Для любопытных. Окно в графическом режиме. Решение задач. | Выберите из предложенного ниже списка задачи для самостоятельного решения.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.398 сек.