Exercice d'algorithmique et programmation
Exercice d'algorithmique et programmation
A.S. : 2020/2021 1
Exercice 2 : (4.75 points)
Dans un contexte informatique et pour chacune des propositions citées ci-dessous, mettre dans chaque case, la
lettre V si la proposition est correcte ou la lettre F dans le cas contraire.
1. L’équivalent Python de ouvrir ("[Link]", F) :
open ("[Link]", F)
F = open ("[Link]")
F = open ([Link])
2. La déclaration en Python d’un tableau de N caractères :
T = array([str]*N)
T = array([str()]*N)
T = array([""]*N,(str,150))
T = array([""]*N,"U")
3. La déclaration d’un enregistrement en Python :
Nom = { Nom = { } Nom = {
Champ1 : Type1, "Champ1" : Type1,
Champ2 : Type2, "Champ2" : Type2,
ChampN : TypeN "ChampN" : TypeN
} }
A.S. : 2020/2021 2
Problème : (9 pts)
Pour calculer le chiffre de chance, on utilise les pyramides de chance qui sont construits à partir des lettres du
prénom et du nom de la manière suivante :
Traduisez d’abord en chiffre les lettres du prénom et du nom selon le tableau de correspondance
suivant :
1 2 3 4 5 6 7 8 9
A B C D E F G H I
J K L M N O P Q R
S T U V W X Y Z
N.B. : Si le prénom ou le nom sont composés, considérez-le comme un seul (sans espaces)
Notez chaque chiffre en dessous de la lettre qui lui correspond. Additionnez ensuite les chiffres deux
par deux (chiffre i + chiffre i+1) jusqu’à obtenir les pyramides renversées ci-dessous. A la pointe de
ces pyramides, vous obtenez les chiffres correspondant à votre prénom et à votre nom.
N.B. : si la somme dépasse 9, on additionne les chiffres de la somme
Exemple :
Pour le nom « HOUDA » et le prénom « BENMOHAMED »
A.S. : 2020/2021 3
Travail demandé :
On se propose d’écrire un programme qui permet :
De lire N (4 ≤ N ≤ 10) noms et prénoms composés des lettres majuscules uniquement
De créer et remplir un fichier texte nommé « [Link] » par les prénoms, les noms et les nombres de
chance.
N.B. : chaque ligne contiendra un prénom, un espace, un nom et son nombre de chance précédé par
« : ».
Exemple :
Soient les prénoms et les noms suivants : AHMED BENALI, MARIEM NAFFATI, IBAE
BENAMOR, NOUREDDINE MARZOUGUI
Le fichier « [Link] » sera le suivant :
Questions :
1. Ecrire un algorithme modulaire solution pour le problème.
2. Ecrire un algorithme solution pour chaque module envisagé.
N.B. : Chaque algorithme proposé doit être accompagné d’un tableau de déclaration des objets.
Bon Travail
A.S. : 2020/2021 4
Solutions
Exercice 3 :
def anagramme(ch1,ch2):
ch1=[Link]()
ch2=[Link]()
while (ch1!="")and(ch2!="")and([Link](ch1[0])>=0):
ch2=ch2[0:[Link](ch1[0])]+ch2[[Link](ch1[0])+1:len(ch2)]
ch1=ch1[1:len(ch1)]
return (ch1=="")and(ch2=="")
print(anagramme("aimer","maire"))
Problème :
from numpy import *
def chiffre_chance(ch):
T1=array([int]*len(ch))
for i in range(len(ch)):
T1[i]=(ord(ch[i])-64)%9
if T1[i]==0:T1[i]=9
while len(T1)>1:
T2=array([int]*(len(T1)-1))
for i in range(len(T1)-1):
T2[i]=T1[i]+T1[i+1]
if T2[i]>9:T2[i]=T2[i]%10 + T2[i]//10
T1=T2
return T1[0]
def verif(ch):
i=0
while ("A"<=ch[i]<="Z")and(i<(len(ch)-1)):
i=i+1
return ("A"<=ch[i]<="Z")
def saisie(ch1):
ch="5"
while (len(ch)==0) or not verif(ch):
ch=input(ch1+":")
return ch
def remplir(f,n):
for i in range(n):
prenom=saisie("Prénom")
nom=saisie("Nom")
s=chiffre_chance(prenom)+chiffre_chance(nom)
s=s//10 + s%10
[Link](prenom+" "+nom+":"+str(s)+"\n")
[Link]()
n=0
while not (n in range(4,11)):
n=int(input("N="))
f=open("[Link]","wt")
remplir(f,n)
A.S. : 2020/2021 5