Da poco mi sono messo ad approfondire un po' di più il C++, e mi sono inventato questo programmino per vedere come si dichiarano le funzioni, solo che mi sono imbattuto in dei problemi inaspettati. Praticamente il programma dovrebbe calcolare le funzioni trigonometriche (cos, sin, tan) di un certo angolo in gradi, in base alla immissione di un carattere per selezionare la funzione scelta:
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <cmath>
#define M_PI 3.14159265358979323846
// definizione prototipi
double cos_deg(double alfa);
double sin_deg(double alfa);
double tan_deg(double alfa);
int main()
{
double ang, res;
char c;
printf("Scegli funzione:\nC. coseno S. seno T. tangente\n");
scanf_s("%c", &c);
if (c == 'c' || 'C')
{
printf("Inserisci il valore dell'angolo in gradi:\n");
scanf_s("%f", &ang);
res = cos_deg(ang);
printf("Il coseno e' %f\n", res);
}
else if (c == 's' || 'S')
{
printf("Inserisci il valore dell'angolo in gradi:\n");
scanf_s("%f", &ang);
res = sin_deg(ang);
printf("Il seno e' %f\n", res);
}
else if (c == 't' || 'T')
{
printf("Inserisci il valore dell'angolo in gradi:\n");
scanf_s("%f", &ang);
res = tan_deg(ang);
printf("La tangente e' %f\n", res);
}
else
{
printf("Non valido\n");
}
system("PAUSE");
return EXIT_SUCCESS;
}
//dichiarazione delle funzioni
double cos_deg(double alfa)
{
double beta, gamma;
beta = (M_PI / 180)*alfa;
gamma = cos(beta);
return gamma;
}
double sin_deg(double alfa)
{
double beta, gamma;
beta = (M_PI / 180)*alfa;
gamma = sin(beta);
return gamma;
}
double tan_deg(double alfa)
{
double beta, gamma;
beta = (M_PI / 180)*alfa;
gamma = tan(beta);
return gamma;
}
Il primo problema è che qualunque carattere io immetta (anche sbagliato), il programma chiama sempre la funzione del coseno, mentre se uso dei numeri con una variabile int il blocco if-else si comporta come dovrebbe, quindi sto sbagliando qualcosa nell' input?
Il secondo problema riguarda invece i risultati ritornati dalle funzioni. Le funzioni cos, sin e tan incluse nella libreria math.h vogliono l'angolo in radianti, quindi io qui le converto prima in radianti e poi calcolo il risultato, ma mi escono valori impossibili (tipo cos 60 = -0.23 e qualcosa invece di 0.5). Cosa ho sbagliato anche qui?