Cicli in C++: I contatori

I cicli in C++ vengono utilizzati spesso per contare qualcosa. Risolvono i problemi del tipo: l'utente preme il dito sullo schermo del telefono, conta quante volte lo ha battuto.

Per risolvere questi problemi si utilizza una variabile di tipo intero che all'inizio viene impostata a zero. Quindi ogni volta che si verifica l'evento che ci interessa aggiungiamo uno al contatore.

Esempio:

Scrivi un programma che chiede all'utente dei numeri e conta quanti numeri pari sono stati inseriti. Il programma esce quando l'utente inserisce lo zero.

#include <iostream>

using namespace std;

int main() {

int n; // Il numero da inserire

int c=0; // Il contatore inizializzato a zero

do {

cout << "Inserisci un numero (0 per terminare): ";

cin >> n;

if (n%2==0) { // Se il numero n è multiplo di due, quindi pari

c = c+1; // Aumento il contatore di 1

}

} while (n!=0);

cout << "Hai inserito " << c << " numeri pari";

}

Esercizi

  1. Dato l’elenco (terminato da 0) dei voti in pagella di uno studente dire quanti sono >=6 e quanti <6.

  2. Dire inoltre l’esito dello scrutinio: promosso, bocciato o rimandato. E' rimandato se ha fino a 3 insufficienze e bocciato se ne ha più di 3.

  3. L'utente inserisce un elenco di lettere, terminato dal carattere '.' e quindi dice quante vocali e quante consonanti sono state inserite

  4. Dato un numero intero N inserito dall'utente contare di quante cifre è composto. Posso dividere il numero per dieci finché non diventa minore di 1 e contare le volte che posso dividere.

Gioco - L'incontro di pugilato

Il gioco si gioca in due. Ogni giocatore cerca di sferrare il maggior numero di pungi all'altro.

Il primo giocatore utilizza i tasti 'a' e 'z' per sferrare i colpi e il secondo i tasti 'm' e 'k'. Vince chi in 5 secondo riesce a premere più volte i propri tasti.

Al termine dei 5 secondi il gioco scrive quale dei due giocatori ha vinto la gara e quante volte ha premuto i tasti.

Abbellisci il gioco come ti pare in modo che sia semplice da giocare. Utilizza a piacere i colori e le altre funzioni di semigraf.h.

Guida alla soluzione:

Ti servono dei comandi che forse non avrai mai utilizzato (indispensabili per tutti i giochi!).

La funzione kbhit(): restituisce vero se è stato premuto un tasto, falso altrimenti.

La funzione getch(): restituisce il tasto premuto senza richiedere all'utente di premere invio

La funzione time(0): restituisce il numero di secondi passati dal 1 Gennaio 1970

Il seguente programma ha un ciclo che va avanti all'infinito e che stampa le lettere premute e il momento in cui sono state premute:

// Programma in C++

#include <iostream>

#include <conio.h> // Qui ci sono getch() e kbhit()

#include <time.h> // Qui c'è time(0)

using namespace std;

int main() {

char c; // Variabile c per il carattere

while (1) { // Va avanti all'infinito, 1 è vero

if (kbhit()) { // Se è stato premuto un tasto

c = getch(); // Allora cattura il tasto

cout << "Premuto: " << c << " al tempo " << time(0) << "\n"; // E lo stampa

}

}

}

// Programma in c

#include <stdio.h>

#include <conio.h> // Qui ci sono getch() e kbhit()

#include <time.h> // Qui c'è time(0)

int main() {

char c; // Variabile c per il carattere

while (1) { // Va avanti all'infinito, 1 è vero

if (kbhit()) { // Se è stato premuto un tasto

c = getch(); // Allora cattura il tasto

printf("Premutoil tasto %c (%d) al tempo %d\n",c,c,time(0)); // E lo stampa

}

}

}