Algorithmique et Programmation

Slides:



Advertisements
Présentations similaires
GEF 243B Programmation informatique appliquée
Advertisements

UML - Présentation.
la programmation en langage C
Tests et itérations Programmes séquentiels ne résolvent pas tous les problèmes exemple simple : calcul des racines d'un polynôme de d° 2 dans R Algorithme.
INTRODUCTION.
Les Ateliers de Génie Logiciel
Initiation à la programmation et algorithmique
Récursivité.
Introduction à l’algorithmique
Démarche de résolution de problèmes
Algorithmique et Programmation
Validation d’applications pour les Legos Mindstorms
Algorithmique et Programmation
Bases de la programmation en C++ 1 Les enchaînementsdinstruction Séquentiels. Exécutions dinstructions les unes à la suite des autres. Instructions séparées.
Bases de la programmation en C++
Instruction sélective switch-case Instruction répétitive do-while For
Amorçage des compilateurs Un compilateur est un programme écrit dans un langage Peut-il être écrit dans le langage cible ? dans le langage source ? comment.
Ift 2251 Introduction au Génie Logiciel
Chapitre 3 Syntaxe et sémantique.
Partie II Sémantique.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Séance d’introduction
Plan troisième cours Instruction sélective Instruction répétitive
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 Abder Alikacem Gestion des exceptions Module 2 Département dinformatique et de génie logiciel Édition Septembre 2009.
Procédures et fonctions
Structures alternative et répétitive
Structures de données IFT-2000
Introduction à la programmation orientée objets
La librairie assert.h.
Structures de données IFT Abder Alikacem Semaine 2 Tests sur les pointeurs Département d’informatique et de génie logiciel Édition Janvier 2009.
Chapitre X Modèles.
Les différents langages de programmation
Efficacité des algorithmes
2.1 - Historique Chapitre 2 : Introduction au langage C++
CYCLE 1 : Saisir – Afficher – Données Saisir des valeurs de variables au clavier 1- Rôle du scanf() 2- Syntaxe du scanf() 3- Exécution du scanf() par le.
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Paradigmes des Langages de Programmation
Sous-programmes.
INTRODUCTION.
GESTION ET TRAITEMENT DES ERREURS
Langage C Chapitre I: Initiation à la programmation en C
1 Algorithmique et programmation en février - juin 2007 ORSAY.
Institut Supérieur des Sciences Appliquées et de Technologie Sousse
Cours d’ Algorithmique 2012 Algorithmique. Cours d’ Algorithmique 2012 Qu’est ce que l’Algorithmique ? Avez-vous déjà suivi une recette ? Avez-vous déjà.
Algorithmes et Programmation
Langages de programmation Ordinateurs = Machines à exécution.  D’où la nécessité d’outils de communication qui s’adaptent le mieux aux utilisateurs. Comment.
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.
Programmation Système et Réseau
Initiation à la conception des systèmes d'informations
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
ISBN Chapitre 10 L'implémentation des sous- programmes.
Algorithmique : Introduction
CSI2520 Un langage de programmation impérative et concurrente.
Introduction et Généralités sur l’Algorithmique
Démarche de résolution
UE MAREP Cours 12 : Révisions
Patricia Renault UPMC 2005/2006
Langage de programmation
IFT209 – Programmation Système
Éléments de base du langage C
Les Structures simples
Abder Alikacem Semaines 1-4 Synthèse
Algorithmique et programmation
Etape 1 : 2 heures – Présentiel : Rencontre équipe – formateurs : identifier les pistes de travail. Etape 2 : 2 heures - Formation à distance.
Introduction à Java Caractéristiques principales Environnement Java Environnement de développement Compilation et exécution.
Int 10. Int 6.
Transcription de la présentation:

Algorithmique et Programmation A. Alikacem

Semaine 2 Les outils algorithmiques Lecture: chapitre 2 des notes de cours Étapes de la construction d'un programme Composantes de base d'un ordinateur Structures de base d'un algorithme

Étapes de la construction d’un programme Algorithme Problème Transcription Description formelle Programme Compilation Langage de programmation Ordinateur Exécution Solution Langage machine

Vous avez dit algorithme ?

Expression des algorithmes Le pseudo-code (pseudo-langage) Dérivé du langage Pascal. Permet d’être précis, sans syntaxe lourde lisible sans effort Peut être traduit facilement dans un langage de programmation Il nous évite de rattacher la résolution d’un problème à un langage de programmation particulier Il nous prépare à l’acquisition de bonnes habitudes de programmation:  il conduit à la programmation structurée  il favorise la conception des algorithmes car il est compatible avec la démarche descendante.

Pseudo-Code #include <stdio.h> int main () { int n, i; Faire la différence entre les contraintes propres à un langage et les difficultés inhérentes à un problème donné Demander n Répéter  i  [0,n] début si (i % 2)  0 alors Afficher i fin #include <stdio.h> int main () { int n, i; scanf ("%d", &n); for (i=0; i<=n; i++) { if (i%2) { printf ("%d\n", i); } return 0; Plus abstrait, plus lisible, plus concis... Met en avant l'essence de l'algorithme

Expression des algorithmes Le pseudo-code (pseudo-langage) Cette représentation a un intérêt pédagogique, elle facilite l’apprentissage. Introduit les caractéristiques de la machine théorique : Un algorithme va être représenté comme une suite d’actions pouvant être exécutées par une machine idéale. Notion d’action

Les actions élémentaires (primitives) Définition Une instruction qui peut être comprise directement par le système que l'on désire programmer. Exemple : une tortue radio-commandée Les primitives

Les actions élémentaires (primitives)

Les actions élémentaires (primitives)

Les actions élémentaires (primitives)

Les actions élémentaires (primitives)

Les actions élémentaires (primitives) ?

Les actions élémentaires (primitives)  

Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « avancer d’une case » ? Une primitive !!!

Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « reculer d’une case » ? + + =

Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « avancer d’une case en diagonale » ?

Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « avancer d’une case en diagonale » ? +

Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « avancer d’une case en diagonale » ? + +

Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « avancer d’une case en diagonale » ? + + +

Les actions élémentaires (primitives) Quelle suite d’instruction doit-on utiliser pour obtenir l’ordre : « avancer d’une case en diagonale » ? + + + =

Architecture de Von Neuman Un ordinateur devrait être composé de: - unité de commande et contrôle (ucc) - unité arithmétique et logique (ual) - mémoire principale (mp) - périphériques d’entrée/sortie (pe/ps) ps ual ucc mp pe

Les composantes d’un ordinateur Les périphériques d’entrée De l’usager à l’ordinateur Stockées dans la mémoire principale de l’ordinateur afin d’être manipulées. Dans un algorithme DEMANDER information action élémentaire

Les composantes d’un ordinateur Les périphériques de sortie De l’ordinateur à l’utilisateur On les utilisera donc pour montrer les résultats du travail d’un programme. Dans un algorithme AFFICHER information IMPRIMER information actions élémentaires

Les composantes d’un ordinateur La mémoire principale Conserver les données entrées par l’usager et de stocker les résultats intermédiaires et finaux. Pour traiter de l’information par un ordinateur, il faut que cette dernière se retrouve en mémoire principale.

La mémoire principale 01000000 01100111 00111111 … 0x0109 0x010a Plusieurs cellules (cases, mots) … 0x0109 01000000 0x010a 01100111 0x010b 00111111 Chaque cellule a sa propre adresse contient toujours une suite de bits

La mémoire principale 01000000 01100111 00111111 … a lettre temp Plusieurs cellules (cases, mots) Nous pouvons leur associer un nom Notion d’identificateur

La mémoire principale ‘@’ ‘e’ ‘?’ … a lettre temp Notion de type Plusieurs cellules (cases, mots) Nous pouvons interpréter la signification du contenu différemment (associer un type) Notion de type

La mémoire principale ‘@’ ‘e’ 4 a lettre temp Notion de variable Plusieurs cellules (cases, mots) nom + type = variable une abstraction d’un emplacement mémoire. Notion de variable Comment l’utiliser ? temp  4 temp  temp + 1 Le symbole “  ” est appelé opérateur d’affectation ou d’assignation.

Un exemple ??? x y ??? DEBUT DEMANDER x y  x x  0 AFFICHER x AFFICHER y FIN

Un exemple ??? x y ??? 5 DEBUT DEMANDER x y  x x  0 AFFICHER x AFFICHER y FIN

Un exemple x y ??? 5 5 DEBUT DEMANDER x y  x x  0 AFFICHER x AFFICHER y FIN

Un exemple x y 5 5 DEBUT DEMANDER x y  x x  0 AFFICHER x AFFICHER y 5 y 5 DEBUT DEMANDER x y  x x  0 AFFICHER x AFFICHER y FIN

Un exemple x y 5 DEBUT DEMANDER x y  x x  0 AFFICHER x AFFICHER y y 5 DEBUT DEMANDER x y  x x  0 AFFICHER x AFFICHER y FIN

Un exemple x y 5 DEBUT DEMANDER x y  x x  0 AFFICHER x AFFICHER y y 5 DEBUT DEMANDER x y  x x  0 AFFICHER x AFFICHER y FIN

Un exemple x y 5 DEBUT DEMANDER x y  x x  0 AFFICHER x AFFICHER y y 5 DEBUT DEMANDER x y  x x  0 AFFICHER x AFFICHER y FIN

Les composantes d’un ordinateur L’unité arithmétique et logique (UAL) Composante d’un ordinateur en charge de toutes les opérations de calcul, de comparaison et de logique. Primitives pour le calcul arithmétique

L’unité arithmétique et logique Opérateurs arithmétiques Opérateur Exemple x=9 & y=4 + x + y 13 - x – y 5 * x * y 36 / x / y 2,25  x  y 2 % x % y 1

L’unité arithmétique et logique Opérateurs relationnels Opérateur Exemple x=9 & y=4 = x = y FAUX  x  y VRAI > x > y  x  y < x < y  x  y

L’unité arithmétique et logique Opérateurs logiques NON Conditions NON conditions VRAI FAUX Il fait soleil Il ne fait pas soleil

L’unité arithmétique et logique Opérateurs logiques ET x y x ET y FAUX VRAI

L’unité arithmétique et logique Opérateurs logiques OU x y x OU y FAUX VRAI

L’unité arithmétique et logique Évaluation des expressions Les parenthèses et : NON , + , - (monadiques) + élevée * , / ,  , % . +,- (dyadiques) > ,  , < ,  = ,  ET OU + faible

L’unité arithmétique et logique Un exemple d’évaluation d’expression: x * x ³ 0 ET ( x + 1 ) * ( x + 1 ) < 16 2 9 4 V 3 V

Les composantes d’un ordinateur L’unité de commande et de contrôle (UCC) En charge de contrôler le déroulement d’un programme. Elle dirige le fonctionnement de toutes les autres unités (UAL, mémoire, entrée/sortie) Normalement, un programme s’exécute instruction par instruction, dans l’ordre (de haut en bas) ou elles sont écrites. Cependant, et très souvent, on aura besoin de briser la séquentialité: en utilisant des structures de contrôle d’alternatives; en utilisant des structures de contrôle de répétitions; en faisant des appels de sous-programmes, caractérisés par une référence (appel) à un bloc à l’intérieur d’un autre bloc Primitives de structures de contrôle

Unité de commande et contrôle Structures alternatives Condition Instructions VRAI FAUX SI condition est vrai alors DÉBUT Instructions FIN

Unité de commande et contrôle Structures alternatives SI x < 100 alors DÉBUT x  x + 1 y  25 FIN VRAI X < 100 x  x + 1 y  25 FAUX

Unité de commande et contrôle Structures alternatives SI condition est vrai alors DÉBUT Instructions v FIN SINON Instructions f VRAI Condition Instructions v FAUX Instructions f

Unité de commande et contrôle Structures alternatives SI x = 0 alors DÉBUT x  100 FIN SINON x  x - 1 VRAI x = 0 X  100 FAUX x  x - 1

Unité de commande et contrôle Structures itératives n fois? Instructions FAUX VRAI Compteur implicite RÉPÉTER n FOIS DÉBUT Instructions FIN

Exemple Le factoriel n Début Si n = 1 ou n = 0 alors Début fact 1 Fin ³ 0. Début Si n = 1 ou n = 0 alors Début fact 1  Fin Sinon Début fact  1 i  2 Répéter n-1 fois Début fact  fact * i i  i + 1 Fin Fin Fin

Unité de commande et contrôle Structures itératives n fois? Instructions FAUX VRAI Compteur explicite RÉPÉTER  i  [1,n] DÉBUT Instructions FIN

Exemple Le factoriel n Début Si n = 1 ou n = 0 alors Début fact 1 Fin ³ 0. Début Si n = 1 ou n = 0 alors Début fact 1  Fin Sinon Début fact  1 Répéter  i  [2, n] Début fact  fact * i Fin Fin Fin

Unité de commande et contrôle Condition FAUX VRAI Instructions Structures itératives RÉPÉTER DÉBUT Instructions FIN TANT QUE condition

Exemple Le factoriel n Début Si n = 1 ou n = 0 alors fact  1 Fin Sinon fact  1 i  1 Répéter fact  fact * i i  i + 1 Tant Que i < n+1

Unité de commande et contrôle Structures itératives condition Instructions VRAI FAUX TANT QUE condition DÉBUT Instructions FIN

Exemple Le factoriel n Début Si n = 1 ou n = 0 alors fact  1 Fin Sinon fact  1 i  2 Tant Que i < n+1 fact  fact * i i  i + 1

L’algorithmique impérative Propriétés : Un nombre fini d’étapes Un nombre fini d’opérations par étape Une suite d’opérations primitives Fournit un résultat (décidabilité) Chaque opération est non ambiguë Effective calculabilité

L’algorithmique impérative Propriétés : Un algorithme doit être indépendant du langage de programmation utilisé. Un programme est un algorithme exprimé dans un langage de programmation capable d’être exécuté par un ordinateur. Peut être exprimé de manière formelle : - en pseudo-code - par un algorigramme - dans un arbre algorithmique - dans un diagrammes structurés

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

{A: CL est un caractère} Algorithme: un traitement de texte! début Demander CP {A: CP est un caractère} Afficher CP TANT QUE CP  ‘!’ Demander CL {A: CL est un caractère} SI CL = CP ALORS Afficher le caractère de soulignement '_ ' fin Afficher CL CP  CL Qu’affiche cet algorithme si les données lues sont: " Etes vous efficace? ... Bonne chance!! " (Les guillemets ne font pas partie des données)

Rosalie dans le labyrinthe Sortie Entrée Les primitives Faire un pas devant elle (se rendre au centre du carré situé immédiatement devant elle). Tourner d'un quart de tour à gauche ou à droite. Détecter un mur placé devant lui (c'est à dire répondre à la question "y a-t-il un mur en face?"; la réponse est oui ou non. Détecter l'entrée du labyrinthe (en l'absence de ce test, Rosalie pourrait sortir par là où elle est entrée!). Détecter la sortie du labyrinthe (en l'absence de ce test, Rosalie ne s'arrêterait pas et continuerait à longer le mur à l'extérieur!).

Algorithme: Sortir du labyrinthe en longeant le mur de gauche Début Avancer d'un pas Faire un quart de tour à gauche Tant que Rosalie n'est pas sortie Tant que mur en face Faire un quart de tour à droite Fin Fin.

Il a été démontré que tout cube est égal à la somme de nombres impairs consécutifs. Par exemple : 1 = 1 8 = 3 + 5 27 = 7 + 9 + 11 64= 13 + 15 + 17 + 19 Décrivez un algorithme qui lit un entier n strictement positif et donne une décomposition de n3.

Détermination des nombres de début et de fin de la série n3  n*n*n s  0 p  1 k  1 Tant que (s  n3) début si (s>n3) alors s  s - (2*k-1) k  k + 1 fin si ( s<n3) alors s  s + (2*p -1) p  p + 1 x  2*k -1 y  2* (p-1) -1

Affichage du développement du cube de n début n3  n*n*n Afficher n3 " = " k  premier Tant que (k < dernier) Afficher k " + " k  k+2 fin Afficher dernier