Salve ragazzi, il titolo non è molto indicativo ma non sapevo proprio come intitolare il topic! Mi servirebbe un aiuto abbastanza urgente, ho un esame a breve e devo consegnare un progetto, mi sono impallato su una cosa veramente stupida, e non riesco ad andare avanti. Sto scrivendo un programma che crei un crucipuzzle (avete presente quei cruciverba dove ci sono tutte le parole incastrate una con l'altra e vanno cerchiate?! vabbè!), vi posto prima la parte di codice e poi vi spiego dove mi sono bloccato!
dunque, la funzione cercaincastro mi ritorna true se trova una lettera uguale nella matrice puzzle, dopo di che la funzione provaincastro mi restituisce un intero e lo assegna a direzione se l'incastro è possibile. Se tutto ciò avviene il break mi esce dal ciclo e mi passa alla parola successiva memorizzata in elenco. Se cercaincastro mi ritorna true e provaincastro mi restituisce 0 dovrebbe partire dalla posizione successiva della matrice puzzle e vedere se ci sono altre lettere uguali prima di passare alla j(lettera) successiva. Il problema è questo, sono da due giorni bloccato su questa stupidaggine e non riesco ad andare avanti... HELP!codice:void creapuzzle (char **elenco, char puzzle[][20], int dimpuzzle, int numparole) { int riga = -1; int colonna = -1; int direzione; int finita = 0; int j = 0; for (int i=0; i<numparole; i++) { while (j<strlen(*elenco)) { if (cercaincastro (elenco, puzzle, dimpuzzle, j, riga, colonna, finita)) { direzione = provaincastro(elenco, puzzle, dimpuzzle, j, riga, colonna); if (direzione != 0) { incastra(elenco, puzzle, dimpuzzle, j, riga, colonna, direzione); break; // Dopo l'incastro interrompe subito il while per passare alla parola successiva } } if (finita == 1) // Se la matrice non e' ancora finita e 'cercaincastro' non torna true, potrebbero esserci altre lettere uguali j++; else { if (colonna == dimpuzzle-1) colonna = -1; if (colonna != dimpuzzle-1) riga -= 1; } } riga = -1; colonna = -1; finita = 0; j = 0; elenco +=1; } } bool cercaincastro (char **elenco, char puzzle[][20], int dimpuzzle, int j, int&riga, int&colonna, int&finita) { for (int i = riga+1; i<dimpuzzle; i++) { for (int k = colonna+1; k<dimpuzzle; k++) { if (elenco[0][j] == puzzle[i][k]) { riga = i; colonna = k; return true; } } } finita = 1; return false; }![]()

Rispondi quotando