Salut,
J'ai un programme en Ada à rendre. Mais seulement j'ai quelques soucis à bout desquels j'arrive pas ; Donc du help SVP.
Voilà; il est question d'écrire un programme capable de:
Récuperation de des phrases pour faire un traitement de compression de façon à avoir:les nombres ne seront pas modifiés entre les textes, toute répétition (>=3) sera remplacée par le caractère "*" suivi du nombre de répétitions et du caractère par ex: aaaa78bc5xxxxx donne *4a78bc5*5x
Et ce traitement est assuré par une procédure que j'ai nommée "Traitement" comporte cependant des lignes sont sources d'erreurs.
Vous trouverez dans le code ci-dessous les passages qui posent problemes
en gras.
En outre j'arrive pas à afficher plus d'un caractère quand j'appelle la procédure d'affichage.
Merci.
with Text_Io;
use Text_Io;
with Ada.Integer_Text_Io;
use Ada.Integer_Text_Io;
With Ada.text_io;
use Ada.text_io;
Procedure Compression is
c:character;
s:string(1..50);
procedure Ecrire is
F: File_Type;
begin
Create(F,Out_File,"toto.txt","" ); -- on cree un fichier
for I in 1..12 loop -- on ecrit les 4 premieres lignes
put(F,I);
Put(F,c);
New_Line(F);
end loop;
Put(F,c); -- on ecrit la derniere ligne
Close(F); -- on ferme le fichier
end Ecrire;
procedure Lireaffiche is
F: File_Type;
C: Character;
begin
Open(F,In_File,"toto.txt","" );
-- on ouvre le fichier de nom toto.txt
-- dans le programme on l'appelle F
while not End_Of_File(F) loop
if End_Of_Line(F) then
skip_line(F); -- on lit le saut de ligne dans F
New_Line; -- on passe a la ligne a l'ecran
else
Get(F,c); -- on lit un caractere dans F
Put(c); -- on affiche c a l'ecran
end if;
end loop;
Close(F); -- fermeture de F
end Lireaffiche;
procedure traitement is
n:constant := 20;
fichier:file_type;
s:string(1..30);
j,i:integer:=0;
tab1: array(1..n) of integer;
tab2: array(1..n) of integer;
c:character;
comp:integer:=0;
begin
while i<=n
loop
j:=i;comp:=0;
while (j<=n and tab1(i)=tab1(j)) loop
comp:=comp+1;
j:=j+1;
end loop;
if comp>=3 then tab2(i):="*",3,tab1(i));
if comp =1 then tab2(i):=tab1(i);
if comp =2 then tab2(i):=tab1(i)+tab1(i);
end if; end if; end if;
end loop;
end traitement;
F:File_Type;
BEGIN
put("saissez votre texte ici : " );
get(c);new_line;
Traitement; --Récuperation de c pour faire un traitement de compression de façon à avoir: les nombres ne seront pas modifiés entre les textes, toute répétition (>=3) sera remplacée par le caractère "*" suivi du nombre de répétitions et du caractère par ex: aaaa78bc5xxxxx donne *4a78bc5*5x
Ecrire; -- On ecrit le fichier
Lireaffiche; -- On l'affiche
END compression;