Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    12

    Master mind

    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");
    
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,305

    Moderazione

    Alcune considerazioni di carattere generale:

    1) Il regolamento impone che il linguaggio venga indicato nel titolo
    2) Il codice va postato indentato all'interno dei tag CODE e non dei tag QUOTE (che servono ad altro)
    3) Si deve sempre segnalare qual è l'eventuale errore o l'anomalia riscontrata e possibilmente anche il punto in cui si verifica: non chiedere "me lo controllate perchè non funziona"... quest'ultimo implica l'obbligo da parte di chi legge di prendere il codice, compilarlo, fare delle congetture su eventuali messaggi di errore o sul funzionamento del programma e un lavoro di messa a punto.


    Per ora inserisco il linguaggio nel titolo (che manca) e vedo se il codice è indentato, di modificare i tag in CODE.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    12

    [C] Master mind (2)

    A precisazione di quanto scritto erroneamente sotto, credo di aver individuato dove sta il problema.

    Ho un int che si chiama prod ed un array int (che ho messo di dimensione 5) che contiene 4 valori numerici.

    codice:
    #include <stdio.h>
    
    int main()
    {
    int prod = 1155;
    int PRODOTTO2[5] = {5,5,5,5};
    int d=0;
    int dw=0;
    float resto;
    for ( d=0; d<4; d++ ) {
        resto = prod % PRODOTTO2[d];
            if (resto == 0) {
           resto = prod / PRODOTTO2[d];
           dw++;}
        } ;
    
    printf ("\n%d", dw);
    }
    dw dovrebbe incrementarsi quando il modulo tra prod e PRODOTTO2[d] è pari a 0, quindi se la divisione ha resto 0 il numero è contenuto, mentre non si incrementa se il modulo è diverso da 0

    ad esempio se ad esempio prod è 1155 e il mio array è [5,5,5,5] il contatore dw dovrebbe essere solo 1, e non 4 come appare qui.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,305

    Moderazione

    E perchè aprire una nuova discussione sullo stesso identico argomento, quando ne hai già una aperta?

    Ho riunito le due discussioni...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    12
    ... perchè non ci ho pensato...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.