• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Ошибка В Программе. Помогите Найти

  • Автор темы Natalya43
  • Дата начала
N

Natalya43

Добрый вечер! У меня тут возникла проблема. Написала программу( я вообще в этом деле новичок), но она неправильно работает. Помогите пожалуйста разобраться, где у меня ошибка. Заранее благодарю))).
Вот условие задачи.
Даны координаты трех точек на плоскости. Если они могут быть вершинами разностороннего остроугольного треугольника, вывести длины сторон в порядке возрастания, вычислить площадь полученного треугольника.
А вот код моей программы

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
setlocale (LC_ALL, "Russian");
float x1, x2, x3, y1, y2, y3, s, a, b, c, p;


cout << "x1 = ";
cin >> x1;

cout << "x2 = ";
cin >> x2;

cout << "x3 = ";
cin >> x3;

cout << "y1 = ";
cin >> y1;

cout << "y2 = ";
cin >> y2;

cout << "y3 = ";
cin >> y3;

a = sqrt(pow((x1 - x2),2) + pow((y1 - y2), 2));
b = sqrt(pow((x1 - x3),2) + pow((y1 - y3), 2));
c = sqrt(pow((x3 - x2),2) + pow((y3 - y2), 2));
if (( a + b > c ) && (a + c > b ) && ( b + c > a ))
{
if ((( a != b )&&(b != c) && ( a != c )) && ((( a*a + b*b ) > c*c ) || (( a*a + c*c ) > b*b ) || (( b*b + c*c ) > a*a )))
{
p = ( a + b + c )/2;
s = sqrt( p*( p - a ) * ( p - b ) * ( p - c ));

if ( (a > b ) && ( a > c ) && ( b > c ))
cout << c << b << a << "s = "<< s << endl;

if ( ( a > b ) && ( a > c ) && ( c > b ))
cout << b << c << a << "s = "<< s << endl;

if ( ( b > a ) && ( b > c ) && ( a > c ))
cout << c << a << b << "s = "<< s << endl;

if ( ( b > a ) && ( b > c ) && ( c > a ))
cout << a << c << b << "s = "<< s << endl;

if ( ( c > b ) && ( c > a ) && ( b > a ))
cout << a << b << c << " s = "<< s << endl;

if ( ( c > b ) && ( c > a ) && ( a > b ))
cout << b << c << a << "s = "<< s << endl;
}
else cout <<"Этот треугольник не является разносторонним остроугольным";

}
else cout << "Заданные точки не могут быть вершинами треугольника ";
return 0;
}
 
F

fuzzyduzzy

Код:
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
setlocale (LC_ALL, "Russian");
float x1, x2, x3, y1, y2, y3, s, a, b, c, p;

cout << "x1 = ";
cin >> x1;

cout << "x2 = ";
cin >> x2;

cout << "x3 = ";
cin >> x3;

cout << "y1 = ";
cin >> y1;

cout << "y2 = ";
cin >> y2;

cout << "y3 = ";
cin >> y3;

a = sqrt(pow((x1 - x2),2) + pow((y1 - y2), 2));
b = sqrt(pow((x1 - x3),2) + pow((y1 - y3), 2));
c = sqrt(pow((x3 - x2),2) + pow((y3 - y2), 2));
if (( a + b > c ) && (a + c > b ) && ( b + c > a ))
{
if ((( a != b )&&(b != c) && ( a != c )) && ((( a*a + b*b ) > c*c ) || (( a*a + c*c ) > b*b ) || (( b*b + c*c ) > a*a )))
{
p = ( a + b + c )/2; 
s = sqrt( p*( p - a ) * ( p - b ) * ( p - c ));

if ( (a > b ) && ( a > c ) && ( b > c ))
cout << c << b << a << "s = "<< s << endl;

else if ( ( a > b ) && ( a > c ) && ( c > b ))
cout << b << c << a << "s = "<< s << endl;

else if ( ( b > a ) && ( b > c ) && ( a > c ))
cout << c << a << b << "s = "<< s << endl;

else if ( ( b > a ) && ( b > c ) && ( c > a ))
cout << a << c << b << "s = "<< s << endl;

else if ( ( c > b ) && ( c > a ) && ( b > a ))
cout << a << b << c << " s = "<< s << endl;

else if ( ( c > b ) && ( c > a ) && ( a > b ))
cout << b << c << a << "s = "<< s << endl;

}
else 
cout <<"Этот треугольник не является разносторонним остроугольным";
}
else 
cout << "Заданные точки не могут быть вершинами треугольника ";
return 0;
}
 
N

Natalya43

fuzzy, Спасибо, но программа все - равно как-то странно выводит стороны в порядке возрастания, там вообще какие-то непонятные большие числа выводятся
 
R

rrrFer

А вот код моей программы
что конкретно в нем не работает?

равно как-то странно выводит стороны в порядке возрастания, там вообще какие-то непонятные большие числа выводятся
как-то странно ты пытаешься выводить в порядке возрастания.
Засунть стороны в массив, отсортируй и выводи.
Ну например так: (остальной код не трогал)
Код:
#include <iostream>
#include <cmath>
#include <algorithm>

using namespace std;

int main()
{
setlocale (LC_ALL, "Russian");
float x1, x2, x3, y1, y2, y3, s, a, b, c, p;


cout << "x1 = ";
cin >> x1;

cout << "x2 = ";
cin >> x2;

cout << "x3 = ";
cin >> x3;

cout << "y1 = ";
cin >> y1;

cout << "y2 = ";
cin >> y2;

cout << "y3 = ";
cin >> y3;

a = sqrt(pow((x1 - x2),2) + pow((y1 - y2), 2));
b = sqrt(pow((x1 - x3),2) + pow((y1 - y3), 2));
c = sqrt(pow((x3 - x2),2) + pow((y3 - y2), 2));
if (( a + b > c ) && (a + c > b ) && ( b + c > a ))
{
if ((( a != b )&&(b != c) && ( a != c )) && ((( a*a + b*b ) > c*c ) || (( a*a + c*c ) > b*b ) || (( b*b + c*c ) > a*a )))
{
p = ( a + b + c )/2;
s = sqrt( p*( p - a ) * ( p - b ) * ( p - c ));

float tmp[3] = {a, b, c};
std::sort(&tmp[0], &tmp[0] + 3);
for (auto t : tmp) 
std::cout << t << " ";

std::cout << "s: " << s;
}
else cout <<"Этот треугольник не является разносторонним остроугольным";

}
else cout << "Заданные точки не могут быть вершинами треугольника ";
return 0;
}

cout << "x1 = ";
cin >> x1;

cout << "x2 = ";
cin >> x2;

cout << "x3 = ";
cin >> x3;

ад какой-то, используй массивы и хотя бы такой цикл:
Код:
for (int i = 0; i < 3; ++i) {
std::cout << "x" << i + 1 << ": ";
std::cin >> x[i];
std::cout << "y" << i + 1 << ": ";
std::cin >> y[i];
}
 
N

Natalya43

Спасибо))) А без сортировки никак нельзя? Просто я этого еще не изучала, не понятно, как что работает)
 
R

rrrFer

можешь отсортировать массив сама, я думаю ты поймешь как работает сортировка пузырьком, например.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!