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:
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;
} |
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.