36
Algorithmes et structures de données Cours 7 Patrick Reuter http://www.labri.fr/~preuter

Algorithmes et structures de données Cours 7 Patrick Reuter preuter

Embed Size (px)

Citation preview

Page 1: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

Algorithmes et structures de données

Cours 7

Patrick Reuter

http://www.labri.fr/~preuter

Page 2: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

Motivation

• Niklaus Wirth, ETH Zuerich, 1976« Algorithms + Data Structures = Programs »

Page 3: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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. ».

Page 4: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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

Page 5: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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.

Page 6: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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.

Page 7: Algorithmes et structures de données Cours 7 Patrick Reuter preuter
Page 8: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

• http://www.cifen.ulg.ac.be/inforef/swi/download/python_notes.pdf

Page 9: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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

Page 10: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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.

Page 11: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

Variables

Caractérisé par leur nom et leur type

• Nom :x

y

z

i

pointsJoueur1

pointsJoueur2

Page 12: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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

Page 13: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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

Page 14: Algorithmes et structures de données Cours 7 Patrick Reuter preuter
Page 15: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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)

Page 16: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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

Page 17: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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)

Page 18: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

Types simples

Type entier long– Les entiers longs (seulement limités par la

mémoire vive)

– 2 ** 40 # 1099511627776L– 3 * 72L # 216L

Page 19: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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)

Page 20: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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

Page 21: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

Excursion

• Typage statiquep.ex. Java

int a;a = 3;a = 3.5; // ERREUR

• Typage dynamiquep.ex. python

a = 3;a = 3.5; // OK

Page 22: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

• Pour connaître le type d'une variable :

a = 3

print type(a)

b = 3.5

print type(b)

Page 23: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

Les chaînes de caractères

Notations :

• Les guillemets

c1 = "L’eau de l'océan"

Page 24: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

Longueur :

s = "abcde"

print len(s) # 5

Concat´enation :

s1 = "abc"

s2 = "defg"

s3 = s1 + s2 # ’abcdefg’

Page 25: Algorithmes et structures de données Cours 7 Patrick Reuter preuter
Page 26: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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

Page 27: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

On peut extraire une sous-chaîne par découpage :

s = "abcdefg"

s[1:3] # ’bc’

s[3:] # ’defg’

s[:3] # ’abc’

Page 28: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

Les listes

Page 29: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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

Page 30: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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]

Page 31: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

Afficher tout les nombres :

nombres = [17, 38, 10, 25, 72]

Page 32: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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

Page 33: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

Afficher uniquement les nombres pairs :

nombres = [17, 38, 10, 25, 72]

Page 34: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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

Page 35: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

• Jeux de cartes

Page 36: Algorithmes et structures de données Cours 7 Patrick Reuter preuter

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"]