Cours 7

publicité
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ées
Dé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/p
ython_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 yield
as del for is raise
assert elif from lambda return
break else global not try
class except if or while
continue 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 = 100
somme = 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
• 2 <= 8
•
•
•
•
# faux
# 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
20 - 3
20 * 3
20 ** 3
20 / 3
20 % 3
division entière)
# 23
# 17
# 60
# 8000
# 6 (division entière)
# 2 (modulo (reste de la
Types simples
Type entier long
– Les entiers longs (seulement limités par la
mémoire vive)
– 2 ** 40
– 3 * 72L
# 1099511627776L
# 216L
Types simples
Type flottant
• Les flottants sont not´es avec un « point
d´ecimal » ou en notation exponentielle :
2.718
3e8
6.023e23
2.
3.0
#
# 3 * 108
# 6.023 * 1023
#2
#3
• Ils supportent les mêmes opérations que les
entiers, sauf :
20.0 / 3
20.0 // 3
# 6.666666666666667
# 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.0
somme = somme + somme * 5.0/100.0
Excursion
• Typage statique
p.ex. Java
int a;
a = 3;
a = 3.5;
// ERREUR
• Typage dynamique
p.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]
print nombres[4]
print len(nombres)
# 17
# 72
# 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=0
TANT 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=0
TANT QUE i < len(nombres) FAIRE
SI nombres[i] % 2 == 0 ALORS
afficherLigne(nombres[i])
FIN SI
i=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"]
Téléchargement