Pallokolmion sivut2

jormamietti 25.03.08 16:04

Laskee ja tulostaa pallokolmion sivut, kun kulmat annetaan.

 Tekstiversio  Arvo: 2 (4 ääntä)  Äänestä: +  -
#include <stdheaders.h>

/* Laskee ja tulostaa pallokolmion sivut, kun kulmat annetaan. */
void Laske_abc(void) /* Tunnetaan A B C, valikon A */
{
        double dA, dB, dC, summa; /* Kulmat radiaaneina. */
        double cosa, cosb, cosc;  /* sivujen kosinit. */
        struct KOL kol1;
        clrscr();
        printf( "\n   FUNKTIO Laske_abc(), tunnetaan A B C. \n\n" );
        printf( "Anna kulma A: \n" );
        kol1.kulma[0] = HaeOsa();
        printf( "Anna kulma B: \n" );
        kol1.kulma[1] = HaeOsa();
        printf( "Anna kulma C: \n" );
        kol1.kulma[2] = HaeOsa();
        dA = kol1.kulma[0].rad;
        dB = kol1.kulma[1].rad;
        dC = kol1.kulma[2].rad;
        summa = dA + dB + dC;
        if(summa <= PII)
                printf( "\n Kulmien summa %f on liian pieni.", summa );
        else if(summa >= 3.0*PII)
                printf( "\n Kulmien summa %f on liian suuri. ", summa );
        else
        {
               cosa = (cos(dA)+cos(dB)*cos(dC))/(sin(dB)*sin(dC));
           cosb = (cos(dB)+cos(dA)*cos(dC))/(sin(dA)*sin(dC));
                cosc = (cos(dC)+cos(dA)*cos(dB))/(sin(dA)*sin(dB));
                if( fabs(cosa)>1.0 || fabs(cosb)>1.0 || fabs(cosc)>1.0 )
                {
                        printf( "\n Kolmiolla ei ole ratkaisua.\n");
                        printf( " Sivujen kosinit : %f %f %f \n", cosa, cosb, cosc );
                }
                else
                {
                        kol1.sivu[0].rad = acos(cosa);
                        kol1.sivu[1].rad = acos(cosb);
                        kol1.sivu[2].rad = acos(cosc);
                        Radtodeg( &kol1.sivu[0] );
                        Radtodeg( &kol1.sivu[1] );
                        Radtodeg( &kol1.sivu[2] );
                        printf( "\n Kolmion sivut ovat a b c : \n" );
                        TuoOsa( kol1.sivu[0] );
                        TuoOsa( kol1.sivu[1] );
                        TuoOsa( kol1.sivu[2] );
                }
        }
        getch();
}

/* End of File */

/* Edellinen meni vahingossa assemlyyn, Anteeksi.  Tarkoitettu lausuntoa varten, tuntuuko jäykältä. 
Testattu 'Merenkulun Pallotrigonometria'  oppikirjan esimerkeillä ja harjoituksilla. Erot olivat yleensä
sekuntiluokkaa, muutamia minuutin erojakin tuli. Käyttää 'Asteet ja radiaanit keskustelussa
esiteltyjä funktioita.  JVM */

Akiro 16:40 25.3.08 
Tuossa on kyllä tuollainen muokkaa-toiminto millä tuon edellisen olisi saanut siirrettyä oikealle alueelle.
jormamietti 15:50 26.3.08 
Sattuuko paikalle sellaista matematiikan taitajaa, joka osaisi selittää eroja tämän funktion laskemien ja oppikirjassa esitettyjen tulosten väliillä. Funktio käyttää lcc-win32 mukana tulevaa math.h tiedostoa. Oppikirja on vanhahko, Hannu Lappalaisen päiväys toisen painoksen alkusanoissa on 19.02.1982. Tulokset on todennäköisesti saatu funktiolaskimilla, koska niiden valintaa ja käyttöä on kirjassa neuvottu, tietokoneista ei ole puhuttu mitään. itse epäilen tämän tyyppisissä laskuissa, että yhteen- tai vähennylaskun tulos on niin lähellä nollaa, että tarkkuus huononee. JVM