La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Algorithmes et structures de données

Présentations similaires


Présentation au sujet: "Algorithmes et structures de données"— Transcription de la présentation:

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


Télécharger ppt "Algorithmes et structures de données"

Présentations similaires


Annonces Google