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
Dato l’elenco (terminato da 0) dei voti in pagella di uno studente dire quanti sono >=6 e quanti <6.
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.
L'utente inserisce un elenco di lettere, terminato dal carattere '.' e quindi dice quante vocali e quante consonanti sono state inserite
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
}
}
}