Prof : N.Riadh Correction série2 4Si Exercice 1

Transcription

Prof : N.Riadh Correction série2 4Si Exercice 1
Prof : N.Riadh
Correction série2
4Si
Exercice 1 :
Analyse du PP
Résultat = fc, fv
Ecrire (‘’Nombre consone = ‘, Taille_fichier(fc))
Proc affiche (fc)
Ecrire (‘’Nombre Voyelle = ‘, Taille_fichier(fv))
Proc affiche (fv)
fv, fc =[Assigner(f, ‘’C:\voyelles.Dar’’), Assigner(f, ‘’C:\Consones.Dar’’)] proc eclater (f, fv, fc)
F = [Assigner (f, ‘’C:\lettres.Dar’’)] Proc remplir(f)
T.D.O.G
TDNT
Type
Fcar = Fichier d’entier
Analyse de la procédure remplir
DEF PROC Remplir (var f : fcar)
Résultat = f
f = [recréer(f)]
Répéter
Répéter
C = Donnée (‘'sasir une lettre : ‘')
Jusqu’à (Majus(c) dans [‘'A’'..’'Z’','’#'’])
Si c <> '’#'’ alors
Ecrire(f,c);
Jusqu’à (c = ‘'#’')
Fermer(f)
Fin remplir
Objet
Type/Nature
F, fv, fc
Remplir
Affiche
eclatre
Fcar
Procédure
Procédure
Procédure
T.D.O.L
Objet
Type/Nature
c
char
Analyse de la procédure eclaer (var f, fv, fc : fcar)
DEF PROC eclater (var f , fv, fc: fcar)
Résultat = fv, fc
fv, fc [recréer (fv), recréer (fc), ouvrir(f) ]
Tant que non (Fin_fichier(f)) Faire
Lire(f,c)
si Majus(c) dans ['’A’', '’E’', '’I’', '’O'’, '’U’', '’Y’'] alors
Ecrire (fv, c)
sinon
Ecrire (fc, c)
Fin si
Fin tant que
Fermer(f)
Fermer (fc)
Fermer (fv)
Fin eclater
T.D.O.L
Objet
Type/Nature
c
char
Prof : N.Riadh
Correction série2
4Si
Analyse de la procédure affiche (var f : fcar)
DEF PROC affiche (var f : fcar)
Résultat = f
f= [ouvrir(f) ]
Tant que non (Fin_fichier(f)) Faire
Lire (f,c)
Ecrire(c : 2)
Fin tant que
Fermer(f)
Fin affiche
T.D.O.L
Objet
Type/Nature
c
char
Pascal :
program cons_voy;
uses wincrt;
Type Fcar = File Of Char;
Var f, fc, fv : Fcar;
Procedure remplir(var f: Fcar);
var c:char;
begin
rewrite(f);
repeat
repeat
write('sasir une lettre : ');
readln(c);
until (upcase(c) in ['A'..'Z','#']);
IF c <> '#' then
write(f,c);
until(c = '#');
End;
Procedure Eclater(var f, fc, fv: Fcar);
Var c:char;
Begin
Reset(f);
rewrite(fv);
rewrite(fc) ;
While not (EOF(f)) Do
Begin
read(f,c);
if upcase(c) in ['A', 'E', 'I', 'O', 'U', 'Y'] then
write(fv,c)
Else
write(fc,c);
end;
end;
Procedure affiche(Var f: Fcar);
var c:char;
Begin
Reset(f);
While not (EOF(f)) Do
begin
Read(f,c);
Write(c:2);
end;
end;
Begin
Assign(f,'c:\Lettre.txt');
Assign(fv,'c:\Voyelle.txt');
Assign(fc,'c:\consonne.txt');
Remplir(f);
Eclater(f,fc,fv);
affiche(fv);
writeln;
writeln('nombre voyelles = ', Filesize(fv));
affiche(fc);
writeln;
writeln('nombre consonnes = ', Filesize(fc));
close(f);
close(fv);
close(fc);
End.
Prof : N.Riadh
Correction série2
4Si
Exercice 3 :
Analyse du PP
Résultat = fp
fp= [ m = donnée(‘’entrer un matricule’’) ] si Fn Recherche(m) alors
ecrire(‘’l’employer de matricule’’, m, ‘’existe’’)
sinon ecrire(‘’l’employer de matricule’’, m, ‘’n’existe pas’’)
Proc affiche(fp)
Proc création(fp)
TDNT
T.D.O.G
Type
Emp = ……………………………………….
Mat : entier
Nom : chaine
Grade : chaine
Sal : réel
Fin ………………………..
Fpers : fichier d’……………………………
Objet
Type/Nature
fp
creation
Affiche
Recherche
m
…………………..
Procédure
Procédure
Fonction
entier
Analyse de la procédure creation
DEF PROC cretaion (………………………………………..)
Résultat = fp
fp = [assigner(fp, ‘c:\salaire.dat’’), recréer(fp)]
Répéter
Répéter
rep = Donnée (‘'voulez-vous ajouter un employer ‘')
Jusqu’à (Majus(rep) dans [‘'O’’, ‘’N’’])
Si majus(rep) = ‘’O’’ alors
Avec ………………………. faire
Mat=Donnée (‘’Donner un matricule’’)
Nom =Donnée (‘’Donner un nom’’)
Grade= Donnée (‘’donner un grade’’)
Sal= Donnée (‘’Donner un salaire’’)
………………………………….
Fin Avec
Fin si
Jusqu’à (majus(rep) = ‘’N’’ )
Fermer(fp)
Fin creation
T.D.O.L
Objet
Type/Nature
Prof : N.Riadh
Correction série2
4Si
Analyse de la procédure affiche
DEF PROC affiche (var fp : fpers)
Résultat = fp
f= [……………………………………………… ]
Tant que non (Fin_fichier(fp)) Faire
…………………………………………
Si ……………………………………………………………………….. alors
Ecrire (e.mat)
Ecrire (e.nom)
Ecrire (e.grade)
Ecrire (e.sal)
Fin si
Fin tant que
Fermer (fp)
Fin affiche
T.D.O.L
Objet
Type/Nature
e
emp
Analyse de la fonction recherche
DEF FN Rechercher ( n :entier) : booléen
T.D.O.L
Résultat = …………………………………………
Objet
Type/Nature
Trouve = [……………………………………………………………………]
E
trouve
Emp
booléen
Tant que non (Fin_fichier(fp)) Faire
…………………………………………………..
Si ……………………………………………….. alors
Trouve  vrai
Fin si
Fin Tant que
Fermer (fp)
Fin recherche
Prof : N.Riadh
Correction série2
Exercice 4 :
program superflus;
uses wincrt;
var f: text;
Procedure saisie (var ch: string);
begin
repeat
write('sasir une phrase ');
readln(ch);
until (upcase(ch[1])in ['A'..'Z']) and (ch[length(ch)]='.');
end;
procedure remplir (var f:text);
var ch:string; n,i:Byte;
begin
repeat
write('combien de phrase voulez vous saisir ');
readln(n);
until(n>0);
For i:= 1 to n do
Begin
writeln('phrase n°', i);
saisie(ch);
writeln(f,ch);
end;
readln;
end;
procedure supp (var ch:string);
begin
while (pos(' ',ch) <>0) Do
Delete(ch, pos(' ',ch), 1);
end;
Procedure transfert(var ft, f:text);
var ch:string;
Begin
reset(f);
rewrite(f);
while not(EOF(ft)) Do
Begin
readln(ft,ch);
writeln(f,ch);
end;
end;
4Si
Procedure espace(var f:text);
var
ft:text; ch : string;
begin
Assign(ft, 'c:\Intermediaire.txt');
rewrite(ft);
reset(f);
while not (EOF(f) ) do
begin
readln(f, ch);
supp(ch);
writeln(ft,ch);
end;
transfert(ft, f);
end;
Procedure affiche (var f:text);
var ch:string;
begin
while not(EOF(f)) Do
begin
readln(f,ch);
writeln(ch);
end;
end;
procedure longue(var f :text) ;
var ch1,ch2 :string ; i,nb1,nb2 :integer ;
begin
reset(f) ;
ch2 :='' ;
nb2 :=0 ;
while not(EOF(f)) Do
Begin
Readln(f,ch1) ;
Nb1 :=0 ;
For i := 1 to length (ch1) do
If ch1[i]=' ' then nb1 :=nb1+1 ;
If nb1>nb2 then
Begin
Nb2 :=nb1 ;ch2 :=ch1 ;
End ;
Write('la chaine la plus longue est', ch2) ;
End ;
end;
Begin
Assign(f,'c:\phrase.txt');
rewrite(f);
remplir(f);
affiche(f);
longue(f);
close(f);
end.
Prof : N.Riadh
Correction série2
4Si
Exercice 5 :
program decompression;
uses wincrt;
type fe=file of integer;
var f1,f2:fe;
procedure creation(var f:fe);
var np:string;
begin
write('donner un nom physique');
readln(np);
assign(f,np);
rewrite(f);
end;
procedure saisie(var f:fe);
var rep:char;v:integer;
Begin
repeat
readln(v);
write(f,v);
repeat
write('voulez-vous continuez(O/N) ? ');
readln(rep);
until(upcase(rep) in ['O','N']);
until(upcase(rep)='N');
end;
procedure decomp(var f1,f2:fe);
var j,i,n,x:integer; T:array[1..100]of integer;
begin
reset(f1);
n:=filesize(f1);
for i:=1 to n do
read(f1,T[i]);
i:=1;
repeat
x:=T[i];
For j:=1 to x do
write(f2,T[i+1]);
i:=i+2;
until(i>n);
end;
procedure affiche(var f:fe);
var v:integer;
begin
reset(f);
while not(EOf(f)) do
begin
read(f,v);
write(v:5);
end;
end;
begin
creation(f1);
creation(f2);
saisie(f1);
writeln;
affiche(f1);
decomp(f1,f2);
writeln;
writeln;
affiche(f2);
close(f1);
close(f2);
end.