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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    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
    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 Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788

  3. #3
    Inactif  


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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    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
    Membre régulier
    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
    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 : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    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
    Membre régulier
    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
    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
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    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 147
    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... )
    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.

  8. #8
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 641
    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
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

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

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