4 - Quelques statistiques
Compteur
-
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 $, …)
-
déclaration de type entier :
int nbHom, nbFem, nbPers;
-
initialisation : très souvent à zéro, avant et en dehors d’une boucle.
nbHom = 0;
nbFem = 0;
nbPers = 0;
int nbChiffres = 0;
etc
- 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++;
- 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 :
Pour afficher sa valeur :
printf("Le nombre de femmes traitees : %d\n", nbFem);
Pour le calcul de la moyenne :
if (nbFem > 0)
printf("taille moyenne des femmes : %6.2f mètre\n",
somTailleFem / nbFem);
Exemple 1
/* Fichier Compteur1.C (introduction à la notion de compteur)
Ce programme permet de saisir l’âge d’une personne tant que
l’usager décide de continuer. On compte et affiche :
- le nombre total de personnes traitées
- le nombre total d’adultes traités
*/
#include <stdio.h>
#include <ctype.h>
int main()
{
int age;
char reponse;
int nbPers = 0, // le nombre total de personnes traitées
nbAdul = 0; /* le nombre total d'adultes traités */
do { /* répéter la saisie */
printf("Entrez l'age de la personne ");
scanf("%d", &age);
nbPers++; /* une personne de plus à traiter */
if (age >= 18)
nbAdul++; // un adulte de plus
printf("\nVoulez-vous continuer ? (o/n) ");
scanf(" %c", &reponse);
} while ( toupper(reponse) == 'O');
printf("\n\n");
printf("Le nombre total de personnes traitees : %d\n", nbPers);
printf("Le nombre total d'adultes traites : %d\n", nbAdul);
return 0;
}
Exécution :
Entrez l'age de la personne 32
Avez-vous une autre personne a traiter (o/n) ? o
Entrez l'age de la personne 15
Avez-vous une autre personne a traiter (o/n) ? o
Entrez l'age de la personne 21
Avez-vous une autre personne a traiter (o/n) ? o
Entrez l'age de la personne 19
Avez-vous une autre personne a traiter (o/n) ? n
Le nombre total de personnes traitees : 4
Le nombre total d'adultes traites : 3
Totaliseur
-
but : pour calculer un total (une somme), par exemple le total de la taille des femmes, la somme des poids des enfants traités,
-
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;
- initialisation : très souvent à zéro, avant et en dehors d’une boucle.
.....
somTaille = 0.0;
while ( condition ){ /* ou une autre boucle */
...
...
}
- 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;
- utilisation de la valeur du totaliseur :
Souvent pour le calcul de la moyenne.
Voir les exemples dans le calcul de moyennes (prochaines pages).
Moyenne
- but : pour calculer la moyenne qui est la somme divisée par le nombre :
tailleMoyenne <---- somTaille / nbPers;
- 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
Écrire un programme qui permet de traiter plusieurs personnes tant que l’usager décide de continuer. Pour chaque personne traitée, on saisit un caractère (‘f’ ou ‘m’) pour le sexe, un réel pour la taille. Pour toutes les personnes traitées, on calcule et affiche les statistiques suivantes :
-
Le nombre de personnes traitées;
-
La taille moyenne;
-
Le nombre de femmes traitées;
-
La taille moyenne des femmes traitées.
Solution
/* Fichier Stats1.C (1er exemple de quelques statistiques)
*/
#include <stdio.h>
#include <ctype.h>
int main()
{
float taille,
somTaille = 0.0, /* notion de totaliseur (de la somme) */
somTailleFemme = 0.0 ; /* somme des tailles des femmes traitées */
char sexe, reponse;
int nbPers = 0, nbFem = 0;
do { /* répéter la saisie */
printf("Entrez f ou m pour le sexe suivi de la taille de la personne ");
scanf(" %c%f", &sexe, &taille);
nbPers++;
somTaille += taille ; /* ajuster la taille totale */
if (sexe == 'f' || sexe == 'F') /* cas d'une femme */
{
nbFem++; /* une femme de plus */
somTailleFemme += taille;
}
printf("\nAvez-vous une autre personne a traiter (o/n) ? ");
scanf(“ %c”, &response);
} while ( toupper(reponse) == 'O');
printf("\n\n");
printf("Le nombre total de personnes traitees : %d\n", nbPers);
printf("La taille moyenne des personnes : %6.2f metre\n",
somTaille / nbPers);
if (nbFem > 0)
{
printf("Le nombre total de femmes traitees : %d\n", nbFem);
printf("La taille moyenne des femmes traitees : %6.2f metre\n",
somTailleFemme / nbFem);
}
else
printf("Aucune femme parmi des personnes traitees\n");
return 0;
}
Exécution :
Entrez f ou m pour le sexe suivi de la taille de la personne f 1.72
Avez-vous une autre personne a traiter (o/n) ? o
Entrez f ou m pour le sexe suivi de la taille de la personne m 1.64
Avez-vous une autre personne a traiter (o/n) ? o
Entrez f ou m pour le sexe suivi de la taille de la personne f 1.76
Avez-vous une autre personne a traiter (o/n) ? o
Entrez f ou m pour le sexe suivi de la taille de la personne f 1.68
Avez-vous une autre personne a traiter (o/n) ? n
Le nombre total de personnes traitees : 4
La taille moyenne des personnes : 1.70 metre
Le nombre total de femmes traitees : 3
La taille moyenne des femmes traitees : 1.72 metre
Appuyez sur une touche pour continuer...
Plus grande valeur dans une série de nombres
- Déclaration : de type entier (exemple, l’âge le plus grand) ou réel (exememple, le poids le plus lourd)
int plusGrandAge, age;
float plusGrandeTaille, taille;
- 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 (...);
- Ajustement de sa valeur : à l’intérieur d’une boucle, au bon endroit.
do { /* ou une autre boucle */
...
if (age > plusGrandAge)
plusGrandAge = age;
} while (...);
Plus petite valeur dans une série de nombres
- Déclaration : de type int (âge le plus petit) ou float (poids le plus léger).
int plusPetitAge, age;
float plusPetiteTaille, taille;
- 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 (...);
- 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
Écrire un programme qui permet de traiter plusieurs personnes tant que l’usager décide de continuer. Pour chaque personne traitée, on saisit un caractère (‘f’ ou ‘m’) pour le sexe, un réel pour la taille. Pour toutes les personnes traitées, on détermine et affiche les statistiques suivantes :
-
La taille la plus grande de toutes les personnes traitées ;
-
La taille la plus petite parmi toutes les femmes traitées.
Solution
/* Fichier Stats2.C (2e exemple de quelques statistiques)
*/
#include <stdio.h>
#include <ctype.h>
int main()
{
float taille,
plusGrandeTaille = 0.0, /* la taille la plus grande */
plusPetiteTailleFemme = 6.70 ; /* la plus petite taille des femmes traitées */
char sexe, reponse;
do { /* répéter la saisie */
printf("Entrez f ou m pour le sexe suivi de la taille de la personne ");
scanf(" %c%f", &sexe, &taille);
if (taille > plusGrandeTaille )
plusGrandeTaille = taille;
if (sexe == 'f' || sexe == 'F') /* cas d'une femme */
{
if ( taille < plusPetiteTailleFemme )
plusPetiteTailleFemme = taille;
}
printf("\nAvez-vous une autre personne a traiter (o/n) ? ");
scanf(“ %c”, &response);
} while ( toupper(reponse) == 'O');
printf("\n\n");
printf("La taille la plus grande des personnes traitees : %6.2f metre\n",
plusGrandeTaille);
printf("La taille la plus petite des femmes : %6.2f metre\n",
plusPetiteTailleFemme);
return 0;
}
Exécution :
Entrez f ou m pour le sexe suivi de la taille de la personne f 1.75
Avez-vous une autre personne a traiter (o/n) ? o
Entrez f ou m pour le sexe suivi de la taille de la personne m 1.82
Avez-vous une autre personne a traiter (o/n) ? o
Entrez f ou m pour le sexe suivi de la taille de la personne f 1.68
Avez-vous une autre personne a traiter (o/n) ? o
Entrez f ou m pour le sexe suivi de la taille de la personne f 1.87
Avez-vous une autre personne a traiter (o/n) ? n
La taille la plus grande des personnes traitees : 1.87 metre
La taille la plus petite des femmes : 1.68 metre