Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C] Problema con la funzione rand()

    Salve,
    sto avendo un problema a riempire un array di tipo char con valori
    casuali. L'algoritmo è il seguente:

    #include <stdio.h>
    #include <stdlib.h>
    int main() {
    int n,i,j;
    char a[15],c;
    n=15;


    for (i=0; i<n; i++) {
    c=rand();
    a[i]==c;


    printf("a(%d)=%c \n",i,a);
    printf("c=%c\n",c);



    }


    system ("PAUSE");
    return 0;


    }


    Quando faccio la stampa della variabile c mi escono i numeri casuali
    che genera rand(), invece se stampo il vettore (a cui assegno i valori
    di c), mi esce sempre lo stesso valore (P, che tra laltro non è mai
    uscito per la variabile c).
    Qualcuno mi sa dire in cosa sto sbagliando?

  2. #2
    for (i=0; i<n; i++) {
    c=rand();
    a[i]==c;
    == è un operatore di confronto
    Devi scrivere a[i]=c;
    “Guardo in alto mentre cammino, così le lacrime non scenderanno...”
    Kyu Sakamoto

  3. #3
    scusa ho sbagliato a fare copia e incolla!....cmq è solo un = e ho lo stesso risultato

  4. #4
    Allora l'errore è qui:

    printf("a(%d)=%c \n",i,a);
    printf("a(%d)=%c \n",i,a[i] );
    “Guardo in alto mentre cammino, così le lacrime non scenderanno...”
    Kyu Sakamoto

  5. #5
    Cmq secondo me sarebbe meglio fare :

    c = rand() % 256;
    Experience is what you get when you don’t get what you want

  6. #6
    Originariamente inviato da Xaratroom
    Cmq secondo me sarebbe meglio fare :

    c = rand() % 256;
    Non è necessario, viene fatto automaticamente nella conversione da int a char
    “Guardo in alto mentre cammino, così le lacrime non scenderanno...”
    Kyu Sakamoto

  7. #7
    Non è necessario, viene fatto automaticamente nella conversione da int a char
    Si ma se non erro nella conversione può essere settato il flag di overflow
    Experience is what you get when you don’t get what you want

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... non ci sono problemi di overflow ... quello che fa il compilatore e' questo

    codice:
    00411B4E E8 2C F8 FF FF   call        @ILT+890(_rand) (41137Fh) 
    00411B53 88 45 FB            mov       byte ptr [c],al
    ovvero, ignora i byte piu' significativi.

    Semmai mi sembra che manchi l'inizializzazione del generatori di numeri pseudorandom ... andrebbe aggiunta una

    codice:
    srand( (unsigned)time( NULL ) );

  9. #9
    ovvero, ignora i byte piu' significativi.
    Credevo che settasse il flag di overfolw per il troncamento effettuato

    srand( (unsigned)time( NULL ) );
    Giustissimo
    Experience is what you get when you don’t get what you want

  10. #10
    mettendo a[i] funziona, era proprio lì l'errore.
    La rand() funziona lo stesso anche senza la chiamata a srand, perchè va fatta lo stesso?

    Adesso però ho un altro problema: nell'array creato con i caratteri casuali devo trovare
    il massimo, usando la tecnica divide et impera con variante casuale (e
    cioè non dividendo a metà l'array, ma fino a un numero generato
    casualmente), con chiamata ricorsiva. Come faccio a chiamare
    ricorsivamente la funzione dal primo elemento dell'array a quello che
    genera casualmente?

    #include <stdio.h>
    #include <stdlib.h>
    /*int max(char ,int )*/
    int main() {
    int n,i,j;
    printf("Inserisci il numero degli elementi:\n");
    scanf("%d",&n);
    char a[n];
    for (i=0; i<n; i++) {
    a[i]=rand();
    printf("a(%d)=%c \n",i,a[i]);

    }

    system ("PAUSE");
    return 0;
    }

    int max(a, n)
    int numero_casuale;
    char max_elem;
    numero_casuale=rand()%(n+1);
    if n=1 max_elem=a[0];
    else if n=2 {
    if a[0]>a[1]
    max_elem= a[0];
    else
    max_elem=a[1];
    }
    else {
    max_elem=max(a,numero_casuale)
    ...
    ....
    ....

    Aiutatemi!!!!

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.