До сих пор Вы использовали линейные алгоритмы, т.е. алгоритмы, в которых все этапы решения задачи выполняются строго последовательно. Сегодня Вы познакомитесь с разветвляющимися алгоритмами.
Определение. Разветвляющимся называется такой алгоритм, в котором выбирается один из нескольких возможных вариантов вычислительного процесса. Каждый подобный путь называется ветвью алгоритма.
Признаком разветвляющегося алгоритма является наличие операций проверки условия. Различают два вида условий – простые и составные.
Простым условием (отношением) называется выражение, составленное из двух арифметических выражений или двух текстовых величин (иначе их еще называют операндами), связанных одним из знаков:
> = — больше, чем. или равно
Например, простыми отношениями являются следующие:
В приведенных примерах первые два отношения включают в себя переменные, поэтому о верности этих отношений можно судить только при подстановке некоторых значений:
если х=25, у=3, то отношение x-y> 10 будет верным, т.к. 25-3> 10
Информатика, 10г 10е, 13 мая 2020
если х=5, у=30, то отношение x-y> 10 будет неверным, т.к. 5-30< 10
Проверьте верность второго отношения при подстановке следующих значений:
b) k=65, a=10, b=-3, c=2
Определение. Выражения, при подстановке в которые некоторых значений переменных, о нем можно сказать истинно (верно) оно или ложно (неверно) называются булевыми (логическими) выражениями.
Примечание. Название “булевые” произошло от имени математика Джорджа Буля, разработавшего в XIX веке булевую логику и алгебру логики.
Определение. Переменная, которая может принимать одно из двух значений: True (правда) или False (ложь), называется булевой (логической) переменной. Например,
Задача. Вычислить значение модуля и квадратного корня из выражения (х-у).
Для решения этой задачи нужны уже знакомые нам стандартные функции нахождения квадратного корня — Sqr и модуля — Abs. Поэтому Вы уже можете записать следующие операторы присваивания:
В этом случае программа будет иметь вид:
Koren, Modul: real;
write (‘Введите значения переменных х и у через пробел ‘);
write (‘Значение квадратного корня из выражения (х-у) равно ‘);
write (‘Значение модуля выражения (х-у) равно ‘);
Казалось бы задача решена. Но мы не учли области допустимых значений для нахождения квадратного корня и модуля. Из курса математики Вы должны знать, что можно найти модуль любого числа, а вот значение подкоренного выражения должно быть неотрицательно (больше или равно нулю).
Поэтому наша программа имеет свою допустимую область исходных данных. Найдем эту область. Для этого запишем неравенство х-у> =0 и решив его получим х> =у. Значит, если пользователем нашей программы будут введены такие числа, что при подстановке значение этого неравенства будет равно True, то квадратный корень из выражения (х-у) извлечь можно. А если значение неравенства будет равно False, то выполнение программы закончится аварийно.
Функция ЕСЛИ в Excel с несколькими условиями (IF) и функция из Excel 2016 ЕСЛИМН (IFS)
Задание. Наберите текст программы. Протестируйте программу со следующими значениями переменных и сделайте вывод.
а) х=23, у=5; б) х=-5, у=15; в) х=8, у=8.
Каждая программа, насколько это возможно, должна осуществлять контроль за допустимостью величин, участвующих в вычислениях. Здесь мы сталкиваемся с разветвлением нашего алгоритма в зависимости от условия. Для реализации таких условных переходов в языке Паскаль используют операторы If и Else, а также оператор безусловного перехода Goto.
Рассмотрим оператор If.
Для нашей задачи нужно выполить следующий алгоритм:
то вычислить значение квадратного корня,
иначе выдать на экран сообщение об ошибочном введении данных.
Запишем его с помощью оператора If. Это будет выглядеть так.
if x> =y
Then
Else
write (‘Введены недопустимые значения переменных‘);
Теперь в зависимости от введенных значений переменных х и у, условия могут выполняться или не выполняться.
В общем случае полная форма конструкции условного оператора имеет вид:
if
Then
Else
Условный оператор работает по следующему алгоритму.
Сначала вычисляется значение логического выражения, расположенного за служебным словом IF. Если его результат истина, выполняется < оператор 1>, расположенный после слова THEN, а действия после ELSE пропускаются; если результат ложь , то, наоборот, действия после слова THEN пропускаются, а после ELSE выполняется < оператор 2>.
Управляющая структура if может показаться негибкой, так как выполняемые действия могут быть описаны только одним оператором. Иногда может потребоваться выполнение последовательности операторов. В этом случае хотелось бы заключить всю последовательность в воображаемые скобки. В Паскале предусмотрен этот случай.
Если в качестве оператора должна выполниться серия операторов, то они заключаются в операторные скобки begin-end. Конструкция Begin. End называется составным оператором.
if
Then
Begin
End
Else
Begin
end;
Определение. Составной оператор — объединение нескольких операторов в одну группу. Группа операторов внутри составного оператора заключается в операторные скобки (begin-end).
С учетом полученных знаний преобразуем нашу программу.
Program Znachenia;
Uses
Var
Koren, Modul: real;
Begin
write (‘Введите значения переменных х и у через пробел ‘);
if x> =y
Then
Begin
write (‘Значение квадратного корня из выражения (х-у) равно ‘);
write (‘Значение модуля выражения (х-у) равно ‘);
End
Else
write (‘Введены недопустимые значения переменных‘);
End.
Составным оператором является и такой оператор
Cимвол “; ” в данном случае разделяет оператор присваивания S: =0 и пустой оператор.
Пустой оператор не влечет никаких действий и в записи программы никак не обозначается.
Например, составной оператор
включает лишь один пустой оператор.
Если Вы обратили внимание, программа на языке Паскаль всегда содержит один составной оператор – раздел операторов программы.
Внимание ! Перед служебным словом Else разделитель (точка с запятой) не ставится.
Отметим, что большинство операторов в программах на языке Паскаль заканчиваются точкой с запятой, но после некоторых операторов точка с запятой не ставится. Сформулируем общие правила употребления точки с запятой:
1. Каждое описание переменной и определение константы заканчиваются точкой с запятой.
2. Каждый оператор в теле программы завершается точкой с запятой, если сразу за ним не следуют зарезервированные слова End, Else, Until.
3. После определенных зарезервированных слов, таких, как Then, Else, Var, Const, Begin, никогда не ставится точка с запятой.
Рассмотрим еще один пример.
Задача. Вывести на экран большее из двух данных чисел.
Program Example1;
Var
Begin
writeln(‘Введите 2 числа ‘);
if x> y
Then
Else
End.
Можно также использовать и сокращенную (неполную) форму записи условного оператора. Эта форма используется тогда, когда в случае невыполнения условия ничего делать не надо.
Неполная форма условного оператора имеет следующий вид.
if
Then
Тогда если выражение, расположенное за служебным словом IF. в результате дает истину, выполняются действия после слова THEN, в противном случае эти действия пропускаются.
Задача. Составить программу, которая, если введенное число отрицательное меняет его на противоположное.
Program Chisla;
Var
Begin
if x< 0
Then
End.
Выберите из предложенного ниже списка задачи для самостоятельного решения.
1. Если целое число М делится нацело на целое число N, то вывести на экран частное от деления, в противном случае вывести сообщение М на N нацело не делится.
2. Запишите условный оператор, в котором значение переменной с вычисляется по формуле a+b, если а – нечетное и a*b, если а – четное.
3. Вычислить значение функции:
у=
4. Написать программу для подсчета суммы только положительных из трех данных чисел.
5. Даны три числа. Написать программу для подсчета количества чисел, равных нулю.
6. Напишите программу, упростив следующий фрагмент программы:
if a> b then c: =1;
if a> b then d: =2;
7. Каким будет значение переменной а после выполнения операторов:
8. Найти количество положительных (отрицательных) чисел среди четырех целых чисел A, B, C, D.
9. Составьте программу, которая уменьшает первое введенное число в пять раз, если оно больше второго введенного числа по абсолютной величине.
10. Для данного значения X вычислить значение функции, которая определяется следующим образом:
Y=sin(x), если x > =1
11. Определить является ли введённое число чётным.
12. Компьютер спрашивает: » Что сегодня нужно всем? » и если получает ответ ЭВМ, то пишет » Ну, конечно ЭВМ! «, иначе » Это тоже нужно всем, но нужнее ЭВМ! «
13. Написать программу, по которой компьютер приветствовал бы только своего хозяина, а при попытке ввести какое-либо другое имя спрашивал бы: » А где (например) Вася? «
14. Написать программу, определяющую, есть ли в введенном числе дробная часть.
15. Написать программу, рисующую круг в случае введения пользователем числа 1 и квадрат во всех других случаях.
Занятие 2. Логический тип данных. Логические операции not, and, or. Нахождение значений логических выражений. Самостоятельная работа.
Логический тип данных
Переменные логического типа описываются посредством идентификатора Boolean. Они могут принимать только два значения – False (ложь) и True (истина). Описываются они также в разделе описания переменных.
Переменные логического типа обычно получают значения в результате выполнения операций сравнения и математических операций (рассматривались в предыдущем занятии), а также с помощью специфических булевых операций.
В языке Турбо Паскаль имеются логические операции, применяемые к переменным логического типа. Это операции not, and, or и хor. В этой теме Вы рассмотрите три логические операции. Обозначения и результаты этих операций приведены в таблице. Рассмотрите ее.
Значения операндов | Результат операции | |||
X | Y | not X | X and Y | X or Y |
False | False | True | False | False |
False | True | True | False | True |
True | False | False | False | True |
True | True | False | True | True |
Операция not (не) имеет один операнд и образует его логическое отрицание. Результат операции not есть False, если операнд истинен, и True, если операнд имеет значение ложь. Так,
not True False (неправда есть ложь)
not False True (неложь есть правда)
Результат операции and (и) есть истина, только если оба ее операнда истинны, и ложь во всех других случаях.
Результат операции or (или) есть истина, если какой-либо из ее операндов истинен, и ложен только тогда, когда оба операнда ложны.
Задание. Попробуйте определить значение булевых операций для высказываний:
1. Школьник на зимних каникулах остается дома или уезжает куда-либо отдыхать.
2. Филипп Киркоров является певцом и комбайнером.
3. Школьниками являются мальчики и девочки.
Придумайте и запишите в тетрадь три подобных высказывания.
Логические операции, операции отношения и арифметические операции часто встречаются в одном выражении. При этом отношения, стоящие слева и справа от знака логической операции, должны быть заключены в скобки, поскольку логические операции имеют более высокий приоритет. Вообще принят следующий приоритет операций:
Примечание. Логическую операцию and еще называют логическим умножением, а логическую операцию or — логическим сложением.
Кроме того, порядок выполнения операций может изменяться скобками. Например, в логическом выражении расставим порядок действий
A or B and not (A or B)
Сначала выполняется заключенная в скобки операция or, а затем операции not, and, or. Если подставить вместо переменных А и В значения True и False, то, используя уже рассмотренный порядок действий, получим значение всего выражения равное True.
Задание. Запишите в тетрадь и вычислите значения выражений при a=10, b=20, c=true, d=false:
c) c or d and (b=20);
Внимание! В языке Паскаль нет возможности ввода логических данных с помощью оператора read. Однако предусмотрен вывод значений переменных логического типа с помощью оператора write.
Например, после выполнения оператора write (5> 2) на экран будет выведено True.
Самостоятельная работа
Выберите с учителем задание для выполнения самостоятельной работы из ниже предложенных упражнений.
1. Вычислите значения выражения:
б) k mod 7 = k div5-1 при k=15;
в) odd(trunc(10*p)) при p=0.182;
г) not odd(n) при n=0;
д) t and (p mod 3=0) при t=true, p=101010;
е) (x*y < >0) and (y> x) при x=2, y=1;
ж) (x*y < >0) or (y> x) при x=2, y=1;
з) a or (not b) при a=False, b=True;
2. Записать на Паскале отношение, истинное при выполнении указанного условия и ложное в противном случае:
а) целое k делится на 7;
б) уравнение не имеет вещественных корней;
в) точка (х, у) лежит вне круга радиуса R с центром в точке (1, 0);
г) натуральное число N является квадратом натурального числа;
ж) (операцию not не использовать)ж
з) хотя бы одна из логических переменных а и b имеет значение True;
и) обе логические переменные а и b имеют значение True.
3. Указать порядок выполнения операций при вычислении выражений:
а) a and b or not c and d;
б) (x> =0) or not c and d.
4. Вычислить следующие выражения при a=True, b=False:
а) a or b and not a;
б) (a or b) and not a;
5. Записать на Паскале выражение, истинное при выполнении указанного условия и ложное в противном случае:
а) х принадлежит отрезку [0, 1];
б) х лежит вне отрезка [0, 1];
в)* х принадлежит отрезку [2, 5] или [-1, 1];
г)* х лежит вне отрезков [2, 5] и [-1, 1];
д) каждое из чисел х, у, z положительно;
ж) ни одно из чисел х, у, z не является положительным;
з) только одно из чисел х, у, z положительно;
и) логическая переменная а имеет значение True, логическая переменная b имеет значение False;
к)* год с порядковым номером у является високосным (год високосный, если его номер кратен 4, однако из кратных 100 високосными являются лишь кратные 400, например, 1700, 1800 и 1900 – невисокосные годы, 2000 – високосный).
6. Нарисовать на плоскости (х, у) область, в которой и только в которой истинно указанное выражение:
а)* (y> =x) and (y+x> =0) and (y< =1);
в) (trunc(y)=0 and (round(x)=0);
7) Имеется условный оператор:
Можно ли заменить его следующими операторами:
а) if d=10 б) if not (d=10)
writeln (‘ура! ’) writeln (‘ура! ’)
writeln (‘плохо. ’); writeln (‘плохо. ’);
в) if not (d=10) г) if not (d < >10)
writeln (‘плохо. ’) writeln (‘плохо. ’)
writeln (‘ура! ’); writeln (‘ура! ’);
8) Какими будут значения переменных j, k после выполнения условного оператора:
если исходные значения переменных равны:
Примечание. В результате выполнения оператора dec (k, 2) значение переменной k уменьшается на 2.
Источник: lektsia.com
Напишите программу, в которой вводятся два числа а и b. Затем первое число уменьшается в 2 раза, а второе увеличивается на 30, Выведите измененные
Как быстро выучить стихотворение наизусть? Запоминание стихов является стандартным заданием во многих школах.
Как научится читать по диагонали? Скорость чтения зависит от скорости восприятия каждого отдельного слова в тексте.
Как быстро и эффективно исправить почерк? Люди часто предполагают, что каллиграфия и почерк являются синонимами, но это не так.
Как научится говорить грамотно и правильно? Общение на хорошем, уверенном и естественном русском языке является достижимой целью.
- Обратная связь
- Правила сайта
Источник: www.soloby.ru