МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ивангородский гуманитарно-технический институт (филиал) федерального государственного автономного образовательного учреждения высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ, ИНФОРМАТИКИ И ИНФОРМАЦИОННЫХ ТАМОЖЕННЫХ ТЕХНОЛОГИЙ
|
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
кандидат технических наук, доцент |
|
|
|
Л.Н. Бариков |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №3
|
Операторы ветвления
|
по дисциплине: Основы программирования |
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
Z222K |
|
|
|
А.А. Рахманова |
|
номер группы |
|
подпись, дата |
|
инициалы, фамилия |
|
|
|
|
|
Ивангород 2023
Лабораторная работа №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-ый вариант, и т.д.
Согласно заданию, мой студенческий № 2022/4682, вариант задания №33
Разработка математической модели и схемы алгоритма решения задачи для варианта 33:
Математическая модель (условия принадлежности точек выделенным областям и аналитическое определение площадей выделенных областей)
- условие 1 (принадлежность области М1):
(x+1)2+y2<1 {внутри левой окружности}
х2+у2<1 {внутри центральной окружности}
x2+(y-1)2<1 {внутри верхней окружности}
(x+1)2+(y-1)2<1 {внутри верхней левой окружности}
Площадь области М1:
Для того что бы вычислить площадь необходимо взять треугольник площадь (√3/2×0.5) в окружности, и найти маленький треугольник, его находим так:
1-(√3/2×0.5) + (π/12) *2 = 1-(√3/4+π/6)
Площадь квадрата (1х1) – сектора вне окружности (1-π/4) + 4 маленьких треугольника 4 *(1-(√3/4+π/6)= 1-(1- π/4)+ 4*(1-(√3/4+π/6)= 1+π/3-√3≈0,315
- условие 2 (принадлежность области М2):
(x-1)2+y2<1 {внутри правой окружности}
(x-1)2+(y-1)2<1 {в верхней правой окружности}
x2+y2>1 {вне центральной окружности}
Площадь области М2:
площадь сектора 1200 (πr2/3) – площадь треугольника (√3/2×0.5) + (четверть площади круга (πr2/4) - площадь сектора 1200(πr2/3) + площадь треугольника (√3/2×0.5)) = π/3-√3/2*0.5+( π/4-π/3-√3/2*0.5)= π/3-√3/4+(√3/4 -π/12)=π/4≈ 0.7854
- условие 3 (принадлежность области М3):
(x+1)2+(y+1)2>1 {вне нижней левой окружности}
(x+1)2+(y-1)2>1 {вне верхней левой окружности}
(x+1)2+y2<1 {внутри левой окружности}
х<-1 {левее линии x=-1}
Площадь области М3:
четверть площади круга (πr2/4) - площадь сектора 1200(πr2/3) + площадь треугольника (√3/2×0.5) =(π/4 –π/3+ √3/2×0.5) * 2 =(√3/4 -π/12) * 2 ≈ 0.342
- условие 4 (принадлежность области М4):
x2+y2<1 {в центральной окружности}
(x–1)2+(y-1)2>1 {вне правой верхней окружности}
x2+(y-1)2>1 {вне верхней окружности}
x2+(y+1)2>1 {вне нижней окружности}
0<х<1 {правее линии x=0, левее х=1}
Площадь области М4:
Четверть площади круга (πr2/4) - площадь сектора 1200(πr2/3) + площадь треугольника (√3/2×0.5) - Площадь маленького треугольника (1-(π/6+√3/4))=(π/4-π/3+√3/2*0.5)+1-(π/6+√3/4)= (√3/4- π/12)+1-(π/6+√3/4)= 4-π/4= 1-π/4≈0.2146
- условие 5 (принадлежность области М5):
(x+1)2+(y+1)2<1 {внутри левой нижней окружности}
x2+(y+1)2<1 {внутри нижней окружности}
(x+1)2+y2>1 {вне левой окружности}
x2+y2>1 {вне центральной окружности}
Площадь области М5:
Площадь сектора 120о (πr2/3) – минус площадь треугольника (√3/2*0,5) + маленький треугольник (1-(π/6+√3/4))=π/3-√3/2*0,5+1-(π/6+1√3/4)=π/3-√3/4+1-(π/6+√3/4)≈0.657
Схема алгоритма решения
Начало
Ввод x,
y
усл. 1
да нет
Вывод (.)
в М1
усл. 2
да нет
Вывод (.)
в М2
усл. 3
да нет
i=1
Вывод (.)
в М3
усл. 4
да нет
i=2
Вывод (.)
в М4
усл.
5
да нет
i=3
Вывод вне
зон
Вывод (.)
в М5
i=5
i=4
1
1
i
S1=
1+π/3-√3
1
S2=
π/4
2
S3=
(√3/4
-π/12)*2
3
S4=
1-π/4
4
S5=
π/3-√3/4+1-(π/6+√3/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((x+1) * (x+1) + y*y < 1 && x*x + y*y < 1 && x * x + (y-1) * (y-1) < 1 &&
(x+1) * (x+1) + (y-1)*(y-1) < 1 && y > 0)
{cout << "Точка в области M1. " ; i = 1 ;
}
else if((x-1)*(x-1) + y*y < 1 && (x-1)*(x-1) + (y-1)*(y-1) < 1 && x*x + y*y > 1
&& y > 0)
{cout << "Точка в области М2. " ; i = 2 ;
}
else if((x+1) * (x+1) + (y+1)*(y+1) > 1 && (x+1)*(x+1) * (y-1) * (y-1) < 1
&& (x+1) * (x+1) + y*y < 1 && x < -1)
{cout << "Точка в области М3. " ; i = 3 ;
}
else if(x * x + y * y < 1 && (x - 1) * (x - 1) + (y-1) * (y-1) > 1 &&
x * x + (y + 1) * (y + 1) > 1 && x * x + (y - 1) * (y - 1) > 1 && 0 < x && x < 1 )
{cout << "Точка в области М4. " ; i = 4 ;
}
else if((x+1) * (x+1) + (y+1) * (y+1) < 1 && x * x + (y+1) * (y+1) < 1 &&
(x+1) * (x+1) + y*y >1 && x*x + y*y > 1)
{cout << "Точка в области М5. " ; i = 5 ;
}
else cout << "Точка вне выделенных областей" ;
cout.precision(4); //число знаков после дес. точки
switch(i)
{ case 1: cout << "S1 = " << (s1 = 1 + M_PI/3 - sqrt(3)) ; //1+1/3π-√3
break ;
case 2: cout << "S2 = " << (s2 = M_PI/4 ) ; //π/4
break ;
case 3: cout << "S3 = " << (s3 = (sqrt(3)/4 - M_PI/12) * 2 ) ; //(√3/4 -π/12) * 2
break ;
case 4: cout << "S4 = " << (s4 = 1 - M_PI/4) ; //1-π/4
break ;
case 5: cout << "S5 = " << (s5 = M_PI/3 - sqrt(3)/4 + 1 - ( M_PI/6 + sqrt(3)/4) ) ; //π/3-√3/4+1-(π/6+√3/4)
}
cout << "\n Повторить-1, Выход-2: " ;
cin >> i ;
if (i == 1) main() ;
return 0 ;
}
Скриншот результатов выполнения программы