Interface Bureau
Emploi, informatique, transport, ...
Répondre

Cherche un générateur de chiffres aléatoire paramétrable

08 Fév 2017 à 14:23

Bonjour à tous,

Je suis à la recherche d'une générateur de chiffres aléatoire paramétrable.

Si quelqu'un sait le fabriquer sous excel ou autre je suis prêt à acheter

Mon besoin en terme de paramètres:

Pouvoir définir une valeur total paramétrable à 0.1 près
Pouvoir définir le nombre de chiffres aléatoire qui additionnés donneront la valeur total
Pouvoir définir une valeur minimal pour les chiffre aléatoire à 0.1 près

Merci

Re: Cherche un générateur de chiffres aléatoire paramétrable

08 Fév 2017 à 14:36

..........
Dernière édition par zeroundemi le 17 Fév 2017 à 02:25, édité 1 fois.

Re: Cherche un générateur de chiffres aléatoire paramétrable

08 Fév 2017 à 20:10

Original comme demande sur le Vert  :wink:

Ma solution :
#include <stdio.h>
#include <stdlib.h>

// gcc -Wall generator.c -o generator
//test : ./generator  56.2 7 3.2

int rand_a_b(int a, int b){
       if(a>=b)
               {
                       fprintf(stderr,"etourdi va!\n");
               }
   return rand()%(b-a) +a;
}

int main(int argc, char * argv[])
{
       float total;
       float min;
       int nb;
       float *tab;
       float accumulateur;
       int i;
      
       if(argc != 4)
               {
                       fprintf(stderr,"%s total min nb\n",argv[0]);
                       exit(1);
               }
      
       total = atof(argv[1]);
       min   = atof(argv[2]);
       nb    = atof(argv[2]);
       tab = (float*)malloc(sizeof(float)*nb);
      
 while(1)
  {
       accumulateur =0;
       for(i=0;i<nb-1;i++)
               {
                       tab[i] = (float)(rand_a_b((int)(min*1000),(int)(total*1000)));
                       tab[i] =tab[i] / (float)1000;
                       accumulateur+=tab[i];
                       if(accumulateur > total)
                               break;
               }
       if(accumulateur < total)
               if((total -accumulateur) >min)
                   {
                   tab[nb-1] = total-accumulateur;
                       break;
                  }
       }
      
printf("La solution est :");
for(i=        0;i<nb;i++)
       printf(", %f",tab[i]);
 printf("\n");
}


Exemple :

./generator  56.2 7 3.2
La solution est :, 7.698000, 7.854000, 7.886000, 7.017000, 9.698000, 7.726000, 8.321003


Une petite erreur d'arrondi sur la fin, mais rien  de méchant (il faudrait refaire le calcul en 24/96).
Dernière édition par shal le 08 Fév 2017 à 20:53, édité 1 fois.

Re: Cherche un générateur de chiffres aléatoire paramétrable

08 Fév 2017 à 20:16

C'est quoi ce langage info ?

Re: Cherche un générateur de chiffres aléatoire paramétrable

08 Fév 2017 à 20:20

c'est du langage C .
Très vieux (il date des années 70) mais encore très utilisé (notamment  pour tout ce qui est proche du matériel)

https://fr.wikipedia.org/wiki/C_(langage)

Re: Cherche un générateur de chiffres aléatoire paramétrable

08 Fév 2017 à 20:39

Non, c'est assez basique comme truc, tout étudiant en informatique de plus de 3 mois d'expérience y arriverait .

Par contre, je me suis planté où dans les specifs ?

EDIT :  Forcement, je réponds à un message effacé , j'ai l'air débile  :cry:

Je remet le message effacé :

C'est typique : ça a l'air inintelligible, super costaud, inspire le respect ...


... jusqu'au moment où tu examine le résultat, et là tu t'aperçois que ça ne fait pas le job demandé  :wink:
Dernière édition par shal le 08 Fév 2017 à 20:44, édité 2 fois.

Re: Cherche un générateur de chiffres aléatoire paramétrable

08 Fév 2017 à 20:43

..........
Dernière édition par zeroundemi le 17 Fév 2017 à 02:23, édité 1 fois.

Re: Cherche un générateur de chiffres aléatoire paramétrable

08 Fév 2017 à 21:10

shal » 08 Fév 2017, 19:20 a écrit:c'est du langage C .
Très vieux (il date des années 70) mais encore très utilisé (notamment  pour tout ce qui est proche du matériel)

https://fr.wikipedia.org/wiki/C_(langage)

OK, j'en ai seulement entendu parler, n'en ayant pratiqué aucun, je ne vais pas le déchiffrer ; par contre
si on prends 100 comme somme à atteindre, 5 comme nombres aléatoires dont le total va donner 100 ,  le cinquième qui est donc 100-la somme des quatre autres n'est plus aléatoire . Donc tu demanderais 1 premier nombre compris strictement entre 0 et 100 , puis un second tel que la somme des deux premiers ne dépasse pas 100, et ainsi de suite jusqu'au 4 ème  ; c'est ça ?
Ou alors , si 11 est le premier qui sort , tu demandes un nombre aléatoire entre 0 et 89 , et ainsi de suite ?

Re: Cherche un générateur de chiffres aléatoire paramétrable

09 Fév 2017 à 15:57

Après une lecture un peu rapide, je l'avoue, la demande ou le problème me semble bizarre ou sur-contraint :
Je résume ainsi : je veux que la somme de 10 nombres aléatoires compris entre 0 et 1 me donne le chiffre 8.
Le dernier tirage (voire même avant) n'a plus rien d'aléatoire

On peut faire n tirages aléatoire puis leur somme
On peut aussi des tirages aléatoire pour tendre vers une somme sans savoir combien de tirages seront nécessaires

@marc : pourrais tu préciser un peu plus le contexte de ta demande ?

Re: Cherche un générateur de chiffres aléatoire paramétrable

09 Fév 2017 à 19:44

PP_65 » 08 Fév 2017, 20:10 a écrit:
OK, j'en ai seulement entendu parler, n'en ayant pratiqué aucun, je ne vais pas le déchiffrer ; par contre
si on prends 100 comme somme à atteindre, 5 comme nombres aléatoires dont le total va donner 100 ,  le cinquième qui est donc 100-la somme des quatre autres n'est plus aléatoire . Donc tu demanderais 1 premier nombre compris strictement entre 0 et 100 , puis un second tel que la somme des deux premiers ne dépasse pas 100, et ainsi de suite jusqu'au 4 ème  ; c'est ça ?
Ou alors , si 11 est le premier qui sort , tu demandes un nombre aléatoire entre 0 et 89 , et ainsi de suite ?


Plutôt le premier algo.
Mon algo (naïf, codé en 5minutes):
Je définis les 3 variables : min (minimum de chaque nombre) , nb (nombre de nombre aléatoire) et total (la somme de tous les nombre aléatoire).
J'ai commencé par définir une fonction qui me renvoi un nombre entre min et total (j'y bidouillé un truc pour transformé des entier en nombre a virgule).
Puis je fais nb-1 tirage de ce type.
A chaque fois je vérifie que la somme des nombre tirée reste inférieure à total (j’utilise la variable accumulateur pour cela). Si ce n'est pas le cas, je recommence tout a zéro (autant de fois que nécessaire).
Au bout de nb-1 tirage, 2 cas : total - accumulateur est plus grand que min . Bingo c'est gagné.
Sinon on recommence a zéro.

Je ne suis pas d'accord avec toi : le dernier est bien aléatoire et respecte bien les exigences fournit  :frown:

Mais le diable est dans le détail : il n'est pas préciser que les nombres doivent respecter une distribution équiprobable  :surprised:
Il est possible que le dernier ne suive pas la même loi de probabilité que les autres  :mrgreen:

Re: Cherche un générateur de chiffres aléatoire paramétrable

09 Fév 2017 à 19:49

Saint Kernighan et Saint Ritchie priez pour nous....


...
Dernière édition par AJMARS le 09 Fév 2017 à 19:53, édité 2 fois.

Re: Cherche un générateur de chiffres aléatoire paramétrable

09 Fév 2017 à 19:52

Chuuut  :wink:
je suis bien conscient des problèmes du code (non equiprobabilité, cast de float violent) mais il est codé en 5 minutes et il respecte les exigences.
C''était préciser en excel ou autre  :mrgreen:

Re: Cherche un générateur de chiffres aléatoire paramétrable

09 Fév 2017 à 19:53

#include <stdio.h>

Cette phrase résonne au plus profond de ma mémoire......   :wink:

...

Re: Cherche un générateur de chiffres aléatoire paramétrable

09 Fév 2017 à 20:00

Spécial dédicace pour André :un programme classique et vintage  a la fois :

#include <stdio.h>

int main()
{
printf("Hello World, the green!\n");
}

Re: Cherche un générateur de chiffres aléatoire paramétrable

09 Fév 2017 à 20:02

Une simple boucle qui détermine un nombre aléatoire entre min et total-(total déjà atteint)-(nombre restant)*minium...
Le dernier est calculé et basta.
Exemple 100 10 5, le premier entre 5 et 55, si 7 sort, le second entre 5 et (100-7-40) 53 et ainsi de suite.

a+

Re: Cherche un générateur de chiffres aléatoire paramétrable

09 Fév 2017 à 20:15

shal » 09 Fév 2017, 19:00 a écrit:Spécial dédicace pour André :un programme classique et vintage  a la fois :



Quand je pense que j'ai écrit mon premier FIR sur un DEC en C....
On peut décidément pas être et avoir été..... :cry:

A plus
André

Re: Cherche un générateur de chiffres aléatoire paramétrable

09 Fév 2017 à 20:18

Hollow » 09 Fév 2017, 19:02 a écrit:Une simple boucle qui détermine un nombre aléatoire entre min et total-(total déjà atteint)-(nombre restant)*minium...
Le dernier est calculé et basta.
Exemple 100 10 5, le premier entre 5 et 55, si 7 sort, le second entre 5 et (100-7-40) 53 et ainsi de suite.

a+


En C cela donne :
accumulateur =0;
       for(i=0;i<nb-1;i++)
               {
                       tab[i] = (float)(rand_a_b(min,total-accumulateur-((nb-1-i)*min)));
                       tab[i] =tab[i];
                       accumulateur+=tab[i];
               }
   tab[nb-1] = total-accumulateur;

Re: Cherche un générateur de chiffres aléatoire paramétrable

09 Fév 2017 à 20:42

..........
Dernière édition par zeroundemi le 17 Fév 2017 à 02:23, édité 1 fois.

Re: Cherche un générateur de chiffres aléatoire paramétrable

10 Fév 2017 à 19:03

zeroundemi » 08 Fév 2017, 13:36 a écrit:Voici ce que j'ai compris :

. Tu veux générer N nombres aléatoires
. La somme de ces N nombres doit être égale à T
. Le plus petit de ces N nombres doit être supérieur ou égal à m
. T et m sont paramétrables par pas de 0,1

La solution consiste à générer les nombres aléatoires dans l'intervalle [m,2*T/N-m] par la fonction EXCEL suivante :

+2*(T/N-m)*ALEA()+m

T > 0
m >= 0
T doit être plus grand que m * N

Il n'y aura pas de résultat exact
Faire plusieurs essais successifs jusqu'à obtenir une série de N nombres dont le total approche d'assez près T



Merci

Je souhaite "figer" m à la valeur 7 (mais dans le futur je souhaite pouvoir changer la valeur si besoin).

les variables sont donc bien T et N

Mais je souhaite aussi avoir tout les chiffres en une seule manipulation

Exemple T = 374.60
N= 9

résultat=

101
35
7
12
77.20
26
18.40
84
14

Re: Cherche un générateur de chiffres aléatoire paramétrable

10 Fév 2017 à 19:21

..........
Dernière édition par zeroundemi le 17 Fév 2017 à 02:23, édité 1 fois.
Répondre