[sous débutant] problème avec prg (résolut )

problème avec prg (résolut ) [sous débutant] - C++ - Programmation

Marsh Posté le 30-12-2002 à 16:27:53    

voici mon programme(suite de fibonacci):
#include <stdio.h>
main()
{
int i,a;
int t[100];
t[0]=1;
t[1]=1;
for(i=2;i<100;i++)
{
t[i]=t[i-1]+t[i-2];
printf("%d\n",t[i]);
}
scanf("%d",a);
}
 
après l' avoir compillé sans érreurs :) voici ce qu'il m' affiche:
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
-1323752223
512559680
-811192543
-298632863
-1109825406
-1408458269
1776683621
368225352
2144908973
-1781832971
363076002
-1418756969
-1055680967
1820529360
764848393
-1709589543
-944741150
1640636603
695895453
-1958435240
-1262539787
1073992269
-188547518
885444751
696897233
1582341984
-2015728079
-433386095
1845853122
1412467027
-1036647147
375819880
-660827267
-285007387
-945834654
-1230842041
2118290601
887448560
-1289228135
-401779575
-1691007710
-2092787285
511172301
-1581614984
-1070442683
1642909629
572466946
-2079590721
-1507123775
708252800
-798870975
-90618175
-889489150
-980107325
 
Et c'est ça le problème  :??: , j'ai des nombres négatif qui apparaissent alors que dans la suite de fibonacci c'est pas possible.
suite de fibonacci :
F1 = F2 = 1  
Fi = Fi - 1 + Fi - 2 pour i > 2.
 
  si qu'elle qu'un pouvant m'aider moi pauvre débutant, ce serait vraiment sympa.


Message édité par beber_bis le 14-01-2003 à 11:32:42
Reply

Marsh Posté le 30-12-2002 à 16:27:53   

Reply

Marsh Posté le 30-12-2002 à 16:48:28    

Normal, tes résultats,
le Xième élément de la suite de Fibonnachi depasse largement les capacités d'un simple int de C/C++ d'où une opération modulo MAX_INT..., essaie avec un unsigned long

Reply

Marsh Posté le 30-12-2002 à 17:00:42    

J'ai essayez avec unsigned long, mais ce me donne le même résultat. :cry:

Reply

Marsh Posté le 30-12-2002 à 20:14:46    

svp plait aidez moi? :sarcastic:

Reply

Marsh Posté le 30-12-2002 à 20:19:19    

Le problème, c'est que tu utilise des nombres qui dépassent la capacité d'un entier 32 bits. Il faudrait utiliser des entiers 64 bits (je sais pas si c'est possible sur des procs 32 bits), ou définir toi même une structure (et les opérations qui vont avec) permettant de stocker ces entiers.

Reply

Marsh Posté le 30-12-2002 à 20:19:51    

hubert? :D

Reply

Marsh Posté le 30-12-2002 à 20:20:56    

ya rien à faire
si tu veux arriver à 100, tu te tates, ou tu fais un truc du genre utiliser deux variables pour afficher un nb

Reply

Marsh Posté le 30-12-2002 à 20:36:55    

SirJeannot a écrit :

ya rien à faire
si tu veux arriver à 100, tu te tates, ou tu fais un truc du genre utiliser deux variables pour afficher un nb


tu veut dire quoi par la ALAIN  :??:

Reply

Marsh Posté le 30-12-2002 à 20:40:06    

ta gueule :D

Reply

Marsh Posté le 30-12-2002 à 20:42:54    

les doubles est le type qui accepte les plus grand nombre je crois, format : "%lf"

Reply

Marsh Posté le 30-12-2002 à 20:42:54   

Reply

Marsh Posté le 30-12-2002 à 20:43:45    

par ex
a et b
a=10 et b=25
en combinant les deux, tu peux faire
1025
c'est plus rapide à expliquer avec un exemple :D

Reply

Marsh Posté le 30-12-2002 à 20:44:55    

Bon tu peut me répondre. :ange:  
Allez joue pas ton radin, dis moi comment faire ou est ce que tu ne le sait pas

Reply

Marsh Posté le 30-12-2002 à 20:49:28    

je vais essayer tout ça.
Merçi
 :sol:

Reply

Marsh Posté le 30-12-2002 à 21:42:56    

Merci Giz j'ai essayer avec les "double"(%lf) et ça a marcher :D ,
que suis-je bète c'était si simple.
voila le résultat si ça vous interresse :
 
2.000000
3.000000
5.000000
8.000000
13.000000
21.000000
34.000000
55.000000
89.000000
144.000000
233.000000
377.000000
610.000000
987.000000
1597.000000
2584.000000
4181.000000
6765.000000
10946.000000
17711.000000
28657.000000
46368.000000
75025.000000
121393.000000
196418.000000
317811.000000
514229.000000
832040.000000
1346269.000000
2178309.000000
3524578.000000
5702887.000000
9227465.000000
14930352.000000
24157817.000000
39088169.000000
63245986.000000
102334155.000000
165580141.000000
267914296.000000
433494437.000000
701408733.000000
1134903170.000000
1836311903.000000
2971215073.000000
4807526976.000000
7778742049.000000
12586269025.000000
20365011074.000000
32951280099.000000
53316291173.000000
86267571272.000000
139583862445.000000
225851433717.000000
365435296162.000000
591286729879.000000
956722026041.000000
1548008755920.000000
2504730781961.000000
4052739537881.000000
6557470319842.000000
10610209857723.000000
17167680177565.000000
27777890035288.000000
44945570212853.000000
72723460248141.000000
117669030460994.000000
190392490709135.000000
308061521170129.000000
498454011879264.000000
806515533049393.000000
1304969544928657.000000
2111485077978050.000000
3416454622906707.000000
5527939700884757.000000
8944394323791464.000000
14472334024676220.000000
23416728348467684.000000
37889062373143904.000000
61305790721611584.000000
99194853094755488.000000
160500643816367070.000000
259695496911122560.000000
420196140727489660.000000
679891637638612220.000000
1100087778366101900.000000
1779979416004714000.000000
2880067194370816000.000000
4660046610375530500.000000
7540113804746346500.000000
12200160415121877000.000000
19740274219868226000.000000
31940434634990100000.000000
51680708854858326000.000000
83621143489848426000.000000
135301852344706760000.000000
218922995834555200000.000000
354224848179262000000.000000
 
 
PS : SirYeannot j'ai finis le programme et le tient il avance.
 

Reply

Marsh Posté le 30-12-2002 à 23:21:04    

beber_bis a écrit :

Merci Giz j'ai essayer avec les "double"(%lf) et ça a marcher :D ,
que suis-je bète c'était si simple.
voila le résultat si ça vous interresse :
 
PS : SirYeannot j'ai finis le programme et le tient il avance.
 
 


 
c'est un peu dommage de travailler avec des flottants alors que ce ne sont que des entiers :p

Reply

Marsh Posté le 01-01-2003 à 14:57:58    

j'ai fini, mais j'aimerai bien mettre l'affichage en X11 des points [:spamafote]

Reply

Marsh Posté le 01-01-2003 à 15:02:31    

xav14 a écrit :


 
c'est un peu dommage de travailler avec des flottants alors que ce ne sont que des entiers :p  

du moment que ca marche
cai des projets info à 2 sous ...  :wahoo:

Reply

Marsh Posté le 02-01-2003 à 01:34:33    

Tu es conscient que les doubles font des aproximations dans les grands nombres ?
Témoin les suites de 0 après les 15 chiffre significatifs.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 02-01-2003 à 23:04:45    

Musaran a écrit :

Tu es conscient que les doubles font des aproximations dans les grands nombres ?
Témoin les suites de 0 après les 15 chiffre significatifs.


 
oui, c'est vrai mais mon prg ne marche qu'avec cette variable.

Reply

Marsh Posté le 02-01-2003 à 23:29:12    

Simple, pour representer le 100 eme nombre de la suite de fibonaci, il te faut environ 69 bits de precision. Donc il te faut travailler sur des int128.
 
Evidemment, si les int128 existaient deja ce serait plus facile :D
 
Par contre, ton programme ne marche pas car il ne calcule pas un resultat exacte qui doit etre 354224848179261915075 pour 100 ( ou 99 je sais plus ). La tu accumulles de plus en plus d'erreurs de calcul.


Message édité par Kristoph le 02-01-2003 à 23:30:51
Reply

Marsh Posté le 02-01-2003 à 23:33:43    

beber_bis a écrit :


 
oui, c'est vrai mais mon prg ne marche qu'avec cette variable.


 
tu voulais dire qu'il ne marche pas :)
 
leGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 02-01-2003 à 23:34:55    

gmp ?

Reply

Marsh Posté le 02-01-2003 à 23:51:13    


 
le jeu ce serait de deviner a partir de quel rang
son programme ne donne plus la bonne valeur.
 
Evidemment on peut ecrire un programme qui ecrit les bonnes valeurs et comparer mais c'est trop facile :)
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 03-01-2003 à 00:05:11    

je sais vous m'attendiez tous... :whistle:  
 
en C ANSI, le type de retour des fonctions n'est pas implicite comme en K&R.
 
donc void main()
 
ou beaucoup mieux
 
int main()
{
  return 0; // <=> EXIT_SUCCESS souvent
}
 
quelqu'un a vu le scanf("%d",a) ?
 
scanf("%d",&a);
 
 
bonus
 
 
float => scanf("%f" ), printf("%f" )
double => scanf("%lf" ), printf("%f" )
long double => scanf("%Lf" ), printf("%Lf" )
 


Message édité par Taz@PPC le 03-01-2003 à 00:10:13

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 14-01-2003 à 11:28:38    

merci a tous mon probleme est réglée :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed