ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Разветвляющиеся алгоритмы. До сих пор Вы использовали линейные алгоритмы, т.еДо сих пор Вы использовали линейные алгоритмы, т.е. алгоритмы, в которых все этапы решения задачи выполняются строго последовательно. Сегодня Вы познакомитесь с разветвляющимися алгоритмами. Определение. Разветвляющимся называется такой алгоритм, в котором выбирается один из нескольких возможных вариантов вычислительного процесса. Каждый подобный путь называется ветвью алгоритма. Признаком разветвляющегося алгоритма является наличие операций проверки условия. Различают два вида условий – простые и составные. Простым условием (отношением) называется выражение, составленное из двух арифметических выражений или двух текстовых величин (иначе их еще называют операндами), связанных одним из знаков: < - меньше, чем... > - больше, чем... <= - меньше, чем... или равно >= - больше, чем... или равно <> - не равно = - равно Например, простыми отношениями являются следующие: 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.
Не нашли, что искали? Воспользуйтесь поиском:
|