algorithmes et structures de données cours 7 patrick reuter preuter

Post on 03-Apr-2015

117 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

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

top related