Numero random senza ripetizione di cifre

E' l'area in cui è possibile condividere funzioni personalizzate nate dalla creatività e l'esperienza degli sviluppatori FileMaker

Moderatore: Moderatori

Rispondi
raybaudi
Messaggi: 3616
Iscritto il: sabato 7 febbraio 2004, 1:00
Località: Roma
Contatta:

Numero random senza ripetizione di cifre

Messaggio da raybaudi » domenica 26 marzo 2006, 1:15

Volevate un numero di cinque cifre tutte diverse dall'1 al 5 ?

Oppure un numero di cinque cifre tutte diverse dall'1 al 9 ?

Oppure ancora un numero di nove cifre tutte diverse dall'1 al 9 ?

Questa funzione personalizzata lo creerà per voi in modo "random" :wink:

Codice: Seleziona tutto

/*
NoRepDigit custom function

Author: Daniele Raybaudi

Format: NoRepDigit ( hightDigit ; digitCount )

Params:
hightDigit - number (max 9)
digitCount - number (max 9)

Result:
returns a random number of "digitCount" digits with all different digits from 1 to "hightDigit"
(produce in modalità random un numero di lunghezza: "digitCount" con cifre tutte diverse tra 1 e "hightDigit");
two examples (due esempi): 
NoRepDigit ( 5 ; 5 ) may return (può produrre): 12345; 
NoRepDigit ( 8 ; 5 ) may return (può produrre): 23781.
"digitCount" can't ever be highter than "hightDigit"
("digitCount" non deve mai essere superiore a "hightDigit")
the number returned has no zero inside
(il numero creato non conterrà alcun zero).

*/

Let ([
num = Int ( Random * hightDigit ) + 1 ;
next = digitCount - 1 ;
result =  num 
& 
Case (
next ; NoRepDigit ( hightDigit ; next ) ;
""
)
];
Case (
digitCount > 9 or hightDigit > 9 or digitCount > hightDigit ; "error" ;
Length ( Filter ( result ; num ) ) > 1; NoRepDigit ( hightDigit ; digitCount ) ;// repeat the loop if the new digit isn't different (ricomincia da capo se una cifra si ripete)
result
)
)
Raybaudi FMP 12 Adv. Windows XP SP3

Pirata
Messaggi: 1197
Iscritto il: domenica 12 marzo 2006, 1:00
Versione FileMaker: 18
Sistema operativo: Win10
Località: Reggio Calabria (RC)

Messaggio da Pirata » domenica 26 marzo 2006, 3:20

Caspita... ma che lingua è!!!

Complimenti raybaudi!

book
Messaggi: 703
Iscritto il: lunedì 5 gennaio 2004, 1:00

Messaggio da book » mercoledì 19 aprile 2006, 15:04

X Antonio,
in pratica raybaudi ti ha chiesto se ti necessita una funzione personalizzata che in modo casuale ti crea…
un numero di cinque cifre tutte diverse dall'1 al 5 ?

Oppure un numero di cinque cifre tutte diverse dall'1 al 9 ?

Oppure ancora un numero di nove cifre tutte diverse dall'1 al 9 ?
E di seguito ti scrive come scriverla. (ma non te lo spiega passo passo come farla)

Procurati FM Advanced 7 o 8
Nuovo File
Vai al menù File – Definisci – Funzioni personalizzate
Nuovo
Al nome funzione scrivi: NoRepDigit
Nei parametri funzione scrivi: hightDigit
Poi schiaccia il tasto + e hightDigit viene inserito
Nei parametri funzione scrivi: digitCount
Poi schiaccia il tasto + e digitCount viene inserito

Nello spazio destinato al listato della formula devi inserire (per il copywright) tutto il codice che Daniele ha postato sul forum.

A titolo didattico il seguente listato è la formula vera e propria:
Let ([ num = Int ( Random * hightDigit ) + 1 ; next = digitCount - 1 ; result = num
& Case ( next ; NoRepDigit ( hightDigit ; next ) ; "" ) ];
Case ( digitCount > 9 or hightDigit > 9 or digitCount > hightDigit ; "error" ;
Length ( Filter ( result ; num ) ) > 1; NoRepDigit ( hightDigit ; digitCount ) ; result ) )

Definisci le disponibilità e poi OK.

Nel tuo FMA ti ritrovi con una funzione nuova chiamata NoRepDigit

Crea tre campi
1° hightDigit (numero)
2° digitCount (numero)
3° “come vuoi tu” (calcolato) il cui calcolo è: NoRepDigit ( hightDigit; digitCount )

inserisci i valori nei campi hightDigit e digitCount.
se rispetti i limiti imposti avrai il risultato atteso, in caso contrario “error”.


saluti.

book
Messaggi: 703
Iscritto il: lunedì 5 gennaio 2004, 1:00

Messaggio da book » mercoledì 19 aprile 2006, 15:44

dimenticavo...

scritta in italiano...

Consenti ([ variabile1 = Intero ( Casuale * hightDigit ) + 1 ; variabile2 = digitCount - 1 ; variabile3 = variabile1
& Casi ( variabile2 ; NoRepDigit ( hightDigit ; variabile2 ) ; "" ) ];
Casi ( digitCount > 9 or hightDigit > 9 or digitCount > hightDigit ; "error" ;
Lunghezza ( Filtro ( variabile3 ; variabile1 ) ) > 1; NoRepDigit ( hightDigit ; digitCount ) ; variabile3 ) )

...è 100% puro Filemaker.

saluti.

Pirata
Messaggi: 1197
Iscritto il: domenica 12 marzo 2006, 1:00
Versione FileMaker: 18
Sistema operativo: Win10
Località: Reggio Calabria (RC)

Messaggio da Pirata » mercoledì 19 aprile 2006, 18:48

...mmmmmmmma che dire Riccardo: sei un mostro! Un Professorone.

Grazie 1000.
Disconoscevo queste formuline personalizzate, o meglio, le avevo notate ma non sapevo quando attivarle.
Ancora grazie a te e Raybaudi.

book
Messaggi: 703
Iscritto il: lunedì 5 gennaio 2004, 1:00

Messaggio da book » giovedì 20 aprile 2006, 8:01

Alt, Antonio
I ringraziamenti vanno fatti esclusivamente a raybaudi che ha postato la sua funzione personalizzata ed a cui porgo un mio personale grazie.

Io mi sono limitato “solo” a rendere più chiara l’informazione affinché potesse essere fruita da tutti e non esclusivamente dai più bravi.

“filosofia”, la mia, che si ritrova in altri miei post in cui ho messo a disposizione degli gli utenti “meno bravi” conoscenze che appartengono a sviluppatori di livello superiore.

Saluti
Riccardo

Pirata
Messaggi: 1197
Iscritto il: domenica 12 marzo 2006, 1:00
Versione FileMaker: 18
Sistema operativo: Win10
Località: Reggio Calabria (RC)

Messaggio da Pirata » giovedì 20 aprile 2006, 10:06

Esatto, io ho aumentato i ringraziamenti a te per l'ulteriore chiarimento, poichè sono trai i "meno bravi", ma lungi da me il fatto di non ri-porgerli a Raybaudi.

Dagda
Messaggi: 62
Iscritto il: mercoledì 3 maggio 2006, 2:00

Messaggio da Dagda » martedì 27 marzo 2007, 12:47

non era più semplice inserire un campo calcolato con

#anno & #mese & #giorno & (Conteggio ( Giornodelmese::one )+1)

?

io ho utilizzato questa soluzione per un conteggio mensile che riparta sempre ad ogni primo del mese:

#anno & #mese & (Conteggio ( mese::one )+1)

Dagda
Messaggi: 62
Iscritto il: mercoledì 3 maggio 2006, 2:00

Messaggio da Dagda » martedì 27 marzo 2007, 12:48

scusate ho sbagliato TOPIC...

andreuccio
Messaggi: 1737
Iscritto il: giovedì 7 ottobre 2004, 2:00
Località: Lamezia Terme

Messaggio da andreuccio » martedì 27 marzo 2007, 12:50

Dagda ha scritto:non era più semplice inserire un campo calcolato con

#anno & #mese & #giorno & (Conteggio ( Giornodelmese::one )+1)

?

io ho utilizzato questa soluzione per un conteggio mensile che riparta sempre ad ogni primo del mese:

#anno & #mese & (Conteggio ( mese::one )+1)
Forse hai confuso funzione. Questa del post serve per creare dei numeri casuali. Rileggilo. :wink:
Umiliati e sarai Esaltato, Esaltati e sarai Umiliato
Mac OS X Snow Leopard - FMP 10 Adv.

Rispondi