Écris une fonction qui calcule et affiche :
- La distance minimale
- La distance maximale
- La distance moyenne
- Le nombre de mesures invalides
Solution :
#include <stdio.h>
#include <stdint.h>
#include <limits.h>
void statistiques_lidar(uint16_t matrix[64])
{
uint16_t min = UINT16_MAX;
uint16_t max = 0;
uint32_t somme = 0;
int invalides = 0;
for (int i = 0; i < 64; i++) {
/* Mesures invalides : 0 ou > 4000 mm */
if (matrix[i] == 0 || matrix[i] > 4000) {
invalides++;
continue;
}
if (matrix[i] < min) {
min = matrix[i];
}
if (matrix[i] > max) {
max = matrix[i];
}
somme += matrix[i];
}
int valides = 64 - invalides;
float moyenne = (valides > 0) ? (float)somme / valides : 0.0f;
printf("=== Statistiques LIDAR ===\n");
printf("Min : %d mm\n", min);
printf("Max : %d mm\n", max);
printf("Moyenne : %.1f mm\n", moyenne);
printf("Invalides: %d / 64\n", invalides);
}
int main(void)
{
/* Données LIDAR simulées (distances en mm) */
uint16_t matrix[64] = {
500, 510, 520, 530, 540, 550, 560, 570,
480, 490, 500, 510, 520, 530, 540, 550,
460, 470, 480, 490, 500, 510, 520, 530,
440, 450, 460, 470, 480, 490, 500, 510,
420, 430, 440, 450, 460, 470, 480, 490,
400, 410, 420, 430, 440, 450, 460, 470,
0, 380, 390, 400, 410, 420, 430, 440, /* 0 = invalide */
360, 370, 380, 390, 400, 410, 5000, 430 /* 5000 = invalide */
};
statistiques_lidar(matrix);
return 0;
}
Solution copiée dans l'éditeur.