Лабораторная работа №3
Операторы ветвления
Цель лабораторной работы: приобретение навыков структурного программирования на языке C/C++ при решении задач с использованием операторов ветвления if и switch.
Задание на программирование: используя технологию структурного программирования разработать программу для решения индивидуальной задачи по определению места нахождения точки с произвольно заданными координатами на координатной плоскости. В случае если точка попадает в одну их выделенных областей, программа должна определять площадь этой области по аналитической формуле.
При решении должны быть использованы условный оператор if и оператор-переключатель switch.
Порядок выполнения работы:
1. Получить у преподавателя индивидуальное задание и выполнить постановку задачи: сформулировать условие, определить входные и выходные данные.
2. Разработать математическую модель:
- привести уравнения линий, ограничивающих выделенные штриховкой области;
- описать условия попадания точки в каждую выделенную область;
- составить аналитические формулы определения площади каждой выделенной области.
3. Построить схему алгоритма решения задачи.
4. Составить программу на языке C/C++.
5. Входные данные должны вводиться с клавиатуры по запросу.
Выходные данные (сообщения) должны выводиться на экран в развернутой форме.
6. Использовать стандартные потоковые объекты ввода/вывода cin и cout.
7. Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов.
8. Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения задачи, текст программы, контрольные примеры (скриншоты).
9. Вариант задания определяется как две последних цифры номера зачетной книжки (цц), взятых по модулю 50, плюс 1 (цц mod 50 + 1). Например, 00 – 1-й вариант, 01 – 2-ой вариант, 49 – 50-ый вариант, 60 – 11-ый вариант, и т.д.
Варианты индивидуальных заданий
1. 2.
3. 4.
5. 6.
7. 8.
9. 10.
11. 12.
13. 14.
15. 16.
17. 18.
19. 20.
21. 22.
23. 24.
25. 26.
27. 28.
29. 30.
31. 32.
33. 34.
35. 36.
37. 38.
39. 40.
41. 42.
43. 44.
45. 46.
47. 48.
49. 50.
Пример разработки математической модели и схемы алгоритма решения задачи для варианта задания вида:
Математическая модель (условия принадлежности точек выделенным областям и аналитическое определение площадей выделенных областей)
- условие 1 (принадлежность области М1):
(x-1)2+y2>1 {вне правой окружности}
x<2 {левее линии x=2}
x>1 {правее линии x=1}
y>0 {выше линии y=0}
y<2 {ниже линии y=2}
Площадь области М1:
площадь прямоугольника (2×1)–площадь четверти круга (πr2/4)=2–π/4≈1.2146
- условие 2 (принадлежность области М2):
(x+1)2+y2>1 {вне левой окружности}
x>-2 {правее линии x=-2}
y<1 {ниже линии y=1}
x<-1 {левее линии x=-1}
y>0 {выше оси x}
Площадь области М2:
площадь квадрата (1×1)–площадь четверти круга (πr2/4)=1–π/4≈0.2146
- условие 3 (принадлежность области М3):
(x+1)2+y2<1 {внутри левой окружности}
x2+y2<1 {внутри центральной окружности}
y>0 {выше оси x}
Площадь области М3:
площадь сектора 1200 (πr2/3) – площадь треугольника ( /2×0.5)=
π/3– /2×0.5=π/3– /4=0.6142
- условие 4 (принадлежность области М4):
x2+y2>1 {вне центральной окружности}
(x–1)2+y2<1 {внутри правой окружности}
x2+(y+1)2<1 {внутри нижней окружности}
Площадь области М4:
площадь квадрата (1×1) - четверть площади круга (πr2/4) – 2×(площадь прямоугольника (1×(1- /2)) – площадь сектора 600 (πr2/6) + площадь треугольника ( /2×0.5))=1-π/4–2×(1- /4-π/6)= /2+π/3-π/4–1≈0.1278
- условие 5 (принадлежность области М5):
x2+(y+1)2>1 {вне нижней окружности}
y>-2 {выше линии y=-2}
y<-1 {ниже линии y=-1}
x>-1 {правее линии x=-1}
x<0 {левее оси y}
Площадь области М5:
площадь квадрата (1×1) – площадь четверти круга (πr2/4)=1–π/4≈0.2146
Схема алгоритма решения
Начало
Ввод
x, y
усл. 1
да нет
Вывод
(.) в М1
усл. 2
да нет
усл. 3
Вывод
(.) в М2
да нет
i=1
усл. 4
Вывод
(.) в М3
да нет
i=2
усл. 5
Вывод
(.) в М4
да нет
Вывод
(.) в М5
Вывод
вне зон
i=3
i=4
i=5
1
1
i
S1=2-π/4
1
S2=1-π/4
2
S3=π/3- /4
3
S4= /2+π/12-1
4
S5=1-π/4
5
Конец
Текст программы
//Определение номера области, в которую попадает точка с произвольно
//заданными координатами на плоскости, и площади этой области
#include<iostream>
#include<math.h>
#include<locale.h>
#include<limits.h>
using namespace std ;
int main()
{int i = 0 ; //номер области на рисунке
float x, y, //координаты точки
s1, s2, s3, s4, s5 ; //площади областей
setlocale(LC_ALL,"Russian") ;
cout << "\nВведите координаты точки: x, y " ;
cin >> x >> y ;
if(y > 0 && y < 2 && x > 1 && x < 2 && (x - 1) * (x – 1) + y * y >1)
{cout << "Точка в области M1. " ; i = 1 ;
}
else if(x > -2 && y < 1 && x < -1 && y > 0 &&
(x + 1) * (x + 1) + y * y > 1)
{cout << "Точка в области М2. " ; i = 2 ;
}
else if((x+1) * (x+1) + y * y < 1 && x * x + y * y < 1 && y > 0)
{cout << "Точка в области М3. " ; i = 3 ;
}
else if(x * x + y * y > 1 && (x - 1) * (x - 1) + y * y < 1 &&
x * x + (y + 1) * (y + 1) < 1)
{cout << "Точка в области М4. " ; i = 4 ;
}
else if(y < -1 && y > -2 && x < 0 && x > -1 &&
x * x + (y + 1) * (y + 1) > 1)
{cout << "Точка в области М5. " ; i = 5 ;
}
else cout << "Точка вне выделенных областей" ;
cout.precision(4); //число знаков после дес. точки
switch(i)
{case 1: cout << "S1 = " << (s1 = 2 - M_PI / 4) ;
break ;
case 2: cout << "S2 = " << (s2 = 1 - M_PI / 4) ;
break ; case 3: cout << "S3 = " << (s3 = M_PI/3 – sqrt(3)/4) ;
break ;
case 4: cout << "S4 = " << (s4 = sqrt(3)/2 + M_PI/3 - M_PI/4-1) ;
break ;
case 5: cout << "S5 = " << (s5 = 1 - M_PI / 4) ;
}
cout << "\n Повторить-1, Выход-2: " ;
cin >> i ;
if (i == 1) main() ;
return 0 ;
}
Скриншот результатов выполнения программы