18/02/16 16:51
luibo
Salve, avrei bisogno di un piccolo aiuto riguardo la realizzazione di un progetto in C. La traccia è la seguente:
"Si vuole sviluppare un algoritmo del cammino casuale di una pedina. Un cammino si svolge su una scacchiera in cui ogni casella rappresenta una possibile posizione del cammino della pedina. Stando in una casella, una pedina può muoversi solo nella casella a destra, nella casella a sinistra, nella casella sopra o nella casella sotto. La scelta di una tra queste quattro caselle deve essere fatta a caso (generando per esempio un numero intero in {0,1,2,3}).
Ogni movimento da una casella all’altra è detto passo del cammino. L’algoritmo usa un array 2D nxn, con n=30, per simulare la scacchiera. Ci sono due pedine sulla scacchiera, e all’inizio una si trova nella casella in alto a sinistra e l’altra nella casella in basso a destra. A ogni movimento di una pedina, segue il movimento dell’altra pedina. Fare attenzione al movimento di una pedina quando si trova sul bordo della scacchiera. L’algoritmo procede finché accade che le due pedine tentano di muoversi sulla stessa casella della scacchiera; in tal caso l’algoritmo termina (cammino terminato), restituendo il numero di passi effettuati. Organizzare l’algoritmo come una function che restituisce il numero di passi (lunghezza) del cammino. Scrivere un main che per 100 volte chiama la function e visualizza la lunghezza di ogni cammino effettuati."
Ho già scritto tutto il codice, ma questo non funziona, nel senso che il compilatore non mi da errori e il codice viene anche eseguito, ma viene immediatamente terminato senza dare nessun risultato. Qui il codice:
So che è un po' "rudimentale", ma la mia intenzione era di scrivere prima qualcosa che effettivamente funzionasse e poi ottimizzare. Qualcuno mi saprebbe dire qual è l'errore che impedisce l'esecuzione corretta? Sono giorni che cerco di capire ma non ci arrivo, ho solo il sospetto che l'errore sia nella function passo_casuale(), ma effettivamente non l'ho trovato. Grazie in anticipo per l'aiuto!
"Si vuole sviluppare un algoritmo del cammino casuale di una pedina. Un cammino si svolge su una scacchiera in cui ogni casella rappresenta una possibile posizione del cammino della pedina. Stando in una casella, una pedina può muoversi solo nella casella a destra, nella casella a sinistra, nella casella sopra o nella casella sotto. La scelta di una tra queste quattro caselle deve essere fatta a caso (generando per esempio un numero intero in {0,1,2,3}).
Ogni movimento da una casella all’altra è detto passo del cammino. L’algoritmo usa un array 2D nxn, con n=30, per simulare la scacchiera. Ci sono due pedine sulla scacchiera, e all’inizio una si trova nella casella in alto a sinistra e l’altra nella casella in basso a destra. A ogni movimento di una pedina, segue il movimento dell’altra pedina. Fare attenzione al movimento di una pedina quando si trova sul bordo della scacchiera. L’algoritmo procede finché accade che le due pedine tentano di muoversi sulla stessa casella della scacchiera; in tal caso l’algoritmo termina (cammino terminato), restituendo il numero di passi effettuati. Organizzare l’algoritmo come una function che restituisce il numero di passi (lunghezza) del cammino. Scrivere un main che per 100 volte chiama la function e visualizza la lunghezza di ogni cammino effettuati."
Ho già scritto tutto il codice, ma questo non funziona, nel senso che il compilatore non mi da errori e il codice viene anche eseguito, ma viene immediatamente terminato senza dare nessun risultato. Qui il codice:
#include <stdio.h> #include <stdlib.h> #include <time.h> typedef char pedina; void passo_casuale(char [][30],pedina,pedina,int,int,int,int); int cammino(char [][30]); int main() { int i,cammino_totale=0; char scacchiera[30][30]= {{'_',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}, {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','-'}}; for (i=0;i<10;i++) { cammino_totale=cammino(scacchiera); printf("Cammino terminato\nNumero di passi eseguiti: %d\nEsecuzioni rimanenti: %d\n",cammino_totale,9-i); } } int cammino(char scacchiera[][30]) { pedina p1; pedina p2; int cammino_totale=0; int x1=0,y1=0,x2=29,y2=29; p1=scacchiera[x1][y1]; p2=scacchiera[x2][y2]; srand(time(NULL)); while (x1!=x2 && y1!=y2) { passo_casuale(scacchiera[30][30],p1,p2,x1,y1,x2,y2); cammino_totale++; } return cammino_totale; } void passo_casuale(char scacchiera[][30],pedina p1, pedina p2,int x1,int y1,int x2,int y2) { int pass1,pass2; p1=scacchiera[x1][y1]; p2=scacchiera[x2][y2]; pass1=rand()%4; pass2=rand()%4; if (pass1==0) { if (y1==29) { y1=0; p1=scacchiera[x1][y1]; } else { y1++; p1=scacchiera[x1][y1]; } } if (pass1==1) { if (y1==0) { y1=29; p1=scacchiera[x1][y1]; } else { y1--; p1=scacchiera[x1][y1]; } } if (pass1==2) { if (x1==29) { x1=0; p1=scacchiera[x1][y1]; } else { x1++; p1=scacchiera[x1][y1]; } } if (pass1==3) { if (x1==0) { x1=29; p1=scacchiera[x1][y1]; } else { x1--; p1=scacchiera[x1][y1]; } } if (pass2==0) { if (y2==29) { y2=0; p2=scacchiera[x2][y2]; } else { y2++; p2=scacchiera[x2][y2]; } } if (pass2==1) { if (y2==0) { y2=29; p2=scacchiera[x2][y2]; } else { y2--; p2=scacchiera[x2][y2]; } } if (pass2==2) { if (x2==29) { x2=0; p2=scacchiera[x2][y2]; } else { x2++; p2=scacchiera[x2][y2]; } } if (pass2==3) { if (x2==0) { x2=29; p2=scacchiera[x2][y2]; } else { x2--; p2=scacchiera[x2][y2]; } } }
So che è un po' "rudimentale", ma la mia intenzione era di scrivere prima qualcosa che effettivamente funzionasse e poi ottimizzare. Qualcuno mi saprebbe dire qual è l'errore che impedisce l'esecuzione corretta? Sono giorni che cerco di capire ma non ci arrivo, ho solo il sospetto che l'errore sia nella function passo_casuale(), ma effettivamente non l'ho trovato. Grazie in anticipo per l'aiuto!
aaa