Forum ada95000 Dernière connexion : 18/06/2025 à 10:14
Fin de session : 18/06/2025 à 10:24

Vous n'êtes pas connecté [Connexion - Inscription]
Go Bottom
Répondre
Qui peut poster ? Tous les membres peuvent lancer des Nouveaux Sujets, et tout membre peut répondre.
Pseudo:  Voulez-vous vous inscrire ?
Mot de passe:  Mot de passe oublié ?
Sujet: (optionnel)
Icône:

biggrin.gif

bigsmile.gif

cool.gif

cool2.gif

diablotin.gif

eureka.gif

flaming.gif

lol.gif

mad.gif

no.gif

puzzled.gif

roll.gif

rolleyes.gif

sad.gif

saint.gif

shocked.gif

smile.gif

thumbdown.gif

thumbup.gif

tongue.gif

wink.gif
Mode d'édition :
Normal Avancé Aide

Insérer du texte en gras Insérer du texte en italique Insérer du texte souligné Insérer du texte centré Insérer un lien hypertexte Insérer un lien vers un Email Insérer une image Insérer du code Insérer une citation Insérer une liste Insérer du texte caché
Message:
HTML activé ? Non
Smileys activés ? Oui
BBCode activé ? Oui
Activer fonction [img] ? Oui
:D:grin::cool:8)
:eldiablo::eureka::x:hot:
:lol::mad::no::-?
:-p:-o:(:ange:
Plus de smileys
Options Désactiver les smileys ?
Utiliser une signature ?
Désactiver le BBCode ?
Recevoir une notification par Email lors de nouvelles réponses ?

Revoir le sujet
bouba
Junior Member
MembreMembre


Messages: 3
Inscrit(e) le: 28/09/2006
Déconnecté(e)
Publié le 28/09/2006 à 09:34
RE : Exo 6: Tab1 en séquence dans Tab2

1. Il n'est jamais bon de s'amuser a faire soi-meme ce que le language peut faire pour nous.
Ada gere tres bien les comparaisons de donnees de type tableau, donc autant le laisser faire, cela simplifie
le code. ;)
2. De plus, on connait parfaitement la taille des donnees, donc il est preferable d'utiliser une boucle for plutot
qu'une boucle while.
3. Cette version est plus generale car elle autorise tout range entier valide pour indexer le tableau.
4. Si tab1 est plus grand que tab2, la boucle n'est pas executee, contrairement a la version precedente. D'ailleurs, si vous essayez de faire ce test, vous verrez que le compilo levera un warning car en verifiant les bornes du for, il s'en est apercu. ;) ... Si ce n'est pas le cas, changez de compilo, le votre est une bouze. ^^

code:

with Text_Io; use Text_Io;

procedure Tab is
 type Table is array(Integer range <>) of Integer;
 
 Tab1        : constant Table( 1 .. 3) := (1 , 2 , 3);
 Tab2        : constant Table(-3 .. 6) := (4, 3, 1, 2, 3, 9, 2, 1, 1, 2);
 Max         : constant Integer := Tab2'Last - Tab1'Length + 1;  
 
 type Result_T(Match_Found : Boolean := False) is
   record
     case Match_Found is
       when True  =>
         Index : Integer;
       when False =>
         null;
     end case;
   end record;
 
 Result : Result_T;
begin
 
 for Index in Tab2'First .. Max
 loop
   if Tab2(Index .. Index+Tab1'Length-1) = Tab1 then      
     Result := (Match_Found => True,
                Index       => Index);
     exit;
   end if;
 end loop;
 
 if Result.Match_Found then
   Put_Line("Tab1 trouve a partir de l'index " & Integer'Image(Result.Index));
 else
   Put_Line("Tab1 non trouve");
 end if;
end Tab;
ftbass
Administrator
StaffStaffStaffStaffStaffStaffStaffStaffStaff

images/avatars/WC3HumanOp1.gif

Messages: 72
Inscrit(e) le: 27/02/2004
Déconnecté(e)
Publié le 27/02/2004 à 22:02
Exo 6: Tab1 en séquence dans Tab2

Verifier si le contenu de Tab1 est retrouvé en séquence dans Tab2 :

code:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;

with Nombres_aleatoires; use Nombres_aleatoires;

procedure Tab1EnSequenceDansTab2 is

Long1 : constant := 3;
Tab1 : array(1 .. Long1) of integer := (1, 2, 3);
Long2 : constant := 10;
Tab2 : array(1 .. Long2) of integer := (4, 3, 1, 2, 3, 9, 2, 1, 1, 2);
Trouve : boolean := false;
i : integer := 1;
j : integer;

begin
  while (i <= Long1) and (Trouve = false) loop
     if Tab2(i) /= Tab1(1) then
        i := i + 1;
       else
          Trouve := true;
          j := 1;
     end if;
     while (j < Long1) and (i <= Long2 - j) and (Trouve = true) loop
        if Tab2(i + j) = Tab1(j + 1) then
           j := j + 1;
        else
           Trouve := false;
           i := i + 1;
        end if;
     end loop;
  end loop;
  if (Trouve = true) and (j > Long1) then
     Trouve := false;
  end if;
  if Trouve = true then
     put("Trouve");
  else
     put("Pas trouve");
  end if;
end;


[Edité le 10/03/2004 à 09:12 par ftbass]

Go Top
10.3.122.74 10:14 - 18 Juin 2025 10.3.122.74
[ 0.1643529 secondes | Effacer le cookie | 18 requêtes ]
Oxygen v1.0.11 © 2002  |  Oxygen WebSite © 2002