Добавил:
anrakhmanowa@yandex.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 сем / ИСПРАВЛЕННАЯ Рахманова_А.А._Лабораторная_работа3операторыветвл

.docx
Скачиваний:
11
Добавлен:
16.06.2023
Размер:
166.14 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Ивангородский гуманитарно-технический институт (филиал) федерального государственного автономного образовательного учреждения высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ, ИНФОРМАТИКИ И ИНФОРМАЦИОННЫХ ТАМОЖЕННЫХ ТЕХНОЛОГИЙ

ОЦЕНКА

ПРЕПОДАВАТЕЛЬ

кандидат технических наук, доцент

Л.Н. Бариков

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №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 {внутри левой окружности}

х22<1 {внутри центральной окружности}

y>0 {выше оси х}

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 {вне центральной окружности}

y>0 {выше оси x}

Площадь области М2:

площадь сектора 1200 (πr2/3) – площадь треугольника (√3/2×0.5) + площадь маленького треугольника (π/12) = π/3-√3/2*0.5+π/12= π/3-√3/4+π/12=1,05-0,433+0,261≈0.876

- условие 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:

Площадь среднего треугольника (π/12) + Площадь маленького треугольника(1-(π/6+√3/4))=π/12+1-(π/6+√3/4)=π/12+1-(π/6+√3/4)≈0.3052

- условие 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.656

Схема алгоритма решения

Начало

Ввод

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=1+π/3-√3

1

S2= π/3-√3/4+π/12

2

S3=(√3/4 -π/12)*2

3

S4= π/12+1-(π/6+√3/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/3 -  sqrt(3)/4 + M_PI / 12) ;//π/3-√3/4+π/12

            break ;      

        case 3: cout << "S3 = " << (s3 = (sqrt(3)/4 - M_PI/12) * 2 ) ;//(√3/4 -π/12) * 2

            break ;

        case 4: cout << "S4 = " << (s4 = M_PI / 12 + 1 - ( M_PI/6 + sqrt(3)/4)) ;//π/12+1-(π/6+√3/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 ;

}

Скриншот результатов выполнения программы