M1103 : Structures de données et algorithmes fondamentaux

Slides:



Advertisements
Présentations similaires
Cours de Langage C Les structures
Advertisements

CHAftITREI ARCHITECTURE de BASE. Modèle de Von Neumann Langage d’assemblage1 John Von Neumann est à l'origine d'un modèle de machine universelle de traitement.
CINI – Li115 1 Semaine 11 Les pointeurs (suite) ● Tableaux et pointeurs ● Questions sur les pointeurs.
1 Programmation en C++ Cycle de vie ● La vie d'un objet ● Destructeur ● Gestion de mémoire dynamique.
Cours COMPOSANTES DES VECTEURS Dimitri Zuchowski et Marc-Élie Lapointe.
annuités, mensualités remboursements constants VPM pendant une période ininterrompue
Traitement de texte : notions avancées
Programmation en C++ Standard Library
Eléments de présentation
Google analytics.
LES TABLEAUX EN JAVA.
Session 1 6 mars 2017 Plateforme ICONICS Justine Guégan
Ecriture collaborative d’une dissertation en classe
Détection des erreurs.
Algorithmique AU El harchaoui noureddine
Les Bases de données Définition Architecture d’un SGBD
Algorithmique demander jeu du pendu.
Ajouter le code dans une page html
CHAPITRE III Hypothèses de la Résistance des Matériaux
Initiation aux bases de données et à la programmation événementielle
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Références.
I Définition chapitre 1 Les Matrices.
Principes de programmation (suite)
Initiation à la programmation impérative et algorithmique
Semaine #7 INF130 par Frédérick Henri.
Algorithmique & Langage C
Programmation Impérative II
Semaine #4 INF130 par Frédérick Henri.
Tableau de bord des risques
1ers pas des utilisateurs migrés
Programmation en C++ Classes
Stabilité des porteurs horizontaux (Poutres)
Notion De Gestion De Bases De Données
Création Et Modification De La Structure De La Base De Données
Formation ELAN Fonctions avancées 2
Cours N°10: Algorithmiques Tableaux - Matrices
Programmation Android Bases De Données, SQL-lite
Introduction à Internet
Deuxième partie LE DOSSIER TECHNIQUE DU MARINGOUIN.
Chapitre 3 : Caractéristiques de tendance centrale
Programmation Android Première application Android
L1 Technique informatique
Programme financé par l’Union européenne
Révision du format des données
B.Shishedjiev - Informatique
II. Chaînage, SDD séquentielles
03- Evaluation Access 2003 Cette évaluation comporte des QCM (1 seule réponse) et des Zones à déterminer dans des copies d’écran.
Filière Génie Civil – 2018 Langage C Tableaux – Exercices de révision
Chapitre 4: Les graphiques
Présentation 4 : Sondage stratifié
Présentation 9 : Calcul de précision des estimateurs complexes
Un Mécanisme d‘Adaptation Guidé par le Contexte en Utilisant une Représentation par Objets Manuele Kirsch Pinheiro Laboratoire LSR – IMAG, Équipe SIGMA.
Reconnaissance de formes: lettres/chiffres
Elles contiennent des informations autre que géométriques
7- Nouveaux services pédagogiques pour les élèves
Opérateurs et fonctions arithmétiques Opérateurs de relation Opérateurs logiques Cours 02.
Tris Simples/Rapides.
Exercices récapitulatifs
Le langage C# : Partie 1.
Tableaux croisés dynamiques sous Excel: des outils simples pour une analyse rapide de jeux de données en cytométrie Camille SANTA MARIA Ingénieur d’étude.
Formation ELAN Fonctions avancées 2
Arbre binaire.
Présenter une méthode d’apprentissage - Aider à la mise en
Exploitation de vos données
Retour d’expérience Solutions organisationnelles
Python Nicolas THIBAULT
Type Tableau Partie 1 : Vecteurs
Les données structurées et leur traitement
Séquence 1:Analyse du système d’information comptable
Transcription de la présentation:

M1103 : Structures de données et algorithmes fondamentaux Philippe POLET 2016© philippe.polet@univ-valenciennes.fr 2016 - 2017 M1103 - Philippe POLET ©

Objectifs du cours Types personnalisés Algorithmes sur les structures séquentielles Fichiers Structures dynamiques 2016 - 2017 M1103 - Philippe POLET ©

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) 2016 - 2017 M1103 - Philippe POLET ©

Chapitre 1 Types personnalisés 2016 - 2017 M1103 - Philippe POLET ©

Exemple de problème : calcul des coordonnées du milieu d’un segment Soit M:𝑚𝑖𝑙𝑖𝑒𝑢 𝑑𝑒 𝐴𝐵 ⇒ 𝑥 𝑀 = 𝑥 𝐴 − 𝑥 𝐵 2 𝑦 𝑀 = 𝑦 𝐴 − 𝑦 𝐵 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 2016 - 2017 M1103 - Philippe POLET ©

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 2016 - 2017 M1103 - Philippe POLET ©

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. 2016 - 2017 M1103 - Philippe POLET ©

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 2016 - 2017 M1103 - Philippe POLET ©

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); 2016 - 2017 M1103 - Philippe POLET ©

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 2016 - 2017 M1103 - Philippe POLET ©

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; 2016 - 2017 M1103 - Philippe POLET ©

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; } 2016 - 2017 M1103 - Philippe POLET ©

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); 2016 - 2017 M1103 - Philippe POLET ©

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; 2016 - 2017 M1103 - Philippe POLET ©

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. 2016 - 2017 M1103 - Philippe POLET ©

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 2016 - 2017 M1103 - Philippe POLET ©

Chapitre 2 La récursivité 2016 - 2017 M11023- Philippe POLET ©

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; 2016 - 2017 M1102 - Philippe POLET ©

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 2016 - 2017 M1102 - Philippe POLET ©

A suivre 2016 - 2017 M1102 - Philippe POLET ©

Chapitre 3 Algorithmes de tri 2016 - 2017 M1102 - Philippe POLET ©

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. 2016 - 2017 M1102 - Philippe POLET ©

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

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;         } } } 2016 - 2017 M1102 - Philippe POLET ©

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

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;     } } 2016 - 2017 M1102 - Philippe POLET ©

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 2016 - 2017 M1102 - Philippe POLET ©

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

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) 2016 - 2017 M1102 - Philippe POLET ©

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 2016 - 2017 M1103 - Philippe POLET ©

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 2016 - 2017 M1102 - Philippe POLET ©