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
2017-12-05 19:23:11 +01:00
printf ( " 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-10 16:31:26 +02:00
a = 0 , alpha = 0 ;
2017-04-09 12:04:37 +02:00
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 ;
2017-12-05 19:23:11 +01:00
if ( alpha > = PI | | alpha < = 0 ) printf ( " 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 ;
2017-12-05 19:23:11 +01:00
if ( a < = 0 ) printf ( " ERROR: a muss gr \x94 \xE1 \b er als 0 sein. Gib a oder alpha erneut ein: " ) ;
2017-04-09 12:04:37 +02:00
}
} while ( alpha > = PI | | a + alpha < = 0 ) ;
2017-04-02 16:55:15 +02:00
2017-12-05 19:23:11 +01:00
printf ( " \n Gib Seite b oder Winkel beta ein: " ) ;
2017-04-09 12:04:37 +02:00
do
2017-04-02 16:55:15 +02:00
{
2017-04-10 16:31:26 +02:00
b = 0 , beta = 0 ;
2017-04-09 12:04:37 +02:00
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 ;
2017-12-05 19:23:11 +01:00
if ( alpha + beta > = PI | | beta < = 0 ) printf ( " 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 ;
2017-12-05 19:23:11 +01:00
if ( b < = 0 ) printf ( " ERROR: b muss gr \x94 \xE1 \b er als 0 sein. Gib b oder beta erneut ein: " ) ;
2017-04-09 12:04:37 +02:00
}
} while ( alpha + beta > = PI | | b + beta < = 0 ) ;
2017-04-02 16:55:15 +02:00
2017-12-05 19:23:11 +01:00
printf ( " \n Gib Seite c oder Winkel gamma ein: " ) ;
2017-04-09 12:04:37 +02:00
do
2017-04-02 16:55:15 +02:00
{
2017-04-10 16:31:26 +02:00
c = 0 , gamma = 0 ;
2017-04-09 12:04:37 +02:00
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 ;
2017-12-05 19:23:11 +01:00
if ( alpha ! = 0 & & beta ! = 0 ) printf ( " ERROR: Der Kongruenzsatz WWW existiert nicht. Gib gamma oder c erneut ein: " ) ;
2017-04-09 12:04:37 +02:00
else
{
std : : stringstream ( input ) > > gamma ;
gamma = gamma / 180 * PI ;
2017-12-05 19:23:11 +01:00
if ( alpha + beta + gamma > = PI | | gamma < = 0 ) printf ( " ERROR: Mit den eingegebenen Winkeln l \x84 sst sich kein Dreieck konstruieren. Gib gamma oder c erneut ein: " ) ;
2017-04-09 12:04:37 +02:00
}
2017-04-02 16:55:15 +02:00
}
2017-04-09 12:04:37 +02:00
else
{
std : : stringstream ( input ) > > c ;
2017-12-05 19:23:11 +01:00
if ( c < = 0 ) printf ( " ERROR: c muss gr \x94 \xE1 \b er als 0 sein. Gib c oder gamma erneut ein: " ) ;
2017-04-09 12:04:37 +02:00
}
} 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
{
2017-04-10 16:31:26 +02:00
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 ) ;
if ( alpha = = beta & & beta = = gamma ) a = a + b + c , b = a , c = b ; //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
}
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 " ) ;
2017-12-05 19:23:11 +01:00
printf ( " a = %f, b = %f, c = %f " , a , b , c ) ;
printf ( " \n \n Winkel Bogenma \xE1 Gradma \xE1 " ) ;
printf ( " \n alpha: %fpi %f \xF8 " , alpha / PI , alpha * 180 / PI ) ;
printf ( " \n beta: %fpi %f \xF8 " , beta / PI , beta * 180 / PI ) ;
printf ( " \n gamma: %fpi %f \xF8 " , gamma / PI , gamma * 180 / PI ) ;
2017-04-02 16:55:15 +02:00
2017-04-08 18:03:33 +02:00
getch ( ) ;
2017-04-02 16:55:15 +02:00
return ( 0 ) ;
}