Сипаренко О. И. Программирование на

Скачать презентацию Сипаренко О. И. Программирование на Скачать презентацию Сипаренко О. И. Программирование на

2_Условный оператор 2 часть.ppt

  • Количество слайдов: 54

>   Сипаренко О. И. Программирование на   Паскале   Часть Сипаренко О. И. Программирование на Паскале Часть 2

>Условный оператор Урок 1 Условный оператор Урок 1

>Линейный алгоритм Все рассмотренные ранее задачи имеют линейный алгоритм решения.  Линейный алгоритм – Линейный алгоритм Все рассмотренные ранее задачи имеют линейный алгоритм решения. Линейный алгоритм – алгоритм, в котором все действия (операторы) выполняются в том порядке, в котором они записаны (в программе). Одним из способов записи алгоритмов является графический – в виде блок-схем.

>Блок-схема линейного алгоритма      действие 1    действие Блок-схема линейного алгоритма действие 1 действие 2 . . . действие n

>Блок-схемы (основные блоки)  Наименование Обозначение  Содержание Процесс     Блок-схемы (основные блоки) Наименование Обозначение Содержание Процесс Обработка информации (присваивание, вычисление) Принятие решения Логический блок проверки истинности или ложности некоторого решения Ввод/вывод данных Ввод или вывод информации Начало, конец Начало или конец программы Цикл (подготовка) Организация циклического процесса

>Пример Задача Даны стороны прямоугольника. Найти его периметр.     начало Пример Задача Даны стороны прямоугольника. Найти его периметр. начало ввод a, b p: =(a+b)*2 вывод p конец

>Разветвляющийся алгоритм Полное ветвление   да    нет   Разветвляющийся алгоритм Полное ветвление да нет условие действие 1 действие 2

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

>Условный оператор позволяет реализовать ветвление.  Полное ветвление If <условие> then <оператор 1> else Условный оператор позволяет реализовать ветвление. Полное ветвление If <условие> then <оператор 1> else <оператор 2>; Неполное ветвление If <условие> then <оператор>; На месте оператора может стоять любой из операторов, в том числе и условный, но оператор должен быть только один.

>Примеры Полное ветвление Неполное ветвление  readln (x);  x: =0; if x>0 then Примеры Полное ветвление Неполное ветвление readln (x); x: =0; if x>0 then y: =y+x if x>0 then writeln (‘x=‘, else y: =y-x; x);

>Решение задач Задача 1. Напишите программу, которая будет считывать значение целой переменной k и Решение задач Задача 1. Напишите программу, которая будет считывать значение целой переменной k и определить, является k четным числом или нечетным. var k: integer; begin readln(k); if k mod 2 = 0 then writeln (‘четное’) else writeln (‘нечетное’); end.

>Решение задач Задача 2. Напишите программу, которая будет считывать значение переменных a и b Решение задач Задача 2. Напишите программу, которая будет считывать значение переменных a и b и распечатывать сначала меньшее из двух значений, а потом большее. var a, b: integer; begin readln(a, b); if a

>Составной оператор В условном операторе как после then, так и после else может стоять Составной оператор В условном операторе как после then, так и после else может стоять только один оператор, поэтому если необходимо использовать не один оператор, а несколько, то используется составной оператор. Пример: if x<0 then begin i: =i+1; x: =x-1; end else i: =i-1; Слова begin и end называются операторными скобками.

>Решение задач Задача 3. Напишите программу, которая из двух введенных целых чисел будет удваивать Решение задач Задача 3. Напишите программу, которая из двух введенных целых чисел будет удваивать меньшее из чисел и уменьшать на 2 значение большего из чисел. var a, b: integer; begin readln (a, b); if a

>Если после then в качестве оператора стоит условный оператор, то возможна такая конструкция: if Если после then в качестве оператора стоит условный оператор, то возможна такая конструкция: if <условие 1> then if <условие 2> then <оператор 1> else <оператор 2>; К какому if относится else? else всегда относится к ближайшему if В данной конструкции первый оператор неполный (без else), а второй полный.

>Если требуется, чтобы первый оператор был полным, а второй – неполным:   Если требуется, чтобы первый оператор был полным, а второй – неполным: If <условие 1> then begin if <условие 2> then <оператор 1> end else <оператор 2>; If <условие 1> then if <условие 2> then <оператор 1> else <оператор 2>;

>Правила применения 1.  Перед else знак ; не ставится никогда!  2. Рассмотрим Правила применения 1. Перед else знак ; не ставится никогда! 2. Рассмотрим фрагмент программы: if <условие> then ; begin s 1; s 2; s 3; end; Составной оператор будет выполняться всегда, так как условный оператор пустой.

>Правила применения 3. Пусть n условий исчерпывают все возможные случаи, например, x<2, x=2, x>2. Правила применения 3. Пусть n условий исчерпывают все возможные случаи, например, x<2, x=2, x>2. Тогда вызов операторов, соответствующих каждому из случаев, можно запрограммировать двумя способами: if x<2 then s 1; if x<2 then s 1 if x=2 then s 2; else if x=2 then s 2 if x>2 then s 3; else s 3; Первый способ нагляднее, но во втором не делаются лишние проверки. Почему во втором случае не проверяется условие x>2?

>Решение задач Задача 4. Напишите программу, которая будет считывать значение нецелой переменной x и Решение задач Задача 4. Напишите программу, которая будет считывать значение нецелой переменной x и будет печатать значение следующей функции от x: readln(x); if x<0 then sign: =-1 else if x=0 then sign: =0 else sign: =1; writeln (x);

>Решение задач Задача 5. Напишите программу для решения уравнения ax=b относительно x. Учтите, что Решение задач Задача 5. Напишите программу для решения уравнения ax=b относительно x. Учтите, что a может принимать любые значения, в том числе и 0. readln(a, b); if a<>0 then writeln (b/a: 0: 2); else if b=0 then writeln (‘x-любое’) else writeln (‘корней нет’);

>Решение задач Тесты к задаче 5:   № a  b  x Решение задач Тесты к задаче 5: № a b x 1 2 4 2 2 0 3 нет решения 3 3 0 0 4 0 0 x - любое 5 -2 1 -0. 5 6 2 -3 -1. 5

>Решение задач Задача 6. Напишите программу, которая будет считывать значение переменных a, b и Решение задач Задача 6. Напишите программу, которая будет считывать значение переменных a, b и c и распечатывать их в порядке возрастания. Решите задачу двумя способами: не используя операторы присваивания; используя операторы присваивания. В первом случае нужно в зависимости от значений переменных печатать их в соответствующем порядке, а во втором – значения нужно переместить так, чтобы в переменной a оказалось минимальное значение, в c – максимальное, а в b – среднее. Оператор печати в этом случае должен быть один: writeln (a, b, c).

>Решение задач Тесты к задаче 6:   № a  b  c Решение задач Тесты к задаче 6: № a b c 1 1 2 2 2 1 3 2 3 2 1 3 4 2 3 1 5 3 1 2 6 3 2 1

>Решение задач Задача 6. Первый способ:   if a<b then   if Решение задач Задача 6. Первый способ: if a

>Решение задач Задача 6. Второй способ:   if a>b then   begin Решение задач Задача 6. Второй способ: if a>b then begin d: =a; a: =b; b: =d; end; if b>c then begin d: =c; c: =b; b: =d; end; If a>b then begin d: =a; a: =b; b: =d; end;

>Логический тип данных Урок 2 Логический тип данных Урок 2

>Логический тип данных Множество значений логического тип boolean содержит всего два элемента – false Логический тип данных Множество значений логического тип boolean содержит всего два элемента – false (ложь) и true (истина). Логические значения получаются также в результате выполнения операций сравнения: =, <>, <, >, <=, >=. Условия – частный случай выражения со значениями логического типа. Подобные выражения можно присваивать переменным типа boolean и выводить на экран.

>Логический тип данных Кроме операций сравнения В Паскале имеются   4 логические операции: Логический тип данных Кроме операций сравнения В Паскале имеются 4 логические операции: отрицание – NOT, логическое умножение – AND, логическое сложение – OR, исключающее «или» - XOR. Приоритеты логических операций: 1) NOT 2) AND 3) OR 4)XOR Логический результат дает стандартная функция odd(x), для целого x. odd(x)=true, если x нечетно; odd(x)=false, если x четно.

>Операция НЕ (инверсия)      29  Если высказывание A истинно, Операция НЕ (инверсия) 29 Если высказывание A истинно, то «не А» ложно, и наоборот. также: , А не А not A (Паскаль), ! A (Си) 0 1 таблица истинности 1 0 операции НЕ Таблица истинности логического выражения Х – это таблица, где в левой части записываются все возможные комбинации значений исходных данных, а в правой – значение выражения Х для каждой комбинации.

>Операция И (логическое умножение, конъюнкция) Высказывание «A и B» истинно тогда и только тогда, Операция И (логическое умножение, конъюнкция) Высказывание «A и B» истинно тогда и только тогда, когда А и B истинны одновременно. также: A·B, A B, A and B (Паскаль), A B Аи. B A && B (Си) 0 0 1 0 2 1 0 0 3 1 1 1 A B конъюнкция – от лат. conjunctio — соединение

>Операция ИЛИ (логическое сложение, дизъюнкция)   31  Высказывание «A или B» истинно Операция ИЛИ (логическое сложение, дизъюнкция) 31 Высказывание «A или B» истинно тогда, когда истинно А или B, или оба вместе. также: A+B, A B, A or B (Паскаль), A B А или B A || B (Си) 0 0 0 1 1 0 1 1 1 дизъюнкция – от лат. disjunctio — разъединение

>Операция «исключающее ИЛИ»      32  Высказывание «A  B» Операция «исключающее ИЛИ» 32 Высказывание «A B» истинно тогда, когда истинно А или B, но не оба одновременно. также: A xor B (Паскаль), A B А B A ^ B (Си) 0 0 0 1 арифметическое сложение, 1+1=2 1 0 1 остаток 1 1 0 сложение по модулю 2: А B = (A + B) mod 2

>Логические выражения В логических выражениях могут встречаться как арифметические операции, так и логические. Порядок Логические выражения В логических выражениях могут встречаться как арифметические операции, так и логические. Порядок выполнения операций определяется их приоритетом: 1. not; 2. *, /, div, mod, and; 3. +, -, or, xor; 4. =, <>, <, >, <=, >=. Операции с одинаковым приоритетом выполняются по порядку слева направо. Для изменения приоритета операций применяют круглые скобки.

>Логические выражения Нередко при составлении программ со сложными логическими условиями нужно строить их отрицания. Логические выражения Нередко при составлении программ со сложными логическими условиями нужно строить их отрицания. Полезно воспользоваться таблицей: Условие Противоположное условие a= b a>b a <= b a=b a <> b not a = a; not (a and b) = not a or not b; not (a or b) = not a and not b

>Упражнения Определить значение следующих выражений при x=0 y=-1 z=1   1. (x<0) or Упражнения Определить значение следующих выражений при x=0 y=-1 z=1 1. (x<0) or (y<0) 1. true 2. (x=0) and (y<>0) 2. true 3. (y<>1) and (z<>1) 3. false 4. (y<>1) and (z<>1) or (x<>1) 4. true 5. (y=1) or (x<>1) and (z<>1) 5. false

>Упражнения Запишите на Паскале логические выражения, истинные, если: 1. x лежит на отрезке от Упражнения Запишите на Паскале логические выражения, истинные, если: 1. x лежит на отрезке от a до b 2. числа a и b имеют разные знаки 3. числа a и b равны нулю 4. только одно из чисел a или b равно нулю 5. хотя бы одно из чисел a или b равно нулю. 1. (x>=a) and (x<=b) 2. (a*b)<0 3. (a=0) and (b=0) 4. (a=0) and (b<>0) or (b=0) and (a<>0) 5. (a=0) or (b=0)

> Вычислить значение логического выражения при  следующих значениях логических величин A, B и Вычислить значение логического выражения при следующих значениях логических величин A, B и C: А = истина, В = ложь, С = ложь: 1) А или В, 2) А и В, 3) В или С истина ложь Вычислить значение логического выражения при следующих значениях логических величин A, B и C: А = истина, В = ложь, С = ложь: 1) А или В и не С истина 2) не А и не В ложь 3) не (А и С) или В истина 4) А и не В или С истина 5) А и (не В или С) истина 6) А и (не (В или С)) истина

>  Записать условие, которое является  истинным, когда 1. Каждое из чисел А Записать условие, которое является истинным, когда 1. Каждое из чисел А и В больше 100; (А>100) and (B>100) 2. Только одно из чисел А и В четное (А mod 2=0) and (B mod 2 <>0) or (А mod 2=<>0) and (B mod 2 =0) 3. Хотя бы одно из чисел А и В положительно (А>0) or (B >0) 4. Каждое из чисел А, В , С кратно трем (А mod 3=0) and (B mod 3=0) and (C mod 3 =0) 5. Только одно из чисел А, В, С меньше 50 (А <50) and (B >50) and (C >50) or (А >50) and (B <50) and (C >50) or (А >50) and (B >50) and (C <50) 6. Хотя бы одно из чисел А, В, С отрицательно (А <0) or (B <0) or (C <0)

>Правила применения 4. Рассмотрим условный оператор:  if a=c then b: =true  Правила применения 4. Рассмотрим условный оператор: if a=c then b: =true else b: =false Такая запись – избыточна. Надо применять выражение: b: =a=c Аналогично, вместо if b=true then <оператор> Нужно писать if b then <оператор>

>  Упражнения       Взаимное расположение точки и Упражнения Взаимное расположение точки и прямой y > f(x) Если уравнение прямой y=f(x), то в зависимости от координат точки (x 0, y 0): 1. точка лежит на прямой, y < f(x) если y 0=f(x 0); 2. точка лежит в верхней y = f(x) полуплоскости, если y 0>f(x 0) 3. точка лежит в нижней полуплоскости, если y 0

>Решение задач  Задача 1. Напишите программу, которая позволит  определять, принадлежит ли точка Решение задач Задача 1. Напишите программу, которая позволит определять, принадлежит ли точка с координатами (x, y) заштрихованной области, включая ее границы. y readln (x, y); x if (x>=-3) and (y>=0) and (y<=-x) then writeln (‘принадлежит’) y=−x else writeln (‘не принадлежит’); x=− 3

>Решение задач Задача 2. По введенному номеру года – положительному целому числу, не превосходящему Решение задач Задача 2. По введенному номеру года – положительному целому числу, не превосходящему 10000, требуется определить, является ли данный год високосным. Напомним, что високосными являются года, номера которых кратны 4, но не кратны 100, а также года, номера которых кратны 400. Выведите YES или NO в зависимости от ответа задачи. readln (a); if (a mod 400=0) or ((a mod 4=0) and (a mod 100<>0)) then writeln (‘YES’) else writeln (‘NO’);

>Решение задач Задача 3. Поле шахматной доски определяется парой натуральных чисел, каждое из которых Решение задач Задача 3. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8. По введенным координатам двух полей (k, l) и (m, n) выясните угрожает ли ферзь, расположенный на поле (k, l), полю (m, n). 8 7 6 k 5 f 1. горизонталь m=k 4 2. вертикаль n=l 3 3. диагонали abs(k-m)=abs(l-n) 2 1 2 3 4 5 6 7 8 l

>Решение задач Задача 3.  readln (k, l);   readln (m, n); Решение задач Задача 3. readln (k, l); readln (m, n); if (abs(k−m) = abs(l−n)) or (k=m) or (l=n) then writeln (‘yes’) else writeln (‘no’);

>Решение задач Задача 4. Решить в действительных числах уравнение ax 2 + bx + Решение задач Задача 4. Решить в действительных числах уравнение ax 2 + bx + c = 0. Вводятся значения a, b, c (a, b, c целые, по модулю не превосходят 100). Выдать код ситуации и значения корней: − 1 – бесконечное множество решений; 0 – нет действительных корней; 1 – уравнение вырождается в линейное, выдать x; 2 – уравнение квадратное, два различных корня, выдать x 1 и x 2; 3 – уравнение квадратное, кратный корень, выдать x.

>Решение задач Задача 4. Тесты  №  a  b  c Решение задач Задача 4. Тесты № a b c выход 1 0 0 0 − 1 2 0 0 1 0 3 0 2 4 1 x=− 2 4 1 2 3 0 5 1 2 1 3 x=− 1 6 1 4 3 2 x 1=− 1 x 2=− 3 7 0 2 0 1 x=0 8 3 5 2 2 x 1=− 0. 67 x 2=− 1

>if a=0 then  if b=0 then  if c=0 then writeln (− 1) if a=0 then if b=0 then if c=0 then writeln (− 1) else writeln (0) else writeln (‘ 1 ‘, −c/b) else {a<>0} begin d: =b*b− 4*a*c; if d<0 then writeln (0) else {d>=0} if d>0 then begin x 1: =(−b+sqrt(d))/(2*a); x 2: =(−b−sqrt(d))/(2*a); writeln (‘ 2 ‘, x 1: 0: 2, ’ ‘, x 2: 0: 2) end else writeln (‘ 3 ‘, −b/(2*a): 0: 2) end;

>Решение задач Задача 5. Задание C 1 КИМ ЕГЭ 2008 г.  Требовалось написать Решение задач Задача 5. Задание C 1 КИМ ЕГЭ 2008 г. Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы.

>Решение задач Программист торопился и написал программу неправильно.  var x, y: real; Решение задач Программист торопился и написал программу неправильно. var x, y: real; begin readln (x, y); if y<=4–x then if y>=1 then if y<=x*x then write('принадлежит') else write('не принадлежит') end.

>  Последовательно выполните следующее:   Приведите пример таких чисел x, y, при Последовательно выполните следующее: Приведите пример таких чисел x, y, при которых программа работает неправильно. if y<=4–x then if y>=1 then if y<=x*x then write('принадлежит') else write('не принадлежит') Пример: x= – 2, y=3 Любая пара (x, y), для которой выполняется: y>4–x или y<1 или (y<=4–x и y>=1 и y<=x 2 и x<=– 1)

> Последовательно выполните следующее:   Укажите, как нужно доработать программу, чтобы не было Последовательно выполните следующее: Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. Необходимо исправить две ошибки: 1. Неправильное использование условного оператора, в результате чего при невыполнении первого или второго условия программа не выдавала ничего (отсутствуют случаи else). 2. Приведенным трем ограничениям удовлетворяют также те точки плоскости, у которых (y<=4–x) и (y>=1) и (y<=x 2) и (x<= – 1). if (y<=4–x) and (y>=1) and (y<=x*x) and (x>=1) then write('принадлежит') else write('не принадлежит')

>  Домашняя работа  Задача 1. Напишите программу, которая позволит  определять, принадлежит Домашняя работа Задача 1. Напишите программу, которая позволит определять, принадлежит ли точка с координатами (x, y) заштрихованной области, включая ее границы. y readln (x, y); x if (x<=2)and(y>=0)and(x>=0)and((x*x+y*y)<=4) or (x<=0)and(y<=0)and((x*x+y*y)<=4) then writeln (‘принадлежит’) x 2+y 2= 4 x=2 else writeln (‘не принадлежит’);

>Домашняя работа Задача 3. Поле шахматной доски определяется парой натуральных чисел, каждое из которых Домашняя работа Задача 3. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8. По введенным координатам двух полей (k, l) и (m, n) выясните являются ли эти полями одного цвета. 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8

>Домашняя работа Задача 3. Поле шахматной доски определяется парой натуральных чисел, каждое из которых Домашняя работа Задача 3. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8. По введенным координатам двух полей (k, l) и (m, n) выясните являются ли эти полями одного цвета. Сумма координат клеток одного цвета обладает одной и той же четностью (для одних клеток эта сумма четная, а для клеток другого цвета − нечетная) if ((k+l) mod 2) = ((m+n) mod 2) then writeln (‘YES’) else writeln (‘NO’);