• Aucun résultat trouvé

Algorithmes et Structures de Données Mardi 18 Janvier 2011

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmes et Structures de Données Mardi 18 Janvier 2011"

Copied!
2
0
0

Texte intégral

(1)

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.

(2)

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.

Références

Documents relatifs

On veut écrire une procédure qui affiche la médiane des nombres du fichier (qu’on définit comme la plus petite valeur m du fichier telle que le nombre de valeurs

Ecrire en pseudo-langage une procédure qui, étant données n chaînes de longueur lg et le recouvrement k, donne l’ordre dans lequel il faut placer les n sous-chaînes pour

Ecrire la procédure Carré(E xa,ya,d,f : entier) où xa et ya sont les coordonnées du sommet en bas à gauche du grand carré, d est la longueur de son côté et f la longueur

Expliquer en français la méthode (vous appellerez la fonction javanais-inverse pour faire la traduction en français d’une chaîne écrite en javanais). Écrire en

En utilisant un tableau de notes pour faire les calculs, écrivez un programme qui calcule ces valeurs (vous pouvez écrire plusieurs fonctions ou procédures comme bon vous

Nous souhaitons calculer la fréquence de chacune des notes (entières sur vingt) contenues dans un fichier texte (ce fichier contient une note par ligne). Expliquer

Expliquer en français comment effectuer la traduction d’un message (message et message codé sont enregistrés dans 2 fichiers texte) de façon optimale. La clé et la table sont

Nous disposons d’un fichier texte contenant des notes (séparées par des espaces) : les notes sont disposées en colonne par matière et en ligne par élève.. Nous souhaitons