Visualizzazione dei risultati da 1 a 8 su 8

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Scritto al volo, quindi con possibili errori.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    #define MAX 100
    
    
    /* funzione che ritorna 1 se "num" e' presente in "array"
     * e 0 se invece non e' presente */
    int controlla_presenza(int *array, int size, int num)
    {
        int i;
        for(i=0; i<size; ++i)
        {
            if(array[i] == num)
                return 1;
        }
        return 0;
    }
    
    
    /* funzione che genera un array di numeri casuali e non ripetuti */
    int * genera_casuali(int size)
    {
        int *array = (int *) malloc(size * sizeof(int));
        int i, generato, riempito = 0;
    
    
        for(i=0; i<size; ++i)
        {
            array[i] = 0;       /* inizializzazione a zero */
        }
    
    
        for(i=0; i<size; ++i)
        {
            do
            {
                generato = rand() % MAX + 1;
            } while(controlla_presenza(array, size, generato) == 1);
            array[riempito++] = generato;
        }
    
    
        return array;
    }
    
    
    
    
    void stampa_array(int *array, int size)
    {
        int i;
        for(i=0; i<size; ++i)
            printf("%d\n", array[i]);
    }
    
    
    int main()
    {
        srand(time(NULL));
        int size;
    
    
        printf("Inserire dimensione: ");
        scanf("%d", &size);
    
    
        int *casuali = genera_casuali(size);
        stampa_array(casuali, size);
    
    
        return 0;
    }

  2. #2
    mmm bene ahah grazie mille per la risposta purtroppo non sono ancora a questi livelli di C quindi mi dovrò arrangiare :/ vediamo se riesco a convertirlo ad un "c base" che posso capire ahah grazie mille

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Quote Originariamente inviata da raffaeledicapri Visualizza il messaggio
    mmm bene ahah grazie mille per la risposta purtroppo non sono ancora a questi livelli di C quindi mi dovrò arrangiare :/ vediamo se riesco a convertirlo ad un "c base" che posso capire ahah grazie mille
    Guarda che questa domanda è stata afforontata svariate altre volte. Ed esiste un algoritmo più efficiente. Basta che fai una ricerca nel forum. In sostanza prendi un array di N elementi che contiene tutte le possibili scelte, generi un indice casuale i fra 0 e N-1 scambi gli elementi i e N-1 e diminuisci N di uno quindi ritorni l'elemento che originariamente si trovava in i.
    Eccoti un esempio di una possibile implementazione in C che usa delle variabili globali per semplicità. Il main è un esempio e l'output te ne fa vedere il funzionamento
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define N 5
    
    int nums[N];
    int n;
    
    void init_gen() {
        int i;
        for(i = 0; i < N; ++i) {
            nums[i] = i+1;
        }
        n = N;
    }
    
    void reset_gen() {
        n = N;
    }
    
    int gen() {
        //nel caso tutti i numeri siano stati generati segnala un uso innappropriato
        if(n < 1) {
            return -1;
        }
        int i = rand() % n;
        --n;
        int tmp = nums[i];
        nums[i] = nums[n];
        nums[n] = tmp;
        return tmp;
    }
    
    
    int main(void) {
        srand(time(NULL));
        init_gen();
        int i, j;
        for(i = 0; i < 6; ++i) {
            for(j = 0; j < 6; ++j) {
                printf("%d ", gen());
            }
            printf("\n");
            reset_gen();
        }
        return 0;
    }
    Output di esempio
    codice:
    1 4 5 2 3 -1 
    4 2 5 1 3 -1 
    3 2 1 5 4 -1 
    4 5 1 3 2 -1 
    1 2 4 5 3 -1 
    5 4 3 2 1 -1
    Per risolvere il tuo problema ti basta sostanzialmente cambiare N, ma il codice è facilmente addattabile a casi più complessi in cui gli elementi generati/mescolati non sono semplici numeri.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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 © 2025 vBulletin Solutions, Inc. All rights reserved.