La récursivité

Voir le sujet précédent Voir le sujet suivant Aller en bas

La récursivité

Message  Hanafi le Jeu 13 Nov - 21:07

Voici les exercices interessants que j'ai trouvés sur Internet

Exercice : Fonction Ackerman
Ecrire la spécification, déduire l’algorithme et déclarer les objets d’un module récursif permettant de calculer la fonction Ackerman définie par :
A (0, n) = n+1,
A (m, 0) = A (m-1, 1)
A (m, n) = A (m-1, A(m, n-1))

Exercice :
Ecrire la spécification, déduire l’algorithme et déclarer les objets d’un module récursif permettant de calculer le nombre d’occurrences d’un caractère dans une chaîne de caractères.
avatar
Hanafi

Messages : 106
Date d'inscription : 25/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: La récursivité

Message  Ilyes KHAILI le Lun 24 Nov - 16:20

Bonjour tou le monde cheers
voici la reponse

ex1
uses wincrt;
var m,n:integer;
function Ackerman(m,n:integer):integer;
begin
if m=0 then
Ackerman:=n+1
else
if n=0 then
Ackerman:=Ackerman(m-1,1)
else
Ackerman:=Ackerman(m-1,Ackerman(m, n-1));
end;
begin
write('Donner m = ' );readln(m);
write('Donner n = ' );readln(n);
writeln(Ackerman(m,n));end.

ex2
uses wincrt;
var
ch:string;
c:char;
function occ(ch:string;c:char):integer;
begin
if pos(c,ch)=0 then
occ:=0
else
begin
delete(ch,pos(c,ch),1);
occ:=1+occ(ch,c);
end;
end;
begin
write('Donner une chaïne = ');readln(ch);
write('Donner un caractère = ');readln(c);
if occ(ch,c)=0 then
write(ch,' ne contient pas ',c,'.')
else
write(ch,' contient ',occ(ch,c),' fois ',c,'.')
end.
Very Happy

Ilyes KHAILI

Messages : 24
Date d'inscription : 13/11/2008
Age : 27

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

ça marche !

Message  Saafi RAMI le Lun 24 Nov - 16:45

Mon Ami Mille Bravo Pour Ton Super Travail
tu ma précédé pour afficher la solution ... Evil or Very Mad
avatar
Saafi RAMI

Messages : 37
Date d'inscription : 16/10/2008
Age : 27

Voir le profil de l'utilisateur http://www.imraude.skyrock.com

Revenir en haut Aller en bas

Re: La récursivité

Message  Hanafi le Lun 24 Nov - 17:18

PPCM
C'est très bien, Ilyes !!! Bravo. Merci pour le partage. Concernant le PPCM vous avez mille fois raison. Notre fonction marche que pour les petites valeurs. affraid Et pourquoi ? Parce que on change la valeur de max par a ou bien par b a cause de ces instructions : SI a>b Alors max<--a, min<--b SINON max<--b, min<--a. C.à.d, même si on fait le calcul max <--max+(a+b-min) une fois la fonction retourne au début, elle trouve cette fameuse SI et elle affecte à max la valeur de a ou b. Essayez de la corriger. Very Happy
avatar
Hanafi

Messages : 106
Date d'inscription : 25/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

PPCM

Message  Hanafi le Mer 26 Nov - 14:44

A Ilyes :
Voici le programme de calcul PPCM qui fonctionne avec les grandes valeurs (enfin, pas si grandes, car le type LONGINT comprend l'intervalle [-2147483648..2147483647] Smile

program calcul_ppcm;
uses wincrt;
var a,b,max,min:longint;

function ppcm(max,min:longint):longint;
begin
if max mod min=0 then
ppcm:=max
else
ppcm:=ppcm(max+(a+b-min),min);
end;

begin
repeat
write('Donner a ');
readln(a);
write('Donner b ');
readln(b);
until a*b<>0 ;
if a>b then
begin
max:=a;
min:=b;
end
else
begin
max:=b;
min:=a;
end;
writeln('ppcm=',ppcm(max,min));
end.
Vos commentaires S.V.P
avatar
Hanafi

Messages : 106
Date d'inscription : 25/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

3 en 1

Message  Hanafi le Mer 26 Nov - 15:18

Exercice intéressant proposé par Mr Zarrouki Anis du Lycée OKBA de Kairouan pour le DS1 :
Écrire une analyse et un algorithme qui permet de calculer pour un ordre n donné (n>0), la somme approchée de la série définie par :
S=1 + 1/(5*1!) + 1/(25*2!) + ... + 1/(5n * n!)

NB : la solution proposée à cet exercice doit suivre un raisonnement récursif et non itératif.
J'attends vos solutions. bounce ...
avatar
Hanafi

Messages : 106
Date d'inscription : 25/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: La récursivité

Message  Hanafi le Lun 1 Déc - 22:50

Question Toujours j'attends vos solutionsssssssssssssssssssss !!!!!!!!!!!!!!!!!!!!!!!!!!!!
avatar
Hanafi

Messages : 106
Date d'inscription : 25/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Voila mon essai

Message  Mohamedh hafedh bellil le Ven 5 Déc - 15:00

uses wincrt;
var
n:integer;


function fact(n:integer):longint;
begin
if n=0 then
fact:=1
else
fact:=n*fact(n-1);
end;

function somme(n:integer):real;
begin
if n=0 then
somme:=1
else
somme:=1/(5*n*fact(n))+somme(n-1);
end;

begin
repeat
write('Donner un entier positif n = ');readln(n);
until n>0;
writeln('La somme S = ',somme(n):2:10);
end.
bounce
avatar
Mohamedh hafedh bellil

Messages : 7
Date d'inscription : 24/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: La récursivité

Message  Hanafi le Ven 5 Déc - 16:41

C'est bien, Hafedh, juste une petite remarque : il faut calculer 5n et pas 5*n. C'est mieux d'ajouter une fonction puissance ...
Bonne continuation Smile
avatar
Hanafi

Messages : 106
Date d'inscription : 25/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Voila madam

Message  Mohamedh hafedh bellil le Ven 5 Déc - 17:25

function puiss(n:integer):longint;
begin
if n=0 then
puiss:=1
else
puiss:=5*puiss(n-1);
end;

et modifier la ligne somme:=1/(5*n*fact(n))+somme(n-1); par somme:=1/(puiss(n)*fact(n))+somme(n-1);
avatar
Mohamedh hafedh bellil

Messages : 7
Date d'inscription : 24/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: La récursivité

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum