ТЕМА:
Условный оператор. Оператор выбора. Оператор безусловного перехода.
Тип урока: изучение
нового материала.
Цель урока: познакомить
обучающихся со способами организации в программах ветвления на три и более
ветвей в среде программирования Паскаль.
Задачи урока:
·
Образовательные:
способствовать формированию алгоритмических навыков
использования структур языка программирования Паскаль, раскрыть их особенности,
выяснить основные отличия.
·
Развивающие:
o
развивать у обучающихся умения сопоставлять, анализировать,
выделять главное, существенное, обобщать, формулировать выводы;
o
развивать познавательный интерес и творческие способности.
·
Воспитательные:
o
формировать коммуникативные компетенции обучающихся через работу
в группах, воспитания уважения друг к другу, умения слушать;
o
воспитание информационной культуры.
Изучив тему урока,
обучающиеся должны:
·
знать: понятия условия, выбора; формат записи полного и
неполного условного оператора; формат записи оператора безусловного перехода;
формат записи оператора выбора;
·
уметь правильно записывать простые и сложные логические условия
для решения конкретных задач;
·
составлять программы на языке Паскаль по блок-схеме алгоритмов;
·
применять изученные операторы при составлении программ для
решения задач;
·
уметь находить ошибки в составленных программах.
Средства обучения:
·
технические:
o
компьютерный класс;
o
мультимедийный проектор;
o
экран;
·
программные:
o
система программирования Турбо Паскаль 7.0;
o
презентация, созданная средствами программы Microsoft
PowerPoint;
·
раздаточные материалы:
o
карточки для работы в группах.
ХОД
УРОКА
I. Организационный
момент
Психологический
настрой. Приветствие, выявление отсутствующих, проверка готовности обучающихся
к уроку. Проверка домашнего задания осуществляется по следующим вопросам:
1. Какое
минимальное количество разделов может быть в программе в Turbo Pascal? Назовите
их. (Один — раздел операторов).
2. Назовите
основные типы данных и соответствующие им стандартные имена, которые мы
использовали на прошлом уроке. (Целочисленный тип — INTEGER, вещественный тип —
REAL, логический — BOOLEAN.)
3. Укажите,
какие операции деления возможны над данными целочисленного типа. Поясните их
результат и назовите соответствующее стандартное имя, используемое в программе.
(а. MOD; б. DIV.)
4. Укажите
типы данных, в которых нет возможности ввода данных с помощью оператора READ.
(Логический тип данных — BOOLEAN.)
5. Перечислите
операторы, которые могут использоваться для организации линейных алгоритмов.
(BEGIN, END, READ).
6. Назовите
операторы для программ с разветвляющейся конструкцией. (IF ... THEN ... ELSE.)
Проверка домашнего задания (решение
задач).
Сформировать число, представляющее собой
реверсную (обратную в порядке следования разрядов) запись заданного
трехзначного числа. Например, для числа 341 таким будет 143.
program ReverseNum;
var
n, a, b, c: word;
begin
readln(n);
a := n mod 10;
n := n div 10;
b := n mod 10;
n := n div 10;
c := n;
n := 100 * a + 10 * b + c;
writeln(n)
end.
Задача . Дано натуральное число меньше
16. Посчитать количество его единичных битов. Например, если дано число 9,
запись которого в двоичной системе счисления равна 10012 (подстрочная цифра 2
справа от числа означает, что оно записано в двоичной системе счисления), то
количество его единичных битов равно 2.
program BinaryUnits;
var
n, count: byte;
begin
readln(n);
count := 0;
count := count + n mod 2;
n := n div 2;
count := count + n mod 2;
n := n div 2;
count := count + n mod 2;
n := n div 2;
count := count + n;
writeln(count)
end.
На прошлых уроках мы
научились составлять линейные программы. Сегодня мы продолжим изучать операторы
языка программирования Паскаль.
II. Актуализация
знаний
Составим программу
для решения следующей задачи: из двух чисел А и В найти большее и вывести его
на экран.
(Обучающиеся
предлагают свои варианты и совместно с преподавателем делают вывод, что
составить линейную программу для решения данной задачи нельзя.)
Действительно, в
рассмотренных ранее программах все операторы выполнялись последовательно
один за другим в том порядке, в каком они были записаны. В данной задаче
необходимо в зависимости от условия выполнить разные действия: если А > В,
то напечатать на экране число А, а, если B > A, то – число В.
Получаем, что для решения данной задачи необходимо составить разветвляющий
алгоритм. Команды, с помощью которых записываются разветвляющиеся алгоритмы,
называются командами ветвления. Команде ветвления в Паскале соответствует
условный оператор, с которым мы сегодня познакомимся.
Сформулируйте цели
урока. (Ответы обучающихся: узнать, как записывается условный оператор,
как записывается условие, научиться решать задачи с использованием условного
оператора)
III. Объяснение
нового материала
Один из важнейших операторов Паскаля – условный
оператор. Он позволяет изменять порядок выполнения операторов в зависимости от
некоторого условия, представляющего собой логическое выражение типа Boolean.
Если значение равно True, то выполняется одна группа операторов, если False, то
другая группа операторов или не выполняется ничего.
В языке Паскаль имеются два
условных оператора: if (оператор ветвления) и case (оператор выбора). Оператор
if обеспечивает выбор из двух альтернатив, оператор выбора case позволяет
сделать выбор из произвольного числа имеющихся вариантов.
На этом уроке рассмотрим оператор If. (Составление
обучающимися краткого конспекта нового материала.)
Условный оператор If (оператор ветвления)
Полная формы условного оператора называется If-then-else,
имеет вид:
If условие
Then [оператор1]
Else [оператор2];
Если в качестве оператора должна
выполняться серия операторов, то они объединяются в операторные скобки
Begin-End.
If then
Begin
[операторы1]
End
Else
begin
[операторы2]
End;
Слова if (если) и Then (то) –
зарезервированные.
Замечание. Перед ключевым словом else
(иначе) точка с запятой не ставится, она ставиться после всего оператора If.
Условие представляют собой логические
выражение. Простые условия записываются в виде равенств или неравенств. В
сложных условиях несколько простых условий объединяются с помощью логических
операций or, and. В этом случае простые условия заключаются в круглые скобки.
На рисунке показана блок-схема полной
формы оператора.
Алгоритм выполнения полного условного
оператора:
1.
Проверяется значение логического выражения, записанного в условии
после слова If
2.
Если условие истинно (значение выражения условие равно True), то
выполняется оператор 1, указанный после слова Then
3.
Если условие ложно, то выполняется оператор 2, записанный после
слова Else.
Неполная форма условного оператора называется if-then,
имеет вид:
If условие
Then [оператор];
Если в качестве оператора должна
выполняться серия операторов, то они объединяются в операторные скобки
Begin-End.
If условие Then
Begin
[операторы]
End;
В неполном ветвлении ветвь Else
отсутствует.
На рисунке показана блок схема оператора if-then.
Алгоритм выполнения неполного
условного оператора
1.
Проверяется значение логического выражения, записанного в условии
после слова If
2.
Если условие истинно (значение выражения условие равно True), то
выполняется операторы, указанный после слова Then
3.
Если условие ложно, то ничего делать не надо. Происходит переход к
следующему оператору.
Операторы ветвления могут быть вложенными,
т.е. один оператор if можно расположить внутри другого. В этом случае он
позволяет производить выбор более чем из двух вариантов. При написании
исходного кода с вложенными операторами для удобочитаемости кода
вложенные операторы выделяются отступами.
Применение условного оператора if
рассмотрим на примере.
Пример 1. С
клавиатуры ввести два различных числа. Найти большее из них и вывести его на
экран.
Решение
В этом примере нужно произвести выбор
одного из двух вариантов, для этого используется операторif-then-else.
program primer6_1;
var a, b, m:integer;
begin
writeln('Введите два числа: ');
readln(a, b);
if a>b then m:=a
else m:=b;
writeln('Большее из них: ', m);
end.
|
Пример 2. Даны
три отрезка. Можно ли из них построить треугольник?
Решение. Для любого треугольника сумма его
двух сторон должна быть больше третьей стороны (неравенство
треугольника). Если a, b, c – стороны предполагаемого
треугольника, то нужно сравнить длину каждого отрезка с суммой двух других.
Если хотя бы в одном случае отрезок окажется больше суммы двух других, то треугольник
из таких отрезков не построить.
Для решения этой задачи используется
оператор if-then-else со сложным условием.
program primer6_2;
var a, b, c: integer;
begin
write (' Введите длины отрезков: ');
readln (a,b,c);
if (a < b+c) and (b < a+c) and (c < a+b) then
writeln ('Можно построить треугольник.')
else
writeln ('Нельзя построить треугольник.');
end.
|
Задачи для самостоятельного выполнения
(раздаточный материал). Приложение 1.
Составление обучающимися
краткого конспекта нового материала.
Достаточно часто при
составлении программ необходимо сделать выбор из достаточно большого количества
вариантов. Команду IF в данном случае использовать не рационально. И тут на
помощь к программистам приходит команда множественного выбора CASE.
До сих пор, изучая
ветвление в алгоритмах, мы в основном рассматривали случаи ветвления на два
рукава. Сегодня наша задача – познакомиться со способами организации в
программах ветвления на три и более рукавов.
Один из способов
реализации ветвления на несколько рукавов – проверка условий до тех пор, пока
одно из них не окажется истинным, выполнение предусмотренных этим условием
действий и выход из ветвления.
Структура оператора
выбора такова:
case <переменная> of
<значение1>:<действия1>;
<значение2>:<действия2>;
<значение3>:<действия3>;
……………………………………………………………………;
else <действия 4>;
end;
Оператор выбора
работает следующим образом. В зависимости от того, какое значение принимает
переменная, выполняется тот или иной блок действий. В случае если переменная не
принимает ни одно из перечисленных значений, “работает” ветвь “ELSE” Но эта
ветвь может и отсутствовать, в этом случае просто ничего не выполняется.
У множественного ветвления
есть ограничения; в роли переменной может выступать только переменная
порядкового типа. Но есть и положительные стороны — в качестве значений можно
указывать целый диапазон.
Давайте рассмотрим на
примере преимущества оператора case на примере рассмотренной ранее программы.
Сделаем выводы. (Как
видно из приведённых примеров, использование оператора case очень эффективно.
Он упрощает решение разветвляющихся задач, сокращает затраты на написание кода,
и упрощает понимание его). Давайте разберем еще один пример.
Задача 1. Написать
программу, которая запрашивает у пользователя номер месяца и выводит
соответствующее название времени года. Предусмотреть ошибку ввода.
program nomermesaca;
var x:byte;
begin
writeln(‘ введите номер месяца ‘);
readln(x); Case x of
1,2,12:writeln
(‘зима’);
3,4,5:writeln
(‘весна’);
6,7,8:writeln
(‘лето’);
9,10,11:writeln
(‘осень’)
else
writeln (‘ошибка’);
end;
end.
Я думаю до readln(x); всё
понятно. Теперь разбираем непосредственно часть программы с оператором-”case”.
Допустим, мы ввели
число 5. Так вот программа берет нашу переменную x, которая в нашем случае
равняется пяти, и ищет нашу пятёрку среди тех данных, которые мы ввели между “Case x of…
и … Else writeln (‘ошибка’);”.
Пройдя первую строку
программа нужной пятёрки не нашла и, перейдя на вторую, нужная пятёрка была
найдена и в соответствии с командой, которую мы задали в этом случае программа
выводит на экран слово «Весна».
Если бы мы ввели
число большее, чем 12,то программа бы выдала нам следующее: «Ошибка»
Рассмотрим еще один
простой оператор: это оператор безусловного перехода goto.
Что нужно знать об
операторе безусловного перехода goto ?
Оператор goto - это оператор безусловного перехода. Он
применяется в том случае, когда после выполнения некоторого оператора нужно
перейти не к следующему за ним оператору, а в какую-то другую часть программы,
помеченную специальной меткой. Эта метка обязательно должна быть объявлена в
разделе описания меток данной программы. Метка может быть как числовой,
например: goto 12, так и содержать буквенные символы, например: goto
raschets.
Областью действия
оператора goto является только тот блок, куда было передано управление.
Передача управления в иной блок невозможна, так как указанная метка остается
неизменной в программе.
Структурное программирование
и отношение к команде goto.
Структурное
программирование - это методология программирования, основанная на
суждении, что логичность и понятность программы является залогом ее
надежности, облегчает и ускоряет разработку программы, ее освоение,
сопровождение и дальнейшую ее модификацию. Характерной чертой структурного
программирования являет его отказ от использования оператора безусловного
перехода goto для передачи управления, ограниченное использование глобальных
переменных, модульность программ. Структурное программирование,
зародившееся в 70-х годах XX-ого века, является воплощением принципов
системного подхода к созданию и эксплуатации программного обеспечения ЭВМ.
Основу структурного программирования составляют следующие достаточно простые
положения:
1.
Алгоритм и программа должны составляться поэтапно (то есть по шагам).
2.
Сложная задача должна разбиваться на достаточно простые, легко
воспринимаемые части, каждая из которых имеет только один вход и только один
выход.
3.
Логика алгоритма и программы должны опираться на минимальное число
достаточно простых базовых управляющих структур.
Необходимо помнить, что в
последнее время, особенно в связи с развитием теоретических основ и методологии
структурного программирования и использованием его достижений для создания
трансляторов, применение команды безусловного перехода в программах считается плохим
стилем программирования. Достаточно часто структурное программирование
подразумевает использование более трех базисных структур.
Вот что должны знать будущие программисты в связи
с изучением оператора goto - оператора безусловного перехода в Паскале.
Использование безусловных передач управления в программах считается
теоретически избыточным и с связи с этим подвергается серьезной критике.
Оператор "goto" способствует появлению малопонятных и
трудномодифицируемых программ, которые вызывают значительные сложности при
написании, отладке и сопровождении. Особенно, если в программе выполняются
переходы не вниз (вперед), а вверх (назад). Поэтому рекомендуется сводить до
минимума использование оператора "goto" в программах.
Оператор вызова процедуры. Оператор вызова процедуры служит для активизации
предварительно опеределенной программистом (или стандартной) процедуры.
Например, это могут быть обращение к стандартной процедуре очистки экрана
(clescr;) или вызов любой написанной программистом процедуры.
Пустой оператор. Пустой оператор не выполняет никаких
действий и не содержит никаких символов. Обычно такой оператор используется для
организации перехода к концу локального или глобального блока. Особенно в тех
случаях, когда необходимо пропустить несколько операторов, но не выходить из
блока. Для этого перед зарезервированным словом "end" ставится метка
и за ней обязательно двоеточие.
Например:
label Metka;
...
begin
...
goto Metka;
(Переход в конец блока)
...
Metka:
(Пустой оператор помечен меткой)
end.
IV.
Выявление пробелов в знаниях обучающихся и их ликвидация. Беседа.
1. С
помощью каких операторов можно организовать многовариантное ветвление? (IF…THEN…ELSE,
CASE…OF). Ставится
ли перед ELSE ;?(Нет)
2. Какой
тип может иметь переменная, выступающая в роли параметра в операторе выбора
CASE (Перечисляемый).
3. Может
ли отсутствовать ELSE в операторе выбора? (Да)
4. Как
“работает” оператор выбора? (Оператор выбора работает следующим
образом. В зависимости от того, какое значение принимает переменная выполняется
тот или иной блок действий. В случае если переменная не принимает ни одно из
перечисленных значений, “работает” ветвь “else” Но эта ветвь может и
отсутствовать, в этом случае просто ничего не выполняется.)
V. Закрепление
изученного материала. Применение знаний на практике и формирование практических
умений и навыков.
Обучающимся
предлагаются несколько задач, которые они должны составить на компьютере:
Задача 2. Составить
программу, имитирующую работу своеобразного калькулятора.
program Calc;
var a, b, c: integer;
begin
writeln(‘Введите a’); Read(a);
writeln(‘Введите b’); Read(b);
writeln(‘Введите c‘); Read(c);
case c of
1:
writeln(‘Сумма=‘, a+b);
2:
writeln(‘Разность=‘, a-b);
3:
writeln(‘Произведение=‘, a*b);
4: writeln(‘Целая
часть от деления=‘, a div b);
5:
writeln(‘Остаток от деления=‘, a mod b);
else writeln(‘Введен
неизвестный номер операции’);
end;
end.
Задача 3. Написать
программу, которая в зависимости от введённого числа выводила бы на экран: если
1, 2, 3, 4, 5 то 'один', если 6, 7, 10, 15 то 'два', если 8 то 'три', если 16,
17, 18, 19, 20, 22, 25 то 'четыре'. Иначе вывести на экран 'ошибка'.
program primer;
var n : integer;
begin
write('Введите
число: ');
readln(n);
case n of
1..5: write('один');
6, 7, 10, 15: write('два');
8: write('три');
16..20, 22, 25: write('четыре');
else write('ошибка');
end;
end.
VI. Выполнение компьютерного
тестирования (по итогу выставляется оценка в журнал)
VII. Домашнее задание.
Составить программу
по следующему условию.
В некотором учебном заведении действуют
следующие правила приема. Абитуриенты сдают три экзамена. Если они набирают не
менее 13 баллов, то это дает право поступить на дневное отделение, от 10 до 12
— вечернее, от 8 до 9 — заочное и ниже 8 баллов — отказ в приеме на учебу.
Записать программу, которая в зависимости от суммы набранных баллов сообщает
абитуриенту его права на поступление.
VIII. Итог урока.
Сегодня на уроке мы
повторили структуру программы, типы данных, инструкции ввода и вывода,
логические выражения, условный оператор, познакомились с организацией
многовариантного ветвления.
Вопросы компьютерного теста.
Вопрос 1.
В каких случаях
применяется оператор безусловного перехода goto: "перейти к"?
Ответы:
Вариант 1: если нужно продолжить работу
программы дальше
Вариант 2: применяется в случаях, когда
после выполнения некоторого оператора надо выполнить не следующий по порядку, а
какой-либо другой, отмеченный меткой оператор
Вариант 3: если нужно выйти из цикла
Вариант 4: если в программе использовался
оператор if
Вопрос 2.
Что представляет из
себя метка в операторе условного перехода goto?
Ответы:
Вариант 1: метка это условный символ начала
блока или подпрограммы
Вариант 2: метка объявляется в разделе
описания меток и может содержать как цифровые, так и буквенные символы
Вариант 3: метка это натуральное число
Вариант 4: метка это обозначение некоторого
выделенного блока программы
Вопрос 3.
Областью действия
метки является
Ответы:
Вариант 1: в целом вся программа
Вариант 2: только те блоки программы, которые
помечены этой меткой
Вариант 3: любой блок программы, отмеченный
данной меткой
Вариант 4: только тот блок, в котором
она описана; передача управления в другой блок запрещена
Вопрос 4.
Почему использование
безусловных передач управления в программе считается плохим стилем и подвергается
серьезной критике?
Ответы:
Вариант 1: потому, что часто программируются
возвраты в верхнюю часть программы
Вариант 2: потому, что это способствует
созданию малопонятных и трудно модифицируемых программ, которые вызывают
большие сложности при их отладке и сопровождении
Вариант 3: потому, что можно обойтись без этого
оператора в программе
Вариант 4: потому, что прерывается естественный
ход вычислительного процесса
Вопрос 5.
Оператор в
Паскале.
Ответы:
Вариант 1: человек, работающий в должности
оператора ЭВМ
Вариант 2: предложение языка
программирования, задающее полное описание некоторого действия, которое может
выполнить компьютер
Вариант 3: знак действия: + - / * ^
Вариант 4: команда ввода (вывода) информации:
read или write
Вопрос 6.
"Операнды"
в Паскале.
Ответы:
Вариант 1: открывающая или закрывающая скобки:
(...)
Вариант 2: данные, необходимые для
выполнения оператора в Паскале
Вариант 3: операторные скобки: begin...end
Вариант 4: точка с запятой в конце строки,
содержащей оператор
Вопрос 7.
Символ-разделитель
операторов в Паскале.
Ответы:
Вариант 1: точка
Вариант 2: точка с запятой
Вариант 3: запятая
Вариант 4: пробел
Вопрос 8.
Простые операторы в
Паскале.
Ответы:
Вариант 1: операторы, не содержащие
никаких других операторов, называются простыми
Вариант 2: оператор, выдающий пустую строку:
writeln
Вариант 3: операторы описания типа данных:
integer, real, char и т.д.
Вариант 4: функция "clrscr", которая
только очищает экран и больше ничего не делает. В
Вопрос 9.
Группы операторов
языка Паскаль:
Ответы:
Вариант 1: простые и структурные
Вариант 2: простые и сложные
Вариант 3: простые и составные
Вариант 4: простые, составные и пустые
Вопрос 10.
К простым операторам
относятся:
Ответы:
Вариант 1: операторы присваивания,
безусловный оператор, оператор вызова процедуры, пустой оператор
Вариант 2: арифметические операторы,
математические функции, clrscr, halt(1) и т.д.
Вариант 3: операторы ввода-вывода информации,
оператор присваивания и вычисления по формулам
Вариант 4: пустой оператор и оператор
"end".
Вопрос 11.
Какой оператор
называется пустым?
Ответы:
Вариант 1: который не содержит никаких символов
и не выполняет никаких действий
Вариант 2: который выводит на экран пустую
строку
Вариант 3: который выполняет роль
"заглушки" при отладке программы
Вариант 4: который очищает экран компьютера или
буфер при выводе информации
Вопрос 12.
Для чего используется
пустой оператор?
Ответы:
Вариант 1: если нужно задержать на некоторое
время выполнение программы, то есть выполнить паузу в программе
Вариант 2: для организации перехода к
концу локального или глобального блока в тех случаях, если необходимо
пропустить несколько операторов, но не выходить из блока
Вариант 3: для пропуска строк на экране
Вариант 4: для приостановки работы
компьютера
1.Написать программу, которая запрашивает у пользователя номер
месяца и выводит соответствующее название времени года. Предусмотреть ошибку
ввода.
2. Составить программу,
имитирующую работу своеобразного калькулятора.
3. Написать программу, которая в зависимости от введённого числа
выводила бы на экран: если 1, 2, 3, 4, 5 то 'один', если 6, 7, 10, 15 то 'два',
если 8 то 'три', если 16, 17, 18, 19, 20, 22, 25 то 'четыре'. Иначе вывести на
экран 'ошибка'.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.