Chiffres Romains : Algo & Prog - Exercice Python

Telechargé par walid bouaziz
Lycée SSB Moknine Algo & prog
M. Karchoud Radhouane Page : 1 4SI
Chiffres Romains
Les chiffres romains sont :
I
V
X
L
C
D
M
1
5
10
50
100
500
1000
Un nombre romain est une chaîne contenant uniquement les lettres suivantes : I, V, X, L, C, D, M
Un nombre romain est calculé selon le principe suivant :
- Tout chiffre placé à droite d'un autre plus grand, s'ajoute : V I I = 7 (5 + 1 + 1)
- Tout chiffre placé à gauche d'un autre nombre plus grand, se retranche : I X = 9 (= -1 + 10 = 10 1)
On se propose dans la suite de remplir un fichier text romain.txt par des chaînes (comme indiqué en
haut) qui désignent des nombres romains (la saisie se termine à la demande de l’utilisateur). Former puis
afficher un fichier romain.dat par des enregistrements qui contiennent la chaîne pris du premier fichier
ainsi que son équivalent numérique.
Exemple :
Travail demandé :
1- Remplir un fichier texte par des chaînes romaines de longueur max = 10.
2- Former un fichier d’enregistrement à partir du premier fichier comme indiqué ci-dessus :
a. Le premier champ est une chaîne prise du fichier text.
b. Le deuxième champ correspond à la valeur numérique de la chaîne. Le calcul de la valeur
suit les règles précédentes.
Lycée SSB Moknine Algo & prog
M. Karchoud Radhouane Page : 2 4SI
Solution en PYTHON
from pickle import *
romain = {"rom":str,"val":int}
def affiche(ft):
print("---------------1éme méthode: fichier texte----------------")
ch = ft.read()
print(ch)
ft.close()
print("---------------2éme méthode: fichier texte----------------")
ft = open(nom_physique_texte,"r")
ch = ft.readline()
while ch != "":
print(ch[:len(ch)-1])
ch = ft.readline()
ft.close()
def equivalent(c):
if c == "I":
return 1
elif c == "V":
return 5
elif c == "X":
return 10
elif c == "L":
return 50
elif c == "C":
return 100
elif c == "D":
return 500
elif c == "M":
return 1000
def valeur_romain(ch):
v = 0
for i in range(len(ch)-1):
if equivalent(ch[i]) < equivalent(ch[i+1]):
v = v - equivalent(ch[i])
else:
v = v + equivalent(ch[i])
v = v + equivalent(ch[len(ch)-1])
return v
def former(f,ft):
ft = open(nom_physique_texte,"r")
ch = ft.readline()
while ch != "":
r = {}
r["rom"] = ch
r["val"] = valeur_romain(ch[:len(ch)-1])
dump(r,f)
Lycée SSB Moknine Algo & prog
M. Karchoud Radhouane Page : 3 4SI
#print(r["rom"][:len(r["rom"])-1],r["val"])
ch = ft.readline()
ft.close()
f.close()
def affiche_binaire(f):
print("---------------1éme méthode: fichier binaire----------------")
f = open (nom_physique_binaire, "rb")
while True :
try :
r = load (f)
print (r["rom"]," ", r["val"])
except :
break
f.close ()
print("---------------2éme méthode: fichier binaire----------------")
f = open (nom_physique_binaire, "rb")
for i in range(0,6):
r = load (f)
print (r["rom"]," ", r["val"])
f.close()
# --- PP ---
nom_physique_texte = "romain.txt"
nom_physique_binaire = "romain.dat"
print("contenu du fichier texte romain.txt")
ft = open(nom_physique_texte,"r")
affiche(ft)
f = open(nom_physique_binaire,"wb")
former(f,ft)
print("contenu du fichier romain.dat")
affiche_binaire(f)
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!