0% ont trouvé ce document utile (0 vote)
45 vues4 pages

Examen Programmation Avancee Et Structures de Donnees

Transféré par

El Varough Haiballa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
45 vues4 pages

Examen Programmation Avancee Et Structures de Donnees

Transféré par

El Varough Haiballa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 4
Institut Galilée - Université Paris 18 Programmation Avancée - Structures de données Ingénieur Info 1ére année 2017 - 2018 Examen Programmation Avancée et Structures de données Durée 2h00 - Aucun document autorisé, Téléphones portables éteints 1 Questions théoriques (20mn) 1. Voici un extrait de programme permettant de parcourir et d’afficher. de la dernigre a la premiére, toutes les eases d'un tableau d'entiers tab de taille n. Est-ce que cette méthode fonctionne? +s wineaat 1; 5 1505 1) + printe(d\e", tablil); ey 2, Quelles doivent étre les caractéristiques d'une bonne fonction de hachage servant & ranger des éléments dans une table de hachage? 3. Dans la structure Arraylist vue en conrs, on posséde trois éléments : un pointeur sur des maillons ‘occupé, un pointeur sur des maillons libres, et un troisiéme pointeur. Expliquez, A quoi sert ce ‘roisiéme pointeur - en particulier, est-il absolument nécessaire pour pouvoir utiliser une Arraylist 4, Proposez un programme permettant dVafficher tous les nomibres réels de type double 2 Détecter des erreurs de parenthéses (40mn) Dans un code source en C, les symboles "ouvrants" (la parenthse ouvrante '(, Vaccolade ouvrante {ef le crochet ouvrant '') sont toujours snivis, plus Toin dans le fichier, du symbole eorrespondant “formant” (respectivement la parenthése fermante ‘), Taecolade fermante "}’ ou le erochet fermant Si ce n'est pas le cas, alors le fichier posséce une erreur de syntaxe. Par exemple, parmi ces trois expressions, seule la derniére est correctement "équilibrée", cet & dire «ne les symboles ouvrants sont suivis, Ta bonne position, «un symbole fermant correspondant 1x = tabla) — 6e(ary; tabl2 + (xy) +8; tbls * Gey] +75 La premiére expression ne possdde pas de crochet fermant correspondant au erochet ouvrant, et la parenthiése fermante est placé avant la parenthése ouvrante. La seconde expression posséde bien un crochet, fermant correspondant au crochet ouvrant, mais il est placé avant la parenthése fermante; cette derniére anrait dn étze placé avant Te crochet afin que Yexprestion soit correcte ‘Afin d’6valuer si ma fichier source en C est correctement "équilibré", nous suivrous la méthode décrite dans Falgorithme en page suivante, On emmpile, dans une pile, es caractéres onvrant lus dans le texte. Lors de la rencontre d'un symbole fermant, on vérifie que ce dernier conespond aa dernier symbole ouvrant Iu (et qui n'a pas encore &46 associé & un symbole fermant) en depilant la pile ‘Sia la fin de la lecture du fichier, la pile n'est pas vide, alors cela sigufie que certains syimboles ouyrant n'out pas été associés avec leur syinbole fermant correspondant : on affiche le fait que le fichier n'est pas équilibré. De plus, si lors du dépilage on trouve un caractére ouvrant qui ne correspond pas au caractére ferinant lu, alors cela signifie aussi que le fier west pas équilibyé. Cette approche ne fonetionne pas si des symboles ouvrants on fermants sont présents dans des com- ‘mentaites on dans des chaines de caractéres. On ignorera.ce type spéelfcité, et on estimera que chaque symbole ouvraut dens notze fichier participe & une expression, et doit done étre fer 1 Pe pile vide 2 tant que il existe un caractére © & lire dans le fiei entrée faire sice (CL) alors LL Eipiler dans P sie alors Si P cst vide alors ‘Afcher message : Le fichier source n'est pas correctement équilibré FIN Dépiler d de P si d n'est pas symbole fermant correspondant & ¢ alors ‘Afficher message : Le fichier source n'est pas correctement équilibré FIN si P nest pas vide alors Aificher messuge : Le fichier source n’est pas correetement équilibré FIN Questions 1, Proposez une structure mailfon ot pile permettant de stocker les symboles ouvrants lus dans Ie texte. 2, Proposez une fonction creerPile et crverMaillon permettant respectivement de créer tune now velle pile vide et de créer un nouveau maillon. Voici les entetes des ces dewx fonctions pier craerPileQ; maillont creerMailion(char ¢); 3. Proposes une fouction push permettant d’empller un élément dans la pil void push(pile *p, char c); 4. Proposez une fonction pop permettant de dépiler un élément de la pile 1 char pop(pile +p); Attention a la gestion de la mémoire. 5. Proposez.une fonction frvePile pemettant de libérer la pile de la mémoire \ void freePile(pite *p); 6. Enfin, implémentez Valgorithime permettant d’évaluer st un fichier C (qui sera toujours uommé prog.c) est correctetnent équilibré. Afin de vous alder, voiet un morceau de code permettant de lire ot aificher chagme earactene du fichier prag.c "2b"; FILE =f = fopen( "prog. 2 char cj « While(! feof(#)) of © fecanf(t, "Le", ke); + fprintf(stdout, "he", 0); +} felose(t); 7. Comment feriez-vous afin de traiter, avec la meme méthode, les chevrons ("<' et '>")? Ex: pliquez simplement quelle partie de votre code nécessiterait une modification, vous n’avez pas besoin de modifier votre programme précédent. 3. Une file de priorité pour un microprocesseur (1h) ‘Dans un ordinateur, les processus (les programmes) ne sont pas exécutés en paralléle, mais un petit peu, chacun leur tour. Cette méthode, dite du "tourniquet", permet de doner I'lusion a l'utilisateur (que tous les processus fonctionnent en parallle Chaque processus qui doit sexécuter sur Vordinateur posséde un nivean de priorité qui, pour cet exercice, ra de 0 & 255 : Ie niveau de priorité 0 sera le plus élevé, tandis que le niveau 255 sera le moins prioritair. ‘Un ordonnanceur est un systéme permettant de décider quel processus doit s"exéeuter & quel moment. Dans cet exercice, Yordonnancour choisira toujours d’exécuter le processus de priorité la plus élevée. Si plusieurs processus possédent Ia priorité la plus élevée, il choisira celui qui est en attente d'exécution ‘depuis le plus longtemps. ‘Nous allons tenter d'implémenter um tel systéme avec deux différentes structures de données : une liste tide ot un tablean de lstes. 3.1 Implémentation avec une liste triée Nous allons implémenter Yordonnanceur avec une simple liste triée, qui sera une pile ou une file Questions 1. On rappelle que "Si plusieurs processus possédent la priovité la plus élewée, Vorlonnanceur choisira celui qui est en attente d’eréoution depuis le plus longtemps". Dans ce cas, utiliserez ‘une file on une pile pour représeuter 'ordoununceur’? Justifiez volze répon 2. Un processus est représenté par une chaine de caractéres (qui est la commande a exécuter, et ‘qui ne fera jamais plus de 1000 caractéres), et une priorité qui sera une valeur entire entre D ct 255. Proposez une structure maillon et fle_triee qui permettra de stocker les processus en, attente d’exécution, 3. Proposes une fonction creerFile et une fonction ereerMaillon permettant de exter respective- ment une nowvelle file triée vide et un nouveat maillon. Voici les entétes de ces deus fonctions file_trieet creerFile(); maillont creerMaillon(char «commande, uint@_t priorite); 4, Proposez une fonction afouterProcessus permettant d'ajouter a la fle trige um processus. A chaque instant, votre file devra rester triée par ordre de priorité, c'est a dire quien téte de fle devront se trouver tous les processus de priorité 0, puis viendront tous les processus de priorité 1, puls viendront tous les processus de priorté 2, ete Quand on ajoute un processus de priorité A la Ble il devea étre ajonté A la suite de tons les processus de priorité n, et avant les processus de priorité n + 1 5. Proposes une fonction prendreProcessus, permettant de récupérer. de la file trie, In commande associée au processus de priorité la plus élevée qui attendait depuis le plus longtemps. Votre Tonetion devra aussi retirer le processus de la file 6. Proposer une fonction principale qui créera tne nouvelle file triée, y empilera cing processus ce priorité 1, 2, 1,4 et 2 (dans cet ordre, vous étes libres du choix de Ia commande & y associer), puis retire et affche Ia commancle associée aux deux processus les plus prioritaires, 3.2 Implémentation avec un tableau Afin de slaffranchir de la phase de tri, nous pouvons anssi eréer 256 files, une pour chaque niveau de priorité possible. Chacune des files collectera les processus dune meme priorité : tous les processus de priorité 0 seront stockés dans la premiére file, tons les processus de priorité 1 seront stockés dans Ia seconde file, ete. On va done exter un tablean de 256 files pour stocker nos processus, Questions L Votre structure file_triee pourra tonjours étre utilisée pour représenter les files, mais votre structure maillon pourrait étre allégée : est-ce que vous avez toujours besoin de stocker, pour chaque processus, sa priorité? Justifer votre réponse. Proposez une structure tab_file qui servita & stocker le tablews de 256 files. Proposes une fonction creerTabFile et une fonction erverMaillon permettant de cxéer respec- tivement un nouveau tableau de files et un nonveau maillon. Voici les entetes de ces deux fonctions ‘tab files creerTabrile(); maillon* creerMailion(char *comande) ; Vous n'avez pas besoin de eréer une nowvelle fonction ereerFile, car celle de la partie précédente convient tout a fait ici. Proposer une fonction ajouterProcessus permettant d'ajouter an tableau de files un processus, Votre fonction devra chercher Ia file correspondant & la priorité du processus, et y ajonter le processus en queue (par exemple, si le processus posséde une priorité 7, on le rajoutera a la ‘queue de la buitiéme file du tableau), Proposez une fonction prendreProcessus, permettant de récupérer la commande associée au. processus de priorité la plus élewée qui attendait depuis le plus longtemps. Votre fonction devra parcourir les files du tableau par ordre de priorité, et retirer Ie processus cen téte de la premiére file non vide rencontrée. Comment modifier la fonction principale réalisée dans la partie précédente afin de Vadapter & votze nouvelle structure?”

Vous aimerez peut-être aussi