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;
 }