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

Langage C++ Discussion :

Aide sur un devoir


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2
    Par défaut Aide sur un devoir
    Bonjour, je ne savais pas dans quel rubrique il fallait poster, donc j'ai décidé de poster ici. ( J'espère que j'aurai fait le bon choix ).

    Actuellement en IUT informatique, avec des difficulté en programmation C++ et avec un devoir a rendre pour la rentrée. J'aimerai que l'on puisse m'aider si possible car je ne sais absolument pas comment faire. Merci d'avance et dite moi si il faut que je déplace mon post !

    Draz'

    Exercice 1 :

    Soit le programme suivant.
    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>
    void echange (int a, int b)
    {
       int c = b ;
       b = a ;
       a = c ;
    }
     
    int main(int argc, char *argv[])
    {
       int a = 5 ;
       int b = 2 ;
       std::cout << “a = “ << a << “, b = “ << b << std::endl ;
       echange(b, a) ;
       std::cout << “ a = ” << a << “, b = “ << b << std::endl ;
       for (int a = 0 ; a < b ; a++)
       {
          std::cout << “a = “ << a << “, b = “ << b << std::endl ;
       }
       std::cout << “a = “ << a << “, b = “ << b << std::endl ;
       return 0 ;
    }
    1. Donnez le résultat de l’exécution.
    2. Expliquez le traitement réalisé par la fonction « echange(int, int) ».
    3. Corrigez le programme afin d’enlever les erreurs de visibilité des variables.


    Exercice 2 :

    Écrivez une fonction qui affiche les nombres pairs compris entre 1 et n (n donné en paramètre de la fonction). Vous afficherez cinq nombres par ligne.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Par défaut
    La fonction echange sert à permuter les entiers a et b.
    Dans le main qu'il y a ensuite c'est juste une application de cette fonction.
    A départ a=5 et b=2, après traitement par la fonction tu aura a=2 et b=5.
    Je te laisse chercher un peu comment le corriger.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Il n'y a pas beaucoup d'echange, les paramètres étant passés par valeur.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Euh qu'est ce que tu ne comprends pas exactement?

    Tu as déjà lu un cours de C++? Utilisé un autre langage de programmation? Un cours d'algorithmie ( visibilité des variables? )?

  5. #5
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2
    Par défaut
    Pour le résultat cela fera :

    a = 2, b = 5
    a = 5, b = 2
    a = 0, b = 5
    a = 1, b = 5
    a = 2, b = 5
    a = 3, b = 5
    a = 4, b = 5
    a = 5, b = 2

    Pour la fonction echange, elle stock juste le résultat de l'int "b" dans "c", puis échange le résultat de l'int a dans l'int b, pour enfin redonner la valeur de l'int "b" a l'int "a" grace a la valeur de l'int "b" qui était stocker dans l'int "c".

    Mais apres dans mon cours c'est marqué :
    D'une manière générale il est préférable de donner des noms différents aux variables locales et globales pour des raisons de lisibilité et de compréhension du code.

    Mais je ne vois pas trop comment faire, il faudrait changer les noms de certaine variables, mais je ne vois pas lesquelles, car a et b on un lien à travers le code .. Et il n'y a pas de variables globales ( si j'ai bien compris .. )

    ( Désolé pour mon langage sans doute pas très approprié mais j'ai vraiment du mal avec ce langage informatique qui est mon premier, dans lequel j'ai eu une longue absence .. )

  6. #6
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Citation Envoyé par DraziC49 Voir le message
    Pour le résultat cela fera :

    a = 2, b = 5
    a = 5, b = 2
    a = 0, b = 5
    a = 1, b = 5
    a = 2, b = 5
    a = 3, b = 5
    a = 4, b = 5
    a = 5, b = 2

    Pour la fonction echange, elle stock juste le résultat de l'int "b" dans "c", puis échange le résultat de l'int a dans l'int b, pour enfin redonner la valeur de l'int "b" a l'int "a" grace a la valeur de l'int "b" qui était stocker dans l'int "c".

    Mais apres dans mon cours c'est marqué :
    D'une manière générale il est préférable de donner des noms différents aux variables locales et globales pour des raisons de lisibilité et de compréhension du code.

    Mais je ne vois pas trop comment faire, il faudrait changer les noms de certaine variables, mais je ne vois pas lesquelles, car a et b on un lien à travers le code .. Et il n'y a pas de variables globales ( si j'ai bien compris .. )

    ( Désolé pour mon langage sans doute pas très approprié mais j'ai vraiment du mal avec ce langage informatique qui est mon premier, dans lequel j'ai eu une longue absence .. )
    L'erreur n'est pas une erreur de visibilités, mais de portée de variable (locale). (Énoncée erroné?)

    Ta liste de valeur comporte une première erreur (tu a inversé a et b par rapport a ton code.)
    Ensuite, le code actuel ne fonctionne pas. (echange n'échange pas les valeurs mais les laisse tel quel)

    Je te recommande très vivement d'acheter un bouquin de débutant pour le c++, où y figurent les notions de base du c/c++. (Portées, variables locales, globales, visibilités des variables et fonctions, pointeurs, classe, polymorphisme, surcharge, exceptions, qui sont pour moi les 'bases' du c++.)
    Et surtout au minimum de lire un pdf d'introduction au C(ou C with classes, ce qui ressemble plus à ce que tu fait)

    Concernant la section, j'aurais vu ce message dans la partie "débutants".

    Edit: de plus ta dernière ligne n'a pas de sens, b ne change pas après la boucle...
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par DraziC49 Voir le message
    1. Donnez le résultat de l’exécution.
    Compiler + Exécuter sera assez efficace pour avoir le résultat. Mais il est vrai qu'analyser le code te permettra de comprendre ce résultat.

    Citation Envoyé par DraziC49 Voir le message
    2. Expliquez le traitement réalisé par la fonction « echange(int, int) ».
    L'avantage c'est qu'elle porte bien son nom. L'inconvénient, c'est qu'elle ne marche pas
    Citation Envoyé par DraziC49 Voir le message
    3. Corrigez le programme afin d’enlever les erreurs de visibilité des variables.
    Les erreurs de visibilités concernent la variable de boucle (for(int a))

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Au passage, je ne suis pas sûr que la version spécialisée pour int soit plus performante que la version générale...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Au passage, je ne suis pas sûr que la version spécialisée pour int soit plus performante que la version générale...
    Sur du cisc où l'échange se fait par un registre, ca ne dois rien changer en terme de temps d'exécution ^^'
    Enfaite ce truc ne sert que pour les processeur aillent un nombre de registre trèèès limité(donc souvent du risc).
    (Enfin, je dis ca au feeling)

    3DArchi> Bien vu pour le for *miope*
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Citation Envoyé par Zenol Voir le message
    Sur du cisc où l'échange se fait par un registre, ca ne dois rien changer en terme de temps d'exécution ^^'
    Enfaite ce truc ne sert que pour les processeur aillent un nombre de registre trèèès limité(donc souvent du risc).
    (Enfin, je dis ca au feeling)
    Je pense surtout que tu as fais une inversion: Ce sont les RISC qui ont beaucoup de registres, et les CISC qui en ont peu (comme le x86).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Je pense surtout que tu as fais une inversion: Ce sont les RISC qui ont beaucoup de registres, et les CISC qui en ont peu (comme le x86).
    Oui pardon.

    Enfaite c'est une vielle technique pour les micro-contrôleurs qui on très peu de registres.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

Discussions similaires

  1. Aide sur devoir : shell et script
    Par hlomp dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 04/11/2013, 12h56
  2. Petite aide pour un devoir sur merise
    Par AirBoy dans le forum Merise
    Réponses: 2
    Dernier message: 13/01/2012, 15h44
  3. [Kylix] Aide sur BitBlt
    Par mic006 dans le forum EDI
    Réponses: 1
    Dernier message: 10/12/2002, 22h54
  4. Aide sur une fenetre
    Par Ray-j dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 29/11/2002, 08h51

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