Сразу оговорюсь, след.задачка на курсач (имхо 1-ый курс за семестр C++ не ахти дается так что я чайник в этих делах). Задача заключается в следующем--> Даны длины 5-ти отрезков. Для каждой тройки этих отрезков, из которых можно построить треугольник, напечатать площадь данного треугольника. Вычисление площади треугольника по заданным сторонам а, b, c с проверкой существования такого треугольника оформить функцией. Наброски-> Код: float square (float a, float b, float c) { float p = (a + b + c)/2; float s = sqrt ( p*(p-a)*(p-b)*(p-c) ); return s; } bool Triangle (float a, float b, float c) { if (a<=0 || b<=0 || c<=0) return 0; return 1; } int main() { setlocale(LC_ALL,"Russian"); float d, e, f, g, h; cout << "Введите длину отрезка d: "; cin >> d; cout << "Введите длину отрезка e: "; cin >> e; cout << "Введите длину отрезка f: "; cin >> f; cout << "Введите длину отрезка g: "; cin >> g; cout << "Введите длину отрезка h: "; cin >> h; int i=0; float S[10]; while (i<10) { S=0; if ( Triangle (d, e, f) ) {S=square (d, e, f); i++;} if ( Triangle (d, e, g) ) {S=square (d, e, g); i++;} if ( Triangle (d, e, h) ) {S=square (d, e, h); i++;} if ( Triangle (d, f, g) ) {S=square (d, f, g); i++;} if ( Triangle (d, f, h) ) {S=square (d, f, h); i++;} if ( Triangle (d, g, h) ) {S=square (d, g, h); i++;} if ( Triangle (e, f, g) ) {S=square (e, f, g); i++;} if ( Triangle (e, f, h) ) {S=square (e, f, h); i++;} if ( Triangle (e, g, h) ) {S=square (e, g, h); i++;} if ( Triangle (f, g, h) ) {S=square (f, g, h); i++;} } cout<< "\nПлощади возможных треугольников: \n"<<endl; for(i=0;i<10;i++) { printf("S[%d] = %f\n", i+1, S); } cout<<endl; return 0; } Кто чем как может быть знает где и почему не так. Объясните т.е. наведите на путь истинный. Заранее огромнейшая благодарность. // C++, компилятор Microsoft Visual Studio 2008 ____________________________________________________________________________________________________ Открыв лекции, написал на скорую руку еще одну прогу для нахождения площади одного треугольника из 3 отрезков. Код: int pr(float a, float b, float c, float *s) { if (a<0 || b<0 || c<0) return 0; else { *s = sqrt((a+b+c)*(b+c-a)*(a+c-b)*(a+b-c))/4; return 1; } } void main() { float a[3][3]; float s[5]; int i,kv; setlocale(LC_ALL,"Russian"); for(i=0;i<1;i++) { cout<< "Введите длину "<<i+1<<" отрезка :"; cin >> a[0]; cout<< "Введите длину "<<i+2<<" отрезка :"; cin >> a[1]; cout<< "Введите длину "<<i+3<<" отрезка :"; cin >> a[2]; kv = pr(a[0],a[1],a[2],&s); // Код возврата if(kv) { cout<<"\nПлощадь = "<<s[i]<<endl; } else cout<<"\nТакого треугольника не существует!"<<endl; } }[/i] Но проблема остается, чтобы был список т.е. ввел длины 5-ти отрезков и должно вылезти 10 строк 10-ти площадей 10-ти треугольников. И проверка, что типо, если ввел один отрезок, скажем, отрицательный ( -100500 допустим), то должно на 6-ти строках вылезти "Треугольника не существует", а на других площадь других существующих. p.s. не знаю как написать, что я хочу в своей голове, написал как смог.
morrowind123, функция Код: bool Triangle (float a, float b, float c) { if (a<=0 || b<=0 || c<=0) return 0; return 1; } Не правильная. Возможность построения треугольника в Евклидовом пространстве определяется условием того, что сумма длин 2 любых сторон треугольника строго больше длины 3.(в случае когда равны, треугольник вырождается в прямую) Если совсем по простому, тебе нужно проверять условия a + b > c, a + c > b, b + с > a. В случае когда все три условия верны - треугольник построить возможно.