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 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 Type entier Type flottant 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 entier 20 + 3 # 23 20 - 3 # 17 20 * 3 # 60 20 + 3 # 23 20 - 3 # 17 20 * 3 # 60 20 ** 3 # 8000 20 / 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. # 2 3.0 # 3 Ils supportent les mêmes opérations que les entiers, sauf : 20.0 / 3 # 6.666666666666667 20.0 // 3 # 6 (division entière forcée)
Pour connaître le type d'une variable : 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] # 17 print nombres[4] # 72 print 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 :
Afficher tout les nombres : TANT QUE i < len(nombres) FAIRE afficherLigne(nombres[i]) i = i + 1 FIN TANT QUE
Afficher uniquement les nombres pairs :
Afficher uniquement les nombres pairs : TANT QUE i < len(nombres) FAIRE SI nombres[i] % 2 == 0 ALORS afficherLigne(nombres[i]) FIN SI i = 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 sudoku grille0 = [5,3,1,8,7,2,9,4,6]; 5 3 1 8 7 2 9 4 6 2 3 1 8 7 2 9 4 5
Grilles de sudoku grille = [ [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] ]; print grille[0][0];