Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - posizione rand di array_2D su una scacchiera
Forum - C/C++ - posizione rand di array_2D su una scacchiera

Avatar
asteroid (Normal User)
Newbie


Messaggi: 17
Iscritto: 21/01/2011

Segnala al moderatore
Postato alle 17:40
Mercoledì, 26/01/2011
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main()
  5. {int i,j,nx,ny;
  6. char scacchiera[][5]={{' ',' ',' ',' ',' '},
  7.                       {' ',' ',' ',' ',' '},
  8.                       {' ',' ',' ',' ',' '},
  9.                       {' ',' ',' ',' ',' '},
  10.                       {' ',' ',' ',' ',' '}};
  11. srand(time(NULL));
  12.   for(i=1; i<=6; i++)
  13.   {nx=rand()%5;
  14.   ny=rand()%5;
  15.   scacchiera[nx][ny]='x';
  16.   }
  17.   for(i=0; i<5; i++){
  18.            for(j=0; j<5; j++)
  19.            printf("%c",scacchiera[i][j]);
  20.            printf("\n");}


voglio posizionare 6 'x' sulla scacchiera...ma dalla funzione rand() a volte mi escono 5 e a volte 6 'x'???:hail:

PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 18:12
Mercoledì, 26/01/2011
Ciao!!!

Ti do solo un'indicazione così vediamo se riesci a risolvere da solo.
Nel primo ciclo for (quello dove posizioni le x per intenderci) non fai nessun controllo per vedere se nella posizione dove vuoi inserire le x non ne hai inserita nessuna precedentemente, così può capitare che per 2 volte posizioni la x nella posizione scacchiera[2][2].

Se è uno dei tuoi giorni sfortunati potresti vedere apparire anche solo una x :yup:

PM Quote
Avatar
asteroid (Normal User)
Newbie


Messaggi: 17
Iscritto: 21/01/2011

Segnala al moderatore
Postato alle 16:55
Giovedì, 27/01/2011
Testo quotato

Postato originariamente da Premoli:

Ciao!!!

Ti do solo un'indicazione così vediamo se riesci a risolvere da solo.
Nel primo ciclo for (quello dove posizioni le x per intenderci) non fai nessun controllo per vedere se nella posizione dove vuoi inserire le x non ne hai inserita nessuna precedentemente, così può capitare che per 2 volte posizioni la x nella posizione scacchiera[2][2].

Se è uno dei tuoi giorni sfortunati potresti vedere apparire anche solo una x :yup:

....
infatti è già capitato:rotfl:...
cmq il controllo che tu intendi...sarebbe un if(scacchiera[nx][ny]=' ' && scacchiera[nx][ny]!='x') ?? :d

PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 17:09
Giovedì, 27/01/2011
Ciao!

Basta mettere un
Codice sorgente - presumibilmente Plain Text

  1. if(scacchiera[nx][ny]!='x')



e mettere scacchiera[nx][ny]='x' e incrementare la i solo se entra nell'if.

In pratica ti ho detto come fare :yup:

Se hai ancora problemi chiedi pure.

PM Quote
Avatar
asteroid (Normal User)
Newbie


Messaggi: 17
Iscritto: 21/01/2011

Segnala al moderatore
Postato alle 17:18
Giovedì, 27/01/2011
Testo quotato

Postato originariamente da Premoli:

Ciao!

Basta mettere un
Codice sorgente - presumibilmente Plain Text

  1. if(scacchiera[nx][ny]!='x')



e mettere scacchiera[nx][ny]='x' e incrementare la i solo se entra nell'if.

In pratica ti ho detto come fare :yup:

Se hai ancora problemi chiedi pure.




ahah...c'ero quasi;)...cmq 6 un grande;
quindi mi conviene togliere quel ciclo for...e lo trasformerei in un ciclo while  :heehee:

PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 17:32
Giovedì, 27/01/2011
volendo si ;)

Poi se proprio uno vuole essere preciso si potrebbe dire che con questa soluzione, in teoria, si potrebbe entrare in un ciclo infinito infatti potrebbe capitare il caso in cui i numeri pseudo casuali ovvero gli indici della matrice siano ripetuti e quindi l'algoritmo non riesce a posizionare tutte le x.

Ultima modifica effettuata da Premoli il 27/01/2011 alle 17:36
PM Quote
Avatar
asteroid (Normal User)
Newbie


Messaggi: 17
Iscritto: 21/01/2011

Segnala al moderatore
Postato alle 17:53
Giovedì, 27/01/2011
Testo quotato

Postato originariamente da Premoli:

volendo si ;)

Poi se proprio uno vuole essere preciso si potrebbe dire che con questa soluzione, in teoria, si potrebbe entrare in un ciclo infinito infatti potrebbe capitare il caso in cui i numeri pseudo casuali ovvero gli indici della matrice siano ripetuti e quindi l'algoritmo non riesce a posizionare tutte le x.



ho lo stesso problema con questo codice praticamente funzione con le 'x' ma non con le 'o'....8-|
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main()
  5. {int  j,i,nx,ny;
  6. char giocator1='x';      /*giocatori maglia x*/
  7. char giocator2='o';      /*giocatori maglia o*/
  8. char campo [][6]= {{' ',' ',' ',' ',' ',' '},
  9.                    {' ',' ',' ',' ',' ',' '},
  10.                    {' ',' ',' ',' ',' ',' '},
  11.                    {' ',' ',' ',' ',' ',' '},
  12.                    {' ',' ',' ',' ',' ',' '},
  13.                    {' ',' ',' ',' ',' ',' '}};          
  14. srand(time(NULL));
  15. char rete='I';
  16. for(i=0;i<6;i++){
  17. campo[i][2]=rete;                  
  18. }      
  19. i=1;
  20. while(i<=4)                         /*genera 4 posizioni a caso sul campo*/
  21. {
  22. nx=1+(int)(6*rand()/(RAND_MAX+1.0));
  23. ny=3+rand()%3-6;             /*sposto sulle ultime 3 celle*/
  24. if(campo[nx][ny]!='x')
  25. i++;
  26. campo[nx][ny]=giocator1;
  27. }
  28. j=1;
  29. while(j<=4)
  30. {
  31. nx=1+(int)(6*rand()/(RAND_MAX+1.0));
  32. ny=rand()%2;
  33. if(campo[nx][ny]!='o')                /*sposto sulle prime 3 celle*/
  34. j++;
  35. campo[nx][ny]=giocator2;
  36. }
  37. for(i=0; i<6; i++)
  38. {for(j=0; j<6; j++)
  39. printf("%c",campo[i][j]);
  40. printf("\n");
  41. }


PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 18:25
Giovedì, 27/01/2011
Se non ho capito male quello che devi fare io risolverei così:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int main()
  6. {
  7.     int  j,i,nx,ny;
  8.     char giocator1='x';      /*giocatori maglia x*/
  9.     char giocator2='o';      /*giocatori maglia o*/
  10.     char campo [][6]= {{' ',' ',' ',' ',' ',' '},
  11.                       {' ',' ',' ',' ',' ',' '},
  12.                       {' ',' ',' ',' ',' ',' '},
  13.                       {' ',' ',' ',' ',' ',' '},
  14.                       {' ',' ',' ',' ',' ',' '},
  15.                       {' ',' ',' ',' ',' ',' '}};
  16.  
  17.     srand(time(NULL));
  18.     char rete='I';
  19.     for(i=0;i<6;i++){
  20.         campo[i][2]=rete;
  21.     }
  22.  
  23.     i=1;
  24.     while(i<=4){
  25.         nx=rand()%6;
  26.         ny=3+rand()%3;             /*sposto sulle ultime 3 celle*/
  27.         if(campo[nx][ny]!='x')
  28.             i++;
  29.         campo[nx][ny]=giocator1;
  30.     }
  31.  
  32.     j=1;
  33.     while(j<=4){
  34.         nx=rand()%6;
  35.         ny=rand()%2;
  36.         if(campo[nx][ny]!='o')                /*sposto sulle prime 3 celle*/
  37.             j++;
  38.         campo[nx][ny]=giocator2;
  39.     }
  40.  
  41.     for(i=0; i<6; i++){
  42.         for(j=0; j<6; j++)
  43.             printf("%c",campo[i][j]);
  44.         printf("\n");
  45.     }
  46.  
  47.     return 0;
  48. }



Se non è questo il tuo obiettivo spiegati meglio.

PM Quote
Avatar
asteroid (Normal User)
Newbie


Messaggi: 17
Iscritto: 21/01/2011

Segnala al moderatore
Postato alle 18:35
Giovedì, 27/01/2011
Testo quotato

Postato originariamente da Premoli:

Se non ho capito male quello che devi fare io risolverei così:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int main()
  6. {
  7.     int  j,i,nx,ny;
  8.     char giocator1='x';      /*giocatori maglia x*/
  9.     char giocator2='o';      /*giocatori maglia o*/
  10.     char campo [][6]= {{' ',' ',' ',' ',' ',' '},
  11.                       {' ',' ',' ',' ',' ',' '},
  12.                       {' ',' ',' ',' ',' ',' '},
  13.                       {' ',' ',' ',' ',' ',' '},
  14.                       {' ',' ',' ',' ',' ',' '},
  15.                       {' ',' ',' ',' ',' ',' '}};
  16.  
  17.     srand(time(NULL));
  18.     char rete='I';
  19.     for(i=0;i<6;i++){
  20.         campo[i][2]=rete;
  21.     }
  22.  
  23.     i=1;
  24.     while(i<=4){
  25.         nx=rand()%6;
  26.         ny=3+rand()%3;             /*sposto sulle ultime 3 celle*/
  27.         if(campo[nx][ny]!='x')
  28.             i++;
  29.         campo[nx][ny]=giocator1;
  30.     }
  31.  
  32.     j=1;
  33.     while(j<=4){
  34.         nx=rand()%6;
  35.         ny=rand()%2;
  36.         if(campo[nx][ny]!='o')                /*sposto sulle prime 3 celle*/
  37.             j++;
  38.         campo[nx][ny]=giocator2;
  39.     }
  40.  
  41.     for(i=0; i<6; i++){
  42.         for(j=0; j<6; j++)
  43.             printf("%c",campo[i][j]);
  44.         printf("\n");
  45.     }
  46.  
  47.     return 0;
  48. }



Se non è questo il tuo obiettivo spiegati meglio.



si esatto viene anke così....nel mio codice non sò perchè ho messo 3-6:asd:e quelle due divisioni con le RAND_MAX... volevo complicarmi la vita :D...grazie...comunque questo è un progetto ke sto cercando di sviluppare...se vedi sul forum ho postato già una discussione di questo stesso algoritmo che simula una partita di pallavolo..:D in gamba e grazie:yup:

PM Quote