Esercizi sulle istruzioni di ripetizione (superiori)

I seguenti esercizi riguardano Istruzioni di Ripetizione studiati nella Lezione 13 della Parte Prima. Essi sono divisi per paragrafi in modo tale da favorire la scelta degli esercizi specifici.

quiz
quiz
Esercizi sulle istruzioni di ripetizione (superiori)
Tipo di risorsa Tipo: quiz
Materia di appartenenza Materia: Informatica (istituti tecnici) per le superiori
Avanzamento Avanzamento: quiz completo al 00%

Es (do-while) Indovina il numero

modifica

Esercizio Indovina il numero (0-9)

modifica

Il computer pensa a un numero intero compreso fra 0 e 9 (estremi inclusi) e tu lo devi indovinare. Quando ci riesci il computer visualizza il numero di tentativi. Questo esercizio deve essere risolto con l'istruzione do-while , infatti non si conoscono a priori il numero di tentativi(ripetizioni) ma sicuramente almeno un tentativo lo devi fare per indovinare il numero segreto. Il computer per generare dei numeri a caso (valore random ) utilizza una funzione rand() che ogni volta viene richiamata genera un valore appartenente a una sequenza pseudocasuale (cioè appartenenti a una sequenza di numeri che sembrano casuali) tutta la sequenza pseudocasuale è determinata da un particolare valore detto seme (seed) che può essere deciso tramite la funzione srand(numeroseme), per evitare che il computer riproponga sempre la stessa sequenza prima del comando rand() usa (basta una sola volta) il comando srand(time(NULL)) dove l'istante di esecuzione del programma (time(NULL)) diventa il valore del seme.Per utilizzare rand e srand devi aggiungere (INCLUDE) la libreria cstdlib mentre per il time la libreria time.h . La funzione rand genera dei numeri da 0 a un numero molto grande (almeno 32000 e rotti) se vogliamo riportare questo numero casuale nella fascia 0-9 basta calcolare il resto della divisione per 10 cioè x=rand()%10; questo perché il resto di una divisione per 10 assume solo i valori compresi fra 0 e 9, se vogliamo invece generare un numero fra 7 e 15 ( i possibili numeri sono 9) usiamo x=7+rand()%9;

#include <cstdlib>
#include <iostream>

#include <time.h>
using namespace std;
/* indovina il numero segreto pensato dal computer
   il numero e' compreso fra 0 e 9 
*/
   
int main(int argc, char *argv[])
{
    int numerosegreto, numero,conta;
    bool trovato=false;
    srand(time(NULL));
    numerosegreto= rand()%10;
    conta=0;
    do
    {cout<<"indovina il numero";
     cin>>numero;
     conta++;
    }
    while(numerosegreto!=numero);
    
    cout<<"complimenti hai vinto"<<endl;
    cout<<"hai impiegato "<<conta<<" tentativi"<<endl;
    
    
    system("PAUSE");)) ntogli questa riga se usi il dev c++ 5.xx
    return EXIT_SUCCESS;
}

Esercizio Indovina il numero (0-9999), ti aiuto io

modifica

Il computer pensa a un numero intero compreso fra 0 e 9999 (estremi inclusi) e tu lo devi indovinare. Quando ci riesci il computer visualizza il numero di tentativi.Il computer quando sbagli ti dice se il numero inserito è minore o maggiore di quello da indovinare

#include <cstdlib>
#include <iostream>

using namespace std;
/* indovinare un numero intero compreso fra 0 e 9999
   obiettivo: uso struttura ciclica do while (controllo in coda)
              uso funzione rand e srand
              generare un numero casuale (random) 
              ricerca su internet e comprensione reference sui comandi rand
              e srand, inizialmente l'esercizio è risolto senza l'uso di srand
              operazione di modulo
              concetto seme , sequenza pseudoaleatoria 
*/
int main(int argc, char *argv[])
{ int numerosegreto;
  bool trovato ;
  int n,conta;
  
  srand ( time(NULL) );
  cout <<"INDOVINA IL NUMERO FRA 0 e 9999"<<endl ;
  numerosegreto = rand()%9999;
  trovato = false;
  conta=0;
  
  do
  { cout<<"inserisci il numero ? ";
    cin>>n;
    conta++;

    if (n==numerosegreto)
       {  trovato=true;
          cout <<"Complimenti hai indovinato il numero"<<endl ;
          cout<<"hai impiegato "<<conta<<" tentativi"<<endl;
       }
    else
       { if (numerosegreto > n) cout <<"prova con un numero maggiore"<<endl;
         else                   cout <<"prova con un numero minore"<<endl;
         
       }   
     
  }
  while(trovato == false);
  
  system("PAUSE");
  return 0;
}

naturalmente potevi risolvere il problema anche con

#include <cstdlib>
#include <iostream>

using namespace std;
/* indovinare un numero intero compreso fra 0 e 9999
   obiettivo: uso struttura ciclica do while (controllo in coda)
              uso funzione rand e srand
              generare un numero casuale (random) 
              ricerca su internet e comprensione reference sui comandi rand
              e srand, inizialmente l'esercizio è risolto senza l'uso di srand
              operazione di modulo
              concetto seme , sequenza pseudoaleatoria 
*/
int main(int argc, char *argv[])
{ int numerosegreto;
  int n,conta;
  
  srand ( time(NULL) );
  cout <<"INDOVINA IL NUMERO FRA 0 e 9999"<<endl ;
  numerosegreto = rand()%9999;
  conta=0;
  
  do
  { cout<<"inserisci il numero ? ";
    cin>>n;
    conta++;

   if (numerosegreto > n)    cout <<"prova con un numero maggiore"<<endl;
   else if(numerosegreto<n)  cout <<"prova con un numero minore"<<endl;
         
  }
  while(n!=numerosegreto);

 cout <<"Complimenti hai indovinato il numero"<<endl ;
 cout<<"hai impiegato "<<conta<<" tentativi"<<endl;
  
  system("PAUSE");
  return 0;
}

per casa vai sul sito e studia la funzione rand() e srand()

Es (while) La nonna è stanca

modifica

La nonna è stanca

modifica

La signora Rosa pensa a dei numeri quando non è stanca. Vuole che la aiuti a farne la somma, fai attenzione perché la signora Rosa ti comunica un numero alla volta e se si stanca (può esserlo anche subito prima di averti comunicato un qualsiasi numero) vuole sapere la somma dei numeri per poi andare a dormire tranquilla.

L'obiettivo del problema è l'uso dell'istruzione ciclica While, infatti ci sono delle azioni ripetitive (ti comunica un numero alla volta) che sono funzione di una condizione e può capitare che Rosa sia stanca e vada subito a dormire senza comunicarti nessun numero, cioè che non avvenga neanche la prima iterazione (ciclo iniziale).

#include <cstdlib>
#include <iostream>

using namespace std;

/* La signora Rosa pensa a dei numeri quando non e' stanca .
   vuole che la aiuti a farne la somma , 
   attenzione perché la signora Rosa ti comunica un numero alla volta 
   e se si stanca ( può esserlo anche subito prima di comunicarti
   un qualsiasi numero) vuole sapere la somma dei numeri per poi andare a dormire 
   tranquilla 
   
    obiettivo : uso istruzione while
                struttura ripetitiva con controllo in testa 
                possibilità nessuna iterazione   
*/
int main(int argc, char *argv[])
{ char risposta;
  int somma;
  int n;
  
  cout <<"Rosa sei stanca? ( s per sì e n per no)";
  cin>> risposta;
  
  somma = 0;
  while( risposta == 'n')
  { cout <<" inserisci il numero che hai pensato ";
    cin >> n;
    somma = somma+n;
    
    cout <<"Rosa sei stanca? ( s per si e n per no)";
    cin>> risposta;
  }
  
  cout <<"la somma dei numeri sognati e' "<< somma<<endl;
  
  system("PAUSE");
  return 0;
}

Es (for) Somma di 5 numeri

modifica

Somma di 5 numeri

modifica

Il programma inizia con la lettura dei 5 numeri da tastiera. Per far questo utilizziamo un ciclo for che legge i 5 numeri che di volta in volta verranno inseriti in una variabile e poi sommati alla variabile somma.

#include <iostream>
using namespace std;
/* Calcolare la somma di 5 numeri inseriti nella tastiera */
int main(int argc, char** argv) 
{   int i, numero, somma=0;
    for (i=1; i<6; i++)
      { 
       cout<<"inserire il numero"<<i<<endl;
       cin>>numero;
       somma = somma + numero;
      }
    cout<<"la somma dei numeri inseriti è :"<<somma;
	return 0;
}

Es (for) Analisi sequenza dati

modifica

Vogliamo inserire 100 numeri e calcolare :

  • la somma dei 100 numeri
  • la media
  • il minimo e il massimo
  • contare quante volte il numero 54 è stato inserito
  • calcolare quanti numeri pari ci sono
  • calcolare quanti numeri dispari appartenenti all'intervallo [4,50[ ci sono

Vediamo di analizzare la soluzione del problema un quesito alla volta , e ad ogni quesito risolto compiliamo ed eseguiamo il programma.Per calcolare la somma di 100 numeri non bisogna creare 100 variabili separate perché la scrittura del programma si complica notevolmente, bisogna pensare di inserire un numero per 100 volte, cioè pensiamo di usare un simpatico For

Creiamo il programma e aggiungiamo lo using namespace std; otteniamo la struttura di base

#include <iostream>
using namespace std;

/* l'utente inserisce 100 numeri , il programma calcola la somma e la media */

int main(int argc, char** argv) 
{ 
	return 0;
}

per inserire i 100 numeri scriviamo il seguente codice

#include <iostream>
using namespace std;

/* l'utente inserisce 100 numeri , il programma calcola la somma e la media */

int main(int argc, char** argv) 
{ int x,i;
  
  for(i=1;i<=100;i++)
  {cout<<"inserisci il "<<i<<"° numero ";
   cin>>x;
  }

 return 0;
}

ora il contatore del for (la variabile i) assume nel primo ciclo il valore 1, poi nel secondo il valore 2 e via via fino al valore 100 il cout inserito nel for trae vantaggio dal valore del contatore per creare una scritta che varia ad ogni ciclo,
nel primo dice inserire il 1° numero
nel secondo ciclo inserire il 2° numero
e via via fino al centesimo ciclo dove compare la scritta inserire il 100° numero

ad ogni ciclo dopo aver visualizzato la scritta viene acquisito il numero scritto da tastiera e caricato nella variabile x, in ogni ciclo allora x rappresenta il valore appena inserito.

per calcolare la somma usiamo il seguente codice

#include <iostream>
using namespace std;

/* l'utente inserisce 100 numeri , il programma calcola la somma e la media */

int main(int argc, char** argv) 
{ int x,i, somma;
  
  
  somma=0;
  for(i=1;i<=100;i++)
  {cout<<"inserisci il "<<i<<"° numero ";
   cin>>x;
   somma=somma+x;
  }
    
  cout<<"la somma dei numeri vale "<<somma<<endl;
  return 0;
}

ora per calcolare la somma dei numeri inseriti li accumuliamo ad ogni ciclo nella variabile somma mediante i comando somma=somma+x; prima del for inizializziamo la variabile somma a zero, in questo modo quando nel primo ciclo dopo aver inserito un numero (pensiamo sia 13) nella variabile x eseguiamo il comando somma=somma+x; nel valutare somma+x si ha che la somma vale zero , e visto che x vale 13 si ottiene 0+13 cioè 13 , il risultato viene caricato nella variabile somma e adesso somma vale 13, ricordate che l'operatore di assegnazione viene risolto in due fasi temporali distinte. Nel secondo ciclo pensiamo di inserire il numero 7 nella variabile x, ora quando si esegue somma=somma+x; ora quando si valuta somma+x si ha somma=13 e x=7 13+7=20 e il numero 20 viene trasferito nella variabile somma. ad ogni ciclo la variabile somma accumula il valore x inserito in quel ciclo , e questo si ripete fino al ciclo 100.

Una volta calcolata la somma dei 100 numeri siamo in grado di calcolare la media, questa è una operazione che si esegue una sola volta e viene scritta fuori dal for,
inserire il calcolo della media nel for NON va bene, non c'è la necessita' di ripetere il comando media=somma/100 e non ha senso farlo prima di aver calcolato l'intera somma dei 100 numeri.

#include <iostream>
using namespace std;

/* l'utente inserisce 100 numeri , il programma calcola la somma e la media */

int main(int argc, char** argv) 
{ int x,i, somma;
  float media;
  
  somma=0;
  for(i=1;i<=100;i++)
  {cout<<"inserisci il "<<i<<"° numero ";
   cin>>x;
   somma=somma+x;
  }
   
  media=(float)somma/100;
  
  cout<<"la somma dei numeri vale "<<somma<<endl;
  cout<<"la media dei numeri inseriti vale "<<media<<endl;
	return 0;
}

ora se si scrive media=somma/100; si perdono i decimali della media, vediamo perché.

Somma è un intero, 100 viene considerato un intero la divisione è una divisione fra interi e allora il programma calcola solo la parte intera del quoziente e poi scrive questo numero nella variabile media. Per evitare il problema possiamo scrivere media=somma/100.0; in questo caso somma è intero ma 100.0 viene pensato come a un float, il programma per svolgere la divisione deve convertire i valori coinvolti nella divisione nello stesso tipo (float float o int int)e preferisce convertire il valore di somma in un float perché non si ha perdità di precisione questa conversione automatica è detta cast implicito, ( la conversione da float a int invece produrrebbe una perdita di precisione e quindi non viene mai eseguita automaticamente) dopo questa conversione implicita la divisione è fra due float e il risultato conserva le cifre decimali. Possiamo obbligare il programma a convertire un tipo di dato in un altro anche se la cosa può produrre una perdita di precisione con una operazione di cast esplicito ad esempio scrivendo media=(float)somma/100; il (float)somma converte il valore di somma da usarsi nella divisione in un numero di tipo float, dopo questa conversione esplicita di somma il 100 subisce una conversione implicita a float e così la divisione è fra float e il risultato ha i suoi decimali.

Siamo pronti ora a contare quante volte il numero 54 è stato inserito da tastiera, per contare usiamo una variabile che funge da contatore che viene inizializzata a zero e gestita in modo similare all'accumulatore con la differenza che ora l'eventuale incremento è solo unitario, si ottiene

#include <iostream>
using namespace std;

/* l'utente inserisce 100 numeri , il programma calcola la somma e la media */

int main(int argc, char** argv) 
{ int x,i, somma, conta;
  float media;
  
  somma=0;
  conta=0;
  for(i=1;i<=100;i++)
  {cout<<"inserisci il "<<i<<"° numero ";
   cin>>x;
   somma=somma+x;
   if(x==54) conta++;
  }
   
  media=(float)somma/100;
  
  cout<<"la somma dei numeri vale "<<somma<<endl;
  cout<<"la media dei numeri inseriti vale "<<media<<endl;
  cout<<"il numero 54 e' stato inserito "<<conta<<" volte"<<endl;
	return 0;
}

conta++ in questo caso può essere sostituito perfettamente da conta=conta+1; l'if scritto è un if semplice la cui unica istruzione del caso vero è stata scritta sulla stessa riga della condizione per compattezza.

passiamo al calcolo del min e del max, se si vuole trovare l'altezza dell'alunno più grande di una classe si procede nel seguente modo

  • si chiama il primo alunno e si memorizza la sua altezza su un foglietto (essendo il primo la sua altezza e temporaneamente anche quella max )
  • poi uno ad uno si chiamano gli studenti successivi e si confronta il valore del foglietto (max temporaneo) con l'altezza dello studente, se questo è più alto si aggiorna il valore del foglietto
  • alla fine il valore scritto sul foglietto è il nostro max assoluto

Ora questa procedura ha l'inconveniente di dover trattare il primo studente in modo diverso da quelli successivi, il primo studente infatti non subisce un confronto ma la sua altezza diventa il valore scritto su foglietto, per omogeneizzare lo stesso trattamento (confronto) a tutti gli studenti,

  • prima di entrare in classe scriviamo sul foglietto un numero molto negativo e anche se non è vero lo pensiamo come l'altezza max temporanea, poi entriamo in classe e
  • uno ad uno si chiamano gli studenti e si confronta il valore del foglietto (max temporaneo) con l'altezza dello studente, se questo è più alto si aggiorna il valore del foglietto
  • alla fine il valore scritto sul foglietto è il nostro max assoluto

Ora il numero più piccolo che una variabile intera può assumere è il valore INT_MIN. Per risolvere il problema del min scriviamo sul foglietto il numero più grande che ci viene in mente ( INT_MAX ) e poi entrati in classe uno ad uno si chiamano gli studenti e si confronta il valore del foglietto (minx temporaneo) con l'altezza dello studente, se questo è più basso si aggiorna il valore del foglietto alla fine il valore scritto sul foglietto è il nostro min assoluto .Il programma allora diventa

#include <iostream>
#include <stdlib.h>
using namespace std;

/* l'utente inserisce 100 numeri , il programma calcola la somma e la media */

int main(int argc, char** argv) 
{ int x,i, somma, conta, min,max;
  float media;
  
  somma=0;
  conta=0;
  max=INT_MIN;
  min=INT_MAX;
  for(i=1;i<=100;i++)
  {cout<<"inserisci il "<<i<<"° numero ";
   cin>>x;
   somma=somma+x;
   if(x==54) conta++;
   
   if(x>max)max=x;
   
   if(x<min)min=x;
  }
   
  media=(float)somma/100;
  
  cout<<"la somma dei numeri vale "<<somma<<endl;
  cout<<"la media dei numeri inseriti vale "<<media<<endl;
  cout<<"il numero 54 e' stato inserito "<<conta<<" volte"<<endl;
  cout<<"il minimo vale"<<min<<endl;
  cout<<"il massimo vale"<<max<<endl;
  
	return 0;
}

si è dovuta aggiungere una libreria stdlib per avere a disposizione INT_MAX e INT_MIN.

ora ci rimane il problema di contare i numeri pari, un numero intero è pari se il resto della divisione per due è zero cioè se x%2==0 il % calcola infatti il resto della divisione per 2, mentre se si vogliono i dispari x%2==1

il programma diventa

#include <iostream>
#include <stdlib.h>
using namespace std;

/* l'utente inserisce 100 numeri , il programma calcola la somma e la media */

int main(int argc, char** argv) 
{ int x,i, somma, conta, min,max,contapari,contadisparieintervallo;
  float media;
  
  somma=0;
  conta=0;
  max=INT_MIN;
  min=INT_MAX;
  contapari=0;
  contadisparieintervallo=0;
  
  
  for(i=1;i<=100;i++)
  {cout<<"inserisci il "<<i<<"° numero ";
   cin>>x;
   somma=somma+x;
   if(x==54) conta++;
   
   if(x>max) max=x;
   
   if(x<min) min=x;
   
   if(x%2==0) contapari++;
   
   if(x%2==1 && x>=4 && x<50) contadisparieintervallo++;
   
  }
   
  media=(float)somma/100;
  
  cout<<"la somma dei numeri vale "<<somma<<endl;
  cout<<"la media dei numeri inseriti vale "<<media<<endl;
  cout<<"il numero 54 e' stato inserito "<<conta<<" volte"<<endl;
  cout<<"il minimo vale"<<min<<endl;
  cout<<"il massimo vale"<<max<<endl;
  cout<<"i numeri pari sono"<<contapari<<endl;
  cout<<"i numeri dispari appartenenti all'intervallo [4,50[ sono"
      <<contadisparieintervallo<<endl;
     
  
	return 0;
}

Es (for) Sequenze Numeriche

modifica

Utilizzare il contatore del ciclo for per generare una sequenza di valori

modifica

In alcuni casi è possibile usare un ciclo for per generare una sequenza di valori in modi diversi

  1. modificando il valore iniziale, la condizione e il passo del contatore e stampando il contatore
  2. lasciando che il contatore conti normalmente 0,1,2,3 etc e scrivendo una formula che impiega il contatore

sono da sapersi entrambe, e fra le due è meglio far fare al contatore il semplice conteggio 0,1,2,3,4 etc

usando un ciclo for:

  • stampare i numeri fra 0 e 9;
 for(i=0;i<10;i++)
    cout<< i<<" ";
 
  • stampare i numeri fra 0 e 10
for(i=0;i<=10;i++)
   cout<< i<<" ";

oppure

for(i=0;i<11;i++)
   cout<< i<<" ";
  • stampare i numeri fra 5 e 15;

in totale sono 10 i numeri da stampare

  for(i=5;i<=15;i++)
    cout<< i<<" ";

oppure

 for(i=0;i<10;i++)
    cout<< i+5 <<" ";
  • stampare i numeri 0,2,4,6,8,10 ... 20
for(i=0;i<=10;i++)
    cout<< i*2 <<" ";

oppure

for(i=0;i<=20;i=i+2)
    cout<< i <<" ";
  • stampare 1,3,5,7,9,11 ... 21
for(i=0;i<=10;i++)
    cout<< i*2+1 <<" ";

oppure

for(i=1;i<=21;i=i+2)
     cout<< i <<" ";
  • stampare 2,7,12,17 ... 72
for(i=0;i<=14;i++)
    cout<< 2+i*5 <<" ";

oppure

 for(i=2;i<=72;i=i+5)
    cout<< i <<" ";
  • stampare 10 9,8,...0;
for(i=10;i>=0;i--)
    cout<< i <<" ";

oppure

for(i=0;i<=10 ;i++)
    cout<< 10-i <<" ";
  • stampare tabellina del 4
a=4;
for(i=1;i<=10;i++)
    { b=i;
      c=a*b;
      cout<< a <<"*"<<b<<"="<<c<<endl;
    }

oppure

for(i=1;i<=10;i++)
      cout<< 4 <<"*"<<i<<"="<<4*i<<endl;
  • stampare sulla prima colonna i numeri da 1 a 10 nella seconda colonna i quadrati dei numeri e nella terza i cubi dei numeri ( n n^2 n^3 )
for(i=1;i<=10;i++)
    { a=i;
      b=i*i;
      c=i*i*i;
      cout<< a <<" "<<b<<" "<<c<<endl;
    }

oppure

for(i=1;i<=10;i++)
    cout<< i <<"/t "<<i*i<<"/t "<<i*i*i<<endl;
    
  • stampare seq cresc e quella decrescente su due colonne affiancate
   for(i=0;i<=10;i++)
    { a=i;
      b=10-i;
      cout<< a <<" "<<b<<endl;
    }
  

oppure

   for(i=0;i<=10;i++)
     cout<< i <<" "<<10-i<<endl;
   
  
  • stampare seq 0..10 ma saltare il 7
 for(i=0;i<=10;i++)
    { if(i==7) continue;
      cout<< i <<" ";
    }
  • stampare seq 0 .. 10 ma bloccare il ciclo for quando arriva a 6
for(i=0;i<=10;i++)
    { if(i==6) break;
      cout<< i <<" ";
    }
  • scrivi un ciclo infinito
 for(;;)
   cout<<"ci vuole una pausa";

Es (for) Supermarket

modifica

Esercizio supermercato

modifica

Marco compra 12 articoli e si reca poi in cassa per pagarli. Ogni articolo con prezzo superiore a 9€ viene scontato del 7%. Se il totale è superiore a 150€ si applica uno sconto al totale del 10%. Stampa il totale scontato, lo sconto totale e il nome dell'articolo più costoso.

       #include <iostream>
       #include <cstdlib>
       using namespace std;
       int main(int argc, char** argv) 
       {

float prezzo,sconto,totale=0.0,max=0.0; int i; string x,nome;

     for(i=0;i<12;i++)
      {cout<<"prezzo"<<endl;
        cin>>prezzo;
       cout<<"nome"<<endl;
        cin>>nome;
       if(prezzo<9)
        prezzo=prezzo-prezzo*0.07;
       if(prezzo>max)
        {max=prezzo;
         x=nome;
        }
       totale=totale+prezzo;
      }

if(totale>150) {sconto=totale*0.1; totale=totale-sconto; } cout<<"totale scotato:"<<totale<<endl; cout<<"lo sconto e' di:"<<sconto<<endl; cout<<"l'articolo più costoso e':"<<x<<endl; return 0; }

Es (while) Bisca Clandestina

modifica

Bisca Clandestina

modifica

Marco ha deciso di aprire una sala giochi fra i suoi "amici", domanda alle persone in sala se vogliono giocare a dadi, se c'è qualcuno che vuole giocare lo invita sul palco e gli domanda su quale numero vuole scommettere e quanti soldi vuole puntare, poi lancia il dado della fortuna e se il numero del dado corrisponde a quello su cui c'è la puntata restituisce il doppio della cifra puntata, altrimenti lo invita a giocare nuovamente perché la fortuna è nell'aria e più si gioca e più si vince, quindi invita nuovamente le persone a giocare ripetendo il gioco. Visto che gli affari si sono dimostrati redditizi vuole riproporre il gioco mediante una slot machine, aiutalo a scrivere il programma. Qualche volta, anche se Marco è bravo a convincere gli amici, nessuno vuole giocare con lui.

Per generare un numero a caso compreso fra 1 e 6 usiamo la funzione 1+rand()%6 , rand() genera un numero , %6 calcola ilresto della divisione del numero generato con 6, il resto è un numero compreso fra 0 e 5 , a cui aggiungiamo uno in modo che vari fra 1 e 6.

Il gioco si ripete per ogni cliente, ma non sappiamo apriori quante persone giocano, qualche volta capita pure che nessuno voglia giocare, l'istruzione di ripetizione da usarsi è allora il while.

Vediamo come scrivere il programma.

 #include <cstdlib>
 #include <iostream>
 #include <time.h>
 using namespace std;
 int main(int argc, char *argv[])
 { int n,ndado,nscelto,soldi,vincita;
   string risposta;
   srand(time(NULL));
   cout<<"Qualcuno vuole giocare con i dadi e raddoppiare i propri soldi? (si/no)?";
   cin>>risposta;
 
  while(risposta=="si")
  {cout<<"su quale numero vuoi scommettere?";
  cin>>nscelto;
  cout<<"quanto vuoi scommettere?";
  cin>>soldi;
  
  ndado=1+rand()%6;
  cout<<"il numero estratto e' "<<ndado<<endl;
  if(nscelto==ndado)
      {cout<<"complimenti, hai vinto";
       vincita=2*soldi;
       cout<<"hai vinto "<<vincita<<endl;
      }
  else
     cout<<"riprova sarai più fortunato, più giochi più vinci"<<endl;
  
  cout<<"qualcun altro vuole giocare?";
  cin>>risposta;
  }

  cout<<"ragazzi vi ringrazio , ma per oggi il banco chiude"<<endl; 
  
  return EXIT_SUCCESS;
 }