Progetto In C, Help!

Stato
Discussione chiusa ad ulteriori risposte.

Studente_in_crisi

Nuovo Utente
6
0
CPU
i7-4770
HDD
1TB
RAM
8GB
GPU
GTX 660
Monitor
benq XL2720
Case
alienware x51 r2
OS
win10
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.
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
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.
 

Studente_in_crisi

Nuovo Utente
6
0
CPU
i7-4770
HDD
1TB
RAM
8GB
GPU
GTX 660
Monitor
benq XL2720
Case
alienware x51 r2
OS
win10
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..
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
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:

Studente_in_crisi

Nuovo Utente
6
0
CPU
i7-4770
HDD
1TB
RAM
8GB
GPU
GTX 660
Monitor
benq XL2720
Case
alienware x51 r2
OS
win10
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
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Ma sei sicuro che funzioni?
Sia nella scanf ( ti prego usa un ciclo :muto: ) che nella str_cas accedi a valori fuori dall'array
 

Studente_in_crisi

Nuovo Utente
6
0
CPU
i7-4770
HDD
1TB
RAM
8GB
GPU
GTX 660
Monitor
benq XL2720
Case
alienware x51 r2
OS
win10
puoi spiegare meglio ? dovrebbe funzionare ma non ne sono sicuro

è questo quello che intendi ?
Codice:
char str_cas [32]={"1234567891011121314151617181920212223242526272829303132"};
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
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
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
puoi spiegare meglio ? dovrebbe funzionare ma non ne sono sicuro

è questo quello che intendi ?
Codice:
char str_cas [32]={"1234567891011121314151617181920212223242526272829303132"};
Cosi gli passi una stringa :sisi:
 

Studente_in_crisi

Nuovo Utente
6
0
CPU
i7-4770
HDD
1TB
RAM
8GB
GPU
GTX 660
Monitor
benq XL2720
Case
alienware x51 r2
OS
win10
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 ?
 

Studente_in_crisi

Nuovo Utente
6
0
CPU
i7-4770
HDD
1TB
RAM
8GB
GPU
GTX 660
Monitor
benq XL2720
Case
alienware x51 r2
OS
win10
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
 

GianD95

Nuovo Utente
6
0
CPU
Intel core i7 6700k
Dissipatore
Lepa exllusion 240
Scheda Madre
Asus z170 pro gaming
HDD
WD blue 1tb, samsung 850 evo.
RAM
16gb ddr4
GPU
gtx 970
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"?
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Secondo me è meglio se apri un nuovo topic spiegando esattamente la tua problematica nello specifico.
Ma vediamo cosa ne pensa @Mursey
 

Mursey

Super Moderatore
Staff Forum
Utente Èlite
8,230
5,658
Concordo, spiega bene il tuo caso aprendo una nuova discussione.
 
Stato
Discussione chiusa ad ulteriori risposte.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili