La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

M1103 : Structures de données et algorithmes fondamentaux

Présentations similaires


Présentation au sujet: "M1103 : Structures de données et algorithmes fondamentaux"— Transcription de la présentation:

1 M1103 : Structures de données et algorithmes fondamentaux
Philippe POLET 2016© M Philippe POLET ©

2 Objectifs du cours Types personnalisés
Algorithmes sur les structures séquentielles Fichiers Structures dynamiques M Philippe POLET ©

3 Règles de fonctionnement
Présence « active » en cours, travaux dirigés et travaux pratiques Usage du téléphone interdit (règlement intérieur) PC portable interdit en cours, prise de notes uniquement sur papier Il faut suivre le cours, ce qui n’est pas compris en séance le sera difficilement après! En travaux dirigés, il ne faut pas être passif! Ne pas hésiter à multiplier les sources d’information (livres, internet, etc…) La programmation c’est comme le sport, il faut s’entrainer pour progresser (ce n’est pas en restant assis et en regardant les autres programmer qu’on progresse) M Philippe POLET ©

4 Chapitre 1 Types personnalisés M Philippe POLET ©

5 Exemple de problème : calcul des coordonnées du milieu d’un segment
Soit M:𝑚𝑖𝑙𝑖𝑒𝑢 𝑑𝑒 𝐴𝐵 ⇒ 𝑥 𝑀 = 𝑥 𝐴 − 𝑥 𝐵 𝑦 𝑀 = 𝑦 𝐴 − 𝑦 𝐵 2 A M B Comment écrire une fonction qui retourne 2 valeurs ( 𝑥 𝑀 𝑒𝑡 𝑦 𝑀 ) ? Ce n’est pas possible, une fonction ne peut pas retourner plusieurs valeurs Alternative 1 : utiliser des pointeurs  alourdit l’appel de fonctions, ne permet pas d’enchaîner des appels Alternative 2 : utiliser des tableaux  seulement possible si les valeurs sont de même nature M Philippe POLET ©

6 Les types personnalisés
Il est souvent utile de pouvoir créer ses propres types. Il s’agit alors de définir une structure permettant de regrouper plusieurs sous-valeurs pouvant être de nature différentes (appelés champs). Par exemple, on veut représenter un point, chaque sera décrit par : Son abscisse (réel) Son ordonnée (réel). Le type Point sera un type structuré par 2 champs M Philippe POLET ©

7 Définitions En M1102 on a étudié les tableaux, qui sont des types permettant de regrouper sous un même identificateur plusieurs données de même type. Un type tableau est un type complexe homogène. Par comparaison, une structure est un type complexe hétérogène : Type complexe hétérogène : type de données décrivant une information composite, constituée de plusieurs valeurs qui peuvent être elles-mêmes de types différents (qui peuvent être eux-mêmes simples ou complexes). Autrement dit, une structure permet de regrouper sous un même identificateur plusieurs données qui peuvent être complètement différentes. Ces données sont appelées les champs de la structure. Champ de structure : élément constituant la structure, caractérisé par un identificateur et un type. Si on considère une structure comme un groupe de variables, alors un champ peut être comparé à une variable. En effet, comme une variable, un champ possède un type, un identificateur, une valeur et une adresse. Cependant, à la différence d’une variable, un champ n’est pas indépendant, car il appartient à un groupe de champs qui forme sa structure. Le fait d’associer un identificateur à un champ est important, car cela signifie que chaque élément d’une structure possède un nom spécifique. Ce nom est unique dans la structure, et permet d’identifier le champ sans ambiguïté. Par opposition, les éléments qui constituent un tableau ne possèdent pas de nom : ils sont simplement numérotés, grâce à leur index qui indique leur position dans le tableau. Un champ peut être de n’importe quel type, qu’il soit simple ou complexe. Il peut donc s’agit d’un tableau, ou même d’une structure. M Philippe POLET ©

8 Le type Point en C pour déclarer un type structuré : struct
#include "ioap123.h" struct stPoint { double x; double y; }; int main(void) { struct stPoint pt1, pt2, m; pt1.x = 5.0; pt1.y = 2.0; pt2.x = 8.0; pt2.y = 3.0; return 0; } pour déclarer un type structuré : struct pt1, pt2 et m sont des variables de types struct stPoint L’opérateur . permet d’accéder à un champ d’une valeur structurée M Philippe POLET ©

9 Créer des synonymes de type
L’instruction typedef permet de renommer un type, par exemple : typedef int ENTIER; ... ENTIER i; i = 5; print_int(i); M Philippe POLET ©

10 Définir le synonyme de struct stPoint
#include "ioap123.h" struct stPoint { double x; double y; }; typedef struct stPoint Point; int main(void) { Point pt1, pt2, m; pt1.x = 5.0; pt1.y = 2.0; pt2.x = 8.0; pt2.y = 3.0; return 0; } Le synonyme de struct stPoint est maintenant Point M Philippe POLET ©

11 Fonction retournant le milieu d’un segment
Point calculMilieu(Point a, Point b) { Point p; p.x = (a.x+b.x)/2; p.y = (a.y+b.y)/2; return p; } int main(void) { Point pt1, pt2, m; pt1.x = 5.0; pt1.y = 2.0; pt2.x = 8.0; pt2.y = 3.0; m = calculMilieu(pt1, pt2); print_text("m.x = "); print_double(m.x); print_text("m.y = "); print_double(m.y); return 0; M Philippe POLET ©

12 Le type Segment struct stSegment { Point a; Point b; };
typedef struct stSegment Segment; Segment initSegment(Point p1, Point p2) Segment seg; seg.a = p1; seg.b = p2; return seg; } M Philippe POLET ©

13 Milieu d’un Segment Point milieu(Segment s) { Point mid;
mid.x = (s.a.x+s.b.x)/2; mid.y = (s.a.y+s.b.y)/2; return mid; } Point milieuV2(Segment s) return calculMilieu(s.a,s.b); M Philippe POLET ©

14 Pointeur et type structuré
L’opérateur -> permet d’accéder au champ d’une valeur pointée. void deplacer(Point* a, double dx, double dy) { a->x = a->x + dx; a->y = a->y + dy; } Est équivalent à : (*a).x = (*a).x + dx; (*a).y = (*a).y + dy; M Philippe POLET ©

15 Représentation mémoire
Au niveau de la mémoire, tous les octets représentants chaque champs de la valeur structurée sont adjacents. La taille d’une valeur structurée est normalement égale à la somme des tailles de chaque valeurs des champs. M Philippe POLET ©

16 Tableaux et valeurs structurées
Il est tout à fait possible de déclarer et manipuler des tableaux de valeurs structurées. Exemple : vecteur de Point pour représenter un polygone. Point monCarre[4]; // monCarre est un tableau de 4 Points M Philippe POLET ©

17 Chapitre 2 La récursivité M Philippe POLET ©

18 Calcul de xn … Nous avons écrit en début de M1102 la fonction puissance: double puissance(double x, int n) { int i; double res = 1; for(i=1;i<=n; i=i+1) res = res * x; } return res; M Philippe POLET ©

19 Exploitation de la définition récursive de xn
𝑥 𝑛 =𝑥∙ 𝑥 𝑛−1 , 𝑥 0 =1 double puissanceV2(double x, int n) { if(n==0) return 1.0; } else if(n==1) return x; return x * puissanceV2(x,n-1); Appel récursif M Philippe POLET ©

20 A suivre M Philippe POLET ©

21 Chapitre 3 Algorithmes de tri M Philippe POLET ©

22 Trier les valeurs d’un vecteur
Trier c’est ranger dans un certain ordre. Il faut donc un critère de comparaison. Différents algorithmes ont été proposés pour trier des valeurs dans un vecteur, chaque algorithme à sa performance, qu’on exprime selon sa complexité (ordre de grandeur du nombre d’opérations nécessaire pour réaliser le traitement). Généralement, l’ordre de grandeur s’exprime en fonction du nombre d ’éléments (taille) du vecteur. M Philippe POLET ©

23 Le tri par insertion Source de l’animation: wikipédia 2016 - 2017
M Philippe POLET ©

24 Code C tri insertion void triInsertion(double* t,int n) {
    int i,j,p; double tmp for(i=1; i<n; i=i+1) {     p = 0;     while(p<i && t[i]>t[p]) { p = p+1; }         if(p!=i) { tmp = t[i]; for(j=i; j>p; j=j-1) { t[j] = t[j-1]; }             t[p] = tmp;         } } } M Philippe POLET ©

25 Tri par sélection Source de l’animation: wikipédia 2016 - 2017
M Philippe POLET ©

26 Tri par selection void triSelection(double* t,int n) { int i,j,imin;
    double tmp;          for(i=0; i<n-1; i=i+1)     {         imin = i;         for(j=i+1; j<n; j=j+1)         {             if(t[j]<t[imin])             {                 imin = j;             }         }         if(imin!=i)             tmp = t[i];             t[i] = t[imin];             t[imin] = tmp;     } } M Philippe POLET ©

27 Tri fusion Idée : Il est relativement facile de fusionner 2 sous tableaux triés adjacents Trier un sous tableau d’une ou 2 valeurs est facile Tout sous-tableau de plus de deux valeurs peut être « découpé » en 2 sous-tableaux qu’on triera et qu’on fusionnera M Philippe POLET ©

28 Recherche d’une valeur dans un tableau trié
Présentation du sujet de TD… - parcours séquentiel - parcours dichotomique M Philippe POLET ©

29 Pointeur et allocation dynamique de mémoire
Il existe en C la possibilité de demander au système de réserver un espace mémoire. Pour ce faire on utilise la fonction malloc. On passe en paramètre de la fonction le nombre d’octets qu’on souhaite réserver, et la fonction retourne l’adresse du premier octet de la zone réservée. void * malloc(int nbOctets) M Philippe POLET ©

30 Définir le type Vecteur
Jusqu’à présent pour passer un tableau à une dimension (vecteur) en paramètre d’une fonction nous avions besoin de passer 2 paramètres M Philippe POLET ©

31 Maintenir un tableau trié
Sera traité en TD - définition du type -nature des éléments -capacité du tableau -nombre de valeurs déjà insérées - ajout d’une valeur -vérification de la capacité -recherche de la place de la valeur à ajouter -décalage, insertion, mise à jour du nombre de valeurs - suppression d’une valeur -recherche de la place de la valeur M Philippe POLET ©


Télécharger ppt "M1103 : Structures de données et algorithmes fondamentaux"

Présentations similaires


Annonces Google