58. Составной оператор. Многообразие способов записи ветвлений

58. Составной оператор. Многообразие способов записи ветвлений

Планируемые образовательные результаты:

  • предметные — умение записывать на языке программирования короткие алгоритмы, содержащие алгоритмическую конструкцию «ветвление»;

  • метапредметные — умение самостоятельно планировать пути достижения целей; умение соотносить свои действия с планируемыми результатами, осуществлять контроль своей деятельности, определять способы действий в рамках предложенных условий, корректировать свои действия в соответствии с изменяющейся ситуацией; умение оценивать правильность выполнения учебной задачи;

  • личностные — алгоритмическое мышление, необходимое для профессиональной деятельности в современном обществе; представление о программировании как сфере возможной профессиональной деятельности.

Решаемые учебные задачи:

  1. рассмотреть правила записи условного оператора;

  2. рассмотреть формат и назначение составного оператора;

  3. подвести учащихся к выводу, что для решения одной и той же задачи можно разработать разные алгоритмы;

  4. сформировать умение записывать на языке программирования короткие алгоритмы с ветвлениями.

Основные понятия, рассматриваемые на уроках:

  • условный оператор;

  • неполная форма условного оператора;

  • составной оператор;

  • вложенные ветвления.

Программирование разветвляющихся алгоритмов

Ключевые слова:

  • условный оператор

  • неполный условный оператор

  • составной оператор

  • вложенные ветвления

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

При записи на языке Паскаль разветвляющихся алгоритмов используют условный оператор. Его общий вид:

if <условие> then <оператор_1> else <оператор_2>

Для записи неполных ветвлений используется неполная форма условного оператора:

if <условие> then <оператор>

Слова if — then — else переводятся с английского языка на русский как если — то — иначе, что полностью соответствует записи ветвления на алгоритмическом языке.

Перед else знак «;» не ставится.

В качестве условий используются логические выражения:

простые — записанные с помощью операций отношения;

сложные — записанные с помощью логических операций.

Пример 1. Запишем на языке Паскаль рассмотренный в п. 2.4.2 (пример 8) алгоритм определения принадлежности точки х отрезку [а, b].

program n_9;

var х, a, b: real;

begin

writeln ('Определение принадлежности точки отрезку');

write ('Введите а, b>>');

readln (а, b) ;

write ('Введите х»');

readln (х);

if (х>=а) and (x<=b) then

writeln ('Точка принадлежит отрезку')

else writeln ('Точка не принадлежит отрезку')

end.

Пример 2. Воспользуемся неполным условным оператором для записи на языке Паскаль рассмотренного в п. 2.4.2 (пример 9) алгоритма присваивания переменной у значения наибольшей из трёх величин а, b и с.

program n_10;

var у, a, b, с: integer;

begin

writeln ('Нахождение наибольшей из трёх величин');

write ('Введите а, b, с>>');

readln (а, b, с) ;

у:=а;

if (b>y) then y:=b;

if (с>у) then у:=с;

writeln ('у=', у)

end.

Дополните эту программу так, чтобы её выполнение приводило к присваиванию переменной у значения большей из четырёх величин а, b, с и d.

Составной оператор

В условном операторе и после then, и после else можно использовать только один оператор. Если при некотором условии требуется выполнить определённую последовательность операторов, то их объединяют в один составной оператор.

Конструкция вида

begin <последовательность операторов> end

называется составным оператором.

Пример. Алгоритм решения квадратного уравнения вам хорошо известен. Запишем соответствующую программу на языке Паскаль.

program n_11;

var a, b, с: real;

var d: real;

var x, x1, x2: real;

begin

writeln ('Решение квадратного уравнения');

write ('Введите коэффициенты а, b, с»'); readln (а, b, с) ;

d:=b*b-4*a*c;

if d<0 then writeln ('Корней нет');

if d=0 then

begin

x:=-b/2/a;

writeln ('Корень уравнения x=', x:9:3)

end;

if d>0 then

begin

x1:=(-b+sqrt(d))/2/a;

x2:=(-b-sqrt(d))/2/a;

writeln ('Корни уравнения:');

writeln ('x1=', x1:9:3);

writeln ('x2=', x2:9:3)

end

end.

Многообразие способов записи ветвлений

В качестве оператора после then и else можно использовать условный оператор. Например, возможна следующая конструкция:

if <условие1> then

if <условие2> then <оператор1>

else <оператор2>

При использовании таких сложных конструкций (их ещё называют вложенными ветвлениями) следует иметь в виду, что else всегда относится к ближайшему оператору if.

Пример. Воспользуемся вложенным ветвлением для записи на языке Паскаль рассмотренного в п. 2.4.2 (пример 10) алгоритма решения линейного уравнения.

program n_12;

var a, b, х: real;

begin

writeln ('Решение линейного уравнения');

write ('Введите коэффициенты а, b>>');

readln (а, b) ;

if а<>0 then

begin

х:=-b/a;

writeln ('Корень уравнения х=', х: 9: 3)

end

else if b<>0 then writeln ('Корней нет')

else writeln ('x - любое число');

end.

Как правило, для решения одной и той же задачи можно предложить несколько алгоритмов. Убедимся в этом, записав программу решения линейного уравнения, не прибегая к вложенным ветвлениям.

program n_13;

var a, b, х: real;

begin

writeln ('Решение линейного уравнения');

write ('Введите коэффициенты а, b>>');

readln (а, b) ;

if а<>0 then

begin

x:=-b/a;

writeln ('Корень уравнения х=', х:9:3)

end;

if (а=0) and (b<>0) then writeln ('Корней нет');

if (a=0) and (b=0) then writeln ('x - любое число')

end.

Возможно, второй вариант программы покажется вам более наглядным. Но и у первого варианта есть свои преимущества: в нём делается меньше проверок.

Используйте вложенные ветвления для записи программы, определяющей принадлежность точки х отрезку [а, b].

Самое главное

При записи на языке Паскаль разветвляющихся алгоритмов используют условный оператор:

if <условие> then <оператор_1> else <оператор_2>

Для записи неполных ветвлений используется неполный условный оператор:

if <условие> then <оператор>

Если при некотором условии требуется выполнить определённую последовательных операторов, то их объединяют в один составной оператор, имеющий вид:

begin <последовательность операторов> end

Вопросы и задания

1. Ознакомьтесь с материалами презентации к параграфу, содержащейся в электронном приложении к учебнику. Используйте эти материалы при подготовке ответов на вопросы и выполнении заданий.

2. Как на языке Паскаль записывается полное и неполное ветвление?

3. Является ли условным оператором следующая последовательность символов?

а) if х<у then х:=0 else read (у)

б) if х>=у then х:=0; у:=0 else write (z)

в) if x<y<z then a:=a+1

4. Что такое составной оператор? Для чего он используется в условном операторе?

5. Используя составной оператор, упростите следующий фрагмент программы:

if a>b then с:=1;

if a>b then d:=2;

if a<=b then c:=3;

if a<=b then d:=4

6. Дано трёхзначное число. Напишите программу, которая определяет:

а) есть ли среди цифр заданного целого трёхзначного числа одинаковые;

б) является ли число «перевёртышем», т. е. числом, десятичная запись которого читается одинаково слева направо и справа налево.

7. Даны две точки в плоской прямоугольной системе координат. Напишите программу, определяющую, которая из точек находится ближе к началу координат.

8. Даны три натуральных числа. Напишите программу, определяющую, существует ли треугольник с такими длинами сторо- н. Если такой треугольник существует, то определите его тип (равносторонний, равнобедренный, разносторонний).

9. Имеются данные о количестве полных лет трёх призёров спартакиады. Напишите программу, выбирающую и выводящую возраст самого младшего призёра.

10. Напишите программу, определяющую, лежит ли точка А(ха, уа) на прямой у =kx + l, на ней или под ней.

11. Напишите программу, которая производит обмен значений переменных х и у, если х больше у.

12. Дан условный оператор:

if а<5 then с:=1

else if а>5 then с:=2

else с:=3

Какое значение имеет переменная а, если в результате выполнения условного оператора переменной с присваивается значение 3?

13. Напишите программу, вычисляющую значение функции:

14. Составьте программу для решения задачи № 21 к § 2.4 (определение дня недели).

15. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8. Напишите программу, которая по введённым координатам двух полей (k, l) и (m, n) определяет, являются ли эти поля полями одного цвета.

16. Напишите программу, в которой пользователю предлагается дополнить до 100 некоторое целое число a (a — случайное число, меньшее 100). Ответ пользователя проверяется и комментируется.