récursivité

récursivité - Ada - Programmation

Marsh Posté le 08-10-2010 à 00:17:36    

Bonjour voici ma question

 

Ecrire en récursif la fonction compte (S : string, C : character) return integer, cette fonction retourne le nombre de fois où le caractere C apparait dans la chaine S.

 

Je l'ai fait mais quand je le teste ça ne fonctionne pas et je comprends pas pourquoi :/
Voilà ce que j'ai fait

 

WITH Ada.Text_IO, Ada.Integer_Text_IO;
USE Ada.Text_IO, Ada.Integer_Text_IO;

 

PROCEDURE Exo3a IS
-----------------------sous procedures et functions-------------------
   FUNCTION Compte (S : String; C : Character) RETURN Integer IS
      Nb : Integer := 0;
   BEGIN
     
      IF (S'length = 0) THEN
         RETURN nb;
      ELSIF ( S(s'first) = C) THEN
         nb := nb+1;
         RETURN (Compte(S(s'first+1..s'last),C));
      ELSE
         RETURN (Compte(S(s'first+1..s'last),C));
      END IF;
   END Compte;
--------------------------------------------------------------------------------
   PROCEDURE Remplir (S : OUT String) IS  
   BEGIN
      Put("entrer un mot : " );
      Get(S);
   END Remplir;  
-----------------------------------------------------------------------------
   PROCEDURE Remplir2 (C : OUT character) IS  
      BEGIN
      Put("entrer un character : " );
      Get(C);
   end remplir2;    
-----------------------------------------------------------------------------
   S : String (1..10) := (OTHERS =>' ');
   c : character;  
--------------------------------------------------------------------------------
BEGIN
   Remplir(S);
   Remplir2(C);
   Put(Compte(S,C));
end exo3a;
                                   

 

 


Message édité par mirlamber le 08-10-2010 à 00:25:26
Reply

Marsh Posté le 08-10-2010 à 00:17:36   

Reply

Marsh Posté le 08-10-2010 à 14:54:42    

Code :
  1. FUNCTION Compte (S : String; C : Character) RETURN Integer IS
  2.      Nb : Integer := 0;
  3.   BEGIN
  4.    
  5.      IF (S'length = 0) THEN
  6.         RETURN nb;
  7.      ELSIF ( S(s'first) = C) THEN
  8.         nb := nb+1;
  9.         Nb := Nb + (Compte(S(s'first+1..s'last),C));
  10.      ELSE
  11.         Nb := Nb + (Compte(S(s'first+1..s'last),C));
  12.      END IF;
  13.      return Nb;
  14.   END Compte;


Et comme ça ?

Reply

Marsh Posté le 08-10-2010 à 15:02:13    

Ou...
 
FUNCTION Compte (S : String; C : Character) RETURN Integer IS
      Nb : Integer := 0;
   BEGIN
     
      IF (S'length = 0) THEN
         RETURN nb;
      ELSIF ( S(s'first) = C) THEN
         nb := nb+1;
         retunr Nb + (Compte(S(s'first+1..s'last),C));
      ELSE
         return Nb + (Compte(S(s'first+1..s'last),C));
      END IF;
   END Compte;

Reply

Marsh Posté le 29-12-2012 à 22:22:08    

Un peu plus simplifié:
 
   FUNCTION Compte (S : String; C : Character) RETURN Integer IS
   BEGIN
     IF (S'length = 0) THEN
        RETURN 0;
     ELSIF ( S(s'first) = C) THEN
       return 1 + (Compte(S(s'first+1..s'last),C));
     ELSE
       return Compte(S(s'first+1..s'last),C);
    END IF;
   END Compte;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed