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 :

Rangement d'un tableau


Sujet :

C

  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Par défaut Rangement d'un tableau
    Bonjour,

    Je dois faire un programme qui reçoit les valeurs d'un tableau et les range en ordre croissant.

    J'ai pensé faire comme dans le fichier cpp attaché mais ca ne marche pas
    quelqu'un a une idée?

    merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Le commentaire est bon. La boucle l'implementant est mauvaise. Essaie d'afficher ce qui se passe, tu devrais comprendre.

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    1. En C l'extension d'un fichier source est *.c non pas *.cpp
    2. On ne déclare pas de prototype de fonction à l'intérieur d'une autre mais en dehors de toutes fonctions
    3. La dernière valeur est automatiquement tirée, il faut donc par courrir le tableau sur n -1
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Membre éclairé
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Par défaut
    salut,
    je te propose le tri par selection car je comprend pas trop la methode que tu as utilisé, voici un code qui pourrait t'aider:
    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
     
    void main()
    {int t[N],i,temp,tri;
    //remplissage du tableau
    for(i=0;i<5;i++) scanf("%d",&t[i]);
    //application du tri par selection
    for(i=0;i<N-1;i++)
    {posmin=t[i];
              for(j=i+1;j<N;j++)
              if (t[j]<t[posmin])
              posmin=j;
    temp=t[posmin];
    t[posmin]=t[i];
    t[i]=temp;
    }}
    a+

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par ranell
    je te propose le tri par selection car je comprend pas trop la methode que tu as utilisé
    Un essai de tri par minimum
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    en général dans ce genre de problème il faut faire un while(condition )

    De plus, dans ton code, ta boucle sur i va jusqu'à (nval-1), et donc ton premier j pour ton dernier i dépasse le tableau.

    En pseudo-code, voilà l'algo :

    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
     
    Initialiser continuer à vrai
     
    Tant que continuer est vrai
     
        mettre continuer à faux
     
        pour i = 1 à (n-1)
           pour j = (i+1) à n 
               si t(j) < t(i)
                    echanger t(i) et t(j)
                    mettre continuer à vrai
                    sortir de boucle j
               fin si
           fin  pour
     
           si continuer est vrai 
              sortir de boucle i
           fin si
     
       fin pour
     
    fin tant que
    Maintenant, tu as un moyen nettement plus simple de faire, mais... Tu ne l'as sans doute pas encore vu en cours..

    Note : j'ai mis les indices de 1 à n ... à toi de faire la traduction en C ...

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Par défaut
    Merci à tous,

    Je penseque la double condition t[j]<t[i] et i<nval posait problème car en introduisant une instruction if dans la boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for(j=i+1; j<nval; j++)
    		{
    			if(t[j]<t[i])
    			{
    			p = t[i];
    			t[i] = t[j];
    			t[j] = p;
    			}
    		}
    le programme marche très bien

    reste à savoir pourquoi

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Par défaut
    Citation Envoyé par Franck.H
    1. En C l'extension d'un fichier source est *.c non pas *.cpp
    2. On ne déclare pas de prototype de fonction à l'intérieur d'une autre mais en dehors de toutes fonctions
    3. La dernière valeur est automatiquement tirée, il faut donc par courrir le tableau sur n -1

    je travaille sur visual c++ c'est donc ce que j'ai comme extension mais tout marche bien.
    dans le livre que j'utilise (Delannoy), il est expliqué que les prototypes doivent être déclarés dans la fonction appellante.

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Par défaut
    Citation Envoyé par souviron34
    De plus, dans ton code, ta boucle sur i va jusqu'à (nval-1), et donc ton premier j pour ton dernier i dépasse le tableau.
    l'instruction ne sera pas executée pour le dernier i vu que la condition j<nval a été formulée dans la boucle.

    [-mod- Attention a bien utiliser les balises]

  10. #10
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par byonatane
    ...dans le livre que j'utilise (Delannoy), il est expliqué que les prototypes doivent être déclarés dans la fonction appellante.
    Ha ... jamais vu ca moi ...
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par byonatane
    je travaille sur visual c++ c'est donc ce que j'ai comme extension mais tout marche bien.
    Si tu parles de .cpp, c'est l'extension par défaut. Il faut la modifier en .c.
    dans le livre que j'utilise (Delannoy), il est expliqué que les prototypes doivent être déclarés dans la fonction appellante.
    Grosse ânerie.

    Je ne suis pas surpris. Les livres théoriques de Delannoy de sont pas dans ma liste de ressources recommandées. Je recommande plutôt le Braquelaire

  12. #12
    Inactif  
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Si tu parles de .cpp, c'est l'extension par défaut. Il faut la modifier en .c.
    Grosse ânerie.

    Je ne suis pas surpris. Les livres théoriques de Delannoy de sont pas dans ma liste de ressources recommandées. Je recommande plutôt le Braquelaire
    Dans les programmes que j'ai faits jusqu'à maintenant ça marchait très bien et je trouve que le livre est bon.
    Pourqoi ça poseriat un problème de déclarer les prototypes dans la fonction appelante?

  13. #13
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par byonatane
    Dans les programmes que j'ai faits jusqu'à maintenant ça marchait très bien et je trouve que le livre est bon.
    Pourqoi ça poseriat un problème de déclarer les prototypes dans la fonction appelante?
    Ca ne pose pas de problèmes particulier, si ce n'est que c'est une mauvaise pratique (risque d'incohérence, de doublon, code inutilement lourd et illisible...).

    La Bonne Pratique (celle de la bibliothèque C, par exemple), c'est de mettre les prototypes dans un .h, d'y ajouter une 'garde' (protection contre les inclusions multiples dans la même unité de compilation) et d'inclure ce .h à la demande et dans le fichier d'implémentation. C'est la seule façon de garantir des interfaces cohérentes.

    A lire en entier :

    http://emmanuel-delahaye.developpez.com/codage.htm

  14. #14
    Inactif  
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Par défaut
    Merci de tes conseils

    Penses-tu que le livre de delannoy est vraiment mauvais ?

    Parce que je travaille dessus depuis 1 mois et demi pour m'avancer pour les études que je commence l'année prochaine et s'il est mauvais, ça risque;

  15. #15
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Le mieux reste sans doute le K&R mais pas forcément accessible pour de l'initiation. Sinon le livre qu'Emmanuel à cité plus haut
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  16. #16
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par byonatane
    Penses-tu que le livre de delannoy est vraiment mauvais ?

    Parce que je travaille dessus depuis 1 mois et demi pour m'avancer pour les études que je commence l'année prochaine et s'il est mauvais, ça risque;
    Je pense que j'ai déjà donné mon avis et que tu connais mes préférences.

  17. #17
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Franck.H
    Le mieux reste sans doute le K&R mais pas forcément accessible pour de l'initiation. Sinon le livre qu'Emmanuel à cité plus haut
    Le K&R2 est essentiellement un livre de référence.

  18. #18
    Inactif  
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 60
    Par défaut
    Salut


    Merci de ta réponse.

    Pense-tu que ca me fera des lacunes si je continue sur ce livre (il m'a été conseillé par un prof d'info)

    A propos, vive l'Alsace! (j'habite strasbourg)

  19. #19
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par byonatane
    A propos, vive l'Alsace! (j'habite strasbourg)
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  20. #20
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par byonatane
    Pense-tu que ca me fera des lacunes si je continue sur ce livre (il m'a été conseillé par un prof d'info)
    De mauvaises pratiques surtout. Le Braquelaire est bien meilleur pour ça.

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

Discussions similaires

  1. [XL-2007] Création d'une arborescence selon un tableau Excel et rangement de fichiers existants
    Par Mechsangoku dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2014, 03h47
  2. Rangement de données aléatoires dans un tableau bidimensionnel de 9x9
    Par dcligniez dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/12/2010, 20h52
  3. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21
  4. transmision de tableau en parametre
    Par Horus dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2002, 11h15
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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