Fonstion random

Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 - 13 juil. 2005 à 22:27
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 14 juil. 2005 à 10:20
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

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 juil. 2005 à 22:52
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...
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
14 juil. 2005 à 00:30
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
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
14 juil. 2005 à 08:09
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
14 juil. 2005 à 10:20
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);
}
0
Rejoignez-nous