Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <cstdlib> // dobbiamo includere una nuova libreria per la funzione atoi
- // questo è un piccolo trick, perchè c'è un bug nella MinGW
- using namespace std;
- // vai alla riga 120 int main()
- // le cose scritte tra questa riga e la 120 servono dopo
- // ------------------------------------------------------
- // dichiarazione della enumerazione seme
- // un enumerazione è semplicemente un rinominamento delle variabili
- // in modo che si possano leggere meglio nel codice
- // così al posto di dire stampa_carta(12, 3)
- // potremmo scrivere stampa_carta(12, picche)
- enum Seme{
- cuori = 0,
- quadri = 1,
- fiori = 2,
- picche = 3,
- };
- //enumerazione per i valori
- enum Valori{
- Asso = 1,
- Fante = 11,
- Donna = 12,
- Re = 13,
- };
- // Dichiariamo una funzione che si chiama stampa_carta
- // la funzione è un pezzo di codice che può essere richiamato infinitamente, altrove nel codice
- // la funzione ritornerà un valore "string"
- // il valore di ritorno è importante
- // int carta = stampa_carta(1, 2) darà errore, dato che dobbiamo avere una string
- // non un int! dunque dovremmo scrivere string carta = stampa_carta(1, 2)
- // la funzione prende due argomenti, un valore (numero intero) e un seme (numero intero)
- string stampa_carta(int valore, int seme){
- string nome_seme; // dichiarazione variabile seme
- // copia incolla dello switch block per il selezionare la stringa
- // corrispondente al nome del seme dall'intero
- switch(seme){
- case 0:
- nome_seme = "cuori";
- break;
- case 1:
- nome_seme = "quadri";
- break;
- case 2:
- nome_seme = "fiori";
- break;
- case 3:
- nome_seme = "picche";
- break;
- default:
- nome_seme = "seme non definito";
- }
- string nome_valore; // dichiarazione della variabile nome_valore
- // che conterrà Asso, Donna, Re, "1", "2", ecc
- // costruiamo uno switch block per determinare che nome avrà il valore
- // se sarà fante, donna, re o "1" o "2"
- switch(valore){
- case 1:
- nome_valore = "Asso";
- break;
- case 11:
- nome_valore = "Fante";
- break;
- case 12:
- nome_valore = "Donna";
- break;
- case 13:
- nome_valore = "Re";
- break;
- default:
- // qui useremo una funzione che si chiama itoa(int value, char* array, int base)
- // la funzione to_string converte il valore di tipo int
- // nella stringa
- // l'intero 1 diventerà la string "1"
- // purtroppo per fare questa "semplice" operazione
- // c++ ha dei difetti enormi e quindi bisogna scrivere
- // qualche riga di più
- char buffer[33]; // si dichiara una variabile sequenza caratteri
- // in questo caso 3 caratteri dato che i possibili valori nel nostro caso
- // sono da 1 a 13 più un carattere di stop
- // il buffer sarà di 33 caratteri perchè come spiegato da Andrea
- // un integer è 32 bit -> 2^32 + \0 null terminator.
- itoa(valore, buffer, 10); // che verra riempita da questa funzione
- // itoa: legge il valore, lo converte da int a char, e mette i caratteri
- // nella variabile buffer, e lo fa assumendo che il valore sia base 10
- // (ultimo parametro della funzione)
- nome_valore = buffer;
- }
- // costruiamo ora per intero il nome della carta
- string nome_carta = nome_valore + " di " + nome_seme;
- // da notare come usiamo il +, il + in questo caso signgifica
- // concatena i valori di nome_valore + " di " + nome_seme
- // es:
- // valore = 1; seme = 0;
- // nome_valore = "Asso"; nome_seme = "cuori";
- // "Asso" + " di " + "cuori"
- // "Asso di cuori"
- //qui diciamo alla funzione di passare il valore nome_carta all "return value"
- // abbiamo preso 2 valori intero, e abbiamo fatto dei calcoli
- // per ottenere una stringa nome carta che un altro blocco di codice userà
- return nome_carta;
- }
- // Lezione 5 - Funzioni
- int main()
- {
- cout << "------Il mazzo------" << endl;
- // il nostro programma per generare tutte le carte in un mazzo da
- // 52 carte
- // ciclo seme ( da 0 a 3)
- int seme = 0; // dichiariamo una variabile seme
- while(seme <= 3){ // fino a che seme sara minore uguale a tre
- // ciclo valore (da 1 a 13)
- int valore = 1; // dichiarazione e assegnazione del valore iniziale
- while(valore <= 13){ // fino a che la variabile valore non è 13, esegui le istruzioni
- string nome_seme; // dichiarazione variabile nome_seme
- switch(seme){ // prendi in considerazione la variabile seme (che può avere valore 0, 1, 2, 3)
- case 0: // in caso sia zero
- nome_seme = "cuori"; // assegna alla variabile nome_seme cuori
- break;
- case 1:// in caso seme sia 1
- nome_seme = "quadri"; // assegna quadri
- break;
- case 2: // ecc, ecc
- nome_seme = "fiori";
- break;
- case 3:
- nome_seme = "picche";
- break;
- default:// in caso non sia un valore sopra identificato fai uscire questa frase
- nome_seme = "seme non definito";
- }
- if(valore == 1){ // se valore è 1
- cout << "Asso di " << nome_seme << endl; // stampa Asso di fiori
- }
- else if(valore == 11){ // se il valore è 11
- cout << "Fante di " << nome_seme << endl; // stampa il Fante di fiori
- }
- else if(valore == 12){ // stampa regina di fiori
- cout << "Donna di "<< nome_seme << endl;
- }
- else if (valore == 13){ // stampa re di fiori
- cout << "Re di " << nome_seme << endl;
- }
- else{ // se il valore non è 1, 11, 12 o 13
- cout << valore << " di "<< nome_seme << endl; // stampa "(valore) di fiori"
- }
- valore++; // fa aumentare il valore di uno
- }
- seme++; // incrementa il seme
- }
- // questo programma stampa il mazzo ma ora se io voglio stampare una singola
- // carta? devo riscrivere ogni volta tutto l'ambaradan?
- // no posso implementare una funzione
- // una funzione è un blocco di codice che può essere richiamato a scelta
- // di regola le funzioni si dichiarano prima del main
- // qui la dichiareremo dopo, dato che il tutorial va dall alto al basso
- // VAI ALLA DEFINIZIONE DELLA FUNZIONE -> LINEA 33
- // -------------------------------------------------
- cout << endl;
- cout << "------Carte singole------" << endl;
- // dopo aver definito la funzione stampa_carta ora la possiamo usare così
- cout << "Carte singole" << endl;
- cout << "Questo stamperà l' Asso di cuori" << endl;
- cout << stampa_carta(1, 0) << endl;
- cout << "Stampa la donna di picche" << endl;
- cout << stampa_carta(12, 3) << endl;
- // per rendere piu comprensibile la lettura del codice
- // possiamo dichiarare un enumerazione di valori
- // VAI A LINEA 12
- // ---------------------------------------------------
- // ora possiamo scrivere in modo più umano
- cout << stampa_carta(3, cuori) << endl;
- cout << stampa_carta(Asso, quadri) << endl;
- return 0;
- }
- /* OUTPUT
- ------Il mazzo------
- Asso di cuori
- 2 di cuori
- 3 di cuori
- 4 di cuori
- 5 di cuori
- 6 di cuori
- 7 di cuori
- 8 di cuori
- 9 di cuori
- 10 di cuori
- Fante di cuori
- Donna di cuori
- Re di cuori
- Asso di quadri
- 2 di quadri
- 3 di quadri
- 4 di quadri
- 5 di quadri
- 6 di quadri
- 7 di quadri
- 8 di quadri
- 9 di quadri
- 10 di quadri
- Fante di quadri
- Donna di quadri
- Re di quadri
- Asso di fiori
- 2 di fiori
- 3 di fiori
- 4 di fiori
- 5 di fiori
- 6 di fiori
- 7 di fiori
- 8 di fiori
- 9 di fiori
- 10 di fiori
- Fante di fiori
- Donna di fiori
- Re di fiori
- Asso di picche
- 2 di picche
- 3 di picche
- 4 di picche
- 5 di picche
- 6 di picche
- 7 di picche
- 8 di picche
- 9 di picche
- 10 di picche
- Fante di picche
- Donna di picche
- Re di picche
- ------Carte singole------
- Carte singole
- Questo stamperÓ l' Asso di cuori
- Asso di cuori
- Stampa la donna di picche
- Donna di picche
- 3 di cuori
- Asso di quadri
- */
Advertisement
Add Comment
Please, Sign In to add comment