• Home
  • Forum
  • Fare Web
  • PHP

numeri casuali in php

  • Creatore Discussione Creatore Discussione turillo
  • Data di inizio Data di inizio 28 Lug 2012
  • Tag Tag
    estrazioni casuali rand
T

turillo

Utente Attivo
23 Apr 2012
47
0
0
  • 28 Lug 2012
  • #1
cari amici volevo avere delle vostre considerazioni in merito alla generazione di numeri casuali in php.
il mio obiettivo è quello di avere un codice che li generi il più possibile "diversi" in N estrazioni.
faccio un esempio per rendere l'idea, considerando l'esempio delle estrazioni di numeri.

1 estrazione: 2 4 8 1
2 estrazione: 2 5 7 3

e cosi via...

il mio problema è questo: come posso costruire un codice che mi vari i numeri generati anche in estrazioni diverse?

evitare di avere cose simili a

1 estrazione: 2 4 8 1
2 estrazione: 4 5 2 3
3 estrazione: 4 1 8 2
4 estrazione: 2 1 5 6

in cui i numeri 2 e 4 sono ripetuti diverse volte alle varie estrazioni

che consigli date per implementare una maggiore casualità/diversità?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.606
54
48
TN
  • 31 Lug 2012
  • #2
ciao,
ma le strazioni le memorizzi in un db?
i numeri fino a quanto arrivano?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 31 Lug 2012
  • #3
ciao
se leggi
http://blog.mrwebmaster.it/2010/04/19/random-php-taroccato.html
vedi che la funzione di generazione dei numeri cauali è (quasi) perfetta.
se metti un certo intervallo (es 1, 90) vedi che le probabilità di estrarre un numero sono 1/90.
quindi la maggior diversità possibili è usare la funzione rand così com'è
 
T

turillo

Utente Attivo
23 Apr 2012
47
0
0
  • 31 Lug 2012
  • #4
criric ha scritto:
ciao,
ma le strazioni le memorizzi in un db?
i numeri fino a quanto arrivano?
Clicca per allargare...

in questo caso sono memorizzati in un array
 
T

turillo

Utente Attivo
23 Apr 2012
47
0
0
  • 31 Lug 2012
  • #5
borgo italia ha scritto:
ciao
se leggi
http://blog.mrwebmaster.it/2010/04/19/random-php-taroccato.html
vedi che la funzione di generazione dei numeri cauali è (quasi) perfetta.
se metti un certo intervallo (es 1, 90) vedi che le probabilità di estrarre un numero sono 1/90.
quindi la maggior diversità possibili è usare la funzione rand così com'è
Clicca per allargare...

grazie per il tuo contributo ^^
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 1 Ago 2012
  • #6
ciao
dimenticavo:
se vuoi evitare di ripetere il numero fai l'estrazione senza ripetizione, cioe fai in modo che un numero estratto non posa più venere estratto.
potresti provare, visto che sono array, a esttrarre verificare se il numero è gia estratto se si estrai di nuovo se no salvi l'estratto.
comunque in questo modo modifichi le propbilita-
ripetendo l'es rand(1,90) es.
1° estrazione probabilita 1/90
2° estrazione probabilità 1/89
3° estrazione probabilità 1/88
...................
89° 1/2
90° 1/1
 
T

turillo

Utente Attivo
23 Apr 2012
47
0
0
  • 5 Ago 2012
  • #7
l'estrazione la faccio già senza ripetizione solo che praticamente le estrazioni le faccio a gruppi.

ad esempio,

1 manche
estrazione 1
estrazione 2
etc...

2 manche
estrazione 1
estrazione 2
etc...

ora il problema è che i numeri sono diversi all'interno della stessa manche ma spesso si ripetono nella varie manches

quindi avremo

1 manche
23
44
78
12

2 manche
23
57
78
90

il 23 e il 78 me li ritrovo di nuovo..il mio obiettivo è quello di ridurre questa ridondanza. potrei ad esempio utilizzare un array che memorizzi le estrazioni nelle varie manche, potrebbe essere una soluzione.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 5 Ago 2012
  • #8
ciao
non so se ti può seore, ma ho ripescato un mio vecchio script per la distribuzione delle carte a bridge. forse può dartti qualche input
PHP:
<?php
//costruisco il mazzo di carte
$seme[0]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$seme[1]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$seme[2]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$seme[3]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$semi=array('picche','cuori','quadri','fiori');
$giocatore=array('sud','ovest','nord','est');
$carte=13;//numero carte per giocatore
for($k=0; $k < 4; $k++){//distribuisco tra i giocatori
	$numero=0;//numero carte distribuite
	while($numero < $carte){//ripeto sino a che non distribuite tutte le carte al giocatore
		$s=rand(0,3);//estraggo il seme
		$c=rand(0,12);//estraggo la carta
		if(isset($seme[$s][$c])){//la carte esiste
			$giocatori[$k][$s].=$seme[$s][$c]." ";//la attribuisco al giocatore
			$numero++;//incremento il umero di carte per il giocatore k
			unset($seme[$s][$c]);//elimino carta dal mazzo
		}
	}
}
//verifica distribuzione
for($k=0;$k<4;$k++){
	echo "giocatore ".$giocatore[$k]."<br>";
	for($j=0;$j<4;$j++){
		echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seme ".$semi[$j].": ".$giocatori[$k][$j]."<br>";
	}
	echo "<hr>";
}
?>
 
T

turillo

Utente Attivo
23 Apr 2012
47
0
0
  • 5 Ago 2012
  • #9
borgo italia ha scritto:
ciao
non so se ti può seore, ma ho ripescato un mio vecchio script per la distribuzione delle carte a bridge. forse può dartti qualche input
PHP:
<?php
//costruisco il mazzo di carte
$seme[0]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$seme[1]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$seme[2]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$seme[3]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$semi=array('picche','cuori','quadri','fiori');
$giocatore=array('sud','ovest','nord','est');
$carte=13;//numero carte per giocatore
for($k=0; $k < 4; $k++){//distribuisco tra i giocatori
	$numero=0;//numero carte distribuite
	while($numero < $carte){//ripeto sino a che non distribuite tutte le carte al giocatore
		$s=rand(0,3);//estraggo il seme
		$c=rand(0,12);//estraggo la carta
		if(isset($seme[$s][$c])){//la carte esiste
			$giocatori[$k][$s].=$seme[$s][$c]." ";//la attribuisco al giocatore
			$numero++;//incremento il umero di carte per il giocatore k
			unset($seme[$s][$c]);//elimino carta dal mazzo
		}
	}
}
//verifica distribuzione
for($k=0;$k<4;$k++){
	echo "giocatore ".$giocatore[$k]."<br>";
	for($j=0;$j<4;$j++){
		echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seme ".$semi[$j].": ".$giocatori[$k][$j]."<br>";
	}
	echo "<hr>";
}
?>
Clicca per allargare...

si infatti è proprio con unset che tu elimini la carta pescata dopo che è stata data al giocatore.
io lo utilizzo anche all'interno della singola manche per avere estrazioni diverse, ma vorrei anche che
le manche contenessero anche tra loro estrazioni diverse: il dubbio però che mi viene è che lo script
non deve implicare che tra le manche ci sia diversità, quindi vediamo se devo considerare o no di
apportare tale modifica.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
  • 5 Ago 2012
  • #10
ciao
per essere sicuro che per ogni estrazione e nelle varie manche i numeri non si ripetono potresti fare così,
devi però mettere un controllo che verifichi di non andare (tentare di) ad estrarre elementi dell'array che non esistono, cioè non fare più di un certo numero di estrazioni

PHP:
<?php
$da_estrarre=array();
$min=1;
$max=100;
//creo l'array
for($k=$min; $k <=$max;$k++){
	$da_estrarre[]=$k;
}
//randomizzo (mescolo) l'array
shuffle($da_estrarre);
$n_manche=5;//numero di manche
$n_per_manche=4;//numero di estrazioni per manche
//per fare la verifica
$lunghezza=count($da_estrarre);
for($k=0;$k < $n_manche; $k++){
	$ofset=$n_per_manche*($k);//elemento di partenza per l'estrazione
	//verifico di non estrarre elementi inesistenti (cerco oltre la lunghezza dell'array)
	if(($ofset+$n_per_manche)<$lunghezza){
		//estraggo un sotto array che parte da $ofset e comprende $n_per_manche elementi
		$estrazione[$k]=array_slice($da_estrarre,$ofset,$n_per_manche);
	}else{
		break; //esco dal ciclo
	}
}
//verifica estrazione
echo "<hr>";
foreach($estrazione as $ch_1 => $val_1){
	echo "manche n.: ".($ch_1+1)."<br />";
	foreach ($val_1 as $ch_2 => $val_2){
		echo "&nbsp;&nbsp;&nbsp;".($ch_2+1).") $val_2<br />";
	}
	echo "<hr>";
}
?>
 
T

turillo

Utente Attivo
23 Apr 2012
47
0
0
  • 8 Ago 2012
  • #11
ah un altro piccolo dubbio: mi serve generare un numero decimale compreso tra 0 e 1 a due cifre
tipo 0,45 - 0,77 - 0,3 - 0,05 e cosi via..come posso fare?

EDIT: soluzione trovata!
 
Ultima modifica: 8 Ago 2012

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.606
54
48
TN
  • 8 Ago 2012
  • #12
EDIT: soluzione trovata!
Clicca per allargare...
Beh visto che non l'hai postata ne posto una io

PHP:
<?php
echo rand(0, 100) / 100;
?>
 
T

turillo

Utente Attivo
23 Apr 2012
47
0
0
  • 8 Ago 2012
  • #13
criric ha scritto:
Beh visto che non l'hai postata ne posto una io

PHP:
<?php
echo rand(0, 100) / 100;
?>
Clicca per allargare...

si scusa la dimenticanza, io invece che dividere per 100 moltiplico per 0.01, stessa cosa naturalmente!
 
Devi accedere o registrarti per poter rispondere.

Discussioni simili

G
scomponi un numero intero come la somma di 20 numeri interi casuali maggiori di zero diversi fra loro
  • GerryM
  • 12 Dic 2023
  • Javascript
Risposte
1
Visite
3K
Javascript 27 Dic 2023
WmbertSea
R
generazione numeri o lettere casuali senza ripetizione
  • roberto mele
  • 24 Feb 2020
  • Javascript
Risposte
0
Visite
2K
Javascript 24 Feb 2020
roberto mele
R
V
generazione numeri casuali non ripetuti
  • Vincenzovarr
  • 22 Lug 2019
  • .NET Framework
Risposte
3
Visite
6K
.NET Framework 25 Lug 2019
AC1
C
operazioni con numeri casuali
  • colomber
  • 4 Set 2014
  • PHP
Risposte
7
Visite
1K
PHP 6 Set 2014
colomber
C
[C++] Numeri casuali
  • StarFish
  • 24 Giu 2014
  • C/C++
Risposte
2
Visite
2K
C/C++ 24 Giu 2014
StarFish
D
Generare numeri interi casuali compresi in [1;k]
  • Devour
  • 8 Set 2011
  • Java
Risposte
0
Visite
2K
Java 8 Set 2011
Devour
D
generazione di numeri casuali
  • emanuelevt
  • 31 Gen 2011
  • PHP
Risposte
2
Visite
2K
PHP 31 Gen 2011
alessandro1997
P
Excel: numeri casuali arrotondati
  • pimax
  • 13 Feb 2009
  • Windows e Software
Risposte
1
Visite
8K
Windows e Software 13 Feb 2009
gianni21031
L
Script per convertire numeri in parole
  • Lenigmista
  • 14 Mag 2022
  • Javascript
Risposte
2
Visite
2K
Javascript 18 Lug 2022
Lenigmista
L
Input text: accetta solo numeri e non può essere vuoto.
  • otto9due
  • 6 Mar 2022
  • Javascript
Risposte
9
Visite
4K
Javascript 8 Mar 2022
otto9due
S
Come conoscere la posizione di numeri in un array escludendo i doppioni
  • samurai.sette
  • 13 Ott 2020
  • PHP
Risposte
4
Visite
1K
PHP 15 Ott 2020
samurai.sette
S
Numeri whatsapp strani
  • Max 1
  • 5 Apr 2020
  • Smartphone e tablet
Risposte
0
Visite
3K
Smartphone e tablet 5 Apr 2020
Max 1
G
Generazione di numeri random in PHP
  • Gianky4747
  • 14 Feb 2019
  • PHP
Risposte
5
Visite
4K
PHP 14 Feb 2019
macus_adi
G
Operazioni matematiche con grandi numeri PHP
  • Gianky4747
  • 30 Gen 2019
  • PHP
Risposte
5
Visite
2K
PHP 30 Gen 2019
Gianky4747
G
A
[PHP] Script con array con numeri che iniziano per 00
  • aiellog00
  • 28 Gen 2019
  • PHP
Risposte
2
Visite
2K
PHP 29 Gen 2019
aiellog00
A
D
[Javascript] [HTML] Inserire slash dopo 3 numeri
  • Domenico2013
  • 16 Set 2018
  • Javascript
Risposte
5
Visite
2K
Javascript 9 Ott 2018
Max 1
M
[PHP] Controllo campo cap con trattino oltre ai numeri
  • MoPa
  • 20 Gen 2018
  • PHP
Risposte
3
Visite
2K
PHP 2 Feb 2018
zorro
Z
Somma di numeri in una lista di app inventor
  • Zio Marcy
  • 10 Set 2017
  • Sviluppo app per Android
Risposte
0
Visite
4K
Sviluppo app per Android 10 Set 2017
Zio Marcy
Z
[PHP] 4 numeri casuale no doppioni
  • bubino8
  • 4 Ago 2017
  • PHP
Risposte
11
Visite
5K
PHP 9 Ago 2017
bubino8
M
[PHP] range tra due numeri
  • multimedia2
  • 28 Giu 2017
  • PHP
Risposte
7
Visite
2K
PHP 28 Giu 2017
borgo italia
Condividi:
Facebook X (Twitter) LinkedIn WhatsApp e-mail Condividi Link
  • Home
  • Forum
  • Fare Web
  • PHP
  • Italiano
  • Termini e condizioni d'uso del sito
  • Policy Privacy
  • Aiuto
  • Home
Community platform by XenForo® © 2010-2024 XenForo Ltd. | Traduzione a cura di XenForo Italia
Menu
Accedi

Registrati

  • Home
  • Forum
    • Nuovi Messaggi
    • Cerca...
  • Novità
    • Featured content
    • Nuovi Messaggi
    • Ultime Attività
X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?

X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?