Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Abbiamo provato Motorola razr fold, il pieghevole a libro con display interno LTPO da 8,09 pollici, Snapdragon 8 Gen 5 e batteria da 6000 mAh in 243 grammi. Pennino e custodia sopno già nella confezione, per un foldable che si caratterizza per il pannello luminoso, l'autonomia ottima per la categoria e le fotocamere coerenti e ben sfruttabili. Il listino è di 1999 euro, ma in vendita si trova già a molto meno
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente
Google Pixel Watch 5 ha affinato una formula già convincente con hardware più veloce, Gemini offline e nuovi strumenti per sport e benessere. Abbiamo provato la versione LTE da 41 mm, comoda anche di notte e ben proporzionata sui polsi piccoli. Il design resta un punto di forza, ma l'autonomia premia ancora il 45 mm e alcune funzioni AI non sono disponibili in Italia: ecco che cosa cambia rispetto a Watch 4 e quale formato conviene scegliere oggi
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo
Politica, accademia e industria a confronto su mercato unico, sicurezza e competitività. Nei laboratori di Vimercate, Nokia ha mostrato le nuove generazioni di chip ottici e i test che ogni prodotto deve superare prima di arrivare sul mercato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-06-2004, 23:54   #1
[kiriku]
Member
 
L'Avatar di [kiriku]
 
Iscritto dal: Apr 2003
Città: Milano
Messaggi: 58
C e rand()

gente, mi sono accorto che la funzione rand() restituisce sempre lo stesso valore... nel senso che, è vero, se faccio x esempio un ciclo for e faccio scrivere 100 volte il valore di rand() questo è sempre diverso, ma alla successiva esecuzione del programma i numeri sono gli stesis nello stesso ordine... come faccio a evitare la cosa e ad ottenere numeri diversi ad ogni esecuzione del programma?

graz

ciao
__________________
kiriku - Lastcode Software
www.lastcode.org/kiriku
[kiriku] è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 07:25   #2
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
inizializza il seme con un bell srand(time(NULL)) cosi rand ha il seme dell tempo di sisema che è sempre diverso.
Poi per prendere un num fai rand()%N dove N è il numero massimo che vuoi ottenere


Ciao
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 07:50   #3
[kiriku]
Member
 
L'Avatar di [kiriku]
 
Iscritto dal: Apr 2003
Città: Milano
Messaggi: 58
grazie funziona!

ciao
__________________
kiriku - Lastcode Software
www.lastcode.org/kiriku
[kiriku] è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 09:49   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Una piccola nota rand()%N permette di ottenere interi fra 0 e N-1
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 09:50   #5
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
Quote:
Originariamente inviato da cionci
Una piccola nota rand()%N permette di ottenere interi fra 0 e N-1
hai ragione :P
Hai fatto bene a puntualizzare
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 11:15   #6
kk3z
Senior Member
 
L'Avatar di kk3z
 
Iscritto dal: Nov 2003
Messaggi: 980
grazie mille, serve anche a me
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 12:14   #7
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
ragazzi scusate ma non è possibile che se il ciclo for è eseguito molto velocemente il srand(time(NULL)) restituisca sempre lo stesso valore, perchè il time(NULL) restituisce sempre lo stesso valore, o questo pericolo non sussiste?

Ultima modifica di VegetaSSJ5 : 07-06-2004 alle 12:49.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 12:20   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Il pericolo sussiste...infatti srand(time(NULL)) va fatto una sola volta all'interno di tutto il programma !!!
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 12:47   #9
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da cionci
Il pericolo sussiste...infatti srand(time(NULL)) va fatto una sola volta all'interno di tutto il programma !!!
cionci una soluzione potrebbe essere fare srand(time(NULL) + i) dove i è il contatore del ciclo for??
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 12:54   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
No...la srand DEVE essere chiamata una sola volta nel programma in modo da sfruttare lo stesso seme per la generazioni di tutti i numeri random di un programma...altrimenti non sono più molto casuali (vabbè che non lo erano nemmeno prima, ma se lo chiami più volte lo sono meno )...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 13:24   #11
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
cionci dimmi se questo può andar bene
Codice:
  .
  .
int i=0;
srand(time(NULL)+i);
for (i=0; i<50; ++i) printf("%d", rand());
  .
  .
va bene così? fammi capire una cosa. la srand cambia il seme per la generezione di numeri casuali. se io metto una costante lui mi genera sempre lo stesso numero. se io metto delle variabili tipo srand(time(NULL)+i) la rand() va a ricalcolarsi ogni volta l'output di time(NULL)+i oppure calcola l'output sempre a partire dall'input che ha ricevuto la prima volta (cioè quando si è chiamato srand(time(NULL)+i))?
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 14:34   #12
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16215
Il seme del generatore di numeri casuali e' sempre lo stesso; srand lo inizializza con un valore specifico (eventualmente calcolato sul momento), mentre rand lo usa per calcolare il nuovo valore e lo aggiorna con questo.
Per cui, in una sequenza srand --- rand --- srand --- rand, la seconda rand parte dal valore impostato dalla seconda srand, non da quello impostato dalla prima rand.
[EDIT] Invece, in srand --- rand --- rand, la seconda rand parte dal valore impostato dalla prima rand. [/EDIT]

Io chiamerei srand una volta sola, all'inizio del programma.
La teoria dice che la sequenza dei valori di rand a partire da un seme scelto "casualmente" e' "casuale"; ma non penso che questo valga anche per una serie di semi scelti piu' o meno "sequenzialmente".
Eventualmente, darei la possibilita' di chiamarla con un valore a scelta dell'utente anziche' con l'output di time, in modo da poter sia ottenere un comportamento impredicibile, sia replicare esattamente un esperimento.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu

Ultima modifica di Ziosilvio : 07-06-2004 alle 16:47.
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 15:11   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Concordo con Ziosilvio
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 15:15   #14
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
se ho capito bene secondo quanto detto da ziosilvio la rand() oltre che a generare un valore partendo da un seme, aggiorna quel seme al valore appena calcolato, pertanto quando si fa una rand() è superfluo fare una srand() per aggiornare il seme quindi la srand() va fatta solo all'inizio del programma giusto?
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 15:20   #15
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Sì...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2004, 14:46   #16
melanippe
Junior Member
 
Iscritto dal: Sep 2004
Città: Cittadina del Mondo
Messaggi: 10
Quote:
Originariamente inviato da cionci
Una piccola nota rand()%N permette di ottenere interi fra 0 e N-1

Come posso fare per ottenere invece un random decimale, un float compreso tra 0 e 1?
melanippe è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2004, 14:56   #17
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Dipende....hai un numero di decimali prefissato che vuoi ottenere ?

Se non vuoi un numero di decimali prefissato basta dividere per RAND_MAX (è una costante che solitamente identifica il numero massimo positivo rappresentato sugli interi)...

(double)rand() / RAND_MAX

Il risultato è ovviamente un double...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2004, 14:59   #18
Ubi-Wan
Bannato
 
L'Avatar di Ubi-Wan
 
Iscritto dal: Jul 2004
Città: Tatooine
Messaggi: 506
per usare sempre rand puoi fare cosi' per esempio:

float x;

x=(float)(rand()%101)/100.0;

cosi' ottieni un numero decimale compreso tra 0 e 1 con precisione di 2 zeri dopo la virgola
Ubi-Wan è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2004, 15:18   #19
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16215
Quote:
Originariamente inviato da cionci
Se non vuoi un numero di decimali prefissato basta dividere per RAND_MAX (è una costante che solitamente identifica il numero massimo positivo rappresentato sugli interi)...

(double)rand() / RAND_MAX
rand genera valori "casuali tra 0 e RAND_MAX inclusi, quindi sarebbe piu' giusto:
Codice:
(double)rand() / (RAND_MAX+1)
che tuttavia potrebbe dare dei problemi di overflow, perche' RAND_MAX+1 ha il tipo di RAND_MAX e potrebbe essere negativo.
Il metodo "esatto" dovrebbe essere questo:
Codice:
(double)rand() / (RAND_MAX+1U)
che e' il rapporto tra un valore double compreso tra 0 e RAND_MAX inclusi, e un valore intero senza segno, quindi sicuramente positivo.
A questo punto, una variabile aleatoria bernoulliana X di parametro p (che vale 1 con probabilita' p, 0 con probabilita' 1-p) si genera semplicemente ponendo:
Codice:
X = ((double)rand() / (RAND_MAX+1U)) < p;
EDIT: ho corretto un RAND (sbagliato) in RAND_MAX(giusto)
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu

Ultima modifica di Ziosilvio : 13-09-2004 alle 15:25.
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2004, 15:18   #20
melanippe
Junior Member
 
Iscritto dal: Sep 2004
Città: Cittadina del Mondo
Messaggi: 10
Quote:
Originariamente inviato da Ubi-Wan
per usare sempre rand puoi fare cosi' per esempio:

float x;

x=(float)(rand()%101)/100.0;

cosi' ottieni un numero decimale compreso tra 0 e 1 con precisione di 2 zeri dopo la virgola

Grazie, è quello che cercavo di ottenere, anche se temo di non essermi espressa chiaramente!
melanippe è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola razr fold, dalla conchiglia al formato a libro. La recensione Motorola razr fold, dalla conchiglia al formato ...
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente Recensione Google Pixel Watch 5: sembra lo stess...
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo Nokia Innovation Day 2026: la sovranità e...
In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi In sella alla Fiido Nomads Pro: e-bike con motor...
ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto ASUS Zenbook 14 (UX3480AA): tanta autonomia con ...
Starship: SpaceX potrebbe tentare di rec...
Federico Veronesi vince i Wildlife Photo...
Samsung Galaxy bloccati dopo l'aggiornam...
L'UE prolunga il periodo di test del pro...
Offerte Amazon di oggi: e-bike da 616€, ...
La missione cino-europea ESA Smile ha in...
Cisco sulle tracce dell’IA nei malware: ...
Nuovo Codice della strada: stop alla PEC...
Blue Origin Constellation Park: un nuovo...
E-bike da 615€ su Amazon: Bodywel F20PRO...
Windows 11 24H2, stop al supporto per Ho...
Gemini 4 Argon disponibile per tutti: co...
Sony avrebbe chiuso Overdrive, lo store ...
Abbiamo scattato con OPPO Find X10 Pro M...
Fino a 21 miliardi per i chip americani:...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 03:04.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v