algorithmes et structures de données cours 7 patrick reuter preuter
TRANSCRIPT
Algorithmes et structures de données
Cours 7
Patrick Reuter
http://www.labri.fr/~preuter
Motivation
• Niklaus Wirth, ETH Zuerich, 1976« Algorithms + Data Structures = Programs »
Algorithme
L'algorithmique :– Science des algorithmes,– visant à étudier les opérations nécessaires à la
réalisation d'un calcul.
René Descartes dans le Discours de la Méthode : • « diviser chacune des difficultés que
j'examinerois, en autant de parcelles qu'il se pourroit, et qu'il seroit requis pour les mieux résoudre. ».
Algorithme
• Plus ou moins détaillé selon le niveau d'abstraction du langage utilisé
• autrement dit : une recette de cuisine doit être plus ou moins détaillée en fonction de l'expérience du cuisinier
Structure de donnéesDéfinition Wikipedia (12/9/2005)
• une structure logique destinée à contenir des données afin de leur donner une organisation permettant de simplifier leur traitement.
• Exemple : On peut présenter des numéros de téléphone *
- par département, - par nom - par profession (pages jaunes),- par numéro téléphonique (annuaires destinés au télémarketing),- par rue et/ou - une combinaison quelconque de ces classements.
À chaque usage correspondra une structure d'annuaire appropriée.
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
Variables
Mais non pas :3x (doivent commencer par une lettre)
entrée (pas de caractère spéciaux)
and def finally in print yieldas del for is raiseassert elif from lambda returnbreak else global not tryclass except if or whilecontinue exec import pass with
Variables
• Type• Motivation :
– Calculer la division entiére par 60
secondes = minutes/60;
– Calculer les intérets de 10 % d'une somme de 100 euros
somme = 100somme = somme + somme * 5/100
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)
Variables
• Type• Motivation :
– Calculer la division entiére par 60
secondes = minutes/60;
– Calculer les intérets de 10 % d'une somme de 100 euros
somme = 100.0somme = somme + somme * 5.0/100.0
Excursion
• Typage statiquep.ex. Java
int a;a = 3;a = 3.5; // ERREUR
• Typage dynamiquep.ex. python
a = 3;a = 3.5; // OK
• 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´enation :
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
On peut extraire une sous-chaîne par découpage :
s = "abcdefg"
s[1:3] # ’bc’
s[3:] # ’defg’
s[:3] # ’abc’
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
• Jeux de cartes
Homogène
cartes = ["7", "8", "9", "10", "vallée", "dame", "roi", "as"]
Hétérogène
cartes = [7, 8, 9, 10, "vallée", "dame", "roi", "as"]