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

Abder Alikacem Semaines 1-4 Synthèse

Présentations similaires


Présentation au sujet: "Abder Alikacem Semaines 1-4 Synthèse"— Transcription de la présentation:

1 Abder Alikacem Semaines 1-4 Synthèse
Programme de baccalauréat en informatique Algorithmique et programmation IFT-17582 Abder Alikacem Semaines 1-4 Synthèse Édition septembre 2006 Département d’informatique et de génie logiciel

2 Synthèse Exemples de problèmes algorithmiques
Techniques de conception d’algorithmes Rappel des principes méthodologique Qualité d’un programme et cycle de vie

3 Problèmes On est intéressé par les problèmes algorithmiques seulement:
Qui doivent pouvoir se résoudre sur un ordinateur:Par exemple le problème de trouver une juste sentence pour une personne reconnue coupable d'un délit fait appel à des considérations culturelles et philosophiques et ne peut donc pas être résolu par un ordinateur. L'ensemble des solutions correctes doit être non ambiguë: Par exemple la traduction d'un texte de l'anglais au français peut être réalisée par un ordinateur mais il n'est pas clair ce que l'on doit considérer comme une traduction correcte. Un problème algorithmique est défini par la description: De l'ensemble fini des entrées possibles. D'un ensemble de résultats corrects.

4 Exemples de problèmes algorithmiques
Multiplication (problème d'évaluation): Entrée: Deux entiers x et y Sortie: Le produit de x par y Test de primalité (problème de décision): Entrée: Un entier positif n Sortie: VRAI si n est premier, FAUX sinon. Problème du commis voyageur (problème d'optimisation): Entrée: Un graphe pondéré (représentation en mémoire d’une carte routière) Sortie: Un chemin de longueur minimal

5 Le choix de l'algorithme
L'analyse d'un algorithme se fait selon les critères suivants: Rectitude Complexité (temps d'exécution, espace mémoire, etc.) Optimiser temps de calcul ou/et mémoire. Pourquoi ne pas optimiser quand on le peut ? Comment le faire bien ? Facilité de maintenance Nous nous intéresserons principalement aux deux premiers critères.

6 Techniques de conception d'algorithmes (1)
Algorithmes voraces (ou gloutons) Méthode simple pour des problèmes d'optimisation après avoir effectué une série de choix. Pour chaque point de décision, le choix qui est effectué est celui qui semble le meilleur à cet instant. Cette stratégie heuristique ne produit pas toujours une solution optimale, mais y parvient parfois. On veut obtenir la somme de 2.65 $ avec un nombre minimum de pièces de 1$, 25c, 10c et 5c On prend 2 pièces de 1$, 2 pièces de 25c, 1 pièce de 10c et 1 pièce de 5c Exemples d'applications: Chemin le plus court dans un graphe Méthodes de compression de données Programmation des jeux vidéo

7 Techniques de conception d'algorithmes (2)
Algorithmes diviser-pour-régner On divise le problème en plusieurs sous problèmes et on combine les solutions pour obtenir la solution au problème initial. Exemples d'applications: Méthodes de tri: tri par fusion et le Quicksort

8 Techniques de conception d'algorithmes (3)
Programmation dynamique Utilisé lorsqu'une solution récursive est inefficace parce que beaucoup d'appels identiques sont effectués. Exemples d'applications: Calcul des nombres de Fibonacci Triangle de Pascal

9 Techniques de conception d'algorithmes (4)
Algorithmes probabilistes L'algorithme a accès à un générateur de nombres aléatoires. Exemples d'applications: Problèmes d'approximation

10 Techniques de conception d'algorithmes (5)
Autres… L’approche descendante. Le retour arrière (backtraking) Algorithmes génétiques

11 Algorithme, programme et ordinateur
Lab#4 Problème Transcription (?) Description formelle (?) Programme Langage de programmation Compilation Exécution (?) Ordinateur Solution Langage machine (?)

12 Qu’est-ce qu’un ordinateur
Machine à traiter de l’information. Machine à calculer. Machine à contrôler des processus (automates, etc.).

13 1 ordinateur, 2 couches importantes
Le matériel: le processeur; la mémoire; les cartes; etc… Le logiciel: le système d’exploitation; les programmes en général Lecture dans les notes de cours: sections 1.2 et 1.3

14 Qu'est-ce que la programmation ?
Pourquoi? Faire exécuter des tâches à l’ordinateur Comment? Écrire un programme Traduire ce programme en langage machine Exécuter ce programme

15 Qu’est-ce qu’un programme?
Données (résultat) en sortie Données en entrée

16 Qu’est-ce qu’un programme?
Données int x, y; y = x + 1; Interface int x, y; =, +, -, ++, --, *, /, ...

17 Qu’est-ce qu’un programme?

18 Les langages de programmation: Vocabulaire, syntaxe et sémantique
Vocabulaire: ensemble des symboles/termes utilisables pour construire des expressions Syntaxe: ensemble des règles définissant la bonne construction des expressions Sémantique: ensemble des règles permettant d'associer un sens à une expression (signification d’une expression)

19 Les langages de programmation
Chaque langage de programmation est défini formellement ( BNF? ) par: Un alphabet: un ensemble de symboles élémentaires. Des noms ou identificateurs: groupes de symboles de l’alphabet. Des phrases ( instructions? ): séquences de noms et de symboles de ponctuation qui respectent les aspects syntaxique et sémantique du langage. Vocabulaire (mots réservés?) Syntaxe et sémantique

20 Les langages de programmation
Dans un programme, on retrouve plusieurs types d’instructions (des primitives?): entrées/sorties; arithmétiques; instructions de branchement; stockage de données. La majorité de ces opérations pourront être réalisées en utilisant des instructions de base d’un langage de programmation (abstraction?).

21 Paradigmes de programmation
Ces paradigmes représentent des approches différentes pour construire des solutions aux problèmes. Plus que des paradigmes de programmation, on pourrait parler des paradigmes de développement de logiciel.

22 Paradigmes de programmation
Paradigme fonctionnel ou applicatif est entièrement fondé sur l'évaluation d'expressions satisfaisant la propriété : la valeur d'une expression ne dépend que des valeurs des sous-expressions et de l'opération qui les combine. Ce style conduit souvent à des programmes concis, faciles à comprendre et efficaces. Fondements Notion de fonction Concept de la récursivité Paradigme de programmation » langage de programmation Langages fonctionnels: Scheme, Miranda, ML, CamL, Lisp…

23 Paradigmes de programmation
Paradigme procédural ou impératif est fondé sur la transformation de la mémoire, au moyen d'instructions et, notamment, de l'affectation. Il est basé sur le modèle de machine de von Neumann ( ? ). Le processus de programmation est défini comme le développement d’une séquence de commandes qui manipulent des données pour produire le résultat souhaité. C’est- à- dire, on doit trouver l’algorithme donnant solution au problème et, ensuite, il doit être exprimé comme une séquence de commandes. Fondements Notion de variable Instruction d’affectation Paradigme de programmation » langage de programmation Langages procéduraux: Pascal, Fortran, C, Ada, …

24 Paradigmes de programmation
Paradigme objet est basé sur une programmation orienté données. Fondements Objet, classe, instance, encapsulation, héritage, agrégation, polymorphisme et réutilisation. Exemple: une liste de noms. Le paradigme procédural: liste = collection de données. Toute procédure doit être capable d’exécuter le traitement demandé. La procédure est séparée des données. Le paradigme orienté objets: la liste = un objet composé par la liste elle-même + une collection de procédures capables de la manipuler. Les procédures font partie de l’objet. Paradigme de programmation » langage de programmation Langages orientés objets: SmallTalk, C++, Java..

25 Les langages de programmation
De plus, ils sont classifiés selon : – Niveau d'abstraction = capacité de nommer et de traiter comme un tout des entités complexes sans avoir besoin d'en spécifier les détails inutiles – Famille = évolution d'un langage au cours du temps – Spécificité = capacité à résoudre toute une classe de problèmes ou un seul type de problème.

26 Les langages de programmation et les niveaux d’abstraction
Haut niveau = proche des problèmes – Fortran, Lisp, Pascal, Java, C ++ , C, Ada, etc … Bas niveau = proche des dispositifs de calcul – langage-machine, assembleur, de commande, etc …

27 Les langages de programmation et les familles de langages
Fortran I ® II ® IV ® 77 ® 90 ® Fortran XX … Algol ® Algol 60 ® Algol 68 ® Pascal ... Java ® Java 1.0 ® Java 1.5 ® Java ® ...

28 Les langages de programmation et leur spécificité
Les langages "système" (de très bas niveau) Le langage machine: le seul langage de programmation compris directement par un ordinateur. Consiste en un ensemble d'instructions écrites en binaire. L’assembleur: ressemble énormément au langage machine a l'exception que les instructions sont représentées par des "mnémoniques" (généralement des mots de 3 lettres). Bien que difficiles à lire pour un être humain, ces 2 langages peuvent être utiles lorsque l'on désire optimiser nos programmes.

29 Les langages de programmation et leur spécificité
Langages « scientifiques  » FORTRAN (FORmula TRANslator): Langage très utilisé dans le milieu scientifique car très optimisé pour les calculs complexes. PASCAL: Langage procédural qui ressemble énormément au C, bien que plus âgé et un peu moins puissant. A été utilisé pendant longtemps pour l'enseignement de la programmation structurée.

30 Les langages de programmation et leur spécificité
Langages "scientifiques » Modula-2: descendant de PASCAL auquel on a effectué quelques ajouts. ADA: langage de programmation développé par le Département de la défense Américain. Surtout orienté sur le développement d'applications temps-réel et la simulation. C: développé dans le but de réaliser un système d'exploitation (UNIX). Devenu très populaire à cause de sa plus grande force qui est à la fois sa plus grande faiblesse: il est possible de faire à peu près n'importe quoi avec ce langage!

31 Les langages de programmation et leur spécificité
Langages de gestion Cobol: Probablement le langage de gestion le plus populaire. La gestion des fichiers y était grandement optimisé, ce qui a fait du Cobol un langage idéal pour la gestion. PL/I: Un autre langage destiné aux applications de gestion. N'a par contre jamais été beaucoup utilisé, n'était distribué qu'avec les ordinateurs mainframe d'IBM.

32 Les langages de programmation et leur spécificité
Les langages d'Intelligence Artificielle LISP (LISt Processing): langage conçu pour la manipulation d'expressions symboliques. PROLOG (PROgrammation LOGique): semblable au LISP, on y a cependant ajouté un moteur d'inférence (une mécanique permettant de faire des déductions).

33 Les compilateurs Qu'est-ce qu'un compilateur ? (interpréteur?)
int main(void) { int a; int b; int c; c = a + b; return 0; } compilateur Correspondance en langage machine Fichier source

34 Les compilateurs Le rôle d ’un compilateur
Un compilateur donné est toujours spécifique au processeur pour lequel il a été conçu. Par contre, si l'on suit bien les standards établis pour les langages de programmation que l'on utilise, les compilateurs de plusieurs processeurs différents seront en mesure de comprendre nos programmes et de générer le code machine correspondant.

35 Les compilateurs La portabilité d’un programme

36 Les compilateurs La portabilité d’un programme
Certains des problèmes liés à la portabilité disparaissent avec une standardisation du langage, le plus souvent menée à bien par deux organisations: ANSI et ISO Organization. Cependant, des fabricants du compilateur ajoutent des “extensions” au langage qui le rendent incompatible avec certains environnements de programmation.

37 Programme en langage "machine"
Compilation vs Interprétation Interpréteur Programme Processeur Programme en langage "machine" Compilateur

38 Compilation vs Interprétation
Programme Interprété (VB, PHP, Java ...) Plus lent On passe toujours par l'interpréteur (lourd) Programme Compilé (C, Pascal ...) Plus rapide 1 compilation pour N exécutions Autonomie vis à vis du langage d'origine Code exécutable non portable

39 Principes méthodologiques
Abstraire Retarder le plus longtemps possible l'instant du codage Décomposer "...diviser chacune des difficultés que j'examinerais en autant de parties qu'il se pourrait et qu'il serait requis pour les mieux résoudre." Descartes Combiner Résoudre le problème par combinaison d'abstractions Mais aussi : Vérifier, modulariser, réutiliser...

40 Ne pas se laisser aveugler par l'objectif final :
Principes méthodologiques Spécification Résolution Codage Problème Enoncé Algorithme Programme Ne pas se laisser aveugler par l'objectif final : le codage !

41 Critères de qualité des programmes
Lisibles Fiables Maintenables Réutilisables Portables Corrects (preuve) Efficaces (complexité) Contraintes "économiques" : Exécution la plus courte possible Espace mémoire nécessaire le plus petit possible...

42 Cycle de vie d'un programme (1)
Analyse + spécification Maintenance Conception Un processus itératif Vérification Codification Analyse + spécification Définir clairement le problème Recenser les données Dégager les grandes fonctionnalités Conception Décrire et représenter les données Concevoir l'algorithme en pseudo-code Codification Traduire l'algorithme dans un langage de programmation

43 Cycle de vie d'un programme (2)
Analyse + spécification Maintenance Conception Un processus itératif Vérification Codification Vérification (test & mise au point) Utiliser le programme avec des entrées spécifiques Utiliser un outil de mise au point Maintenance Adapter le programme existant pour de nouvelles fonctionnalités et/ou pour corriger les erreurs Une documentation doit être associée à chaque étape

44 Raisons d'être des méthodes de programmation
Augmentation de la taille et de la complexité des logiciels Travail en équipe Capacité de l'être humain à s'occuper de problèmes simultanément ( 5 à 9 problèmes) Nécessité de construire des programmes corrects, vérifiables et modifiables Conséquences humaines, économiques... de plus en plus coûteuses => Méthodologie de conception des programmes Garder la maîtrise de la conception du logiciel Canaliser la créativité


Télécharger ppt "Abder Alikacem Semaines 1-4 Synthèse"

Présentations similaires


Annonces Google