Задача 14) Заданы координаты вершин треугольника. Определить, является ли этот треугольник равнобедренным, равносторонним, прямоугольным

Российская Федерация

Тюменская область

ХАНТЫ-МАНСИЙСКИЙ АВТОНОМНЫЙ ОКРУГ – ЮГРА

Департамент образования и науки

Сургутский государственный университет

Ханты-Мансийского автономного округа

 

 

  Инженерно-физический факультет Кафедра автоматики и компьютерных систем

 

 

Отчет

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

По дисциплине «Структурное программирование»

 

 

Выполнил: студент группы 12-11а

Гильмияров Р.Р.

Проверил: ассистент

Щербаков А.М.

 

Сургут

2012 г.

Задача 14) Заданы координаты вершин треугольника. Определить, является ли этот треугольник равнобедренным, равносторонним, прямоугольным.

1) Для решения данной задачи нам понадобятся исходные данные: координаты xиyвершин треугольника.

Длина стороны находится по формуле:

Проверка на прямоугольность проводится с использованием теоремы Пифагора (если сумма квадратов двух длин сторон равна квадрату длины третьей, то треугольник является прямоугольным).

Треугольник является равносторонним, если длины всех его сторон равны.

Треугольник является равнобедренным, если длины двух его сторон равны.

2) Блок-схема:

“Треугольник равносторонний”
Да
Нет
AB=BC=CA;
“Треугольник прямоугольный”
Нет
Да
AB2+BC2=CA2 || AB2+CA2=BC2|| BC2+CA2=AC2||
AB=sqrt((bx-ax)2+(by-ay)2); BC=sqrt((cx-bx)2+(cy-by)2); CA=sqrt((ax-cx)2+(ay-cy)2);
Запрос и получение исходных данных
Начало

 

AB=BC || BC=CA || AB=CA ||
Нет
Да
“Треугольник равнобедренный”
“Треугольник произвольный”
Конец

 

 


3) Основная часть программы на языке C++:

#include "stdafx.h"

#include "math.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

float ax,ay,bx,by,cx,cy,AB,BC,CA;

bool b=false;

printf("Koordinata A x: ");

scanf("%f",&ax);

printf("Koordinata A y: ");

scanf("%f",&ay);

printf("Koordinata B x: ");

scanf("%f",&bx);

printf("Koordinata B y: ");

scanf("%f",&by);

printf("Koordinata C x: ");

scanf("%f",&cx);

printf("Koordinata C y: ");

scanf("%f",&cy);

AB=sqrt((bx-ax)*(bx-ax)+(by-ay)*(by-ay));

BC=sqrt((cx-bx)*(cx-bx)+(cy-by)*(cy-by));

CA=sqrt((ax-cx)*(ax-cx)+(ay-cy)*(ay-cy));

if (((ax==bx)&&(ay==by))||((bx==cx)&&(by==cy))||((cx==ax)&&(cy==ay)))

{

printf("\nTakogo treugol'nika ne suschestvuet\n");

return 0;

}

if (((AB*AB+BC*BC-CA*CA)<0.001) || ((AB*AB+CA*CA-BC*BC)<0.001) || ((BC*BC+CA*CA-AB*AB)<0.001))

{

printf("\nTreugol'nik priamougol'niy");

b=true;

}

if ((abs(AB-BC)<0.001) && (abs(BC-CA)<0.001))

{

printf("\nTreugol'nik ravnostoronniy\n");

return 0;

}

if ((abs(AB-BC)<0.001) || (abs(AB-CA)<0.001) || (abs(BC-CA)<0.001))

{

printf("\nTreugol'nik ravnobedrenniy\n");

b=true;

}

if (b==false)

{

printf("\nTreugol'nik proizvol'niy");

}

return 0;

}

4) Обоснование выбора условных операторов:

Конструкция для проверки на совпадение точек:

if (((ax==bx)&&(ay==by))||((bx==cx)&&(by==cy))||((cx==ax)&&(cy==ay)))

Если обе координаты двух точек совпадают, то треугольник «трансформируется» в отрезок. Для предотвращения данной ситуации используется проверка условия:

Если координаты (xи y) точек Aи B попарносовпадают (аналогично с точками Bи C, Aи C), это означает, что точки накладываются друг на друга.

Конструкция для проверки на прямой угол:

if (((AB*AB+BC*BC-CA*CA)<0.001) || ((AB*AB+CA*CA-BC*BC)<0.001) || ((BC*BC+CA*CA-AB*AB)<0.001))

Если AB2+BC2-AC2=0илиAB2+ AC2-BC2 =0 илиAC2+BC2-AB2=0, то треугольник прямоугольный. Так как при работе с переменными типа double(и производными) может возникнуть погрешность, выражение сравнивалось с числом, превышающем данную погрешность, но достаточно малой для данной задачи.

Конструкция для проверка, является ли треугольник равносторонним:

if ((abs(AB-BC)<0.001) && (abs(BC-CA)<0.001))

Если равны (AB иBC) и(BC иCA), то треугольник равносторонний.

Конструкция для проверки на равнобедренность:

if ((abs(AB-BC)<0.001) || (abs(AB-CA)<0.001) || (abs(BC-CA)<0.001))

Если равны AB и BC или AB и CA, или BC и CA, то треугольник равнобедренный.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: