Problemes d erreurs en ADA pour un devoir à rendre Help
Problemes d erreurs en ADA pour un devoir à rendre Help - Ada - Programmation
MarshPosté le 06-06-2004 à 23:50:13
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
Marsh Posté le 06-06-2004 à 23:50:13
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;