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++

  1. #1
    En attente de confirmation mail
    Inscrit en
    Mars 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 35
    Points : 33
    Points
    33
    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
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    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 chevronné
    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 : 43
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    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 éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    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...
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    Membre chevronné
    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 : 43
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    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 éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    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.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  7. #7
    En attente de confirmation mail
    Inscrit en
    Mars 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 35
    Points : 33
    Points
    33
    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()

  8. #8
    Membre chevronné
    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 : 43
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    tu compiles avec quel compilo là o_O

  9. #9
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Bonjour,

    Tu as déclaré les variables « i » et « n » comme des float, mais tu les utilises comme des int.
    C'est normal que ça ne marche pas à un moment où à un autre…
    En fait, ce n'est pas vraiment que tu les utilises comme des int que le compilateur n'aime pas, c'est plutôt que tu les utilises là où il attend des int.

    Ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    float (*r[4])(float *,int)={Max,Somme,Produit,Moyenne};
    (...)
    R=(*r[i-1])(i);
    Tu déclares ton tableau de pointeurs sur des fonctions, ok.
    Ensuite tu appelles l'une de ces fonctions, à l'aide de son index, ok.
    Par contre, elle prennent combien de paramètres, ces fonctions ?
    Et lesquels ?

    Sinon, la fonction « randomize() » n'existe pas chez moi en C/C++.
    La seule fonction que je connais pour initialiser le générateur de nombres pseudo-aléatoires, c'est « srand() » (et « srandom() », mais bon…), définie dans « stdlib.h ».

  10. #10
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Sinon, il y a quelque chose qui me chiffonne depuis un moment…
    Tu fais du C ou du C++ ?
    Ce code n'est pas trop mal écrit, mais n'utilise aucun des outils mis à disposition par le C++.

    En C++, on a des conteneurs, qui sont à privilégier aux tableaux.
    Il y a aussi des algorithmes qui peuvent te calculer simplement les quatre valeurs qui t'intéressent.
    En avec le support du C++0x, il y a même un générateur de nombres pseudo-aléatoires évolué.

    Au fait, ça me fait penser…
    C'est possible de faire un pointeur sur une fonction templatée ?

  11. #11
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    C'est possible de faire un pointeur sur une fonction templatée ?

    Non car une fonction template n'est pas une fonction mais un ensemble de fonction.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  12. #12
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Euh, en fait je pensais à une spécialisation particulière d'une fonction templatée…
    Je n'ai pas précisé, désolé…

  13. #13
    En attente de confirmation mail
    Inscrit en
    Mars 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 35
    Points : 33
    Points
    33
    Par défaut
    Tous d'abord je tiens a vous remercier ,j'utilise le borland C++ pour moi sa a un aspects simple,c'est vrais j'ai utiliser i et n comme float erreur d'inattention tout comme les paramètres de la fonction r ,ses paramètres son de même pour les autre fonction Max,Moyenne,Somme et Prouduit ,maintenant le programme marche encore une fois merci

+ 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