Fonction de recurcivité
Fermé
the_tunisian
Messages postés
10
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
20 décembre 2007
-
30 nov. 2007 à 12:04
miss_bacinfo Messages postés 4 Date d'inscription jeudi 29 novembre 2007 Statut Membre Dernière intervention 5 décembre 2007 - 1 déc. 2007 à 20:05
miss_bacinfo Messages postés 4 Date d'inscription jeudi 29 novembre 2007 Statut Membre Dernière intervention 5 décembre 2007 - 1 déc. 2007 à 20:05
A voir également:
- Fonction de recurcivité
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Fonction trier excel - Guide
- Fonction ms dos non valide - Forum Windows 8 / 8.1
1 réponse
miss_bacinfo
Messages postés
4
Date d'inscription
jeudi 29 novembre 2007
Statut
Membre
Dernière intervention
5 décembre 2007
1 déc. 2007 à 20:05
1 déc. 2007 à 20:05
salut bon il ya plusieure methode pour ce probleme.
Soit une chaîne de caractères; supposons qu'on veuille faire aussi bien la fonction que la procédure qui nous renvoient l'inverse de cette chaîne; la fonction admet donc un paramètre qui est la chaîne initiale (transmise par valeur), et la procédure un paramètre qui est une variable de type "string" (transmis par adresse, c'est à dire en utilisant le mot "var" devant, qui indique que toutes les modifications du paramètre à un niveau quelconque de la procédure récursive se répercuteront sur le paramètre initial).
De manière itérative, cette fonction et cette procédure se font très facilement :on parcourt la chaîne d'un bout à l'autre et on accumule les caractères un par un dans une chaîne auxiliaire en prenant soin de mettre chaque nouveau caractère en tête de la chaîne auxiliaire. Voici cette première solution :
function inverse(st: string):
string; var aux: string;
i: integer;
begin aux := '';
for i := 1 to length(st) do
aux := st[i] + aux;
inverse := aux;
end; procedure inverse(var st: string);
var aux: string;
i: integer;
begin
aux := ''; for i := 1 to length(st) do aux := st[i] + aux; st := aux; end;
2eme methode
soit une chaîne 'abc'
- pour obtenir son inverse on met le dernier caractère en tête:
"c" et on le colle à l'inverse du reste qui est "ab"
- pour obtenir l'inverse de "ab" on met le dernier caractère en tête:
"b" et on le colle à l'inverse du reste qui est "a"
- pour obtenir l'inverse de "a" on met le dernier caractère en tête:
"a" et on le colle à l'inverse du reste qui est ""
- on a donc "cba"
unction inverse(st: string): string;
var dernier_caractere: char;
reste: string;
inverse_du_reste: string;
begin
if st = '' then
inverse := '' {--- ceci est le point d'appui ---}
else
begin
dernier_caractere := st[length(st)];
reste := copy(st, 1, length(st) - 1);
inverse_du_reste := inverse(reste);
inverse := dernier_caractere + inverse_du_reste;
end;
end;
procedure inverse(var st: string);
var dernier_caractere: char;
reste: string;
begin
if st = '' then st := '' //--- ceci est le point d'appui, inutile ici
else //--- on aurait pu traduire cela par "if st<>'' then"
begin
dernier_caractere := st[length(st)];
reste := copy(st, 1, length(st) - 1);
inverse(reste); //--- on inverse le reste
st := dernier_caractere + reste;
end;
end;
Soit une chaîne de caractères; supposons qu'on veuille faire aussi bien la fonction que la procédure qui nous renvoient l'inverse de cette chaîne; la fonction admet donc un paramètre qui est la chaîne initiale (transmise par valeur), et la procédure un paramètre qui est une variable de type "string" (transmis par adresse, c'est à dire en utilisant le mot "var" devant, qui indique que toutes les modifications du paramètre à un niveau quelconque de la procédure récursive se répercuteront sur le paramètre initial).
De manière itérative, cette fonction et cette procédure se font très facilement :on parcourt la chaîne d'un bout à l'autre et on accumule les caractères un par un dans une chaîne auxiliaire en prenant soin de mettre chaque nouveau caractère en tête de la chaîne auxiliaire. Voici cette première solution :
function inverse(st: string):
string; var aux: string;
i: integer;
begin aux := '';
for i := 1 to length(st) do
aux := st[i] + aux;
inverse := aux;
end; procedure inverse(var st: string);
var aux: string;
i: integer;
begin
aux := ''; for i := 1 to length(st) do aux := st[i] + aux; st := aux; end;
2eme methode
soit une chaîne 'abc'
- pour obtenir son inverse on met le dernier caractère en tête:
"c" et on le colle à l'inverse du reste qui est "ab"
- pour obtenir l'inverse de "ab" on met le dernier caractère en tête:
"b" et on le colle à l'inverse du reste qui est "a"
- pour obtenir l'inverse de "a" on met le dernier caractère en tête:
"a" et on le colle à l'inverse du reste qui est ""
- on a donc "cba"
unction inverse(st: string): string;
var dernier_caractere: char;
reste: string;
inverse_du_reste: string;
begin
if st = '' then
inverse := '' {--- ceci est le point d'appui ---}
else
begin
dernier_caractere := st[length(st)];
reste := copy(st, 1, length(st) - 1);
inverse_du_reste := inverse(reste);
inverse := dernier_caractere + inverse_du_reste;
end;
end;
procedure inverse(var st: string);
var dernier_caractere: char;
reste: string;
begin
if st = '' then st := '' //--- ceci est le point d'appui, inutile ici
else //--- on aurait pu traduire cela par "if st<>'' then"
begin
dernier_caractere := st[length(st)];
reste := copy(st, 1, length(st) - 1);
inverse(reste); //--- on inverse le reste
st := dernier_caractere + reste;
end;
end;