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 :

Programme de tri


Sujet :

C

  1. #41
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Premièrement, tu n'as pas testé ce programme, parce que les messages ne sont pas clairs du tout.
    Par exemple, quand le programme est lancé, rien ne semble se passer, parce que tu demandes trois entiers sans même l'avoir annoncé à l'utilisateur.

    Deuxièmement, tu n'as pas respecté la consigne de l'exercice, qui est d'échanger les entiers avant de les réafficher.

    Si je reprends mon guide, ca donnerait:
    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
    #include<stdio.h>
    void echanger_entiers(int * premier, int * deuxieme) {
        // cette fonction échange la valeur des entiers désignés par premier et deuxieme
        // c'est-à-dire, les nombres *premier et *deuxieme.
     
        // ... à toi de coder ça
    }
     
    int main () {
        int a = 0, b = 0, c = 0;
        //obtenir les trois nombres
        printf("Veuillez saisir trois nombres entiers:");
        scanf("%d %d %d", &a, &b, &c);
     
        printf("Vos trois nombres sont: %d %d %d\n", a, b, c);
     
        //trier les trois nombres en utilisant la fonction echanger_entiers
        // par exemple, pour échanger a et b, utiliser echanger_entiers(&a, &b);
        // ... à toi de coder ça correctement
     
        // comme on les a triés, on a maintenant a < b et b < c;
        //afficher les nombres triés
        printf("Et dans l'ordre croissant: %d %d %d\n", a, b, c);
     
        return 0;
    }
    Pour les pointeurs, ne t'inquiete pas de ce que c'est pour l'instant.
    Il suffit pour l'instant que tu saches que:
    • dans la fonction echanger_entiers, *premier s'utilise exactement comme a de main.
    • pour appeler la fonction echanger_entiers, il faut lui donner en argument l'adresse des deux variables à échanger. L'adresse d'une variable est obtenue avec l'opérateur &. Ainsi, &a est l'adresse de la variable a.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  2. #42
    Invité
    Invité(e)
    Par défaut
    ok je comprends

  3. #43
    Membre expérimenté
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 543
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,
    Visiblement, il vous manque pas mal de notions élémentaires aussi bien en algorithme qu’en langage de programmation C.
    Essayer de faire une chose a la fois(#exo 1 & probablement #exo2). Voici deux liens le premier est un ouvrage d’apprentissage du langage de programmation C en "PDF téléchargeable" qui vous permettra d’avoir les bases essentielles (et qui sait, après lectures du manuel, vous serrez à même de résoudre vous-même vos exercices). Le second est une liste de divers tutoriels et cours qui sont à votre disposition si vous souhaitez aller plus loin.

    Je préfère être franc avec vous, il vous manque des notions élémentaires sans celle-ci la compréhension de certaines choses vont être compliquées laissant vos divers exercices non résolus. Nous pourrions toutefois vous apporter bien volontiers l’aide que vous souhaitez à la compréhension et à la résolution de diverses choses, mais faut se mettre à l’évidence qu’il est quand même plus simple que vous ayez un minimum des bases à commencer par lire un manuel pour débutant du langage C (si vous en possédez un aidé vous de celui-ci). Le manuel vous sera d’une aide précieuse pour vos exercices ,mais également à la compréhension de certaines choses essentielles de base.
    Le manuel que je vous propose, fournie les bases et possède des exercices semblables au vôtre (il y a également les corrigés) . Néanmoins, nous serons là pour vous apporter l’aide, vous aurez besoin si nécessaire.
    À bientôt
    Celui qui peut, agit. Celui qui ne peut pas, enseigne.
    Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
    et les philosophes, qui ne connaissent rien sur tout.
    George Bernard Shaw

  4. #44
    Invité
    Invité(e)
    Par défaut
    Merci je ferme le post.

  5. #45
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 687
    Points : 30 980
    Points
    30 980
    Billets dans le blog
    1
    Par défaut
    En dehors des remarques de ternel, je vais rajouter que tes tests ne sont pas optimisés. Prenons le premier if((a < b && a < c && b < c)). Tu ne sens pas que si a < b et b < c alors a est forcément < c ??? C'est pourtant une notion importante en mathématiques que la transitivité. Et en plus je t'en avais écrit un de test...

    Ensuite question de relecture un coup tu regardes a < b; puis en dessous tu regardes a > b. Ce sera beaucoup plus facile (enfin de mon point de vue) si tu gardes le même sens dans tes inégalités. Mais bon ça c'est plus une question d'esthétique qu'autre chose.

    Et ici on ne ferme jamais un topic
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #46
    Invité
    Invité(e)
    Par défaut
    Je ne suis pas au clair avec ces <.
    Pardon pour le topic.
    Je bosse actuellement sur les PDF qu' on m a recommandé.
    Oublions pour un moment l exercice mais j y reviendrai.

    Désolé pour le topic, je savais pas.

  7. #47
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 120
    Points : 109
    Points
    109
    Par défaut
    Pour un traitement plus simple, je te conseille de créer un tableau de 3 entiers qui réceptionnent les nombres que tu saisis aux clavier, et de trier le tableau après en utilisant une boucle for.
    Soit en les rangeant du plus grand au plus petit ou du plus petit au grand selon ce que tu entends faire.

  8. #48
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Ca n'est pas l'exercice.

    La fonction d'échange est déjà a priori hors domaine.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #49
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous, me revoila au bout de quelques jours ou j'ai pu lire le ebook sur le angage C que l'on m'a proposé sous le topic, mais je sais plus qui c'était .
    Bon je commence à mieux comprendre les choses. Je travail les conditions.
    Malheureusement et c'est navrant mais je vais devoir me répéter, je ne comprends pas pourquoi le résultat me donne la réponse "est plus petit que b" et "est lus petit que a".
    Comment ce fait il que le programme ne s'arrête pas là ou il y a la réponse juste. Mais cela demeure très théorique car je sais que le programme ce lis en entier si je ne me trompe pas par contre il devrait me donner que la réponse que j'attends non ? Ha en faite, le programme me donne le résultat que j'attends à la condition que je ne dépasse pas le deuxième nombre plus grand que le premier, es ce normal ?
    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<stdio.h>
    int main (){
    int a;
    int b;
     
    a=0;
    b=0;
     
    printf("saisisez un a");
    scanf("%d", &a);
     
    printf("saisisez un b");
    scanf("%d", &b);
     
    if(a<b){
        printf("a est plus petit que b\n");
    }else;
        printf("b est plus petit que a\n");
     
    getchar();
    return 0;
    }

  10. #50
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Points : 1 672
    Points
    1 672
    Par défaut
    Oui c'est normal.
    Je le répète encore et encore :
    ALERTE AU POINT-VIRGULE !!!

    Sur cette ligne:

  11. #51
    Invité
    Invité(e)
    Par défaut
    Je te remercie mais je te ferais signaler qu' après un else et non un else if, il y a un ;...

  12. #52
    Invité
    Invité(e)
    Par défaut
    Je vais comme meme essaye pour ne pas mourrir idiot mais j ai comme meme remarque que dans les conditions du PDF ils ne mettaient pas les accolades entre les if, les else et les else if car nous on apprend à les mettre...apres ce n est pas une critique mais je me demande si la différence vient de linux ou Windows ? Après je pose des questions d abrutis...mais nous ont fait comme ça !

  13. #53
    Invité
    Invité(e)
    Par défaut
    Merci, je vous demande pardon et je vous serais raisonnable d oublier mon erreur car faut il y a on ne mets pas de ; effectivement. Merci donc je n ai vraiment rien compris de semestre...

  14. #54
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Les accolades servent à grouper plusieurs instructions en un bloc.
    Ce bloc peut être vu par la grammaire du langage comme une seule instruction.

    La syntaxe d'un if est:
    • soit if ( expression ) instruction
    • soit if ( expression ) instruction else instruction

    Mettre des accolades pour une instruction seule n'est pas nécessaire.
    Cependant, cela peut jouer sur la lisibilité du code.

    Par exemple, ce code est déséquilibré, et généralement très déconseillé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (condition) {
        quelquechose();
    } else
        autre_chose();
    Personnellement, je mets des accolades dès que je ne mets pas tout sur une seule ligne.
    Et en général, toujours quand il y a un else.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  15. #55
    Invité
    Invité(e)
    Par défaut
    J'ai pu comprendre que je pouvais mettre des accolades quand je faisais plusieurs structure de conditions...ce qui a l'avenir va vachement m'aider

  16. #56
    Invité
    Invité(e)
    Par défaut
    désolé, en gros c'est ce que tu dis !

  17. #57
    Invité
    Invité(e)
    Par défaut
    J'ai bien saisi quand ne pas mettre des accolades au if et else pour la lisibilité du code ou que cela n'est pas nécessaire mais pour ce qui es des questions des else if, faut il aussi ce permettre d'intégrer la condition dans les accolades du if ?

  18. #58
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    Par défaut
    En fait, il n'y a pas de else if.

    Il y a un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( condition ) instruction
    utilisé comme instruction d'un else.

    Indenté de manière normale, en respectant la symétrie des accolades, on aurait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (condition1) {
       action1();
    } else {
       if (condition2) {
          action2();
       } else {
          if (condition3) {
             action3();
          } else {
             action_par_defaut();
          }
       }
    }
    Ce qui peut aussi s'écrire, en modifiant les placements des accolades et des retours à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (condition1) {action1();}
    else {
       if (condition2) {action2();}
        else {
          if (condition3) { action3(); }
          else {action_par_defaut();}
       }
    }
    ou encore, toujours en respectant l'indentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (condition1) {action1();}
    else
       if (condition2) {action2();}
        else
          if (condition3) { action3(); }
          else {action_par_defaut();}
    Ce qui peut finalement aussi s'écrire ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (condition1) {action1();}
    else if (condition2) {action2();}
    else if (condition3) { action3(); }
    else {action_par_defaut();}
    C'est plus lisible, à condition d'avoir des conditions et actions courtes.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  19. #59
    Invité
    Invité(e)
    Par défaut
    ok merci je l'utiliserai plus tard.

  20. #60
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous,
    Après avoir passé un peu de temps sur le fichier pdf, je travail la boucle do while.
    Ma question est la suivante car dans ma logique j'ai du mal à trouver...
    Quand je mets dans ma condtion !=, cela signifique n'est pas égale ? Et pourtant je sors du programme quand je mets 10...ne devrais je pas mettre un autre nombre pour sortir ?
    Meme chose pour ==, je mets un nombre qui n'est pas égale et je sors. Avec cela j'ai un peu de peine quelqu'un peu m'aider à y comprendre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include<stdio.h>
    int main (){
    int nombre;
     
    printf("ecrire un nombre paire pour sortir");
    do{((nombre ==2)||(nombre ==4)||(nombre ==6)||(nombre ==8)||(nombre ==10));
    scanf("%d", &nombre);
    }while ((nombre ==2)||(nombre ==4)||(nombre ==6)||(nombre ==8)||(nombre ==10));
    return 0;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38
  2. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  3. [Kylix] besoin d'aide pour installer kylix3
    Par Sph@x dans le forum EDI
    Réponses: 3
    Dernier message: 11/02/2004, 13h53
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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