1 ALGORITHMIQUE AVANCEE IUT Vélizy – RT2 FA Laurent Marsan.

Slides:



Advertisements
Présentations similaires
GEF 243B Programmation informatique appliquée
Advertisements

La boucle for : init7.c et init71.c
Introduction Langage très répandu Noyau Linux VLC … Des avantages indéniables mais aussi des contraintes ! Ceci nest quun rapide tour.
Programmation Orienté Objet en C++
Rappels C.
GEF 243B Programmation informatique appliquée
C.
Paramètres et pointeurs
Les pointeurs Manipulation d'adresses et de ce qui est contenu dans ces adresses Très important, fondamental même en C mauvaise réputation : 'dur à comprendre',
Tableaux Certains problèmes nécessitent beaucoup de variables du même type. Exemple : relevé de températures matin et soir dans 10 villes pour 10 jours.
Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand.
FLSI602 Génie Informatique et Réseaux
8. Les tableaux P. Costamagna – ISEN N1.
Cours ENSG 2A, Septembre 2002 Guillaume Caumon
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()
TRAITEMENT DE STRUCTURES
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
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.
IFT-2000: Structures de données
Structures de données IFT-2000
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Points importants de la semaine Les allocations programmées de mémoire. Les enregistrements.
Un langage de programmation hybride
Environnements d'exécution
Analyse des algorithmes: une introduction. La question abord é e dans ce chapitre est la suivante: Comment choisir parmi les diff é rentes approches pour.
C++ : variables Déclaration de variables
Structures de données IFT-2000
Plan cours La notion de pointeur et d’adresse mémoire.
PHP 2° PARTIE : FONCTIONS ET FORMULAIRE
Le langage C Structures de données
Les pointeurs L'opérateur &.
Le langage C Rappel Pointeurs & Allocation de mémoire.
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Programmation en Java Tableaux NGUYEN Thi Minh Tuyen
Les adresses des fonctions
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le premier exemple: #include void main()
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
ISBN Chapitre 10 L'implémentation des sous- programmes.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
La récursivité Mireille Goud HEG Vd AlgSD - Résurisivité.
Les fonctions. Déclaration/Prototypes C’est une instruction fournissant au compilateur des infos sur une fonction qu’on envisage d’appeler par le suite.
PRO-1027 Programmation Scientifique en C
3ième Classe (Mardi, 23 Septembre) CSI2572. O jourd'8: E Allocation de mémoire E Déallocation de mémoire E Tableaux (n dimensions) E Arithmetique des.
Organisation de la mémoire pour le langage minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Création d’un site WEB 1 – Un site WEB c’est quoi ? 2 – Questions à se poser avant la construction d’un site WEB 3 – Principes de fonctionnement d’un site.
Étapes pour la Programmation du 68HC11 I. Écriture du programme dans un fichier *.a11 II. Le programme est compilé (traduit en langage machine) III. Le.
Introduction à la programmation
UTILISER POWEPOINT Cours de Dominique MEGANCK D’après un diaporama issu du site
G. Botti Service de l ’Information Médicale Pr M. Fieschi Hôpital Timone-adultesMarseille le 13 novembre 2000 Problématique du codage Langage, communication,
Groupe de travail : Claire BRENEUR, Christelle GEORGET, Nathalie JACQUES, Régis BARDOULAT, Michael DESCOTTES, Frédéric GAUTHIER, Nicolas GIRAUD, Benoit.
1 UNIX AVANCE Yves PAGNOTTE – Janvier – RAPPELS SUR UNIX DE BASE.
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
Informatique 2A Langage C 3 ème séance.
Cours de Langage C Les structures
Informatique 2A Langage C 4ème séance
Cours de Langage C Récursivité. Objectifs de la séance 11 Connaître la récursivité. Mesurer un temps d’exécution. 2.
1 UNIX AVANCE Yves PAGNOTTE – Janvier – PROCESSUS ET RESSOURCES.
LES TABLEAUX EN JAVA.
Tableaux à plusieurs dimensions en langage C
Transcription de la présentation:

1 ALGORITHMIQUE AVANCEE IUT Vélizy – RT2 FA Laurent Marsan

2 L’ALGORITHMIQUE, POUR QUOI FAIRE? Problème Solution Programme Algorithme

3 Quand? Avant de programmer Problème difficile, risque d’être trop couteux (temps, mémoire) Temps disponible, nécessité d’obtenir un programme efficace L’ALGORITHMIQUE, POUR QUOI FAIRE? Comment? Aspects techniques (langage de programmation, architecture de l’ordinateur) mis « de côté » Estimation du coût théorique (complexité) d’une solution en temps et en mémoire, afin de comparer deux solutions. Qu’est ce que je gagne? Pour votre cursus, bagage fondamental pour o comprendre le programme de quelqu’un d’autre o exprimer votre idée de solution o écrire ou contribuer à un programme Pour vous, l’algo apprend à organiser et à structurer sa réflexion

4 L’ALGORITHMIQUE, POUR QUOI FAIRE?

5 Nb entiers Tri naïf 400n.m sec sec mn Trop long! (~ 5 h.) Trop long! (~ 20 j.) « Quick sort » n.m sec sec sec sec. L’ALGORITHMIQUE, POUR QUOI FAIRE?

6 Bioinformatique Synthèse d’image

7 AU PROGRAMME… Hachage Pointeurs Listes chaînées Arbres Tris et recherches Récursivité

8 Variables o C’est de la mémoire o Statique: on connait les besoins avant de lancer le programme o Pas nécessairement nul à la déclaration (en C, mais pas en Java) o Possède forcément une valeur! (en C/Java, pas en Shell) o Variables locales, fonctions et pile o Typées (C, Java mais pas Shell) o Types simples ou complexes GENTILS RAPPELS

9 Tableaux statiques o Une ou plusieurs dimensions o D’un bloc mémoire! o Initialisation (pas toujours nécessaire) GENTILS RAPPELS // INITIALISATION à ZERO - 2D // Déclaration int tab[1000][500]; int ligne, colonne; // Initialisation For(ligne=0; ligne!=1000; ligne++) { for(colonne=0; colonne!=500; colonne++) { tab[ligne][colonne] = 0; } }

10 Tableaux statiques o Remplissage GENTILS RAPPELS // REMPLISSAGE 1 – NOMBRE DE VALEURS CONNU // Déclaration int tab[1000], i, val; // Lecture For(i=0; i!=1000; i++) { scanf("%d", &val); tab[i] = val; }

11 Tableaux statiques o Remplissage GENTILS RAPPELS // REMPLISSAGE 2 – NOMBRE DE VALEURS INCONNU // Déclaration int tab[1000], val; int nbval; // Nombre de valeurs ds le tableau // Lecture nbval=0; printf("Tapez vos entiers, -1 quand fini\n"); scanf("%d", &val); while(val!=-1 && nbval!=1000) { tab[nbval] = val; nbval++; scanf("%d", &val); } if(nbval==1000) printf("Fin du tableau atteinte\n"); printf("%d valeurs dans le tableau\n", nbval);

12 Ce mot signifie "adresse mémoire" Typé: pointeur sur… entier, flottant, caractère… En C, passage de paramètres par défaut: par valeur En Java, passage de paramètres par défaut: par référence = par pointeur POINTEURS int main() { int a=2; fonction(a); printf("%d", a); } void fonction(int a) { a=34; }

13 Pour modifier la variable passée en paramètre, il nous faut son adresse POINTEURS int main() { int a=2; fonction(&a); printf("%d", a); } void fonction(int *a) { *a=34; } &="adresse de la variable…" *= "valeur se trouvant à l'adresse…"

14 Le nom d'un tableau, c'est son adresse POINTEURS ET TABLEAUX int main() { int tab[10]; scanf("%d", tab+2); // écrit dans la case 2 }

15 CORREC EXO 1

16 CORREC EXO 2

17 CORREC EXO 2

18 CORREC EXO 5 : recherchePos

19 CORREC EXO 5 : main

20 CORREC EXO 5 : insere

21 CORREC EXO 5 : version "avec des structures"

22 CORREC EXO 5 : insère, version "avec des structures"

23 Solution sale: boucles imbriquées EXO 6 : occurrences de nombres dans un intervalle donné …

24 Solution propre: tableau d'occurrences EXO 6 : occurrences de nombres dans un intervalle donné … …

25  Solution sale Pour un tableau de N nombres de 1 à 100, combien de lectures de chaque case? Réponse: 100N  Solution propre Pour un tableau de N nombres de 1 à 100, combien de lectures de chaque case? Réponse: N  Test grandeur nature EXO 6 : coût

26  Tableau statique Taille prédéfinie à la compilation int tab[100] Pas modifiable en cours d'exécution  Tableau dynamique Consiste à demander de la mémoire au système pendant l'exécution Appels système en Java: new Appels système en C: malloc, calloc, realloc, free ( ) TABLEAUX: statiques et dynamiques

27  malloc Fournit un espace mémoire sans l'initialiser malloc(taille demandée) Renvoie un pointeur sur la zone allouée, ou NULL si problème Ce pointeur doit être "casté" ALLOCATION DYNAMIQUE int *tab; tab=(int *) malloc(17*sizeof(int)); tab[5] = 9;

28  calloc Fournit un espace mémoire initialisé à zéro calloc(nombre de cellules, taille d'une cellule) Renvoie un pointeur sur la zone allouée, ou NULL si problème Ce pointeur doit être "casté" ALLOCATION DYNAMIQUE int *tab; tab=(int *) calloc(17, sizeof(int)); tab[5] = 9;

29  free Libère un espace mémoire alloué dynamiquement free(pointeur sur la zone allouée précédemment) En C, si pointeur perdu, zone perdue En Java, pointeur perdu entraîne libération de la zone (garbage collector) ALLOCATION DYNAMIQUE int *tab; tab=(int *) calloc(17, sizeof(int)); free(tab);

30  Realloc Permet d'augmenter ou de diminuer la taille d'un tableau alloué dynamiquement En pratique, étend la zone ou recopie la zone ailleurs realloc(pointeur sur zone allouée, nouvelle taille) Renvoie NULL si problème ATTENTION: le pointeur peut changer En C, si pointeur perdu, zone perdue En Java, pointeur perdu entraîne libération de la zone (garbage collector) ALLOCATION DYNAMIQUE float *tab; tab=(float *) malloc(100*sizeof(float)); tab=(float *) realloc(tab, 200*sizeof(float));

31  Vous pouvez désormais écrire ceci ALLOCATION DYNAMIQUE int nbval, i; float *tab; printf("combien de nombres voulez-vous saisir?\n"); scanf("%d", &nbval); tab=(float *) malloc(nbval*sizeof(float)); for(i=0;i!=nbval; i++) { printf("Case %d : ", i); scanf("%f", &(tab[i])); }

32 Dans un tableau de N cases, quel coût en temps pour…  …un accès direct (en M ème position) O(1)  … la recherche d'un élément O(N)  … l'insertion/suppression d'un élément déjà trouvé O(N) LES TABLEAUX: quel coût ? La complexité d'un algorithme indique à quoi le temps ou l'espace nécessaires à son exécution seront proportionnels. On étudie en général la complexité au pire des cas. Elle se note O(…). Dans un tableau de N cases, quel coût en espace pour…  …stocker tous les éléments O(N)

33 Idée: LES LISTES CHAINEES  Une structure plus souple pour les insertions/suppressions NULL 8  Une structure également plus simple pour les réallocations: pourquoi?

34 LES LISTES CHAINEES  La conception d'une liste chaînée nécessite de définir une structure Cellule 12 typedef struct s_cellule { intval; struct s_cellule * suiv; } Cellule;  On dit que cette structure est récursive car elle fait appel à sa propre définition  Nécessité d'allouer dynamiquement chaque cellule Cellule * ptr; ptr = (Cellule *) malloc(sizeof(Cellule));