Ветвление

advertisement
Урок №7
Тема урока: «Ветвление. Условный оператор If».
Цель урока: познакомить учащихся с условным оператором If.
Задачи урока:
1) познакомить учащихся с алгоритмической конструкцией «ветвление», составным
оператором, понятием «условие»;
2) научить составлять условия, определять их результат, использовать команду If при
написании программ;
3) продолжить работу по развитию алгоритмического мышления учащихся,
аккуратности при работе в тетради;
4) продолжить работу по формированию навыков программирования.
Дополнительные материалы: презентация.
Ход урока
I. Изучение нового материала (презентация Ветвление.ppt, слайды 1-22, 28-32).
Собирался старый казак Илья Муромец
Гуляти во чисто поле,
Во чисто поле показа́ковать.
Наезжает он три дороженьки,
Три дороженьки-перекресточки, На камешке подпись подписана:
Первая дороженька направо,
Другая дороженька налево,
Третья дороженька прямо-на́прямо.
«Мне направо идти - богату быть,
Мне налево идти - женату быть,
Мне напрямо идти - убиту быть...»
Программы, которые мы составляли до сих пор, можно сравнить с автомобилем,
который может ехать только прямо. Далеко на таком автомобиле не уедешь. Надо уметь
поворачивать. Для таких «поворотов» используются операторы ветвления.
Ветвление - организация действий, при которой осуществляется выполнение той
или иной последовательности команд в зависимости от результата проверки условий.
Существует два оператора ветвления - условный оператор If и оператор выбора
Case. Сегодня на уроке мы познакомимся оператором If.
Условный оператор If позволяет выполнить одну из двух последовательностей
команд в зависимости от некоторого условия. В Паскале имеется 2 формы условного
оператора: полная и сокращенная.
Блок-схема условного оператора:
Полная
Сокращенная
Да
Оператор 1
Условие
Нет
Да
Оператор 2
Условие
Нет
Оператор 1
Формат записи условного оператора:
If «условие» then «оператор1» else «оператор2»;
Здесь «условие» – некоторое утверждение, относительно которого можно сказать:
истинно оно или ложно. При выполнении условного оператора компьютер проверяет
1
«условие». Если оно верно (True), то выполняется «оператор1», после чего выполнение
условного оператора завершается. Если условие не верно (False), то компьютер выполняет
«оператор2». Обратите внимание, что перед Else «;» не ставится!
Довольно часто в случае ложности условия не нужно производить никаких
действий. В таких случаях строчку Else с оператором можно просто опускать. Тогда
получится укороченный вариант условного оператора. Если слово Else отсутствует, то
выполняется оператор, следующий сразу за оператором If.
Давайте вспомним, что называется оператором и какие они бывают.
Оператор - конструкция языка программирования, задающая полное описание
действия. Различают простые, структурированные и составные операторы.
К простым операторам относится оператор присваивания. Если после проверки
условия в операторе If необходимо выполнить несколько команд (например, команд
присваивания), то используется составной оператор.
Составной оператор - группа операторов, отделенных друг от друга точкой с
запятой, ограниченная операторными скобками Begin и End.
Рассмотрим подробнее условия.
Условие - это некоторое утверждение, относительно которого можно сказать:
истинно оно или ложно.
Существуют простые и составные условия. Простые условия составлены с помощью
операций отношения: x>100, y mod 2<>0, abs(z)<=10.
Составные условия построены из выражений отношения (>, <, >=, <=, =, <>),
логических операций and, or, xor, not и круглых скобок: (a<-5) or (a>10), (x>0) and (x mod
10=0).
Результат составного условия зависит от результатов простых условий, входящих в
его состав, и логических операций. Все комбинации аргументов и результатов логических
операций расписаны в таблице. Значения логических величин обозначены логическими
константами False (ложно), и True (истинно).
P
Q
Not P
P And Q
P Or Q
P Xor Q
True
True
False
True
True
False
True
False
False
False
True
True
False
True
True
False
True
True
False
False
True
False
False
False
P и Q в свою очередь тоже могут быть составными условиями.
Приоритет логических операций:
1. not
2. and,
3. or, xor.
Вычислите результат логических выражений:
а) not (abs(112-300)<0)=not False=True
б) (sqrt(25)<10) and (100-21>=79)=True and True=True
в) (not (10 mod 3=3)) or (12-10=3)=not False or False=True or False=True
г) (12 mod 4=0) and (13 div 8=5)=False
д) (37<>sqr(5)) and (17-3>12)=True
е) (sqr(16)<=100) or (not (2 div 4=0))=False
Выполним следующее задание: по блок-схеме алгоритма запишите фрагмент
программы.
2
…
readln(x,y);
If x<0 then
If y>x then
begin
y:=y-x;
x:=sqr(y);
end
else y:=y+x;
writeln(x,y);
…
Определите, чему равны значения переменных y и s при разных значениях
переменных x и y.
а) x:=10; y:=7;
if x<y then x:=2 else y:=sqr(x);
s:=x+y;
б) x:=7; y:=7;
if x<y then x:=2 else y:=sqr(x);
s:=x+y;
в) x:=3; y:=7;
if x<y then x:=2 else y:=sqr(x);
s:=x+y;
Составим программу, определяющую наибольшее из двух заданных чисел. Для этого
в условном операторе надо воспользоваться условием, при истинности которого можно
будет утверждать, что одно число точно больше другого. Это условие a > b. Если оно
истинно, то максимальным будет число a, и его надо будет вывести на экран. Если это
условие ложно, то либо максимальным будет число b, либо a и b равны между собой. В
любом случае печатаем значение переменной b.
program Bolshee_iz_dvuh;
uses crt;
var a, b : integer;
begin
clrscr;
write (’Введите два числа: ’);
readln (a, b);
if a > b
3
then writeln (’Max: ’, a) else writeln (’Max: ’, b);
readln;
end.
Оператор, записанный в условном предложении после then или else, тоже может
быть условным оператором. Так получаются вложенные условные операторы.
Например:
program Bolshee_iz_treh;
uses crt;
var a, b, c : integer;
begin
clrscr;
write (’Введите три числа через пробел: ’);
readln (a, b, c);
write (’Максимальное число – ’);
if a > b
then if a > c
{ Случай, когда a > b }
then writeln (a)
else writeln (c)
else if b > c
{ Случай, когда a <= b }
then writeln (b)
else writeln (c);
readln;
end.
В этом примере оператор writeln (a) выполнится только в том случае, если а будет
больше b, и a будет больше c. А другие когда?
II. Домашнее задание.
Занятие №4 (кроме пункта «Операции сдвига»), занятие №5, №1,2,3,6,10 [1].
Урок №8
Тема урока: «Решение задач с использованием оператора If».
Цель урока: закрепить навыки использования оператора If при решении задач.
Задачи урока:
1) повторить понятия «ветвление», «составной оператор», «условие»;
2) закрепить навыки использования оператора If при написании программ;
3) продолжить работу по развитию алгоритмического мышления учащихся,
формированию навыков работы за компьютером;
4) продолжить работу по формированию навыков программирования.
Ход урока
I. Повторение. Проверка домашнего задания.
Ответьте на следующие вопросы:
 Какая алгоритмическая конструкция называется ветвлением?
 Какие виды условных операторов вы знаете?
 В каких случаях в программе используется оператор If? Как он оформляется? Как он
работает?
 Какой оператор называется составным? Когда он используется?
 Что называется условием? Какие условия различают?
Проверим домашнее задание:
№1. Первым и третьим оператором нельзя, вторым и четвертым – можно.
№2. If a mod 2 <> 0 then c:=a+b else c:=a*b;
№3. If x>3 then y:=sqr(x)+5 else y:=x-8;
№6.
4
s:=0;
If a>0 then s:=s+a;
If b>0 then s:=s+b;
If c>0 then s:=s+c;
№10.
Program Chisla;
uses crt;
var a,b: real;
begin
clrscr;
writeln (‘Введите два числа’);
readln(a,b);
if abs(a)>b then a:=a/5;
writeln(‘a=’, a:10:2);
readln;
end.
II. Закрепление нового материала. Решение задач.
№1. Найти действительные корни квадратного уравнения ax 2  bx  c  0 или
вывести сообщение об их отсутствии.
Program Korni;
uses crt;
var a,b,c,d,x1,x1:real;
begin
clrscr;
writeln (‘Введите коэффициенты квадратного уравнения’);
write(‘A=’); readln(a);
write(‘B=’); readln(b);
write(‘C=’); readln(c);
d:=sqr(b)-4*a*c;
if d<0 then writeln(‘Уравнение не имеет действительных
корней’)
else
begin
if d=0 then
begin
x1:=-b/(2*a);
writeln(‘X=’,x1:6:2);
end
else
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln(‘X1=’,x1:6:2,‘ X2=’,x2:6:2);
end;
end;
readln;
№2. Для функций, заданных графически, определить значение y при заданном
значении x:
5
y
1
-1
0
x
Program Func;
uses crt;
var x,y:real;
begin
clrscr;
write('Введите x='); readln(x);
if x<-1 then y:=0
else
if (x>=-1)and(x<=0) then y:=x+1 else y:=1;
writeln('Значение y=',y:7:2);
readln;
end.
№3. Составить программу, проверяющую, выполняется ли условие существования
треугольника. Если треугольник существует, то найти его периметр и площадь.
Program Treug1;
uses crt;
var a,b,c,p,s:real;
begin
clrscr;
writeln('Введите длины сторон треугольника (a,b,c)');
readln(a);
readln(b);
readln(c);
if (a+b>c) and (a+c>b) and (c+b>a) then
begin
p:=a+b+c;
s:=sqrt(p/2*(p/2-a)*(p/2-b)*(p/2-c));
writeln('Периметр - ',p:10:2);
writeln('Площадь - ',s:10:2);
end
else writeln('Треугольник не существует');
readln;
end.
II. Домашнее задание.
Повторить теоретический материал занятия №4 (кроме пункта «Операции сдвига»),
занятия №5, №4,18,19,23 [1].
Урок №9
Тема урока: «Оператор выбора Case».
Цель урока: познакомить учащихся с оператором выбора Case.
Задачи урока:
1) познакомить учащихся с оператором выбора Case;
6
2) научить использовать команду Case при написании программ;
3) продолжить работу по развитию алгоритмического мышления учащихся,
аккуратности при работе в тетради;
4) продолжить работу по формированию навыков программирования.
Дополнительные материалы: презентация.
Ход урока
I. Проверка домашнего задания (на компьютере).
№4.
If (x>0) and(y>0) then writeln (‘1 четверть’);
If (x<0) and(y>0) then writeln (‘2 четверть’);
If (x<0) and(y<0) then writeln (‘3 четверть’);
If (x>0) and(y<0) then writeln (‘4 четверть’);
№18.
Program Obl1;
uses crt;
var x,y:real;
begin
clrscr;
write('Введите координаты точки: '); readln(x,y);
if (y<sqr(x)-1)and(y>0)and(y<5)
then writeln('Попала') else writeln('Не попала');
readln;
end.
№19.
Program Obl2;
uses crt;
var x,y:real;
begin
clrscr;
write('Введите координаты точки: '); readln(x,y);
if (sqr(x)+sqr(y)<4)and
(((x<0)and(y<0))or((x<1)and(y>0)and(y>-x)))
then writeln('Принадлежит') else writeln('Не принадлежит');
readln;
end.
№23.
Program Treug2;
uses crt;
var a,b,c:real;
begin
clrscr;
writeln('Введите длины сторон треугольника (a,b,c)');
readln(a);
readln(b);
readln(c);
if (a>0)and(b>0)and(c>0)and(a+b>c)and(a+c>b)and(c+b>a) then
begin
if (a=b)and(b=c) then writeln(‘Равносторонний’);
if (a=b)or(b=c)or(a=b) then writeln(‘Равнобедренный’);
if (sqr(a)=sqr(b)+sqr(c))or(sqr(b)=sqr(a)+sqr(c))or
(sqr(c)=sqr(a)+sqr(b)) then writeln(‘Прямоугольный’);
end
7
else writeln('Треугольник не существует');
readln;
end.
II. Изучение нового материала (презентация Ветвление.ppt, слайды 4, 23-27, 33-35).
Попробуйте самостоятельно решить такое задание: Дан номер месяца m. Вывести на
экран название этого месяца.
Если бы вы начали решать это задание, то столкнулись бы с необходимостью много
раз использовать условный оператор:
if m = 1 then write (’Январь’);
if m = 2 then write (’Февраль’);
и так далее.
В таких случаях значительно удобней использовать оператор выбора Case:
Условие 1
Да
Опера торы 1
Полная форма записи
Нет
Условие 2
Нет
Да
Опера торы 2
…
Условие n
Да
Опера торы n
Нет
Опера торы n+1
Сокращенная форма
записи
Case <переменная> of
<значения 1>: <операторы 1>;
<значения 2>: <операторы 2>;
...
<значения n>: <операторы n>;
else <операторы n+1>;
end;
В качестве переменной может стоять выражение. Сначала вычисляется значение
этого выражения, затем это значение находят из списка значений и выполняются
соответствующие операторы. Если значения нет ни в одном списке, то выполняются
операторы, стоящие за словом else. Если слово else отсутствует, то выполняется оператор,
находящийся после слова end.
Значение переменной или выражения, записанного после слова Case, должно
принадлежать порядковому типу. Напомню, что к порядковым типам данным относятся:
 Целый – integer;
 Символьный – char;
 Логический – boolean;
 Перечисляемый;
 Диапазон.
Тип значений должен совпадать с типом выражения.
В списке возможных значений можно указать одно число, несколько чисел через
запятую или целые промежутки.
Остаётся добавить, что если в оператора Case после двоеточия нужно указать более
одного оператора, то надо использовать составной оператор.
Рассмотрим пример использования оператора выбора Case. Решим следующую
задачу. В старояпонском календаре был принят двенадцатилетний цикл. Годы внутри
цикла носили названия животных. Написать программу, которая по номеру года
8
определяет его название, если известно, что 1996 год был годом крысы – началом
очередного цикла.
Цикл двенадцатилетний – название года соответствует остатку от деления номера
этого года на 12. Остаток от деления 1996 на 12 равен 4.
Program Goroskop;
uses crt;
var g:integer;
begin
clrscr;
writeln(‘Введите год’);
readln(g);
case g mod 12 of
0: writeln(‘Год Обезьяны’);
1: writeln(‘Год Петуха’);
2: writeln(‘Год Собаки’);
3: writeln(‘Год Свиньи’);
4: writeln(‘Год Крысы’);
5: writeln(‘Год Коровы’);
6: writeln(‘Год Тигра’);
7: writeln(‘Год Зайца’);
8: writeln(‘Год Дракона’);
9: writeln(‘Год Змеи’);
10: writeln(‘Год Лошади’);
11: writeln(‘Год Овцы’);
end;
end.
III. Закрепление нового материала. Решение задач.
№1. Составить программу, которая по номеру месяца выведет время года:
program Vremena_goda;
uses crt;
var month : integer;
begin
clrscr;
write (’Введите номер месяца: ’);
readln (month);
case month of
3..5: write (’Весна’);
6..8: write (’Лето’);
9..11: write (’Осень’);
1,2,12: write (’Зима’);
else write (’Задан неверный номер месяца’)
end;
readln;
end.
№2. Составить программу, которая по заданным году g и номеру месяца m
определяет количество дней в этом месяце.
Program Month;
uses crt;
var g,m: integer;
begin
clrscr;
writeln('Введите год'); readln(g);
writeln('Введите месяц'); readln(m);
9
case m of
1,3,5,7,8,10,12: writeln('31 день');
4,6,9,11: writeln('30 дней');
2: if (g mod 4<>0) or (g mod 400<>0) and (g mod 100=0)
then writeln('28 дней') else writeln('29 дней');
else writeln('Такого месяца нет');
end;
readln;
end.
IV. Домашнее задание.
Занятие №25 (пункта «Оператор выбора Case») [1], решить следующие задачи:
№1. Составить программу, которая в зависимости от порядкового номера дня недели
(1, 2, …, 7) выводит на экран его название (понедельник, вторник, …, воскресенье).
№2. Мастям игральных карт условно присвоены следующие порядковые номера:
«пики» - 1, «трефы» - 2, «бубны» - 3, «червы» - 4. Достоинству карт присвоены
следующие номера: «валету» - 11, «даме» - 12, «королю» - 13, «тузу» - 14; порядковые
номера карт остальных достоинств соответствуют их названиям: «шестерка», «девятка» и
т.п. По заданным номеру масти m (1  m  4) и номеру достоинства карты k (6  k  14)
определить полное название (масть и достоинство) соответствующей карты в виде: «дама
пик», «шестерка бубен» и т.п.
№3. Составить программу, позволяющую по последней цифре данного числа
определить последнюю цифру куба этого числа.
Урок №10
Тема урока: «Решение задач с использованием оператора Case».
Цель урока: закрепить навыки использования оператора Case при решении задач.
Задачи урока:
1) закрепить навыки использования оператора Case при написании программ;
2) подготовиться к контрольной работе по теме «Операторы ветвления в Турбо
Паскале»;
3) продолжить работу по развитию алгоритмического мышления учащихся,
формированию навыков работы за компьютером;
4) продолжить работу по формированию навыков программирования.
Дополнительные материалы: карточки для самостоятельной работы.
Ход урока
I. Повторение. Проверка домашнего задания.
Ответьте на следующие вопросы:
 Какой оператор называется составным? Когда он используется?
 Что называется условием? Какие условия различают?
 Какая алгоритмическая конструкция называется ветвлением?
 Какие виды условных операторов вы знаете?
 В каких случаях в программе используется оператор If? Как он оформляется? Как он
работает?
 В каких случаях в программе используется оператор Case? Как он оформляется? Как
он работает?
Проверим домашнее задание:
№1.
Program Week;
uses crt;
var w: integer;
begin
10
clrscr;
writeln('Введите номер дня недели'); readln(w);
case w of
1: writeln('Понедельник');
2: writeln('Вторник');
3: writeln('Среда');
4: writeln('Четверг');
5: writeln('Пятница');
6: writeln('Суббота');
7: writeln('Воскресенье');
else writeln('Такого дня недели нет');
end;
readln;
end.
№2.
Program Karta;
uses crt;
var m,k: integer;
begin
clrscr;
writeln('Введите номер масти карты'); readln(m);
writeln('Введите номер достоинства карты'); readln(k);
if (m>=1)and(m<=4)and(k>=6)and(k<=14) then
begin
case k of
6: write('Шестерка ');
7: write('Семерка ');
8: write('Восьмерка ');
9: write('Девятка ');
10: write('Десятка ');
11: write('Валет ');
12: write('Дама ');
13: write('Король ');
14: write('Туз ');
end;
case m of
1: writeln('пик');
2: writeln('треф');
3: writeln('бубен');
4: writeln('червей');
end;
end
else writeln('Такой карты не существует');
readln;
end.
№3.
Program Kub;
uses crt;
var n: integer;
begin
clrscr;
writeln('Введите число'); readln(n);
case n mod 10 of
11
1: writeln('Последняя цифра куба - 1');
2: writeln('Последняя цифра куба - 8');
3: writeln('Последняя цифра куба - 7');
7: writeln('Последняя цифра куба - 3');
8: writeln('Последняя цифра куба - 2');
4,5,6,9,0: writeln('Последняя цифра куба - ', n mod 10);
end;
readln;
end.
II. Самостоятельная работа по карточке (Карточка1.doc).
III. Решение задач.
№8. Дано натуральное число N. Если оно делится на 4, вывести на экран ответ N=4k
(где k – соответствующее частное); если остаток от деления на 4 равен 1, N=4k+1; если
остаток от деления на 4 равен 2, N=4k+2; если остаток от деления на 4 равен 3, N=4k+3.
Program Ostatok;
uses crt;
var n,k: longint;
begin
clrscr;
writeln('Введите N'); readln(n);
k:=n div 4;
case n mod 4 of
0: writeln('N=4*',k);
1: writeln('N=4*',k,'+1');
2: writeln('N=4*',k,'+2');
3: writeln('N=4*',k,'+3');
end;
readln;
end.
№9. Написать программу, которая бы по введенному номеру единицы измерения (1
– дециметр, 2 – километр, 3 – метр, 4 – миллиметр, 5 – сантиметр) и длине отрезка L
выдавала бы соответствующее значение длины отрезка в метрах.
Program Otrezok;
uses crt;
var n:byte; l:real;
begin
clrscr;
write('Введите номер единицы измерения: '); readln(n);
write('Введите длину отрезка: '); readln(l);
case n of
1: writeln(l/10:7:2,' м');
2: writeln(l*1000:7:2,' м');
3: writeln(l:7:2,' м');
4: writeln(l/1000:7:2,' м');
5: writeln(l/100:7:2,' м');
else writeln('Ошибка');
end;
readln;
end.
IV. Домашнее задание.
Подготовиться к контрольной работе, повторив теоретический материал, решить
следующие задачи (индивидуальные задания):
12
1. «Треугольник»
Составить программу, которая по координатам трех точек определит, могут ли эти
точки быть вершинами треугольника, и если да, то определить вид этого треугольника
(остроугольный, прямоугольный или тупоугольный) и найти его площадь и периметр.
2. «Стрельбы»
Траектория снаряда, вылетающего из орудия под углом  с начальной скоростью v0,
задается уравнениями:
x  v0t cos  ,
gt 2
,
2
где g=9,8 м/с2 – ускорение свободного падения, t – время.
Даны значения  и v0. Определить, поразит ли снаряд цель высотой p,
расположенную в вертикальной плоскости ствола орудия на расстоянии r на высоте h.
3. «Калькулятор»
Даны два действительных числа и арифметическая операция. Составить программу,
определяющую результат выполнения данной операции над введенными числами.
4. «Элементы треугольника»
Пусть элементами равностороннего треугольника являются: 1 - сторона a, 2 площадь S, 3 - высота h, 4 - радиус вписанной окружности r, 5 - радиус описанной
окружности R. Составить программу, которая по заданному номеру и значению
соответствующего элемента вычисляла бы значение всех остальных элементов
треугольника.
5. «Число»
Составить программу, которая читает натуральное число N в десятичном
представлении (N10000), а на выходе выдает это же число в десятичном представлении и
на естественном языке. Например, 7 - «Семь», 204 - «Двести четыре», 52 - «Пятьдесят
два».
y  v0t sin  
Урок №11
Тема урока: «Обобщающий урок по модулю «Ветвления». Контрольная работа №3».
Цель урока: итоговый контроль усвоения изученного материала.
Задачи урока:
1) проверить знания учащихся по модулю «Ветвление»;
2) проверить навыки решения задач с использованием операторов If и Case;
3) продолжить работу по развитию алгоритмического мышления учащихся,
формированию навыков работы за компьютером;
4) продолжить работу по формированию навыков программирования.
Дополнительные материалы: карточки с тестом.
Ход урока
I. Тест по теме «Операторы ветвления в Турбо Паскале» (Карточка2.doc).
Ответы на тест:
1) if
6) false
2) неверно
7) 1В2Б3А
3) 49
8) (x>0) and (sqr(x)+sqr(y)>4) and (sqr(x)+sqr(y)<16)
4) 196
9) составным оператором
5) 6,7,10,11
10) верно
II. Защита индивидуальных работ (проверка домашнего задания).
III. Домашнее задание.
Повторить материалы модуля.
13
Download