Révision : compression d'un fichier des nombres binaires
2 participants
Page 1 sur 1
Révision : compression d''un fichier des nombres binaires
On veut compresser un fichier d'entiers binaires (contenant des 0 et des 1).
Le principe de compression est le suivant :
Si le fichier contient : 00000011111000, La compression nous donne : 605130
Et se lit : on a 6 zéros, 5 uns et 3 zéros.
Ecrire un programme Pascal qui permet de créer et remplir un fichier nomme "source.fch"
par N entiers binaires (N est un nombre aléatoire compris entre 4 et 100), puis compresser
ce fichier dans un fichier résultat nommé "compress.fch" en utilisant le principe ci-dessus et l'afficher.
Le principe de compression est le suivant :
Si le fichier contient : 00000011111000, La compression nous donne : 605130
Et se lit : on a 6 zéros, 5 uns et 3 zéros.
Ecrire un programme Pascal qui permet de créer et remplir un fichier nomme "source.fch"
par N entiers binaires (N est un nombre aléatoire compris entre 4 et 100), puis compresser
ce fichier dans un fichier résultat nommé "compress.fch" en utilisant le principe ci-dessus et l'afficher.
Essayez de le faire le plus vite possible.
Hanafi- Messages : 106
Date d'inscription : 25/10/2008
Re: Révision : compression d'un fichier des nombres binaires
Ahmed ! Ou est votre essai ? N'oubliez pas que vous êtes un genie !!!bouhmid a écrit:
J'attends avec impatience ...
Hanafi- Messages : 106
Date d'inscription : 25/10/2008
Proposition de solution
program compression;
uses wincrt;
var f1,f2:text;
n:integer;
procedure remplir(var f1:text;var n:integer);
var i,j:integer;
n2:string;
test:boolean;
begin
rewrite(f1);
randomize;
n:=random(97)+4;
for i:=1 to 3 do
begin
repeat
test:=true;
write('Donner un nombre binaire ');
readln(n2);
for j:=1 to length(n2) do
if not (n2[j] in ['0','1']) then
test:=false;
until test;
writeln(f1,n2);
end;
close(f1);
end;
procedure convert(var f1,f2:text);
var ch,chnc,n2:string;
i,nc:integer;
c:char;
begin
reset(f1);
rewrite(f2);
while not eof(f1) do
begin
readln(f1,n2);
writeln('n2=',n2);readln;
i:=1; ch:='';
repeat
c:=n2[i];
nc:=0;
while (n2[i]=c) and (i<=length(n2)) do
begin
i:=i+1;
nc:=nc+1;
end;
str(nc,chnc);
ch:=ch+chnc+c;
until i>length(n2);
writeln(f2,ch);
end;
close(f2);close(f1);
end;
procedure affiche(var f2:text);
var n2:string;
begin
reset(f2);
while not eof(f2) do
begin
readln(f2,n2);
writeln(n2);
end;
close(f2);
end;
begin
assign(f1,'c:\bac2009\source.fch');
assign(f2,'c:\bac2009\compress.fch');
remplir(f1,n);
convert(f1,f2);
affiche(f2);
end.
N'oublier pas de créer un dossier de votre numéro d'inscription et enregistrez votre travail périodiquement en cliquant sur la disquette de barre d'outil Pascal.
uses wincrt;
var f1,f2:text;
n:integer;
procedure remplir(var f1:text;var n:integer);
var i,j:integer;
n2:string;
test:boolean;
begin
rewrite(f1);
randomize;
n:=random(97)+4;
for i:=1 to 3 do
begin
repeat
test:=true;
write('Donner un nombre binaire ');
readln(n2);
for j:=1 to length(n2) do
if not (n2[j] in ['0','1']) then
test:=false;
until test;
writeln(f1,n2);
end;
close(f1);
end;
procedure convert(var f1,f2:text);
var ch,chnc,n2:string;
i,nc:integer;
c:char;
begin
reset(f1);
rewrite(f2);
while not eof(f1) do
begin
readln(f1,n2);
writeln('n2=',n2);readln;
i:=1; ch:='';
repeat
c:=n2[i];
nc:=0;
while (n2[i]=c) and (i<=length(n2)) do
begin
i:=i+1;
nc:=nc+1;
end;
str(nc,chnc);
ch:=ch+chnc+c;
until i>length(n2);
writeln(f2,ch);
end;
close(f2);close(f1);
end;
procedure affiche(var f2:text);
var n2:string;
begin
reset(f2);
while not eof(f2) do
begin
readln(f2,n2);
writeln(n2);
end;
close(f2);
end;
begin
assign(f1,'c:\bac2009\source.fch');
assign(f2,'c:\bac2009\compress.fch');
remplir(f1,n);
convert(f1,f2);
affiche(f2);
end.
N'oublier pas de créer un dossier de votre numéro d'inscription et enregistrez votre travail périodiquement en cliquant sur la disquette de barre d'outil Pascal.
Hanafi- Messages : 106
Date d'inscription : 25/10/2008
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|