Compter récursivement le nombre d'apparitions d'un caractère dans un mot
Salut;
je voudrais une solution à l'énoncé suivant :
Citation:
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 :bug:
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:
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 , :arf: ; 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 . :furieux:
remerciement pour Darrylsite
Citation:
Envoyé par
darrylsite
Regarde un peu ce code :
Code:
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. :yaisse2: