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

Natalya43

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

#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;
}
 

fuzzyduzzy

New Member
22.01.2013
3
0
#2
Код:
#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;
}
 

Natalya43

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

rrrFer

Гость
#4
А вот код моей программы
что конкретно в нем не работает?

равно как-то странно выводит стороны в порядке возрастания, там вообще какие-то непонятные большие числа выводятся
как-то странно ты пытаешься выводить в порядке возрастания.
Засунть стороны в массив, отсортируй и выводи.
Ну например так: (остальной код не трогал)
Код:
#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];
}
 

Natalya43

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

rrrFer

Гость
#6
можешь отсортировать массив сама, я думаю ты поймешь как работает сортировка пузырьком, например.