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 :

Probleme de pointeur


Sujet :

C++

  1. #1
    Membre confirmé Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Points : 496
    Points
    496
    Par défaut Probleme de pointeur
    Salut, je cherche un moyen d'afficher l'heure , les minutes et les secondes a l'aide de pointeur et de fonction mais ca ne marchent pas:

    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
    #include <iostream>
     
    using namespace std;
     
    void timer(int* heures, int* minutes, int* secondes)
    {
    *heures = *minutes/60;
    *minutes = *minutes%60;
    *minutes = *secondes/60;
    *secondes = *secondes%60;
     
    }
    int main()
    {
        int heure  , minute  , seconde = 32234;
        int er = 34, re = 25, resultat;
        timer(&heure, &minute, &seconde);
        cout << heure <<":" << minute << ":" << seconde <<endl;
     
     
        return 0;
    }
    Quand je compile le tout sa m'affiche 70780:537:14

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    ce qui serait inquiétantc'est que cela affiche la bonne heure

    • int er = 34, re = 25, resultat; ne sert à rien
    • utilisez des références plutôt que des pointeurs, le code en sera allégé
    • dans votre main seule seconde est initialisé => minutes n'est pas initialisée et à une valeur indéterminée=> la valeur d'heures sera tout autant indéterminée
    • *minutes = *minutes%60; ne sert à rien puisqu'il est immédiatement suivit de *minutes = *secondes/60; ?


    pour corriger votre algo demandez-vous comment vous feriez à la main sur une feuille de papier puis recodez
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre confirmé Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Points : 496
    Points
    496
    Par défaut
    j'ai essayé de modifier le code mais sa marche tjrs pas :
    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
    #include <iostream>
     
    using namespace std;
     
    void timer(int* heures, int* minutes, int* secondes)
    {
     
    *heures = *minutes/60;
    *minutes = *secondes/60;
    *secondes = *secondes%60;
     
    }
    int main()
    {
    int heure = 20, minute = 25, seconde = 32234;
     
    timer(&heure, &minute, &seconde);
    cout << heure <<":" << minute << ":" << seconde <<endl;
     
    return 0;
    }
    sinon je préfère apprendre l'utilisation des pointeurs et après j'apprendrai les référence

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    désolé mais il n'y a pas grand chose de neuf dans la nouvelle proposition, par exemple pourquoi initialiser heure alors que sa valeur n'est pas utilisée et est écrasée dans timer ?

    avant de savoir comment il faudrait d'abord savoir quoi, donc : que voulez-vous faire ? calculer heures minutes et secondes à partir d'un nombre de secondes allant de 0 à 60*60*24 ?
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  5. #5
    Membre confirmé Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Points : 496
    Points
    496
    Par défaut
    Je voudrai afficher l'heure normalement a partir de nombre c'est a dire :
    si par exemple j'ecris 3600 dans la variable seconde sa va m'ecrire
    1:00:00 lors de la compilation ou encor
    seconde = 2500;
    00:41:40

  6. #6
    Membre confirmé Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Points : 496
    Points
    496
    Par défaut
    a je crois que avoir trouvé la solution enfin pas complétement :
    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
    #include <iostream>
     
    using namespace std;
     
    void timer(int* heures, int* minutes, int* secondes)
    {
     
     
    *minutes = *secondes/60;
    *secondes = *secondes%60;
    *heures = *minutes/60;
     
    }
    int main()
    {
    int heure = 0, minute = 0, seconde = 2500;
     
    timer(&heure, &minute, &seconde);
    cout << heure <<":" << minute << ":" << seconde <<endl;
     
    return 0;
    }

    les secondes et les Heure s'affiche bien mais les Minutes dépasse le chiffre 60

  7. #7
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    [edit]on progresse

    maintenant, comment calculez vous à la min le fait que 3600s = 1h0m0s, ou que 2500s=0h41m40s ?

    écrivez le en formule mathématique et vous aurez quasiment votre programme
    [/edit]
    on a répondu en même temps

    c'est presque cela car le nombre de minute n'est pas le bon
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  8. #8
    Membre confirmé Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Points : 496
    Points
    496
    Par défaut
    Erf je cherche désesperement mais je ne trovue pas

  9. #9
    Membre confirmé Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Points : 496
    Points
    496
    Par défaut
    Est ce que c'est possible d'avoir une correction du code ou un indice?

  10. #10
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    déroulez votre programme à la main en notant les modifications de valeur des variables dans timer (en oubliant qu'il s'agit de pointeurs vers les entiers, occupez-vous seulement des entiers eux-même) et faites le en partant avec seconde=7384 (le résultat doit etre 2h3m4s)

    note : si vous voulez programmer il faudra vous habituer à exécuter votre programme dans votre tête
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  11. #11
    Membre confirmé Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Points : 496
    Points
    496
    Par défaut
    A ok j'ai compris ! merci

  12. #12
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    ok, maintenant il faut remplacer ces affreux pointeur C par des références C++
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  13. #13
    Membre confirmé Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Points : 496
    Points
    496
    Par défaut
    voila le code avec les pointeurs mais je suis pas trop satisfait( j'aurai preferer passer par l'intermédiare des minute pour avoir l'heure au lieu de passer par l'intermédiare des secondes :*heure = *seconde... " mais je n'ai ps trouvé comment faire)


    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
    #include <iostream>
     
    using namespace std;
     
    void timer(int* heure, int* minute, int* seconde)
    {
        *heure = *seconde/3600;
        *minute = (*seconde/60)%60;
        *seconde = *seconde%60;
     
    }
     
    int main()
    {
        int heures = 0, minutes = 0, secondes = 3600;
        timer(&heures, &minutes, &secondes);
        cout << heures << ":" << minutes <<":" << secondes;
     
     
        return 0;
    }

  14. #14
    Membre confirmé Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Points : 496
    Points
    496
    Par défaut
    Est ce que sa serait possible d'avoir une version de mon code utilisant le passage des minutes au heures et non des seconde au heure comme je l'ai fait en haut ? s'il vous plait

  15. #15
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Citation Envoyé par smartties Voir le message
    j'aurai preferer passer par l'intermédiare des minute pour avoir l'heure au lieu de passer par l'intermédiare des secondes :*heure = *seconde... " mais je n'ai ps trouvé comment faire
    il suffisait d'ajouter une ligne à la fin de votre précédente proposition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    *minutes = *secondes/60;
    *secondes = *secondes%60;
    *heures = *minutes/60;
    *minutes = *minutes%60;
    c'est à dire de faire pour les minutes ce que vous aviez fait pour les secondes, curieux donc que vous n'aillez pas trouvé

    mais les deux solutions sont équivalentes car dans les deux cas il y a 4 opérations (/ ou %)

    remarque : au lieu d'écrire xx = xx/60 il est plus simple d'écrire xx /= 60, de même pour %

    maintenant les références : au lieu de prendre des pointeurs sur des int il est plus simple d'utiliser des références sur ces int, il y a à cela deux avantages :
    • le déréférencement est automatique, c'est à dire pas besoin de faire *secondes pour traverser le pointeur et obtenir le nombre de secondes, ou pour le modifier
    • le référencement est lui aussi automatique, par besoin d'écrire &secondes par exemple


    cela donne :
    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
     
    void timer(int& heure, int& minute, int& seconde)
    {
      heure = seconde/3600;    // ou heure /= 3600
      minute = (seconde/60)%60;
      seconde = seconde%60;  // ou seconde /= 60
    }
     
    int main()
    {
      int heures, minutes, secondes = 3600;
     
      timer(heures, minutes, secondes);
      cout << heures << ":" << minutes <<":" << secondes;
     
      return 0;
    }
    j'ai retiré les init d'heure et minutes car elles inutiles, mettre du code inutile est perturbant pour lecteur car il cherche en connaitre inutilement la raison (même si certaines personnes disent qu'il faut toujours initialiser une var, moi je ne suis pas d'accord )
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  16. #16
    Membre confirmé Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Points : 496
    Points
    496
    Par défaut
    oO génial merci ! En effet c'est plus pratique d'utiliser les reference ^^

Discussions similaires

  1. probleme de pointeur ....
    Par berg dans le forum C
    Réponses: 6
    Dernier message: 12/01/2006, 22h46
  2. Probleme de pointeur
    Par Naruto_kun dans le forum C
    Réponses: 17
    Dernier message: 14/12/2005, 20h47
  3. Probleme de pointeurs
    Par mickyoun dans le forum C++
    Réponses: 9
    Dernier message: 10/08/2004, 17h15
  4. Probleme de pointeur sur une fonction
    Par nicky78 dans le forum C
    Réponses: 2
    Dernier message: 23/05/2004, 20h26
  5. probleme avec pointeurs de structures
    Par remi77 dans le forum C
    Réponses: 2
    Dernier message: 20/10/2003, 13h19

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