Файл: Методические указания по выполнению лабораторных работ Для обучающихся (очная форма обучения) по направлению подготовки 09. 03. 03 Прикладная информатика.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 142
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
44
Внимание!
Переменная, объявленная в блоке, называется локальной и существует только в пределах
этого блока. Также возможно объявить одну (но не более!) переменную внутри скобок условного
оператора на месте выражения. Эта переменная может использоваться только внутри данного
условного оператора в обеих его ветвях.
Использование вложенных друг в друга условных операторов может породить неоднозначность, к какому из операторов if относится ветвь else. В этом случае стандарт регламентирует относить ветвь else к ближайшему к ней оператору if. Выражение, от значения которого зависит выбор ветви, может быть как логическим (например, a < 3), так и арифметическим
(a + b). Логическое выражение может, в зависимости от входящих в него переменных и констант, быть истинным (true) или ложным (false). Арифметическое выражение может принимать различные значения, в том числе и ноль. Если арифметическое выражение равно нулю, то для условного оператора оно рассматривается как ложное, а арифметическое выражение, значение которого отлично от нуля, считается истинным. Для логических выражений используются следующие знаки операций (операции отношения), сравнивающие первый операнд со вторым:
Иногда возникает необходимость проверить выполнение не одного, а нескольких условий. В этом случае удобнее использовать не вложенные операторы ветвления, а составные логические выражения, образованные с помощью логических операций И (&&) и ИЛИ (| |). Результатом логической операции является true или false. Результат логической операции И будет истинным только при условии, что оба операнда будут истинны, для истинности операции ИЛИ достаточно, если истинным будет хотя бы один операнд, неважно, первый, второй, или оба. Следует отметить, что логические операции выполняются слева направо, и, если по первому операнду можно определить результат
(«истина» – в случае оператора ИЛИ и «ложь» в случае оператора И), то второй операнд не проверяется.
Внимание!
Составные логические выражения могут использоваться, например, при проверке
принадлежности числа некоторому диапазону. Неравенство -3≤x≤8 в программе на языке
С++ примет вид:
В противном случае, при записи
сначала будет вычислено значение выражения -3<=x (а оно равно 0 (false) при x<=-3 или 1
(true) при x>-3), а затем результат будет сравниваться с числом 8 и окажется истинным
при любом значении х.
В ряде случаев (тогда, когда некоторой переменной следует присвоить одно из двух возможных значений в зависимости от выполнения некоторого условия) удобно использовать не условный оператор if, а условную операцию (?:), в которой имеется три операнда:
Условная операция позволяет в качестве второго и третьего операндов записать арифметическое выражение, например
45
В результате выполнения данного фрагмента значение переменной Z увеличится на
4,5 при условии, что Z.
Ниже приведен программный код, вычисляющая значение функции y=f(x)
Если требуется разветвление на три и более ветви, можно использовать оператор-
переключатель (оператор выбора) switch. Его формат (квадратные скобки не являются в данном случае символами алфавита языка C++, а указывают на то, что их содержимое не является обязательным элементом и может отсутствовать):
Сначала вычисляется выражение, стоящее в скобках, после чего полученное значение поочерёдно сравнивается с константами в альтернативах case. При равенстве выполняются операторы этой альтернативы. Вслед за этим выполняются и все альтернативы, расположенные ниже. Избежать выполнения этих ветвей можно, записав последним в списке оператор break. В таком случае происходит выход из оператора switсh, и управление передаётся на следующий за ним оператор. Если ни одна из констант не совпала с вычисленным значением выражения, то выполняются операторы, записанные после ключевого слова default, а при его отсутствии происходит выход из оператора- переключателя.
46
Внимание!
Любая из ветвей оператора switch в отдельности представляет собой последовательность
операторов, не являющуюся блоком (если, разумеется, не заключить эту последовательность в
скобки специально). Вместе с тем совокупность всех ветвей оператора switch представляет собой
блок, поэтому переменная, объявленная внутри этого блока является локальной и не существует
за его пределами.
Ниже приведен фрагмент программы, которая по номеру месяца печатает его название и сообщает количество дней в этом месяце.
2.
Требования к выполнению, оформлению и порядку защиты лабораторной
работы
1. Изучить теоретические материалы и подготовить ответы на контрольные вопросы.
2. Задание на лабораторную работу состоит из одной задачи: выбрать наибольшее среди трёх введённых с клавиатуры целых чисел.
3. Необходимо выполнить задание согласно заданной технологии.
4. Программа должна выводить фамилию студента, группу, вариант и условие задачи.
5. Подобрать самостоятельно значения входных данных, демонстрирующие правильность работы программы. Количество тестов должно быть не менее 5. К защите предъявляется приложение на языке C++, созданное в соответствии с заданием.
6. В рамках защиты лабораторной работы необходимо продемонстрировать полученные практические навыки и понимание теоретического материала, ответив на вопросы преподавателя.
47
3.
Задания для самостоятельной работы
Задание. Выбрать наибольшее среди трёх введённых с клавиатуры целых чисел.
Данную задачу необходимо решить четырьмя способами и предоставить пользователю выбор способа решения.
Порядок подготовки программы следующий:
1. Организовать ввод трех чисел.
2. Организовать ввод числа для выбора способа решения.
3. Выполнить выбор способа решения (оператор switch, альтернативы пока пустые).
4. Отладить выбор способа решения
5. Заполнить альтернативы программным кодом согласно предложенным ниже схемам: a. Альтернатива 1 – способ 1 b. Альтернатива 2 – способ 2 c. Альтернатива 3 – способ 3 d. Альтернатива 4 – способ 4 6. Закомментировать оператор break во всех альтернативах и провести общее тестирование.
Способы решения:
Способ 1. Используются вложенные полные ветвления. Он состоит в том, что максимальное из двух чисел сравнивается с третьим. Схема алгоритма представлена на рисунке 1.
Рис. 1.
Блок-схема алгоритма к способу 1
48
Способ 2. Используются неполные ветвления и сложные логические выражения. Основан на том, что максимальное среди нескольких чисел – это такое число, которое больше всех остальных. Поэтому поочерёдно для каждого из трёх чисел происходит проверка одновременного выполнения двух условий: оно должно быть больше каждого из двух оставшихся чисел. Схема алгоритма представлена на рисунке 2.
Рис. 2
Блок -схема алгоритма к способу 2
Способ 3. Переменной Max присваивается большее из чисел x и y. Затем Max сравнивается с третьим числом z.
Способ 4. Написать программный код выбора максимального числа из трех, используя условную арифметическую операцию (?:)
Контрольные вопросы:
1. Множество (диапазон) значений логического типа данных С++ bool.
2. Формат представления значений логического типа данных С++ bool в программном коде (логические константы).
3. Формат представления значений логического типа данных С++ bool в памяти ЭВМ
(схематичное изображение структуры области памяти, занимаемой целочисленным значением типа bool).
4. Множество действий, применимых данным к логического типа С++ bool. Таблицы истинности логических операций (и, или, не).
5. Представление значений в программном коде С++. Логические выражения: нелитерные (неименнованные) константы логического типа, именованные переменные и константы, составные выражения, операции сравнения, логические операции.
6. Алгоритмы разветвляющейся структуры.
7. Объявление переменных логического типа.
8. Логические выражения. Приоритет выполнения операций.
9. Неявное преобразование типов данных при использовании в выражении целочисленных и логических значений.
10. Оператор ветвления If. Анализ логического выражения в скобках после
49 ключевого слова If. Полная и укороченная форма оператора ветвления If.
11. Оператор ветвления If и блочный оператор.
12. Оператор выбора switch.
13. Использование составных логических выражений для описания условий ветвления и выбора в операторах If и switch.
50
Лабораторная работа № 1.8
ТАБУЛИРОВАНИЕ ФУНКЦИЙ
Цель работы: получить навыки в решении задач, предполагающих реализацию циклических алгоритмов, при помощи ЭВМ.
1.
Краткая теория
Алгоритм называется циклическим, если он содержит многократное выполнение одних и тех же ветвей при различных значениях промежуточных данных. Число повторений этих ветвей алгоритма может быть задано в явной или неявной форме. Циклы программируются с помощью операторов for, while и do/while.
Структура повторения while
Структура повторения while позволяет определить действие, которое должно повторяться, пока некоторое условие остается истинным. Предложение псевдокода
ПОКА число четное
число заменить на целую часть половины числа
описывает повторные действия замены числа на новое значение (под числом понимается значение переменной целого типа). Условие «число четное» может быть истинным или ложным. Если оно истинно, то осуществляется действие «число заменить на целую часть половины числа». Это действие будет повторяться до тех пор, пока условие остается истинным.
Оператор, записанный в теле структуры повторения while (ПОКА) составляет тело while и может быть отдельным или составным.
Как только условие станет ложным, повторение прерывается и выполняется первое предложение псевдокода, следующее за структурой повторения. Блок-схема на рис. 1 иллюстрирует управляющую логику структуры повторения while
Рис. 1.
Блок-схема структуры повторения while
Выполнение подобной структуры повторения никогда не прервется, если в теле структуры while не предусмотрено действие, приводящее условие к ложному значению.
Оператор с предусловием (while) записывается так:
51
Таблица 1.
Логические операторы
Оператор
Название оператора
Пример выражения
Пояснение
&&
логическое умножение (И)
(i > j) && (k != 1)
Выражение истинно если i больше j И k не равно 1
||
логическое сложение (ИЛИ)
(ch == ‘y’) || (ch == ‘Y’)
Выражение истинно если значение переменной ch равно
‘y’ ИЛИ ‘Y
!
логическое отрицание (НЕ)
!(i > 1)
Выражение истинно если i не больше 1
На рис. 2 приведен программный код описанной выше структуры. В примере используется переменная целого типа value, которой в результате выполнения очередной итерации цикла присваивается новое значение. Комбинированная операция /= уменьшает значение переменной value в два раза. Условие (value % 2 == 0) будет истинным если остаток от деления равен нулю, т.е. число четное. Результат деления хотя бы один раз станет нечетным, поэтому зацикливания не произойдет. При вводе нечетного числа цикл не выполняется ни разу.
Рис. 2.
Пример оператора цикла с предусловием
1 2 3 4 5 6 7
Структура повторения do/while
В структуре do/while проверка условия продолжения циклов производится после того, как тело цикла выполнено, следовательно тело цикла будет выполнено по крайней мере один раз. Когда do/while завершается, выполнение программы продолжается с оператора, следующего за предложением while.
Предложение псевдокода
ВЫПОЛНЯТЬ
число заменить на целую часть половины числа
ПОКА число нечетное
описывает повторные действия замены числа на новое значение (под числом понимается значение переменной целого типа). Осуществляется действие «число заменить на целую часть половины числа». Затем проверяется истинность условия «число нечетное» .
Действие будет повторяться до тех пор, пока условие остается истинным.
Блок-схема на рис. 3 иллюстрирует управляющую логику структуры повторения do/while.
52
Рис. 3.
Блок-схема структуры повторения do/while
Выполнение подобной структуры повторения никогда не прервется, если в теле структуры do/while не предусмотрено действие, приводящее условие к ложному значению.
Оператор с постусловием (do/while) записывается так:
Слово while является зарезервированным словом С++. В структуре do/while нет необходимости использовать фигурные скобки, если тело состоит только из одного оператора. Но фигурные скобки обычно все же ставят, чтобы избежать путаницы между структурами while и do/while.
На рис 4 приведен программный код описанной выше структуры. В примере используется переменная целого типа value, которой в результате выполнения очередной итерации цикла присваивается новое значение. Комбинированная операция /= уменьшает значение переменной value в два раза. В условии (value & 1) используется бинарная операция (битовое умножение), результат которой «истинно» если число нечетное.
Действие в цикле выполнится хотя бы один раз.
Рис.4.
Пример оператора цикла с постусловием
Структура повторения for Часто приходится решать задачи, в которых организуется повторение, управляемое счетчиком. При этом требуется задать:
53 19.Имя управляющей переменной (счетчика цикла);
20.Начальное значение управляющей переменной;
21.Приращение (или уменьшение), на которое изменяется управляющая переменная в каждом цикле.
22.Условие проверки, не достигнуто ли конечное значение управляющей переменной (т.е. надо ли продолжать циклы)
Рассмотрим программу, которая печатает числа от 1 до 10 (рис. 5). В качестве счетчика используется переменная counter. Значение счетчика увеличивается на 1 при каждом выполнении цикла. Выполнение цикла заканчивается, когда значение управляющей переменной превысит 10.
Программа может быть сделана более компактной, если переменной counter задать значение 0 и заменить структуру while следующей
Операция инкремент выполняется непосредственно в условии структуры while до того, как это условие проверяется. В С++ существует специальная структура повторения for, которая содержит все элементы, необходимые для повторения, управляемого счетчиком.
Рис. 5.
Повторение, управляемое счетчиком
Когда структура for начинает выполняться, управляющей переменной counter задается начальное значение 1. Затем проверяется условие продолжения цикла counter<=10.
Условие истинно, оператор тела структуры выводит значение counter равное 1. Затем управляющая переменная counter увеличивается на 1 в выражении counter++ и цикл опять начинается с проверки условия его продолжения.
Рис.6.
Повторение, управляемое счетчиком, со структурой for