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.
€