26
Structure de données et algorithmique de base Cours de PCEM 2 F. KOHLER [email protected]

Structure de données et algorithmique de base Cours de PCEM 2 F. KOHLER [email protected]

Embed Size (px)

Citation preview

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

Structure de données et algorithmique de base

Cours de PCEM 2

F. KOHLER

[email protected]

Page 2: 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)

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

Références

Alfred Aho John Hopcroft, Jeffrey UllmanStructures de données et algorithmique

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

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é

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

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 testIf (x=1) then

d := 4

Else

d := 2.5

End if

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

Le calcul du poids théorique selon la formule de Lorentz

• La formule :

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

D

TaillecmTaillethéoriquePoids

150)100)((

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

Le programme• On peut schématiser le programme

suivant l’organigramme :Demander la taille

Vérifier que la taille est comprise entre 150 et 210

Demander le sexe

Vérifier que le sexe appartient à la liste {M,F}

Faire le calcul

Afficher le résultat

Erreur (taille ou sexe) ?

NonOui

Afficher message d’erreur

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

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.

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

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

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

Le code ASCII

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

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 ?

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

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 bits0 0 0 => 0*22 + 0*21 + 0*20 = 00 0 1 => 0*22 + 0*21 + 1*20 = 11 0 1 => 1*22 + 0*21 + 1*20 = 5

– Addition0 1 0 + => 20 1 1 => 3-------1 0 1 => 5

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

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

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

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 vraiDé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) = 1011110-----001

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

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 +20 1 0

• Adition de +2 et + 20 1 0

0 1 0

------

1 0 0 => - 1

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

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)

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

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

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

Les structures de données

• Les piles LIFO, FIFO

• Les listes chaînées

• Les arbres

• …

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

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

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

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 maladieMin := 1000 `Minimum de signe des maladiesMal := 0 `N° de la maladie qui a le plus petit nombre de signeBoucle de i = 1 à 3

NbS := valeur (S(0,i))si (NbS < Min)

Min :=NbSMal := i

Fin de siFIn de boucle

‘Recherche de la ‘maladie qui a le ‘plus petit nombre ‘de signes

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

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

Boucle de j = 1 à MinSigne_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 siFin de boucle

Fin de boucleFin de boucle`Il en reste plus qu'à imprimer les signes communs

Boucle de j = 1 à Min Si SC(j) = 3 `en fait Nb Mal

Imprimer ("Le signe "+ S(Mal,j) + "est commun aux 3 maladies) Fin de siFin de boucle

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

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

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

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 := 10B := 12.5C:= Min(10;12.5)……

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

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.

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

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.

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

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.