Problèmes Corrigés - Python
Problèmes Corrigés - Python
Problèmes Corrigés - Python
Algorithmique et
programmation en Python
M. Lazhar Zouari
Problème 1
Un CODEC est un logiciel compresseur décompresseur de fichiers. En effet, les suites de bits
composant un fichier comportent des similitudes comme 10000111. Plutôt que de stocker la
totalité de cet octet, on gagne de la place en écrivant 14031 (qui se lit un quatre zéros trois
un). Cet octet (huit bits) retrouva ensuite son format original à la décompression.
Il s’agit alors de saisir une chaîne de huit chiffres formés uniquement 0 et 1 pour désigner un
octet puis la compresser suivant le principe de compression du CODEC et enfin l’afficher.
Exemple : Si octet = ˝10010111˝ Alors l’octet compressé est : ˝1201031˝
Solution
def saisir():
ch = ""
while ((len(ch) !=8) or (not binaire(ch))):
ch = input ("Tapez une chaîne binaire : ")
return ch
octet = saisir()
octetCom = compresser(octet)
print ("Si octet = ",octet, "Alors l'octet compressé est : ", octetCom)
Page |1
Problème 2
Écrire un programme qui permet de saisir une chaîne de chiffres CH, de chercher la
combinaison maximale CMAX et la combinaison minimale CMIN qu’on peut obtenir à partir
des chiffres de CH, et enfin de les afficher. Pour déduire CMAX à partir de CH, on vous
propose les étapes suivantes : Chercher le plus grand chiffre dans CH Le placer dans la chaîne
CMAX et CMIN Remplacer le chiffre qui était le plus grand par le caractère ˝*˝.
Solution
def PosPlusGrand(ch):
j, l = 0, len(ch)
for i in range (1, l):
if ch[i] > ch[j] :
j=i
return j
def minMax(ch):
ch1, ch2, l = "", "", len(ch)
for i in range(l):
p = PosPlusGrand(ch)
ch1 = ch[p] + ch1
ch2 = ch2 + ch[p]
ch = ch[:p] + ch[p+1:]
return ch2, ch1
ch = saisir()
cmax, cmin = minMax (ch)
print("La combinaison minimale ",cmin)
print("La combinaison maximale ",cmax)
Page |2
Problème 3
Écrire un programme Python qui permet de remplir un tableau T par n caractère (6 ≤ n ≤ 30).
Et de répartir ces n caractères sur trois tableaux et les afficher :
TL : Tableau de lettres
TC : Tableau de chiffres
TS : Tableau de symboles
Exemple :
Soit n = 10
T H 4 ! K } 2 R $ 8 d
TL H K R d TC 4 2 6 TS ! } $
Solution
Page |3
def remplir(x):
vect = array([str()]*x)
for i in range(x):
while len(vect[i]) != 1 :
vect[i] = input ("Valeur de l'élément N ° " + str(i+1) + " : ")
return vect
n = saisir ()
t = remplir(n)
tl, tc, ts, n1, n2, n3 = repartir(t,n)
print ("Les lettres : ")
afficher (tl, n1)
print ("\nLes chiffres : ")
afficher (tc, n2)
print ("\nLes symboles : ")
afficher (ts, n3)
Problème 4
Écrire un programme Python qui permet de déterminer et d’afficher tous les diviseurs suivis de
tous les multiples d’un entier p donné, dans une partie d’un tableau T de n entiers donnés. Cette
partie est délimitée par deux indices indInf et indSup. (0 ≤ indInf < indSup < n ≤ 15).
Exemple :
0 1 2 3 4 5 6 7 8 9 10 11 12 13
T 25 32 43 4 32 72 80 15 24 2 48 56 10 14
indInf indSup
Page |4
Solution
def saisir():
x=0
while not(x in range(2, 16)) :
x = int(input("Nombre des éléments : "))
return x
def remplir(x):
from numpy import array
vect = array([int()]*x)
for i in range(x):
vect[i] = int(input("Valeur de l'élément N ° " + str(i+1) + " : "))
return vect
n = saisir ()
t = remplir(n)
indInf, indSup = indices(n)
p = int(input("Tapez un entier"))
diviseurs, multiples = determiner (p, t, indInf, indSup)
print ("Les diviseurs de ", p, " sont : ", diviseurs)
print ("Les multiples de ", p, " sont : ", multiples)
P a g e |5
Problème 5
L’algorithme suivant est celui d’une fonction permettant de calculer la somme d’une partie
d’éléments d’un tableau T de n entiers, délimité par les indices p1 et p2.
Fonction somme (T : TAB ; p1, p2 : entier) : entier
DEBUT
s0
Pour i de p1 à p2 faire
s s + T[i]
Fin Pour
Retourner s
FIN
En exploitant la fonction dont l’algorithme est ci-dessus, Écrire un programme Python qui
permet de :
• Saisir un tableau V de N entiers strictement positifs (5 ≤ n ≤ 20).
• Afficher l’indice (ind) de l’élément du tableau dont l’écart entre la somme (s1) des
éléments qui le précédent et celle des éléments qui le succèdent (s2) soit minimal
• Afficher les sommes s1 et s2 correspondantes
Exemple
Solution
P a g e |6
def ecartMin (t, x):
e1, e2, j = -1, 0, 1
while ((e2 > e1) and (j != x - 1)):
j=j+1
e1 = somme (t, 0, j - 1)
e2 = somme (t, j + 1, x - 1)
return j, e1, e2
n = saisir ()
v = remplir (n)
ind, s1, s2 = ecartMin (v, n)
print ('S1 = ', s1,' , S2 = ', s2,' et ind = ', ind)
Page |7