Telechargé par walid bouaziz

Chiffres Romains (fichier texte et binaire)

publicité
Lycée SSB Moknine
Algo & prog
Chiffres Romains
Les chiffres romains sont :
I
1
V
5
X
10
L
50
C
100
D
500
M
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.
M. Karchoud Radhouane
Page : 1
4SI
Lycée SSB Moknine
Algo & prog
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)
M. Karchoud Radhouane
Page : 2
4SI
Lycée SSB Moknine
Algo & prog
#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)
M. Karchoud Radhouane
Page : 3
4SI
Téléchargement