Corrigé Banque PT 2025 Informatique et modélisation PT — Partie F (Q41 à Q43) : Trames NMEA : heure, latitude et somme de contrôle
Sujet officiel du concours Banque PT, session 2025, épreuve Informatique et modélisation PT. Corrigé rédigé par Ibrahim Alame.
Sujet officiel (PDF, site du concours)
Énoncé
Le récepteur transmet sa position sous forme de trames NMEA 0183 de type GGA : des champs séparés par des virgules, par exemple
$GPGGA,064036.289,4836.5375,N,00740.9373,E,1,04,3.2,200.2,M,,,,0000*0E
Champs utiles : indice 1, heure HHMMSS.SSS (ici ) ; indice 2, latitude absolue DDMM.MMMM (ici et ) ; indice 3, N ou S ; indices 4 et 5, longitude et E ou W ; après *, la somme de contrôle (deux chiffres hexadécimaux). trame.split(',') renvoie la liste des champs ; s[i:j] extrait les indices i inclus à j exclu.
Q41. Écrire heure(trame) renvoyant (h, m, s) : h, m entiers, s flottant. Q42. Écrire latitude(trame) renvoyant la latitude signée en degrés (Nord positive, Sud négative ; de degré).
Somme de contrôle : « OU exclusif » bit à bit (a\textasciicircum b en Python, commutatif, associatif, d'élément neutre 0) des codes ASCII (ord(c)) de tous les caractères strictement entre $ (toujours en tête) et * ; elle doit égaler l'entier écrit en hexadécimal après * (int(s, 16)). Exemple : pour '$0,1*2D', , soit 2D : trame valide. s.find('*') donne l'indice de la première occurrence de '*'.
Q43. Écrire controle(trame) renvoyant True si la somme de contrôle est correcte, False sinon.
Corrigé
Les trois fonctions ont été exécutées sur la trame de l'énoncé.
Q41. Le deuxième champ (indice 1) est '064036.289' : les deux premiers caractères donnent les heures, les deux suivants les minutes, le reste les secondes avec les millisecondes.
def heure(trame):
"""Heure d'envoi d'une trame GGA : tuple (h, m, s),
h et m entiers, s flottant (secondes et millisecondes)."""
champ = trame.split(',')[1] # 'HHMMSS.SSS'
h = int(champ[0:2])
m = int(champ[2:4])
s = float(champ[4:]) # 'SS.SSS'
return (h, m, s)
Sur l'exemple, heure(trame) renvoie (6, 40, 36.289). int('06') vaut bien : les zéros de tête ne gênent pas la conversion.
100 % gratuit
La suite du corrigé est sur Adloun
Le corrigé rédigé en entier, question par question, et le tuteur pour poser des questions sur ce sujet.
Voir le corrigé complet, gratuitementInscription gratuite en 30 secondes (e-mail, nom d'utilisateur, mot de passe, classe ou profil), sans carte bancaire : arrivée directe sur le corrigé.