Занятие 9 «Ветвления и условные операторы»

Теперь, когда учащийся знает, как организовать ввод и вывод простых типов данных (числа и строки), научимся немного обрабатывать данные.

Рассмотрим задачу. Пусть на входе в программу имеются данные об успеваемости двух учащихся (три годовые оценки за предметы: литература, русский и математика), требуется определить «лучшего» учащегося по такому показателю, как среднее арифметическое от имеющихся оценок.

Для решения поставленной задачи определимся с порядком действий:

1. Введем данные.

2. Посчитаем среднее арифметическое оценок для каждого учащегося.

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

На рисунке 9.1 дан пример реализации программы, решающей поставленную задачу на языке C++.

Рис.9.1 Пример программы, определяющей «лучшего» учащегося

Обратите внимание, для работы со строками во второй строке подключается библиотека «string». В строках с 7 по 9 объявляются переменные, но они не инициализируются (им не присвоены значения).

В строках 11 и 12 входные данные загружаются в соответствующие переменные (сами загружаемые данные в примере видно в нижней части рисунка 9.1).

В строках 14 и 15 объявляются и сразу же определяются значения двух переменных, эти переменные в программе хранят средние арифметические оценки учащихся.

В строках 17 и 18 применен оператор «if», синтаксис которого ясен из примера, но мы всё же прокомментируем – в скобках указано условие, при выполнении которого будет выполнен код, указанный после закрытия круглых скобок (в данном случае вывод фамилии для каждого из случаев).

Заметим, что здесь в коде уже имеется алгоритмическая оптимизация. По условию задачи имеется три возможных ситуации: вывод фамилии первого учащегося, вывод фамилии второго или вывод обеих фамилий. Однако в коде имеются только две строки, это связано с тем, что в условиях (выражения в скобках) имеются нестрогие неравенства и в результате, если средние баллы обоих учащихся равны, то «сработают» оба условия, и, соответственно, произойдет вывод как первой, так и второй фамилий.

На рисунке 9.2 приведен пример, раскрывающий все возможности синтаксиса оператора «if» в языке C++ (полная конструкция if … else …). Пример дает альтернативу решения всё той же задачи, и для выполнения требуется строки 17 и 18 из предыдущего кода, заменить кодом, указанным на рисунке 9.2.

Рис.9.2 Применение конструкции if … else … с вложением друг в друга

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

В качестве самостоятельной работы рекомендуем решить задачу поиска корней квадратного уравнения. Как посчитать дискриминант, было показано в прошлых занятиях. Вспомните, что если дискриминант больше нуля, то имеется два корня (два решения, x1 и x2), если дискриминант равен нулю, то решение 1, а если дискриминант меньше 0 (нуля), то решения нет (выведите текст на английском языке или другом, на том, который изучаете, на крайний случай используйте транскрипцию).

Вот еще одна задача: на входе имеются три целых положительных числа, выведите их в порядке неубывания, например, при входе 1 2 3, надо вывести их в той же последовательности, а в случае 3 4 1, следует вывести в порядке 1 3 4 и т.д. После написания программы протестируйте ее, вводите различные сочетания и сверяйте ответ программы с тем, что вы сами ожидаете получить в качестве ответа.

Для чисел 1 2 3 все возможные варианты последовательности даны далее: 1 2 3, 1 3 2, 2 1 3, 2 3 1, 3 1 2, 3 2 1 (всего 6 вариантов). Но вы должны перебирать и с другими числами, так как если было известно, что на вход поступают только любая из указанных комбинаций, то можно было бы просто всегда выдавать последовательность 1 2 3 и даже не загружать входные данные.

Подумайте еще раз над задачей, решение которой приведено на рисунке 9.1. Можно ли было вместо среднего арифметического искать сумму? Получился бы тот же самый ответ? Можно ли было использовать произведение? Обоснуйте ваши решения.

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

Спасибо за внимание! Следите за изменениями на нашем ресурсе.

<< Назад   Далее >>