IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Compter récursivement le nombre d'apparitions d'un caractère dans un mot


Sujet :

Pascal

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Compter récursivement le nombre d'apparitions d'un caractère dans un mot
    Salut;
    je voudrais une solution à l'énoncé suivant :
    Déterminer si le nombre d'apparitions d'un caractère (C) donné dans un mot (MOT) est pair ou impair (Récursivement) à l'aide d'une fonction booléenne bien sûr.
    Je veux seulement la fonction ? Et merci d'avance

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Dio,
    Citation Envoyé par petit programmeur Voir le message
    salut ;
    je veut une solution à l'énoncée suivante :
    déterminer est ce que le nombre d'apparition d'un caractère (C) donnée dans un mot (MOT) est paire ou impaire ( Récursivement ) à l'aide d'une fonction booléenne bien sur ?
    je veut seulement la fonction ? et merci d'avance
    Si tu avais un peu regardé quelques sujets du forum, tu saurais qu'on ne donne pas du code comme ça.

    On est là pour t'aider à faire ton travail, pas pour le faire à ta place.

    Et en plus en utilisant "je veut" (Je laisse volontairement la faute ), ce qui n'est pas vraiment une bonne manière de demander.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Montre nous où tu en est avec cet exercice. Où tu bloques comme ça on pourra t' aider. Presente nous d' abord un peu de code.

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut est alors voila mon algorithme
    La récursivité, comme vous savez bien est un domaine qui demande de la part du programmeur un peu de concentration , car si ce dernier ne trouve pas l'un de deux ponts de passage au récusive (qui sont la condition d'arret et les nouvelles parametres) donc il ne peut pas arriver à la solution désirée.
    pour moi, j'ai commencé par la solution itérative, et par la suite je vient de determiner les deux éléments necessaires (condition d'arret et nouvelles parametres) pour la solution recursive ; mais j'arrive pas ? Et voilà la solution itérative :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function Pair_C (mot: string ; c:char ):boolean ; 
    var 
      nb,i : integer;
    begin 
      nb:=0;
      for i:=1 to long(mot) do 
        if c=mot[i] then  
           nb:=nb+1;
     
      if nb mod 2 = 0 then 
        Pair_c:= true 
      else 
         Pair_c:=false ;
    end;
    A partir de cette solution et après plusieurs essais , ; j'arrive pas même à compléter les valeurs de retour lors de nouveau appel ?

    La solution finale est que la condition d'arret est d'apres moi : tester est ce que long(mot) = 1 mais dans ce cas la je n'arrive pas à completer les nouvelle parametres ? et meme cette condition d'arret n'est pas suffisante !


    Merci .

  5. #5
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Pour moi la meilleure solution est de compter d'abord le nombre d'apparitions de ce caractère dans la chaîne et ensuite déterminer si ce nombre est pair ou impair.
    Tu peux donc faire une fonction récursive (dont je ne vois pas l'intérêt de la récursivité) pour compter le nombre de ce caractère, ensuite une autre qui détermine si ce nombre est pair ou pas.

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut oui je suis avec vous
    (dont je ne vois pas l'intérêt de la récursivité)
    Oui je suis avec vous dans ce point ,
    Mais, cela c'est un exercice dans le livre scolaire (4 ieme science info.) donc je suis obligé de le resoudre !

  7. #7
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Regarde un peu ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    program compte;
    uses crt;
     
    type str30=string[30];
     
    var n:integer;
        ch:str30;
    function cpt(ch:str30;i:integer;car:char):boolean;
    begin
     if i<=length(ch) then
      begin
       if ch[i]=car then
        inc(n);
        cpt:= cpt(ch,i+1,car);
       end
     else
      if (n mod 2)=0  then
        cpt:=true
      else
        cpt:=false;
    end;
    begin
    n:=0;
    ch:='je suis darrylsite menbre de developpez';
    writeln(ch);
    writeln(cpt(ch,1,'e'),'   ',n);
    readln
    end.
    Comme quelqu' un l' a dit sur ce forum
    Un exemple vaut mieux que ...

  8. #8
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut remerciement pour Darrylsite
    Citation Envoyé par darrylsite Voir le message
    Regarde un peu ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    program compte;
    uses crt;
     
    type str30=string[30];
     
    var n:integer;
        ch:str30;
    function cpt(ch:str30;i:integer;car:char):boolean;
    begin
     if i<=length(ch) then
      begin
       if ch[i]=car then
        inc(n);
        cpt:= cpt(ch,i+1,car);
       end
     else
      if (n mod 2)=0  then
        cpt:=true
      else
        cpt:=false;
    end;
    begin
    n:=0;
    ch:='je suis darrylsite menbre de developpez';
    writeln(ch);
    writeln(cpt(ch,1,'e'),'   ',n);
    readln
    end.
    Comme quelqu' un l' a dit sur ce forum
    je vous remerci Mr Darrylsite pour votre attention à mon sujet. et aussi tous les membres.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/09/2017, 22h15
  2. Compter le nombre d'apparition d'un caractère
    Par zut94 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 29/11/2012, 10h28
  3. Addition du nombre d'apparitions d'un chiffre dans un tableau
    Par stephane_gilbert dans le forum Pascal
    Réponses: 2
    Dernier message: 06/02/2009, 17h30
  4. Réponses: 2
    Dernier message: 18/04/2008, 16h19
  5. Réponses: 38
    Dernier message: 23/02/2008, 01h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo