Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Scheme
Scheme Forum d'entraide sur la programmation en langage fonctionnel Scheme
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/04/2011, 18h40   #1
Debinfo75
Invité régulier
 
Homme
Enseignant
Inscription : avril 2011
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2011
Messages : 26
Points : 7
Points : 7
Par défaut Suite de Syracuse

Désolé pour le post précédent, il s'agit bien de la suite dite de Syracuse et non de Césaro.

Bonjour,

je tente en vain de définir une fonction qui rend le n-iéme terme de cette suite définie par Un+1 = Un/2 si Un pair, et (3*Un)+1 si Un impair, à partir de Uo fixé.

Je prends 2 variables n le rang du terme, et p le premier terme.
Je ne parviens pas à construire la récurrence.
Je pose
if (= n 0)
p
J'ai fait des essais directs à partir de cette étape, j'ai également essayé de passer par une seconde condition sur n = 1 suivie de (even? p) p/2 sinon (3p)+1. mais je n'arrive pas à démarrer la récurrence.

A votre avis, faut-il 2 variables?

Merci par avance des idées qui pourraient débloquer ma réflexion.

Cordialement.
Debinfo75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2011, 00h16   #2
So.Ta
Membre à l'essai
 
Inscription : avril 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 18
Points : 22
Points : 22
Ce que je ferai de mon côté, c'est d'abord de créer une fonction qui prenant le Uo et rend une liste contenant tous les termes de la suite de Syracuse calculés. Et puis une seconde fonction, prenant comme argument la liste précédente et d'abord vérifiant si la liste a autant de termes de que celui qu'on demande et puis aller le chercher dans la liste.

Je n'ai pas encore vraiment cherché à le faire en vrai mais voilà la manière dont je procéderai.

EDIT : Voilà, j'ai mis en application mon idée. Je me pose juste une question. Est-ce que tu comptes tout faire toi-même ? En soit, cela serait un bon exercice mais de mon côté je n'ai pas eu le courage et j'ai employé des fonctions de la bibliothèque standard pour l'extraction du i-ème terme. Quoi que je viens de trouver une fonction qui le faisait directement.
So.Ta est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/04/2011, 10h07   #3
Trap D
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 434
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 434
Points : 5 299
Points : 5 299
So.Ta >> ton idée est tout à fait dans l'esprit du fonctionnel mais je pense qu' elle dépasse le niveau d'un débutant.
Le plus simple à mon avis est une fonction a trois arguments (syracuse n v nmax) ou n est le numéro d'indice courant , nmax le numero d'indice désiré et v la valeur courante de la suite. On lance avec (syracuse 1 2011 100) par exemple.
On peut ensuite réfléchir pour passer de 3 à seulement deux arguments.
__________________
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés

Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi
Trap D est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/04/2011, 11h51   #4
So.Ta
Membre à l'essai
 
Inscription : avril 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 18
Points : 22
Points : 22
Trap.D >> Cela fait longtemps que je n'avais pas fait de Scheme d'où peut-être un légère tendance à prendre un chemin plus compliqué[1] mais c'est vrai que la solution que tu proposes est plus facile à implémenter.

Debinfo75 >> Si tu passes encore sur ce sujet, peux-tu nous dire où en es-tu de ton côté ?
So.Ta est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/04/2011, 15h07   #5
Debinfo75
Invité régulier
 
Homme
Enseignant
Inscription : avril 2011
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2011
Messages : 26
Points : 7
Points : 7
Merci à vous.

Je reviens sur le sujet et y réfléchis de nouveau.
Tardivement, en tout cas pas à la mesure de votre disponibilité.
Je vous tiens au courant de ma progression.

A nouveau merci.
Cordialement.
Debinfo75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 23h02   #6
bazoga
Candidat au titre de Membre du Club
 
almaghribi Abo trika
Inscription : novembre 2009
Messages : 58
Détails du profil
Informations personnelles :
Nom : almaghribi Abo trika

Informations forums :
Inscription : novembre 2009
Messages : 58
Points : 12
Points : 12
Bonsoir,

si j'ai bien compris, voila un une fonction qui rend le nieme terme:

Code :
1
2
3
4
5
6
7
(define (nieme-terme n u0)
   (let and-next ((terme0  u0)
                 (comp n))
     (cond ((zero? comp)    terme0)
           ((even? terme0) (and-next (/ terme0 2) (- comp 1))) 
           (else (and-next (+ (* 3 terme0) 1) (- comp 1))))))
Cordialement
E. Bazoga
bazoga est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h37.


 
 
 
 
Partenaires

Hébergement Web