Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Primo programma, aiuto.
Forum - C/C++ - Primo programma, aiuto.

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
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.

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. main()
  5.  
  6. {
  7.      
  8.       char choose;
  9.       char subchoose;
  10.       char exitorno;
  11.       float x;
  12.       float y;
  13.       float z;
  14.      
  15.       do {
  16.       system ("CLS");
  17.       printf ("## Area Calculator 0.1 Beta.\n");
  18.       printf ("## Autor: 7h3.c0r3.\n");
  19.       printf ("## Please, choose your language.\n");
  20.       printf ("## 1. Enghlish\n");
  21.       printf ("## 2. Italiano\n");
  22.       printf ("## My choose: ");
  23.      
  24.       scanf ("%i", &choose); } while (choose > 2 || choose == 0);
  25.      
  26.       if (choose==1)
  27.      
  28.       {
  29.                     do {
  30.                     system ("CLS");
  31.                     printf ("## Enghlish selected!\n");  
  32.                     printf ("## Select the figure from the list.\n");
  33.                     printf ("## 1. Triangle\n");  
  34.                     printf ("## 2. Square\n");  
  35.                     printf ("## 3. Rectangle\n");  
  36.                     printf ("## 4. Trapeze\n");  
  37.                     printf ("## 5. Rumble\n");
  38.                     printf ("## 6. Circle\n");
  39.                     printf ("## 7. Another Polygons\n");      
  40.                     printf ("## My choose: ");
  41.                    
  42.                     scanf ("%i", &subchoose);
  43.                    
  44.                     switch (subchoose)
  45.                    
  46.                     {
  47.                            
  48.                            case 1:
  49.                                 printf ("\n## Enter the base dimension in cm: ");
  50.                                 scanf ("%f", &x);
  51.                                 printf ("## Enter the height dimension in cm: ");
  52.                                 scanf ("%f", &y);
  53.                                 printf ("## Area dimension: %f cm2.\n", (x*y)/2);
  54.                                 printf ("## Press 1 to exit, press 2 to continue: ");
  55.                                 scanf ("%i", &exitorno);
  56.                                 if (exitorno == 1)
  57.                                 {
  58.                                              return 0;
  59.                                 }
  60.                                 break;
  61.                                
  62.                                 case 2:
  63.                                 printf ("\n## Enter the side dimension in cm: ");
  64.                                 scanf ("%f", &x);
  65.                                 printf ("## Area dimension: %f cm2.\n", x*x);
  66.                                 printf ("## Press 1 to exit, press 2 to continue: ");
  67.                                 scanf ("%i", &exitorno);
  68.                                 if (exitorno == 1)
  69.                                 {
  70.                                              return 0;
  71.                                 }
  72.                                 break;
  73.                                
  74.                                 case 3:
  75.                                 printf ("\n## Enter the base dimension in cm: ");
  76.                                 scanf ("%f", &x);
  77.                                 printf ("## Enter the height in cm: ");
  78.                                 scanf ("%f", &y);
  79.                                 printf ("## Area dimension: %f cm2.\n", (x*y));
  80.                                 printf ("## Press 1 to exit, press 2 to continue: ");
  81.                                 scanf ("%i", &exitorno);
  82.                                 if (exitorno == 1)
  83.                                 {
  84.                                              return 0;
  85.                                 }
  86.                                 break;
  87.                                
  88.                                 case 4:
  89.                                 printf ("\n## Enter the greater base dimension in cm: ");
  90.                                 scanf ("%f", &x);
  91.                                 printf ("## Enter the smaller base dimension in cm: ");
  92.                                 scanf ("%f", &y);
  93.                                 printf ("## Enter the height dimension in cm: ");
  94.                                 scanf ("%f", &z);
  95.                                 printf ("## Area dimension: %f cm2.\n", ((x+y)*z)/2);
  96.                                 printf ("## Press 1 to exit, press 2 to continue: ");
  97.                                 scanf ("%i", &exitorno);;
  98.                                 if (exitorno == 1)
  99.                                 {
  100.                                              return 0;
  101.                                 }
  102.                                 break;
  103.                                
  104.                                 case 5:
  105.                                 printf ("\n## Enter the greater diagonal dimension in cm: ");
  106.                                 scanf ("%f", &x);
  107.                                 printf ("## Enter the smaller diagonal dimension in cm: ");
  108.                                 scanf ("%f", &y);
  109.                                 printf ("## Area dimension: %f cm2.\n", (x*y)/2);
  110.                                 printf ("## Press 1 to exit, press 2 to continue: ");
  111.                                 scanf ("%i", &exitorno);
  112.                                 if (exitorno == 1)
  113.                                 {
  114.                                              return 0;
  115.                                 }
  116.                                 break;
  117.                                
  118.                                 case 6:
  119.                                 printf ("\n## Enter the circle beam dimension in cm: ");
  120.                                 scanf ("%f", &x);
  121.                                 printf ("## Area dimension: %f cm2.\n", x*x*3.14);
  122.                                 printf ("## Press 1 to exit, press 2 to continue: ");
  123.                                 scanf ("%i", &exitorno);
  124.                                 if (exitorno == 1)
  125.                                 {
  126.                                              return 0;
  127.                                 }
  128.                                 break;
  129.                                
  130.                                 case 7:
  131.                                 printf ("\n## Enter the perimeter dimension in cm: ");
  132.                                 scanf ("%f", &x);
  133.                                 printf ("## Enter the apothem dimension in cm: ");
  134.                                 scanf ("%f", &y);
  135.                                 printf ("## Area dimension: %f cm2.\n", (x*y)/2);
  136.                                 printf ("## Press 1 to exit, press 2 to continue: ");
  137.                                 scanf ("%i", &exitorno);
  138.                                 if (exitorno == 1)
  139.                                 {
  140.                                              return 0;
  141.                                 }
  142.                                 break;
  143.                                
  144.                                  
  145.                                  } // fine switch
  146.                                 } while (subchoose > 7 || subchoose == 0 || exitorno == 1); // fine ciclo do-while
  147.                                return 0; // programma eseguito correttamente
  148.                               } // fine if
  149.      
  150.       if (choose==2)
  151.      
  152.       {
  153.                     do {
  154.                     system ("CLS");
  155.                     printf ("## Italiano selezionato!\n");  
  156.                     printf ("## Seleziona una delle seguenti figure.\n");
  157.                     printf ("## 1. Triangolo\n");  
  158.                     printf ("## 2. Quadrato\n");  
  159.                     printf ("## 3. Rettangolo\n");  
  160.                     printf ("## 4. Trapezio\n");  
  161.                     printf ("## 5. Rombo\n");
  162.                     printf ("## 6. Cerchio\n");
  163.                     printf ("## 7. Altri Poligoni\n");
  164.                     printf ("## La mia scelta: ");
  165.                    
  166.                     scanf ("%i", &subchoose);
  167.                    
  168.                       switch (subchoose)
  169.                    
  170.                     {
  171.                            
  172.                            case 1:
  173.                                 printf ("\n## Inserisci la misura della base in cm: ");
  174.                                 scanf ("%f", &x);
  175.                                 printf ("## Inserisci la misura dell'altezza in cm: ");
  176.                                 scanf ("%f", &y);
  177.                                 printf ("## La dimensione dell'area e': %f cm2.\n", (x*y)/2);
  178.                                 printf ("## Premi 1 per uscire, premi 2 per continuare: ");
  179.                                 scanf ("%i", &exitorno);
  180.                                 if (exitorno == 1)
  181.                                 {
  182.                                              return 0;
  183.                                 }
  184.                                 break;
  185.                                
  186.                                 case 2:
  187.                                 printf ("\n## Inserisci la misura del lato in cm: ");
  188.                                 scanf ("%f", &x);
  189.                                 printf ("## La dimensione dell'area e': %f cm2.\n", x*x);
  190.                                 printf ("## Premi 1 per uscire, premi 2 per continuare: ");
  191.                                 scanf ("%i", &exitorno);
  192.                                 if (exitorno == 1)
  193.                                 {
  194.                                              return 0;
  195.                                 }
  196.                                 break;
  197.                                
  198.                                 case 3:
  199.                                 printf ("\n## Inserisci la misura della base in cm: ");
  200.                                 scanf ("%f", &x);
  201.                                 printf ("## Inserisci la misura dell'altezza in cm: ");
  202.                                 scanf ("%f", &y);
  203.                                 printf ("## La dimensione dell'area e': %f cm2.\n", (x*y));
  204.                                 printf ("## Premi 1 per uscire, premi 2 per continuare: ");
  205.                                 scanf ("%i", &exitorno);
  206.                                 if (exitorno == 1)
  207.                                 {
  208.                                              return 0;
  209.                                 }
  210.                                 break;
  211.                                
  212.                                 case 4:
  213.                                 printf ("\n## Inserisci la misura della base maggiore in cm: ");
  214.                                 scanf ("%f", &x);
  215.                                 printf ("## Inserisci la misura della base minore in cm: ");
  216.                                 scanf ("%f", &y);
  217.                                 printf ("## Inserisci la misura dell'altezza in cm: ");
  218.                                 scanf ("%f", &z);
  219.                                 printf ("## La dimensione dell'area e': %f cm2.\n", ((x+y)*z)/2);
  220.                                 printf ("## Premi 1 per uscire, premi 2 per continuare: ");
  221.                                 scanf ("%i", &exitorno);
  222.                                 if (exitorno == 1)
  223.                                 {
  224.                                              return 0;
  225.                                 }
  226.                                 break;
  227.                                
  228.                                 case 5:
  229.                                 printf ("\n## Inserisci la misura della diagonale maggiore in cm: ");
  230.                                 scanf ("%f", &x);
  231.                                 printf ("## Inserisci la misura della diagonale minore in cm: ");
  232.                                 scanf ("%f", &y);
  233.                                 printf ("## La dimensione dell'area e': %f cm2.\n", (x*y)/2);
  234.                                 printf ("## Premi 1 per uscire, premi 2 per continuare: ");
  235.                                 scanf ("%i", &exitorno);
  236.                                 if (exitorno == 1)
  237.                                 {
  238.                                              return 0;
  239.                                 }
  240.                                 break;
  241.                                
  242.                                 case 6:
  243.                                 printf ("\n## Inserisci la misura del raggio in cm: ");
  244.                                 scanf ("%f", &x);
  245.                                 printf ("## La dimensione dell'area e': %f cm2.\n", x*x*3.14);
  246.                                 printf ("## Premi 1 per uscire, premi 2 per continuare: ");
  247.                                 scanf ("%i", &exitorno);
  248.                                 if (exitorno == 1)
  249.                                 {
  250.                                              return 0;
  251.                                 }
  252.                                 break;
  253.                                
  254.                                 case 7:
  255.                                 printf ("\n## Inserisci la misura del perimetro in cm: ");
  256.                                 scanf ("%f", &x);
  257.                                 printf ("## Inserisci la misura dell'apotema in cm: ");
  258.                                 scanf ("%f", &y);
  259.                                 printf ("## La dimensione dell'area e': %f cm2.\n", (x*y)/2);
  260.                                 printf ("## Premi 1 per uscire, premi 2 per continuare: ");
  261.                                 scanf ("%i", &exitorno);
  262.                                 if (exitorno == 1)
  263.                                 {
  264.                                              return 0;
  265.                                 }
  266.                                 break;
  267.                                
  268.                                  } //fine switch
  269.                                 } while (subchoose > 7 || subchoose == 0 || exitorno == 1); // fine ciclo do-while
  270.                                } // fine if
  271.                               return 0; // programma eseguito correttamente
  272.                              } // 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 il 01/06/2009 alle 20:34
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:51
Lunedì, 01/06/2009
Testo quotato

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.

Testo quotato


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

Testo quotato

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 ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 10:50
Martedì, 02/06/2009
Testo quotato

Postato originariamente da theprogrammer:

Testo quotato

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.

Testo quotato


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

Testo quotato

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:

PM Quote