Posted January 25, 201015 yr Voila je dois creer une fonction qui donne les nombres de Fibonnaci pairs mais celle que j ai fais ne fonctionne pas ;-( Suite de Fibonnaci main (){ int a; int b; int c; a=1; b=2; print 1; print 1; encore: a=a-1; b=b-2; c=a+b; if (n&1==1) go to encore; printf ("%d ",c); go to encore; } l erreur est erreur: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘de’ ili375@ultra5$ Merci de votre aide :(
January 25, 201015 yr Author Quel est le langage utilisé ? Du C, mais je crois que le probleme est resolu il semble que ce soit betement um probleme de librairies qui netaient pas indiques
January 25, 201015 yr Une version simple faite en deux minutes au boulot version naïve, on calcul fibonnaci(x), s'il est pair on l'affiche, puis on calcul fibonnaci(x+1)... #include <stdio.h> int fibo (int n) { if (n==1) return 1; if (n==0) return 0; return (fibo(n-1) + fibo(n-2)); } int main () { int r; int step; step = 2; while (step < 20) { r=fibo(step); if (r%2==0) printf("%d\n", r); step++; } return 0; } Charge a toi d'optimiser ca, histoire d'éviter de recalculer plein de fois les mêmes nombres.
January 26, 201015 yr Quel est le langage utilisé ? Du C, mais je crois que le probleme est resolu il semble que ce soit betement um probleme de librairies qui netaient pas indiques évite les boucles inconditionnelles. pour 3 raisons : 0 - premièrement, tout ce qui est fait par goto pourrait être fait autrement . ( ici, au dessus, t'as une solution simple avec une fonction récursive ) 1 - deuxièmement : L'utilisation de Goto peut entraîner des erreurs dans la gestion de la mémoire. ( surtout en Java ou dans n'importe quel langage qui inclut un camion-poubelle ( garbage collector en Shakespirien )). 2 - troisièmement : le code est illisible.
January 26, 201015 yr Quel est le langage utilisé ? Du C, mais je crois que le probleme est resolu il semble que ce soit betement um probleme de librairies qui netaient pas indiques évite les boucles inconditionnelles. pour 3 raisons : 0 - premièrement, tout ce qui est fait par goto pourrait être fait autrement . ( ici, au dessus, t'as une solution simple avec une fonction récursive ) 1 - deuxièmement : L'utilisation de Goto peut entraîner des erreurs dans la gestion de la mémoire. ( surtout en Java ou dans n'importe quel langage qui inclut un camion-poubelle ( garbage collector en Shakespirien )). 2 - troisièmement : le code est illisible. on dit pas un ramasse-miette plutôt en français? Sinon, +1 pour l'évitement à tout prix du goto: c'est moche, c'est sale, et ça rend le code illisible. Un simple while par exemple, avec un if, ferait très bien l'affaire. Quand tu codes, penses toujours "mon bout de code va s'insérer dans un projet de 50000 lignes, faut que j'écrive un code qui soit le plus simple à comprendre"
January 26, 201015 yr Ou alors, dans le genre barbare tu peux aussi exploiter le coté "remarquable" de la suite de fibonnaci, pour eviter d'avoir la moindre boucle ou récursivité... F(x) = pow((sqrt(5)+1)/2, x)/sqrt(5); (et gérer la conversion double -> int avec le traitement de l'arrondi) Attention tout de même, arrivé a un moment il y aura des problèmes au niveau de la gestion des arrondis pour les sqrt(5). Enfin de mémoire (j'ai eu le même genre de problème à la fac, donc y a quelques temps déjà ^^), le problème d'arrondi n'est pas vraiment visible vu qu'avant de le rencontrer tu dépasses les capacités des int et/ou tu te retrouves avec des nombres négatif
January 29, 201015 yr Hum y'a pas de goto en Java hein Sinon en python : def fibo(n): a,b=1,1 while(a<n): if a%2==0: print(a) a,b=b,a+b
February 6, 201015 yr goto est un mot réservé, mais l'instruction n'existe pas. Mais break et continue permettent de réaliser des sauts inconditionnels de la même façon : http://java.sun.com/developer/TechTips/2000/tt0613.html ( oups, je ne devrais pas ). Pour goto, quand j'étais tout petit, je m'amusais à faire des programmes en Basic ( qui n'avait pas encore la fonction RENUM , fonction qui permettait de réaffecter les numéros successifs des lignes) : ( 1982~1983 ). 10 PRINT " Bonjour." 20 ? " Entrez la valeur de X " 30 INPUT X 35 IF X < 54 THEN GOTO 60 37 IF X > 54 THEN GOTO 100 40 ? " Bravo ! vous avez trouvé !" 50 GOTO 120 60 ? " Trop petit " 70 GOTO 20 100 ? " Trop grand " 110 GOTO 20 120 ? " Au revoir." C'était une machine qui avait son système d'exploitation ( MS-DOS ) sur disquette 5"1/4. Bon, je pense qu'il vaut mieux commencer par apprendre les syntaxes du C et de Freepascal , aujourd'hui.
February 22, 201015 yr #include <stdio.h> #define CALC_LIMIT 1000000000 int main() { int i; int j; int res; i = 0; j = 1; res = 0; while (res <= CALC_LIMIT) { if (res % 2 == 0) printf("%i\n", res); res = j + i; j = i; i = res; } return (0); } (ramnes@freebsd-6 ~/test) time ./a.out 0 2 8 34 144 610 2584 10946 46368 196418 832040 3524578 14930352 63245986 267914296 real 0m0.004s user 0m0.000s sys 0m0.004s
Archived
This topic is now archived and is closed to further replies.