You are on page 1of 27

Printemps 2016

NF01
Travaux dirigs

TD N1 : analyse de problmes, diagrammes de Conway


1. Situation et action
Nous allons illustrer les concepts dtat et daction laide des 2 exercices classiques suivants. Gardons
lesprit que ce nest pas la solution du problme qui nous importe, mais la dmarche trs gnrale qui mne
cette solution et qui sapparente une tude de texte. Cette dmarche sarticule comme suit :

Dfinir les informations pertinentes et numrer les tats distincts. Rechercher dans lnonc les
hypothses simplificatrices. Reprer les tats initiaux et finaux.
Dfinir les actions permettant de passer dune situation une autre.
Rechercher un chemin menant dun tat initial un tat final.

A). La grande traverse (20 mn) : Sur la rive gauche dune rivire un Homme, un Loup, une Chvre et une
Salade attendent pour traverser. A leurs pieds est amarre une Barque deux places. (2) LHomme tant
seul savoir ramer sera videmment de tous les voyages. (3) Lobjectif atteindre est, bien sr, que ces
quatre personnages se retrouvent sur la rive droite. (4) Cependant, lorsque lHomme nest pas l, les
apptits grossiers se dchanent et le Loup a tendance manger la Chvre, laquelle se laisserait facilement
aller dguster la Salade. Comment faire ?
B) La maison hante (20 mn) :
Une maison est hante par deux bruits doutre-tombe, un Rire sardonique et un Chant grivois qui la rendent
inhabitable. Lorsque lun ou lautre est seul se faire entendre, cest dj difficile supporter, mais lorsque les deux
retentissent en mme temps, cest insupportable. Il ya parfois parfois un silence complet.
Les 2 phnomnes obissent des lois obscures, mais infaillibles, lies aux passions du propritaire pour lOrgue et
lEncens.
Minuit est la seule heure o ces bruits changent (ventuellement) dtat. Celui quon entend ce moment dure 24
heures et celui qui est silencieux le reste pendant la mme dure.
Le Chant conserve le mme tat (prsent ou absent), sauf si, la veille, le propritaire a jou de lOrgue sans que le Rire
ne se fasse entendre, auquel cas le Chant prend ltat oppos.
Quant au Rire, si lEncens brlait, il aura aujourdhui le mme tat qu hier le Chant. Si lEncens ne brlait pas, le
Rire fera le contraire de ce que faisait hier le Chant.
Comment obtenir le silence dont le propritaire a besoin, et comment le conserver.
N.B. : Voil prs dune semaine quil entend la fois le Rire et le Chant.

2. Diagrammes de Conway
2.1 Soit le langage constitu des mots suivants : b, ab, aab, aaab, a...ab. Donner une
formule pour dfinir ce langage. Ecrire le diagramme de Conway correspondant.
2.2 Soit le diagramme suivant :

Dfinir le langage correspondant ce diagramme par une formule. Donner des exemples de
phrases acceptes et de phrases refuses par ce langage.

2.3 Dfinir le langage exprim par le diagramme suivant :

Donner des exemples de phrases acceptes par ce langage.

2.4 Dfinir le langage exprim par le diagramme suivant :

Donner des exemples de phrases acceptes par ce langage ?


2.5 Dessiner les diagrammes de CONWAY qui permettent de vrifier la grammaire suivante : aa+,
ba+, ab+, bb+, aa-, ab-, ba-, bb-, aaa++, aba+-, bab-Il s'agit donc d'une suite de signes a ou b, suivie d'une suite de signes + ou -.
On remarquera cependant qu'il y a toujours un signe de type a ou b de plus que de signe '+' ou '-'.

TD N2 : algorithmes
1. crire un algorithme qui affiche le minimum de deux nombres entrs au clavier. tendre
cet algorithme au cas de trois nombres.
2 crire un algorithme qui calcule la surface et le volume d'une sphre partir du rayon qui
sera lu au clavier.
3 crire un algorithme qui calcule la rsistance quivalente 3 rsistances montes en
parallle ou en srie. Les donnes fournies en entre seront le type de montage et la valeur
des trois rsistances. Le programme devra afficher de manire claire la valeur de la
rsistante quivalente.
4. crire une squence d'instructions permettant de permuter la valeur de deux variables x et y.
5. crire un algorithme qui affiche la valeur absolue d'un nombre entr au clavier.
6. Dterminer un algorithme qui calcule l'heure d'arrive d'un train partir de l'heure de
dpart et de la dure du trajet. Chaque donne d'entre sera fournie sous forme de trois
nombres prcisant les heures, minutes et secondes. Le rsultat sera aussi indiqu sous cette
mme forme.
7. crire un algorithme qui lit un nombre entr au clavier par lutilisateur et qui dtermine si
ce nombre est ou non compris entre 10 (inclus) et 20 (inclus).

TD N3 : expressions, structures conditionnelles


1. Montrer en utilisant la dfinition syntaxique d'une expression, comment se dcomposent
les expressions suivantes :
(a+b)/c
a*sin (x-y)
a+b-c-d/e
a = b and c
2. Calcul de remise :
Ecrire un programme qui dtermine un montant net partir dun montant brut (entr
par lutilisateur) en appliquant une remise de :

5% si le montant brut est compris entre 200 et 500


10% si le montant brut est suprieur 500
3. On trouve dans un programme Pascal linstruction suivante dans laquelle les variables a, b
et c sont boolennes et la variable x est entire :
if

then if not (b) then


if not (a) then x :=0 else if c
else
x :=0
else if not (b) then x :=1
else
if not (c) then x :=0 else
else if c then
x :=1 else x :=0 ;

then

x :=1

x :=1

Rcrire cette instruction en respectant la prsentation conseille en cours.


Essayer de simplifier cette instruction.
4. Ecrire un algorithme qui permet de dterminer si une anne est bissextile. On rappelle que :

Les annes bissextiles sont divisibles par 4


Toutefois, les annes divisibles par 100 ne sont pas bissextiles
A l'exception des annes divisibles par 400 qui, elles, le sont.

On cherchera rsumer ces conditions en une seule expression boolenne.


5. Tarif dentre dans un muse (Extrait du mdian P12)
Ecrire un programme permettant au guichetier dun muse de calculer le tarif dentre dans le muse.
Le programme demandera au guichetier le prix dentre de base (selon lexposition visite), lge du
visiteur et si ce visiteur possde une carte dtudiant ou de chmeur. Ensuite, selon ces donnes, le
programme pourra calculer une rduction ventuelle. Les rductions possibles seront calcules de la
faon suivante :

si le visiteur a moins de 18 ans, lentre est gratuite ;


si le visiteur a entre 18 et 25 ans, et sil est tudiant, il a une rduction de 50%, mais sil nest pas
tudiant la rduction nest que de 30%,
si le visiteur a plus de 25 ans, mais est quand mme tudiant, alors il a une rduction de 30% ;
si le visiteur a plus de 60 ans, il paie demi-tarif ;
si le visiteur est chmeur, la visite est gratuite.

Attention, il nest pas possible de cumuler les rductions.

TD N4 : structures itratives
1.

crire un algorithme qui lit une srie de nombres au clavier et qui s'arrte la premire
valeur ngative.

2.

crire un algorithme qui calcule le produit d'une srie de nombres lus au clavier. On
supposera que l'on entrera la valeur 0 pour indiquer la fin de la srie, cette valeur n'tant
pas prise en compte.

3.

crire un algorithme qui lit 10 nombres et indique la valeur du plus petit.

4.

crire un algorithme qui lit 10 nombres et indique le nombre de valeurs ngatives

5.

crire un algorithme, puis un programme, qui affiche les 100 premiers termes de la suite
Un dfinie par : U0 = 2 et Un+1 = Un + 7.

6.

crire un algorithme qui affiche lcran la pyramide suivante (nombre de lignes


variable) :
1
1 21
12321
.
.
.
1234567 8 9 87654321

N.B. : on cherchera crire galement les programmes Pascal correspondant.

10

TD N5 : tableaux
1. Ecrire un algorithme, puis un programme Pascal, qui remplit les 100 lments d'un tableau
avec la valeur du carr de chaque indice. Par exemple, le premier lment aura comme
valeur 1, le deuxime 4, et le dixime 100... Le programme devra ensuite afficher ce
tableau l'cran.
2. Ecrire un algorithme puis un programme qui lit 12 nombres entrs au clavier, en fait la
moyenne et affiche les nombres suprieurs cette moyenne.
3. On peut reprsenter un vecteur de l'espace vectoriel Rn l'aide d'un tableau de n rels.
a) Ecrire un algorithme qui lit deux vecteurs de R10, calcule leur produit scalaire et affiche les deux
vecteurs et leur produit scalaire.
b) crire un algorithme qui lit deux vecteurs de R7, calcule leur somme et affiche cette somme.

4.

La moyenne olympique d'un ensemble de nombres est obtenue en faisant la moyenne des
nombres qui restent une fois supprims le plus grand et le plus petit.
Ecrire un algorithme, puis un programme, qui lit une srie de nombres (on supposera que
tous les nombres sont diffrents) et affiche leur moyenne olympique.

5. On considre des matrices carres de nombres entiers de type :


MatriceCarree = array[1 .. NMAX, 1 .. NMAX] of integer ; { NMAX tant une constante }
Ecrire un programme permettant de :
a) Calculer la moyenne des valeurs dune matrice de ce type
b) Vrifier si une matrice carre est magique (la somme des valeurs sur chaque ligne, sur
chaque colonne et sur les deux diagonales est la mme).
Exemple de matrice magique :
14
15
7

5
12
19

17
9
10

Remarque : dans un premier temps, on ncrira pas la partie du programme


correspondant la saisie des valeurs de la matrice par lutilisateur.

11

12

TD N6 : structures itratives

(Annales de mdians)

Examen n1 : Soit le programme Pascal suivant (qui est trs mal prsent !) :
Program inconnu;
var i,j : integer; a,d,c,b,m :longint;
begin read(i,j);m:=0; a:=1;
for b:=1 to j do
a:=a*i; d:=1;
writeln('tape 1 : valeur de a et de d :',a:6,d:6);
for c:=1 to a do
d:=d*c; writeln('tape 2 : valeur de a et de d :', a:6,d:6);
d:=1;a:=0;for b:=1 to j do d:=d*b;
writeln('tape 3 : valeur de a et de d :', a:6,d:6);
a:=1; for b:=1 to d
do a:=a*i; writeln('tape 4 : valeur de a et de d :', a:6,d:6);
end.

Q1 : Remplir les tableaux ci-dessous, afin d'indiquer les valeurs des variables diffrentes tapes du programme,
avec les donnes proposes en tte de tableau.
Q2 : Rcrire ce programme en donnant des noms didentificateurs signifiant quelque chose la lecture du
programme, en le prsentant correctement et en y ajoutant des commentaires.
Q3 : Identifier les parties communes du programme et essayer de dcrire ce qu'elles font.
Q4 : A quoi correspond chaque writeln lors des 4 tapes ? Quel est le calcul prsent ?
Q3 : Que fait ce programme dans son ensemble ? A quoi correspond-il ? Expliquer.
i =2 et j=3

tape 1
tape 2
tape 3
tape 4
i =3 et j=2
tape 1
tape 2
tape 3
tape 4
Examen n2 : Ecrire un algorithme qui demande une valeur V (relle) comprise entre 1 et 2, et qui calcule le plus petit N
(entier) tel que: 1 + 1/2 + 1/3 + ... + 1/N > V
Examen n3: Que fait le programme suivant ? 10 mn
program abc;
var a, b, c, temp : integer;
begin write('a='); readln(a);
write('b='); readln(b); write('c=');
if b > a then begin temp := a;
a := b; b := temp;end;
if c > a then begin
temp := a; a := c; c := temp;end;
if c > b then begin
temp := b; b := c;
c := temp;end;
writeln(a, b, c); end.

readln(c);

Donner un exemple de donnes dentre et de sortie.

13

Examen n4

Dans chacun des cas suivants, crire un programme qui affiche anne par anne lvolution
dun capital :
a) pour les 10 prochaines annes
b) jusqu ce que le capital de dpart ait doubl
Justifier chaque fois votre choix de boucle.
Remarques :
- Lutilisateur devra entrer le capital initial C0 et le taux de placement annuel t
(0 < t < 1).
- Si lanne n le capital vaut C, lanne n+1 le capital vaudra :
C * (1+t).
Examen n5

On souhaite simuler le fonctionnement dune borne interactive lentre dun cinma.


Cette borne doit permettre un client de connatre le tarif exact du film quil veut voir.
Les rgles sont les suivantes :
- Le tarif normal est de 5 .
- Dans les salles 1 et 2, le tarif est major de 10 % pour tous les clients.
- Dans la salle 3, si le client est :
! un tudiant, il bnficie dune rduction de 10 %
! un enfant de moins de 12 ans, il bnficie dune rduction de 50%
! un militaire, il bnficie dune rduction de 5%
Pour tous les autres clients, la place est au tarif normal.
1) Indiquer les donnes que lutilisateur devra entrer.
2) crire le programme permettant de dterminer le tarif en fonction de ces donnes.

14

TD N7 : procdures et fonctions
1. crire une procdure trois paramtres entiers qui fait la somme des deux premiers et
range cette valeur dans le troisime.
2. Transformer la procdure prcdente en fonction. Le troisime paramtre devient le retour
de la fonction.
3. crire une procdure ordre qui range par ordre croissant les valeurs de ses trois paramtres
(aprs l'appel ordre(a,b,c), les valeurs des 3 variables doivent vrifier a b c ).
4. Quelle sera la sortie du programme suivant:
program pl;
var a,b,c : integer;
procedure spl (x,y:integer);
var z : integer;
begin
z := x;
x := y;
y := z;
end;
begin
a := 10;
b := 20;
c := 30;
spl (a,b);
writeln (a,b,c)
end.

5. Donner et justifier brivement la sortie du programme suivant :


program p2;
var
x : integer;
procedure a(y :integer) ;
begin
x := x+1 ; y := y+2 ;
end ;
procedure b(var y : integer) ;
var x : integer ;
begin
x := x+3 ; y := y+4 ;
end ;
begin
x := 0 ; writeln(x) ;
a(x) ; writeln(x) ;
b(x) ; writeln(x) ;
end.

15

6. Donner et justifier brivement la sortie du programme suivant. Commenter le rsultat. Quel


nom porte leffet constat ?
program p2 ;
var i, count : integer ;
procedure incrementer (var x : integer) ;
begin
x := x+1 ; count := count+1 ;
end ;
begin
i :=10 ; count :=0 ;
incrementer(i) ; writeln(i,count) ;
incrementer(count) ; writeln(count) ;
end.

16

TD N8 : procdures et fonctions (suite)


1. crire une fonction qui renvoie la position de la premire occurrence de la valeur 12 dans
un tableau de 10 entiers entr en paramtre. Le programme affichera 0 comme position si
ce nombre 12 nexiste pas. Ecrire un mme exemple dutilisation. Mme question si on
recherche la dernire occurrence de 12.
2. Recherche du maximum :
2.1.

2.2.

Ecrire une fonction qui renvoie la valeur maximum dun tableau dentiers. La
dimension maximum de ce tableau sera 1000, mais la dimension relle ce tableau,
infrieure ou gale 1000, sera transmise en paramtre. On donnera un exemple
dutilisation de cette fonction.
Mme question, mais cette fois la fonction devra renvoyer lindice de la valeur
maximale.

3. crire une procdure permettant de lire des caractres entrs au clavier, et de les
transformer en des nombres entiers (1 pour A, 2 pour B). La saisie se termine lorsque
lutilisateur frappe la lettre $.
4. crire une fonction pgcd qui donne le PGCD de deux nombres x et y.

17

18

TD N9 : enregistrements
1. Dfinir le type date permettant de reprsenter une date comportant le numro du jour et le
numro du mois (14 7, 25 12, 31 12, ...).
Ecrire la procdure jour_du _lendemain deux paramtres de type date qui
dtermine la date du lendemain dun jour donn. On supposera que lanne nest pas
bissextile.
Ecrire un exemple dutilisation de cette procdure.

2. On dispose dun tableau denregistrements ayant la structure suivante : nom, prnom, ge.
Ecrire les procdures et fonctions suivantes :
2.1. Stockage de lensemble des tudiants dans le tableau
2.2. Recherche dun tudiant
2.3. Ajout dun tudiant
2.4. Suppression dun tudiant
2.5. Modification dun tudiant

19

20

TD N10 : fichiers
1. Ecrire un programme qui crit dans un fichier, dont chaque article est un entier, une srie
de nombres taps au clavier.
2. Ecrire un programme qui imprime la moyenne des nombres contenus dans le fichier
prcdent.
3. On dispose dun fichier dont chaque article a la structure suivante :
type eleve

record
nom : string (20) ;
prenom : string (20) ;
math : real ;
physique : real ;
franais : real
end ;

Ecrire un programme qui exploite ce fichier pour afficher le tableau suivant


Nom

Math

Physique

Franais

Moyenne

Dupont
Durand
...

12.50
6.50

10.00
9.50

8.50
8.00

10.33
8.00

Moyenne

9.32

11.39

10.48

10.40

On supposera que le nombre dlves est infrieur ou gal 100.


4. Un supermarch dsire crer un fichier contenant la liste des prix de tous les articles
disponibles en rayon.
Ecrire un programme qui crit dans un fichier la liste des articles avec leur prix (entrs au
clavier). On dsire ensuite relire ce fichier et calculer le prix moyen des articles en rayon.
On aimerait, pour conclure, rechercher le nombre d'articles pour lesquels le prix est
suprieur un tarif entr par l'utilisateur. Par exemple, on voudrait savoir combien
d'articles sont vendus plus de 1 000 euros.

21

22

TD N 11 : fichiers texte

1. Ecrire un algorithme permettant de transformer un fichier de texte en remplaant toutes les


lettres minuscules par des majuscules et en supprimant tous les accents. Le rsultat doit
tre un nouveau fichier de texte.
2. Ecrire un programme qui lit un texte contenu dans un fichier texte et retourne la frquence
relative de chacune des 26 lettres de lalphabet. La frquence relative dune lettre est le
nombre doccurrence de cette lettre, quelle soit minuscule ou majuscule, divise par le
nombre de lettres contenues dans le texte.
3. Ecrire un programme qui lit un texte contenu dans un fichier texte et retourne le nombre de
mot contenus dans ce texte. On considre que les sparateurs de mots peuvent tre les
caractres espaces , virgule , point et passage la ligne et que plusieurs
sparateurs peuvent se suivre.

23

24

TD N 12 : rcursivit

1.

Trouver une dfinition rcursive du PGCD de deux entiers et crire lalgorithme puis la
procdure correspondante.

2.

Trouver un algorithme rcursif permettant dinverser une chane de caractres (NF01


devient 10FN, bonjour devient ruojnob).

3.

En dduire une fonction boolenne permettant dindiquer si un mot est un palindrome


(identique lendroit et lenvers, par exemple : noyon ou rever).

4.

Ecrire une version rcursive de lalgorithme de recherche dichotomique. On rappelle


que la recherche dichotomique est une recherche par approximations successives dans
une liste ordonne (trie par ordre croissant de ses valeurs). On compare l'lment
recherch celui situ en milieu de liste. S'il est plus grand, on recommence avec la
moiti suprieure de la liste, sinon avec la moiti infrieure de la liste, jusqu'
convergence vers l'lment recherch (galit = succs), ou jusqu' ce qu'il n'y ait plus
aucun lment comparer (liste vide). Dans ce cas, l'lment recherch tait absent de la
liste. Ecrire un programme dichotomie permettant d'effectuer une recherche
dichotomique dans un tableau de 100 entiers.

25

26

TD N 13 : tri, fusion de fichiers


1. Tri par slection. On dispose de n valeurs numriques ranges dans un tableau. Il sagit
de ranger par ordre croissant ces n valeurs, soit dans le mme tableau, soit dans un autre
tableau. Par exemple, si on dispose au dpart des 6 valeurs 7, 3, 1, 2, 5, 4, ils devront tre
rangs la fin dans lordre 1, 2, 3, 4, 5, 7. Voici un algorithme simple, appel tri par
slection, ralisant ce tri :
On cherche le plus petit nombre et on le permute avec le nombre plac en premire
position, on cherche le plus petit des nombres restants et on le permute avec le nombre
plac en seconde position,... Avec notre exemple cela donnerait :
7
1
1
1
1
1

3
3
2
2
2
2

1
7
7
3
3
3

2
2
3
7
4
4

5
5
5
5
5
5

4
4
4
4
7
7

Lalgorithme demand aura la structure suivante : lecture dun tableau dentiers, tri
de ce tableau et affichage des nombres ainsi tris.

2. Fusion de deux fichiers squentiels


2.1. Dfinir le type personnel comme une structure denregistrement contenant le nom,
lge, le sexe et la catgorie socio-professionnelle qui peut-tre ouvrier, technicien,
cadre, commerant et profession librale.
2.2. Ecrire un programme qui partir de deux fichiers squentiels constitus
denregistrements de type personnel qui sont dj ordonns suivant les noms cre un
troisime fichier de mme type contenant lensemble ordonn des employs prsents
dans les deux premiers fichiers.
On supposera que chaque fichier se termine par un enregistrement supplmentaire
caractris par un nom de longueur nulle.

27

You might also like