Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Ho un problema che non mi spiego in C

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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    In

    altezza=base*0,866;

    devi usare il punto decimale non la virgola.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ho trovato il problema... Ringrazio comunque tutti per il le visualizzazioni del mio codice .Ci ho messo un po' per trovare l' errore . Grazie a visualstudio mi ha colorato di colore diverso il numero decimale(numero fisso) perché avevo messo "," non ".". Grazie comunque a tutti.

    C ti sei fatto un nemico

  4. #4
    Originariamente inviato da oregon
    In

    altezza=base*0,866;

    devi usare il punto decimale non la virgola.
    Avevo già trovato l' errore xD grazie comunque. Ti ringrazio anche per l' ultima volta ( quella riguardo char).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.