Vous êtes sur la page 1sur 11

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)){ do{


... ou une autre boucle ...
... ...
} } 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);

Chapitre 5 : Quelques statistiques de base IFT 1969 / A07 Page 1


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>

int 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;
Chapitre 5 : Quelques statistiques de base IFT 1969 / A07 Page 2
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

Chapitre 5 : Quelques statistiques de base IFT 1969 / A07 Page 3


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.

Chapitre 5 : Quelques statistiques de base IFT 1969 / A07 Page 4


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;

Chapitre 5 : Quelques statistiques de base IFT 1969 / A07 Page 5


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
Chapitre 5 : Quelques statistiques de base IFT 1969 / A07 Page 6
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 */


...

Chapitre 5 : Quelques statistiques de base IFT 1969 / A07 Page 7


} 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 (...);

Chapitre 5 : Quelques statistiques de base IFT 1969 / A07 Page 8


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é */


Chapitre 5 : Quelques statistiques de base IFT 1969 / A07 Page 9
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.

Une feuille de description de données est aussi fournie avec la disquette :

Colonnes 1 à 30 : nom et prénom


Colonnes 39 à 40 : jour de naissance
Colonnes 42 à 43 : mois de naissance (on ajoute 50 dans le cas d'une femme)
Colonnes 45 à 46 : année de naissance
Colonne 52 : le nombre de pieds dans sa taille
Colonnes 57 à 58 : le nombre de pouces dans sa taille
Colonnes 62 à 64 : son poids en livres

L'étudiant aimerait avoir les statistiques suivantes :


 la taille la plus grande;
 le poids le plus léger.

Il aimerait aussi avoir un fichier qui ne contient que des informations sur les
personnes de sexe féminin, avec la taille en mètre et le poids en kg.

Chapitre 5 : Quelques statistiques de base IFT 1969 / A07 Page 10


1 pouce = 0.254 mètre
1 livre = 0.454 kg

Écrire un programme qui permet de réaliser ces tâches.

Chapitre 5 : Quelques statistiques de base IFT 1969 / A07 Page 11

Vous aimerez peut-être aussi