Ciao a tutti.
Sto cercando di fare un programmino per il gioco del master mind.
Ho due problemi, uno credo semplice, l'altro grave.
Il semplice: ho cercato di sviluppare il "motore" in questo modo:
creata la chiave con una funzione random, prima converto il numero in lettere. Assegno poi alle lettere un numero primo e moltiplico tra loro le cifre dell'array.
Inserisco una potenziale soluzione, e assegno alle lettere il valore del numero primo.
Se il modulo della divisione è 0, significa che il numero è contenuto, per cui incremento il contatore.
Inserisco qui il codice, che ho creato in maniera poco elegante, per cui scusate se ho creato migliaia di contatori. Ma era solo per provare...
In realtà sembra non funzionare.. ci date una occhiata?
Grazie
codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define COLORI 6 /*così non faccio confusione */
#define SOLUZIONE 4 /* dimensione della soluzione */
int main()
{
/* Dichiaro i contatori */
int j = 0;
int k = 0;
int l = 0;
int i = 0;
int w = 0;
int q = 0;
int r = 0;
/* genero la soluzione */
int CHIAVE [4]; /* stringa NUMERICA della soluzione */
char CHIAVEALFA[5]; /* stringa ALFABETICA della soluzione */
/* Genero un array casuale con numeri tra 1 e 6 */
srand(time(NULL));
for ( j=0; j< 4 ; j++ ) {
CHIAVE[j] =rand()%6;
}
/* for ( l=0; l< 4 ; l++ ) {
printf(" %d" , CHIAVE[l]);
}
printf("\n");
/* Converto l'array numerico della soluzione in array di testo char con lettere */
for ( k=0; k<4; k++ ) {
switch (CHIAVE[k]){
case 0:
CHIAVEALFA[k] = (char) 'A';
break;
case 1:
CHIAVEALFA[k] = (char) 'B';
break;
case 2:
CHIAVEALFA[k] = (char) 'C';
break;
case 3:
CHIAVEALFA[k] = (char) 'D';
break;
case 4:
CHIAVEALFA[k] = (char) 'E';
break;
case 5:
CHIAVEALFA[k] = (char) 'F';
break;
}
}
/* moltiplico la soluzione */
int PRODOTTO[SOLUZIONE];
for ( q=0; CHIAVEALFA[q] != '\0'; q++ ) {
switch (CHIAVEALFA[q]){
case 'A':
PRODOTTO[q] = 3;
break;
case 'B':
PRODOTTO[q] = 5 ;
break;
case 'C':
PRODOTTO[q] = 7;
break;
case 'D':
PRODOTTO[q] = 11;
break;
case 'E':
PRODOTTO[q] = 13;
break;
case 'F':
PRODOTTO[q] = 17;
break;
}
}
int prod;
prod=1;
for (r=0; r<SOLUZIONE; r++){
prod= prod * PRODOTTO[r];
} ;
/*
printf("%d", prod);
printf("\n");
*/
/* leggo la stringa della soluzione */
int h=1;
for (h=1; h<9; h++) {
char ProvaSoluzione[SOLUZIONE + 1];
printf ("Inserisci la soluzione n. %d:",h );
scanf ("%s" , ProvaSoluzione);
/*
printf("\n")
printf (" %c", ProvaSoluzione[0]);
printf (" %c", ProvaSoluzione[1]);
printf (" %c", ProvaSoluzione[2]);
printf (" %c", ProvaSoluzione[3]);
printf("\n");
/* Faccio il prodotto dei componenti dell'array PSNumerale */
i=0;
for (w=0; w<4; w++){
if ( ProvaSoluzione[w] == CHIAVEALFA[w] )
i++ ;
} ;
/*stampo il prodotto per vedere se è corretto */
/* faccio la divisione */
int PRODOTTO2[SOLUZIONE];
for ( q=0; ProvaSoluzione[q] != '\0'; q++ ) {
switch (ProvaSoluzione[q]){
case 'A':
PRODOTTO2[q] = 3;
break;
case 'B':
PRODOTTO2[q] = 5 ;
break;
case 'C':
PRODOTTO2[q] = 7;
break;
case 'D':
PRODOTTO2[q] = 11;
break;
case 'E':
PRODOTTO2[q] = 13;
break;
case 'F':
PRODOTTO2[q] = 17;
break;
}
}
int d=0;
int dw=0;
int resto;
for ( d=0; d<4; d++ ) {
resto = prod % PRODOTTO2[d];
if (resto == 0) {
dw++;}
} ;
printf ("Contenute: %d ", dw);
int dwd;
dwd = dw - i;
printf ("Uguali: %d ", i);
printf ("Differenza %d \n", dwd);
if (i != 0)
for (w=0; w<i; w++){
printf ("O");
} ;
int z;
for (z=0; z<dwd; z++){
printf ("o");
};
printf("\n");
}
printf("\n");
printf ("La soluzione era: ");
printf (" %c", CHIAVEALFA[0]);
printf (" %c", CHIAVEALFA[1]);
printf (" %c", CHIAVEALFA[2]);
printf (" %c", CHIAVEALFA[3]);
printf("\n");
}