Санкт-Петербургский государственный
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра Вычислительной техники
отчет
по лабораторной работе №1
по дисциплине «Программирование»
Тема: Разветвленные алгоритмы и программы
Вариант : 22
Студент гр.6305 | Побежимов.А.А | . |
Преподаватель | Павлов.С.М |
Санкт-Петербург
2016
Цель работы.
Разработка разветвляющегося алгоритма и программы
Оглавление
Алгоритм.. 3
Пояснения к алгоритму : 4
Проверка алгоритма : 5
Код программы : 6
Примеры запуска: 8
Пояснения к алгоритму :
Переменные : xo – координата x центра окружности
xa - координата x первой точки прямой
xb – координата x второй точки прямой
xc – координата x проверяемой точки
yo - координата y центра окружности
ya - координата y первой точки прямой
yb - координата y второй точки прямой
yc - координата y проверяемой точки
d – диаметр окружности
z – расстояние от проверяемой точки до окружности
stop – для остановки программы
1)Уменьшаем все координаты (кроме xo и yo ) на xo и yo , для смещения центра координат.
2)Если Sqrt(xc^2+yc^2) больше радиуса , то точка за пределами . Если равно радиусу , то на окружности . Если меньше то внутри.
3)Расстояние до окружности равно Sqrt(xc^2+yc^2)
4)Если (Xc-xa)(yb-ya)-(yc-ya)(xb-xa) больше нуля , то точка ниже линии. Если равно , то на линии . Если больше , то ниже линии.
Проверка алгоритма :
При переменных : xo = 0 yo = 0 xa = -3 ya = -2 xb = 3 yb = 1 xc = -1 yc = 1 d = 8 Результаты : Точка внутри окружности ; z = 2.58579 ; Точка выше линии
При переменных : xo = 0 yo = 0 xa = -3 ya = -2 xb = 3 yb = 1 xc = 2 yc = -2 d = 8 Результаты : Точка внутри окружности; z = 1.17157 ; Точка ниже линии
При переменных : xo = 0 yo = 0 xa = -3 ya = -2 xb = 3 yb = 1 xc = 3 yc = 1 d = 8 Результаты : Точка внутри окружности; z = 0.837722 ; Точка на линии
При переменных : xo = 0 yo = 0 xa = -3 ya = -2 xb = 3 yb = 1 xc = 4 yc = 0 d = 8 Результаты : Точка на окружности; z = 0; Точка ниже линии
При переменных : xo = 0 yo = 0 xa = -3 ya = -2 xb = 3 yb = 1 xc = 5 yc = 0 d = 8 Результаты : Точка за окружностью; z = 1; Точка ниже линии
Код программы :
// ConsoleApplication6.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
float x0,y0,d,xa,ya,xb,yb,xc,yc,z,stop;
stop = 1;
while (stop != 0){
cout << "Введите координату x у 1 точки линии \n";
cin >> xa;
cout << "Введите координату x у 2 точки линии \n";
cin >> xb;
cout << "Введите координату x у точки\n";
cin >> xc;
cout << "Введите координату y у 1 точки линии \n";
cin >> ya;
cout << "Введите координату y у 2 точки линии \n";
cin >> yb;
cout << "Введите координату y у точки\n";
cin >> yc;
cout << "Введите координату x центра окружности\n";
cin >> x0;
cout << "Введите координату y центра окружности\n";
cin >> y0;
cout << "Введите диаметр окружности\n";
cin >> d;
xa = xa - x0;
xb = xb - x0;
xc = xc - x0;
ya = ya - y0;
yb = yb - y0;
yc = yc - y0;
if (sqrt((xc*xc) + (yc*yc))>(d / 2))
{
cout << "Точка за территорией\n";
z = sqrt((xc*xc) + (yc*yc)) - (d / 2);
if (z < 0) z = z*(-1);
}
else if (sqrt((xc*xc) + (yc*yc)) == (d / 2)) {
cout << "Точка на границе\n";
z = 0;
}
else {
cout << "Точка на территории\n";
z = sqrt((xc*xc) + (yc*yc)) - (d / 2);
if (z < 0) z = z*(-1);
}
cout << "Расстояние равно\n";
cout << z;
cout << "\n";
if ((xc - xa)*(yb - ya) - (yc - ya)*(xb - xa) > 0)
cout << "Точка ниже линии\n";
else if ((xc - xa)*(yb - ya) - (yc - ya)*(xb - xa) == 0)
cout << "Точка на линии\n";
else cout << "Точка выше линии\n";
cout << "Введите любое число кроме 0 для продолжения\n";
cin >> stop;
}
return 0;
}
Примеры запуска:
.