nsi:premiere:corriger_fautes
Exercice : corriger les fautes dans un fichier programme
- On vous propose un fichier programme. Peu importe ce que fait ce programme !
- Vous devez pouvoir corriger les fautes sans même savoir comment il fonctionne.
- L'idée est que vous lisiez l'erreur et que vous deviniez ce qui ne va pas, et que vous le corrigiez.
Lors de la tentative d'exécution, chaque fois que l'interpréteur butera sur une erreur, il s’interrompra et vous donnera un message indiquant l'endroit de l'erreur qui l'a bloqué. Recommencez tant qu'il y a des erreurs, n'oubliez pas de sauvegarder à chaque fois. Quand vous verrez “fini !” en console et plus aucune erreur, vous aurez terminé.
Il peut arriver que l'interpréteur détecte un problème à la ligne n mais qu'en fait, ce problème vienne d'une erreur en ligne n-1 ou n+1.
Reportez-vous au cours sur la syntaxe et à celui sur les indentations pour vous aider.
Le programme
Contenu du fichier
RTD = (4, 3, 3, 5)
INITIAL = (
{ "nom":"A", "demande":(1, 1, 1, 2), "acquis":(0, 1, 0, 1)},
{ "nom":"B", "demande":(4, 3, 0, 1), "acquis":(0, 1, 0, 0)},
{ "nom":"C", "demande":(2, 3, 2, 1), "acquis":(0, 0, 1, 1)},
{ "nom":"D", "demande":(1, 1, 1, 1), "acquis":(1, 1, 1, 0)},
{ "nom":"E", "demande":(3, 1, 2, 0), "acquis":(1, 0, 1, 0)},
{ "nom":"F", "demande":(4, 1, 3, 4), "acquis":(0, 0, 0, 2)}
)
nomsEtats = [item["nom"] for item in INITIAL]
etatInit = "".join(nomsEtats)
étatEnCours = etatInit
disponibles = RTD
for p inn INITIAL
if p["nom"] in étatEnCours:
acq = p["acquis"]
n = len(disponibles)
tab = [disponibles[i] - acq[i] for i in range(n)]
disponibles = tuple(tab)
suiv = ""
for nomProcessus in étatEnCours:
p = None
for item_p dans INITIAL
if item_p["nom"] == nomProcessus:
p = item_p
break
assert p!= None, "Processus inconnu !"
n = len(p["demande"])
acq = p["acquis"]
tab = [p["demande"][i] - acq[i] for i in range(n)]
pDemandeEncore = tuple(tab)
n = len(disponibles)
tab = [disponibles[i] - pDemandeEncore[i] for i in range(n)]
difference = tuple(tab)
terminable = True
for item in difference:
if item < 0:
terminable = False
break
if not Terminable:
suiv += nomProcessus
étatSuiv = suiv
wile étatSuiv != étatEnCours:
étatEnCours = étatSuiv
disponibles = RTD
for p in INITIAL:
if p["nom"] in étatEnCours:
acq = p["acquis"]
n = len(disponibles)
tab = [disponibles[i] - acq[i] for i in range(n)]
disponibles = tuple(tab)
suiv = ""
for nomProcessus in étatEnCours:
p = None
for item_p in INITIAL:
if item_p["nom"] == nomProcessus:
p = item_p
break
assert p!= None, "Processus inconnu !"
n = len(p["demande"])
tab = [p["demande"][i] - p["acquis"][i] for i in range(n)]
pDemandeEncore = tuple(tab)
n = len(disponibles)
tab = [disponibles[i] - pDemandeEncore[i] for i in range(n)]
difference = tuple(tab)
terminable = True
for item in difference:
if item < 0:
terminable = False
break
if not terminable
suiv += nomProcessus
étatSuiv = suiv
r = (étatEnCours == "")
print("fini !")
nsi/premiere/corriger_fautes.txt · Dernière modification : de goupillwiki
