Vous êtes sur la page 1sur 27

Printemps 2013

NF01 Travaux dirigs

TD N1 : numration, diagrammes de Conway


1. Changements de base
Convertir : en dcimal les nombres 1011012 , 5637678 , 2 A56 E16 , en binaire les nombres 17310,176578 ,1 AF3C16 , en hexadcimal les nombres 36410 ,110111002 , 764728 , en octal les nombres 356710 ,3 AE516 ,10101112. 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 :
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 ; if a 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. 2. crire un algorithme qui lit une srie de nombres au clavier et qui s'arrte la premire valeur ngative. 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. crire un algorithme qui lit 10 nombres et indique la valeur du plus petit. crire un algorithme qui lit 10 nombres et indique le nombre de valeurs ngatives 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. 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.

3. 4. 5. 6.

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

5.

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

2.2.

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. 5. Gestion dun stock de DVD (extrait de lexamen final 2008) Pour crire un programme permettant de grer le stock dun magasin de vente de DVD, on dfinit deux tableaux, tabDVDFranais et tabDVDAnglais, le premier correspondant aux DVD en franais et le second aux DVD en anglais. Chaque DVD est reprsent par un enregistrement comprenant le nom du film, le genre (fiction, policier, documentaire, action, jeunesse, horreur, thriller, drame, comdie), lanne de sortie, le nombre dexemplaires, le prix de vente. Ecrire en Pascal : 1) une procdure de saisie du stock de DVD. Un paramtre (formel) de cette procdure sera tabDVD. Il pourra recevoir un des deux tableaux denregistrements : tabDVDFranais ou tabDVDAnglais. 2) une procdure ou fonction permettant deffectuer des remises de la faon suivante : Un paramtre (formel) de cette procdure sera tabDVD. Il pourra recevoir un des deux tableaux denregistrements : tabDVDFranais ou tabDVDAnglais. La remise sera de 20% sur les DVD de genre fiction dont lanne de sortie est infrieure strictement 2000. Cette remise sera faite en modifiant directement le prix des DVD dans le tableau denregistrements. Le nombre de DVD ayant fait lobjet dune remise sera comptabilis. Ce nombre tiendra compte du nombre dexemplaire pour chaque DVD.

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 Dupont Durand ... Moyenne Math 12.50 6.50 9.32 Physique 10.00 9.50 11.39 Franais 8.50 8.00 10.48 Moyenne 10.33 8.00 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. Trouver un algorithme rcursif permettant dinverser une chane de caractres (NF01 devient 10FN, bonjour devient ruojnob). En dduire une fonction boolenne permettant dindiquer si un mot est un palindrome (identique lendroit et lenvers, par exemple : noyon ou rever). 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.

2.

3.

4.

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