IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Convertir random en float


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    35
    D�tails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 35
    Par d�faut Convertir random en float
    bonsoir � tout le monde ,
    je cherche � appeler des fonctions par pointeur seulement j'ai eu quelques complications. Apparemment �a vient du g�n�rateur de valeur . J'ai bricol� pour avoir des valeurs Float en faisant int/int. Voil� le programme.
    Merci d'avance pour votre aide
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <stdlib.h>            /* les bibliotheques stdlib.h et time.h sert � utiliser la fonction "randomize"*/
    #include <stdio.h>
    #include <time.h>
    float Max(float *t,int n)             /* la fonction Max qui recherche le maximum dun tableau */
    {
    	float m=t[0];
    	for (int i=0;i<n;i++)
    		if (t[i]<m)
    			m=t[i];
    	return m;
    }
    float Somme(float *t,int n)
    {  float s=t[0];
    	for (int i=0;i<n;i++)
    		s=s+t[i];
    	return s;
    }
    float Produit(float *t,int n)
    {  float p=1;
    	for (int i=0;i<n;i++)
    		p=p*t[i];
    	return p;
    }
    float Moyenne(float *t,int n)
    {  float m=t[0];
    	for (int i=0;i<n;i++)
    		m=m+t[i];
    	return (m/n);
    }
    int main()
    {  randomize();
    	float t[100],i,n;
    	printf("donner la taille du vecteur \n");
    	scanf("%d",&n);
    	for (i=0;i<n;i++)
    		t[i]=1.5+(rand()%10/(rand()%5+1.0));
    	printf("le tableau est \n");
    	for (i=0;i<n;i++)
    		printf("%.2f\t",t[i]);
    	printf("la somme est %.2f le max %.2f le produit %.2f la moyenne %.2f\n",Somme(t,n),Max(t,n),Produit(t,n),Moyenne(t,n));
    	float (*r[4])(float *,int)={Max,Somme,Produit,Moyenne};
    	puts("Donner loperation que vous voulez faire\n");
    	scanf("%d",&i);
    	float R=(*r[i-1])(i);
    	printf("Le resultat est R=%.2f\n",R);
    	return 0;
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 136
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 136
    Billets dans le blog
    150
    Par d�faut
    Bonjour,

    La r�ponse a �t� donn�e sur le chat, je prends le courage de la remettre ici.

    Pour g�n�r� un nombre entre 0 et 1 (en float):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    float var = rand()/(RAND_MAX+1.0f)
    Pour g�n�r� un nombre entre 0 et 10 (en float toujours):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    float var = (rand()/(RAND_MAX+1.0f))*10;
    Voil�
    Vous souhaitez participer � la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui conna�t l'erreur, conna�t la solution.

  3. #3
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par d�faut
    Le modulo n'est pas la bonne fa�on de g�n�rer une distribution de nombres float sur l'interval [a,b[.

    Une formule correcte:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    float r = (static_cast<float>(rand())/RAND_MAX)*(b-a) + a;

  4. #4
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par Joel F Voir le message
    Le modulo n'est pas la bonne fa�on de g�n�rer une distribution de nombres float sur l'interval [a,b[.

    Une formule correcte:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    float r = (static_cast<float>(rand())/RAND_MAX)*(b-a) + a;
    Au minimum:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    float r = (rand()/(static_cast<float>(RAND_MAX)+1))*(b-a) + a;
    (sinon b est possible)

    Et je me demande pourquoi float plut�t que double...

  5. #5
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par d�faut
    Citation Envoy� par Jean-Marc.Bourguet Voir le message
    Et je me demande pourquoi float plut�t que double...
    j'ai copi� d'un code qui trainait ou la formule �tait en float c'est tout

  6. #6
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par Joel F Voir le message
    j'ai copi� d'un code qui trainait ou la formule �tait en float c'est tout
    Je sais, c'�tait plus une remarque adress�e � l'OP qu'� toi.
    En passant, si on ne veut pas g�n�rer b, utiliser des float risque de poser probl�me d�s que RAND_MAX est sup�rieur � 2^23.

  7. #7
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    35
    D�tails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 35
    Par d�faut
    Merci pour votre int�r�t envers moi ,mais aucune de ses solutions m'a aid� ,toujours les meme erreurs peut etre que je me suis tromp� dans l'origine des erreurs
    Compiling test2.CPP:
    Error test2.CPP 48: Illegal use of floating point in function main()
    Error test2.CPP 52: Illegal use of floating point in function main()
    Error test2.CPP 57: Illegal use of floating point in function main()
    Error test2.CPP 57: Incompatible type conversion in function main()
    Error test2.CPP 57: Too few parameters in call in function main()

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Convertir string en float
    Par asma86 dans le forum C#
    R�ponses: 7
    Dernier message: 12/09/2008, 15h08
  2. convertir String en float
    Par ulysse031 dans le forum Langage
    R�ponses: 27
    Dernier message: 02/05/2007, 22h23
  3. Convertir AnsiString en Float
    Par El-Diablo- dans le forum C++Builder
    R�ponses: 4
    Dernier message: 14/02/2007, 08h43
  4. [C#] Convertir decimal en float avec SQLDataReader
    Par lancer83 dans le forum Windows Forms
    R�ponses: 3
    Dernier message: 26/07/2006, 09h29
  5. Convertir chaines en float
    Par Nasky dans le forum C
    R�ponses: 17
    Dernier message: 30/04/2006, 21h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo