Cours INF1110 (H -2001) - info2.uqam.cankambou_r/inf1110/H2002/introInf1110.pdfMicroprocesseur...
Transcript of Cours INF1110 (H -2001) - info2.uqam.cankambou_r/inf1110/H2002/introInf1110.pdfMicroprocesseur...
Cours INF1110 (H-2001)
Copyright, 2003 © Roger Nkambou
CONSEILPour plus d'information, consultez
la page Web du cours
Par: Roger Nkambou, Ph.D.ProfesseurUQAM
INF1110• Professeur
– Roger Nkambou
• Bureau: PK4925• Tel : 8395
• Auxilliaires d’enseignement• À venir
• Page Web – http://www.info.uqam.ca/~nkambou/inf1110
Horaire• Cours
– G30 (Local SH3620)• Mercredi 15h30-17h• Vendredi 13h30-15h
• Laboratoires• Vendredi 15h-17h
– Local PK-S530, S525
• Consultations• Mercredi de 13h-15h (à mon bureau)
Interaction
• Plusieurs moyens pour contacter le prof et lesauxilliaires afin de poser des questions sur le cours ou les travaux:– Durant les séances d’exercices (démo): c’est le moyen
le plus simple et le plus efficace. N’hésitez pas à en faire usage !!!
– Par courriel ([email protected])– Durant le créneau horaire dédié aux consultations.– Par le forum (un autre moyen efficace)
Objectifs du cours• Familiariser les étudiants à une approche de
résolution de problème et aux notions de base liées à la programmation à l’aide du langage Ada.
• Contenu:– Rapide introduction à l’ordinateur– Introduction aux méthodes de résolution de problème et
à l’algorithmique– Présentation des concepts de base de la programmation
en Ada (variables, expressions, structures de contrôle,fonctions, entrées/sorties, gestion des exceptions,utilisation des modules externe, types structurés,fichiers)
Séances de labo (Démo)
• Elles sont obligatoires et fortement recommandées car c’est dans ce cadre que vous devez mettre en pratique les aspects “théoriques” vus en cours.
• La première séance vous permettra de vous familiariser avec l’environnement de programmation (ObjectAda 7.1, 7.2) et le système d’exploitation (Windows2000).
• Les autres séances consisteront chacune en un ensemble d’exercices pratiques relatifs aux concepts étudiés en cours (énoncés disponibles sur le site).
• Les solutions des démos seront disponibles sur le Web au plus tard à la séance suivante.
Évaluation
• Examens• Intra (25%)• Final (25%)
• Travaux pratiques (3)• Tp1 - Individuel (15%)• Tp2 - Individuel (15%)• Tp3 - Groupe (20%)
• Seuils :• Examen: 50%• Tp : 50%
• Travaux en retard: • -10% par jour de retard• 0 si plus d’une semaine de retard
Documentation
• Notes de cours du professeur Pierre Richard (Disponibles à la Coop)
• Livres recommandés (disponibles à la Coop)– P. Gabrini– J. Skansholm
• Autres ressources disponibles sur la page web du cours
Qu’est-ce que la programmation ?• Ordinateur = Automate programmable• Programme = Description de la tâche à réaliser par
un ordinateur = Séquences d’instructions et dedonnées susceptibles d’être traitées (c-à-d “comprise” et “exécutées”) par l’automate.
• Programmer, c’est décomposer la tâches àautomatiser sous la forme d’une séquence d’instructions et de données adaptées à l’automate utilisé.
Structure simplifiée d ’un micro-ordinateur
Sous-systèmed ’E/S
Bus d ’adresses
Bus de données
Bus de contrôle
Microprocesseur
Unité centralede traitement
Mémoire Centrale (RAM)
La mémoire
• But: Stocker les données et les programmes pour des fins de traitement.
• La RAM est organisée comme un ensemble de cases adressées (ou mots) de taille fixe (16, 32, 64 bits selon le cas).
• Capacité mémoire en octet (8bits), KiloOctet, MégaOctet ou GigaOctet• Hiérarchie des mémoires:
– Registres– Mémoire cache (sur la même puce que le CPU): pour stocker les
instructions fréquentes ou courantes afin d’éviter l’accès à la RAM. Très rapide
– RAM– Disk cache– Disque (magnétique + optique)– Bande magnétique
La mémoire
0
1
23
4
5
6
N-2
N-1
M-1 M-2 M-3 M-4 2 1 0M-5
Le sous-système d’E/S
• Il est chargé de la gestion des dispositifs d’entrée (clavier,souris, capteurs, …) et de sorties (écran, imprimantes, …).
• Il est connecté à ceux-ci par des PORT (Ex: ports serie et parallèle pour imprimante, souris, clavier…)
• Les ports sont ensuite connectés aux bus (une sorte d’autoroute interne à l’ordinateur)
• L’information est transmise de la mémoire centrale vers lesdispositifs de sortir à travers le Bus.
• Inversement, l’information en provenance des dispositifs d’entrée est envoyée en mémoire via le Bus.
• Le Bus de données transporte les données, le bus decontrôle, les informations de contrôle et le bus d’adresse, les adresses.
Le micro-processeur
• Il détermine l’ensemble des instructions élémentaires(instructions-machine) que l’ordinateur est capabled’exécuter.
• Il est chargé de traiter les instructions spécifier par leprogrammeur.
• Il comprend 2 composantes: l’unité arithmétique et logique(UAL) et l’unité de contrôle (UC).
• L’UAL effectue les opérations arithmétqiues (additions,soustraction …)
• L’UC contrôle la séquence d’exécution des instructions.
Les microprocesseurs INTELMicroprocesseur Largeur bus données
8048 8 8051 8
8085A 8 8086 16 8088 8 8096 16
80186 16 80188 8 80286 16
80386EX 16
80386DX 32 80386SL 16
80386SLC 16 80386SX 16
80486DX/DX2 32 80486SX 32
80486DX4 32 Pentium 64
Les microprocesseurs MotorolaMicroprocesseur Largeur bus données
6800 8 6805 8
6809 8 68000 16
68008Q 8 68008D 8 68010 16 68020 32 68030 32 68040 32 68050 32 68060 64
PowerPC 64
Les instructions-machine
• Comme nous le savons, l’ordinateur ne peut comprendre que des instructions de très bas niveau se reduisant en unesuite de 0 et de 1.
• Ainsi, les instructions-machine sont trop élémentaires pourpouvoir être utilisées efficacement par les humains pourécrire des programmes.
• Considérons l’exemple suivant :
– On veut écrire un programme qui initialise uncompteur à 5 et qui décrémente ce dernierjusqu’à 0...
Instructions-machine (suite)
Ce qui donne le programme suivant enlangage machine: 00000100000010100000010100000000000010100000000000000011000000110000000100001010000000111000001100000010
Ins tr . Code Mach . D o n n é e s C o d e M a c h . P r o g r a m m e
CMP 00000000 D E C R 0 0 0 0 0 0 0 1 E N D 0 0 0 0 0 0 1 0 J U M P 0 0 0 0 0 0 1 1 LOAD 00000100
-3 1 0000011
0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 1 0
3 0 0 0 0 0 0 1 1
5 0 0 0 0 0 1 0 1 6 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 1 0
1 : LOAD 10 5 2 : CMP 10 0 3 : JUMP +3 4 : DECR 10 5 : JUMP –3 6 : E N D
La notion de langage deprogrammation
… Il faut donc fournir au programmeur lapossibilité d’utiliser des instructions de plus haut niveau, plus proches de notre manièrede penser et de conceptualiser les problèmes…
Voici 3 exemples d’instructions écrits dansdes langages de haut niveau pour leproblème précédent:
La notion de langage deprogrammation (suite)
BASIC C ADA
1 N=5 2 LABEL 1 3 IF (N=5) THEN GOTO 2 4 ELSE N=N-1; GOTO 1 5 LABEL 2 6 END
For (n=5; n>0; n--)
N := 5 ; loop N := N-1; exit when (N=0); end loop; ou N := 5; While (N /= 0) loop N := N-1; End loop;
La notion de langage deprogrammation (suite)
• Cependant, si nous utilisons des instructions plus accessiblesà l’humain, comment les rendre compréhensibles pour lesordinateurs qui doivent les exécuter ?
• Solution:– Disposer d’un programme capable de TRADUIRE les séquences
d’instructions de haut niveau en des séries d’instructions-machinedirectement exécutables par les circuits électroniques du microprocesseur.
– Selon ses caractéristiques , un tel programme est appeléCOMPILATEUR ou INTERPRÉTEUR.
– L’ensemble des instructions et des données de plus haut niveau qu’un compilateur ou un interpréteur est capable de traiter constitue un LANGAGE DE PROGRAMMATION (Lexique, syntaxe etsémantique).
La notion de langage deprogrammation (suite)
• Un langage de programmation est donc un moyen formel permettant de décrire des traitements (c-à-d des tâches à réaliser)sous la forme de programmes (c-à-d de séquences d’instructions et de données de “haut niveau” (c-à-d compréhensibles par leprogrammeur)) pour lequel un compilateur ou un interpréteur est disponible pour permettre l’exécution effective par un ordinateur.
• Exemple de langages de programmation: C, C++, Ada, Java, Pascal,…
• Exemple de compilateurs (ou d’interpréteurs) – pour C: gcc, icc– pour ADA: adacomp , gnat (compilateur), adaexec (interpréteur)
Interpréteur / Compilateur• Ce sont tous 2 des programmes destinés à traduire des
programmes écrits dans un langage de programmation de hautniveau en des séries d’instructions-machine directement exécutables par l’ordinateur.
• La différence réside dans la manière dont la traduction est réalisée:– Compilateur: traduit tout le programme à la fois et génère un
exécutable réutilisable.• Avantage: permet de réaliser des applications plus efficaces (possibilité
d’optimisation à la compilation)– Interpréteur: traduit le programme instruction par instruction dans le
cadre d’une interaction continue avec l’utilisateur.• Avantage: idéal pour le prototypage (on peut immédiatement tester ce que
l’on est entrain de réaliser)
• La traduction se subdivise en 4 étapes essentielles: l’analyse lexicale, l’analyse syntaxique, les vérifications sémantiques et la génération du code.
Environnement d’utilisation d’unsystème informatique
• Les compilateurs et interpréteurs sont des bons exemples deprogrammes utilitaires, c-à-d des programmes qui doivent être disponibles sur un système informatique afin de le rendre effectivenement utilisable.
• Un autre exemple de programme utilitaire incontournable estle système d’exploitation, qui n’est autre que le programme utilitaire dont le rôle est de gérer le bon fonctionnement du système informatique, et en particulier, de prendre en charge les interactions du système avec l’utilisateur.
• Exemples de systèmes d’explotation:– Unix, DOS, Linux
Système d’exploitation
• Les tâches du système d’exploitation sont multiples. Parmiles plus importantes, on peut citer:
– la gestion des accès auxsystème (connections et déconnections);– la gestion de la mémoire centrale;– la gestion des mémoires secondaires et d’une façon plus générale,
des périphériques (imprimantes, modem, …);– la gestions des accès aux divers programmes utilitaires
(interpréteur, compilateur, éditeur…);
– ...
Système d’exploitation (suite)• Gestion des chemins d’accès aux fichiers
– Arborescence de repertoires
• repertoire principal : \• chemin d’accès à un répertoire parent: ..• Exemples de commandes:
– A:\langages\prolog> CD..– A:\langages\objectada> DIR \– A:\langages> DEL OBJECTADA\PROG1.ADA– A:\texte> DIR \LANGAGES\OBJECTADA– A:\> COPY B:\EXEMPLE1.INF LANGAGES\OBJECTADA\EX1.ADA
• Quelques commandes DOS– CD, CHDIR, CHKDSK, COMP, COPY, DEL (ERASE), DIR,
DISKCOMP, DISKCOPY, FORMAT, MD (MKDIR), PRINT, REN (RENAME), RD (RMDIR), TYPE
Vue en couche d ’un micro-ordinateur
Machine physique
Machine virtuelle du SE
Machines virtuelles des langagesde programmation
Applications
DOS
Windows
Environnements de programmation
icc, gcc, adacomp, adaexec...
Électroniciens
Programmeurssystème
Programmeursd ’applications
Utilisateurs
Évolution des langages de programmation
Le langage machine (spécifique à une architecture donnée) •excessivement compliqué pour les humains•n'a pas été utilisé très longtemps•très petits programmes (<1000 instructions)
Le langage d'assemblage (spécifique à une famille d'ordinateurs donnée) •problèmes relativement simples et/ou courts •a évolué énormément au cours des ans•il était surtout utilisé pour les programmes de système
Les langages de haut niveau (FORTRAN, COBOL, ...) •problèmes longs mais peu complexes •pas de structure (à l'époque) des instructions ni des variables•étaient spécialisés à des domaines spécifiques
Évolution des langages de programmation
La programmation structurée (ALGOL, ADA, Pascal, C, Modula, ...)•problèmes assez complexes et/ou longs •bonnes structure des énoncés et des variables •assez rigides et lourds dans leur utilisation
La programmation orientée objet (C++, ObjectAda, Delphi, Java, Simula, ...)
•problèmes très complexes •traitement simplifié d'objets physiques ou non •augmentation de la productivité des utilisateurs
L'ingénierie du logiciel •problèmes très gros et très complexes•participation de grosses équipes de travail •plusieurs outils de conception de logiciels
Exemple de fonction procédurale
Solde
Montant
Nouveau soldeRetrait()
Compte
Compte
Exemple d ’objet
Compte
soldeMontant retrait
Exemple d ’encapsulation
solde
Dépôt
Retrait
OBJET COMPTE
Phases de préparation d ’un programme Ada (1)Algorithme
Prog. source
Prog. objet
Fonctions externes
Source éditéÉditeur
Compilateur
Éditeur de lien Chargement
Exécution
Librairie des programmes
Codification
Phases de préparation d ’un programme ADA (2)
Code objet
Code exécutable
Code de la lib.
Code source
Compilateur
Édition de lien
Code de démarrage
Environnement
Éditeur
Compilateur
Ed. de lien
Chargeur
UCT
RAM
RAM
disque
disque
disque
disque
Phase 1
Phase 2
Phase 3
Phase 4
Phase 5
Extension au nom du fichier source
monFichier.ada
Nom de base
ExtensionPoint
Un mot sur le codage interne des données
• Parler le même langage pour pouvoir échanger des données: vrai pour les humain mais aussi pour les ordinateurs
• D’où l’existence des normes. Ex: IEEE754 pour le codage des données
Codage des caractères• ASCII initial : 7 bits pour le codage =) 128 position (de 0 à
127). Ce qui laisser les position de 128 à 255 à la disposition des concepteurs pour le codage des caractères graphiques par exemple (unité de l’info = octet (8 bits)).
• ISO 8859 a ensuite imposé ces positions selon les aphabets. Ex: ISO 8859-1 (ou ISO-Latin-1) pour l’Europe occidentale qui fixe les caractères codés dans les position 128 à 255.
• Toutefois, 256 positions restent insuffisant pour coder de manière uniforme tous les alphabets. Solution: UNICODE
• UNICODE code un caractère sur 2 octets, ce qui offre une possibilité de 65536 positions. Pour l’instant, seul 34168 positions ont été attribuées, ce qui laisse de la place même pour les extra-terrestres ?
• JAVA a été le premier langage a utilisé UNICODE =) qu’un programme peut avoir des variables en japonais et produire des message d’erreur en russe (moyenne l’installation des polices appropriées sur votre ordi)
Codage des entiers et des réels• De 16 à 64 bits selon le cas • Cas de Ada : Voir livre de Pierre Richard
Introduction à l ’algorithmique: La résolution de problèmes
• Données (informations dont on dispose)• Démarche de traitement (algorithme) • Résultats (informations que l ’on souhaite
calculer)
Les types d ’informations
• Plusieurs types d ’informations– nombres réels représentant des mesures physiques, – nombres entiers, – rationnels , – mot ou phrase saisi par l'utilisateur, – suite de rationnels décrivant les coefficients d'un
polynôme, – heures, – dates... ou toute combinaison plus complexe d'une des
formes ci-dessus.
Les valeurs
• valeur = information donnée ou qui a été calculée. Exemple : 1, 3.1415926536, 22/7 sont des valeurs (respectivement entière, décimale et fractionnaire). (3, 4) est une valeur dans N2.
Démarche de résolution
• Algorithme = suite d ’opération à exécuter pour produire les résultats recherchés à partir des données.
• Cette suite = ensemble d ’expressions• Expression = forme symbolique, contenant des
valeurs et des opérateurs servant à exprimer une nouvelle valeur.
• Exemple: <Image>, faux ou (3*4 = 0) sont des expressions
Évaluation des expressions
• Toute expression a un type qui détermine l'ensemble dans lequel elle prend sa valeur.
• Évaluer une expression consiste à calculer sa valeur. L ’évaluation de l ’expression (5/2) donne le réel 2.5. Celle de (3*4=0) donne le booléen « faux ».
Types d ’expression• Expressions arithmétiques ==> opérateurs
arithmétiques (+, -, cos, sin, …)• Expressions booléennes ==> opérateurs logiques
(ou, et, non)(valeur = vrai ou faux)• Expressions relationnelles ==> opérateurs
relationnels (=, <>, >, <, …)• Expression alternative: si ExpB alors Exp• Expression itérative:
– pour i=1..N faire SuiteD ’exp– Repéter SuiteD ’Exp jusqu ’à ExpB– Tantque Condition faire SuiteD ’Exp
Les expressions d ’affectation et les variables
• Variable = Contenant déclaré d ’un certain type pouvant contenir à un moment donnée une valeur du type concerné.
• Déclaration d ’une variable (Expression de déclaration) = spécification du type de la variable. Exemple: N:entier ==> Je déclare que N est une variable de type entier. Un espace mémoire sera réservé pour cette variable.
• Affectation d ’une valeur à une variable = Mettre une valeur dans une variable. Exemple: N <--- 5. (La variable N reçoit la valeur 5).
Exemple 1Calcul de la somme des N premiers nombres entier Données : N : entier // déclaration des données Résultats : S : entier // déclaration des résultats Démarche : Début S = 0; // initialisation Lire(N); // donnée attendu de l’usager Pour i=1 jusqu’à N // expression itérative (boucle) // i est la variable de contrôle de la boucle Faire S=S+i; FinFaire Retourner(S) // retourne le resultat Fin
Exemple2Maximun de deux nombres entiers Données : Nombre1 : entier // déclaration des données Nombre2 : entier Résultats : Maximum : entier // déclaration des résultats Démarche : Début Si (Nombre1 >= Nombre2) alors // expression conditionnelle Maximum = Nombre1 Sinon Maximum = Nombre2 Finsi Retourner(Maximum) // retourne le résultat Fin
Méthodologie de résolution de problèmes• 3 phases:
– Spécification • identifier le problème (lui donner un nom),• faire le bilan des données disponibles, • préciser leur type, • définir le type de résultat attendu, et • décrire ce résultat (sans dire comment le calculer).
Cette phase résulte en un programme, dont on choisit le nom, on précise les types, et dont on commente le fonctionnement.
– Conception• Ébauche d ’une solution (approche par analyse descendante (voir plus
loin))• Affinement de cette solution (Algorithme) • Développement d ’une stratégie de vérification (préparer un jeu d ’essai
significatif (contenant des données normales, extrêmes, hors bornes, incorrectes, etc.).
Méthodologie (suite)– Réalisation• Programmation (phase de codage):
– traduire l'algorithme dans un langage donné (dans notre cas, ADA):• utiliser les constructions adéquates du langage en veillant au respect des
règles de syntaxe, • utiliser les types présents dans le langage en veillant à ce que leurs
limitations ne mettent pas la solution en défaut. • Vérification et tests
– vérifier que le type calculé correspond au type que l'on avait spécifié. – réaliser des tests fonctionnels, qui peuvent permettre, de déceler d'éventuelles
erreurs de fonctionnement.– l'impossibilité pratique de réaliser des tests exhaustifs, ne permet pas de
prouver que la fonction est totalement correcte.• Rédaction de la documentation (spécification, document de conception,
guide d ’utilisation, limites du programme, listing du programme source bien commenté, description des fichiers sur l ’unité contenant le programme).
Exemple
• Un cinéphile veut enregistrer un film de durée x minutes et qui commence à une heure donnée; il veut pour cela connaître l'heure de fin et savoir si oui ou non, le film finira le lendemain.
• Spécification :– la fonction finDuFilm(hdebut :entier,mndeb:entier,duree:entier) qui
calcule l ’heure de fin, la minute de fin (qui correspondent au temps de debut + duree), et un booleen vrai s'il y a passage a 0h *)
Exemple (suite)• Algorithme :– On va utiliser l'arithmétique modulo 60 pour calculer la minute de
fin, et l'arithmétique modulo 24, pour calculer l'heure et savoir si on passe au lendemain.
– On va effectuer un calcul intermédiaire pour savoir de combien d'heures le temps avance.
• Données: hdebut, mndebut, duree : entiers• Resultats: hfin, mnfin : entiers; lendemain?: booléen• FinDuFilm(hdebut, mndebut, duree )• Début
– var nbheure: entier // déclaration d ’une variable locale– nbheure = (mndeb+duree) div 60;– hfin = (hdebut+nbheure) mod 24;– mnfin = (mndebut+duree) mod 60;– lendemain? = ((hdebut + nbheure) >= 24);– Retourner(hfin*mnfin*lendemain?);
• Fin
Exemple (suite)• Programmation :
– On choisit de coder cet exemple en Ada en suivant les étapes indiquées plus haut (codification, édition, compilation, édition de lien, exécution du module de chargement). Voir le programme et les fichiers générés durant ces étapes.
Exemple (suite)• Vérification et tests
– Plusieurs types d ’erreurs:• Erreurs de compilation (problèmes lexicaux ou syntaxiques). PS: langage =
vocabulaire (ensemble d ’éléments lexicaux) + synthès (ensemble des règles de formation des instructions à partir des éléments lexicaux) + sémantique (signification des symboles du langage).
• Erreurs d ’exécution (problème de conformité de types, opération interdite(division par zéro)). Ces erreurs ne peuvent être détectées à la compilation. Ada offre la possibilité de prévoir et de gérer certains types d ’erreur à l ’aide des Exceptions.
• Erreurs de sémantique: peuvent provenir de la conception. Erreurs très difficilement détectable. Le programme s ’exécute normalement sauf qu ’il ne produit pas de bons résultats.
• Erreurs de conception: erreurs de raisonnement ou d ’interprétation des specdu problème.
– La conception d ’un programme reste un processus itératif (voir schéma de la figure 2.3 (Notes de Pierre Richard))
w i t h A d a . T e x t _ I O ; u s e A d a . T e x t _ I O ; p r o c e d u r e F i n D u F i l m i s s u b t y p e H e u r e i s I n t e g e r r a n g e 0 . . 2 4 ; s u b t y p e M i n u t e i s I n t e g e r r a n g e 0 . . 6 0 ; p a c k a g e E S _ D _ E n t i e r s i s n e w I n t e g e r _ I O ( I n t e g e r ) ; p a c k a g e E S _ D _ E n t i e r s _ H e u r e i s n e w I n t e g e r _ I O ( H e u r e ) ; p a c k a g e E S _ D _ E n t i e r s _ M i n u t e i s n e w I n t e g e r _ I O ( M i n u t e ) ; - - p a c k a g e E S _ D _ B o o l e e n i s n e w B o o l e a n _ I O ( B o o l e a n ) ; D u r e e , N b _ H e u r e : I n t e g e r ; H _ D e b u t , H _ F i n : H e u r e ; M n _ D e b u t , M n _ F i n : M i n u t e ; L e n d e m a i n : B o o l e a n ; b e g i n - - - E n t r é e d e s d o n n é e s - - - - - P u t ( " Q u e l l e e s t l a d u r é e d u f i l m ? " ) ; E S _ D _ E n t i e r s . G e t ( D u r e e ) ; n e w _ l i n e ; P u t ( " Q u e l l e e s t l ' h e u r e d e d é b u t ? " ) ; E S _ D _ E n t i e r s _ H e u r e . G e t ( H _ D e b u t ) ; n e w _ l i n e ; P u t ( " Q u e l l e e s t l a m i n u t e d e d é b u t ? " ) ; E S _ D _ E n t i e r s _ M i n u t e . G e t ( M n _ D e b u t ) ; n e w _ l i n e ; - - - C a l c u l s - - - - - - N b _ H e u r e : = ( M n _ D e b u t + D u r e e ) / 6 0 ; H _ F i n : = ( H _ D e b u t + N b _ H e u r e ) m o d 2 4 ; M n _ F i n : = ( M n _ D e b u t + D u r e e ) m o d 6 0 ; L e n d e m a i n : = ( H _ D e b u t + N B _ H e u r e ) > = 2 4 ; - - - A f f i c h a g e d e s r é s u l t a t s - - - n e w _ l i n e ( s p a c i n g = > 3 ) ; P u t ( " H e u r e d e f i n : " ) ; E S _ D _ E n t i e r s _ H e u r e . P u t ( H _ F i n ) ; n e w _ l i n e ; P u t ( " M i n u t e d e f i n : " ) ; E S _ D _ E n t i e r s _ M i n u t e . P u t ( M n _ F i n ) ; n e w _ l i n e ; i f L e n d e m a i n t h e n P u t ( " L e f i l m f i n i l e l e n d e m a i n " ) ; e l s e P u t ( " L e f i l m n e f i n i p a s l e l e n d e m a i n " ) ;
Analyse Descendante
• consiste à examiner globalement le problème, et à essayer de le décomposer en sous-problèmes indépendants.
• On se contente alors de spécifier les sous-problèmes, pour pouvoir écrire l'algorithme général, qui va utiliser les solutions des sous-problèmes.
• Il reste ensuite à réaliser un algorithme pour chacun des sous-problèmes (affinement de la solution).
• Deux approches de décomposition:– Décomposition par cas– Décomposition structurelle
Analyse descendante: Décomposition par cas
• Selon les données, on constate que le traitement à effectuer est différent, et que les solutions pour chacun des cas sont indépendantes. On décomposera alors le problème en autant de sous-problèmes qu'il y a de cas.
Analyse descendante: Décomposition structurelle
• On met en évidence des résultats intermédiaires qui semblent plus faciles à calculer en fonction des données, et qui serviront à calculer le résultat final.
• Les sous-problèmes consistent alors à calculer chacun de ces résultats intermédiaires (en fonction de données et d'autres résultats intermédiaires) et à calculer les résultats finaux (eux aussi en fonction de données et de résultats intermédiaires).
Exemple décomposition structurelle
Délimiter un terrain avec une haie
Poser la haieCalculer le nombre d’arbustes
Planter les arbustes
Creuser une tranchée
Acheter les arbustes
Choisir le type d’arbustes
Exemple (Décomposition par cas)
• On se propose d'écrire une fonction de conversion entre unités de longueur du système métrique et unités anglo-saxonnes. On se limitera aux mètre (m), centimètre (cm), pied (ft) et pouce (inch). On a : 1 inch = 2.54 cm et 1 ft = 12 inch. On veut pouvoir convertir la représentation décimale d'une longueur dans n'importe quelle unité (m, cm, ft, inch), en la représentation de la même longueur dans les deux unités de l'autre système. Par exemple 1.77 m -> 5 ft 10 inch et 30.5 ft -> 9 m 29 cm. On veut de plus, c'est une habitude, obtenir des résultats seulement en pouces pour des longueurs inférieures à 2 pieds.
Exemple (suite)
• Spécification:– fonction conversion (longueur: réel, unité:
chaîne) retourne:• longueur1: entier, unité1: chaîne• longueur2: entier, uniter2: chaîne
Exemple (suite)
• Analyse descendante– Décomposer en 2 cas:
• la conversion d'unité SI vers unités anglo-saxonnes, (fonction cm_to_ft_inch) et
• l'inverse (fonction inch_to_m_cm ).
– Décomposer chacun des 2 cas précédant selon l'unité donnée:
• "m" : cm_to_ft_inch (100 * longueur)• "cm" : cm_to_ft_inch (longueur)• "ft" : inch_to_m_cm (12 * longueur)• "inch" : inch_to_m_cm (longueur)
Exemple (suite)
Convertir du SI à Anglo-saxonne (et vis-versa)
Convertir de Anglo-saxonne à SI
Convertir de SI vers Anglo-saxonne
Convertir à partir du « inch »
Convertir à partir Du « feet»
Convertir à partir du centimètre
Convertir à partir du mètre
Les niveaux de programmations
6 niveaux de programmation:• Les programmes sans sous-programmes• La programmation procédurale• L ’utilisation de bonnes structures de données• L ’utilisation de structures de données avancées• L ’utilisation de la récursivité• La programmation orientée objet
Le niveau 3: L ’utilisation de bonnes structures de données
Le choix des structures de données est une étape aussi importante que le choix des algorithmes. Ces derniers doivent refléter la solutionau problème tandis que les premiers doivent doivent représenter correctement les données utilisées.
•Le programme est plus simple et par conséquent plus clair. •Les types des variables représentent bien les données traitées. •Il n'y a pas de tour de passe-passe (Ex: X = 1 - X).
On peut facilement séparer la conception du programme: certains travailleront sur les structures de données, d'autres sur les algorithmes; pensez aux bases de données par exemple.
Le niveau 4: L ’utilisation de structures de données avancées
Pour certains problèmes complexes nous devons, pour nous faciliter la tâche, utiliser des structures de données plus avancées afin de simplifier au maximum les algorithmes. Ces structures ne font pas partie dulangage; le programmeur doit les inventer. En voici quelques exemples:
•Les fichiers structurés: •Les fichiers à format fixe•L'accès direct •L'accès séquentiel indexé•Les fichiers à plusieurs niveaux d'index balancés (B+)•Les fichiers à multiples structures •Les variables structurées: •Les piles •Les listes linéaires (chaînées ou doublement chaînées) •Les arbres (binaires, ternaires, etc ou même sans limite sur le nombre de branches) •Les réseaux •Les structures multi-dimensionnelles
Le niveau 5: L ’utilisation de la récursivité
Pour certains algorithmes, l'utilisation de la récursivité simplifie grandement la programmation. Pensons simplement:
• au problème des tours de Hanoi; • au tri rapide d'enregistrements qui sont produits lentement;• au problème du commis-voyageur (Branch and bound); • à la programmation de certains jeux (Othello, le TIC-TAC-TOE, les échecs etc).
Le niveau 6: La programmation orientée objet
À ce dernier niveau on peut représenter les choses traitées par ce qu'on appelle des objets.
• Un objet contient non seulement des structures de données mais, en plus, des algorithmes. On dit qu'un objet a des statuts (ou états) et des comportements (ou méthodes). • La séparation des niveaux de variables (globales, locales, etc) est très rigide et permet une plus grande sécurité lors de la programmation. • Les objets peuvent être reliés les uns aux autres selon leur type par un mécanisme appelé héritage. • Le programmeur peut littéralement créer des nouveaux types avec leurs caractéristiques propres.
ExerciceEn vous servant des notions vues en cours, écrire un programme qui permet de saisir les notes d'un étudiant du cours Inf 1110. On calcule la note globale selon le barème suivant: 25% pour l'intra, 25% pour l ’examen final et 50% pour les travaux pratiques (soit respectivement 15%, 15% et 20% pour les Tp1, Tp2 et Tp3). Sachant que le seuil de passage est fixé à 50% pour les examens et à 50% pour les travaux, le programme devra indiquer si oui ou non l ’étudiant a réussi le cours.
Voici un exemple de sortie: Intra : 75Final : 82Tp1 : 80.5Tp2 : 67.90Tp3 : 75.9
Moyenne des examens : Moyenne des travaux : Note globale :
Félicitation, vous avez réussi à INF1110 (Bonne chance pour INF2110).
Exercices divers
Exercice 2: Nombres premiers
Vous devez écrire un programme qui imprime une liste des nombrespremiers jusqu'à une certaine limite (20 par exemple).
Note:Un nombre premier n'est divisible, sans reste, que par 1 et par lui-même.
Exercices divers (suite)
Exercice 3: Somme des chiffres d'un nombre
Votre programme doit saisir des nombres positifs et calculer la somme des chiffres composant ce nombre. Par exemple, la somme des chiffres de 1234 est 10.
Introduction à Ada• Motivation de la création de Ada
– La DA constate la diversité des langages deprogrammation utilisés dans leurs projets
– Difficile donc d’interfacer les projets à cause del’incompatibilité des langages utilisés (faible interopérabilité).
– Peu de langages permettaient de découvrir la plupart deserreurs à la compilation…
– Coût de maintenance élevé (interfaçage entre projets,méthodes GL)
• => CRISE DU LOGICIEL• =>D’OÙ LA DÉCISION DE CRÉER Ada (en 1976).
Une idée du coût de maintenance
Événéments important dans l’histoire de Ada
• 1980 : Ada devient un standard militaire• 1983 : Premier standard ANSI (Ada83)• 1986 : Déclaré langage standard de l’OTAN• 1987 : Ratifié par l’ISO• 1991 : Le congrès américain donne mandat d’utiliser
Ada dans tous les projets de la DA• 1995 : Nouveau standard Ada ratifié pae l’ISO
(Ada95) => Le nouveau standard inclut un support au développement d’applications spécialisées(système temps-réel, interface avec les autres langages, POO)
Applications industrielles en Ada
• Système d’avertissement du Airbus A340, Boeing 777
• Système de décodage de CANAL +• Contrôleur de robot (SIMULA)• ...
Élément d’un programme Ada
• Éléments lexicaux (vocabulaire) :– mots réservés (mots clés du langage)– délimiteurs– identificateurs– identificateurs prédéfinis– littéraux numériques (nombres)– littéraux caractères– littéraux chaînes– commentaires.