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 :

Mutiplication et Calculs "Moyennements Complexes"


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Mutiplication et Calculs "Moyennements Complexes"
    Bonjour,

    Je cherche à faire des multiplications en C++ avec par exemple 3 Variables.

    Ma fonction est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Intérêts Simples
    void ISimples(int C, int i, int N)
    {
    	return C*i*N;
     
    }
    L'erreur est la suivante (Je suis sou Xcode) : error: return-statement with a value, in function returning 'void'

    Je pense avoir compris que la fonction void ne peut retourner un résultat de ce type de multiplication ?


    De plus j'aimerais par la suite faire des calculs avec des formules du type :

    (ax+b)/(cx+d)

    Je penses que j'aurais le même type de problèmes ?

    Merci d'avance !

  2. #2
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2007
    Messages : 267
    Points : 119
    Points
    119
    Par défaut
    salut,
    le premier terme lors de la définition d'une fonction est le type de l'entité à retourner,
    void si tu ne retourne rien (donc pas de return dans la définition de la fonction)
    int si tu retourne un naturel ect...
    donc dans ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int ISimples(int C, int i, int N)
    {
    	return C*i*N;
     
    }
    pour ta division, il faudra retourner un float ou un double

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par FoX_*D i E* Voir le message
    salut,
    le premier terme lors de la définition d'une fonction est le type de l'entité à retourner,
    void si tu ne retourne rien (donc pas de return dans la définition de la fonction)
    int si tu retourne un naturel ect...
    donc dans ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int ISimples(int C, int i, int N)
    {
    	return C*i*N;
     
    }
    pour ta division, il faudra retourner un float ou un double
    Ok j'ai compris Merci beaucoup !

    Le type de déclaration de fonction dépend de ce que l'on veut retourné !

    Donc pour une somme ce sera "long" ou "int" par exemple ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ah deuxième soucis ...

    Dans ma fonction de saisie i est un % donc je demande de saisir 0,10 pour 10% par exemple.

    Mais là ça boucle sans fin (=> donc erreur)

    Ma fonction de saisie est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void SaisieI(int C, int i, int N)
    {
    	cout<<"Entrez le Capital de départ";
    	cin>>C;
    	cout<<"Entrez le % d'intérêts (exemple : Pour 12% entrez 0,12)";
    	cin>>i;
    	cout<<"Entrez maintenant le nombre d'année";
    	cin>>N;
    }
    Je pense que c'est au niveau de l'intégration de i ? Vu qu'il n'est pas vraiment un entier ?

  5. #5
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Il manque du code, où appelle tu ta fonction SaisieI() ? De plus tes variables ne conserveront pas la valeur saisie par l'utilisateur : utilise des références.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void SaisieI(int& C, int& i, int& N)
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Tooxx Voir le message
    Il manque du code, où appelle tu ta fonction SaisieI() ? De plus tes variables ne conserveront pas la valeur saisie par l'utilisateur : utilise des références.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void SaisieI(int& C, int& i, int& N)
    Oui il y a une autre partie de mon code. Mais je suis presque sure qu'elle est bonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    case 3: 
    				SaisieI(C, i, N);
    				//cout<<"Les intérêts pour un Capital de "<<C<<"€ sur une période de "<<N<<"ans avec un taux d'intérêt de "<<i<<"% sont de : "<<ISimples(C, i, N)<<"\n";
    				cout<<ISimples(C, i, N);
    				break;
    Ah oui tu as raison j'ai oublié les paramètres d'entrée/sortie !! Merci !
    Mais cela ne change pas le problème de la virgule ...

  7. #7
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Avec le code que tu nous montres, personnellement je ne peux pas savoir d'où vient ton erreur.

    edit : Et sinon si tu veux mettre dans ta variable i la valeur 0.12 par exemple, cette variable doit être de type float.

    Peux tu nous montrer où tu crées cette variable ?
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  8. #8
    Invité
    Invité(e)
    Par défaut
    Oui pardon,

    Voilà le code entier

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    #include <cstdlib>
    #include <iostream>
    #include <stdio.h>
    #include <time.h>
     
    using namespace std;
     
    void Menu(int &LeChoix)
    {
    	cout<<"\n"<<"\n";
    	cout<<"Additioner :-----> 1 \n";
    	cout<<"Multiplier :-----> 2 \n";
    	cout<<"Intérêts Simples (Annees) :-----> 3 \n";
    	cout<<"Quitter :-----> 4 \n";
    	cout<<"\n"<<"Entrez votre choix : \n";
    	cin>>LeChoix;
    	cout<<"\n";
    }
     
    // Additionner
     
    long Somme (int Nb, int Nb2)
    {
    	return Nb+Nb2;
    }
     
    //Multiplier
     
    int Multiplication(int Nb, int Nb2)
    {
    	return Nb*Nb2;
    }
     
    //Comparer
     
    void SaisieI(int& C, int& i, int& N)
    {
    	cout<<"Entrez le Capital de départ";
    	cin>>C;
    	cout<<"Entrez le % d'intérêts (exemple : Pour 12% entrez 0,12)";
    	cin>>i;
    	cout<<"Entrez maintenant le nombre d'année";
    	cin>>N;
    }
     
    //Intérêts Simples
    int ISimples(int C, int i, int N)
    {
    	return C*i*N;
     
    }
     
    //Fonction Saisie
     
    void Saisir(int &Nb, int &Nb2)
    {
    	cout<<"Entrez le nombre 1 : ";
    	cin>>Nb;
    	cout<<"Entrez le nombre 2 : ";
    	cin>>Nb2;
    }
     
     
    int main(int argc,char *argv[])
    {
        int Choix=0;
        int Nombre1, Nombre2;
    	int C, i, N;
     
        do {
            Menu(Choix);
            switch(Choix)
            {
    			case 1: 
    				Saisir(Nombre1, Nombre2);
    				cout<<"La Somme des deux nombres vaut : "<<Somme(Nombre1,Nombre2)<<"\n";
    				break;
     
    			case 2: 
    				Saisir(Nombre1, Nombre2);
    				cout<<Nombre1<<"*"<<Nombre2<<" = "<<Multiplication(Nombre1,Nombre2)<<"\n";
    				break;
     
    			case 3: 
    				SaisieI(C, i, N);
    				//cout<<"Les intérêts pour un Capital de "<<C<<"€ sur une période de "<<N<<"ans avec un taux d'intérêt de "<<i<<"% sont de : "<<ISimples(C, i, N)<<"\n";
    				cout<<ISimples(C, i, N);
    				break;                   
     
    			case 4: 
    				cout<<" Au revoir ! "<<"\n";
    				break;
     
    		}
    	}while(Choix!=4);
     
        system("PAUSE");
        return 0;
    }

  9. #9
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Je te conseille fortement de modifier ta variable i

    remplace la par un float...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int C, N;
    float i;
     
    void SaisieI(int& C, float& i, int& N);
     
    float ISimples(int C, float i, int N)
    {
    	return C*i*N; //Si tu laisse i en int tu retourneras toujours 0 dans ce contexte de ratio !
     
    }
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Tooxx Voir le message
    Je te conseille fortement de modifier ta variable i

    remplace la par un float...
    En remplaçant par le float j'obtiens :

    error: invalid initialization of reference of type 'float&' from expression of type 'int'

    et :

    error: in passing argument 2 of 'void SaisieI(int&, float&, int&)'




    $***EDIT : En fait j'ai tout passé en float (c'est vrai que ça peut servir pour les autres aussi ...)et j'ai maintenant plus qu'une erreur :

    error: in passing argument 1 of 'void SaisieI(float&, float&, float&)'
    Dernière modification par Invité ; 15/04/2011 à 17h38.

  11. #11
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Oui tu as tout a fait raison ca peux aussi servir pour les autres

    Pour ce qui est de ton erreur, as tu bien creer TOUTES tes variables en tant que float ?


    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  12. #12
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    En aparté : float est une optimisation d'espace par rapport à double qui est bien plus sûr à utiliser. Le type flottant par défaut devrait être double, et float utilisé uniquement dans les cas où on a prouvé :
    - Qu'il n'introduisait pas d'erreurs de calcul
    - Qu'il gagnait vraiment des perfs
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Programmation Shell avec Red Hat Calcul de moyenne
    Par jcpoulard dans le forum Linux
    Réponses: 3
    Dernier message: 22/02/2006, 22h08
  2. methode qui calcul une moyenne du traffic
    Par siry dans le forum Développement
    Réponses: 7
    Dernier message: 05/05/2005, 17h16
  3. calculer une moyenne avec une requete externe
    Par allowen dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2005, 16h02

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