Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    229

    c random

    ciao a tutti
    esiste una funzione in c, che mi permatta di generare un numero casuale fra 0 e 40 senza occorrenze, ovvero senza che generi numeri identici.
    grazie in anticipo
    Ad Maiora

  2. #2
    te lo spiego in linea teorica: allora tu fai un array di 41 elementi da 0 a 40;

    ripeti questo ciclo ogni estrazione
    sapendo che:
    N è il numero di elementi nell'array

    ...
    estratto = random(N)
    scrivi estratto
    porta tutti gli elementi negli indici tra estratto e N indietro di un indice, cioè:
    codice:
    for i=estratto i<N-1 i++
    array[i]=array[i+1]
    n=N-1
    ...

    l'ho scritto molto velocemente, se non capisci qualcosa chiedi

  3. #3
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    Originariamente inviato da gygabyte017
    te lo spiego in linea teorica: allora tu fai un array di 41 elementi da 0 a 40;

    ripeti questo ciclo ogni estrazione
    sapendo che:
    N è il numero di elementi nell'array

    ...
    estratto = random(N)
    scrivi estratto
    porta tutti gli elementi negli indici tra estratto e N indietro di un indice, cioè:
    codice:
    for i=estratto i<N-1 i++
    array[i]=array[i+1]
    n=N-1
    ...

    l'ho scritto molto velocemente, se non capisci qualcosa chiedi

    non è molto efficiente spostare tutte le volte un gran numero di elementi dell'array...
    E' possibile procedere inceve ad un semplice scambio dell'elemento estratto e dell'ultimo elemento e ridurre di 1 ogni volta l'intervallo di estrazione:

    codice:
    #include <stdio.h>
    #define MAX 50
    
    int lim, estratto, i, k, tab[MAX], temp;
    
    main()
    {
     /* inizializzo l'array per la ricerca casuale */
     for (i=0; i<MAX; i++)  tab[i]=i; 
    
     /* cerco elemento casuale tra i primi lim valori di tab */
     lim=MAX;
    
     for (i=0; i<MAX; i++)
     {
      k=rand()%lim;           /* scelgo elemento casuale dell'array */
      estratto= tab[k];       /* ne estraggo il valore, questo è il risultato dell'estrazione! */
      printf("%d) %d\n",i,estratto);
      tab[k]=tab[lim-1];      /* sposto ultimo elemento al posto di quello appena estratto */
      lim--;                  /* ignoro ultimo elemento per la prox estrazione */
     }
    
    }
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    229
    in pratica dai gestire un mazzo di 40 carte, deve estrarre le carte a random dal mazzo[40], è la strada giusta???
    grazie in anticipo
    Ad Maiora

  5. #5
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    il codice che ti ho indicato fa quello che chiedi... il tuo mazzo è l'array "tab" la carta estratta è "estratto"
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  6. #6

    Scusate la mi intromissione

    sto cercando di fare il sudoku e vorrei avere il codice per estrare un numero casuale da un'array numerico


    PS:come quando si estrae dalla tombola i numeri (voglio dire che quando lo tolgo per quel posto non puo' comparire due volte !)

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Hai risposto ad un thread di piu' di 2 anni fa ...!

    Se devi proporre un quesito, apri un nuovo thread e spiega chiaramente quello che vuoi ...

    P.S. Dai un'occhiata al regolamento ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    157
    volendo ci sono metodi più brutti ma altrettanto efficaci:

    int valori[MAX];
    bool controlli[MAX];
    int estraiValore;

    for int i; i<MAX; i++
    valori[MAX]=i;
    controlli[MAX]=0;
    //inizializza i vettori

    for int i; i<MAX; i++
    estraiValore=random(MAX);//non conosco la sintassi di random in c
    if (!controlli[estraiValore)) print estraiValore; controlli[estraiValore]=1;

    così sei certo che estrae un numero una sola volta, fa schifo come soluzione, ma non ci sono eccessivi cicli da fare

  9. #9
    alloras scusami ma portreste andare sul trehad di Flash :
    Array casuale o random

    Li ho postato quello che voglio !

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma tu vuoi scriverlo in C?

    Cosa c'entra Flash?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.