Physique-Chimie & NSI

Cours complets et originaux de Physique-Chimie & NSI

Devoir n°5
Bac blanc
3h30

Sujet : Amérique du Sud 2025 – sujet 2

Correction

Exercice 1 (6 pts)

1. NOUMEA

[0,5]

2. SELECT nom FROM station ORDER BY nom

[1]

3. Force et direction du vent à BOURAKE le 2 janvier 2023 à 14h.


					SELECT forceVent, dirVent FROM observation
					JOIN station ON observation.idStat = station.idStat
					WHERE station.nom = "BOURAKE" AND observation.date = 2023010214
				
[1]

4. SELECT COUNT(idObs) FROM observation

[1]

5. Schéma relationnel de la table meteo. La question n’a aucun sens… ou alors, n’est vraiment pas claire. 🙄 Une telle table n’a aucun intérêt, on doit plutôt utiliser une requête avec JOIN pour obtenir des résultats similaires.

meteo
idObs idStat nom latitude longitude date temp

On peut préciser que idObs doit être la clé primaire, et que idObs et idStat sont deux clés étrangères.

[0,5]

6. Effets de chaque commande :

  1. crée une liste avec le contenu du fichier CSV, chaque ligne est elle-même une liste des valeurs de chaque ligne.
  2. supprime la première ligne du tableau précédent, contenant le nom des champs.
  3. convertit les chaînes de caractères de chaque ligne en int ou en float le cas échéant (à l’origine, toutes les valeurs sont des str).
  4. affiche le contenu du premier élément de list_obs

On obtient une liste d’observations ne contenant que des valeurs, dans l’ordre donné par le fichier CSV, les valeurs numériques étant converties dans le format approprié (int ou float).

Pas de pénalité si ce qu’on obtient n’est pas explicitement spécifié, mais que ça appraît clairement lors de la description des commandes.

[1]

7. import math

[0,5]

8. Lignes 42 et 43 de la fonction coord


				if obs[1] == stat_ref:
					return obs[2], obs[3]
			
[1]

9. Pseudo-code de la fonction liste_stations.

L’énoncé n’est pas clair, mais on part du principe que la fonction distance est utilisable.


				fonction liste_stations(l_obs, stat_ref, dist)
					ref.lat, ref.lon = coord(l_obs, stat_ref)
					liste_id_stations ← []
	
					pour chaque observation o de la liste:
						dist_obs = distance ((o.latitude, o.longitude), (ref.lat, ref.lon))
						si dist_obs < dist
						et o.id_station n’est pas dans liste_id_stations
						et o.nom_station ≠ stat_ref:
							ajouter o.id_station à liste_id_stations
	
					renvoyer liste_id_stations
			
[1,5]

10. Fonction nettoyage

Là encore, la question n’est pas bien claire. 🙄 On suppose que la « liste des températures des stations » veut en fait dire « liste des températures des observations faites par des stations »…


				def nettoyage(l_obs, stat_ref):
					temperatures = []
					l_id_station = liste_stations(l_obs, stat_ref, 2000)
					for o in l_obs:
						if o.id_station in l_id_station:
							temperatures.append(o.temperature)
					return temperatures
			
[1,5]

11. Fonction moyenne

Pas clair non plus… 🙄 Quelle est la nature de la liste passée en paramètre ? une liste d’observation ? Une liste ne contenant que des float, telle que la liste renvoyée par la fonction nettoyage ? Je suppose qu’il s’agit du deuxième cas de figure, pour que cette question ait un sens par rapport à la question précédente.


				def moyenne(liste):
					somme = 0
					nbre_val = 0
					for e in list:
						if type(e) == float:
							somme += e
							nbre_val += 1
					return somme/nbre_val
			

Pas de pénalité si pas de vérification de type

[1,5]

12 Moyenne des températures des stations situées à moins de 2000 unités de la station Paris_11 le 1 janvier 2024


				l_obs = creation_liste_obs("observations2.csv")
				l_obs = supp_champs(l_obs)
				transtype(l_obs)
				l_temp = nettoyage(l_obs, "Paris_11")
				moy_temp = moyenne(l_temp)
			

C si oubli de la partie conversion du fichier CSV

[1]

Exercice 2 (6 pts)

1. On peut verser le tube 4 dans le tube 3 plutôt que l’inverse.

[1]

2. Une pile est une structure de données linéaires de type LIFO (Last In First Out). Lorsqu’on ajoute un élément à une pile via la méthode empiler, il est placé au « sommet » de la pile. Lorsqu’on retire un élément de la pile via la méthode dépiler, on obtient de dernier élément à avoir été placé dans la pile.

[1]

3. ligne 11 : on attribue la couleur empilée couleur à la dernière phase du tube self.contenu[self.taille].
ligne 12 : on ajoute une phase au tube.

[1]

4. La méthode dépiler. On suppose que cette méthode renvoie la couleur dépilée le cas échéant.


				if ... :
					...
					couleur = self.contenu[self.taille]
					...
					return couleur
				else:
					return -1
			

B si renvoie autre chose que la couleur

[1]

5. Méthode est_plein


				def est_plein(self):
					return self.taille == 3
			
[1]

6. Méthode est_homogene


				def est_homogene(self):
					return self.contenu[0] == self.contenu[1] == self.contenu[2] != 0
			
[1,5]

7. Méthode derniere_couleur


				def derniere_couleur(self):
					return self.contenu[self.taille-1] if self.taille > 0 else -1
			
[1,5]

8. Méthode verser


				def verser(self, other):
					while self.taille > 0
					and not other.est_plein()
					and self.derniere_couleur() == other.derniere_couleur()
						couleur = self.depiler()
						other.empiler(couleur)
			
[1,5]

9. Passage de l’état figure 2 à l’état figure 3.


				etat[0].verser(etat[1])
			
[1]

10. fonction gagne


				def gagne(etat):
					vide = 0
					homogenes = 0
					for tube in etat:
						if tube.est_vide(): vide += 1
						if tube.est_homogene(): homogenes += 1
					return vide == 1 and homogenes == 3
			
[1,5]

Exercice 3 (8 pts)

1. [2, 5]

[0,25]

2. Fonction voisins (qui n’a aucun intérêt vu que son nom, à lui seul, est plus long que le code qu’elle exécute… 🙄)


				def voisins(graphe, k):
					return graphe[k]
			
[0,25]

3. Fonction degre_du_sommet


				def degre_du_sommet(graphe, k):
					return len(graphe[k])
			
[0,5]

4. Fonction degre_sommets


				def degre_sommets(graphe):
					liste = []
					for s,v in graphe.items():
						liste.append((s, len(v)))
					return liste
			
[1]

5. L’erreur vient de la ligne 4. La valeur de i atteindra la valeur de len(l_deg) inclus, ce qui n’est pas possible. Il faut écrire for i in range (len(l_deg)).

[0,5]

6. À chaque itération, la fonction recherche le maximum du sous-tableau restant et l’échange avec l’élément courant, ce qui correspond au tri par sélection.

[0,25]

7. Fonction tri_sommets


				def tri_sommets(graphe):
					etape1 = degre_sommets(graphe)
					etape2 = tri_liste(etape1)
					liste_sommets = []
					for t in etape2:
						liste_sommets.append(t[0])
					return liste_sommets
			
[1]

8. La variable coloration_sommets est un dictionnaire. Les clés sont les sommets du graphe, toutes les valeurs sont initialisées à None.

[0,5]

9. On suit l’algo pas à pas sur un brouillon. C’est un peu laborieux, mais ça se fait. On obtient :
{1: vert, 2: bleu, 3: rouge, 4: vert, 5: rouge, 6: bleu, 7: bleu, 8: bleu, 9: rouge}

[0,5]

10. cp prog1.py ../travail/tp/

[0,25]

11. ping 190.12.10.25

[0,5]

12. 12.128.0.2

[0,5]

13. P1 → S1 → R1 → R2 → R3 → R8 → R9 → S2 → P2

[0,5]

14. RIP (minimise le nombre de saut)

[0,5]

15. Resp. 1, 0,1 et 0,01.

[0,5]

16. (P1 → S1 → R1) → R5 → R6 → R4 → (R3 → R8 → R9 → S2 → P2)

0 si pas passage par R6

[0,5]