1. #1
    Invité de passage
    Femme Profil pro
    Inscrit en
    décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : décembre 2012
    Messages : 2
    Points : 0
    Points
    0

    Par défaut Problème de programmation avec triage par extraction

    Bonjour,
    Je rencontre un problème avec mon programme qui à terme doit m'afficher la moyenne des 5 données les plus élevés de mon tableau (pouvant contenir entre 7 et 20 données rentrées par l'utilisateur) après avoir utilisé un méthode de triage par extraction du minimum.
    En effet lorsque je le lance, celui-ci ne s’exécute pas. Pourtant code::blocks ne détecte aucune erreur de saisie.
    Pourriez-vous m'aidez s'il vous plaît ?

    Voici mon programme:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    #include <stdio.h>
     
    #define VALMAX 20   // nombre max de valeurs
     
    int main(void)
    {
        int tab[VALMAX];   // le tableau des salaires
        int ind;          // indice de parcours du tableau
        int sal;        //salaire lu au clavier
        int nbval;      // nombre de valeurs dans le tableau (entre 7 et VALMAX)
        int aux;          // variable auxiliaire de permutation
        int nbtriees;       // nombre de cases trièes
        float moy;      //moyenne des salaires
        int min;
        int somme;      /* somme des mesures */
     
        // lire la série de valeur terminée par - 1
       /* lire la première valeur */
       printf("Donner le 1er salaire : ");
       scanf("%i", &sal);
       nbval = nbval++;
     
       /* tant que ce n'est pas la sentinelle */
       while(sal != -1)
       {
            /* c'est une "bonne" valeur : la compter dans le tableau */
          tab[sal]++;
          /* lire la valeur suivante (il reste au moins la sentinelle à lire */
          printf("Donner le salaire suivant : ");
          scanf("%i", &sal);
          nbval = nbval++;
       }
     
        /* méthode du tri par extraction du minimum */
        for(nbtriees = 0; nbtriees < nbval - 1; nbtriees++)
        {
            min = nbtriees;
            for(ind = nbtriees + 1; ind < nbval; ind++)
            {
                if(tab[ind] < tab[ind+1])
                    {
                        min = ind;
                    }
                if(min != nbtriees)
                {
                   aux = tab[nbtriees];
                   tab[nbtriees] = tab[min];
                   tab[min] = aux;
                }
                    }
     
                }
             /* calculer la moyenne des 5 plus grand salaires (somme puis division par 5) */
           somme = 0;
           for (ind = 0 ; ind < 5 ; ind++)
           {
               somme = somme + tab[ind];
           }
           moy = somme * 1.0 / 5;
     
         /* afficher la position du min au dessus de la moyenne */
           printf("Moyenne des 5 salaires les plus élevés : %d", moy);
     
           return 0;
        }

  2. #2
    Expert Confirmé Sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2005
    Messages : 5 761
    Points : 14 013
    Points
    14 013

    Par défaut

    - nbval non initialisé
    - nbval = nbval++; a un comportement indéfini. ici nbval++; suffit
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Invité de passage
    Femme Profil pro
    Inscrit en
    décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : décembre 2012
    Messages : 2
    Points : 0
    Points
    0

    Par défaut Programme se ferme pendant son exécution

    Merci pour votre réponse.
    Lorsque j'exécute mon programme et que je rentre une valeur négative (valeur sentinelle) afin d'arrêter la saisie, le programme se ferme.
    Seulement je n'arrive pas à voir où se situe l'erreur.

  4. #4
    Expert Confirmé Sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    24 802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 24 802
    Points : 35 946
    Points
    35 946

    Par défaut

    Es-tu sûr que le programme ne se termine pas normalement? Je ne sais pas si Code::Blocks rajoute une pause à la fin des programmes console comme le fait Visual.

    Si tu n'est pas sûre, ouvre un invite de commandes et exécute ton programme dedans.
    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.

  5. #5
    Invité de passage
    Inscrit en
    avril 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : avril 2010
    Messages : 1
    Points : 1
    Points
    1

    Par défaut

    Salut,

    Premièrement dans le while tu ne teste jamais le nombre de fois que tu as déjà écris. Il faudrait avoir quelque chose comme ca par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (sal != -1 && nbval < VALMAX)
    Deuxièmement, pour assigner la valeur sal dans ton tableau, il faudrait faire comme ca :
    où indice est l'endroit dans lequel il faut placer sal

    A ma connaissance, quand tu fais tab[sal]++ ca retourne l'espace mémoire situé à (sal + 1) ints du début du tableau

    Donc je mettrais un while qui ressemblerait à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (sal != -1 && nbval < VALMAX){
         tab[nbval] = sal;
         nbval++;
         ...
    }
    avec nbval initialisé à 0.

    J'ai pas regardé plus loin, mais commence déjà avec ca.

Discussions similaires

  1. problème premier programme avec python
    Par adolphemartins dans le forum Général Python
    Réponses: 3
    Dernier message: 04/12/2011, 12h45
  2. Problème de programmation avec VB.Net
    Par monster74 dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/09/2010, 12h14
  3. Problème avec vector par référence
    Par vdumont dans le forum SL & STL
    Réponses: 11
    Dernier message: 09/05/2006, 08h25
  4. Comment gérer des services par programmation avec Delphi ?
    Par isachat666 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 18/12/2005, 18h54

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