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 :

Comment créer une fonction renvoyant la factorielle d'un nombre par passage par référence ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 156
    Par défaut Comment créer une fonction renvoyant la factorielle d'un nombre par passage par référence ?
    Bonsoir !

    J'essaye de coder la fonction factorielle en C++ en envoyant le nombre ou le tableau représentant les chiffres composant les multiplicateurs de la factorielle.
    Cependant dès que je passe par la fonction référencant, je n'arrive pas à faire compiler lorsque je passe le tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error: cannot convert ‘int (*)[nombre]’ to ‘int*’ for argument ‘1’ to ‘int facto_reference(int*, size_t)’
      resultat_facto = facto_reference(&tableauNombre,nombre);
    Je pense que l'erreur vient de la taille du tableau que j'envoie...


    Pouvez-vous m'aider ?


    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 <iostream>
    #include <cstdlib>
    #include <stdio.h>
     
    using namespace std;
     
    int facto(int x){
     
    	int y=1;
     
    	for (int i = 1; i< x+1; i++){
     
    		y = y*i;
    	}
     
    	return y;
     
    }
     
    int facto_reference(int *tableauEntiers, size_t taille){
     
    	int factorielle = 0;
     
    	for(int i = 0; i < taille+1; ++i )
    	factorielle *= *( tableauEntiers + i );
     
    	cout << "la moyenne du tableau avec le formalisme pointeur est " << factorielle <<endl;
     
    }
     
     
    int main(){
    	int nombre;
    	int resultat, resultat_facto;
     
    	cout << " entrez le nombre à factorialiser : " << endl;
    	cin >> nombre;
    	int tableauNombre[nombre];
    	resultat = facto(nombre);
    	cout << "le nombre factorialisé est : " << resultat << endl;
    	for(int i = 0; i<nombre+1;i++){
    		tableauNombre[i];
    	}
    	resultat_facto = facto_reference(&tableauNombre,nombre);
    	cout << "le nombre factorialisé référencé est : " << resultat << endl;
     
    }

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    il te dit qu'il ne sais pas convertir un int (*)[] en int *.
    C'est à dire un pointeur de tableau d'entier en pointeur d'entier.

    L'erreur? avoir donné &tableau comme valeur à ton int* tableaureference.
    Il faut donner le pointeur sur le premier élément du tableau, ce qui est &tableau[0] ou, par raccourci de syntaxe: tableau

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Et je m'étonne que le compilateur n'ait pas indiqué un beau warning ligne 43!
    Je devine le résultat de facto_reference() qui consiste à multiplier 0 par plein d'autre nombres.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    De toutes façons ce code est faux.
    int tableauNombre[nombre];nombre est une variable dont la valeur n'est connue qu'à l'exécution n'a jamais été une syntaxe valide en C++. C'est un VLA, qui existe uniquement dans une certaine version du C.
    Faire du C++ c'est pas remplacer prinf par cout. Utiliser un std::vector c'est le B.A.BA.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 156
    Par défaut
    D'acc, j'ai pris en compte vos conseil pour le passage par référence, il fallait simplement envoyer le tableau comme argument.
    Comment faire désormais pour calculer la factorielle une fois qu'on a les chiffres qui compose le calcul dans ce tableau ?

    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
    int facto_reference(int *tableauEntiers, size_t taille){
     
    	int factorielle = 1;
     
    	for(int i = 1; i < taille+1; ++i )
    	factorielle *= *( tableauEntiers + i );
     
    	return factorielle;
     
    }
     
     
    int main(){
    	int nombre;
    	int resultat, resultat_facto;
     
    	cout << " entrez le nombre à factorialiser : " << endl;
    	cin >> nombre;
    	int tableauNombre[nombre];
     
    	cout << "le nombre factorialisé est : " << resultat << endl;
    	for(int i = 0; i<nombre+1;i++){
    		tableauNombre[i];
    	}
    	resultat_facto = facto_reference(tableauNombre,nombre);
    	cout << "le nombre factorialisé est : " << resultat_facto << endl;
     
    }

  6. #6
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Ça c'est un problème d'algorithmique, plus de langage. Comment ferais-tu avec un crayon et une feuille de papier ?

    À titre d'indice tu utilises ici ton tableau comme un paramètre d'entrée, alors que c'est un paramètre de sortie si j'en crois ton objectif : y stocker le résultat.

Discussions similaires

  1. Réponses: 9
    Dernier message: 22/02/2007, 14h51
  2. comment créer une fonction et la déclancher a chaque jour
    Par G_Kill dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 19/12/2006, 18h02
  3. Réponses: 6
    Dernier message: 17/10/2006, 07h25

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