Pella86

Lezione 5 - Funzioni

Oct 9th, 2017
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.80 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cstdlib> // dobbiamo includere una nuova libreria per la funzione atoi
  4. // questo è un piccolo trick, perchè c'è un bug nella MinGW
  5.  
  6. using namespace std;
  7.  
  8. // vai alla riga 120 int main()
  9. // le cose scritte tra questa riga e la 120 servono dopo
  10. // ------------------------------------------------------
  11.  
  12. // dichiarazione della enumerazione seme
  13. // un enumerazione è semplicemente un rinominamento delle variabili
  14. // in modo che si possano leggere meglio nel codice
  15. // così al posto di dire stampa_carta(12, 3)
  16. // potremmo scrivere stampa_carta(12, picche)
  17. enum Seme{
  18.     cuori = 0,
  19.     quadri = 1,
  20.     fiori = 2,
  21.     picche = 3,
  22. };
  23.  
  24. //enumerazione per i valori
  25. enum Valori{
  26.     Asso = 1,
  27.     Fante = 11,
  28.     Donna = 12,
  29.     Re = 13,
  30. };
  31.  
  32.  
  33. // Dichiariamo una funzione che si chiama stampa_carta
  34. // la funzione è un pezzo di codice che può essere richiamato infinitamente, altrove nel codice
  35. // la funzione ritornerà un valore "string"
  36. // il valore di ritorno è importante
  37. // int carta = stampa_carta(1, 2) darà errore, dato che dobbiamo avere una string
  38. // non un int! dunque dovremmo scrivere string carta = stampa_carta(1, 2)
  39. // la funzione prende due argomenti, un valore (numero intero) e un seme (numero intero)
  40. string stampa_carta(int valore, int seme){
  41.         string nome_seme; // dichiarazione variabile seme
  42.  
  43.         // copia incolla dello switch block per il selezionare la stringa
  44.         // corrispondente al nome del seme dall'intero
  45.  
  46.         switch(seme){
  47.             case 0:
  48.                 nome_seme = "cuori";
  49.                 break;
  50.             case 1:
  51.                 nome_seme = "quadri";
  52.                 break;
  53.             case 2:
  54.                 nome_seme = "fiori";
  55.                 break;
  56.             case 3:
  57.                 nome_seme = "picche";
  58.                 break;
  59.             default:
  60.                 nome_seme = "seme non definito";
  61.         }
  62.  
  63.         string nome_valore; // dichiarazione della variabile nome_valore
  64.                             // che conterrà Asso, Donna, Re, "1", "2", ecc
  65.  
  66.         // costruiamo uno switch block per determinare che nome avrà il valore
  67.         // se sarà fante, donna, re o "1" o "2"
  68.         switch(valore){
  69.             case 1:
  70.                 nome_valore = "Asso";
  71.                 break;
  72.             case 11:
  73.                 nome_valore = "Fante";
  74.                 break;
  75.             case 12:
  76.                 nome_valore = "Donna";
  77.                 break;
  78.             case 13:
  79.                 nome_valore = "Re";
  80.                 break;
  81.             default:
  82.                 // qui useremo una funzione che si chiama itoa(int value, char* array, int base)
  83.                 // la funzione to_string converte il valore di tipo int
  84.                 // nella stringa
  85.                 // l'intero 1 diventerà la string "1"
  86.                 // purtroppo per fare questa "semplice" operazione
  87.                 // c++ ha dei difetti enormi e quindi bisogna scrivere
  88.                 // qualche riga di più
  89.                 char buffer[33]; // si dichiara una variabile sequenza caratteri
  90.                 // in questo caso 3 caratteri dato che i possibili valori nel nostro caso
  91.                 // sono da 1 a 13 più un carattere di stop
  92.                 // il buffer sarà di 33 caratteri perchè come spiegato da Andrea
  93.                 // un integer è 32 bit -> 2^32 + \0 null terminator.
  94.                 itoa(valore, buffer, 10); // che verra riempita da questa funzione
  95.                 // itoa: legge il valore, lo converte da int a char, e mette i caratteri
  96.                 // nella variabile buffer, e lo fa assumendo che il valore sia base 10
  97.                 // (ultimo parametro della funzione)
  98.                 nome_valore = buffer;
  99.         }
  100.  
  101.         // costruiamo ora per intero il nome della carta
  102.         string nome_carta = nome_valore + " di " + nome_seme;
  103.         // da notare come usiamo il +, il + in  questo caso signgifica
  104.         // concatena i valori di nome_valore + " di "  + nome_seme
  105.         // es:
  106.         // valore = 1;           seme = 0;
  107.         // nome_valore = "Asso"; nome_seme = "cuori";
  108.         // "Asso" + " di " + "cuori"
  109.         // "Asso di cuori"
  110.  
  111.         //qui diciamo alla funzione di passare il valore nome_carta all "return value"
  112.         // abbiamo preso 2 valori intero, e abbiamo fatto dei calcoli
  113.         // per ottenere una stringa nome carta che un altro blocco di codice userà
  114.         return nome_carta;
  115. }
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122. // Lezione 5 - Funzioni
  123. int main()
  124. {
  125.     cout << "------Il mazzo------" << endl;
  126.     // il nostro programma per generare tutte le carte in un mazzo da
  127.     // 52 carte
  128.  
  129.     // ciclo seme ( da 0 a 3)
  130.     int seme = 0; // dichiariamo una variabile seme
  131.  
  132.     while(seme <= 3){ // fino a che seme sara minore uguale a tre
  133.  
  134.         // ciclo valore (da 1 a 13)
  135.         int valore = 1; // dichiarazione e assegnazione del valore iniziale
  136.  
  137.         while(valore <= 13){ // fino a che la variabile valore non è 13, esegui le istruzioni
  138.  
  139.             string nome_seme; // dichiarazione variabile nome_seme
  140.  
  141.             switch(seme){ // prendi in considerazione la variabile seme (che può avere valore 0, 1, 2, 3)
  142.                 case 0: // in caso sia zero
  143.                     nome_seme = "cuori"; // assegna alla variabile nome_seme cuori
  144.                     break;
  145.                 case 1:// in caso seme sia 1
  146.                     nome_seme = "quadri"; // assegna quadri
  147.                     break;
  148.                 case 2: // ecc, ecc
  149.                     nome_seme = "fiori";
  150.                     break;
  151.                 case 3:
  152.                     nome_seme = "picche";
  153.                     break;
  154.                 default:// in caso non sia un valore sopra identificato fai uscire questa frase
  155.                     nome_seme = "seme non definito";
  156.             }
  157.  
  158.  
  159.             if(valore == 1){ // se valore è 1
  160.                 cout << "Asso di " <<  nome_seme << endl; // stampa Asso di fiori
  161.             }
  162.             else if(valore == 11){ // se il valore è 11
  163.                 cout << "Fante di " << nome_seme << endl; // stampa il Fante di fiori
  164.             }
  165.             else if(valore == 12){ // stampa regina di fiori
  166.                 cout << "Donna di "<< nome_seme << endl;
  167.             }
  168.             else if (valore == 13){ // stampa re di fiori
  169.                 cout << "Re di " << nome_seme << endl;
  170.             }
  171.             else{ // se il valore non è 1, 11, 12 o 13
  172.                 cout << valore << " di "<< nome_seme << endl; // stampa "(valore) di fiori"
  173.             }
  174.             valore++; // fa aumentare il valore di uno
  175.         }
  176.         seme++; // incrementa il seme
  177.     }
  178.  
  179.     // questo programma stampa il mazzo ma ora se io voglio stampare una singola
  180.     // carta?  devo riscrivere ogni volta tutto l'ambaradan?
  181.     // no posso implementare una funzione
  182.  
  183.     // una funzione è un blocco di codice che può essere richiamato a scelta
  184.     // di regola le funzioni si dichiarano prima del main
  185.     // qui la dichiareremo dopo, dato che il tutorial va dall alto al basso
  186.  
  187.     // VAI ALLA DEFINIZIONE DELLA FUNZIONE -> LINEA 33
  188.     // -------------------------------------------------
  189.  
  190.     cout << endl;
  191.     cout << "------Carte singole------" << endl;
  192.     // dopo aver definito la funzione stampa_carta ora la possiamo usare così
  193.  
  194.     cout << "Carte singole" << endl;
  195.     cout << "Questo stamperà l' Asso di cuori" << endl;
  196.     cout << stampa_carta(1, 0) << endl;
  197.     cout << "Stampa la donna di picche" << endl;
  198.     cout << stampa_carta(12, 3) << endl;
  199.  
  200.     // per rendere piu comprensibile la lettura del codice
  201.     // possiamo dichiarare un enumerazione di valori
  202.     // VAI A LINEA 12
  203.     // ---------------------------------------------------
  204.  
  205.     // ora possiamo scrivere in modo più umano
  206.  
  207.     cout << stampa_carta(3, cuori) << endl;
  208.     cout << stampa_carta(Asso, quadri) << endl;
  209.  
  210.     return 0;
  211. }
  212.  
  213.  
  214.  
  215.  
  216.  
  217. /* OUTPUT
  218. ------Il mazzo------
  219. Asso di cuori
  220. 2 di cuori
  221. 3 di cuori
  222. 4 di cuori
  223. 5 di cuori
  224. 6 di cuori
  225. 7 di cuori
  226. 8 di cuori
  227. 9 di cuori
  228. 10 di cuori
  229. Fante di cuori
  230. Donna di cuori
  231. Re di cuori
  232. Asso di quadri
  233. 2 di quadri
  234. 3 di quadri
  235. 4 di quadri
  236. 5 di quadri
  237. 6 di quadri
  238. 7 di quadri
  239. 8 di quadri
  240. 9 di quadri
  241. 10 di quadri
  242. Fante di quadri
  243. Donna di quadri
  244. Re di quadri
  245. Asso di fiori
  246. 2 di fiori
  247. 3 di fiori
  248. 4 di fiori
  249. 5 di fiori
  250. 6 di fiori
  251. 7 di fiori
  252. 8 di fiori
  253. 9 di fiori
  254. 10 di fiori
  255. Fante di fiori
  256. Donna di fiori
  257. Re di fiori
  258. Asso di picche
  259. 2 di picche
  260. 3 di picche
  261. 4 di picche
  262. 5 di picche
  263. 6 di picche
  264. 7 di picche
  265. 8 di picche
  266. 9 di picche
  267. 10 di picche
  268. Fante di picche
  269. Donna di picche
  270. Re di picche
  271.  
  272. ------Carte singole------
  273. Carte singole
  274. Questo stamperÓ l' Asso di cuori
  275. Asso di cuori
  276. Stampa la donna di picche
  277. Donna di picche
  278. 3 di cuori
  279. Asso di quadri
  280. */
Advertisement
Add Comment
Please, Sign In to add comment