Structure de données et algorithmique de base

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

Tris.
Architecture de machines Codage des informations
Chapitre annexe. Récursivité
Les procédures et interruptions en Assembleur (Tasm)
Introduction: Concepts de la programmation
Algorithmique et Programmation DEUG 2 Sciences Economiques 2004/2005
Algorithmique et Programmation
Algorithmes et structures de données avancés
Portée des variables VBA & Excel
Algorithmes et structures de données
Fonctions & procédures
Introduction à l’Algorithmique
Algorithmique.
Algorithmique et évaluation
Algorithmique Résume.
Exercice Notre programme s'exécute en 10 secondes sur A, qui dispose d'une horloge à 100Mhz. Nous tentons d'aider un concepteur à construire une machine.
Le codage de l ’information
INTRODUCTION.
Introduction : Compilation et Traduction
8. Les tableaux P. Costamagna – ISEN N1.
Présentation Unité de codage
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Les bases de l’Algorithmique
Conception et analyse des algorithmes
Cours de programmation
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Partie 1 Etude de l'existant
Partie Informatique Algorithmique Introduction A. LOTFI
Démarche de résolution de problèmes
Algorithmique et Programmation
8PRO100 Éléments de programmation Comment faire prendre une décision à un ordinateur?
Les éléments de base de l’algorithmique
Création d’un programme :
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
ALGORITHMIQUE en classe de seconde
Le codage des nombres en informatique
Algorithmique et Programmation
FICHIERS : Définition : Algorithme général:
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Introduction à l’algorithmique
8PRO107 Éléments de programmation
Chapitre 3 Syntaxe et sémantique.
Les formats Débutant – Semaine 4.
Programmation linéaire en nombres entiers : les méthodes de troncature
Paradigmes des Langages de Programmation
Informatique, Ordinateur & Programme ...
O-notation 1. Introduction 2. O-notation 3. Opérations 3.1 Somme 3.2 Produit 4. Règles générales 5. Exemple 6.Analyse des algorithmes récursifs 6.1 Dilatation.
INTRODUCTION.
Algorithmique et programmation (1)‏
Un survol du language C.
Codage des nombres en informatique : le système binaire.
Programmation linéaire en nombres entiers
REPRESENTATION DE L’INFORMATION
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)
Le codage des nombres en informatique
Algorithmique et programmation en
1. Spoon Christophe Delagarde, septembre 1998 I.U.T., Université de la Méditerrainée 2.
CPI/BTS 2 Algorithmique & Programmation La récursivité Algo – Prog CPI/BTS2 – M. Dravet – 14/09/2003 Dernière modification: 14/09/2003.
Codage de l’information
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Scripts et fonctions Instructions de contrôle
Chapitre 4 La représentation des nombres.
développeur informatique
Chapitre 4b La représentation des nombres.
Algorithmique Boucles et Itérations
La NUMERISATION de l’information
ALGORITHME ET PROGRAMMATION RÉVISION Informatique et Sciences du Numérique.
Transcription de la présentation:

Structure de données et algorithmique de base Cours de PCEM 2 F. KOHLER f.kohler@chu-nancy.fr

Objectifs Connaître les principales structures de données manipulées dans un programme Connaître les notions d’enchaînement, de test, de boucle Définir la notion de fonction, de procédure Connaître les différences entre langage interprété et compilé Savoir appliquer les concepts de base ci-dessus à la programmation de macros (tp)

Références Alfred Aho John Hopcroft, Jeffrey Ullman Structures de données et algorithmique

Un programme Ecriture d'un programme informatique pour résoudre un problème particulier Etapes : Formuler le problème Spécifier les données Construire une solution Mettre en oeuvre l'algorithme, le documenter, évaluer sa complexité

Algorithme Série d'instructions dont chacune a une signification précise et qui peut être réalisée en un nombre fini d'étapes en un temps fini raisonnable. Les instructions de base L'affectation x := y + z La répétition x := 0 repeat until (x < 10) ....... x:= x+1 end repeat Le test If (x=1) then d := 4 Else d := 2.5 End if

Le calcul du poids théorique selon la formule de Lorentz avec D = 4 pour les hommes et D = 2.5 pour les femmes. Les données La taille en centimètres Valeur entière positive supérieure à 150 et inférieure à 210 Le sexe pour déterminer D Code à déterminer avec les utilisateurs exemple : 1 pour homme, 2 pour femme mais cela peut être M pour masculin et F pour féminin ou encore …=> faire un choix parmi tous les codes possible. Sexe vu comme une valeur réelle saisie par l’utilisateur 4 pour les hommes, 2,5 pour les femmes Boutons radio avec comme libellés Homme, Femme Dés ce stade, des conventions vont être acceptées

Erreur (taille ou sexe) ? Le programme On peut schématiser le programme suivant l’organigramme : Demander la taille Demander le sexe Vérifier que la taille est comprise entre 150 et 210 Vérifier que le sexe appartient à la liste {M,F} Erreur (taille ou sexe) ? Oui Non Afficher message d’erreur Faire le calcul Afficher le résultat

Le programme Elaborer un programme c'est résoudre un problème Le premier stade consiste à énoncer le problème et à en exprimer une solution dans un langage informel en réalisant une modélisation mathématique appropriée. A l'étape suivante, l'algorithme est écrit en pseudo-langage, c'est à dire dans un mélange d'instructions formelles que l'on retrouve dans tous les langages de programmation et de langage naturel. Le langage informel initial fait place peu à peu à des suites d'énoncés de plus en plus précises, dans un processus d'affinement progressif. On crée alors les types de données abstraites relatifs à chaque type de données en combinant des types élémentaires (entiers, réel, caractères) en donnant un nom procédural à chaque opération. Dans la troisième phase, on décide de la représentation informatique des types de données abstraites et on écrit dans un langage formel (informatique) les procédures opérant sur ces données. Suit une phase de mise au point et de correction des erreurs.

Comment représenter les choses ? Le codage de l’information Avec 2 bit on peut coder 4 éléments 00 – 01 – 10 – 11 Avec 1 octet on peut coder 28 éléments Cela permet par exemple De représenter les nombres entier de 0 à 255 De représenter 256 symboles comme les caractères utilisés dans une langue. Le code autrefois le plus répandu pour représenter lettre, chiffre, symbole est le code ASCII (American Standard Code for Information Interchange ). Il a été standardisé de manière universelle sur 7 bits et ne permet pas de coder les lettres accentuées ni les caractères spéciaux du français ç, ù, €… L’emploi d’un 8ième bit a été utilisé pour ces caractères mais dans un codage non universel ce qui explique encore aujourd'hui certains problèmes de compatibilités observés entre Macintosh, PC et Unix. C’est un type de donnée. Suivant les langages on l’appelle CHAR, caractère….

Le code ASCII

Représentation des nombres entiers Habituellement, les nombres entiers sont codés sur 2 octets soit 16 bits. On peut alors soit Coder les entiers positifs compris entre 0 et 65 536 Coder les entiers négatifs et positifs compris dans - 32768 à + 32 7667 Comment coder les entiers positif ? Comment coder les entier négatifs ?

Comment coder les entiers positifs Représentation binaire On affecte des puissances de 2 croissantes de la droite vers la gauche en commençant par 2 puissance 0, puis 2 puissance 1….. Exemple sur 3 bits 0 0 0 => 0*22 + 0*21 + 0*20 = 0 0 0 1 => 0*22 + 0*21 + 1*20 = 1 1 0 1 => 1*22 + 0*21 + 1*20 = 5 Addition 0 1 0 + => 2 0 1 1 => 3 ------- 1 0 1 => 5

Comment coder les entiers négatifs Imaginons que l’on représente des entiers sur 3 bits On peut représenter 8 nombres soit de -4 à +3 Rappel représentation de +1 0 0 1 => 1 Le complément à 2 : représentation de – 1 On part de +1 0 0 1 On compléments 1 1 0 On ajoute +1 0 0 1 On obtient – 1 1 1 1

En fait le complément à 2 Est le système le plus simple car il suffit de savoir faire des additions pour réaliser à la fois des additions et des soustractions. D’autre représentations existent (3 bits) Equivalence Signe complément Complément vrai Décimale et valeur absolue restreint (à 2) +0 000 111 000 -0 100 111 +1 001 110 111 -1 101 +2 010 101 110 +3 011 100 101 (+3 – 2) = 1 011 110 ----- 001

Quelles conséquences ? Des résultats qui peuvent surprendre : Imaginons que l’on représente des entiers sur 3 bits On peut représenter 8 nombre soit de -4 à +3 1 0 0 => -4 0 1 1 => +3 Représentation de +2 0 1 0 Adition de +2 et + 2 ------ 1 0 0 => - 1

La représentation des nombres réels Type « mantisse » « exposant » Un certain nombre de chiffres significatifs : en général 15 => Limite de précision qui peut devenir gênante dans certains calculs sur des grands nombres (nombre de globules rouges par mm3)

Les structures de données Les chaînes de caractères : Un tableau de char avec par exemple la longueur de la chaîne en indice 0 du tableau => Limite de longueur à 255 caractères Les pointeurs

Les structures de données Les piles LIFO, FIFO Les listes chaînées Les arbres …

Un exemple On représente chaque maladie par un ensemble de signes. Chaque signe est une chaîne de caractères. On a 3 maladies : Rougeole, Rubéole,Scarlatine. Etablir un algorithme qui trouve les signes communs à ces maladies. Annexe : Signes de la Rougeole : Exanthème, Enanthème, Fièvre, Köplick, catarrhe oculonasal Signes de la Rubéole : Exanthème, Adénopathies Signes de la Scarlatine : Exanthème, Angine,Vomissements, Céphalées, Enanthème, Langue framboisée

Une solution Représentation des signes dans des tableaux : Recherche des signes communs : il ne peut pas avoir plus de signes communs que le plus petit nombre de signes d'une maladie => Rechercher la maladie qui a le plus petit nombre de signes puis rechercher si ces signes sont communs aux deux autres. 0 5 2 6 1 Exanthème Exanthème Exanthème 2 Enanthème Adénopathies Angine 3 Fiévre Vomissement 4 Köplick Céphalées 5 Cat. oc. nas. Enanthème 6 Langue framboisée NbSc := 0 `Nombre de signe de la maladie Min := 1000 `Minimum de signe des maladies Mal := 0 `N° de la maladie qui a le plus petit nombre de signe Boucle de i = 1 à 3 NbS := valeur (S(0,i)) si (NbS < Min) Min :=NbS Mal := i Fin de si FIn de boucle ‘Recherche de la ‘maladie qui a le ‘plus petit nombre ‘de signes

suite Boucle de j = 1 à Min Signe_courant := S(Mal,j) SC(J) := 0 `on va compter dans SC le nombre de maladies auquel `appartient le signe_courant Boucle de k = 1 à 3 `en fait nb maladies à envisager NbS := valeur (S(0,k)) Boucle de L = 1 à Nbs Si S(k,L) = Signe_courant `Le signe_courant est commun à la maladie k et Mal SC(j) := SC(j)+1 Fin de si Fin de boucle `Il en reste plus qu'à imprimer les signes communs Si SC(j) = 3 `en fait Nb Mal Imprimer ("Le signe "+ S(Mal,j) + "est commun aux 3 maladies) On sait maintenant que la maladie Mal a Min nombre de signes : le plus petit nombre de signes. Pour chacun des signes de cette maladie, voyons si ce signe existe dans les autres maladies.

Procédure C’est un morceau de programme qui est appelé, en général plusieurs fois, par le programme principal. Des paramètres peuvent être passés à une procédures Par adresse Par valeur

Fonction et procédure Fonction : C’est un « morceau de programme » que l’on qui retourne un résultat « calculé » à partir des paramètres Exemple : Fonction qui renvoie le minimum de deux valeurs passés en paramètre ` Fonction Min; ` Paramètres $1, $2 : réel ` $0 réel retourne le minimum des deux valeurs si ($1>$2) $0 := $2 sinon $0 := $1 Fin de si Appel de la fonction …… A := 10 B := 12.5 C:= Min(10;12.5)

Complexité des algorithmes En général la solution n'est pas unique Dans l'exemple précédent, on aurait pu d'abord établir la liste des signes différents les uns des autres cités dans toutes les maladies puis on aurait compter le nombre de maladies dans lesquels ces signes était présents. On aurait pu ainsi répondre aux questions : quels sont les signes communs ? quels sont les signes pathognomiques... Les critères de choix d'une solution répondent aux exigences souvent contradictoires : L'algorithme doit être simple à mettre en oeuvre et à mettre au point L'algorithme doit mettre intelligemment à contribution les ressources de l'ordinateur et doit s'exécuter le plus rapidement possible. Le temps d'exécution d'un programme dépend : Des données entrant dans le programme De la qualité du code généré par le compilateur De la nature et de la vitesse d'exécution des instructions du microprocesseur utilisé De la complexité de l'algorithme mis en oeuvre Exemple les tris Objectif trié les valeurs 2, 1, 3, 1, 5, 8 pour obtenir 1, 1, 2, 3, 5,8 Le temps d'exécution dépend du nombre n de valeurs à trier selon une fonction T(n) qui varie en fonction du nombre de valeur mais aussi de l’algorithme, certain étant mieux plus performant quand n est petit d’autre quand n est grand.

Le programme et sa traduction Le microprocesseur ne « digère » qu’un code binaire correspondant à son propre jeux d’instructions. Pour simplifier l’écriture des programmes on utilise des langages plus facile à manipuler (programme source) qui doivent être « traduit ». La traduction peut se faire Globalement un fois pour toute, on parle alors de compilation Instruction par instruction, on parle alors d’interprétation Les programmes qui assure la « traduction » sont des compilateur et des interpréteurs. Un même langage peut disposer de compilateur et d’interpréteur.

Les macros Certains logiciels comme word, excel, textedit, photoshop… possède un langage interne souvent plus ou moins spécifique et limité permettant d’écrire des programmes utilisant les fonctions de ces logiciels afin d’automatiser des fonctions répétitives. En général, il y a possibilité « d’enregistrer » la macro en lançant l’enregistrement puis en effectuant une fois les différentes actions à réaliser (par exemple redimensionner une photo couleur à une taille fixe, puis la transformer en noir et blanc…). Une fois les actions terminées, on met fin à l’enregistrement, on donne un nom à la macro et l’on peut ensuite en demander l’exécution.