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( "" );
}
}
}