UNIVERSITE BLAISE PASCAL JANVIER 2001
U.F.R. Sciences Exactes et Naturelles
D.E.U.G. MIAS-MASS - S1 - Examen Terminal d'Informatique
Documents et calculateurs interdits,
DUREE : 2 heures
L'emploi des instructions EXIT, HALT et
GOTO n'est pas autorisé.
EXERCICE : On donne le programme
suivant :
program PassageDeParametres;
Var X, Y : integer;
procedure P(N : integer;
var M : integer);
begin
N:=N-1; M:=M-1;
end;
begin
X:=10; Y:=10;
P(X,Y);
writeln('X=',X:1,',
Y=',Y:1);
end.
1.) Quel est le résultat
de l'exécution de ce programme ? Pourquoi ?
2.) Créer une fonction
qui fait la même chose que la procédure P, et réécrire
le programme principal en conséquence..
3.) Plus généralement,
quelle(s) différence(s) y a-t-il, en Pascal, entre une "function"
et une "procedure".
PROBLEME
Première partie :
On suppose défini un type CHAINE
par la déclaration : TYPE CHAINE = string[255] ;
et on donne la fonction suivante :
FUNCTION Agreable(S : CHAINE)
: boolean ;
Var test : boolean ;
i : integer ;
Begin
test:=true ;
for i:=1 to (length(S) div 2) do
if (S[i]<'a') or (S[i]>'z')
or (S[i]<>S[length(S)-i+1])
then test:=false
else writeln(i:3,'
, ',S[i],' : OK') ;
Agreable:=test ;
End ;
1.1.) Donner l'affichage
et le retour de cette fonction pour les chaînes S suivantes :
'aha', 'ahaha' , 'houhou' , puis 'ohe'
.
T.S.V.P.
Une chaîne
de caractères de type CHAINE sera dite agréable
si la fonction Agreable retourne true pour cette chaîne.
1.2.) Ecrire un sous-programme
CREER qui construit une chaîne
agréable, de longueur
M donnée, par concaténation de caractères.
On choisira aléatoirement parmi les lettres minuscules le plus grand
nombre possible de caractères.
N.B. : la fonction CHR permet d'obtenir
un caractère à partir de son code ASCII. Par exemple, CHR(97)
retourne 'a', CHR(122) retourne 'z'.
Deuxième partie :
Remarque : en cas de difficultés
à écrire un des sous-programmes suivants, il est conseillé
de se limiter à l'écriture de l'en-tête de ce sous-programme
avec ses paramètres, puis de passer à la question suivante.
On représente une grille de
mots croisés, sans cases noires, de N lignes (N<=Nmax) et M colonnes
(M<=Mmax) par un tableau à deux indices.
2.1.) Définir le type
correspondant à une telle grille.
On utilisera ce type pour la suite de l'exercice.
2.2.) Ecrire un sous-programme
SAISIR qui saisit N chaînes de caractères et les intègre
dans une grille, après avoir vérifié que leur longueur
est bien M.
2.3) Ecrire un sous-programme
MODIFIER qui permet de modifier le caractère d'une case de la grille.
2.4) Ecrire une procédure
AFFICHER qui affiche une grille selon le format ci-dessous.
N=2 et M=10 :
1 2 3 4 5 6 7 8 9
10
1
a b c d e f g h i
j
2
b c d e f g h i j
k
2.5) Ecrire une fonction
AGRILLABLE qui teste si toutes les lignes et colonnes d'une grille
sont agréables. On dit alors que la grille elle-même
est agréable.
2.6.) Ecrire un sous-programme
CONSTRUIRE qui construit une grille
agréable, à partir
d'un maximum de chaînes de M caractères obtenues aléatoirement
par le sous-programme CREER (défini dans la question 1.2).
2.7.) Construire, à
l'aide des sous-programmes précédents, un programme qui :
- saisit les valeurs de N et M et le contenu
d'une grille ;
- affiche cette grille ;
- vérifie si elle est agréable
;
- si ce n'est pas le cas, au choix de l'utilisateur
:
- soit fait modifier cette grille par l'utilisateur jusqu'à la rendre
agréable
- soit remplace cette grille par une grille agréable construite
aléatoirement ;
- affiche la grille obtenue ;
- reprend au début du programme
si on le souhaite.