Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Algorithmes et structures de données
Patrick Reuter maître de conférences
2
Déroulement CM mardi de 11h15 à 12h15 TD/TP en alternance
- Groupe YB (Yonel Blanc) le mardi de 16h15 à 17h45 - Groupe PR (Patrick Reuter) le mercredi de 18h30 à 20h00
3
Motivation Niklaus Wirth, ETH Zuerich, 1976
« Algorithms + Data Structures = Programs »
4
Motivation pages Comment ça marche ?
5
Motivation Structure de donnée: p.ex. fantôme couleur position
direction aggressif ou pas ? Algorithmes: p.ex. mettre a jour le meilleur score p. ex. / ex:
6
Motivation Structure de donnée: - tableau a 2 dimension Algorithmes:
- surtout I.A. a / à
7
Motivation Structure de donnée : File FIFO (First In First Out)
Aussi: File à priorité
8
Motivation Structure de donnée : Pile LIFO (Last In First Out)
9
Motivation Structure de donnée : Arbre (pour l’élimination
des parties cachées)
10
Motivation Structure de donnée : Graphe (pour plannifier des trajets)
plannifier / planifier
11
Algorithme Définition Wikipedia (12/9/2005)
L'algorithmique est la 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. ». Un algorithme est une méthode de résolution de problème énoncée sous la forme d'une série d'opérations à effectuer. La mise en œuvre de l'algorithme consiste en l'écriture de ces opérations dans un langage de programmation et constitue alors la brique de base d'un programme informatique (implémentation, « codage ») L'algorithme devra être 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. examinerois, pourroit, seroit, / examine, peut, est, (ici « autant que » est une comparaison donc pas de subjonctif, différent des phrases du type « quitte à s’être levé, autant que ce soit pour aller en cours) ; pour les mieux résoudre / pour mieux les résoudre ; problème / problèmes
12
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.
13
Ingrédients d’algorithmes
Variables : nombre y i patrick x1 Mais non pas : 3x entrée
14
Ingrédients d’algorithmes
Affectation Condition/Comparaison Appel de fonction Structure de contrôle Branchements conditionnels (multiples) Boucles Bloc d’instruction
15
Ingrédients d’algorithmes
Affectation a := 7; score := 0; score := score + 100; gameover := FAUX; Note: Affectation d’une seule variable avec un valeur. La variable à affecter figure à gauche, la valeur à droite Faux: a+b := 6; 7 := c; un valeur / une valeur
16
Ingrédients d’algorithmes
Condition/Comparaison a = 7 absent = FAUX malade = VRAI OU vacances = VRAI score > highscore; … Note: Le résultat d’une condition/comparaison peut être uniquement soit VRAI, soit FAUX
17
Ingrédients d’algorithmes
Appel de fonction, p.ex. afficher(« Bonjour tout le monde »); resultat := racine_carre(16);
18
Ingrédients d’algorithmes
Structure de contrôle Branchements conditionnels SI <condition> ALORS <bloc d’instructions> SINON
19
Ingrédients d’algorithmes
Structure de contrôle Branchements conditionnels SI <condition> ALORS <bloc d’instructions> SINON Exemple: SI (score>meilleur_score) ALORS meilleur_score := score;
20
Ingrédients d’algorithmes
Structure de contrôle Branchements conditionnels SI <condition> ALORS <bloc d’instructions> SINON Exemple: SI (score>meilleur_score) ALORS meilleur_score := score; En PASCAL : IF (score>meilleur_score) THEN meilleur_score := score;
21
Ingrédients d’algorithmes
Structure de contrôle Branchements conditionnels multiples CAS mois DE ‘1': nom := « Janvier » ; ‘2': nom := « Février » ; ‘3': nom := « Mars » ; ‘4': nom := « Avril » ; ‘5': nom := « Mai » ; …. ‘12': nom := « Décembre » ; AUTREMENT afficher('Erreur dans le mois') ; FIN CAS;
22
Ingrédients d’algorithmes
Structure de contrôle Boucle Définition : Suite d’instructions qui peut être exécuté plusieurs fois (itération) exécuté / exécutée
23
Ingrédients d’algorithmes
Structure de contrôle Boucle TANT QUE <condition> FAIRE <bloc d’instructions> FIN TANT QUE ou FAIRE TANT QUE <condition>
24
Ingrédients d’algorithmes
Structure de contrôle Boucle TANT QUE <condition> FAIRE <bloc d’instructions> FIN TANT QUE Exemple : Afficher les nombres entiers dont le carré est inférieur à 100. nombre := 1; TANT QUE (nombre*nombre<100) FAIRE afficher(nombre); nombre := nombre + 1;
25
Faire tourner un algorithme
26
nombrecarre := nombre * nombre; TANT QUE (nombrecarre<100) FAIRE
afficher(nombre); nombre := nombre + 1; FIN TANT QUE Chaque variable une colonne nombre nombrecarre
27
nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE
afficher(nombre); nombre := nombre + 1; nombrecarre := nombre * nombre; FIN TANT QUE Chaque instruction une ligne nombre 1 nombrecarre
28
nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE
afficher(nombre); nombre = nombre + 1; FIN TANT QUE nombre 1 nombrecarre 1
29
nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE
afficher(nombre); nombre = nombre + 1; FIN TANT QUE nombre 1 nombrecarre 1
30
nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE
afficher(nombre); nombre = nombre + 1; FIN TANT QUE 1 nombre 1 nombrecarre 1
31
nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE
afficher(nombre); nombre = nombre + 1; FIN TANT QUE 1 nombre 1 2 nombrecarre 1
32
nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE
afficher(nombre); nombre = nombre + 1; FIN TANT QUE 1 nombre 1 2 nombrecarre 1 4
33
nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE
afficher(nombre); nombre = nombre + 1; FIN TANT QUE 1 nombre 1 2 nombrecarre 1 4
34
nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE
afficher(nombre); nombre = nombre + 1; FIN TANT QUE nombre nombrecarre
35
nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE
afficher(nombre); nombre = nombre + 1; FIN TANT QUE nombre nombrecarre
36
nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE
afficher(nombre); nombre = nombre + 1; FIN TANT QUE nombre nombrecarre
37
Ingrédients d’algorithmes
Structure de contrôle Boucle FAIRE <bloc d’instructions> TANT QUE <condition>
38
Ingrédients d’algorithmes
Structure de contrôle Boucle FAIRE jouer(); afficher(« Voulez vous rejouer (O/N) ? »); prendreDuClavier(charactere); TANT QUE (caractere= "O" OU caractere = "o");
39
Ingrédients d’algorithmes
Structure de contrôle Boucle POUR POUR variable de valeur à valeur FAIRE <bloc d’instructions> FIN POUR
40
Ingrédients d’algorithmes
Structure de contrôle Boucle POUR POUR variable de valeur à valeur FAIRE <bloc d’instructions> FIN POUR Exemple POUR i:=1 à 10 FAIRE afficher(i); afficher(i*i);
41
« FAIRE TOURNER » un algorithme
Exemple: Tester si un nombre est premier Stratégie: Supposer que le nombre est premier jusqu’à on a trouvé un diviseur. FONCTION estPremier(nombre) estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; FIN TANT QUE FIN FONCTION jusqu’à on a trouvé / jusqu’à ce qu’on ait trouvé (subjonctif)
42
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) : boolean; estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre estPremier Diviseur resultat
43
EXEMPLE: resultat := testSiPremier(9);
FONCTION testSiPremier(nombre) : boolean; estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat := testSiPremier(9); Nombre 9 estPremier Diviseur resultat
44
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) : boolean; estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur resultat
45
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) : boolean; estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE SI (nombre % diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 resultat
46
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) : boolean; estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 resultat
47
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) : boolean; estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 resultat
48
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) : boolean; estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 resultat
49
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) : boolean; estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 resultat
50
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) : boolean; estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 resultat
51
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) : boolean; estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI FAUX Diviseur 2 3 resultat
52
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) : boolean; estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 4 resultat
53
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) : boolean; estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 4 resultat
54
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) : boolean; estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI FAUX Diviseur 2 3 4 resultat
55
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) estPremier := VRAI; Diviseur := 2; TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier := FAUX; diviseur := diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 4 resultat
56
EXEMPLE: resultat = testSiPremier(9);
FONCTION testSiPremier(nombre) estPremier = VRAI; Diviseur = 2; TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE SI (nombre MOD diviseur = 0) ALORS estPremier = FAUX; diviseur = diviseur + 1; FIN TANT QUE RETOURNER estPremier; FIN FONCTION EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 FAUX resultat
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.