rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Somme des entiers impairs

marina, le mardi 12 février 2008 à 14:37:20
Bonjour,

je dois écrire une fonction récursive qui calcule les entiers impairs , par exemple si n = 3 , je calcule 1+3+5 , les 3 premiers impairs . Je dois le faire en langage scheme . On remarque que 1+3+5 c'est :

2*n - 1 + 2*(n-1) -1 + 2*(n-2)-1

voici mon début de code :

(define (somme-impairs n)
(if (= n 0)
0
(somme-impairs (- (* 2 (- n 1)) 1))))

mais ça fait beuguer mon pc , quelqu'un pourrait il m'aider svp ?

merci beaucoup .
Répondre à marina  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fiddy, le mardi 12 février 2008 à 14:45:14
salut,

Ca fait buguer ton pc, tu peux être plus précise ?

Google is your friend
Répondre à fiddy

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
marina, le mardi 12 février 2008 à 14:49:09
oui , ça bouffe toute la mémoire , surement parce que ma fonction s'appelle indéfiniment , pourtant je fais bien décroite n ...
Répondre à marina

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fiddy, le mardi 12 février 2008 à 15:07:50
n, ne décroît pas, il augment. Tu fais 2*(n-1)-1, c'est une fonction croissante.

Google is your friend
Répondre à fiddy

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
marina, le mardi 12 février 2008 à 15:15:27
ça n'a pas de sens je crois ce que tu dis et ça se voit car mon programme marche pas :) :

(define (somme-impairs n)
(if (= n -1)
0
(somme-impairs (- (* 2 (- n 1)) 1))))
Répondre à marina

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fiddy, le mardi 12 février 2008 à 15:19:24
Oui, en fait il y a un autre problème

n ne décroît pas. Par exemple tu prends n=5, tu relances ta fonction récursivement avec n=2*(5-1)-1=7, n augmente.
La fonction 2(n-1)-1 est croissante. Voilà pourquoi ton programme ne marche pas, cela doit produire un débordement de pile.

Google is your friend
Répondre à fiddy

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
marina, le mardi 12 février 2008 à 15:24:22
mon schéma de base c'est ça : les 3 1ers entiers impairs , 1+3+5 , donc c'est :

2*3 - 1 + 2*2 -1 + 2*1 - 1

saurais tu comment le mettre en fonction récursive ? merci
Répondre à marina

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
BoOmSoluTioN, le mardi 12 février 2008 à 15:41:12
Bonjour

int fx(int n)
{
if(n>=1) return (fx(n-1)+(2*n-1));
else return 0;
}

utiliser :
....
w=fx(3);
Répondre à BoOmSoluTioN

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fiddy, le mardi 12 février 2008 à 15:31:41
Tu peux faire une récursivité ascendante avec deux paramètres.
Le premier paramètre sera n, et tu le décrémenteras de 1, et le deuxième sera l'addition, qui contiendra la somme des impairs.

Je te mets l'appel de la fonction (somme-impairs (- n 1) (+ addition (- (* (- n 1) 2) 1)))
Et ta condition d'arrêt sera maintenant n=0.
La somme sera alors contenue dans la variable addition.
Google is your friend
Répondre à fiddy

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
marina, le mardi 12 février 2008 à 15:35:03
malheuresement ça ne va pas car si je fais :

(define (somme-impairs n)
(if (= n 0)
-1
(somme-impairs (- n 1) ((- (* (- n 1) 2) 1)))))

et que je teste :

(somme-impairs 3)
. procedure application: expected procedure, given: 3 (no arguments)

en argument je devrais avoir une procédure et là comme je dois donner un entier en argument ça ne colle pas...
Répondre à marina

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
marina, le mardi 12 février 2008 à 15:43:36
j'ai recodé mon programme :

(define (somme-impairs n)
(if (= n 0)
0
(+ (somme-impairs (- n 1)) (- (* (- n 1) 2) 1))))

mais là si je fais somme-impairs 3 , j'obtiens 3 et non 9...
Répondre à marina

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fiddy, le mardi 12 février 2008 à 16:01:16
C'est pas vraiment ce que je t'ai conseillé.

(define (somme-impairs n somme)
(if (= n 0)
somme
(somme-impairs (- n 1) (- (* (- n 1) 2) 1))
)
)
Et pour lancer le programme (somme-impairs 3 0) par exemple
J'espère que ça marchera
Google is your friend
Répondre à fiddy

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
marina, le mardi 12 février 2008 à 16:10:15
ça ne va pas car mon exercice exige qu'il y ait un seul argument dans ma fonction , je dois avoir :

(somme-impairs 3) = 9

je ne sais plus quoi faire...
Répondre à marina

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fiddy, le mardi 12 février 2008 à 16:15:11
Ok, je savais pas, dans ce cas, je te propose :

(define (somme-impairs n)
(if (= n 0)
0
(+ (- (* (- n 1) 2) 1) (somme-impairs (- n 1)))
)
)

Google is your friend
Répondre à fiddy

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
marina, le mardi 12 février 2008 à 16:17:18
alors la fonction compile bien mais si je fais :

(somme-impairs 3) , ça me rend 3
Répondre à marina

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fiddy, le mardi 12 février 2008 à 16:22:48
T'inquiète, on va réussir ;)
Normal, j'ai fait une tite boulette.
Remplace la ligne qu'il faut par :
(+ (- (* n 2) 1) (somme-impairs (- n 1)))

Là, ça devrait marcher lol
Google is your friend
Répondre à fiddy

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
marina, le mardi 12 février 2008 à 16:37:00
merci infiniment fiddy ça marche , c'est super smpa :) , tu fais du scheme souvent ou pas ?
Répondre à marina

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fiddy, le mardi 12 février 2008 à 16:40:35
Euh en fait, j'en ai jamais fait. Mais j'ai déjà fait du lisp, ça ressemble un peu ;)
Google is your friend
Répondre à fiddy

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
marina, le mardi 12 février 2008 à 16:43:27
oui c'est dérivé du lisp , bon je continue mes petits exercices , merci bcp pour ton aide , je reviendrai surement poster pour l'algorithmique , car pour la syntaxe je me démerde , @+ ;)
Répondre à marina

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
fiddy, le mardi 12 février 2008 à 16:45:01
Pas de problème ;)
Google is your friend
Répondre à fiddy

20


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lamiss, le vendredi 29 février 2008 à 00:53:24
bonjour je souhaiterais de l'aide svp j'arrive pa a repondre a 1 question d'un devoir niv 2nde:
pourquoi la somme de 3 nombres impairs consécutifs n'est jamais premier?
aidez moi svp je bloke sur 1 kestion ki a l'air assez simple
merci d'avance
Répondre à lamiss

21


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
fiddy, le vendredi 29 février 2008 à 02:41:58
Salut,

Avant de poser ton problème, tu dois te créer ton propre post ! De plus, tu dois regarder si tu es dans la bonne catégorie. Ici, il s'agit de programmation, je vois pas le rapport !
Sinon, pour répondre à ta question.
Soit n un entier naturel quelconque.
Alors 2n+1,2n+3,2n+5 sont trois entiers impairs consécutifs.
Combien fait leur somme ? Et enfin, par quoi peux-tu factoriser ?
Conclusion ?

Cordialement
Google is your friend
Répondre à fiddy

24


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lamiss, le samedi 1 mars 2008 à 00:47:38
désolé d'avoir mis mon message ici je ne savais point où le mettre et c'était assez urgent
je te remercie énormément de m'avoir éclaircit sur mon problème!!!!! maintenant je sais comment faire grâce à toi :) :)
cordialement
Répondre à lamiss
Logiciels pertinents trouvés dans les téléchargements
Télécharger PSP Video 9 2.25PSP Video 9 - PSP Video 9 est un outil de conversion gratuit permettant de convertir des fichiers vidéo (avi, divx, mpeg, etc.) au formats...Catégorie: Edition vidéo
Licence: Freeware/gratuit
Télécharger SyncBack 3.2.19.0SyncBack - SyncBack est un logiciel de synchronisation de répertoires. Il peut être utilisé: pour effectuer des backups de fichiers...Catégorie: Sauvegarde
Licence: Freeware/gratuit
Télécharger MOREFUNC (Macro complémentaire EXCEL) 5.06MOREFUNC (Macro complémentaire EXCEL) - Morefunc est une macro complémentaire proposant 67 nouvelles fonctions de feuille de calcul pour Excel. Ces fonctions sont...Catégorie: Tableur
Licence: Freeware/gratuit
Télécharger HTMLDOC 1.8.24HTMLDOC - HTMLDOC est un outil permettant de convertir une page HTML (Hyper-Text Markup Language) vers un fichier HTML indexé, vers...Catégorie: PDF
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « somme des entiers impairs »