Master Mind
Scopo del gioco è indovinare una combinazione di 4 cifre fra 0 e 9 nel minor
numero di tentativi possibile.
Ad ogni tentativo si ottengono come risposta:
- Il numero delle cifre corrette
- Il numero delle cifre presenti anche nella soluzione ma in posizioni
‘sbagliate’
Ad esempio, se la soluzione fosse 1234
1832 darebbe come risposta 2 1
1432 darebbe come risposta 2 2
0789 darebbe come risposta 0 0
La partita termina quando si ottiene risposta 4 0
Esempio di partita (soluzione: 1234)
Tentativo n. 1 9807
00
Tentativo n. 2 3456
02
Tentativo n. 3 5312
03
Tentativo n. 4 1432
22
Tentativo n. 5 4231
22
Tentativo n. 6 1234
40
Bravo, hai indovinato in 6 tentativi!
Funzione rand()
( stdlib.h )
Genera un numero intero casuale compreso fra 0 e RAND_MAX .
Quindi
(rand()-1)/RAND_MAX restituisce un numero compreso in [0,1)
Se voglio generare un numero x compreso fra 0 e N-1 posso quindi scrivere
X = (rand()-1)/(RAND_MAX/N) [=
N*(rand()-1)/RAND_MAX]
Per evitare che il numero random generato sia sempre lo stesso bisogna
chiamare la funzione randomize() prima di usare rand().
NB randomize() esiste solo nel Borland C, non è conforme allo standard ANSI C.
Algoritmo:
Begin
Genera una combinazione di 4 numeri A,B,C,D
Definisci 4 variabili intere: A1, B1, C1, D1
[conterranno i tentativi del
giocatore]
Definisci 2 variabili intere: Corrette e Spostate e ponile a 0
Definisci una variabile Niterazioni e poni Niterazioni=0
While (Corrette!=4)
Begin
Poni Corrette=0 e Spostate=0
Leggi A1, B1, C1, D1
Se A1 è uguale ad A Corrette=Corrette+1
altrimenti se A1 è uguale a B,C, o D Spostate=Spostate+1
Se B1 è uguale a B …..
Se C1 è uguale a C …..
Se D1 è uguale a D …..
Stampa Corrette e Spostate
Niterazioni=Niterazioni+1
End
Scrivi “Bravo, hai indovinato in (Ntentativi) tentativi!”
End
Esercizio
Riscrivere il programma precedente, semplificandolo utilizzando due vettori di
4 elementi
int soluzione[4], tentativo[4];
per contenere la soluzione e il tentativo del giocatore
Esercizi di base sull’uso dei vettori
- Scrivere un programma che memorizzi 10 numeri interi casuali compresi
fra 0 e 100 (generati come indicato sopra utilizzando la funzione rand())
in un vettore, li stampi e ne calcoli il massimo
- Scrivere un programma che memorizzi 10 numeri interi casuali compresi
fra 0 e 10 (generati come indicato sopra utilizzando la funzione rand()) in
un vettore, li stampi e conti quante volte un numero specificato
dall’utente appare nella sequenza.
- Scrivere un programma che chieda N numeri da tastiera, li memorizzi in
un vettore (controllando che la dimensione del vettore definito sia
sufficiente a contenerli) e ne calcoli la somma.
- Scrivere un programma che generi i primi N numeri interi, li memorizzi in
un vettore (controllando che la dimensione del vettore definito sia
sufficiente a contenerli) e stampi solo i numeri pari