Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    1

    [C] aiuto algoritmo numeri casuali non ripetuti

    Ciao a tutti, ho bisogno del vostro aiuto, non sono molto esperto in programmazione in C, ma sto
    imparando.

    Oggi stavo cercando di fare un programma che utilizza un vettore formato dai numeri da 1 a 15 ordinati casualmente e non capisco cosa ci sia di sbagliato nel mio sorgente.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main()
    {
        int i , j, flag, ran;
        int x[16];
        i=0; j=0;
        flag=1;
        while (i<16){
            do {
                flag=1;
                ran=rand() % 15 + 1;
                x[i]=ran;
                for(j=0;j<i;j++){
                    if(x[j]==x[i]){
                        flag=0;
    
    
                         }
                 }
    
    
             } while (flag==0);
        i++;
        printf("%d \t %d\n", x[i],ran);
        }
    
    
        for(i=0;i<=15;i++){
        printf("%d", x[i]);
        }
    
        return 0;
    }
    Il mio problema e' che non stampa a schermo con il printf finale il vettore e non so perché.

    Nell'ultima parte del primo ciclo while ho inserito un printf per vedere il valore di 'ran' e del vettore e, sorprendentemente, i valori di 'ran' sono tutti i numeri da 1 a 15 ordinati casualmente (come cercavo), ma i valori di x[i] sono numeri che non c'entrano nulla col programma. A dire il vero credo che se non salvasse i numeri nel vettore non dovrebbe nemmeno funzionare l'"if" che invece funge perfettamente.

    So che il programma è lontano dall'essere sintetico e perfettamente funzionale, ma per ora mi basta che sia funzionale. Grazie mille a tutti

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Nell'ultima parte del primo ciclo while ho inserito un printf per vedere il valore di 'ran' e del vettore e, sorprendentemente, i valori di 'ran' sono tutti i numeri da 1 a 15 ordinati casualmente (come cercavo), ma i valori di x[i] sono numeri che non c'entrano nulla col programma. A dire il vero credo che se non salvasse i numeri nel vettore non dovrebbe nemmeno funzionare l'"if" che invece funge perfettamente.
    devi semplicemente invertire l'ordine dell'istruzione "i++;" e della printf() successiva, altrimenti vai a stampare valori di elementi dell'array sempre successivi all'ultimo valorizzato (che risultano, ovviamente, valori spazzatura).

    In quanto al resto, stai tentando di riempire un array di 16 elementi con 16 valori nel range [1,15] tutti diversi tra loro, operazione logicamente impossibile. Il motivo per il quale la stampa finale del vettore non ti viene eseguita è che, per i==15, il while non ha mai fine perché non riesce a trovare un sedicesimo valore che sia diverso da tutti quelli già creati.
    O decrementi almeno a 15 la dimensione dell'array e il numero delle iterazioni dei cicli o aumenti almeno di uno il range dei numeri generati.
    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.