Progetto In C, Help!

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Studente_in_crisi

Nuovo Utente
Messaggi
6
Reazioni
0
Punteggio
22
Salve a tutti,
devo scrivere un programma in c di un puzzle , questo è il testo:
Si vuole implementare un programma per la simulazione del gioco del puzzle. Si suppone di avere n tessere (n è una potenza di 2 e almeno 32 ) che possono essere disposte su una matrice quadrata. Il gioco inizia chiedendo all’utente di inserire le n tessere scelte tra tre colori (o simboli). Successivamente vengono generate 1000 matrici casuali usando gli stessi colori. Vengono visualizzate le 10 matrici più simili a quella ottenuta con le tessere scelte dall’utente. Effettuare almeno 3 simulazioni variando il numero di tessere.
il problema è che non conosco l'algoritmo per creare 1000 matrici casuali, ho pensato alla funzione rand()
ma non la conosco bene e ho sentito che funziona solo con i numeri e non con le lettere ; inoltre il confronto delle due matrici dovrebbe essere fatto con un ciclo for ? spero che mi possiate aiutare sono in crisi e mi serve per un esame.
 
Puoi sempre associare i tre numeri ottenuti con il rand con i tre colori o simboli. Per i cicli for direi di si, usi un'array bidimensionale e conti quante posizioni sono uguali o diverse.
 
Puoi sempre associare i tre numeri ottenuti con il rand con i tre colori o simboli. Per i cicli for direi di si, usi un'array bidimensionale e conti quante posizioni sono uguali o diverse.

mi puoi fare un esempio di codice che dovrei usare visto che io non sapevo che potevo associare un numero ad una lettera o simbolo..
 
Codice:
for da 0 a n escluso {
 for da 0 a m escluso {    //n = m
  n = rand();
  if n == 0
   a[n][m] = simbolo1;
  else if n == 1
   a[n][m] = simbolo2;
  else
   a[n][m] = simbolo3;
  }
 }

il confronto con la matrice iniziale la puoi fare dentro a questi cicli. Incrementi un contatore, più è vicino a n*n più è simile
 
Ultima modifica:
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
char scelta[32];


int main(){    /**scelta tessere**/
    int res[3][3];
    printf("Benvenuto Nel Gioco!\n");
    printf("Scegli 32 tessere tra i tre colori: r per le Tessere Rosse,g per le Tessere Gialle,b per le Tessere Blu.\n");
    scanf("%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c",scelta,scelta+1,scelta+2,scelta+3,scelta+4,scelta+5,scelta+6,scelta+7,scelta+8,scelta+9,scelta+10,scelta+11,scelta+12,scelta+13,scelta+14,scelta+15,scelta+16,scelta+17,scelta+18,scelta+19,scelta+20,scelta+21,scelta+22,scelta+23,scelta+24,scelta+25,scelta+26,scelta+27,scelta+28,scelta+29,scelta+30,scelta+31,scelta+32);

    int nc,lunghezza,i,j;    /** algoritmo tessere casuali **/
    char str_cas [3]={"123"};
    char alfabeto[3]= {'r','g','b'};
    srand( (unsigned)time(NULL) );
    lunghezza=3;
    for (i=1;i<1000;i++){
        for (j=0;j<32;j++){

    nc= rand()%lunghezza;
    str_cas[j]=alfabeto[nc];
        }

/**printf("%d-sima 32tessere= %s\n",i,str_cas);**/
}




}

io fino ad adesso ho fatto così se secondo te va bene ,perché testando così funziona, mi manca da scrivere solo il controllo della matrice generata e quella scelta dall'utente
 
Ma sei sicuro che funzioni?
Sia nella scanf ( ti prego usa un ciclo :muto: ) che nella str_cas accedi a valori fuori dall'array
 
puoi spiegare meglio ? dovrebbe funzionare ma non ne sono sicuro

è questo quello che intendi ?
Codice:
char str_cas [32]={"1234567891011121314151617181920212223242526272829303132"};
 
puoi spiegare meglio ? dovrebbe funzionare ma non ne sono sicuro
Già non ti compila perchè scelta[32] va da 0 a 31 compreso. Tu fai anche scelta+32. str_cas lo hai definito come un array di tre elementi, ma vai avanti a copiare elementi fino a 31, tant'è che esce dal ciclo alla prima iterazione ( i dovresti farlo partire da 0 ). Per risolvere str_cas dovrebbe avere la stessa dimensione di scelta. Se lo metti a 32 il programma ti funziona
 
Già non ti compila perchè scelta[32] va da 0 a 31 compreso. Tu fai anche scelta+32. str_cas lo hai definito come un array di tre elementi, ma vai avanti a copiare elementi fino a 31, tant'è che esce dal ciclo alla prima iterazione ( i dovresti farlo partire da 0 ). Per risolvere str_cas dovrebbe avere la stessa dimensione di scelta. Se lo metti a 32 il programma ti funziona
ho messo la stessa dimensione sia a scelta che a str_cas cioè 32 cosi come ho capito dovrebbe funzionare , giusto ?
 
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
char scelta[32];
int matching_migliore(char *puzzle_dato,char *puzzle_casual);
int punteggio_matching(char *a,char *b,int n);

void main(){    /**scelta tessere**/
    int best,l;
    printf("Benvenuto Nel Gioco!\n");
    printf("Scegli 32 tessere tra i tre colori: r per le Tessere Rosse,g per le Tessere Gialle,b per le Tessere Blu.\n");
    scanf("%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c%1c",scelta,scelta+1,scelta+2,scelta+3,scelta+4,scelta+5,scelta+6,scelta+7,scelta+8,scelta+9,scelta+10,scelta+11,scelta+12,scelta+13,scelta+14,scelta+15,scelta+16,scelta+17,scelta+18,scelta+19,scelta+20,scelta+21,scelta+22,scelta+23,scelta+24,scelta+25,scelta+26,scelta+27,scelta+28,scelta+29,scelta+30,scelta+31);

    int nc,lunghezza,i,j;  /** algoritmo tessere casuali **/
    char str_cas [33];
    char alfabeto[3]= {'r','g','b'};
    //srand((unsigned)time(NULL) );*//
    lunghezza=3;
    for (i=1;i<1000;i++){
        for (j=0;j<32;j++){

    nc= rand()%lunghezza;
    str_cas[j]=alfabeto[nc];
        }

printf("%d-sima 32tessere= %s \n",i,str_cas);
}
best=matching_migliore(scelta,str_cas);
printf("i Puzzle più simili a quello da te sccelto sono:%s\n",best);
for(l=0;l<strlen(scelta);l++)
    putchar(str_cas[best+i]);
}
int matching_migliore (char *puzzle_dato,char *puzzle_casual)
{
int n,m,massimo,risultato,indice,p;
indice=0;
n=strlen(puzzle_dato);
m=strlen(puzzle_casual);
massimo=0;
for(p=0;p<m==n;p++)
{
   risultato=punteggio_matching(puzzle_dato,&puzzle_casual[p],n);
   if(risultato>massimo)
   {
       massimo=risultato;
       indice=p;
   }
}
return indice;
}
int punteggio_matching(char *a,char *b,int n)
{
int i, n_caratteri_uguali;
n_caratteri_uguali = 0;
for (i=0;i<n;i++)
if (a[i] == b[i])
n_caratteri_uguali++;
return n_caratteri_uguali;
}
mi potete dire se ci sono errori quando eseguo l'exe non mi trova confronti
 
Salve a tutti,
devo scrivere un programma in c di un puzzle , questo è il testo:
il problema è che non conosco l'algoritmo per creare 1000 matrici casuali, ho pensato alla funzione rand()
ma non la conosco bene e ho sentito che funziona solo con i numeri e non con le lettere ; inoltre il confronto delle due matrici dovrebbe essere fatto con un ciclo for ? spero che mi possiate aiutare sono in crisi e mi serve per un esame.
Ciao ho il tuo stesso progetto :help: potresti darmi gentilmente qualche "dritta"?
 
Secondo me è meglio se apri un nuovo topic spiegando esattamente la tua problematica nello specifico.
Ma vediamo cosa ne pensa @Mursey
 
Concordo, spiega bene il tuo caso aprendo una nuova discussione.
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top