• Aucun résultat trouvé

Algorithmes et Structures de Données Mardi 23 Novembre 2010

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmes et Structures de Données Mardi 23 Novembre 2010"

Copied!
2
0
0

Texte intégral

(1)

GM3 Nathalie Chaignaud

Algorithmes et Structures de Données Mardi 23 Novembre 2010

Durée 2H – Cours et TD NON autorisés

1. Fonctions récursives et pile (4 pts)

Ecrire un algorithme qui vérifie qu’un texte contenant des caractères standards est syntaxiquement correct du point de vue des parenthèses. Les parenthèses sont de trois types (, [ et { et leurs parenthèses fermantes correspondantes sont respectivement ), ] et }. La correction syntaxique implique qu’à chaque parenthèse ouvrante corresponde, plus loin dans le texte, une parenthèse fermante du même type. Le texte compris entre ces deux parenthèses doit également être correct au point de vue des parenthèses (une parenthèse ouverte doit y être refermée).

Algorithme:

p.InitPile pour i de 0 à N-1

si (c[i] est une prarenthèse ouvrante) p.empiler(c[i]) sinon si (c[i] est une paranthèse fermante) { si (p.estVide() ) stop “erreur: il manque une parenthèse ouvrante”

si (p.sommet() est du même type que c[i]) p.dépiler

sinon stop “erreur: la parenthèse fermante n’est pas du bon type”

}

si (p.estVide) affiche“syntaxe parenthèses OK”

sinon affiche “il manque une parenthèse fermante

Reprenons l’exemple du vérificateur syntaxique de parenthèse et implémentons-le à l’aide d’une procédure récursive :

Données c:tableau de N caractères qui contient le texte procédure vérifieParenthèse( p: caractère) {

répéter incrémenter i

jusqu’à ce que (i > N)

∨ (c[i] est une parenthèse)

si i > N - 1 stop “erreur: il manque au moins une parenthèse fermante”

sinon

si (c[i] est une parenthèse ouvrante) vérifieParenthèse(c[i])

sinon si (c[i] n’est pas du même type que p) stop “erreur: la parenthèse fermante n’est pas du bon type”

}

3. Sudoku (6 pts)

Le Sudoku est un jeu de stratégie d'origine japonaise dont le nom veut dire "Un seul chiffre doit être inscrit". Il est composé d’une grille comportant n2 lignes et n2 colonnes et n2 blocs (en général, n=3). Une grille est valide ssi :

• chaque colonne de la grille contient TOUS les nombres de 1 à n2

• chaque ligne de la grille contient TOUS les nombres de 1 à n2

• chacun des n2 blocs de n*n contient également TOUS les nombres de 1 à n2

(2)

GM3 Nathalie Chaignaud

Exemple pour n=3

Pour vérifier la validité d’une grille, il faut tenir à jour un tableau de booléens de type tab-bool permettant de savoir si une valeur (comprise entre 1 et n2) est présente dans la ligne, colonne ou bloc.

Const n = 3

Type tab-bool = tableau[1.. n*n] de booléens

3.1. Ecrire en pseudo-langage la fonction vérifie-ligne(l:entier):booléen. 3.2. Ecrire en pseudo-langage la fonction vérifie-colonne(c:entier):booléen. 3.3. Ecrire en pseudo-langage la fonction vérifie-bloc(i,j:entier):booléen. 3.4. Ecrire en pseudo-langage la fonction vérifie-sudoku():booléen.

4. Fichier texte (6 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 sauvegardé dans un fichier texte. On créera un nouveau fichier texte qui sera la « traduction » du premier.

Exemple :

Soit le fichier de mots suivant :

si = if alors = then écrire = writeln lire = readln début = begin fin = end

programme = program entier = integer

Fichier texte donné Fichier texte créé (traduction)

programme prog var a : entier début

écrire(‘entrez un entier :’) lire(a)

si a > 2

alors écrire(‘a est supérieur à 2’) fin

program prog var a : integer begin

writeln(‘entrez un entier :’) readln(a)

if a > 2

then writeln(‘a est supérieur à 2’) end

4.1. Quelle structure de donnée doit-on utiliser pour stocker le fichier de mots en mémoire principale ? Décrire son type.

4.2. On veut écrire la procédure charger-tableau qui permet de stocker le fichier de mots en mémoire principale. Expliquer en français le principe. Ecrire en pseudo-langage cette procédure

.

4.3. Expliquer en français le principe de la traduction. Ecrire en pseudo-langage la procédure traduit-texte qui permet de créer le fichier texte de traduction à partir du fichier texte donné.

5 3 4 | 6 7 8 | 9 1 2 6 7 2 | 1 9 5 | 3 4 8 1 9 8 | 3 4 2 | 5 6 7 8 5 9 | 7 6 1 | 4 2 3 4 2 6 | 8 5 3 | 7 9 1 7 1 3 | 9 2 4 | 8 5 6 9 6 1 | 5 3 7 | 2 8 4 2 8 7 | 4 1 9 | 6 3 5 3 4 5 | 2 8 6 | 1 7 9

Références

Documents relatifs

Une solution est obtenue par dissolution d’un soluté, ionique ou moléculaire, dans un solvant. Lorsque le solvant est l’eau, la solution obtenue est une solution aqueuse. 172)..

Puisque le signe de la dérivée de f permet de connaitre le sens de variations de la fonction f sur les intervalles, une première partie de l'étude d'une fonction f consiste à

b) Interpréter géométriquement les trois propriétés établies dans la question précédente.. Déterminer les points invariants

[r]

Lorsque q > 2, on pourra commencer par supposer que 2 est un carré modulo q, puis que 3 est un carré

Lorsque q > 2, on pourra commencer par supposer que 2 est un carré modulo q, puis que 3 est un carré

En effet, d’une part, x(t) = 1 est une barri` ere inf` erieure et donc la solution ne peut pas la croiser en temps n´ egatif... Figure 4:

Dans ce cas, on dit aussi que B est un multiple