Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Funzione Rand in C

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    65

    Funzione Rand in C e aiuto su codice....

    Ciao a tutti, sono un "programmatore" alle prime armi (un semestre di informatica al Politecnico di Milano) e ho un problema che nn riesco a risolvere.

    Dunque, in C esiste la funzione rand() che restituisce un valore random tra 0 e un valore MAX definito nella libreria stdlib.h

    Io ho scritto questo codice, di per se semplicissimo:

    for(j=0;j<5;j++)
    {
    x=rand();
    m=x;
    printf("%d\n",m);
    x=0;
    m=0;
    }

    è mai possibile che mi stampa gli stessi 5 numeri ogni volta che faccio partire il programma?Io vorrei che ogni volta che chiamo la funzione rand() , lei mi dia ogni volta dei numeri diversi!! come faccio? grazie ciao a tutti

  2. #2
    aggiungi prima dell'inizio del for

    codice:
    srand (time(NULL)) ;
    ah , e devi anche includere time.h e math.h
    Vinum dolce gloriosum
    pingue facit et carnosum
    Vinum forte,vinum purum
    reddit hominem securum

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    65
    grazie mille Lardoman....grazie davvero.


    già che ci sono vi faccio vedere il codice che ho scritto, in pratica devo fare il gioco quello dove il pc sceglie una sequenza casuale di 4 colori tra 6-7 disponibili e voi dovete indovinarla.Il pc vi dice, dopo che avete tentato di indovinare, quanti colori al posto esatto avete indovinato o quanti colori avete indovinato ma non sono al posto esatto.


    CODICE


    Il programma in pratica "sbaglia" il conteggio di quelli giusti al posto giusto o quelli giusti alposto sbagliato...uff mi sto dannando....so che voi che siete bravi potete darci un occhiatina

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    codice:
    [...] 
    //                  0    1    2    3    4    5                     
    char colori[6] = { 'b', 'v', 'g', 'a', 'r', 'm'};//qui c'era una virgola in più
    [...]
    appoggio=rand()%5;//il limite deve essere 5 visto che l'array parte da 0 e termina con indice 5 come mostra in alto
    [...]
    Spero di aver visto tutto... e di non aver corretto cose giuste

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Il prolema principale sta nell'istruzione

    gets(sequenzautente);

    la quale legge una stringa da input memorizzandola nell'array sequenzautente; ma in C le stringhe sono terminate anche dal carattere nullo '\0', che viene inserito come utlimo carattere della stringa stessa; ora se tu hai dichiarato un array sequenzautente di 4 posizioni, questo conterrà i quattro caratteri che rappresentano i colori, pero poi la gets ci mette anche il carattere di fine stringa, ma sequenzautente puo contenere solo 4 caratteri, quindi quel carattere nullo viene scritto in una posizione di memoria che non appartiene più all'array, ma che ad esempio nel caso del mio compilatore, e probabilmente anche nel tuo, corrisponde alla prima posizione dell'altro array che dichiari, ovvero sequenzapc, infatti se provi a stampare sequenzapc dopo la gets, ti rendi conto che la prima posizione di sequenzapc come intero è diventata 0, che corrisponde al carattere '\0'; per risolvere il problema basta dichiarare sequenzautente come array di 5 caratteri; un altro problema penso che sia il conteggio dei colori che non si trovano nella stessa posizione nei due array, perche quando trovi una corrispondenza tra due colori in posizioni uguali o diverse nei due array, devi ad esempio cancellarli, perke se no puoi contare lo stesso colore piu volte; ho modificato quindi i cicli for, in modo tale che quando si trova un colore, le corrispondendti posizioni degli array vengono azerate: in questo modo bianchi + neri è sempre <= 4:

    codice:
    printf("\n\nI colori sono: Blu Verde Giallo Arancio Rosso Marrone\n\n");
    printf("Inserisci la tua sequenza (max 4 colori): ");
    
    gets(sequenzautente);
    
    //prima controllo i colori se sono uguali posizione per posizione
    for(j=0;j<4;j++){
    	if(sequenzautente[j]==sequenzapc[j]){
    		neri++;
    		sequenzapc[j] = 0;
    		sequenzautente[j] = 0;
    	}
    }
    //Poi controllo se qualke colore di sequenzapc puo essere fatto
    //corrispondere con un colore di sequenzautente in diveersa posizione
    for(j=0;j<4;j++){
    	//Se il colore nella posizione j non l'ho trovato ancora...
    	if(sequenzapc[j] != 0){
    		//lo conronto con le altre posizioni
    		for(k=0;k<4;k++){
    			if(sequenzautente[k]==sequenzapc[j]){
    				bianchi++;
    				sequenzautente[k] = 0;
    				sequenzapc[j] = 0;
    				break;
    			}
    		}
    	}
    }

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da netarrow
    codice:
    [...] 
    //                  0    1    2    3    4    5                     
    char colori[6] = { 'b', 'v', 'g', 'a', 'r', 'm'};//qui c'era una virgola in più
    [...]
    appoggio=rand()%5;//il limite deve essere 5 visto che l'array parte da 0 e termina con indice 5 come mostra in alto
    [...]
    Spero di aver visto tutto... e di non aver corretto cose giuste

    n modulo 6 è un numero compreso tra 0 e 5 perchè se divido per 6 il resto della divisione e strettamente minore di 6; quindi quell'istruzione era corretta

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    65
    mai trovato gente tanto disponibile...coi tempi che corrono non ci speravo più!


    Grazie mille a tutti, davvero, ho trovato un forum a cui posso chiedere le cose che non capisco...sperando di passare quello stramaledetto esame di informatica...


    GRAZIE

    ps: il programmino è ok al 95% devo ancora perfezionarlo per quanto riguarda la logica, cmq ve lo regalo!divertitevi! eheh


    GIOCONE

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.