# Projet 07 — La Météo # Algorithmes : Tri par insertion + Recherche dichotomique # Relevés du mois de mars : (numéro du jour, température en °C) releves = [ (1, 12.3), (2, 8.7), (3, 14.1), (4, 11.5), (5, 9.2), (6, 7.8), (7, 13.4), (8, 15.6), (9, 10.1), (10, 6.5), (11, 5.2), (12, 9.8), (13, 12.7),(14, 16.3),(15, 18.1), (16, 14.5),(17, 11.2),(18, 8.9), (19, 7.3), (20, 10.5), (21, 13.8),(22, 17.2),(23, 19.4),(24, 15.1),(25, 12.0), (26, 9.5), (27, 11.8),(28, 14.2),(29, 16.7),(30, 18.9), (31, 13.3), ] def afficher_releves(releves, nb=10): """Affiche les nb premiers relevés.""" print(f"\n {'Jour':>5} {'Température':>12}") print(" " + "-" * 20) for jour, temp in releves[:nb]: print(f" Jour {jour:>2} {temp:>8.1f} °C") if len(releves) > nb: print(f" ... ({len(releves) - nb} relevés supplémentaires)") print() def tri_insertion_temperatures(tab): """ Trie les relevés par température croissante (tri par insertion). Chaque élément est un tuple (jour, temperature). On trie selon le deuxième élément du tuple. """ for i in range(1, len(tab)): x = tab[i] j = i # TODO : comparer tab[j-1][1] et x[1] while j > 0 and ...: tab[j] = tab[j - 1] j -= 1 tab[j] = x return tab def statistiques(tab_trie): """Affiche les statistiques à partir des relevés triés.""" n = len(tab_trie) min_releve = tab_trie[0] max_releve = tab_trie[n - 1] mediane = tab_trie[n // 2] print("Statistiques du mois :") print(f" Minimum : {min_releve[1]:.1f} °C (jour {min_releve[0]})") print(f" Maximum : {max_releve[1]:.1f} °C (jour {max_releve[0]})") print(f" Médiane : {mediane[1]:.1f} °C (jour {mediane[0]})") # TODO : ajouter la moyenne print() def temperature_atteinte(tab_trie, t): """ Recherche dichotomique : retourne True si la température t a été relevée au cours du mois (comparaison exacte). """ a = 0 b = len(tab_trie) - 1 while a <= b: m = (a + b) // 2 temp_m = tab_trie[m][1] if temp_m == t: return True elif temp_m < t: # TODO pass else: # TODO pass return False def histogramme(tab_trie): """Affiche un histogramme horizontal des températures (arrondi à l'entier).""" # Compter les occurrences par degré entier compteur = {} for _, temp in tab_trie: degre = int(temp) compteur[degre] = compteur.get(degre, 0) + 1 print("Histogramme des températures :") for degre in sorted(compteur): barre = "█" * compteur[degre] print(f" {degre:>3}°C | {barre} ({compteur[degre]})") print() # --- Programme principal --- print("=== Analyse Météo — Mars ===") print("\nRelevés originaux (10 premiers) :") afficher_releves(releves, nb=5) # Trier une copie pour ne pas perdre l'ordre chronologique releves_tries = releves[:] tri_insertion_temperatures(releves_tries) print("Relevés triés par température :") afficher_releves(releves_tries, nb=5) statistiques(releves_tries) histogramme(releves_tries) # Tests de recherche print("Recherches :") for t in [5.2, 15.0, 19.4, 20.0]: present = temperature_atteinte(releves_tries, t) print(f" {t}°C relevé ce mois-ci ? {'Oui' if present else 'Non'}")