Oppure

Loading
01/06/09 18:32
Ciao a tutta la community innanzitutto.
Sono 7h3.c0r3 e sono appena entrato nel mondo della programmazione.
Ho scritto questo programma che calcola le aree di alcune figure piane.

#include <stdio.h>
#include <windows.h>

main()

{
      
      char choose;
      char subchoose;
      char exitorno;
      float x;
      float y;
      float z;
      
      do {
      system ("CLS");
      printf ("## Area Calculator 0.1 Beta.\n");
      printf ("## Autor: 7h3.c0r3.\n");
      printf ("## Please, choose your language.\n");
      printf ("## 1. Enghlish\n");
      printf ("## 2. Italiano\n");
      printf ("## My choose: "); 
      
      scanf ("%i", &choose); } while (choose > 2 || choose == 0); 
      
      if (choose==1)
      
      { 
                    do {
                    system ("CLS");
                    printf ("## Enghlish selected!\n");   
                    printf ("## Select the figure from the list.\n");
                    printf ("## 1. Triangle\n");  
                    printf ("## 2. Square\n");  
                    printf ("## 3. Rectangle\n");  
                    printf ("## 4. Trapeze\n");  
                    printf ("## 5. Rumble\n");
                    printf ("## 6. Circle\n");
                    printf ("## 7. Another Polygons\n");       
                    printf ("## My choose: ");
                    
                    scanf ("%i", &subchoose); 
                    
                    switch (subchoose)
                    
                    {
                           
                           case 1:
                                printf ("\n## Enter the base dimension in cm: ");
                                scanf ("%f", &x);
                                printf ("## Enter the height dimension in cm: ");
                                scanf ("%f", &y);
                                printf ("## Area dimension: %f cm2.\n", (x*y)/2); 
                                printf ("## Press 1 to exit, press 2 to continue: ");
                                scanf ("%i", &exitorno);
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                case 2: 
                                printf ("\n## Enter the side dimension in cm: ");
                                scanf ("%f", &x);
                                printf ("## Area dimension: %f cm2.\n", x*x); 
                                printf ("## Press 1 to exit, press 2 to continue: ");
                                scanf ("%i", &exitorno);
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                case 3: 
                                printf ("\n## Enter the base dimension in cm: ");
                                scanf ("%f", &x);
                                printf ("## Enter the height in cm: ");
                                scanf ("%f", &y);
                                printf ("## Area dimension: %f cm2.\n", (x*y)); 
                                printf ("## Press 1 to exit, press 2 to continue: ");
                                scanf ("%i", &exitorno);
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                case 4:
                                printf ("\n## Enter the greater base dimension in cm: ");
                                scanf ("%f", &x);
                                printf ("## Enter the smaller base dimension in cm: ");
                                scanf ("%f", &y);
                                printf ("## Enter the height dimension in cm: ");
                                scanf ("%f", &z);
                                printf ("## Area dimension: %f cm2.\n", ((x+y)*z)/2); 
                                printf ("## Press 1 to exit, press 2 to continue: ");
                                scanf ("%i", &exitorno);;
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                case 5: 
                                printf ("\n## Enter the greater diagonal dimension in cm: ");
                                scanf ("%f", &x);
                                printf ("## Enter the smaller diagonal dimension in cm: ");
                                scanf ("%f", &y);
                                printf ("## Area dimension: %f cm2.\n", (x*y)/2); 
                                printf ("## Press 1 to exit, press 2 to continue: ");
                                scanf ("%i", &exitorno);
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                case 6:
                                printf ("\n## Enter the circle beam dimension in cm: ");
                                scanf ("%f", &x);
                                printf ("## Area dimension: %f cm2.\n", x*x*3.14); 
                                printf ("## Press 1 to exit, press 2 to continue: ");
                                scanf ("%i", &exitorno);
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                case 7:
                                printf ("\n## Enter the perimeter dimension in cm: ");
                                scanf ("%f", &x);
                                printf ("## Enter the apothem dimension in cm: ");
                                scanf ("%f", &y);
                                printf ("## Area dimension: %f cm2.\n", (x*y)/2); 
                                printf ("## Press 1 to exit, press 2 to continue: ");
                                scanf ("%i", &exitorno);
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                 
                                 } // fine switch
                                } while (subchoose > 7 || subchoose == 0 || exitorno == 1); // fine ciclo do-while
                               return 0; // programma eseguito correttamente
                              } // fine if
      
      if (choose==2)
      
      {
                    do {
                    system ("CLS");
                    printf ("## Italiano selezionato!\n");   
                    printf ("## Seleziona una delle seguenti figure.\n");
                    printf ("## 1. Triangolo\n");  
                    printf ("## 2. Quadrato\n");  
                    printf ("## 3. Rettangolo\n");  
                    printf ("## 4. Trapezio\n");  
                    printf ("## 5. Rombo\n");
                    printf ("## 6. Cerchio\n");
                    printf ("## 7. Altri Poligoni\n");
                    printf ("## La mia scelta: ");
                    
                    scanf ("%i", &subchoose); 
                    
                      switch (subchoose)
                    
                    {
                           
                           case 1:
                                printf ("\n## Inserisci la misura della base in cm: ");
                                scanf ("%f", &x);
                                printf ("## Inserisci la misura dell'altezza in cm: ");
                                scanf ("%f", &y);
                                printf ("## La dimensione dell'area e': %f cm2.\n", (x*y)/2); 
                                printf ("## Premi 1 per uscire, premi 2 per continuare: ");
                                scanf ("%i", &exitorno);
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                case 2: 
                                printf ("\n## Inserisci la misura del lato in cm: ");
                                scanf ("%f", &x);
                                printf ("## La dimensione dell'area e': %f cm2.\n", x*x); 
                                printf ("## Premi 1 per uscire, premi 2 per continuare: ");
                                scanf ("%i", &exitorno);
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                case 3: 
                                printf ("\n## Inserisci la misura della base in cm: ");
                                scanf ("%f", &x);
                                printf ("## Inserisci la misura dell'altezza in cm: ");
                                scanf ("%f", &y);
                                printf ("## La dimensione dell'area e': %f cm2.\n", (x*y)); 
                                printf ("## Premi 1 per uscire, premi 2 per continuare: ");
                                scanf ("%i", &exitorno);
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                case 4:
                                printf ("\n## Inserisci la misura della base maggiore in cm: ");
                                scanf ("%f", &x);
                                printf ("## Inserisci la misura della base minore in cm: ");
                                scanf ("%f", &y);
                                printf ("## Inserisci la misura dell'altezza in cm: ");
                                scanf ("%f", &z);
                                printf ("## La dimensione dell'area e': %f cm2.\n", ((x+y)*z)/2); 
                                printf ("## Premi 1 per uscire, premi 2 per continuare: ");
                                scanf ("%i", &exitorno);
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                case 5: 
                                printf ("\n## Inserisci la misura della diagonale maggiore in cm: ");
                                scanf ("%f", &x);
                                printf ("## Inserisci la misura della diagonale minore in cm: ");
                                scanf ("%f", &y);
                                printf ("## La dimensione dell'area e': %f cm2.\n", (x*y)/2); 
                                printf ("## Premi 1 per uscire, premi 2 per continuare: ");
                                scanf ("%i", &exitorno);
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                case 6:
                                printf ("\n## Inserisci la misura del raggio in cm: ");
                                scanf ("%f", &x);
                                printf ("## La dimensione dell'area e': %f cm2.\n", x*x*3.14); 
                                printf ("## Premi 1 per uscire, premi 2 per continuare: ");
                                scanf ("%i", &exitorno);
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                case 7:
                                printf ("\n## Inserisci la misura del perimetro in cm: ");
                                scanf ("%f", &x);
                                printf ("## Inserisci la misura dell'apotema in cm: ");
                                scanf ("%f", &y);
                                printf ("## La dimensione dell'area e': %f cm2.\n", (x*y)/2); 
                                printf ("## Premi 1 per uscire, premi 2 per continuare: ");
                                scanf ("%i", &exitorno);
                                if (exitorno == 1)
                                {
                                             return 0;
                                }
                                break;
                                
                                 } //fine switch
                                } while (subchoose > 7 || subchoose == 0 || exitorno == 1); // fine ciclo do-while
                               } // fine if 
                              return 0; // programma eseguito correttamente
                             } // fine main()


Il programma di per se funziona alla grande ma ho notato un paio di cose che vorrei correggere:

1. Il programma si chiude se il numero immesso è con la virgola e non il punto. Vorrei risolvere in modo che la virgola si trasformi da sola in punto.
2. Il programma crasha se vengono immessi caratteri.
3. Le variabili float e double presentano troppi decimali dopo il punto, si possono limitare? Se si, come?
4. Domanda da niubbo, scusate, mi sono appena addentrato in questo mondo: come si mette l'interfaccia grafica a un programma in C?

Sono gradite anche dritte e critiche, grazie a tutti anticipatamente.
Ultima modifica effettuata da 01/06/09 18:34
01/06/09 19:51
theprogrammer
Postato originariamente da 7h3.c0r3:
1. Il programma si chiude se il numero immesso è con la virgola e non il punto. Vorrei risolvere in modo che la virgola si trasformi da sola in punto.
2. Il programma crasha se vengono immessi caratteri.


In questo caso devi fare l'input in una stringa e non in una variabile numerica.
Dopo l'input, esamini la stringa, carattere per carattere e la validi (cambi i punti in virgole, controlli i caratteri non validi, ecc.), poi trasformi la stringa in valore numerico per utilizzarlo in seguito.

3. Le variabili float e double presentano troppi decimali dopo il punto, si possono limitare? Se si, come?


Devi usare gli appositi modificatori nella stringa della printf, ad esempio

%10.5f

4. Domanda da niubbo, scusate, mi sono appena addentrato in questo mondo: come si mette l'interfaccia grafica a un programma in C?


La cosa e' molto complessa. Ti consiglio di passare un po' piu' di tempo (qualche ora mi sembra pochino ... ) a programmare ...
aaa
02/06/09 8:50
Postato originariamente da theprogrammer:

Postato originariamente da 7h3.c0r3:
1. Il programma si chiude se il numero immesso è con la virgola e non il punto. Vorrei risolvere in modo che la virgola si trasformi da sola in punto.
2. Il programma crasha se vengono immessi caratteri.


In questo caso devi fare l'input in una stringa e non in una variabile numerica.
Dopo l'input, esamini la stringa, carattere per carattere e la validi (cambi i punti in virgole, controlli i caratteri non validi, ecc.), poi trasformi la stringa in valore numerico per utilizzarlo in seguito.

3. Le variabili float e double presentano troppi decimali dopo il punto, si possono limitare? Se si, come?


Devi usare gli appositi modificatori nella stringa della printf, ad esempio

%10.5f

4. Domanda da niubbo, scusate, mi sono appena addentrato in questo mondo: come si mette l'interfaccia grafica a un programma in C?


La cosa e' molto complessa. Ti consiglio di passare un po' piu' di tempo (qualche ora mi sembra pochino ... ) a programmare ...


Ottimo, grazie! :k: