Programmation en C: Examen intermédiaire
A la station César-Roux à Lausanne, on mesure la concentration de plusieurs polluants chimiques dans l'air. Dans cet examen, on travaille avec les mesures de NO2 (dioxyde d'azote) du 12 septembre 2019 à 10:30 au 10 octobre 2019 à 10:30 (28 jours).
Préparation
Télécharge les fichiers suivants, et enregistre-les dans le même répertoire:
Le fichier lausanne-no2 contient 9964 mesures. Chaque mesure comporte deux valeurs:
- temps: le temps de la mesure, en millisecondes depuis le 1er janvier 1970, UTC
- no2: la concentration de NO2, en µg/m³
Les mesures sont triés par temps.
Il n'est pas nécessaire de modifier la fonction lireFichier
dans les fichiers exercicei.c
.
Le temps en millisecondes
En informatique, on exprime le temps souvent en millisecondes depuis le 1er janvier 1970 à 00:00 (UTC), car les calculs sont particulièrement simples. On utilise des entiers 64 bits.
Pour les calculs, les constantes suivantes sont utiles:
int64_t SECONDE = 1000; int64_t MINUTE = 60 * SECONDE; int64_t HEURE = 60 * MINUTE; int64_t JOUR = 24 * HEURE;
Avec printf, il faut utiliser %ld:
printf("Temps: %ld\n", temps);
L'heure du jour en millisecondes depuis minuit peut être calculée comme suit:
int64_t msDepuisMinuit = (temps + 2 * HEURE) % JOUR;
Les deux heures correspondent à notre décalage horaire par rapport à UTC. L'opérateur % calcule le modulo (reste de la division entière).
Temps en millisecondes | Date | Date UTC |
Exercice 1: Les trous 15 points
Le capteur envoie une mesure toutes les 4 minutes environ. Par contre, il y a quelques trous dans les données, où le capteur a raté une mesure, ou était en panne.
A. Nombre de trous
Compte et affiche le nombre de trous de plus de 10 minutes.
B. Le trou le plus long
Cherche le trou le plus long, et affiche sa longueur en heures, minutes, secondes, et millisecondes.
Vérification
Il y a 17 trous. Le plus grand trou fait 1 h, 47 min, 50 s, et 966 ms.
Exercice 2: Les concentrations les plus élevées 15 points
Cherche les 10 concentrations les plus élevées, et affiche-les avec deux chiffres après la virgule. L'ordre n'est pas important.
Vérification
113.78 ug/m3 114.94 ug/m3 116.14 ug/m3 120.21 ug/m3 121.01 ug/m3 123.83 ug/m3 130.54 ug/m3 135.96 ug/m3 184.22 ug/m3 242.88 ug/m3
Exercice 3: Moyennes par jours 35 points
On aimerait calculer les concentrations moyennes de chaque jour. Mais puisque le temps entre deux mesures varie, on doit tenir compte de la largeur d'une mesure. On calcule la moyenne selon le schéma suivant:
Chaque mesure résulte en un rectangle de hauteur no2 et de largeur b - a. a se trouve au milieu des mesures i et i - 1, tandis que b est au milieu des mesures i et i + 1. Pour calculer la moyenne, on additionne l'aire de ces rectangles, et divise par le temps total (la largeur cumulée).
Lorsqu'il y a un trou de plus de 10 minutes, on étend les rectangles avant et après de 5 minutes maximum. Le premier et le dernier rectangle du jour sont coupés à minuit.
Calcule la moyenne de chaque jour — de minuit à minuit. Affiche pour chaque jour:
- le numéro du jour, commençant à 0
- le début du jour (minuit)
- la moyenne avec 5 chiffres après la virgule
- la durée totale des trous (⨯⨯⨯) en secondes
Vérification
JOUR DEBUT MOYENNE TROUS 0 1568239200000 50.15094 37677 1 1568325600000 44.56093 0 2 1568412000000 35.35122 0 3 1568498400000 37.05522 0 ...
Exercice 4: Concentrations par heure du jour 35 points
On s'intéresse aux concentrations par heure du jour. Pour chaque tranche de 15 minutes (96 tranches), détermine:
- le nombre de valeurs,
- la concentration moyenne,
- la concentration minimale,
- la concentration maximale.
Affiche ces résultats sous forme d'un tableau, avec l'heure de début et l'heure de fin de chaque tranche horaire. Affiche ces heures au format HH h MM, avec deux chiffres pour les heures et les minutes.
Vérification
DE A NOMBRE MOYENNE MIN MAX 00h00 00h15 111 23.485 0.02 75.38 00h15 00h30 109 21.773 0.45 88.64 00h30 00h45 96 21.526 0.15 90.80 00h45 01h00 96 18.433 0.13 61.09 01h00 01h15 112 16.862 0.04 52.71 01h15 01h30 111 17.620 0.40 56.26 ... 23h45 24h00 99 24.016 0.09 86.05
Rendre les fichiers
Rends le fichiers
- exercice1.c
- exercice2.c
- exercice3.c
- exercice4.c
sur Moodle.