Errore srand(time(NULL))

di il
6 risposte

Errore srand(time(NULL))

Come mai viene generato questo errore per il SET4: https://prnt.sc/ht1wc https://prnt.sc/ht1w0 ?? Il codice sembra corretto....

// ESERCIZIO 5.13.
// Scrivete delle istruzioni che assegnino valori interi casuali alla variabile n nei seguenti intervalli:
// SET 1) 1 <= n <= 2;
// SET 2) 1 <= n <= 100; 
// SET 3) 0 <= n <= 9; 
// SET 4) 1000 <= n <= 1112; 
// SET 5) -1 <= n <= 1; 
// SET 6) -3 <= n <= 11; 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int set1( void );
int set2( void );
int set3( void );
int set4( void );
int set5( void );
int set6( void );
int main(void) {
  puts("Questo è un programma che per 10 volte estrae casualmente un numero da un set variabile.\n");
  printf( "%s", "SET 1: 1 <= n <= 2\n\n" );
  set1();
    printf( "%s", "\n\nSET 2: 1 <= n <= 100\n\n" );
  set2();
    printf( "%s", "\n\nSET 3: 0 <= n <= 9\n\n" );
  set3();
    printf( "%s", "\n\nSET 4: 1000 <= n <= 1112\n\n" );
  set4();
    printf( "%s", "\n\nSET 5: -1 <= n <= 1\n\n" );
  set5();
    printf( "%s", "\n\nSET 6: -3 <= n <= 11\n\n" );
  set6();
}

int set1( void ) {
  srand( time( NULL ) );
  int counter = 1;
  while(  counter <= 10 ) {
      int rd = 1 + rand() % 2;
      printf( "%d\t", rd );  
      if( counter == 5 ) {
          puts( "" );
      }
      ++counter;
  }
}

int set2( void ) {
  srand( time( NULL ) );
  for( int counter = 1; counter <= 10; ++counter ) {
      int rd = 1 + rand() % 100;
      printf( "%d\t", rd );  
      if( counter == 5 ) {
          puts( "" );
      }
  }
}
  
int set3( void ) {
  srand( time( NULL ) );  
  for( int counter = 1; counter <= 10; ++counter ) {  
      int rd = 0 + rand() % 9;
      printf( "%d\t", rd );  
      if( counter == 5 ) {
          puts( "" );
      }
  }
}
  
int set4( void ) {
  srand( time( NULL ) );  
  for( int counter = 1; counter <= 10; ++counter ) {  
      int rd = 1000 + rand() % 1112;
      printf( "%d\t", rd );  
      if( counter == 5 ) {
          puts( "" );
      }
  }
}
  
int set5( void ) {
  srand( time( NULL ) );  
  for( int counter = 1; counter <= 10; ++counter ) {  
      int rd = -1 + rand() % 1;
      printf( "%d\t", rd );  
      if( counter == 5 ) {
          puts( "" );
      }
  }
}
  
int set6( void ) {
  srand( time( NULL ) );  
  for( int counter = 1; counter <= 10; ++counter ) {
      int rd = -3 + rand() % 11;    
      printf( "%d\t", rd );  
      if( counter == 5 ) {
          puts( "" );
      }
  }  
}

6 Risposte

  • Re: Errore srand(time(NULL))

    Quale errore ?

    L'espressione

    1000 + rand() % 1112

    permette valori compresi tra 1000 e 2111
  • Re: Errore srand(time(NULL))

    oregon ha scritto:


    Quale errore ?

    L'espressione

    1000 + rand() % 1112

    permette valori compresi tra 1000 e 2111
    Ma scusa, nell'istruzione y = 1000 + rand() % 1112; non è 1000 il valore di spostamento, cioè da quale numero inizia l'insieme casuale e rand() % 1112 il fattore di scala che ci dice l'ampiezza del'intervallo considerato? Io devo ottenere numeri da 1000 a 1112 non fino all'ampiezza 2111!!.... Ho provato con l'istruzione y = 1000 + rand() % (1112 -1000); https://prnt.sc/ht94e e ci siamo ma a questo punto mi chiedo se per l'intervallo 1<=y<=100 y = 1 + rand() % (100 - 1)...?!??!
    Allora, dati i set:
    // SET 1) 1 <= n <= 2;
    // SET 2) 1 <= n <= 100;
    // SET 3) 0 <= n <= 9;
    // SET 4) 1000 <= n <= 1112;
    // SET 5) -1 <= n <= 1;
    // SET 6) -3 <= n <= 11;
    sono arrivato a questa conclusione:
    // SET 1) 1 <= n <= 2;
    1 + rand() % 2;
    // SET 2) 1 <= n <= 100;
    1 + rand() % 100;
    // SET 3) 0 <= n <= 9;
    1 + rand() % ( 9 - 0 + 1);
    // SET 4) 1000 <= n <= 1112;
    1 + rand() % (1112 - 1000);
    // SET 5) -1 <= n <= 1;
    -1 + rand() % ( 1 - (-1) + 1);
    // SET 6) -3 <= n <= 11;
    -3 + rand() % ( 11 - (-3) + 1);
    cioè se l'insieme parte da 1 la formula è: y = a + rand() % b;
    se l'insieme parte da zero bisogna aggiungere una posizione a b
    se l'insieme parte da minore di zero bisogna aggiungere a b non solo 1 per lo zero ma anche le posizioni negative
    se l'insieme parte da maggiore di uno bisogna sottrarre la a alla b nell'istruzione y.... Giusto??? Questo non era spiegato bene sul mio libro....
    https://prnt.sc/ht9fx
    
    // ESERCIZIO 5.13.
    // Scrivete delle istruzioni che assegnino valori interi casuali alla variabile n nei seguenti intervalli:
    // SET 1) 1 <= n <= 2;
    // SET 2) 1 <= n <= 100; 
    // SET 3) 0 <= n <= 9; 
    // SET 4) 1000 <= n <= 1112; 
    // SET 5) -1 <= n <= 1; 
    // SET 6) -3 <= n <= 11; 
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int set1( void );
    int set2( void );
    int set3( void );
    int set4( void );
    int set5( void );
    int set6( void );
    int main(void) {
      puts("Questo è un programma che per 10 volte estrae casualmente un numero da un set variabile.\n");
      set1();
      set2();
      set3();
      set4();
      set5();
      set6();
    }
    int set1( void ) {
      srand( time( NULL ) );
      int counter = 1;
      printf( "%s", "SET 1: 1 <= n <= 2\n\n" );
      while(  counter <= 10 ) {
          int rd = 1 + rand() % 2;
          printf( "%d\t", rd );  
          if( counter == 5 ) {
              puts( "" );
          }
          ++counter;
      }
    }
    int set2( void ) {
      srand( time( NULL ) );
      printf( "%s", "\n\nSET 2: 1 <= n <= 100\n\n" );  
      for( int counter = 1; counter <= 10; ++counter ) {
          int rd = 1 + rand() % 100;
          printf( "%d\t", rd );  
          if( counter == 5 ) {
              puts( "" );
          }
      }
    }
    int set3( void ) {
      srand( time( NULL ) ); 
      printf( "%s", "\n\nSET 3: 0 <= n <= 9\n\n" );
      for( int counter = 1; counter <= 10; ++counter ) {  
          int rd = 0 + rand() % (9+1);
          printf( "%d\t", rd );  
          if( counter == 5 ) {
              puts( "" );
          }
      }
    }
    int set4( void ) {
      srand( time( NULL ) );  
      printf( "%s", "\n\nSET 4: 1000 <= n <= 1112\n\n" );  
      for( int counter = 1; counter <= 10; ++counter ) {  
          int rd = 1000 + rand() % (1112 - 1000);
          printf( "%d\t", rd );  
          if( counter == 5 ) {
              puts( "" );
          }
      }
    }
    int set5( void ) {
      srand( time( NULL ) );  
      printf( "%s", "\n\nSET 5: -1 <= n <= 1\n\n" );  
      for( int counter = 1; counter <= 10; ++counter ) {  
          int rd = -1 + rand() % (1-(-1)+1);
          printf( "%d\t", rd );  
          if( counter == 5 ) {
              puts( "" );
          }
      }
    }
    int set6( void ) {
      srand( time( NULL ) );  
      printf( "%s", "\n\nSET 6: -3 <= n <= 11\n\n" ); 
      for( int counter = 1; counter <= 10; ++counter ) {
          int rd = -3 + rand() % (11 + 4);    
          printf( "%d\t", rd );  
          if( counter == 5 ) {
              puts( "" );
          }
      }  
    }
    
  • Re: Errore srand(time(NULL))

    Questi

    // SET 3) 0 <= n <= 9;
    1 + rand() % ( 9 - 0 + 1);
    // SET 4) 1000 <= n <= 1112;
    1 + rand() % (1112 - 1000);

    sono sbagliati. L'intervallo non parte da 1

    Ragiona ... Con

    rand() % 1112

    che valori minimo e massimo puoi ottenere?
  • Re: Errore srand(time(NULL))

    oregon ha scritto:


    Ragiona ... Con

    rand() % 1112

    che valori minimo e massimo puoi ottenere?
    si infatti in questo caso va y = 1000 + rand() % (1112 - 1000 + 1); dunque (113).... Grazie ho corretto.
  • Re: Errore srand(time(NULL))

    Anche questo

    // SET 3) 0 <= n <= 9;
    1 + rand() % ( 9 - 0 + 1);

    è sbagliato
  • Re: Errore srand(time(NULL))

    Si, giusto ma nel codice ho scritto bene.... scusate e grazie ancora....
Devi accedere o registrarti per scrivere nel forum
6 risposte