Fonstion random

Signaler
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Voilà j'aimerais faire une fonction random qui renvoies 3 variables:
1 long
2 short

Ces 3 variables de types different seront calculé de facon aléatoire dans cette fonction.
Le probleme c'est que je ne su pas sur que la valeur le la fonction rand() prenne une valeure de 16 ou 32 bits suivant le type.
De plus pour retourner plusieurs valeurs comment fait on? faut il passer par plusieurs fonctions en retournant une ?
Qqun pourrait m'eclairer ?
Voici mon code:(je sais il n'y a aucun return et rien n'est tres droit mais bon c'est un premier jet et je veux pas perseverer dans la betise)
#include <stdlib.h>
#include <stdio.h>
#include <time.h>


void main(void)


{


long llong =0;
short skey1,skey2 =0;
/*Pour que la clef soit dynamique avec le temps*/
srand( (unsigned)time( NULL ) );
llong= rand();
skey1= rand();
skey2= rand();
return llong,skey1,skey2;
}


-------------------------------------------------------------------------------------------------------
Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

4 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
J'ai rien compris à ton problème. Juste, pour renvoyer 'plusieurs' valeurs, tu renvoies une structure.
Si tu peux expliquer un peu plus ce que tu veux faire...
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Renvoyé une structure ou passé comme paramètres 3 adresses

Ce qu'il veut en gros c'est faire un random sur 3 variables

avec des types différents...

void Aurevoir( void ); //Bonne journée
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
En fait je cherches a faire un fonction qui renvois 3 variables calculées aléatoirements.
Ces 3 variables sont de 2 types:
2 variables de type short
1 variable de type long
Ces variables ettant de type different, suffit il d'ecrire par exemple

long lvar;
short svar1,svar2;

lvar = rand();
svar1= rand();
svar2= rand();

Pour que chaque fonction random "mette" dans la variable associé une valeur qui tient dans son type
a savoir:
16 b pour un short
32 b pour un long

J'ai aussi une nouvelle qst ... Quand vous dites une structure en fait il faut faire un typedef struct ? ou est ce autre chose ?
Merci de votre patience avec un noobie :O)
Teclis


-------------------------------------------------------------------------------------------------------
Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Oui:
typedef struct _rand_struct
{
long lvar;
short svar1,svar2;
} rand_struct;

void fillStruct(rand_struct* prs)
{
prs->lvar = rand();
prs->svar1 = (short)rand();
prs->svar2 = (short)rand();
}

Le problème c'est que rand donne des nombre entre 0 et 0x7fff. Le bit de poids fort de svar1 et svar2 sera donc toujours à 0. Et lvar sera toujours inférieur à cette valeur. Si tu veux que tes variables puissent prendre toutes les valeurs possibles

void fillStruct(rand_struct* prs)
{
prs->lvar = (rand() << 17) | (rand() << 2) | (rand & 0xFF);
prs->svar1 = (short)rand() << 1 | (rand() & 1);
prs->svar2 = (short)rand() << 1 | (rand() & 1);
}

Les masques 0xFF et 1 ne sont pas nécessaires
Ce code suppose que RAND_MAX vaut 0x7fff, regarde si c'est aussi cette valeur chez toi, je sais pas si ca peut varier

Pour utiliser la fonction:

int main()
{
srand(time(0));
rand_struct rs;
fillStruct(&rs);
}