Abder Alikacem Semaines 1-4 Synthèse

Slides:



Advertisements
Présentations similaires
Cours n° 1 Introduction à la programmation
Advertisements

Cours d’algorithmique
Introduction: Concepts de la programmation
Treuil IRD Abdelwahed FSSM-Marrakech
Algorithmique et Programmation
Algorithmes et structures de données avancés
Spécification et qualité du logiciel
Introduction à l’Algorithmique
M.E.D.A.L. Module dEnseignement à Distance pour lArchitecture Logicielle Alain VAILLY Diapositive n° 1 IUP MIAGE - Université de NANTES IUP-MIAGE 3ème.
INTRODUCTION.
Introduction : Compilation et Traduction
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Architecture de machines Principes généraux
Les Ateliers de Génie Logiciel
CSI3525: Concepts des Langages de Programmation Notes # 5: Langages de Programmation Fonctionelle I: Introduction au Scheme.
CSI3525: Concepts des Langages de Programmation Notes # 11: Sous-Programmes ( Lire Chapitre 8 )
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Conception et analyse des algorithmes
Initiation à la programmation et algorithmique
Partie 1 Etude de l'existant
Algorithmes et résolution de problèmes FGE
Principes de la technologie orientée objets
Introduction à l’algorithmique
Démarche de résolution de problèmes
Paradigmes de Programmation
Concepts de base : la Classe Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.
Algorithmique et Programmation
SÉMINAIRE DE LANCEMENT DES COURS EN LIGNE
Algorithmique et Programmation
Paradigmes de Programmation
Introduction à la programmation (Java)
Algorithmique et Programmation
Structures de données IFT-2000
Introduction à la programmation objet Langage Java
Semaine #1 INF135 par Frédérick Henri.
IFT Complexité et NP-complétude
Gestion de Fichiers Tri Interne Efficace et Tri Externe.
1 CSI3525: Concepts des Languages de Programmation Notes # 3: Description Syntaxique des Languages.
CSI3525: Concepts des Languages de Programmation
Algorithmique (Introduction)
Partie II Sémantique.
Programmation non procédurale Le projet ECOLE 2000
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
Les différents langages de programmation
Paradigmes des Langages de Programmation
Paradigmes des Langages de Programmation
Paradigmes des Langages de Programmation
TD0 - Rappels. Acquis du programme 1 ère année Analyser et modéliser : un problème, une situation ; Imaginer et concevoir : une solution algorithmique.
Algorithmes et Programmation
2003 (revisé 2008)SEG Chapitre 11 Chapitre 1 “The Systems Engineering Context” Le contexte du génie de systèmes.
CSI 3525, Histoire, page 1 Aperçu historique Voir le chapitre 2 du livre pour plus de détails.
Introduction au Génie Logiciel
Module I3 algorithmique et programmation
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Le langage Racket (Lisp)
Initiation à la conception des systèmes d'informations
1 IFT 099 Introduction à la programmation. 2 Plan du cours (sem. 1) 1.Introduction - les ordinateurs 2.La programmation procédurale 3.La programmation.
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
Algorithmique : Introduction
Introduction et Généralités sur l’Algorithmique
Problèmes du génie logiciel. H. Lounis Les problèmes zTaille et complexité des logiciels ; zTaille croissante des équipes ; zSpécifications peu précises.
Applications Internet Cours 3 21 janvier 2010 Cours 3 21 janvier 2010.
Introduction à la Programmation Orientée Objet
Scripts et fonctions Instructions de contrôle
développeur informatique
1.1: notions de bases de l’informatique
INTRODUCTION AUX BASES DE DONNEES
Programmation par contraintes Réalisé par: WETCHA Chaima MOKDED Mohamed Ali FIA3-GL-AL 1 1.
ALGORITHME ET PROGRAMMATION RÉVISION Informatique et Sciences du Numérique.
Transcription de la présentation:

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

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

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.

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

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.

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

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

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

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

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

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

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

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

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

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

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

Qu’est-ce qu’un programme?

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)

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

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?).

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.

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…

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, …

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

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.

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 …

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 1.5.0 ® ...

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.

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.

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!

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.

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

Les compilateurs Qu'est-ce qu'un compilateur ? (interpréteur?) int main(void) { int a; int b; int c; c = a + b; return 0; } 00100010010101 01100100011101 11011101000110 00110111011000 01110011010100 10110111101011 11101101000010 11101011000101 01110101000100 compilateur Correspondance en langage machine Fichier source

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.

Les compilateurs La portabilité d’un programme

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.

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

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

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

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 !

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

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

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

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é