DS2-2011 File - Plateforme e-learning Moodle de l`INSA de Rouen
Transcription
DS2-2011 File - Plateforme e-learning Moodle de l`INSA de Rouen
GM3 Nathalie Chaignaud Algorithmes et Structures de Données Mardi 18 Janvier 2011 Durée 3H – Cours et TD NON autorisés 1. Fonction de Sudan (5 pts) ∀ x, y et n entiers positifs ou nuls : ⎧ F0 (x, y) = x + y ⎪ ⎨ Fn +1 (x,0) = x ⎪ ⎩ Fn +1 (x, y +1) = Fn (Fn +1 (x, y),Fn +1 (x, y) + y +1) Cette fonction est implémentée de la façon suivante : € Fonction sudan(n,x,y : entier) : entier Var r : entier Début Si n = 0 Alors r ← x + y Sinon Si y = 0 Alors r ← x Sinon r ← sudan(n-1,sudan(n,x,y-1){@1},sudan(n,x,y-1){@2}+y){@3} FinSi FinSi Retourner(r) Fin Simuler la pile sur l’appel sudan(1,2,2). 2. Fichier texte (5 pts) On souhaite traduire certains mots d’un texte à partir d’un lexique. Ce lexique est stocké dans un fichier texte dont chaque ligne est formatée comme suit : mot = traduction. Le texte à traduire est lui aussi fourni dans un fichier texte. On créera un nouveau fichier texte qui sera sa « traduction ». Les séparateurs de mots sont les espaces et les fins de lignes. Exemple : soit le lexique suivant si = if alors = then écrire = writeln lire = readln début = begin fin = end programme = program entier = integer Fichier texte à traduire Fichier texte créé (traduction) programme prog var a : entier début écrire(‘entrez un nombre :’) lire(a) si a > 2 alors écrire(‘a est supérieur à 2’) fin program prog var a : integer begin writeln(‘entrez un nombre :’) readln(a) if a > 2 then writeln(‘a est supérieur à 2’) end Pour faire cette traduction, le principe repose sur l’utilisation d’un tableau d’enregistrements tab-traduc qui permet de stocker le lexique en mémoire principale. Const max = 500 Type traduc = Enregistrement mot1, mot2 : chaine FinEnregistrement tab-traduc = tableau [1..max] de traduc 2.1. On veut écrire la procédure charger-tableau qui permet de remplir le tableau tab-traduc à partir du lexique (fichier texte). Expliquer en français le principe. Ecrire en pseudo-langage cette procédure. GM3 Nathalie Chaignaud 2.2. Expliquer en français le principe de la traduction qui utilise le tableau tab-traduc. Ecrire en pseudo-langage la procédure traduit-texte qui permet de créer le fichier texte de traduction à partir du fichier texte donné. On utilisera une fonction donne-traduc qui cherche la traduction d’un mot donné dans tab-traduc et qui renvoie cette traduction si elle existe, le mot vide ‘’ sinon. 3. Liste doublement chainée circulaire (3 pts) Soit une liste doublement chainée circulaire implémentée par le type listedouble décrit ci-dessous. Ecrire en pseudo-langage la procédure Supprimer (E k : entier ; E/S l : listedouble) qui supprime le ième k élément de la liste doublement chainée circulaire l. Type listedouble = ^cellule cellule = Enregistrement val : élément succ, prec : ^cellule FinEnregistrement 4. Matrices creuses (7 pts) Les matrices creuses sont des matrices ayant beaucoup d'éléments nuls. Pour les représenter en mémoire sans perdre de place, on ne stocke que les éléments non nuls dans une structure de données. Soit la structure de données matrice-creuse suivante : nbl et nbc sont respectivement le nombre de lignes et colonnes (numérotées à partir de 1) que possède au total la matrice et l pointe sur la première ligne non vide ; chaque ligne de numéro numl pointe sur la ligne non vide suivante suivl (les lignes sont classées selon les numéros de lignes croissants) et sur son premier élément non nul suivc ; les éléments d’une ligne sont chainés les uns aux autres par suiv (les éléments sont classés selon les numéros de colonnes croissants) et contiennent leur valeur val et le numéro de la colonne correspondante numc. Type cellule = Enregistrement val, numc : entier suiv : ^cellule FinEnregistrement ligne = Enregistrement numl : entier suivl : ^ligne suivc : ^cellule FinEnregistrement matrice-creuse = Enregistrement nbl, nbc : entier l : ^ligne FinEnregistrement Exemple : la matrice creuse d’entiers de gauche est représentée par la structure de données de droite. ⎛0 ⎜ ⎜0 ⎜0 ⎜ ⎜⎜0 ⎝0 € 0 10 0 0 3⎞ ⎟ 0 0 0 0 0⎟ 0 0 0 0 0⎟ ⎟ 0 7 0 0 0⎟ ⎟ 0 0 0 0 0⎠ 4.1. Ecrire la procédure créer(E m : tableau [1..20,1..20] d’entier, S mc : matrice-creuse) qui permet de créer une structure de type matrice-creuse à partir d’un tableau à 2 dimensions d’entiers. ⎛0 ⎜ ⎜0 4.2. Dessiner la structure de données si la matrice devient ⎜0 ⎜ ⎜⎜0 ⎝0 0 11 0 4 0⎞ ⎟ 0 0 10 0 0⎟ 0 0 0 0 0⎟ ⎟ 0 0 0 0 0⎟ ⎟ 0 0 0 0 0⎠ 4.3. Ecrire la procédure modifier(E l,c,v : entier, E/S mc : matrice-creuse) qui permet de changer l’élément de ligne l et de colonne c en v. €