Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di ninuzz
    Registrato dal
    Jan 2011
    Messaggi
    22

    [C] posizione rand() array_2D su una scacchiera

    codice:
    #include <stdio.h> 
    #include <stdlib.h>
    #include <time.h>
    void main()
    }
    int i,j,nx,ny;
    char scacchiera[][5]=
    ,{' ',' ',' ',' ',' '}}
    ,{' ',' ',' ',' ',' '}
    ,{' ',' ',' ',' ',' '}
    ,{' ',' ',' ',' ',' '}
    ;{{' ',' ',' ',' ',' '}
    srand(time(NULL));
    for (i=1;i<=6;i++)
    {
    /* genera a caso una
    posizione nella
    scacchiera (5x5) */
    nx = rand()%5;
    ny = rand()%5;
    scacchiera[nx][ny] = 'x';
    }
    for (i=0;i<5;i++){
    for (j=0;j<5;j++)
    printf(" %c",scacchiera[i][j]);
    printf("\n");
    }
    }
    Vojo generare 6 posizioni casuali su una matrice 5x5...ma quando vado ad eseguire questo codice...a volte mi escono 5 posizioni e a volte 6???

  2. #2

    Re: [C] posizione rand() array_2D su una scacchiera

    Originariamente inviato da ninuzz
    codice:
    #include <stdio.h> 
    #include <stdlib.h>
    #include <time.h>
    void main()
    }
    int i,j,nx,ny;
    char scacchiera[][5]=
    ,{' ',' ',' ',' ',' '}}
    ,{' ',' ',' ',' ',' '}
    ,{' ',' ',' ',' ',' '}
    ,{' ',' ',' ',' ',' '}
    ;{{' ',' ',' ',' ',' '}
    srand(time(NULL));
    for (i=1;i<=6;i++)
    {
    /* genera a caso una
    posizione nella
    scacchiera (5x5) */
    nx = rand()%5;
    ny = rand()%5;
    scacchiera[nx][ny] = 'x';
    }
    for (i=0;i<5;i++){
    for (j=0;j<5;j++)
    printf(" %c",scacchiera[i][j]);
    printf("\n");
    }
    }
    Vojo generare 6 posizioni casuali su una matrice 5x5...ma quando vado ad eseguire questo codice...a volte mi escono 5 posizioni e a volte 6???

    Mmmm scusa ma nella inizializazzione della matrice non c'è qualche errore nelle graffe? Mi sembrano un po' confuse...
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    Utente di HTML.it L'avatar di ninuzz
    Registrato dal
    Jan 2011
    Messaggi
    22

    Re: Re: [C] posizione rand() array_2D su una scacchiera

    Originariamente inviato da Laikius91
    Mmmm scusa ma nella inizializazzione della matrice non c'è qualche errore nelle graffe? Mi sembrano un po' confuse...
    sisi è un errore grafico...che ho ftt io nel ricopiare...

  4. #4
    Utente di HTML.it L'avatar di ninuzz
    Registrato dal
    Jan 2011
    Messaggi
    22
    Cmq io penso che il problema perchè mi genera a volte 5 posizioni sia dovuto al fatto anche perchè la rand() non ha una distribuzione uniforme...

  5. #5
    Originariamente inviato da ninuzz
    Cmq io penso che il problema perchè mi genera a volte 5 posizioni sia dovuto al fatto anche perchè la rand() non ha una distribuzione uniforme...
    Adesso pian piano la analizziamo... mi spieghi:

    codice:
    srand(time(NULL));
    che non la conosco?
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  6. #6
    Utente di HTML.it L'avatar di ninuzz
    Registrato dal
    Jan 2011
    Messaggi
    22
    srand(time(NULL);
    rende automatica la scelta del seed,
    cioè ad ogni esecuzione la funzione rand() varia le posizioni

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da Laikius91
    Adesso pian piano la analizziamo... mi spieghi:

    codice:
    srand(time(NULL));
    che non la conosco?
    Bella questa: lui chiede aiuto ma deve prima aiutare te
    (l'emoticon cela un link alla documentazione)

    @ninuzz: ad una rapida lettura, credo che l'errore consista nel fatto che in quel ciclo può capitarti di generare per due volte la stessa posizione (ad esempio 2,3) procedendo quindi ad una sovrascrizione della 'x' già posizionata, col risultato che alla fine te ne ritrovi una in meno (a volte appunto, non sempre). Se è così basta mettere un controllo dopo la generazione degli indici: se quella posizione è già occupata, la scarti e generi un'altra coppia di indici. Ti consiglio a questo punto di sostituire quel ciclo con un while e un contatore che si incrementa per ogni posizione correttamente segnata.
    every day above ground is a good one

  8. #8
    Utente di HTML.it L'avatar di ninuzz
    Registrato dal
    Jan 2011
    Messaggi
    22
    Originariamente inviato da YuYevon
    Bella questa: lui chiede aiuto ma deve prima aiutare te
    (l'emoticon cela un link alla documentazione)

    @ninuzz: ad una rapida lettura, credo che l'errore consista nel fatto che in quel ciclo può capitarti di generare per due volte la stessa posizione (ad esempio 2,3) procedendo quindi ad una sovrascrizione della 'x' già posizionata, col risultato che alla fine te ne ritrovi una in meno (a volte appunto, non sempre). Se è così basta mettere un controllo dopo la generazione degli indici: se quella posizione è già occupata, la scarti e generi un'altra coppia di indici. Ti consiglio a questo punto di sostituire quel ciclo con un while e un contatore che si incrementa per ogni posizione correttamente segnata.
    YuYevon, la leggenda della parthenope del centro direzionale,
    quindi ricapitolando
    elimino quel ciclo for(i=1;i<=6;i++)
    xkè diciamo che può capitare che mi genera due volte 'x' sulla stessa posizione, quindi viene "sovrascritta", però non ho capito dove posizionare quel controllo cioè un "if (scacchiera[nx][ny]!='x')"potresti farmi un esempio in [C]..

  9. #9
    Originariamente inviato da YuYevon
    Bella questa: lui chiede aiuto ma deve prima aiutare te
    (l'emoticon cela un link alla documentazione)

    @ninuzz: ad una rapida lettura, credo che l'errore consista nel fatto che in quel ciclo può capitarti di generare per due volte la stessa posizione (ad esempio 2,3) procedendo quindi ad una sovrascrizione della 'x' già posizionata, col risultato che alla fine te ne ritrovi una in meno (a volte appunto, non sempre). Se è così basta mettere un controllo dopo la generazione degli indici: se quella posizione è già occupata, la scarti e generi un'altra coppia di indici. Ti consiglio a questo punto di sostituire quel ciclo con un while e un contatore che si incrementa per ogni posizione correttamente segnata.

    Avevo chiesto quel chiarimento perchè non capivo quell'istruzione per bene e non ero sicuro di quello che pensavo, tutto qua...
    L'unico possibile errore che mi viene in mente è quello che hai detto tu YuYevon comunque...
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da ninuzz
    YuYevon, la leggenda della parthenope del centro direzionale,
    Come hai saputo che vendo i lupini?

    quindi ricapitolando
    elimino quel ciclo for(i=1;i<=6;i++)
    xkè diciamo che può capitare che mi genera due volte 'x' sulla stessa posizione, quindi viene "sovrascritta", però non ho capito dove posizionare quel controllo cioè un "if (scacchiera[nx][ny]!='x')"potresti farmi un esempio in [C]..
    E se ti sei risposto da solo perché devo farti un esempio io?
    Basta che ti ricordi di incrementare i (o in qualsiasi modo tu voglia chiamare il contatore) *solo se* hai posizionato una x, e non in automatico ad ogni iterazione.

    PS: attenzione alle abbreviazioni da sms... sono poco tollerate sui forum e cagionano crisi epilettiche a molti utenti

    Avevo chiesto quel chiarimento perchè non capivo quell'istruzione per bene e non ero sicuro di quello che pensavo, tutto qua...
    Non volevo essere scortese eh, è che era una risposta singolare
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.