Sirul lui Fibonaci

Ca si orice alta activitate, programarea depinde mult de factorul uman. Hai sa vedem ce ne face pe noi sa butonam.

Sirul lui Fibonaci

Postby MrKasz123 » 10 Jan 2012, 19:36

Dupa cum se stie,sirul lui Fibonaci este 1,2,3,5,8,13,21,34..etc.

Regula:
a1=1
a2=2
a3=a1+a2
a4=a2+a3
a5=a3+a4

Cerinta:Trebuie sa generez primii n termeni din sir

M-am gandit sa pastrez intr-o variabila primul element si in alta variabila al doilea element,dupa care sa le adun
primul element sa devina al doilea iar al doilea va deveni elementul aflat(suma) . ACEASTA CHIAR ESTE REGULA CU CARE SE VA FACE PROGRAMUL, dar nu stiu cum sa o aplic, daca ma poate ajuta cineva va rog frumos sa o faca.
0,0p / 0 votes
Munca lungeste viata, lenea o scurteaza.

Nu lasa pe maine ce poti face azi.

Munca intareste pe om, lenea il ofileste.
User avatar
MrKasz123
Bit
 
Joined: 09 Jan 2012
Location: Bucharest
Status: 0

Re: Sirul lui Fibonaci

Postby jolgau » 10 Jan 2012, 19:43

  1. #include<iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. int a,p,f,n,i;
  7.  
  8. cin>>n;
  9.  
  10. a=0;
  11. p=0;
  12. f=1;
  13. for(i=1; i<=n; i++)
  14.     {
  15.     cout<<f;
  16.     a=p;
  17.     p=f;
  18.     f=a+p;
  19.     }
  20.  
  21. return 0;
  22. }
  23.  
0,0p / 0 votes
User avatar
jolgau
Bit
 
Joined: 11 Dec 2010
Status: 0

Re: Sirul lui Fibonaci

Postby eni4ever » 10 Jan 2012, 19:59

Ceea ce spui tu este corect :
  1.  
  2. Citește n număr natural
  3. Dacă n este egal cu 1 atunci
  4.   Afișează "0"
  5. altfel
  6.   Pune în n diferența dintre n și 2
  7.   Avem elementele fibcurent neinițializat, fibp inițializat pe 0 si fibs inițializat pe 1
  8.   Pentru fiecare număr din intervalul [1,n]
  9.     Setează fibcurent pe suma dintre fibp și fibs
  10.     Pune în fibp pe fibs
  11.     Pune în fibs pe fibcurent
  12.   Sfârșit Pentru
  13.  Afișează fibs
  14. Sfârșit Dacă

+ un mic exemplu se cere :
n = 5;
fibp = 0, fibs = 1, fibcurent = valoare nesemnificativă;
n = 5 - 2 = 3
Pentru ciclul 1:
fibcurent = fibp + fibs = 0 + 1 = 1;
fibp = fibs = 1;
fibs = fibcurent = 1;
Pentru ciclul 2:
fibcurent = fibp + fibs = 1 + 1 = 2;
fibp = fibs = 1;
fibs = fibcurent = 2;
Pentru ciclul 3:
fibcurent = fibp + fibs = 1 + 2 = 3;
fibp = fibs = 2;
fibs = fibcurent = 3;
Rezultă afișarea lui fibs = 3;


Și cu asta, basta. Vezi că șirul lui Fibonacci are defapt următoarea formă :
0 1 1 2 3 5 8 ...
0,0p / 0 votes
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: Sirul lui Fibonaci

Postby MrKasz123 » 10 Jan 2012, 20:17

  1. #include<stdio.h>
  2. int a1,a2,i,s,n;
  3. int main()
  4. {freopen("date.in","r",stdin);
  5. freopen("date.out","w",stdout);
  6. scanf("%d",&n);
  7. a1=1;
  8. a2=2;
  9. printf("1 2 ");
  10.     for(i=3;i<=n;i++)  
  11.         {
  12.         s=a1+a2;  
  13.         a1=a2;  
  14.         a2=s;
  15.         printf("%d ",s);
  16.         }
  17. return 0;
  18. }

Multumesc , dar serios acum, l-am facut dupa primul minut in care am postat aici problema, a fost foarte usor
0,0p / 0 votes
Munca lungeste viata, lenea o scurteaza.

Nu lasa pe maine ce poti face azi.

Munca intareste pe om, lenea il ofileste.
User avatar
MrKasz123
Bit
 
Joined: 09 Jan 2012
Location: Bucharest
Status: 0

Re: Sirul lui Fibonaci

Postby andreiandreiq » 10 Jan 2012, 20:53

@ MrKasz123: Nu cred ca ai tinut cont de ce ti-a zis eni4ever, sirul lui Fibonacci este: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,.. cum observi incepe cu 0. Si din cate vad nu ai respectat acest lucru (nu am compilat codul tau, doar din ce am vazut mi-am dat seama, scuze daca am gresit).

Offtopic
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Sirul lui Fibonaci

Postby MrKasz123 » 10 Jan 2012, 21:47

am reparat greseala, multumesc
0,0p / 0 votes
Munca lungeste viata, lenea o scurteaza.

Nu lasa pe maine ce poti face azi.

Munca intareste pe om, lenea il ofileste.
User avatar
MrKasz123
Bit
 
Joined: 09 Jan 2012
Location: Bucharest
Status: 0

Re: Sirul lui Fibonaci

Postby andreiandreiq » 10 Jan 2012, 21:59

@MrKasz123: Poti sa postezi codul corect? Ca am văzut ca nu ai editat postul de mai sus unde ai postat inițial rezolvarea.
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Sirul lui Fibonaci

Postby MrKasz123 » 10 Jan 2012, 22:25

  1. #include<stdio.h>
  2. int a1,a2,i,s,n;
  3. int main()
  4. {freopen("date.in","r",stdin);
  5. freopen("date.out","w",stdout);
  6. scanf("%d",&n);
  7. a1=1;
  8. a2=2;
  9. printf("0 1 1 2 ");
  10.     for(i=3;i<=n-2;i++)  
  11.         {
  12.         s=a1+a2;  
  13.         a1=a2;  
  14.         a2=s;
  15.         printf("%d ",s);
  16.         }
  17. return 0;
  18. }
0,0p / 0 votes
Munca lungeste viata, lenea o scurteaza.

Nu lasa pe maine ce poti face azi.

Munca intareste pe om, lenea il ofileste.
User avatar
MrKasz123
Bit
 
Joined: 09 Jan 2012
Location: Bucharest
Status: 0

Re: Sirul lui Fibonaci

Postby eni4ever » 10 Jan 2012, 22:28

Rezolvarea ta nu este completă. Dacă eu dau lui n valoarea 2, tu ce-mi afișezi ?
0,0p / 0 votes
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: Sirul lui Fibonaci

Postby MrKasz123 » 10 Jan 2012, 23:12

Scuze, acum m-am uitat inca odata peste cerinta si este sirul care l-am spus la inceput, nu cel care incepe cu 0,cu sinceritate ,
  1. #include<stdio.h>
  2. int a1,a2,i,s,n;
  3. int main()
  4. {freopen("date.in","r",stdin);
  5. freopen("date.out","w",stdout);
  6. scanf("%d",&n);
  7. a1=1;
  8. a2=2;
  9. if(n==1)
  10.     printf("1");
  11. if(n>=2)   
  12.     printf("1 2 ");
  13. for(i=3;i<=n;i++)  
  14.         {
  15.         s=a1+a2;  
  16.         a1=a2;  
  17.         a2=s;
  18.         printf("%d ",s);
  19.         }
  20. return 0;
  21. }
0,0p / 0 votes
Munca lungeste viata, lenea o scurteaza.

Nu lasa pe maine ce poti face azi.

Munca intareste pe om, lenea il ofileste.
User avatar
MrKasz123
Bit
 
Joined: 09 Jan 2012
Location: Bucharest
Status: 0

Re: Sirul lui Fibonaci

Postby andreiandreiq » 10 Jan 2012, 23:31

^ Ciudat, poți sa ne pui un link cu cerința ?
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Sirul lui Fibonaci

Postby Cosmin_NTG » 10 Jan 2012, 23:43

In caz ca intereseaza pe cineva, vin si eu cu o implementare (mai eleganta, zic eu) C++ cu vectori (sau tablouri unidimensionale).
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.      int n, v[50], i;
  6.      cout<<"n=";
  7.      cin>>n;
  8.      v[1]=1;
  9.      v[2]=2;
  10.      for(i=3; i<=n; i++)
  11.      {  v[i]=v[i-1]+v[i-2]; }
  12.      for(i=1; i<=n; i++)
  13.          cout<<v[i]<<" ";
  14.      return (0);
  15. }
0,0p / 0 votes
Last edited by Cosmin_NTG on 11 Jan 2012, 00:46, edited 1 time in total.
Thinking about solutions is better than thinking about problems
User avatar
Cosmin_NTG
Byte
 
Joined: 11 Jan 2011
Location: 192.2L1.44G
Status: 10

Re: Sirul lui Fibonaci

Postby Mihai » 11 Jan 2012, 00:04

@Cosmin:
Nu știu în ce măsură aș cataloga o implementare care folosește memorie suplimentară atunci când chiar nu este nevoie ca fiind mai elegantă :). În plus, la o scurtă analiză ai observa faptul că nu ai absolut niciun motiv să aloci 1000 de elemente de tip întreg pentru a salva numerele; de ce spun că nu are rost aș vrea însă să-ți dai seama singur.

MrKasz123 wrote:Multumesc , dar serios acum, l-am facut dupa primul minut in care am postat aici problema, a fost foarte usor

Departe de mine gândul de a fi răutăcios, dar nu consider că Bitcell trebuie să se transforme într-un "site de probleme". Da, înțeleg să ceri ajutorul la rezolvarea unei probleme (la urma urmei, forumul caută să faciliteze schimbul de cunoștințe) dar abia după ce te-ai chinuit să o rezolvi. Nu sunt de acord totuși cu postarea oricărei probleme întâlnite, cu atât mai mult cu cât nici măcar nu s-a încercat rezolvarea ei.
0,0p / 0 votes
User avatar
Mihai
Byte
 
Joined: 29 Dec 2009
Status: 25

Re: Sirul lui Fibonaci

Postby MrKasz123 » 11 Jan 2012, 00:27

am spus ca am facuto imediat dupa ce am postato si o postez pentru cei ce nu stiu sa o faca
si apropo pentru cei ce nu ma cred cum ar fi ^andreiandreiq sau ^eni4ever uitati linkul
http://www.doc.ic.ac.uk/~wjk/C++Intro/RobMillerE8.html
uitativa la sir
nu ma mai acuzati
0,0p / 0 votes
Munca lungeste viata, lenea o scurteaza.

Nu lasa pe maine ce poti face azi.

Munca intareste pe om, lenea il ofileste.
User avatar
MrKasz123
Bit
 
Joined: 09 Jan 2012
Location: Bucharest
Status: 0

Re: Sirul lui Fibonaci

Postby Cosmin_NTG » 11 Jan 2012, 00:48

Cand am zis "mai eleganta" m-am referit la aspectul codului care se imbina destul de bine (acum) cu functionalitatea. Intr-adevar, nu trebuia sa pun acea lungime a vectorului, de aceea am si modificat (am pus 50).
0,0p / 0 votes
Thinking about solutions is better than thinking about problems
User avatar
Cosmin_NTG
Byte
 
Joined: 11 Jan 2011
Location: 192.2L1.44G
Status: 10

Re: Sirul lui Fibonaci

Postby likeromanian » 14 Mar 2012, 21:03

A testat cineva pentru n=3?!Afiseaza 1 2 3...Trebuia afisat 1 1 2
0,0p / 0 votes
User avatar
likeromanian
Bit
 
Joined: 29 Jan 2012
Status: 0

Re: Sirul lui Fibonaci

Postby mihaibr » 14 Mar 2012, 21:52

^ai citit primul post? :(
MrKasz123 wrote:Dupa cum se stie,sirul lui Fibonaci este 1,2,3,5,8,13,21,34..etc.

Regula:
a1=1
a2=2
a3=a1+a2
a4=a2+a3
a5=a3+a4
0,0p / 0 votes
Image
User avatar
mihaibr
Bit
 
Joined: 02 Jul 2011
Location: Romania,Braila
Status: 6

Re: Sirul lui Fibonaci

Postby andreiandreiq » 14 Mar 2012, 21:55

likeromanian wrote:A testat cineva pentru n=3?!Afiseaza 1 2 3...Trebuia afisat 1 1 2


Pentru n=3, trebuie sa afișeze 0 1 1 (uitate la forma șirului).
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Sirul lui Fibonaci

Postby mihaibr » 14 Mar 2012, 22:06

dupa regula din primul post eu cred ca daca afiseaza 1 2 3 e bine
primi 2 termeni fiind definiti ca 1 si 2
L.E.: wikipedia spune altceva :D ^ai dreptate scuze ;)
0,0p / 0 votes
Image
User avatar
mihaibr
Bit
 
Joined: 02 Jul 2011
Location: Romania,Braila
Status: 6

Re: Sirul lui Fibonaci

Postby likeromanian » 14 Mar 2012, 23:04

Da,dar eu am problema incepand de la 1.
0,0p / 0 votes
User avatar
likeromanian
Bit
 
Joined: 29 Jan 2012
Status: 0


Return to Discutii despre programare

Who is online

Users browsing this forum: No registered users and 0 guests