CHAPITRE 5 : Quelques statistiques de base CHAPITRE 5 : Quelques statistiques de base
A) Compteur
1. but : pour compter le nombre de fois que l'on rencontre un objet (le nombre de personnes traitées, le nombre d'employés dont le salaire hebdomadaire dépasse 1234.50 $, ...)
2. déclaration de type entier : int nbHom, nbFem, nbPers;
3. initialisation : très souvent à zéro, avant et en dehors d'une boucle.
nbHom = 0;
nbFem = 0;
nbPers = 0;
while (!feof(aLire)){
...
...
}
ou une autre boucle do{
...
...
} while (...);
4. incrémentation (ajouter 1 de plus à sa valeur) :
À l'intérieur d'une boucle, au bon endroit. Souvent, on vérifie d'abord une condition avant d'incrémenter la valeur du compteur :
if (sexe == 'f' || sexe == 'F') nbFem++;
if (toupper(sexe) == 'M' && age >= 18) nbHomAdulte++;
5. utilisation de la valeur du compteur
pour les indices des tableaux (à voir plus tard dans le cours)
en dehors et à la fin d'une boucle : o pour afficher sa valeur :
printf("Le nombre de femmes traitees : %d\n", nbFem);
o pour le calcul de la moyenne :
if (nbFem > 0)
printf("taille moyenne des femmes : %6.2f mètre\n", somTailleFem / nbFem);
Exemple 1
On dispose du fichier de type texte du nom "mesures.dta". Chaque ligne du fichier contient les informations relatives à une seule personne :
son numéro dossier, sa taille, son poids, un caractère représentant son sexe.
Exemple des données :
1005 1.47 45.81 F 1006 1.52 44.91 F 1007 1.55 55.34 F 1008 1.57 50.80 F 1009 1.57 51.71 F 1010 1.57 56.25 M 1011 1.63 60.33 F 1012 1.63 61.23 M 1013 1.65 58.51 F 1014 1.68 57.61 F 1015 1.68 64.41 F 1016 1.73 66.22 F 1017 1.73 71.67 M 1018 1.75 76.20 M 1019 1.78 65.32 M 1905 1.80 82.10 M
Écrire un programme qui permet de lire le fichier, de compter et d'afficher les statistiques suivantes :
1) le nombre de personnes traitées (compteur sans condition);
2) le nombre de femmes traitées (compteur avec condition : une femme);
3) le nombre d'hommes dont la taille dépasse 1.76 mètre (compteur avec condition : un homme et sa taille > 1.76).
Solution
#include <stdio.h>
void main() {
const float BORNE = 1.76;
int nbPers, /* le compteur du nombre de personnes lues */
nbFem, /* le compteur du nombre de femmes */
nbHomG; /* le compteur du nombre d'hommes dont la taille dépasse 1.76 mètre */
int numero;
float taille, poids;
char sexe;
FILE *aLire; /* déclaration du fichier à lire */
/* Initialisations : */
/* du fichier à lire : */
aLire = fopen("mesures.dta", "r"); /* "r" pour "reading"
(lecture) */
/* des compteurs : dans 99% des cas à zéro */
nbPers = 0;
nbFem = 0;
nbHomG = 0;
/* Lecture et ajustement des compteurs : */
while (!feof(aLire)){
/* lecture des données : */
fscanf(aLire,"%d%f%f%c%c%c\n", &numero, &taille, &poids, &sexe, &sexe, &sexe);
/* ajustement des compteurs : */
nbPers++; /* pas de condition */
if (sexe == 'F') nbFem++;
else /*le cas d'un homme car il n'y a pas d'erreurs dans les données */
if (taille > BORNE) nbHomG++;
}
/* fermeture du fichier à lire : fortement conseillé */
fclose(aLire);
/* affichage des compteurs : */
printf("\n\n");
printf("Le nombre de personnes traitees : %3d\n", nbPers);
printf("Le nombre de femmes traitees : %3d\n", nbFem);
printf("Le nombre d'hommes demandes : %3d\n", nbHomG);
printf("Cliquez sur le bouton de fermeture "); } }
Exécution
Le nombre de personnes traitees : 16 Le nombre de femmes traitees : 10 Le nombre d'hommes demandes : 2
B) Totaliseur
1. but : pour calculer un total (une somme), par exemple le total de la taille des femmes, la somme des poids des enfants traités,
2. déclaration : de type entier (âge total) ou réel (poids total). Exemples :
float taille, somTaille; /* somTaille est un totaliseur, une somme
*/
int age, totAgeEnfant;
3. initialisation : très souvent à zéro, avant et en dehors d'une boucle.
...
somTaille = 0.0;
while (!feof(aLire)){ /* ou une autre boucle */
...
...
}
4. ajustement de sa valeur : à l'intérieur d'une boucle, au bon endroit.
Souvent, on vérifie d'abord une condition et on s'assure d’avoir une valeur courante avant d'ajuster le totaliseur :
...
fscanf(aLire, "%c%f%d\n", &sexe, &taille, &age);
if (toupper(sexe) == 'M') sommeTailleHom += taille;
5. utilisation de la valeur du totaliseur :
Souvent pour le calcul de la moyenne.
C) Moyenne
1. but : pour calculer la moyenne qui est la somme divisée par le nombre :
tailleMoyenne <---- somTaille / nbPers;
2. traitement
Il faut s'assurer d'avoir un compteur pour le nombre et un totaliseur pour la somme.
Avant de diviser, vérifier si le nombre est supérieur à 0. Le calcul de la moyenne se fait quand on quitte la boucle de répétition. Il est inutile de calculer la moyenne à l'intérieur d'une boucle.
if (nbFem > 0)
printf("taille moyenne des femmes: %6.2f mètre\n", somTailleFem / nbFem);
else
printf("Aucune femme traitée");
Exemple 2
On dispose du même fichier "mesure.dta" qu'à l'exemple 1. Écrire un programme qui permet de lire le fichier, de calculer et d'afficher les statistiques suivantes :
Le nombre de personnes traitées;
Le nombre de femmes traitées;
La taille moyenne;
Le poids moyen des femmes.
Solution
#include <stdio.h>
#include <ctype.h>
void main() {
int nbPers, /* le compteur du nombre de personnes lues */
nbFem; /* le compteur du nombre de femmes */
int numero;
float taille, poids;
char sexe;
float totTaille, /* somme des tailles */
totPoidsFem; /* somme des poids des femmes */
FILE *aLire; /* déclaration du fichier à lire */
/* Initialisations : */
/* du fichier à lire : */
aLire = fopen("mesures.dta", "r"); /* "r" pour "reading"
(lecture) */
/* des compteurs et des totaliseurs : 99% des cas par zéro */
nbPers = 0;
nbFem = 0;
totTaille = 0;
totPoidsFem = 0;
/* Lecture et ajustement des compteurs : */
while (!feof(aLire)){
/* lecture des données : */
fscanf(aLire,"%d%f%f%c%c%c\n", &numero, &taille, &poids, &sexe, &sexe, &sexe);
/* ajustement des compteurs : */
nbPers++; /* pas de condition */
totTaille += taille;
if (sexe == 'F'){
nbFem++;
totPoidsFem += poids;
} }
/* fermeture du fichier à lire : fortement conseillé */
fclose(aLire);
/* affichage des compteurs : */
printf("\n\n");
printf("Le nombre de personnes traitees : %3d\n", nbPers);
printf("Le nombre de femmes traitees : %3d\n", nbFem);
/* calcul et affichage des moyennes : */
if (nbPers > 0){
printf("La taille moyenne : %6.2f metre\n\n", totTaille / nbPers);
if (nbFem > 0)
printf("Le poids moyen des femmes : %6.2f kg\n\n", totPoidsFem / nbFem);
else
printf("Aucune femme traitee\n\n");
} else
printf("Aucune personne dans le fichier\n\n");
}
Exécution
Le nombre de personnes traitees : 16 Le nombre de femmes traitees : 10 La taille moyenne : 1.64 metre Le poids moyen des femmes : 55.57 kg
D) Plus grande valeur dans une série de nombres
1. déclaration : de type entier (âge le plus grand) ou réel (poids le plus lourd)
int plusGrandAge, age;
float plusGrandeTaille, taille;
2. initialisation : très souvent par une valeur suffisamment petite, avant et en dehors d'une boucle.
plusGrandAge = -200;
plusGrandeTaille = 0.0;
do { /* ou une autre boucle */
...
} while (...);
3. ajustement de sa valeur : à l'intérieur d'une boucle, au bon endroit.
do { /* ou une autre boucle */
...
if (age > plusGrandAge) plusGrandAge = age;
} while (...);
E) Plus petite valeur dans une série de nombres
1. déclaration : de type int (âge le plus petit) ou float (poids le plus léger).
int plusPetitAge, age;
float plusPetiteTaille, taille;
2. initialisation : très souvent par une valeur suffisamment grande, avant et en dehors d'une boucle.
plusPetitAge = 500; /* valeur suffisamment grande */
plusPetiteTaille = 7.0;
do { /* ou une autre boucle */
...
} while (...);
2. ajustement de sa valeur : à l'intérieur d'une boucle, au bon endroit.
do { /* ou une autre boucle */
...
if (age < plusPetitAge) plusPetitAge = age;
...
} while (...);
Exemple 3
On dispose du même fichier mesure.dta qu'à la page 2. Écrire un programme qui permet de lire le fichier, de calculer et d'afficher les statistiques suivantes :
La taille la plus grande;
Le poids le plus léger des femmes;
Le poids le plus léger des hommes.
Solution
#include <stdio.h>
void main() {
int numero;
float taille, poids;
char sexe;
float pgTaille, /* la taille la plus grande */
plPoidsFem, /* le poids le plus léger des femmes */
plPoidsHom; /* le poids le plus léger des hommes */
FILE *aLire; /* déclaration du fichier à lire */
/* Initialisations : */
/* du fichier à lire : */
aLire = fopen("mesures.dta", "r"); /* "r" pour "reading" (lecture) */
/* des valeurs plus grandes, plus petites */
pgTaille = 0.0; /* une valeur suffisamment petite */
plPoidsFem = 6500; /* une valeur suffisamment grande */
plPoidsHom = 6500; /* une valeur suffisamment grande */
/* Lecture et ajustement des compteurs : */
while (!feof(aLire)){
/* lecture des données : */
fscanf(aLire,"%d%f%f%c%c%c\n", &numero, &taille, &poids, &sexe, &sexe, &sexe);
/* ajustement de la taille la plus grande */
if (taille > pgTaille) pgTaille = taille;
/* ajustement des poids les plus légers */
if (sexe == 'F'){
if (poids < plPoidsFem) plPoidsFem = poids;
} else
if (poids < plPoidsHom) plPoidsHom = poids;
} /* fin du while */
/* fermeture du fichier à lire : fortement conseillé */
fclose(aLire);
/* affichage des valeurs plus grandes et plus petites : */
printf("\n\n");
printf("La taille la plus grande : %6.2f metre\n\n", pgTaille);
printf("Le poids le plus leger des femmes : %6.2f kg\n\n", plPoidsFem);
printf("Le poids le plus leger des hommes : %6.2f kg\n\n", plPoidsHom);
printf("\n\nAppuyez sur Entrée");
getchar();
}
Exécution
La taille la plus grande : 1.80 metre Le poids le plus leger des femmes : 44.91 kg Le poids le plus leger des hommes : 56.25 kg
Exercice de révision
Un étudiant en biologie reçoit sur disquette un fichier nommé 'imperial.dta'.
Chaque ligne du fichier contient les informations d'une seule personne :
ROY CHANTAL 23 58 53 5 4 121 MOLAISON CLAUDE 22 7 17 5 11 174 BEDARD MARC-ANDRE 3 3 74 5 4 135 etc.