données pr ogramme 11111101 11001101 01000101 b us disque ma gnétique processeur écran Structures de données et algorithmes Ordinateurs Gilles Falquet, printemps-été 2002 Machines composées de (depuis 1940 env.) : http://cui.unige.ch/isi/cours/std/ Cours: traitements sur les données stockées dans la mémoire. Architecture des ordinateurs Types élémentaires Types collections Arbres et graphes Algorithmes Itération Analyse numérique Récursion Complexité Conception des algorithmes Programmation dynamique composée de cellules > composée de bits = unité binaire de mémoire stocker le programme à exécuter Séminaire + travaux pratiques: stocker les données à traiter Exercices théoriques Systèmes de communication (entrées/sorties): Programmation Java: apprentissage de Java, utilisation des types de données. transmission d informations entre l ordinateur et son environnement Evaluation : 2/3 Examen écrit (3h) basé sur cours, séminaire, TPs écrans, claviers, souris, réseau de télécommunication, appareils (moteurs, capteurs, etc.). 1/3 Travaux pratiques 1 de 27 2 de 27 Architecture des ordinateurs données 11111101 11001101 disque magnétique reg R1 0 bus processeur 01000101 programme écran PC 301 3 de 27 4 de 27
R1 0 4 adr. 301 charger R1 1001 R1 4 PC 301 PC 302 5 de 27 6 de 27 + R1 4 2 PC 302 PC 303 7 de 27 8 de 27
> 0? reg reg 2 PC 303 PC 304 9 de 27 10 de 27 Information et données PC 302 Traitement de l information par une machine => stockage en mémoire => codage Information codée = données. Schéma de codage : structure de données complet: représenter en mémoire toutes les informations à traiter; efficace en espace : faible occupation de la mémoire; efficace en temps : peu d instructions pour traiter les données. Etude des structures de données indissociable de Etude des algorithmes qui traitent ces données. "Structures de données + Algorithmes = Programmes" [Wirth] 11 de 27 12 de 27
Algoorithme Méthode pour résoudre un problème en un nombre fini d étapes de manière correcte On cherche des algorithmes généraux algo pour calculer 45 + 12 ==> pas intéressant algo pour additionner deux nombres entiers quelconques ==> intéressant Thèse de Church Tout algorithme peut être exécuté par un programme sur un ordinateur == il n y a pas de méthode raisonnable qu on ne puisse programmer Remarque Il y a des problèmes indécidables == pour lesquels il n existe pas d algorithme Langage algorithmique de haut niveau Pour éviter d écrire des programmes au niveau "machine" On se donne un langage algorithmique plus abstrait. Modèle de mémoire = ensemble d objets objet = ensemble de cellules contient une d un certain type (entier, réel, chaînes de caractères, booléen, etc.) Variables Nomment un objet de la mémoire. (remplacent l adresse numérique) Possèdent un type Etat de la mémoire : ensemble de paires (variable = ) { X = "Hello", Y = 95 } X: "Hello" Y: 95 13 de 27 14 de 27 Vrai langage et pseudo langage Instructions: affectation Les langages "professionnels" sont complexes Stocke une, résultat d un calcul, dans une variable. syntaxe restrictive pour éviter les erreurs de programmation doivent être modulaires, structurés, etc. (génie logiciel) adaptés à un environnement (périphériques, réseau, etc.) /!\ Le contenu précédent est perdu. variable constante contraintes d efficacité X 34 variable variable Pseudo langage Y X syntaxe plus informelle, pas de définition stricte centré sur l algorithme, pas sur les aspects génie logiciel variable expression opérateur expression Z 3 * X critère : facile à traduire dans un vrai langage 15 de 27 16 de 27
Exemples mémoire avant instruction mémoire après X = 897 X 2 X = 2 X = 2, Y = 3333 Y X + 8 X = 2, Y = 10 X = 3, Y = 11 X X * Y X = 33, Y = 11 Z = "xsjsjdsw" Z "allo" Z = "allo" Z = "allo", Y = 11 X Z + Y indéfini : chaîne de caractères + entier Evaluation d expression Expressions composées de constantes, variables, opérateurs, fonctions Evaluation dans l ordre habituel: ( ), fonctions, ^, *, /, mod, +,,,, <, >, =,,, Les variables sont remplacées par leur. Signification des opérations dépend du type d arguments 2.3 + 5.66 addition des réels 6 + 2 addition des entiers 6 / 4 = 1 ou 1.5? "bon"+"jour" concaténation des chaînes L un des objets de ce cours : définir et étudier la signification des opérations sur différents type de données (entiers, réels, listes, ensembles, séquences, arbres, graphes, etc.) 17 de 27 18 de 27 Séquences d instructions Ordre d exécution { instruction1; instruction2; } Attention: Sémantique: L ordre des instructions dans une séquence est important! Exécuter instruction1, puis instruction2, et ainsi de suite. Exemple: { X 2; Z X + 1; U X Z; } { X 2; Z 2*X ; X X+1 } [[ X = 3, Z = 4 ]] mémoire avant instruction mémoire après X = 0, Y = 1, Z = 111 X 2; Z X + 1; U X Z X = 2, Z = 3, U = 1 { X 2; X X+1; Z 2*X } [[ X = 3, Z = 6 ]] 19 de 27 20 de 27
ou bien Exécution conditionnelle: si (expression) instruction1 sinon instruction2 A 2; B 1; si (A > B) W A B sinon W 0 [[ A = 2, B = 1, W = 1 ]] si (expression) instruction1 Calcul de Z = MAX(X, Y) si (X > Y) Z X sinon Z Y Algorithme MAX Vérifier : l algorithme fonctionne pour X = Y si (X > 0) Y X sinon Y X [[ Y = absolue de X ]] 21 de 27 22 de 27 Calcul de Z = signe de X si (X > 0) Z 1 sinon si (X = 0) Z 0 sinon Z 1 Conditions imbriquées. Algorithme SIGNE Trouver une forme équivalente non imbriquée. Syntaxe: Sémantique: Itération tant que (expression) instruction Exécuter instruction tant que l évaluation de expression donne vrai. Exemple R 10; S 0; tant que (R > 0) { S S + R; R R 1 } [[ S = 10+9+8+ +2+1 = 55 ]] 23 de 27 24 de 27
Itération - sur un ensemble de s Exemple. Calcul de r = p q Lorsque on veut effectuer un nombre déterminé à l avance d itérations on pourra utiliser la syntaxe abrégée r 1; pour (variable de expression1 à expression2 ) instruction n 0; qui correspond à : variable expression1 tant que (variable expression2) { instruction; variable variable + 1 } tant que (n q) { r r * p; n n + 1; } [[ r = p q ]] Toutes ces instructions peuvent être combinées entre elles pour former des instructions plus complexes.. 25 de 27 26 de 27 L algorithme est correct r 1; n 0; [[ r = p n ]] tant que (n q) { [[ r = p n ]] r r * p; [[ r = p n+1 ]] n n + 1; [[ r = p n ]] } [[ r = p n et n = q ]] => [[ r = p q ]] 27 de 27