2017-04-02 16:55:15 +02:00
# include<iostream>
# include<sstream>
# include<string>
# include<math.h>
2017-04-08 18:03:33 +02:00
# include<conio.h>
2017-04-02 16:55:15 +02:00
# define PI 3.14159
int main ( )
{
std : : string input ;
2017-04-09 12:04:37 +02:00
long double a , b , c , alpha , beta , gamma ;
2017-04-02 16:55:15 +02:00
std : : cout < < " F \x81 ge deiner Eingabe \" \xF8 \" hinzu um einen Winkel im Gradma \xE1 einzugeben. \n \n Gib Seite a oder Winkel alpha ein: " ;
2017-04-09 12:04:37 +02:00
do
2017-04-02 16:55:15 +02:00
{
2017-04-09 12:04:37 +02:00
a = 0 ; alpha = 0 ;
getline ( std : : cin , input ) ;
for ( char cha : input ) if ( cha = = ' \xF8 ' ) a + + ;
2017-04-02 16:55:15 +02:00
2017-04-09 12:04:37 +02:00
if ( a = = 1 )
2017-04-02 16:55:15 +02:00
{
2017-04-09 12:04:37 +02:00
a = 0 ;
std : : stringstream ( input ) > > alpha ;
alpha = alpha / 180 * PI ;
if ( alpha > = PI | | alpha < = 0 ) std : : cout < < " ERROR: Mit dem eingegebenen Winkel l \x84 sst sich kein Dreieck konstruieren. Gib alpha oder a erneut ein: " ;
2017-04-02 16:55:15 +02:00
}
2017-04-09 12:04:37 +02:00
else
{
std : : stringstream ( input ) > > a ;
if ( a < = 0 ) std : : cout < < " ERROR: a muss gr \x94 \xE1 \b er als 0 sein. Gib a oder alpha erneut ein: " ;
}
} while ( alpha > = PI | | a + alpha < = 0 ) ;
2017-04-02 16:55:15 +02:00
2017-04-09 12:04:37 +02:00
std : : cout < < " \n Gib Seite b oder Winkel beta ein: " ;
do
2017-04-02 16:55:15 +02:00
{
2017-04-09 12:04:37 +02:00
b = 0 ; beta = 0 ;
getline ( std : : cin , input ) ;
for ( char cha : input ) if ( cha = = ' \xF8 ' ) b + + ;
2017-04-02 16:55:15 +02:00
2017-04-09 12:04:37 +02:00
if ( b ! = 0 )
2017-04-02 16:55:15 +02:00
{
2017-04-09 12:04:37 +02:00
b = 0 ;
std : : stringstream ( input ) > > beta ;
beta = beta / 180 * PI ;
if ( alpha + beta > = PI | | beta < = 0 ) std : : cout < < " ERROR: Mit den eingegebenen Winkeln l \x84 sst sich kein Dreieck konstruieren. Gib beta oder b erneut ein: " ;
2017-04-02 16:55:15 +02:00
}
2017-04-09 12:04:37 +02:00
else
{
std : : stringstream ( input ) > > b ;
if ( b < = 0 ) std : : cout < < " ERROR: b muss gr \x94 \xE1 \b er als 0 sein. Gib b oder beta erneut ein: " ;
}
} while ( alpha + beta > = PI | | b + beta < = 0 ) ;
2017-04-02 16:55:15 +02:00
2017-04-09 12:04:37 +02:00
std : : cout < < " \n Gib Seite c oder Winkel gamma ein: " ;
do
2017-04-02 16:55:15 +02:00
{
2017-04-09 12:04:37 +02:00
c = 0 ; gamma = 0 ;
getline ( std : : cin , input ) ;
for ( char cha : input ) if ( cha = = ' \xF8 ' ) c + + ;
2017-04-02 16:55:15 +02:00
2017-04-09 12:04:37 +02:00
if ( c ! = 0 )
2017-04-02 16:55:15 +02:00
{
2017-04-09 12:04:37 +02:00
c = 0 ;
if ( alpha ! = 0 & & beta ! = 0 ) std : : cout < < " ERROR: Der Kongruenzsatz WWW existiert nicht. Gib gamma oder c erneut ein: " ;
else
{
std : : stringstream ( input ) > > gamma ;
gamma = gamma / 180 * PI ;
if ( alpha + beta + gamma > = PI | | gamma < = 0 ) std : : cout < < " ERROR: Mit den eingegebenen Winkeln l \x84 sst sich kein Dreieck konstruieren. Gib gamma oder c erneut ein: " ;
}
2017-04-02 16:55:15 +02:00
}
2017-04-09 12:04:37 +02:00
else
{
std : : stringstream ( input ) > > c ;
if ( c < = 0 ) std : : cout < < " ERROR: c muss gr \x94 \xE1 \b er als 0 sein. Gib c oder gamma erneut ein: " ;
}
} while ( alpha + beta + gamma > PI | | c + gamma < = 0 ) ;
2017-04-02 16:55:15 +02:00
if ( alpha ! = 0 & & beta ! = 0 | | alpha ! = 0 & & gamma ! = 0 | | beta ! = 0 & & gamma ! = 0 ) //WSW
{
if ( alpha = = 0 )
{
alpha = PI - beta - gamma ;
b = a * sin ( beta ) / sin ( alpha ) ;
c = a * sin ( gamma ) / sin ( alpha ) ;
}
if ( beta = = 0 )
{
beta = PI - alpha - gamma ;
a = b * sin ( alpha ) / sin ( beta ) ;
c = b * sin ( gamma ) / sin ( beta ) ;
}
if ( gamma = 0 )
{
gamma = PI - alpha - beta ;
a = c * sin ( alpha ) / sin ( gamma ) ;
b = c * sin ( beta ) / sin ( gamma ) ;
}
2017-04-09 12:04:37 +02:00
if ( alpha = = beta & & beta = = gamma ) //f<> ngt den Sondefall eines gleichseitigen Dreiecks ab, welcher mit der obigen Methode nicht exakt berechnet wird.
2017-04-02 16:55:15 +02:00
{
a = a + b + c ;
b = a ;
c = b ;
}
}
if ( c = = 0 | | b = = 0 | | a = = 0 ) //SWS berechnet 3. Seite f<> r SSS
{
if ( a = = 0 ) a = sqrt ( b * b + c * c - 2 * b * c * cos ( alpha ) ) ;
if ( b = = 0 ) b = sqrt ( a * a + c * c - 2 * a * c * cos ( beta ) ) ;
if ( c = = 0 ) c = sqrt ( a * a + b * b - 2 * a * b * cos ( gamma ) ) ;
}
if ( alpha = = 0 ) alpha = acos ( ( b * b + c * c - a * a ) / ( 2 * b * c ) ) ; //SSS
if ( beta = = 0 ) beta = acos ( ( a * a + c * c - b * b ) / ( 2 * a * c ) ) ;
if ( gamma = = 0 ) gamma = PI - alpha - beta ;
system ( " cls " ) ;
std : : cout < < " a = " < < a < < " , b = " < < b < < " , c = " < < c ;
std : : cout < < " \n \n Winkel Bogenma \xE1 Gradma \xE1 " ;
std : : cout < < " \n alpha: " < < alpha / PI < < " pi " < < alpha * 180 / PI < < " \xF8 " ;
std : : cout < < " \n beta: " < < beta / PI < < " pi " < < beta * 180 / PI < < " \xF8 " ;
std : : cout < < " \n gamma: " < < gamma / PI < < " pi " < < gamma * 180 / PI < < " \xF8 " ;
2017-04-08 18:03:33 +02:00
getch ( ) ;
2017-04-02 16:55:15 +02:00
return ( 0 ) ;
}