Добавил:
t.me Установите расширение 'SyncShare' для решения тестов в LMS (Moodle): https://syncshare.naloaty.me/ . На всякий лучше отключить блокировщик рекламы с ним. || Как пользоваться ChatGPT в России: https://habr.com/ru/articles/704600/ || Также можно с VPNом заходить в bing.com через Edge браузер и общаться с Microsoft Bing Chat, но в последнее время они форсят Copilot и он мне меньше нравится. || Студент-заочник ГУАП, группа Z9411. Ещё учусь на 5-ом курсе 'Прикладной информатики' (09.03.03). || Если мой материал вам помог - можете написать мне 'Спасибо', мне будет очень приятно :) Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы / z9411_КафкаРС_лр_2

.docx
Скачиваний:
7
Добавлен:
18.05.2022
Размер:
174.62 Кб
Скачать

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

      1. федеральное государственное автономное образовательное учреждение высшего образования

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

(ГУАП)

КАФЕДРА № 44

Преподаватель

канд. техн. наук, доцент Бариков Л. Н.

Отчёт

по лабораторной работе №2

по дисциплине ОСНОВЫ ПРОГРАММИРОВАНИЯ

на тему: «Операторы ветвления»

Работу выполнил

студент гр. Z9411 Кафка Р. С.

Санкт-Петербург

2020

Лабораторная работа №2

Операторы ветвления

Цель лабораторной работы: приобретение навыков структурного программирования на языке 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-ый вариант, и т.д.

Вариант №4. (студ. билет 2019/3603)

Разработка математической модели и схемы алгоритма решения задачи для 4 варианта задания вида:

Математическая модель (условия принадлежности точек выделенным областям и аналитическое определение площадей выделенных областей)

- условие 1 (принадлежность области М1):

(x+1)2+(y-1)2<1 {внутри левой верхней окружности}

x2+(y-1)2<1 {внутри верхней окружности}

(x+1)2+y2>1 {вне левой окружности}

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

площадь сектора 1200 (πr2/3) – площадь треугольника ( /2×0.5) + четверть площади круга (πr2/4) - (площадь сектора 1200 (πr2/3) - площадь треугольника ( /2×0.5)) = π/3– /2×0.5 + π/4 – (π/3- /2×0.5) = π/4 ≈ 0.7853

- условие 2 (принадлежность области М2):

x2+(y-1)2<1 {внутри верхней окружности}

(x-1)2+y2<1 {внутри правой окружности}

x2+y2>1 {вне центральной окружности}

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

площадь квадрата (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

- условие 3 (принадлежность области М3):

(x-1)2+y2<1 {внутри правой окружности}

(x-1)2+(y-1)2>1 {вне правой верхней окружности}

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

x>1 {правее линии x=1}

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

четверть площади круга (πr2/4) - (площадь сектора 1200 (πr2/3) – площадь треугольника ( /2×0.5)) = π/4 – π/3+ /2×0.5 = /4 - π/12 ≈ 0.1712

- условие 4 (принадлежность области М4):

(x+1)2+(y+1)2<1 {внутри левой нижней окружности}

(x+1)2+y2>1 {вне левой окружности}

x<-1 {левее линии x=-1}

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

четверть площади круга (πr2/4) + четверть площади круга (πr2/4) - (площадь сектора 1200 (πr2/3) – площадь треугольника ( /2×0.5)) = π/4+π/4 – π/3+ /2×0.5 = π/6 + /4 ≈ 0.9566

- условие 5 (принадлежность области М5):

(x-1)2+(y+1)2<1 {внутри правой нижней окружности}

(x-1)2+y2>1 {вне правой окружности}

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

половина площади круга (πr2/2) + 2*(четверть площади круга (πr2/4) - (площадь сектора 1200 (πr2/3) – площадь треугольника ( /2×0.5))) = π/2+2*(π/4 – π/3+ /2×0.5) = π/3 + /2 ≈ 1.9132

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

Начало

Ввод

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=π/4

1

S2= /2+π/12-1

2

S3= /4 - π/12

3

S4=π/6 + /4

4

S5= π/3 + /2

5

Конец

Текст программы

//Определение номера области, в которую попадает точка с произвольно заданными

//координатами на плоскости, и площади этой области

#define _USE_MATH_DEFINES //для определения значения M_PI

#include<iostream>

#include<math.h>

#include<locale.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 - 1) * (y - 1) < 1 &&

x * x + (y - 1) * (y - 1) < 1 &&

(x + 1) * (x + 1) + y * y > 1)

{

cout << "Точка в области M1. "; i = 1;

}

else if (x * x + (y - 1) * (y - 1) < 1 &&

(x - 1) * (x - 1) + y * y < 1 &&

x * x + y * y > 1)

{

cout << "Точка в области М2. "; i = 2;

}

else if ((x - 1) * (x - 1) + y * y < 1 &&

(x - 1) * (x - 1) + (y - 1) * (y - 1) > 1 &&

y > 0 && x > 1)

{

cout << "Точка в области М3. "; i = 3;

}

else if ((x + 1) * (x + 1) + (y + 1) * (y + 1) < 1 &&

(x + 1) * (x + 1) + y * y > 1 &&

x < -1)

{

cout << "Точка в области М4. "; i = 4;

}

else if ((x - 1) * (x - 1) + (y + 1) * (y + 1) < 1 &&

(x - 1) * (x - 1) + y * y > 1)

{

cout << "Точка в области М5. "; i = 5;

}

else cout << "Точка вне выделенных областей";

cout.precision(4); //число знаков после дес. точки

switch (i)

{

case 1: cout << "S1 = " << (s1 = M_PI / 4);

break;

case 2: cout << "S2 = " << (s2 = sqrt(3) / 2 + M_PI / 3 - M_PI / 4 - 1);

break;

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

break;

case 4: cout << "S4 = " << (s4 = M_PI / 6 + sqrt(3) / 4);

break;

case 5: cout << "S5 = " << (s5 = M_PI / 3 + sqrt(3) / 2);

}

cout << "\n Повторить-1, Выход-2: ";

cin >> i;

if (i == 1) main();

return 0;

}

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