Министерство образования и науки Российской Федерации
Филиал федерального государственного образовательного учреждения высшего образования
“Национальный исследовательский технологический университет МИСиС” в городе Алмалык
Лабораторная работа
По дисциплине: «ОПИА»
Программирование алгоритмов разветвляющейся структуры в языке C++. Условные операторы
Выполнил: Холхожаев Хусанхожа
Группы: 1з-22 ГД
Принял: проф. Уринов Ш.Р.
Алмалык - 2022 год
Цель работы и содержание: приобретение навыков программирования разветвляющихся алгоритмов. Освоить операторы if и switch языка C++, позволяющие реализовывать разветвляющиеся алгоритмы.
Ход работы:
Алгоритм разветвляющейся структуры - это алгоритм, в котором вычислительный процесс осуществляется либо по одной, либо по другой ветви, в зависимости от выполнения некоторого условия. Программа разветвляющейся структуры реализует такой алгоритм. В программе разветвляющейся структуры имеется один или несколько условных операторов.
Логическое выражение - некоторое утверждение, относительно которого можно сказать: истинно оно или ложно.
В языке C++ любое выражение, равное нулю, считается ложным, тогда как любое выражение не равное нулю будет истинным.
В C++ используются шесть операторов отношения (табл.), позволяющих сравнивать между собой значения числовых переменных, а также значение переменной и константы.
Таблица 1. Операторы отношения в языке С++
|
a=b |
равно |
a=b |
|
|
a>b |
больше |
a>b |
|
|
a<b |
меньше |
a<b |
|
|
a?b |
больше или равно |
a>=b |
|
|
a?b |
меньше или равно |
a<=b |
|
|
a?b |
не равно |
a!=b |
Условия, которые составлены с использованием одного оператора сравнения, называются простыми условиями. Общий вид:
<выражение> <оператор_сравнения> <выражение>
Из простых условий, которые являются выражениями логического типа, можно строить составные условия. В этом случае простые условия необходимо связывать при помощи логических операций: !(не), &&(и), ||(или).
Операция логического И (&&).
<условие 1> && <условие 2>
пример: x > 10 && x < 20
Операция логического ИЛИ (||).
<условие 1> || <условие 2>x = = 1.2 || x = = 2.3 || x = = 3.4
Операция логического НЕ (!)
!<условие>
Условный оператор (оператор if).
Условный оператор if используется для разветвления процесса вычислений на два направления.
Условный оператор в языке C++ имеет формат:
if(<Условие>) <Оператор>;
Если помимо тех действий, которые требуется выполнить, когда заданное условие истинно, требуется исполнить и ряд действий, когда заданное условие ложно, то применяют следующую форму условного оператора:
if(<Условие>) <Оператор_1>; else <Оператор_2>;
Примеры:
if (a<0) b = 1; // 1
if (a<b && (a>d||a==0)) b++;
else
{
b*=a;
a=0;
} // 2
if (a<b)
{
if (a<c) m = a;
else m = c;
}
else
{
if (b<c) m = b;
else m = c;
} // 3
if (a++) b++; // 4
if (b>a) max = b;
else max = a; // 5
Переключатель (оператор switch).
Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений. Переключатель является наиболее удобным средством для организации мультиветвления. Синтаксис переключателя таков:
switch(Выражение)
{
case Константа_1: Операторы_1;
case Константа_2: Операторы_2;...
case Константа_n: Операторы_n;
default: Операторы_(n+1);
}
Кроме сказанного о возможностях переключателя, приведенная программа иллюстрирует действие оператора break.
С его помощью выполняется выход из переключателя. Если поместить операторы break после вывода каждой цифры, то программа будет печатать название только одной нечетной цифры.
switch(Выражение)
{
case Константа_1: Операторы_1; break;
case Константа_2: Операторы_2; break;...
case Константа_n: Операторы_n; break;
default: Операторы_(n+1); break;
}
Методика и порядок выполнения работы.
Перед выполнением лабораторной работы каждый студент получает индивидуальное задание. Защита лабораторной работы происходит только после его выполнения (индивидуального задания). При защите лабораторной работы студент отвечает на контрольные вопросы, приведенные в конце, и поясняет выполненное индивидуальное задание. Ход защиты лабораторной работы контролируется преподавателем.
Порядок выполнения работы:
1. Проработать примеры, приведенные в лабораторной работе.
2. Номер варианта - это номер студента по списку преподавателя.
Индивидуальное задание № 1
Постановка задачи: Написать программу с использованием конструкции ветвления для вычисления значения функции:
Теперь напишем программу для вычисления значения функции.
Листинг:
// Лабораторная работа № 2
// Индивидуальное задание № 1// Саидов Умид, 1з-22 ГД#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double x, y;
cout << "Vvedite x =: ";
cin >> x;
if (х ?(-3) )
y=log10(x)*sin(3*x);
else
if (x = 7.7)
y = pow(x*x*x*x*x-1,1/5);
else
if (x < 7.7)
y = 1+cos(2*x)*cos(2*x)*cos(2*x)-3*sin(3*x)*sin(3*x);
cout << "y(x = " << x << ") = " << y;
getchar();getchar();getchar();
return 0;
}
Ответ программы:
Индивидуальное задание № 2
Постановка задачи:Написать программу вывода нечетных чисел, не меньших чем введенное с клавиатуры число от 0 до 9.
Листинг:
// Лабораторная работа № 2
// Индивидуальное задание № 2// Холхожаев Хусанхожа 1з-22 ГД#include <iostream>
using namespace std;
int main ()
{
int ic;
cout << "\n Vvedite lyubuyu desyatichniyu sifru:";
cin >> ic;
cout << endl;
switch(ic)
{
case 0: case 1: cout << "odin,";
case 2: case 3: cout << "tri,";
case 4: case 5: cout << "Pyat,";
case 6: case 7: cout << "Sem,";
case 8: case 9: cout << "Devyat,"; break;
// vixod iz pereklyuchatelya
default: cout << "Oshibka! Eto ne vxodit interval [0;9] \n"; break;
// kones pereklyuchatelya
}
getchar(); getchar();
return 0;
}
Ответ программы:
Индивидуальное задание № 3
Постановка задачи: Составить блок-схему алгоритма и программу с использованием переключателя и вывести наименование времени года по вводимому с клавиатуры номеру месяца от 1 до 12.
Программа решения поставленной задачи:
Листинг:
// Лабораторная работа № 2
// Индивидуальное задание № 3// Холхожаев Хусанхожа 1з-22 ГД#include <iostream>
using namespace std;
int main ()
{
int n;
cout << "\n Vvedite nomer mesyasa:";
cin >> n;
cout << "Vremya goda ";
switch(n)
{
case 1: case 2: case 12: cout << " Zima"; break;
case 3: case 4: case 5: cout << " Vesna"; break;
case 6: case 7: case 8: cout << " Leto"; break;
case 9: case 10:case 11: cout << " Osen"; break;
default: cout << "Oshibka! \n"; break;
// kones pereklyuchatelya
}
getchar(); getchar();
return 0;
}
Ответ программы:
Вопросы для защиты работы:
1. Какой алгоритм является алгоритмом разветвляющейся структуры?
2. Чем отличается разветвляющийся алгоритм от линейного?
3. Что такое условный оператор? Какие существуют его формы?
4. Что такое составной оператор? Каков формат его записи?
5. Какие операторы сравнения используются в Си?
6. Что называется простым условием? Приведите примеры.
7. Что такое составное условие? Приведите примеры.
8. Какие логические операторы допускаются при составлении сложных условий?
9. Может ли оператор ветвления содержать внутри себя другие ветвления?
10. Что такое множественный выбор?
11. В каких случаях применяется переключатель?
12. Зачем ставится в переключателе оператор break?
13. Зачем в переключателе употребляется зарезервированное слово default?
Содержание отчета и его форма.
Отчет по лабораторной работе должен состоять из:
1. Названия лабораторной работы.
2. Цели и содержания лабораторной работы.
3. Ответов на контрольные вопросы лабораторной работы.
4. Формулировки индивидуальных заданий и порядка их выполнения.
Отчет о выполнении лабораторной работы в письменном виде сдается преподавателю.
Индивидуальное задание № 1
ВАРИАНТ
26) 1
27) 2
….
Индивидуальное задание № 2
ВАРИАНТ:
1) Дано натуральное число n > 100. Вывести на экран фразу «Мне n лет», учитывая, что при некоторых значениях n слово «лет» надо заменить на слово «год» или «года».
2) Дано число m (1 ? m ? 12). Определить, сколько дней в месяце с номером m.
3) Дано число m (1 ? m ? 7). Вывести на экран название дня недели, который соответствует этому номеру.
4) С клавиатуры вводится натуральное число n. В зависимости от значения остатка r при делении числа n на 7 вывести на экран число n в виде n = 7 · k + r.
5) С клавиатуры вводится цифра m (от 1 до 4). Вывести на экран названия месяцев, соответствующих времени года с номером m (считать зиму временем года № 1).
6) Дано целое число С такое, что С < 9. Вывести это число в словесной форме, учитывая его знак.
7) С клавиатуры вводится цифра m (от 1 до 12). Вывести на экран название месяца, соответствующего цифре.
8) Дано число m (1 ? m ? 12). Определить полугодие, на которое приходится месяц с номером m и количество дней в том месяце (год не високосный).
9) Вводится число экзаменов N ? 20. Напечатать фразу “Мы успешно сдали N экзаменов”, согласовав слово “экзамен” с числом N.
10) Вводится число карандашей N ? 10. Вывести фразу "Я купил N карандашей", согласовав слово "карандаш" с числом N.
11) Компания по снабжению электроэнергией взимает плату с клиентов по тарифу:
- 7 р. за 1 кВт/ч за первые 250 кВт/ч;
- 17 р. за кВт/ч, если потребление свыше 250, но не превышает 300 кВт/ч;
- 20 р. за кВт/ч, если потребление свыше 300 кВт/ч.
Потребитель израсходовал n кВт/ч. Подсчитать плату.
12) При покупке товара на сумму от 200 до 500 руб. предоставляется скидка 3%, при покупке товара на сумму от 500 до 800 - скидка 5%, при покупке товара на сумму от 800 до 1000 руб. - скидка 7%, свыше 1000 руб. - скидка 9%. Покупатель приобрел 8 рулонов обоев по цене 1 и две банки краски по цене 2. Сколько он заплатил?
13) Студенты убирают урожай помидоров. При сборе до 50 кг в день работа оплачивается из расчета 30 коп. за 1 кг; при сборе от 50 до 75 кг в день - 50 коп. за 1 кг; при сборе от 75 до 90 кг в день - 65 коп. за 1 кг; при сборе свыше 90 кг в день - 70 коп. за 1 кг плюс 20 руб. премия. Студент собрал X кг за день. Определить его заработок.
14) 1
15) 2
….
27) 1
28) 2
….
Индивидуальное задание № 3
ВАРИАНТ:
1) В японском календаре был принят 60-летний цикл, состоящий из пяти 12-летних подциклов. Внутри подцикла года носили названия животных мыши, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. Попарно года в подцикле обозначались названиями цвета: зеленый, красный, желтый, белый и черный. По номеру года определить его название по японскому календарю, считая за начало очередного цикла 1984 год - год зеленой мыши (1985 - год зеленой коровы, 1986 - год красного тигра, 1987 - год красного зайца и т.д.).
2) Даны действительные числа x и y. Найти U = max2(x2y,xy2) + min2(x -y, x + 2y).3) Из трех действительных чисел a, b и c выбрать те, модули которых не меньше 4.
4) Напечатать три данных действительных числа a, b и с сначала в порядке их возрастания, затем - в порядке убывания.
5) Определить принадлежит ли точка (a,b) кольцу определяемому окружностями x2 + y2 = 1 и x2 + y2 = 0.25.
6) Решить квадратное неравенство ax2 + bx + c > 0 (?0), где a, b и с -действительные числа.
7) Провести исследование биквадратного уравнения ax4 + bx2 + c = 0 (?0), где a, b и с - действительные числа. Если действительных корней нет, то об этом должно быть выдано сообщение, иначе должны быть выданы 2 или 4 действительных корня.8) Решить неравенство > x ? 2 , где a - произвольное действительное число.
9) Найти координаты точки пересечения прямых, заданных уравнениями a1x+b1y+c1=0 и a2x+b2y+c2=0, либо сообщить - совпадают, параллельны или не существуют.
10) Вывести на экран большее из трех заданных чисел.
11) Определить, есть ли среди трех заданных чисел четные.
12) Две окружности заданы координатами центра и радиусами. Сколько точек пересечения имеют эти окружности?
13) Составить программу, выясняющую делится ли натуральное число на целое, на натуральное число.
14) Составить программу нахождения из трех чисел наибольшего и наименьшего.
15) Составить программу решения квадратного уравнения.
16) Даны три действительных числа. Составить программу, выбирающую из них те, которые принадлежат интервалу (0,1).