Algorithmique et structures de données II. Première partie. Séries des exercices. Page 1

Dimension: px
Commencer à balayer dès la page:

Download "Algorithmique et structures de données II. Première partie. Séries des exercices. Page 1"

Transcription

1 Première partie 1 Séries des exercices Page 1

2 Série1 : Les pointeurs Exercice1: Analyser le programme suivant: void main() int a[10], *pa, x; a[0] = 11; a[1] =22; a[2] = 33; a[3] = 44; pa = &a[0]; x = *pa; pa++; x = *pa; x = *pa + 1; x = *(pa + 1); x = *++pa; x = ++*pa; x = *pa++; Exercice2: Interpréter les instructions suivantes: char *pc; int *pi,*pj,*pk; float *pr; pc = (char*)malloc(10); pi = (int*)malloc(16); pr = (float*)malloc(24); pj = (int*)malloc(sizeof(int)); Page 2

3 pk = (int*)malloc(3*sizeof(int)); free(pi); free(pr); Exercice 3: adr1 et adr2 sont des pointeurs pointant sur des réels. Le contenu de adr1 vaut -45,78; le contenu de adr2 vaut 678,89. Ecrire un programme qui affiche les valeurs de adr1, adr2 et leur contenu. Exercice 4: Saisir un texte. Ranger les caractères en mémoire. Lire le contenu de la mémoire et y compter le nombre d'espaces et de lettres e. Exercice 5 : Écrire une fonction int* concat_tab(int t1[], int n1, int t2[], int n2) qui prend en paramètres deux tableaux et leurs tailles respectives, et qui renvoie leur concaténation. Il faudra allouer un nouveau tableau pour contenir cette concaténation. Exercice 6 : Écrire une fonction char* concat_string(char* s1, char* s2) qui prend en arguments deux chaînes de caractères et qui renvoie leur concaténation (il faut allouer un nouveau tableau pour la contenir). Exercice 7 : On se donne une structure «livre» : typedef struct livre Livre; char titre[20]; int cote; int prix; On veut créer une bibliothèque de plusieurs livres, sous la forme d un tableau de livres. 1) Écrire une fonction init qui renvoie un tableau de n livres, qui alloue la mémoire nécessaire et qui initialise les champs à 0 ou à la chaîne de caractères vide. 2) Écrire une fonction qui permet la saisie d un livre. 2) Écrire une fonction qui affiche un tableau de n livres. 4) Écrire une fonction qui fait l échange des livres d indice i et j dans le tableau de livres. Page 3

4 Série 2: La récursivité Exercice 1 : Écrire une fonction récursive qui permet de calculer la factorielle d'un entier positif. Exercice 2 : Écrire une fonction récursive qui permet de calculer la somme des n (n 0) premiers termes (à partir de 1 jusqu à n). Exercice 3 : Écrire une fonction récursive qui permet de calculer les nombres de "Fibonacci" qui sont définis par : Fibonacci (0) = 0, Fibonacci (1) = 1, et pour tout n > 1, Fibonacci (n) = Fibonacci (n-1) + Fibonacci (n-2) Exercice 4 : Écrire une fonction récursive qui permet de calculer le plus grand diviseur commun de deux entiers naturels strictement positifs. Exercice 5 : Écrire une fonction récursive qui permet de calculer la valeur de la fonction d Ackermann définie de la manière suivante pour m 0 et n 0 : Acker(m, n) = Acker(m-1, Acker(m, n-1)) Acker(0, n) = n+1 pour n > 0 Acker(m, 0) = Acker(m-1, 1) pour m > 0 Page 4

5 Exercice 6 : Il s agit de calculer la somme des entiers allant de 0 à un entier donné N et qui ont la même parité que N. Par exemple, Pour la valeur 6, la fonction doit rendre la valeur 12. ( = 12) Pour la valeur 5, la fonction doit rendre la valeur 9. (5+3+1 = 9) a) Écrire une fonction itérative permettant de résoudre ce problème. b) Résoudre le même problème par une fonction récursive. Exercice 7 : Ecrire une fonction récursive qui teste si un nombre positif n est un multiple de 5. Exercice 8 On souhaite écrire une fonction calculant la division par 2 d'un entier sans utiliser l'opérateur / mais seulement les opérateurs + et -. Pour cela on remarque la propriété suivante : Ecrire cette fonction d une manière récursive. Exercice 9 On souhaite écrire une fonction calculant le produit de deux entiers m et n sans utiliser l'opérateur * mais seulement les opérateurs + et -. Pour cela on remarque la propriété suivante : Ecrire cette fonction d une manière récursive. Page 5

6 Exercice 10 Ecrire une fonction récursive qui retourne Cnp, le nombre de combinaisons de p éléments d'un ensemble comportant n éléments. Une définition récursive de Cnp est donnée par : pour les cas de base et par : pour le cas de récurrence : Cn p = Cn-1 p-1 + Cn-1 p Exercice 11 : Écrire une fonction récursive qui permet de dire si un mot donné est un palindrome ou pas. Exercice 12 : Écrire une fonction récursive qui retourne la valeur numérique d une sous chaîne de taille nbr d une chaîne de caractères composée de chiffres. (Exemple : a = valeurnumerique("5123",3) a =512) Exercice 13 : Écrire une fonction récursive qui compte le nombre d occurrences d un entier dans un tableau d entiers. Exercice 14 : Écrire une fonction récursive qui permet d inverser un tableau d entiers Page 6

7 Série 3: Les Listes Exercice 1 : Ecrire le code de fichier ELTDBL.H qui permet de déclarer le type double comme structure de données adoptée. a) Ecrire le code de fichier ELSDD.H qui permet de choisir le type double comme structure de données. b) Ecrire le code de fichier ELTDBL.C qui permet de définir les primitives pour une réalisation par des doubles de TDA ELEMENT. c) Ecrire une fonction qui renvoie la position de la première occurrence d un élément dans une liste de doubles. Cette fonction renvoie 0 si l élément est inexistant. d) Ecrire une fonction qui renvoie la moyenne de valeurs d une liste de doubles. e) Ecrire une fonction qui permet de trier une liste de doubles en ordre croissant. Exercice 2 : a) Ecrire le code de fichier ELTSTR.H qui permet de déclarer le type string (chaine de caractères) comme structure de données adoptée. b) Ecrire le code de fichier ELSDD.H qui permet de choisir le type string comme structure de données. c) Ecrire le code de fichier ELTSTR.C qui permet de définir les primitives pour une réalisation par des strings de TDA ELEMENT. d) Ecrire un programme qui lit des chaînes de caractères sur l'entrée standard. A la rencontre de la chaîne "la", il affichera la liste des chaînes déjà saisies. A la rencontre de la chaîne "li", il affichera cette liste dans l'ordre inverse. Exercice 3 : Écriture d'un programme interactif de gestion des étudiants. Ce programme affichera le menu suivant : 1 Ajout d un étudiant. 2 Recherche d un étudiant. 3 Suppression d un étudiant. 4 Tri de liste des étudiants. 5 Affichage de liste des étudiants. Page 7

8 6 Vider la liste. 7 Quitter. En outre, ce programme effectuera le traitement correspondant au choix effectué. Les étudiants seront sauvegardés dans une liste (sauvegarde indirect). Un étudiant est représenté par la structure suivante : typedef struct char nom[50] ; /* nom et prénom d un étudiant */ char adr[80] ; /* adresse d un étudiant */ int insc ; /* numéro d inscription */ ETUDIANT ; a) Ecrire le code de fichier ELTETD.H qui permet de déclarer le type ETUDIANT comme structure de donnée adoptée. b) Ecrire le code de fichier ELSDD.H qui permet de choisir le type ETUDIANT comme structure de donnée. c) Ecrire le code de fichier ELTETD.C qui permet de définir les primitives pour une réalisation par des ETUDIANTS de TDA ELEMENT. d) Ajouter les fonctions nécessaires et écrire le programme principal correspondant. Exercice 4 : a) Ecrire une fonction qui permet de vérifier l existence d un élément dans une liste non triée (recherche séquentiel). b) Ecrire une fonction qui permet de purger une liste (supprimer les doublons). c) Ecrire une fonction qui permet de trier une liste en ordre décroissant. d) Ecrire une fonction qui permet de rechercher un élément dans une liste triée en ordre croissant (recherche dichotomique). e) Ecrire une fonction qui permet d inverser une liste. f) Ecrire une fonction qui permet de concaténer deux listes (sans doublons). g) Ecrire une fonction qui permet de renvoyer l intersection de deux listes. h) Ecrire une fonction qui permet de fusionner deux listes triées en ordre croissant. La liste résultante doit être triée. Page 8

9 Série 4 : Les listes chainées Exercice 1 : On suppose qu on dispose des fichiers ELTDBL.H et ELTDBL.C implémentés dans l exercice 1 de la série 3. Dans cet exercice, on s intéresse à traiter une liste simplement chaînée de réels. 1) Ecrire une fonction MinMax qui permet de calculer le min et le max dans une liste chaînée de réels. 2) Ecrire une fonction MoyProd qui permet de calculer la moyenne et le produit d une liste chaînée de réels. 3) Ecrire une fonction qui permet d inverser une liste de réels. 4) Ecrire une fonction qui permet de fusionner deux chaînes de réels à une position donnée. Exercice 2 : Un livre est caractérisé par : 1) son numéro (entier) 2) son titre (chaîne de caractère) 3) son auteur (chaîne de caractère) 4) son éditeur (chaîne de caractère) 5) son prix (réel) 1) Ecrire le fichier ELTLVR.H qui définit un livre comme étant une implémentation du TDA ELEMENT, sachant qu on veut stocker les livres indirectement. 2) Ecrire le fichier ELTLVR.C 3) Ecrire une fonction qui permet de retourner le nombre d exemplaires d un livre donné. 4) Ecrire une fonction qui permet de calculer le nombre de livres d un éditeur donné. 5) Ecrire une fonction qui permet de retourner un tableau de livre d un auteur donné. 6) Ecrire une fonction qui retourne le livre le plus cher. 7) Ecrire une fonction qui permet de calculer la valeur de la bibliothèque (somme des prix des livres). Page 9

10 8) Ecrire une fonction qui permet de retourner une partie de la liste de livres à partir d une position Deb à une position Fin. Exercice 3 : Un abonné est caractérisé par : - son numéro - son nom - sa ville 1) Ecrire le fichier ELTABN.H qui définit un abonné comme étant une implémentation du TDA ELEMENT, sachant qu on veut stocker les abonnés indirectement. 2) Ecrire le fichier ELTABN.C 3) Ecrire une fonction qui permet de vérifier s il existe dans la liste un abonné dont le nom est N et la ville est V. 4) Ecrire une fonction qui permet de calculer le nombre d abonnés d une ville donnée. 5) Ecrire une fonction qui permet de retourner un tableau des villes distinctes des abonnés. 6) Ecrire une fonction qui retourne un tableau d abonné d une ville donnée. Page 10

11 Série5: Les expressions arithmétiques (pile et file) Exercice1: 1) Exécuter manuellement l évaluation ds expressions postfixées suivantes : a) * * b) / * 2) Exécuter manuellement la transformation de cette expression infixée a+b*c+(d*e+f)*g en expression postfixée. Exercice 2: On veut écrire un programme permettant d évaluer un expression postfixée utilisant comme opérateurs uniquement les opérateurs binaires +, -, * et / et manipulant uniquement des chiffres (les nombres sont des chiffres 0, 1, 2,.9), autrement dit un entier est un seul chiffre. On suppose que l expression est donnée sans qu il y ait des séparateurs (pas d espaces entre les opérateurs et les valeurs). Par exemple : 36*25+- (qui est l équivalent en infixée (3*6) (2+5)) Ecrire le programme correspondant à l évaluation de ce type d expression postfixée Exercice 3: En reprenant les même hypothèses que l exercice précédent, écrire le programme correspondant à l évaluation d une expression préfixée (exemple -*36+25) Exercice 4: Page 11

12 On veut généraliser l évaluation des expressions arithmétiques postfixées (par rapport à l exercice 2). - Les opérateurs utilisées sont les opérateurs binaires +, -, * et / - Les entiers manipulés peuvent être composées de plus qu un chiffre (ex : 345, 89, etc). - Il est impératif qu il y ait un espace (séparateur) entre deux entiers ou deux opérateurs ou un entier et un opérateur. Par exemple : 3 6* (qui est l équivalent en infixée de (3*6) (2 + 5)) * (qui est l équivalent en infixée de ( ) * ( )) Ecrire le programme correspondant à l évaluation de ce type d expression postfixée. Exercice 5: En se basant sur les hypothèses de l exercice précédent, écrire un programme permettant d transformer une expression infixée en une expression infixée Rappelons qu il faut qu il y ait toujours un séparateur (espace) entre les entiers, les opérateurs et aussi les parenthèses ( et ). Page 12

13 Série 6 : Les Arbres Exercice 1 a) Ecrire une fonction ARBIN creerarbreentiers() qui permet de créer et de renvoyer l arbre d entiers suivant : b) Ecrire une fonction int feuilles(arbin a) qui permet de compter le nombre de feuilles d un arbre. c) Ecrire une fonction void inverserarbre(arbin a) qui permet d inverser un arbre d entiers (fils gauche devient fils droit et vice versa). Exercice 2 Procédure FileArbre (A : ArbreBinaire) F : File de noeuds d un arbre binaire P : Noeud d un arbre binaire Début Initialiser(F) // Création d une file vide Enfiler(F, A->refRacine) Tantque NonVide(F) Faire P<-Défiler(F) Afficher(P->Info) Si P->FG!= NULL Alors Enfiler(F, P->FG) Finsi Si P->FD!= NULL Alors Enfiler(F, P->FD) Finsi Fin Tantque Fin En utilisant la procédure FileArbre, donner l'ordre d'affichage des noeuds de l'arbre ci-dessous Page 13

14 . Exercice 3 Dans cet exercice, on se propose de traiter des arbres binaires partiellement équilibrés en utilisant le type arbre binaire ARBIN. Un arbre binaire est dit partiellement équilibré s il est vide ou si pour chaque noeud de l arbre les hauteurs de ses sous arbres gauches et droits diffèrent de au plus 1. a) En utilisant les primitives d un arbre binaire (ARBIN), écrire une fonctions récursive int equilibre(arbin a) qui retourne 1 (vrai) si l arbre a satisfait la définition d un arbre binaire partiellement équilibré et 0 (faux) sinon. Soit un arbre binaire a manipulant des éléments nommés CarHauteur. Un élément CarHauteur est déclaré dans le fichier ELTCARHAUT.H comme suit : typedef struct char car ; int hauteur ; CarHauteur, * ELEMENT ; b) Ecrire une fonctions récursive void calculerhauteurs(arbin a) qui prend en argument un arbre binaire de ce type. Cette fonction modifie l arbre en entrée en mettant à jour le champ hauteur de chaque noeud de façon à ce qu il contienne la hauteur du sous arbre dont il est la racine. Page 14

15 c) En employant la fonction calculerhauteurs, donner une nouvelle implémentation de fonction equilbre (question a) Exercice 4 Soit le type arbre épine dorsale qui est un arbre ternaire structuré de la manière suivante : a) Remplir les blancs relatifs à la figure ci-dessus : - La profondeur de cet arbre est.. - L ordre de cet arbre est.. - Le résultat du parcours postfixé est.. - La liste A,B,Z,X,C,E,Y,D,R,M,F,N est un le résultat du parcours.. - Les noeuds B, Z, X appartiennent au niveau.. - A-Z-E-R est.. L implémentation chaînée de la structure de données épine dorsale va se faire dans les fichiers ARBED.H et ARBED.C. b) Ecrire le code de fichier ARBED.H qui permet de déclarer le type arbre épine dorsale. c) Ecrire une fonction itérative int tailleed(arbed a) qui permet de renvoyer la taille d un arbre épine dorsale. d) Ecrire une fonction itérative int verifiered(arbed a) qui permet de renvoyer 1 (vrai) si l arbre a est épine dorsale et 0 si non (faux). Exercice 5 On définit un tas comme étant un arbre binaire parfait tel que l information contenue dans chaque noeud est inférieure à celles contenues dans ses deux fils. Le minimum de l ensemble représenté par un tas est donc à la racine (C est le cas de l exemple ci-dessous). Les traitements sur les tas nécessitent que chaque noeud puisse accéder à son père ainsi qu à ses fils. Page 15

16 On se propose d implémenter les primitives de structure de données TAS suivants : - int tasinserer(tas t, ELEMENT e) ; - ELEMENT supprimermin(tas t) ; - ELEMENT tasracine(tas t) ; - int tasvide(tas t) ; - int tassature(tas t) ; - etc a) Ecrire le code de fichier TASPTR.H qui permet d implémenter le tas d une façon chaînée. Un arbre binaire parfait de taille n peut se représenter de façon très compacte dans un tableau T de taille au moins égale à n + 1 (la première cellule de T, de rang 0, n est pas utilisée). La représentation est la suivante: La racine est en T[1] et si un noeud est en T[i], son fils gauche est en T[2i] et son fils droit en T[2i+1]. b) Donner la représentation dans le cas de l arbre ci-dessus. c) Quel est l instruction qui permet de récupérer le père d un noeud i. d) Pourquoi cette représentation contiguë est-elle adéquate avec les Tas. e) Ecrire le code de fichier TASTAB.H qui permet d implémenter le tas d une façon contiguë. Insertion d un élément à un tas Le problème est d ajouter un élément e à un tas tout en conservant une structure de tas. On commence par Page 16

17 rajouter l élément e comme feuille au dernier niveau de l arbre puis on échange l information du nœud portant e avec celui de son père jusqu à ce que, pour respecter la structure de tas, e ne soit pas inférieur à l information du père du noeud qui le porte. Par exemple, pour rajouter 4 au tas donné dans l exemple ci-dessus, on obtient les étapes suivantes : f) Ecrire une fonction itérative int tasinserer(tas t, ELEMENT e) qui permet d insérer un élément e à un tas t. En supposant que la fonction NOEUDTAS dernierpere(tas t) qui retourne le père de e est donnée. Dans l exemple précédant la fonction dernierpere() retourne le noeud contenant 8. La complexité temporelle de cette fonction est de O(N), N étant la taille de l arbre. g) Donner la complexité temporelle de cet algorithme avec une brève explication. Suppression du minimum d un tas (la racine) h) Ecrire une fonction itérative ELEMENT supprimermin(tas t) qui permet de supprimer le minimum du tas courant et retournant la valeur de ce minimum, en utilisant la représentation contiguë. L idée est de supprimer la dernière feuille du dernier niveau après avoir recopié son information à la racine, puis, pour respecter la structure de tas, de faire redescendre cette valeur en la comparant au contenu de ses fils, par un processus inverse de celui de l insertion. La figure suivante illustre ce processus dans le cas de l exemple. Page 17

18 Exercice 6 (Session Principale 2007/2008) Un arbre lexicographique est un arbre binaire qui représente un dictionnaire tel que: - Chaque noeud contient un caractère - Le fils droit signifie le caractère suivant dans le mot. - Le fils gauche signifie le caractère suivant dans le dictionnaire (alternative). Le caractère * signifie la fin d un mot. Il est à noter qu'un noeud "fin de mot" n'a pas de sousarbre droit mais peut avoir un sous arbre gauche. Par exemple, l'arbre suivant correspond aux 8 mots : a bac balle ballon bas base bus sac Page 18

19 La structure arbre lexicographique peut être implémentée par un arbre binaire dont les éléments sont de caractères (ELTCAR.H et ELTCAR.C). a) Donner la trace d exécution de la fonction f suivante : public void f (ARBIN a) char mot[20] ; g (a->refracine, mot,0); void g (NOEUD n, char m[], int i) if (n!= NULL) if (n->info == * ) m[i] = \0 ; printf( %s, m); else m[i] = n->info; g (n->fd, m, i + 1); g (n->fg, m, i); Page 19

20 Quelle est l utilité de cette fonction? b) Ecrire une fonction récursive int existerec(arbin a, char mot[]) qui permet de tester l existence d un mot dans un arbre lexicographique. c) Ecrire une fonction itérative int existeit(arbin a, char mot[]) qui permet de tester l existence d un mot dans un arbre lexicographique. Page 20

21 Deuxième partie 2 Devoirs surveillés Page 21

22 Devoir surveillé n 1 ( ) On propose d écrire un programme permettant de représenter les polynômes. Un polynôme est un ensemble de monômes. Un monôme est composé de deux entiers : coefficient puissance L interface de ce type est la suivante (fichier POLYPRIM.H) POLYNOME PolynomeCreer() ; int PolynomeTaille(POLYNOME) ; int estvide(polynome) ; int estsaturee(polynome) ; POLYNOME SaisiePolynome(int) ; Void Reduction(POLYNOME) ; On se propose d implémenter quelques primitives de cette interface sous la forme d une liste chaînée de monômes (fichiers POLYPTR.H pour les déclarations des structures et POLYPTR.C pour le code). La figure ci-contre est une représentation du polynôme : 1) Ecrire le fichier POLYPTR.H qui définit les structures nécessaires. (3 points) typedef struct structnoeud int coefficient; int puissance ; struct structnoeud * suivant; structnoeud, * NOEUD; typedef struct NOEUD tete; int lg; Page 22

23 lastruct,*polynome; Sinon ils peuvent utiliser le type ELEMENT qui correspond à une structure contenant les deux int. 2) En se limitant aux fonctionnalités de l interface POLYPRIM.H implémenter la fonction POLYNOME SaisiePolynome(int n) qui permet de saisir un polynôme de n monômes. (5 points) POLYNOME SaisiePolynome(int n) NOEUD p,q; POLYNOME L=PolynomeCreer(); if(l==null) return L ; if(n>=1) p=noeudcreer(); scanf(`` %i ``, &p->puissance) ; scanf(`` %i ``, &p->coefficient) ; L->tete=p; p->suivant=null; L->lg++; for(int i=1;i<n;i++) q=noeudcreer(); scanf(`` %i ``, &q->puissance) ; scanf(`` %i ``, &q->coefficient) ; p->suivant=q; p=q; L->lg++; p->suivant=null; return L; Page 23

24 3) En se limitant aux fonctionnalités de l interface POLYPRIM.H implémenter la fonction void Reduction(POLYNOME P) qui permet de réduire la taille du polynôme P en effectuant la somme des monômes ayant la même puissance. (6 points) En appliquant cette fonction à l exemple précédent, on obtiendra void Reduction(POLYNOME P) NOEUD p=l->tete,q,s; int i=1; while (p!=null) s=p; q=p->suivant; while(q!=null) if((q->puissance == (p->puissance) p->coefficient+=q-> coefficient; s->suivant=q->suivant; noeuddetruire(q) ; L->lg--; q=s->suivant ; else q=q->suivant; Page 24

25 s=s->suivant; p=p->suivant; 4) Donner la complexité de chaque fonction implémentée et argumenter votre réponse. (4 points) Complexité fonction : POLYNOME SaisiePolynome (int n) O(n) Complexité fonction : Void Reduction( POLYNOME P) n+(n-1)+(n-2)+ +1= (n²-n)/2 ==O(n²) 5)Quels sont les modifications nécessaires pour avoir une liste chainée circulaire de monômes. (2 points) Si quelqu un a compris l idée que pour une liste circulaire chainée la queue doit pointer sur la tête, il peut avoir les 2 pts du barème. Page 25

26 Devoir surveillé n 2 ( ) Exercice 1: Définition d un type de donnée MATRICE (12 points) On veut définir un nouveau type abstrait : MATRICE sans avoir recours au TDA LISTE On suppose qu on dispose des fichiers ELTINT.H et ELTINT.C implémentés qui permettent de réaliser le TDA ELEMENT par un entier et du fichier MATPRIM.H qui définit les primitives du TDA MATRICE. Les opérations de base sont : la création d une matrice, l ajout et la suppression d une ligne ou d une colonne et l accès à un élément de la matrice. MATRICE CreeMatrice(); Int InsererLigne(MATRICE,int) Int InsererColonne(MATRICE,int) Int SupprimerLigne(MATRICE,int) Int SupprimerColonne(MATRICE,int) Element Récuperer(MATRICE, Int, int) 1. Ecrire le fichier MATPTR.H qui définit une matrice simplement chainée comme étant une implémentation du TDA MATRICE (Il vous faudra également définir NOEUD) (3 points) Page 26

27 #ifndef _MATPTR_H #define _MATPTR_H #include "ELTPRIM.h" typedef struct structnoeud ELEMENT info; struct structnoeud * suivant_ligne; struct structnoeud * suivant_colonne; structnoeud, * NOEUD; typedef struct NOEUD tete; int NL; int NC; lastruct,*matrice; #endif 2)Ecrire une fonction int Supprimer (MATRICE M, int k) qui permet de supprimer la k ième ligne de la matrice. Cette fonction retourne 1 si l opération de suppression a été effectuée avec sucées, 0 sinon. (9 points) supprimer (MATRICE M, int k ) int i, succee=1; NOEUD p, q,n; if (estvide(m)) else printf ("\nmatrice vide"); succee=0; if ((k < 1) (k> M->NL)) printf ("\nposition invalide"); succee=0; Page 27

28 else q = M->tete; if (k == 1) /*suppression de la première ligne*/ M->tete=M->tete->suivant_ligne; for(i=1;i<=l->nc; i++) p=q; q=q->suivant_colonne; noeuddetruire(p); else /*cas général (k > 1) */ for (i=1; i<k; i++) p = q; q = q->suivant_ligne; for(i=1;i<=l->nc; i++) p->suivant_ligne=q->suivant_ligne; p=p->suivant_colonne ; n=q ; q=q->suivant_colonne ; noeuddetruire(n); (L->NL)--; return succee; Page 28

29 Exercice 2 : expression bien parenthésée (8 points) En utilisant la structure pile contigüe, Ecrire une fonction qui vérifie si une expression est bien parenthésée. Nous considérerons des expressions arithmétiques, formées de nombres entiers et des quatre opérateurs. Ces expressions pourront être parenthésée à l aide de deux types de parenthèses différentes : () et []. Une expression est dite bien parenthésée si pour toute parenthèse fermante d un certain type, il existe une parenthèse ouvrante du même type qui la précède, et qui n a pas encore été fermée. NB : vous pouvez utiliser les primitives de piles. Exemple : Les expressions suivantes sont bien parenthésées : ([3 + 5] (2 9)) ([(2)]) Les expressions suivantes ne sont pas bien parenthésées : (3 + 5] : les types de parenthèses ne correspondent pas. ((3) : une des deux parenthèses n a pas été fermée. (4)) : on ferme une parenthèse qui n a pas été ouverte. int VerifPar(char* ch ) int i = 1, n=strlen(ch); int res; Pile P = PileCreer(); for (i=0; i <n; i++) if (ch[i] == ( ch[i] == [ ) Empiler(P, ch[i]) ; else if (ch[i]= = ) ) if (EstVide(P) Sommet(P) == [ ) res=0; ; else Depiler(P) ; else if (ch[i]= = ] ) if (EstVide(P) sommet(p) == ( ) res= 0 ; else Depiler(P) ; if (EstVide(P) ) res= 1 ; else res= 0 ; PileDetruire(P); Page 29

30 Return res; Page 30

31 Devoir surveillé n 3 ( ) On se propose de définir la structure Dictionnaire permettant d avoir une liste de mots avec leurs définitions. Pour cela on procédera comme suit : La structure Mot est défini par : Une chaîne (chaîne de caractères), ses explications (tableau de chaîne de caractères), et le nombre d explications de cette chaîne. La structure Dictionnaire est définie par une liste doublement chaînée de définitions. 1. Ecrire le code du fichier ELTMOT.H qui permet de réaliser le TDA ELEMENT pour une structure MOT (en stockage indirect). 2. Ecrire le code du fichier ELTMOT.C qui permet de définir les primitives de TDA ELEMENT. 3. Ecrire une fonction InsererDef qui permet d'ajouter une explication pour un mot donné dans le dictionnaire s il existe. 4. Ecrire une procédure DefinitionMOT qui donne le nombre et les explications d une chaîne donnée. Corrigé du devoir surveillé n 3 ( ) 1. 2 pts #ifndef _ELTMOT_H #define _ELTMOT_H 2. 8 pts typedef struct char chaine [100]; char explications [100][100]; int nbre; mot, *ELEMENT; #endif #include "ELTPRIM.h" 1 ELEMENT elementcreer(void) ELEMENT e; e=(element)malloc(sizeof(mot)); return e; Page 31

32 0,5 void elementdetruire (ELEMENT e) free (e); 2 void elementlire(element * e) int i; printf("donner un mot:\n"); scanf("%s",&(*e)->chaine); do printf("donner le nombre d'explications de ce mot:\n"); scanf("%d", &(*e)->nbre); while((*e)->nbre<=0); for(i=0; i<(*e)->nbre; i++) printf("donner l'explication N %d:",i+1); scanf("%s", &((*e)->explications[i])); printf("\n"); 1,5 void elementafficher(element e) int i; printf("le mot est: %s\n", e->chaine); printf("les definitions donnees pour ce mot sont:\n"); for(i=0; i<e->nbre; i++) printf("explication N %d: %s \n", i+1, e->explications[i]); 0,5 void elementaffecter(element * e1, ELEMENT e2) *e1=e2; 2 void elementcopier(element * e1, ELEMENT e2) int i; strcpy((*e1)->chaine, e2->chaine); (*e1)->nbre=e2->nbre; for(i=0; i<(*e1)->nbre; i++) strcpy((*e1)->explications[i], e2->explications[i]); 0,5 int elementcomparer(element e1, ELEMENT e2) Page 32

33 return strcmp(e1->chaine,e1->chaine); 3. 5 pts #include "LSTPRIM.h" int InsererDef(LISTE l, ELEMENT e, char expli []) int taille, trouve=0; NOEUD p=l->tete; if (estvide(l)) printf("liste vide\n"); return 0; else while(!trouve && p!=null) if (elementcomparer(p->info, e) == 0) taille=p->info->nbre; strcpy(p->info->explications[taille],expli); p->info->nbre++; trouve=1; else p=p->suivant; return trouve; 4. 5 pts void DefinitionMOT(LISTE l, char chaine[], char res[100][100], int * nb) int i; NOEUD p=l->tete; int trouve=0; if (estvide(l)) printf("liste vide\n"); else while(!trouve && p!=null) if (strcmp(p->info->chaine, chaine) == 0) for(i=0; i<p->info->nbre; i++) Page 33

34 trouve=1; strcpy(res[i], p->info->explications[i]); *(nb)=p->info->nbre; else p=p->suivant; Page 34

35 Troisième partie 3 Sujets Des Examens Page 35

36 Examen corrigé N 1 (2009/2010) Exercice 1 (12 points) : Un arbre d expressions est un arbre binaire où les noeuds sont ou bien des opérateurs ou bien des opérandes: 1) En supposant qu on dispose d un arbre d expressions non vide, écrire la fonction ABRFile(ARBIN a, int O, FILE F) qui permet de parcourir un arbre a de telle sorte à créer l expression arithmétique qui lui correspond sous forme d une FILE F. La nature de l expression demandée est précisé par l entier O (O=1: expression préfixée, O=2: expression infixée, O=3: expression postfixée). Comme le montre l exemple suivant: Remarque : Vous pouvez utiliser toutes les fonctionnalités du TDA File, par contre pour les arbres seule la structure peut être utilisée (toute autre fonctionnalité doit être programmée). void ABRFile(ARBIN a, int O, FILE F) AjouterNoeud (a->refracine, F, O); =================================== void AjouterNoeud(NOEUD n, FILE F, int O) Page 36

37 if(n) switch(o) case 1: /* parcours préfixé */ Enfiler (F, n->info) ; AjouterNoeud (n->fg, F, O); AjouterNoeud (n->fd, F, O); break; case 2: /* parcours infixé */ AjouterNoeud (n->fg, F, O); Enfiler (F, n->info) ; AjouterNoeud (n->fd, F, O); break; case 3: /* parcours postfixé */ AjouterNoeud (n->fg, F, O); AjouterNoeud (n->fd, F, O); Enfiler (F, n->info) ; break; default: printf("erreur d'affichage: ordre %d incorrect.\n", ordre); 2) Afin d évaluer l expression arithmétique obtenue dans F, quelle est la (ou les meilleurs) valeur de O qu il faut choisir. Justifier votre réponse Les expressions préfixées et postfixées ont l avantage que l ordre de priorité est déterminé par leur position dans ces expressions. Les expressions préfixées et postfixées peuvent être facilement évaluées en utilisant les piles. Page 37

38 3) Supposons que O=1, donner les différentes étapes qui permettent d évaluer F= * en utilisant une pile P (à chaque étape préciser le contenu de P et celui de F) Exercice 2 (8 points): Page 38

39 Soit P = (a1,..., an) une pile non vide de n éléments (avec a1 le sommet de la pile). On désire modifier le contenu de la pile P pour qu'elle contienne (a2,..., an, a1) (c'est-à-dire le sommet a1 est déplacé au fond de la même pile). Cette opération s appelle la rotation d une pile. On considèrera l'implémentation chainée suivante de la pile typedef struct structnoeud ELEMENT info; struct structnoeud * suivant; structnoeud, * NOEUD; typedef struct NOEUD tete; /* Sommet de la pile */ lastruct,*pile; 1) Donner une implémentation en langage C de la fonction Rotation (Pile P), sans utiliser les primitives du TDA Pile. void Rotation(Pile P) NOEUD n, m; If (P->tete!= null) && (P->tete->suivant!= null) n = P->tete; P->tete = P->tete->suivant; m = P->tete; while m->suivant!=null m = m->suivant m->suivant = n; n->suivant = null; 2) Donner la complexité temporelle et spatiale d'un algorithme qui appelle la fonction rotation m fois sur une pile qui contient n éléments Complexite temporelle O(nm) spatiale O(n) Page 39

40 Références R. Malgouyres, F. Feschet, Z. Zrour. Algorithmique et structures de données en C Page 40

Les structures de données. Rajae El Ouazzani

Les structures de données. Rajae El Ouazzani Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l

Plus en détail

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation : Algorithmique et programmation : STRUCTURES DE DONNÉES A. Structure et enregistrement 1) Définition et rôle des structures de données en programmation 1.1) Définition : En informatique, une structure de

Plus en détail

Les arbres binaires de recherche

Les arbres binaires de recherche Institut Galilée Année 2010-2011 Algorithmique et arbres L2 TD 6 Les arbres binaires de recherche Type en C des arbres binaires (également utilisé pour les ABR) : typedef struct noeud_s { struct noeud_s

Plus en détail

Algorithmique, Structures de données et langage C

Algorithmique, Structures de données et langage C UNIVERSITE PAUL SABATIER TOULOUSE III Algorithmique, Structures de données et langage C L3 IUP AISEM/ICM Janvier 2005 J.M. ENJALBERT Chapitre 1 Rappels et compléments de C 1.1 Structures Une structure

Plus en détail

PROJET ALGORITHMIQUE ET PROGRAMMATION II

PROJET ALGORITHMIQUE ET PROGRAMMATION II PROJET 1 ALGORITHMIQUE ET PROGRAMMATION II CONTENU DU RAPPORT A RENDRE : o Fiche signalétique du binôme o Listing des différents fichiers sources o CD sources o Il sera tenu compte de la présentation du

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

ARBRES BINAIRES DE RECHERCHE

ARBRES BINAIRES DE RECHERCHE ARBRES BINAIRES DE RECHERCHE Table de symboles Recherche : opération fondamentale données : éléments avec clés Type abstrait d une table de symboles (symbol table) ou dictionnaire Objets : ensembles d

Plus en détail

INF601 : Algorithme et Structure de données

INF601 : Algorithme et Structure de données Cours 2 : TDA Arbre Binaire B. Jacob IC2/LIUM 27 février 2010 Plan 1 Introuction 2 Primitives u TDA Arbin 3 Réalisations u TDA Arbin par cellules chaînées par cellules contiguës par curseurs (faux pointeurs)

Plus en détail

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année 2003-2004 Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES Maude Manouvrier La reproduction de ce document par

Plus en détail

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte Projet d informatique M1BI : Compression et décompression de texte Le but de ce projet est de coder un programme réalisant de la compression et décompression de texte. On se proposera de coder deux algorithmes

Plus en détail

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004 Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)

Plus en détail

Définitions. Numéro à préciser. (Durée : )

Définitions. Numéro à préciser. (Durée : ) Numéro à préciser (Durée : ) On étudie dans ce problème l ordre lexicographique pour les mots sur un alphabet fini et plusieurs constructions des cycles de De Bruijn. Les trois parties sont largement indépendantes.

Plus en détail

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles) 1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d

Plus en détail

Chapitre 1 : La gestion dynamique de la mémoire

Chapitre 1 : La gestion dynamique de la mémoire Chapitre 1 : La gestion dynamique de la mémoire En langage C un programme comporte trois types de données : Statiques; Automatiques ; Dynamiques. Les données statiques occupent un emplacement parfaitement

Plus en détail

Introduction au langage C

Introduction au langage C Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

Le langage C. Séance n 4

Le langage C. Séance n 4 Université Paris-Sud 11 Institut de Formation des Ingénieurs Remise à niveau INFORMATIQUE Année 2007-2008 Travaux pratiques d informatique Le langage C Séance n 4 But : Vous devez maîtriser à la fin de

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

Compression de Données - Algorithme de Huffman Document de Conception

Compression de Données - Algorithme de Huffman Document de Conception ROLLET Samuel SALLE Jennifer Compression de Données - Algorithme de Huffman Document de Conception Projet d'algorithmique et Structure des Données 1 SOMMAIRE 1. Domaine d application....4 1.1 Objectifs

Plus en détail

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : http://www.lri.fr/ hivert

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : http://www.lri.fr/ hivert 1 de 46 Algorithmique Trouver et Trier Florent Hivert Mél : Florent.Hivert@lri.fr Page personnelle : http://www.lri.fr/ hivert 2 de 46 Algorithmes et structures de données La plupart des bons algorithmes

Plus en détail

SUPPORT DE COURS. Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : omarinmt@gmail.com

SUPPORT DE COURS. Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : omarinmt@gmail.com Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : omarinmt@gmail.com SUPPORT DE COURS Matière : Algorithmiques et Structures de Données 1 Niveau : 2 ème Année Licence en Informatique

Plus en détail

Initiation. àl algorithmique et à la programmation. en C

Initiation. àl algorithmique et à la programmation. en C Initiation àl algorithmique et à la programmation en C Initiation àl algorithmique et à la programmation en C Cours avec 129 exercices corrigés Illustration de couverture : alwyncooper - istock.com Dunod,

Plus en détail

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; }; #include #include struct cell int clef; struct cell suiv; ; / longueur. pc->suiv est l abréviation de (pc).suiv. pour cette fonction comme pour les suivantes, on donne, lorsqu il existe

Plus en détail

Arbres binaires de recherche

Arbres binaires de recherche 1 arbre des comparaisons 2 recherche dichotomique l'arbre est recalculé à chaque recherche 2 5 3 4 7 9 1 6 1 2 3 4 5 6 7 9 10 conserver la structure d'arbre au lieu de la reconstruire arbre binaire de

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr Table des matières 1 Les bases 3 2 Variables et constantes 5 3 Quelques fonctions indispensables

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

Représentation d un entier en base b

Représentation d un entier en base b Représentation d un entier en base b 13 octobre 2012 1 Prérequis Les bases de la programmation en langage sont supposées avoir été travaillées L écriture en base b d un entier est ainsi défini à partir

Plus en détail

Introduction à MATLAB R

Introduction à MATLAB R Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d

Plus en détail

V- Manipulations de nombres en binaire

V- Manipulations de nombres en binaire 1 V- Manipulations de nombres en binaire L ordinateur est constitué de milliards de transistors qui travaillent comme des interrupteurs électriques, soit ouverts soit fermés. Soit la ligne est activée,

Plus en détail

Génie Logiciel avec Ada. 4 février 2013

Génie Logiciel avec Ada. 4 février 2013 Génie Logiciel 4 février 2013 Plan I. Généralités II. Structures linéaires III. Exceptions IV. Structures arborescentes V. Dictionnaires I. Principes II. Notions propres à la POO I. Principes Chapitre

Plus en détail

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation Complexité Objectifs des calculs de complexité : - pouvoir prévoir le temps d'exécution d'un algorithme - pouvoir comparer deux algorithmes réalisant le même traitement Exemples : - si on lance le calcul

Plus en détail

Chap III : Les tableaux

Chap III : Les tableaux Chap III : Les tableaux Dans cette partie, on va étudier quelques structures de données de base tels que : Les tableaux (vecteur et matrice) Les chaînes de caractères LA STRUCTURE DE TABLEAU Introduction

Plus en détail

INITIATION A LA PROGRAMMATION

INITIATION A LA PROGRAMMATION 2004-2005 Université Paris Dauphine IUP Génie Mathématique et Informatique INITIATION A LA PROGRAMMATION PROCEDURALE, A L'ALGORITHMIQUE ET AUX STRUCTURES DE DONNEES PAR LE LANGAGE C Maude Manouvrier La

Plus en détail

I. Introduction aux fonctions : les fonctions standards

I. Introduction aux fonctions : les fonctions standards Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons

Plus en détail

Programmation Classique en langage C

Programmation Classique en langage C DI GALLO Frédéric Programmation Classique en langage C Cours du Cycle d Approfondissement CNAM ANGOULEME 2000-2001 DI GALLO Frédéric Page 1 01/04/01 PROGRAMMATION CLASSIQUE : LANGAGE C DI GALLO Frédéric

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

Les structures. Chapitre 3

Les structures. Chapitre 3 Chapitre 3 Les structures Nous continuons notre étude des structures de données qui sont prédéfinies dans la plupart des langages informatiques. La structure de tableau permet de regrouper un certain nombre

Plus en détail

Cours d Algorithmique et de Langage C 2005 - v 3.0

Cours d Algorithmique et de Langage C 2005 - v 3.0 Cours d Algorithmique et de Langage C 2005 - v 3.0 Bob CORDEAU cordeau@onera.fr Mesures Physiques IUT d Orsay 15 mai 2006 Avant-propos Avant-propos Ce cours en libre accès repose sur trois partis pris

Plus en détail

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en

Plus en détail

Chapitre 10. Les interfaces Comparable et Comparator 1

Chapitre 10. Les interfaces Comparable et Comparator 1 Chapitre 10: Les interfaces Comparable et Comparator 1/5 Chapitre 10 Les interfaces Comparable et Comparator 1 1 Ce chapitre a été extrait du document "Objets, Algorithmes, Patterns" de [René Lalement],

Plus en détail

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental

Plus en détail

Traitement des données avec Microsoft EXCEL 2010

Traitement des données avec Microsoft EXCEL 2010 Traitement des données avec Microsoft EXCEL 2010 Vincent Jalby Septembre 2012 1 Saisie des données Les données collectées sont saisies dans une feuille Excel. Chaque ligne correspond à une observation

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

4. Les structures de données statiques

4. Les structures de données statiques 4. Les structures de données statiques 4.1 Tableaux à une dimension 4.1.1 Introduction Imaginons que dans un programme, nous ayons besoin simultanément de 25 valeurs (par exemple, des notes pour calculer

Plus en détail

1 Recherche en table par balayage

1 Recherche en table par balayage 1 Recherche en table par balayage 1.1 Problème de la recherche en table Une table désigne une liste ou un tableau d éléments. Le problème de la recherche en table est celui de la recherche d un élément

Plus en détail

UE C avancé cours 1: introduction et révisions

UE C avancé cours 1: introduction et révisions Introduction Types Structures de contrôle Exemple UE C avancé cours 1: introduction et révisions Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2004/2005 Introduction Types Structures de contrôle Exemple

Plus en détail

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun> 94 Programmation en OCaml 5.4.8. Concaténation de deux listes Définissons maintenant la fonction concat qui met bout à bout deux listes. Ainsi, si l1 et l2 sont deux listes quelconques, concat l1 l2 constitue

Plus en détail

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Cours de Programmation Impérative: Zones de mémoires et pointeurs Cours de Programmation Impérative: Zones de mémoires et pointeurs Julien David A101 - david@lipn.univ-paris13.fr Julien David (A101 - david@lipn.univ-paris13.fr) 1 / 1 Z`o n`e s `d`e m`é m`o i r`e Julien

Plus en détail

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing 3/4/27 Programmation Avancée Multimédia Multithreading Benoît Piranda Équipe SISAR Université de Marne La Vallée Besoin Programmes à traitements simultanés Réseau Réseau Afficher une animation en temps

Plus en détail

Corrigé des TD 1 à 5

Corrigé des TD 1 à 5 Corrigé des TD 1 à 5 1 Premier Contact 1.1 Somme des n premiers entiers 1 (* Somme des n premiers entiers *) 2 program somme_entiers; n, i, somme: integer; 8 (* saisie du nombre n *) write( Saisissez un

Plus en détail

Architecture des Systèmes d Information Architecture des Systèmes d Information

Architecture des Systèmes d Information Architecture des Systèmes d Information Plan... Tableaux et tris I3 - Algorithmique et programmation 1 Rappels Nicol Delestre 2 Tableaux à n dimensions 3 Initiation aux tris Tableaux - v2.0.1 1 / 27 Tableaux - v2.0.1 2 / 27 Rappels : tableau

Plus en détail

Cours de C++ François Laroussinie. 2 novembre 2005. Dept. d Informatique, ENS de Cachan

Cours de C++ François Laroussinie. 2 novembre 2005. Dept. d Informatique, ENS de Cachan Cours de C++ François Laroussinie Dept. d Informatique, ENS de Cachan 2 novembre 2005 Première partie I Introduction Introduction Introduction Algorithme et programmation Algorithme: méthode pour résoudre

Plus en détail

TD3: tableaux avancées, première classe et chaînes

TD3: tableaux avancées, première classe et chaînes TD3: tableaux avancées, première classe et chaînes de caractères 1 Lestableaux 1.1 Élémentsthéoriques Déclaration des tableaux Pour la déclaration des tableaux, deux notations sont possibles. La première

Plus en détail

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux. UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases

Plus en détail

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

Utilisation d objets : String et ArrayList

Utilisation d objets : String et ArrayList Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons

Plus en détail

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université

Plus en détail

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT Ces exercices portent sur les items 2, 3 et 5 du programme d informatique des classes préparatoires,

Plus en détail

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, tableaux, opérateurs Entrées sorties de base Structures de

Plus en détail

Chapitre 7. Récurrences

Chapitre 7. Récurrences Chapitre 7 Récurrences 333 Plan 1. Introduction 2. Applications 3. Classification des récurrences 4. Résolution de récurrences 5. Résumé et comparaisons Lectures conseillées : I MCS, chapitre 20. I Rosen,

Plus en détail

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores INTRODUCTION AUX SYSTEMES D EXPLOITATION TD2 Exclusion mutuelle / Sémaphores Exclusion mutuelle / Sémaphores - 0.1 - S O M M A I R E 1. GENERALITES SUR LES SEMAPHORES... 1 1.1. PRESENTATION... 1 1.2. UN

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Algorithmique et programmation : les bases (VBA) Corrigé

Algorithmique et programmation : les bases (VBA) Corrigé PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Cours VBA, Semaine 1 mai juin 2006 Corrigé Résumé Ce document décrit l écriture dans le langage VBA des éléments vus en algorithmique. Table des matières 1 Pourquoi

Plus en détail

Algorithmique et Programmation

Algorithmique et Programmation École Supérieure d Ingénieurs de Poitiers Gea Algorithmique et Programmation Laurent Signac ii Algorithmique et programmation Gea Table des matières Avant Propos v Structures de données Notion de pointeur..............................................

Plus en détail

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives introduction Chapitre 5 Images récursives http ://univ-tln.fr/~papini/sources/flocon.htm Récursivité http://www.poulain.org/fractales/index.html Image qui se contient elle-même 1 Exemples mathématiques

Plus en détail

Rappels sur les suites - Algorithme

Rappels sur les suites - Algorithme DERNIÈRE IMPRESSION LE 14 septembre 2015 à 12:36 Rappels sur les suites - Algorithme Table des matières 1 Suite : généralités 2 1.1 Déition................................. 2 1.2 Exemples de suites............................

Plus en détail

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé Baccalauréat S ntilles-guyane 11 septembre 14 Corrigé EXERCICE 1 6 points Commun à tous les candidats Une entreprise de jouets en peluche souhaite commercialiser un nouveau produit et à cette fin, effectue

Plus en détail

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs) Modularité Extensions Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs) généricité modules de première classe : peuvent être

Plus en détail

Licence Sciences et Technologies Examen janvier 2010

Licence Sciences et Technologies Examen janvier 2010 Université de Provence Introduction à l Informatique Licence Sciences et Technologies Examen janvier 2010 Année 2009-10 Aucun document n est autorisé Les exercices peuvent être traités dans le désordre.

Plus en détail

Quelques Algorithmes simples

Quelques Algorithmes simples Quelques Algorithmes simples Irène Guessarian ig@liafa.jussieu.fr 10 janvier 2012 Je remercie Patrick Cegielski de son aide efficace pour la programmation Java ; la section sur le codage de Huffman a été

Plus en détail

Claude Delannoy. 3 e édition C++

Claude Delannoy. 3 e édition C++ Claude Delannoy 3 e édition Exercices Exercices C++ en en langage langage delc++ titre 4/07/07 15:19 Page 2 Exercices en langage C++ AUX EDITIONS EYROLLES Du même auteur C. Delannoy. Apprendre le C++.

Plus en détail

Initiation à la programmation en Python

Initiation à la programmation en Python I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de

Plus en détail

Initiation à l algorithmique

Initiation à l algorithmique Informatique S1 Initiation à l algorithmique procédures et fonctions 2. Appel d une fonction Jacques TISSEAU Ecole Nationale d Ingénieurs de Brest Technopôle Brest-Iroise CS 73862-29238 Brest cedex 3 -

Plus en détail

Travaux Dirigés n 1 : chaînes de caractères

Travaux Dirigés n 1 : chaînes de caractères UE LE315 Travaux Dirigés n 1 : chaînes de caractères Exercice 1 Ecrire une fonction int nombre_caract(char *chaîne) qui retourne la taille d une chaîne de caractères. Exercice 2 Ecrire la fonction void

Plus en détail

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation. Université du Québec à Chicoutimi Département d informatique et de mathématique Plan de cours Titre : Élément de programmation Sigle : 8inf 119 Session : Automne 2001 Professeur : Patrice Guérin Local

Plus en détail

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS Mémento Ouvrir TI-Nspire CAS. Voici la barre d outils : L insertion d une page, d une activité, d une page où l application est choisie, pourra

Plus en détail

Feuille TD n 1 Exercices d algorithmique éléments de correction

Feuille TD n 1 Exercices d algorithmique éléments de correction Master Sciences, Technologies, Santé Mention Mathématiques, spécialité Enseignement des mathématiques Algorithmique et graphes, thèmes du second degré Feuille TD n 1 Exercices d algorithmique éléments

Plus en détail

Les fichiers. Chapitre 4

Les fichiers. Chapitre 4 Chapitre 4 Les fichiers Jusqu à maintenant tous les programmes que nous avons conçus travaillaient sur des données qui étaient perdues après chaque session de travail. On peut cependant, c est bien naturel,

Plus en détail

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs Brefs rappels sur la pile et le tas (Stack / Heap) et les pointeurs (exemples en C) v1.11 - Olivier Carles 1 Pile et Tas Mémoire allouée de manière statique Mémoire Allouée Dynamiquement variables locales

Plus en détail

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Exercices - Polynômes : corrigé. Opérations sur les polynômes Opérations sur les polynômes Exercice 1 - Carré - L1/Math Sup - Si P = Q est le carré d un polynôme, alors Q est nécessairement de degré, et son coefficient dominant est égal à 1. On peut donc écrire Q(X)

Plus en détail

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files Chapitre 7 (suite) Listes particulières Pile : liste particulière T. A. D. pile insertion et suppression au sommet de la pile extraction Files queue Listes doublement chaînées insertion file : liste particulière

Plus en détail

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai. Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai. 1 Introduction On considère une grille de 20 lignes 20 colonnes. Une case de la grille peut être vide, ou contenir une et une

Plus en détail

Langage C. Patrick Corde. Patrick.Corde@idris.fr. 22 juin 2015. Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin 2015 1 / 289

Langage C. Patrick Corde. Patrick.Corde@idris.fr. 22 juin 2015. Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin 2015 1 / 289 Langage C Patrick Corde Patrick.Corde@idris.fr 22 juin 2015 Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin 2015 1 / 289 Table des matières I 1 Présentation du langage C Historique Intérêts

Plus en détail

Les algorithmes de base du graphisme

Les algorithmes de base du graphisme Les algorithmes de base du graphisme Table des matières 1 Traçage 2 1.1 Segments de droites......................... 2 1.1.1 Algorithmes simples.................... 3 1.1.2 Algorithmes de Bresenham (1965).............

Plus en détail

Université de Strasbourg UFR de Mathématique et d'informatique. L2 Informatique Semestres S3 et S4. Structures de Données et Algorithmes 1 et 2

Université de Strasbourg UFR de Mathématique et d'informatique. L2 Informatique Semestres S3 et S4. Structures de Données et Algorithmes 1 et 2 Université de Strasbourg UFR de Mathématique et d'informatique L2 Informatique Semestres S3 et S4 Structures de Données et Algorithmes 1 et 2 Fiches d exercices année 2009 2010 1 2 Constructions de base

Plus en détail

TP2 : tableaux dynamiques et listes chaînées

TP2 : tableaux dynamiques et listes chaînées Licence 2 Informatique 9 / 2014 TP2 : tableaux dynamiques et listes chaînées Contact.h 1 #include 2 #include 3 4 typedef struct contact { 5 char *nom; 6 char *num; 7 char *adresse;

Plus en détail

Programmation impérative

Programmation impérative Programmation impérative Cours 4 : Manipulation des fichiers en C Catalin Dima Organisation des fichiers Qqs caractéristiques des fichiers : Nom (+ extension). Chemin d accès absolu = suite des noms des

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Seance 2: Complétion du code de jeu. (durée max: 2h) Mot clé const et pointeurs: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Implémentez jeu_recupere_piece

Plus en détail

Solutions du chapitre 4

Solutions du chapitre 4 Solutions du chapitre 4 Structures de contrôle: première partie 4.9 Identifiez et corrigez les erreurs (il peut y en avoir plus d une par segment de code) de chacune des proposition suivantes: a) if (

Plus en détail

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... Université Paris 7 Programmation Objet Licence Bio Informatique Année 2004-2005 TD n 1 - Correction Premiers pas Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... 1. Enregistrez

Plus en détail

Algorithmes récursifs

Algorithmes récursifs Licence 1 MASS - Algorithmique et Calcul Formel S. Verel, M.-E. Voge www.i3s.unice.fr/ verel 23 mars 2007 Objectifs de la séance 3 écrire des algorithmes récursifs avec un seul test rechercher un élément

Plus en détail

Les chaînes de caractères

Les chaînes de caractères Les chaînes de caractères Dans un programme informatique, les chaînes de caractères servent à stocker les informations non numériques comme par exemple une liste de nom de personne ou des adresses. Il

Plus en détail