Ciao a tutti è da poco che studio C e sono autodidatta. Sto lavorando sempre sullo stesso progetto per imparare(interamente creato da me). Oggi volevo aggiungere l' opzione "poligono" in modo che mettendo l' apotema e il numero dei lati, calcola l' Area e il Perimetro.
Il problema sorge quando(mettendo come lati 5 funziona perfettamente..) metto come lato da 6 in poi... inizia a dire che aerea è 0 e anche perimetro...
Per favore ditemi cosa non va.
codice:
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <math.h>
#include <stdlib.h>
int main(void) {
// Variabili
float base,altezza,area,perimetro;
int lati;
char s;
//Da qui "do" serve per ripetere l operazione finché...
do{
printf("Di cosa devo calcolare l'area?\nt=Triangolo \nr=Rettangolo \nc=Cerchio \np=Poligono lato>4 lati \nx=Esci\n");
printf("Scegli l'operazione...");
scanf("%c",&s);
getchar();
system("cls");
switch(s){
case 't':
printf("Inserisci la misura della Base in cm: ");
scanf("%f",&base);
printf("Inserisci la misura dell' Altezza in cm: ");
scanf("%f",&altezza);
area=(base*altezza)/2;
perimetro=(sqrt((base/2)*(base/2)+(altezza*altezza)))*2+base;
printf("l'area e' %.3f cm \n", area);
printf("il perimetro e' %.3f cm \n", perimetro);
system("pause");
system("cls");
break;
getchar();
case 'r':
printf("Inserisci la misura della Base in cm: ");
scanf("%f",&base);
printf("Inserisci la misura dell' Altezza in cm : ");
scanf("%f",&altezza);
area=base*altezza;
perimetro=(base*2)+(altezza*2);
printf("l'area e' %.3f cm \n", area);
printf("il perimetro e' %.3f cm \n", perimetro);
system("pause");
system("cls");
break;
getchar();
case 'c':
printf("Inserisci la misura del Raggio in cm: ");
scanf("%f",&base);
area=3.14*base*base;
perimetro=base*6.28;
printf("l' area e' %.3f cm \n", area);
printf("la circonferenza e' %.3f cm \n", perimetro);
system("pause");
system("cls");
break;
getchar();
case 'p':
printf("Queste operazioni valgono solo per un poligono regolare... \n");
system("pause");
printf("Inserisci la misura dell' apotema in cm: ");
scanf("%f",&base);
printf("Inserisci il numero di lati (max 10): ");
scanf("%d",&lati);
switch (lati) {
case 5:
altezza=base*0.688;
perimetro=altezza*5;
area=(perimetro*base)/2;
printf("Il perimetro e' : %f \n",perimetro);
printf("L'Area e' : %f \n\n\n\n\n",area);
system("pause");
system("cls");
break;
getchar();
case 6:
altezza=base*0,866;
perimetro=altezza*6;
area=(perimetro*base)/2;
printf("Il perimetro e' : %f \n",perimetro);
printf("L'Area e' : %f \n\n\n\n\n",area);
system("pause");
system("cls");
break;
getchar();
case 7 :
altezza=base*1,040;
perimetro=altezza*7;
area=(perimetro*base)/2;
printf("Il perimetro e' : %f \n",perimetro);
printf("L'Area e' : %f \n\n\n\n\n",area);
system("pause");
system("cls");
break;
getchar();
case 8 :
altezza=base*1,207;
perimetro=altezza*8;
area=(perimetro*base)/2;
printf("Il perimetro e' : %f \n",perimetro);
printf("L'Area e' : %f \n\n\n\n\n",area);
system("pause");
system("cls");
break;
getchar();
case 9 :
altezza=base*1,374;
perimetro=altezza*9;
area=(perimetro*base)/2;
printf("Il perimetro e' : %f \n",perimetro);
printf("L'Area e' : %f \n\n\n\n\n",area);
system("pause");
system("cls");
break;
getchar();
case 10:
altezza=base*1,539;
perimetro=altezza*10;
area=(perimetro*base)/2;
printf("Il perimetro e' : %f \n",perimetro);
printf("L'Area e' : %f \n\n\n\n\n",area);
system("pause");
system("cls");
break;
getchar();
default: printf("I lati del poligono sono troppi");
break;
}
case 'x': break;
default:printf("Operazione non prevista! Ripeti la tua scelta...\n\n");
}
getchar();
//...non si preme tasto "x"
}while(s!='x');
printf("\n\nGrazie per aver utilizzato il calcolatore By Marco \n");
system("pause");
return 0;
}