Algorithmes et structures de données Cours 8 Patrick Reuter http://www.labri.fr/~preuter
Algorithmes et structures de données
Cours 8
Patrick Reuter
http://www.labri.fr/~preuter
• conditions nécessaires
• conditions suffisantes
Motivation
• Niklaus Wirth, ETH Zuerich, 1976« Algorithms + Data Structures = Programs »
Algorithme et programmes
Algorithme– Moyen d’atteindre un but en répétant un
nombre fini de fois un nombre fini d’instructions.
– Donc, un algorithme se termine en un temps fini.
Programme– Un programme est la traduction d’un
algorithme en un langage– compilable ou interprétable par un ordinateur.
• http://www.cifen.ulg.ac.be/inforef/swi/download/python_notes.pdf
Variables
• Permet de stocker des données au cours d’un algorithme
Structure de données la plus élémenataire
• Caractérisé par leur nom et leur type
Variables
Caractérisé par leur nom et leur type
Noms :
• Les noms des variables sont conventionnellement écrits en minuscule. Ils commencent par une lettre ou le caractère souligné (_), puis éventuellement, des lettres, des chiffres ou le caract`ere souligné.
• Ils doivent être diff´erents des mots réservés de Python.
Variables
Caractérisé par leur nom et leur type
• Nom :x
y
z
i
pointsJoueur1
pointsJoueur2
Types de variables
Variables
Type simples:
Type booléen– Vrai/faux (p.ex. True, boolean)
Type entier– Nombre entier (p.ex. 5, int)
Type flottant– Nombre à virgule flottant (p.ex. 5.12, float)
Types simples
Type booléen• Deux valeurs possibles : FAUX (False), VRAI (True)• Opérateurs de comparaison : ==, !=, >, >=, <, <=
• 2 > 8 # Faux• 2 <= 8 # Vrai
• Opérateurs logiques : NON (not), OU (or), ET (and) • (3 == 3) or (9 > 24) # Vrai• (9 > 24) and (3 == 3) # Faux• not(2==2) # Faux
Types simples
Type entier20 + 3 # 2320 - 3 # 1720 * 3 # 6020 ** 3 # 800020 / 3 # 6 (division entière)20 % 3 # 2 (modulo (reste de
la division entière)
Types simples
Type entier long– Les entiers longs (seulement limités par la
mémoire vive)
– 2 ** 40 # 1099511627776L– 3 * 72L # 216L
Types simples
Type flottant• Les flottants sont not´es avec un « point d
´ecimal » ou en notation exponentielle :
2.718 #3e8 # 3 * 108
6.023e23 # 6.023 * 1023
2. # 23.0 # 3
• Ils supportent les mêmes opérations que les entiers, sauf :20.0 / 3 # 6.66666666666666720.0 // 3 # 6 (division entière forcée)
• Pour connaître le type d'une variable :
a = 3
print type(a)
b = 3.5
print type(b)
Les chaînes de caractères
Notations :
• Les guillemets
c1 = "L’eau de l'océan"
Longueur :
s = "abcde"
print len(s) # 5
Concaténation :
s1 = "abc"
s2 = "defg"
s3 = s1 + s2 # ’abcdefg’
On indique, entre crochets, la position d’un caractère par un indice qui commence à 0
s = "abcdefg"
print s[0] # a
print s[2] # c
Les listes
Les listes
• Collection hétérogène, ordonnée et modifiable d’éléments séparés
• par des virgules, et entourée de crochets.
nombres = [17, 38, 10, 25, 72]
print nombres[0] # 17print nombres[4] # 72print len(nombres) # 5
Les listes
• Collection hétérogène, ordonnée et modifiable d’éléments séparés
• par des virgules, et entourée de crochets.
nombres = [17, 38, 10, 25, 72]
Afficher tout les nombres :
nombres = [17, 38, 10, 25, 72]
Afficher tout les nombres :
nombres = [17, 38, 10, 25, 72]
i = 0TANT QUE i < len(nombres) FAIRE
afficherLigne(nombres[i])i = i + 1
FIN TANT QUE
Afficher uniquement les nombres pairs :
nombres = [17, 38, 10, 25, 72]
Afficher uniquement les nombres pairs :
nombres = [17, 38, 10, 25, 72]i = 0TANT QUE i < len(nombres) FAIRE
SI nombres[i] % 2 == 0 ALORSafficherLigne(nombres[i])
FIN SIi = i + 1
FIN TANT QUE
Affectation
nombres = [17, 38, 10, 25, 72];nombres[0] = 100;print nombres;
Résultat :
[100, 38, 10, 25, 72]
• indice d'une liste ou d'une chaîne de caractères :
s = "Bonjour";
premiereLettre = s[0];
deuxiemeLettre = s[1];
Fonctions prédéfinies
• par exemple connaître la longueur d'une chaîne :
longueur = len(nombres);
parenthèses !
• Combinaison :
derniereLettre = s[len(s) – 1];
• Solution de quelques exercices :
Grilles de sudoku
Grilles de sudoku
5 3 1 8 7 2 9 4 6
Grilles de sudoku
grille0 = [5,3,1,8,7,2,9,4,6];
5 3 1 8 7 2 9 4 6
Grilles de sudokugrille0 = [5,3,1,8,7,2,9,4,6];
grille1 = [2,3,1,8,7,2,9,4,5];5 3 1 8 7 2 9 4 6
2 3 1 8 7 2 9 4 5
Grilles de sudokugrille = [ [5,3,1,8,7,2,9,4,6],
[1,2,5,9,7,8,3,6,4],[1,2,5,9,7,8,3,6,4],[1,2,5,9,7,8,3,6,4],[1,2,5,9,7,8,3,6,4],[1,2,5,9,7,8,3,6,4],[1,2,5,9,7,8,3,6,4],[1,2,5,9,7,8,3,6,4],[1,2,5,9,7,8,3,6,4] ];
print grille[0][0];