Лабы / C++.Ашарина / C++ (ветв. алг.) / Ветвиесалгоритмы С++
.htmlМосковский Институт Электронной Техники Московский Институт Электронной Техники
Кафедра ИПОВС
Лабораторная работа.
Программирование ветвящихся алгоритмов в языке С++.
Разработала:
Ст. преп. Соколова Н.Ю.
Москва 1997 г.
Цель работы:
Изучить различные способы программирования ветвящихся алгоритмов;
Получить практические навыки программирования задач с разветвленной структурой.
Теоретические сведения.
Иногда необходимо, чтобы программа могла выбирать между двумя различными альтернативами в зависимости от входного значения. Оператор, который позволяет осуществить такой выбор, называется условным оператором.
Условный оператор if.
Синтаксис полной формы условного оператора:
If (<логическое выражение>) <оператор 1>;
Else <оператор 2>;
Если (<логическое выражение> истинно, т.е. больше 0, то выполняется <оператор 1>, иначе выполняется <оператор 2>.
Синтаксис сокращенной формы условного оператора:
If (<логическое выражение>) <оператор>;
<Оператор> выполняется только в том случае, если <логическое выражение> больше 0, т.е. истинно.
Под <логическим выражением> понимается совокупность операций отношений и логических операций. Основные логические операции приведены в таблице 1.
Таблица 1.
Операция Значение Пример ! логическое НЕ !EOF == равно Value == 0 != не равно Value !=0 < меньше, чем i< count > больше i > count >= больше или равно i >= count <= меньше или равно i <= count || логическое ИЛИ a | | b && логическое И a > 8 && c < 5
Часто каждая из альтернативных возможностей оператора if требует выполнение более одного оператора. Тогда необходимо заключить группу операторов в фигурные скобки { }.
Список операторов, заключенных в фигурные скобки, называется составным оператором. Составные операторы выполняются точно также, как и простые операторы. И могут находиться в любом месте программы.
Оператор множественного выбора.
Когда необходимо осуществить выбор одного из нескольких вариантов, мохно воспользоваться конструкцией if – else – if .. else. Но во многих случаях оказывается более удобным применить оператор switch.
Синтаксис оператора switch:
switch (<выражение>)
{
case <константное выражение>: <оператор или группа операторов>;
case <константное выражение>: <оператор или группа операторов>;
………………………………………………………………………………
case <константное выражение>: <оператор или группа операторов>;
default: <оператор или группа операторов>;
};
Результат вычисленного <выражения> сравнивается с каждым из <константных выражений>. Если находить совпадение, то управление передается оператору, связанному с данным case. Исполнение продолжается до конца тела switch или пока не встретиться оператор break, который передает управление из тела switch вовне. <Оператор или группа операторов>, стоящий после default выполняется, если <выражение> не соответствует ни одному из <константных выражений> в case. Default не обязательно располагать в конце.
<Константные выражения> целого типа или символьного типа. Если нескольким <константным выражениям> соответсвует один оператор и тот же <оператор>, то тогда возможна следующая запись:
switch (<выражение>)
{
case <константное выражение>:
case <константное выражение>:
case <константное выражение>: <оператор или группа операторов>;
};
Управление экраном.
С++ позволяет управлять экраном. Прототипы функций управления экраном находятся в файле conio.h. при использовании этих ффункций необходимо подключить этот файл с помощью директивы компилятора:
#include <conio.h>
Рассмотрим данные функции управления экраном.
Установка окна.
Функция
void window (int left, int top, int right, int bottom);
устанавливает текущее текстовое окно на экране (см. рис.). Координаты диагонали left, right, top, bottom всегда отсчитываются от верхнего левого угла экрана в абсолютных координатах и должны удовлетворять следующим условиям:
1 < left < right <25
1 < top < bottom < 80
При нарушении этих условий окно не создается. После установки окна все операции, связанные с выводом информации, производятся внутри текущего окна. Отсчет строк и столбцов для позиционирования курсора теперь производится теперь в координатах текущего окна. Теперь left = 1 и top = 1 это координаты верхнего левого ушла окна. Следует помнить, что при установки окна, очистка не производиться, а также, координаты очередного создаваемого окна всегда даются в абсолютных экранных координатах, а не в относительных координатах последнего текстового окна.
Очистка экрана.
Функция
void clrcsr();
Очищает текущее текстовое окно или весь экран.
Задание цвета фона.
Функция
void textbackground ( int newcolor);
В переменной newcolor задается одна из 16 целочисленных констант, каждая из которых имеет символьное обозначение (см. таб. 2).
Задание цвета символа.
Для задания цвета символа используется функция
void textcolor (int newcolor);
В переменной newcolor задается цвет выводимых на экран символов (см. таб. 2).
Установка курсора.
Для установки курсора в точку (X,Y) внутри текущего окна используется функция
void gotoxy (int x, Int y);
Таблица 2.
Константа цвета Обозначение цвета Цвет 0 BLACK Черный 1 BLUE Синий 2 GREEN Зеленый 3 CYAN Бирюзовый 4 RED Красный 5 MAGENTA Малиновый 6 BROWN Коричневый 7 LIGHTGRAY Светло-серый 8 DARKGRAY Темно-серый 9 LIGHTBLUE Светло-голубой 10 LIGHTGREEN Светло-зеленый 11 LIGHTCIAN Светло-бирюзовый 12 LIGHTRED Светло-красный 13 LIGHTMAGENTA Светло-малиновый 14 YELLOW Желтый 15 WHITE Белый
Примеры программирования.
Пример 1.
Написать программу нахождения действительных корней квадратного уравнения общего вида . При написании программы использовать функции управления экраном.
#include <conio.h>
#include <math.h>
#include <stdio.h>
void main ()
{
// Установить цвет экрана
textbackground (GREEN);
// Окрасить цвет экрана установленным цветом
clrscr();
// Задать окно
window (5,5,10,50);
// Задать цвет окна
textbackground (BLUE);
// Задать цвет символов
textcolor(RED);
// Окрасить окно установленным цветом
clrscr();
// Коэффициенты a, b, c
int a,b,c;
// Курсор в позицию (1,3)
gotoxy (1,3);
printf (“Введите коэффициенты a b c >”);
// Ввод данных
scanf (“%d%d%d”,&a&b&c);
// Вычисление дискриминанта
float d = b*b-4*a*c;
// Установить окно для вывода результатов
window (5,15,50,20);
textbackground(BLUE);
clrscr();
textcolor(RED);
// Если дискриминант больше 0
if (d>0)
{
// Вычислить корни x1, x2
float x1 = (-b+sqrt(d))/(2*a),
x2 = (-b-sqrt(d))/(2*a);
gotoxy(1,3);
// Печать корней
printf(“Первый корень = %5.2f”,x1);
gotoxy(1,5);
printf(“Второй корень = %5.2f”,x2);
}
// Если корней нет, то вывод сообщения “Корней нет”
else printf (“Корней нет”);
}
Контрольные вопросы.
Какие операторы позволяют сделать выбор между несколькими альтернативами?
Что понимают под логическим выражением?
Чем отличается логическое И от логического ИЛИ?
Какие операции отношения вы знаете?
Чем отличаются между собой операторы if и switch?
Какие функции управления вы знаете?
Лабораторное задание.
Составить программу для своего варианта задания, представленного в таблице. При составлении программы задать любой цвет экрана, запрос на ввод данных осуществить в окно произвольного размера, задав цвет фона окна и цвет символов, отличных от цвета экрана, а также произвести вывод результатов в другое окно произвольного размера и цвета фона окна и цвета символов.
Порядок выполнения лабораторной работы.
При домашней подготовки составить программы решения задачи для своего варианта.
На лабораторной работе набрать текст программы и отладить ее.
Показать результат работы программы преподавателю.
Защитить лабораторную работу.
Требования к отчету.
Отчет должен содержать:
Конспект лабораторной работы с лабораторным заданием.
Программу своего варианта.
Варианты заданий
№ варианта ЗАДАНИЕ 1, 16 Расположить в порядке возрастания значения следующих выражений:
2, 17 По номеру y ( y > 0) некоторого года определить с – номер его столетия. Учесть, что, к примеру, началом XX столетия был 1901, а не1900. 3, 18 Даны произвольные числа a, b, c. Если нельзя построить треугольник с такими длинами сторон, то выдать соответствующее сообщение, а если можно, то напечатать какой он: равносторонний, равнобедренный, разносторонний. 4, 19 Пользуясь оператором switch, по введенному номеру месяца выдать на экран сообщение о времени года и название введенного месяца. Например: 1 - зима, январь. 5, 20 По введенному времени и известному расписанию занятий вывести сообщение о том, что это: пара, с указанием номера, или перемена. 6, 21 Дано a и b. Напечатать максимальное и минимальное из значений выражений с указанием формул, по которым производились вычисления. 7, 22 Пользуясь операторм switch, по введенному номеру месяца, вывести номер квартала. 8, 23 Составить программу, которая по введенному году и номеру месяца определить число дней в этом месяце. 9, 24 Составить программу, которая при вводе символа, выводит текст ”цифра”, если введена цмфра, “латинская буква” при вводе латинской буквы и “и не буква и не латинская буква” во всех остальных случаях. 10, 25 При вводе + выввести сообщение “сложение”,
при вводе - выввести сообщение “сложение”,
при вводе * выввести сообщение “сложение”,
при вводе . выввести сообщение “сложение”,
с указанием формулы и примера сконкретными значениями. 11, 26 Составить программу, которая при вводе символа “{“ или “}” выводит сообщение “фигурная скоюка”, “[” или “]” – “квадратная скобка”, “(” или ”)” – круглая скобка. В остальных случаях – “Не скобка”. 12, 27 Даны произвольные числа a, b, c. Присвоить максимальное из них переменной а, минимальное – переменной с, среднее – переменной b. 13, 28 Составить программу, которая при вводе оценкив виде цифры выводит оценку в буквенном виде: 5 – отлично, 4 – хорошо, 3 – удовлетворительно, 2 – неудовлетворительно. 14, 29 Составить программу, которая выводит введенный возраст человека с добавлением слов “год”, “года”, “лет” (41 год, 3 года, 20 лет). 15, 30 Для заданного числа а найти корень уравнения f(x) = 0, где