1. Теперь за форумную активность начисляются биткоины и другие криптоденьги. Подробнее.
    Скрыть объявление
  2. Появилась архивная версия форума arhiv.xaker.name, где собраны темы с 2007 по 2012 год.
    Скрыть объявление

Triangle или чертовы треугольники

Тема в разделе "C/C++", создана пользователем morrowind123, 15 май 2012.

  1. morrowind123
    morrowind123 Новичок
    Симпатии:
    0
    Сразу оговорюсь, след.задачка на курсач (имхо 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. не знаю как написать, что я хочу в своей голове, написал как смог.
     
    Последнее редактирование: 15 май 2012
    15 май 2012
  2. ~|~евто|-|
    ~|~евто|-| Silentium Новичок
    Симпатии:
    162
    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. В случае когда все три условия верны - треугольник построить возможно.
     
    Последнее редактирование: 16 май 2012
    16 май 2012
    1 человеку нравится это.

Поделиться этой страницей

Загрузка...