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 :

fonction avec pointeurs


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut fonction avec pointeurs
    Bonsoir à vous chers développeur

    j'essaie de créer une fonction permettant la résolution d'une équation du second degrés de la forme Ax2 + Bx + C en utilisant la méthodologie pointeurs.

    Je sais le faire en C, mais je souhaiterai le faire en C++

    voici le prototype de ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double fonctionSecond (double a , double b, double c )
    ensuite je defini delta = (b*b) - (4*a*c)
    je crée un pointeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    *pdelta=0
    pdelta = &delta
    ensuite je crée les conditions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if *pdelta >0 , if else *pdelta ==0
    x1=( -b-(sqrt (*pdelta)))/(2*a)
    *px1=&x1
    problème
    comment revoyer les valeurs de delta, x1 et x2 ?

    Merci beaucoup de votre aide

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Bonjour et bienvenue sur le forum

    1. les pointeurs ne sont pas une "méthodologie"
    2. les pointeurs s'utilisent de la même façon en C et en C++
    3. les pointeurs s'utilisent pas en C++ (le C++ offre d'autres outils plus sur, comme les références)
    4. le prototype ne t'autorise pas à retourner autre chose qu'un double, donc tu pourras pas retourner tes 3 variables
    5. pour retourner tes 3 variables, utilise une simple structure (ou un std::tuple si tu as un compilateur récent) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // avec tuple
    std::tuple<double, double, double> fonctionSecond (double a , double b, double c ) {
        ... // calculs
        return std::make_tuple(delta, x1, x2);
    }
     
    // sans tuple
    struct result { double delta, x1, x2; };
    result  fonctionSecond (double a , double b, double c ) {
        result r;
        ... // calculs avec r.delta, r.x1 et r.x2
        return r;
    }
    6. mais quelle idée de créer un pointeur pdelta qui pointe vers delta et l'utiliser pour les calculs. Pourquoi pas faire les calculs directement sur delta ???

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour

    j'utilise les pointeurs en C++ tout simplement pour en comprendre le fonctionnement.
    Le but étant par la suite de me familiariser avec la POO.
    Cependant je vais tester votre solution.

    merci pour le tuyau.

    au fait j'oublié

    pourquoi alors avoir inventé les pointeurs, d'après ce que j'en sais c'est pour éviter d'une de répéter plusieurs fois le meme code
    pour repondre à votre question pourquoi ne pas utiliser delta, tout à fait daccord avec vous, dailleurs je l'ai fait une premiere fois, l'utilisation du pointeur si je ne m'abuse permet de controler la mémoire de l'ordinateur (mémoire allouée bien sur)

    cordialement

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Ok, si c'est une forme d'exercice pour apprendre les pointeurs. Pour contre, il faut bien comprendre que l'apprentissage des pointeurs n'est pas recommandé au début de l'apprentissage du C++ (dans la pédagogie moderne du C++). Et si tu souhaites quand même apprendre les pointeurs, il faut surtout apprendre leurs limites : pourquoi il est plus complexe d'écrire du code sûr avec les pointeurs (particulière pour avoir du code exception-safe et sans fuite mémoire), pourquoi il est plus sur d'utiliser des références ou des capsules RAII (pointeurs intelligents, conteneurs de la STL, string), etc. Tu trouveras pleins d'informations, par exemple dans la FAQ ou les guru of the week.

    Ensuite, l'apprentissage des pointeurs n'est pas nécessaire pour apprendre la POO. Leurs seules utilités à la rigueur en POO est pour le polymorphisme d'héritage, mais il sera alors plus sûr d'utiliser des pointeurs intelligents.

    Sinon, le C++ n'a pas inventé les pointeurs. C'est un héritage du C, qui l'a emprunté (je crois) aux mode d'adressage indirect des processeurs. C'est une fonctionnalité importante pour les processeurs, qui peut avoir son utilité en C++. De plus, le C++ est un langage permissif et qui conserve en partie une rétro-compatibilité avec le C et les anciennes normes du C++, ce qui explique que le C++ conserve (et conservera) les pointeurs.
    Par contre, c'est pas parce qu'une fonctionnalité est disponible qu'il faut l'utiliser. Le C++ propose des fonctionnalités plus haut niveau, plus sûr et plus facile d'utilisation. Ce sont celles-là qu'il faut utiliser et apprendre en premier.

    Les pointeurs n'ont rien à voir avec la répétition du code. D'ailleurs, ton code est plus long que la version sans pointeurs.
    Si tu veux éviter la répétition du code (ce qui est très bien), faut utiliser des abstractions : des fonctions, des classes, des templates. Mais aucune utilité des pointeurs dans ce cas.

    Qu'appelles tu "contrôler la mémoire" ? Quel genre de contrôle veut tu exercer sur la mémoire ? Tu veux gérer la durée de vie de tes variables ? Tu n'as pas besoin des pointeurs pour cela.

    Bref, si tu débutes, je te conseille de vite oublier les fausses idées que tu as sur le C++. Ça va compliquer et ralentir inutilement ton apprentissage et tu n'apprendras pas à produire du code de qualité (comprendre sur, maintenable, évolutif, etc)

    Bon courage

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Points : 1
    Points
    1
    Par défaut fonction seconde avec pointeurs
    Merci beaucoup pour vos conseils

    je suis débutant en programmation, dans le cadre de mon Master j'ai un module d'initiation à la POO, avant cela j'ai suivi 28h d'adaptation en C, c'est un univers nouveau pour moi.
    on a beaucoup insiosté sur les pointeurs, certains diront qu'ils sont omniprésent dans les programmes.

    J'essaie tant bien que mal deme perfectionner avec les bases que j'ai recu, malheureusement il existe un florilège de livres traitant du C++ et de la POO et il est difficile de s'y retrouver.

    D'autres part je n'est pas réussi à compiler mon programme fonctionSecond sans tuple ( je dispose de code::Blocks comme IDE)
    auriez vous une solution type?
    merci beaucoup

  7. #7
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Oui, ils sont très utilisé dans les programmes. Moins dans les langages de programmation. Et pas du tout dans les langages haut niveau.
    Les pointeurs sont un outil. Ils sont adaptés dans certains cas. En C, il n'y a pas de références et de RAII. Donc les pointeurs sont le seul outil disponible, on n'a pas trop le choix. En C++, on a le choix, donc on utilise les outils en fonction des besoins. Dans 99 % des cas, le besoin n'est pas "utiliser les pointeurs".

    Pour les livres, j'ai donné une liste récente de livre que je (et d'autres personnes) conseille : http://www.developpez.net/forums/d13...d/#post7175559

    Sinon, pour ton problème, tu as essayé le code avec struct ?

  8. #8
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    On va pas être copain si tu vas demander sur d'autres forums parce que je te donne pas le code tout fait...

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    On va pas être copain si tu vas demander sur d'autres forums parce que je te donne pas le code tout fait...
    tu sévis aussi là bas ? ou c'était juste une intuition ?

  10. #10
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Je regarde ce qu'il s'y passe aussi. Et j'aime pas avoir l'impression que quelqu'un passe son problème entre les forums pour qu'on lui écrive progressivement son code

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    je comprends ton point de vue... cela dit, il me semble qu'ils ont un peu la même philosophie pour ce qui est du recopiage de code.

  12. #12
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 196
    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 196
    Points : 17 165
    Points
    17 165
    Par défaut
    La même que la mienne? (cf ma signature)

  13. #13
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 130
    Points : 33 063
    Points
    33 063
    Billets dans le blog
    4
    Par défaut
    Sans même parler de pointeur, y'a 2 choses qui me choquent:
    Citation Envoyé par odysseeh Voir le message
    Je sais le faire en C, mais je souhaiterai le faire en C++
    Etant donné que le code ne fait appel à aucun "artefact" C++, n'en a aucune utilité, pas plus que de spécificités C : il s'agit d'un copier/coller à faire, le code est strictement identique.
    Citation Envoyé par odysseeh Voir le message
    problème
    comment revoyer les valeurs de delta, x1 et x2 ?
    "Problème" très souvent rencontrés par les débutants qui indique juste une grosse non-lecture d'une quelconque introduction au langage où l'on apprend directement : 1 méthode ne peut retourner que 1 valeur. (éventuellement contournable en retournant un type complexe - ce n'est pas la question)
    Et pour lequel tout googlage de C++ retourner plusieurs valeurs donne une quantité phénoménale de résultats dont... rien que cette liste extraordinaire sur ce même forum qui est le premier résultat - et donc l'outil recherche du forum, il serait bien de l'utiliser aussi... )

  14. #14
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 630
    Points : 30 694
    Points
    30 694
    Par défaut
    Salut,
    Citation Envoyé par odysseeh Voir le message
    Bonjour

    j'utilise les pointeurs en C++ tout simplement pour en comprendre le fonctionnement.
    Le but étant par la suite de me familiariser avec la POO.
    Cependant je vais tester votre solution.
    De manière générale, un pointeur n'est qu'une simple variable numérique entière (non signée) qui permet de représenter l'adresse à laquelle on trouvera effectivement une variable d'un type donné.

    En dehors des cas où tu as besoin de l'allocation dynamque de la mémoire, c'est tout ce qu'il te faut savoir sur les pointeurs (du moins, en C++) dans un premier temps
    pourquoi alors avoir inventé les pointeurs, d'après ce que j'en sais c'est pour éviter d'une de répéter plusieurs fois le meme code
    pour repondre à votre question pourquoi ne pas utiliser delta, tout à fait daccord avec vous, dailleurs je l'ai fait une premiere fois, l'utilisation du pointeur si je ne m'abuse permet de controler la mémoire de l'ordinateur (mémoire allouée bien sur)
    cordialement
    Les pointeurs ne sont que des adresses mémoire!!!

    S'il ont été "inventés", c'est parce qu'il correspondent à la manière de travailler des processeurs, qui peuvent aller récupérer des informations à une adresse donnée

    Citation Envoyé par odysseeh Voir le message
    je suis débutant en programmation, dans le cadre de mon Master j'ai un module d'initiation à la POO, avant cela j'ai suivi 28h d'adaptation en C, c'est un univers nouveau pour moi.
    on a beaucoup insiosté sur les pointeurs, certains diront qu'ils sont omniprésent dans les programmes.
    C'est le cas en C...

    Mais il faut savoir que C est un langage qui est loin d'être récent (il date de la fin des années 70 du millénaire précédant ), qui permet "un certain niveau d'abstraction" mais qui n'est pas du tout "orienté objets".

    Le recours à l'allocation dynamique de la mémoire est un passage obligé du C, simplement parce que c'est la seule manière possible d'obtenir quelque chose qui puisse s'adapter aux circonstances et au volume de données à manipuler.

    Par contre, C++ fournit énormément de fonctionnalités qui rendent le recours à l'allocation dynamique de la mémoire totalement transparent pour son utilisateur. (comprends : il y a effectivement une gestion dynamique de la mémoire en interne, mais le codeur C++ n'a le plus souvent simplement pas à s'en occuper )

    Du coup, les cas dans lesquels on a besoin de recourir à la gestion dynamique de la mémoire sont extrêmement limités, et il sera toujours bien temps pour toi de t'y attaquer "quand ce sera nécessaire" (une fois que tu te sera familiarisé avec le reste ), mais, surtout, il sera plus qu'intéressant d'envisager le recours à des classes RAIIsantes, comme les pointeurs intelligents, qui te permettront d'éviter un grand nombre d'écueils dus à la gestion dynamique de la mémoire

Discussions similaires

  1. fonctions avec pointeurs
    Par Invité dans le forum C
    Réponses: 13
    Dernier message: 14/03/2015, 11h12
  2. appel d'une fonction avec pointeur comme argument
    Par airness86180 dans le forum Débuter
    Réponses: 1
    Dernier message: 06/03/2009, 14h34
  3. Réponses: 11
    Dernier message: 26/03/2008, 00h12
  4. [WinCE5.0] Dll-Appel de fonction avec pointeur
    Par Bart_lx dans le forum Windows
    Réponses: 11
    Dernier message: 11/12/2007, 12h43
  5. Réponses: 8
    Dernier message: 10/03/2006, 18h28

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