• Aucun résultat trouvé

Ecrire en Pascal la fonction cherche_nom, qui prend comme paramètres un nom et une liste de valeurs nommées ; si le nom donné existe dans la liste, cette fonction retourne la position du nombre correspondant, et

Il s'agit de comprendre les méandres d'un programme qui n'est pas de votre cru Les plus courageux pourraient essayer de le faire tourner à la main Faites attention à ne pas généraliser

5- Ecrire en Pascal la fonction cherche_nom, qui prend comme paramètres un nom et une liste de valeurs nommées ; si le nom donné existe dans la liste, cette fonction retourne la position du nombre correspondant, et

sinon.

N.B.: Pour les questions 1 à 3, décrivez la solution proposée de façon informelle, de façon à en faire ressortir les grandes lignes - comme si vous deviez expliquer le fonctionnement du programme à un interlocuteur non-informaticien. Pour cela, n’utilisez ni du code Pascal, ni une traduction littérale du Pascal en français, mais des phrases rédigées.

Problème n°12(6 points)

Indiquez, dans les cases correspondantes de la feuille fournie pour répondre à cet exercice, la nature, le type et la valeur des identificateurs utilisés dans le programme suivant aux points indiqués. Les instructions de la ligne où est posé le point sont exécutées avant de déterminer la nature, le type et la valeur des identificateurs quand le programme s'exécute.

La nature est soit une variable globale (notée VG), soit une variable locale (notée VL), soit un paramètre formel (noté PF). Le type sera à déterminer parmi les types simples du langage PASCAL, soit integer (I), soit real (R), soit boolean (B), soit char (C). La valeur sera à déterminer. Par conséquent une réponse sera un triplet, par exemple (VG, I, 34), autre exemple (PF, C, 'g').

program asile( input, output ); var

a,b : integer; c : real; d : boolean; function F1( b,d,c : integer):real; var a : boolean; begin a := true; { point 1 } F1 := sqrt(sqr(d)-(4*b*c)); end; function F2( d, c : integer):boolean; var a : char; begin a := 'a'; d:= 0; { point 2 } F2 := (a ='a') or odd(c); end;

procedure F3( var a : integer ; b : integer ); var

c : char ; begin

NF01 – P06 Algorithmique et programmation - 130 - c := chr(b) ; c := chr((2 * a) + ord(c)); a := ord(‘A’) ; { point 3 } end;

begin { et voici le programme principal } a := 9 ; b := 6 ; d := true ; c := F1( a, b, 1 ) ; d := F2( 7, 3 ) ; F3( b , 53) ; { point 4 } end.

Voici un extrait de la table des codes ASCII qui peut vous être utile pour répondre à la question.

code base 10 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

caractère 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F

Voici le tableau que vous devez remplir pour répondre à la question numéro 3 :

a

b

c

d

point 1

point 2

point 3

point 4

Problème n°13 (5 points) : Fichiers

Je désire gérer ma cave à vin. Une bouteille de vin est caractérisée par : - son nom

- son type (rouge, blanc, rose) - son annee (1800 .. 1998) - sa note (0 .. 20)

1 – Définir le type vin.

2 – Ecrire une procédure creeCave(nom-du-fichier), qui créer le fichier nom-du-fichier et enregistre dans celui-ci l’ensemble des vins constituant la cave.

3 – Ecrire une procédure selectUneBouteille(nom-de-bouteille,nom-du-fichier) permettant d’afficher les caractéristiques d’une bouteille (nom, type, annee et note).

4 – Ecrire une procédure eclate(nom-du-fichier) qui, à partir du fichier principal nom-du-fichier, va créer 3 fichiers : rouge, blanc et rose contenant uniquement les vins de même nature.

Problème n°14 (5points) : Domino

On considère un jeu de dominos, comportant bien sûr 28 dominos. On rappelle que chaque domino présente sur l’une des faces (l’autre étant pleine) une paire de chiffres {i,j}

avec 0 ≤ i,j ≤ 6. On considère dans cet exercice des séquences de dominos, le principe de constitution d’une séquence étant le suivant : deux dominos d1 = {i1,j1} et d2 = {i2,j2} peuvent être accolés l’un à l’autre à condition d’avoir un chiffre en commun : ainsi, si j1 = j2, alors d1 pourra être suivi de d2, formant au total la séquence (i1,j1,j2,i2).

1) Proposer deux modes de représentation d’une séquence de dominos.

2) Choisir l’une de ces représentations. Soit alors D une séquence de dominos déjà existante. Concevoir une fonction qui admettant D en argument renvoie vrai si D respecte bien le principe de formation, et faux sinon. 3) Soit J un joueur qui va puiser successivement (on dit piocher) dans le tas des 28 dominos. On demande ici de

réaliser une procédure qui permette à J, en effectuant des tirages successifs, de mener jusqu’à son terme la constitution d’une séquence de dominos. Pour simplifier , on admettra que le tirage d’un domino est simplement réalisé par une lecture de deux chiffres compris entre 0 et 6. Une fois le domino tiré, si l’application du principe de chaînage est possible, ce domino sera ajouté à la séquence, là où il convient (nécessairement en début ou en fin de séquence), sinon il sera définitivement éliminé. Ce processus s’arrêtera lorsqu’il n’y aura plus rien à piocher.

Problème n°15 (5 points) : Les Pascaloks

Sur la planète Infok les Pascalok jouent à un jeu très populaire. Mais dans chaque région d’Infok où ce joue un match, les Pascaloks ont la mauvaise habitude de ne pas utiliser les mêmes techniques d’affichage des scores. Néanmoins tous les scores doivent apparaîtrent sur toute la planète. Aidez les Pascaloks chargés des affichages à s’y retrouver :

- Les Binoks n’utilisent que des lampes éteintes ou allumées pour afficher les résultats. Ils sont donc en base 2. - Les Octoks, toujours étourdis, ont malencontreusement perdu les chiffres 8 et 9. Ils sont donc en base 8. - Les Hexadécimoks, réputés pour leur avarice, ne veulent utiliser que deux caractères pour afficher les scores,

ainsi la base 16 leur suffit.

- Enfin les Décimoks, qui sont la honte des Pascaloks, n’utilisent que des chiffres dans une bête base 10.

SCORES Binoks

Affichage Binaire Octoks Affichage Octal Héxadécimoks Affichage Hexadécimal

Décimoks Affichage Décimal Chez les Binoks

(base 2) 10110 à 111101 Chez les Octoks (base 8) 53 à 102

Chez les Hexadécimoks (base 16)

1E à 39

Chez les Décimoks (base 10)

172 à 240

NF01 – P06 Algorithmique et programmation

- 132 - Soir le programme suivant :

program pro_c_est_dur; Var i,j,k : integer;

Procedure AFFICHE (n,x,y,z : integer) ; Begin

Writeln(n,x,y,z) ; End;

Procedure TRUC(var a,b,c : integer) ; Var d : integer ; Begin d := a ; a := b ; b := d ; End ;

Procedure BIDULE(var x,y,z : integer) ; Procedure BAZAR ; Begin x := x*2 ; y := y*10 ; z := z*100 ; AFFICHE(8,x,y,z) ; End ;

Procedure MACHIN(x,y,z : integer) ; Begin

z := x*2 ; x := y ; y := z+3 ; End ;

Begin {début de la partie principale de BIDULE} AFFICHE(2,x,y,z) ; If x>y then TRUC(x,y,z) ; AFFICHE(3,x,y,z) ; MACHIN(x,y,z) ; AFFICHE(4,x,y,z) ; If y>z Then Begin TRUC(x,y,z) ; AFFICHE(5,x,y,z) ; MACHIN(x,y,z) ; If x>y Then Begin TRUC(x,y,z) ; AFFICHE(6,x,y,z) ; MACHIN(x,y,z) ; End ; End ; AFFICHE(7,x,y,z) ; BAZAR ; AFFICHE(9,x,y,z) ; TRUC(z,y,x) ; End ;

Begin { et voici le programme principal } i := 100 ;

k := 25 ;

AFFICHE(1,i,j,k); BIDULE(i,j,k); AFFICHE(10,i,j,k); End.

Remplir le tableau de la page suivante, en respectant bien les valeurs données pour le premier paramètre (n) de la procédure AFFICHE (ces valeurs de n indiquent l’ordre d’appel de la procédure). Par exemple, lorsque n vaut 1, x a pour valeur 100, y vaut 50 et z vaut 25. Compléter le tableau pour les autres valeurs de n.

Voici le tableau que vous devez remplir pour répondre à la question numéro 4 . Il correspond à l’affichage effectué avec l’instruction writeln(n,x,y,z) dans la procédure AFFICHE, selon la valeur du paramètre n (premier paramètre de la procédure AFFICHE). Par exemple, lorsque n vaut 1, x a pour valeur 100, y vaut 50 et z vaut 25. L’instruction writeln(n,x,y,z) donne alors : 1 100 50 25 (ce qui correspond à la première ligne du tableau).

Compléter le tableau pour les autres valeurs de n.

n x y z 1 100 50 25 2 3 4 5 6 7 8 9 10

Problème n°17 (7 points) : La Vie des Hauts

Le responsable d’une vidéothèque désire connaître chaque jour la liste de toutes les cassettes qui sont louées, avec le nom du client emprunteur. Chaque cassette est identifiée par un numéro unique. Il dispose de trois fichiers :

Le fichier 1 «Film» fournit le numéro de la cassette, le titre du film, le réalisateur, l’année et le producteur.

Le fichier 2 «Emprunt» contient le numéro de la cassette, la date de début, la date de fin de l’emprunt, le nom de l’emprunteur (Chaque emprunt de cassette est enregistré et conservé ; la date de fin de l’emprunt vaut 00 00 0000 tant que la cassette n’a pas été rendue).

NF01 – P06 Algorithmique et programmation

- 134 -

Fichier 3 : «Client» contient le nom du client, son prénom, son adresse, son numéro de téléphone (On suppose que deux clients ne portent pas le même nom).

1pt 1 – Indiquez les structures de données qu’utilisera le programme : c’est à dire les déclarations des constantes, des types et des variables du programme principal.

2pts 2 – Ecrire une procédure Recherche_Dernier_Emprunt qui renvoie à partir d’un numéro de cassette, le dernier emprunt de la cassette : c’est à dire la date de début, la date de fin de l’emprunt et le nom de l’emprunteur.

2pts 3- Ecrire une procédure Recherche_Client qui recherche le prénom, l’adresse et le numéro de téléphone à partir du nom du client.

2pts 4- A l’aide des deux procédures précédentes, proposer un algorithme permettant de