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 :
€
F
0( x, y) = x + y F
n+1(x,0) = x
F
n+1(x, y +1) = F
n(F
n+1(x, y),F
n+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
kième é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 10 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 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.
4.2. Dessiner la structure de données si la matrice devient
€
0 0 11 0 4 0 0 0 0 10 0 0 0 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.