ya simdi hocamız odev verdi c de fibonacci dizisini oluşturcaz 0 1 1 2 3 5 8 .... diye gitcek malum ben de gayet çaylağım bu konuda söle bişi yaptım
int N;
int sonuc;
int i;
int k=0;
int m=1;
printf("N sayisini giriniz\n");
scanf("%d",&N);
if (N>0) {for(i=1;i<=N;i++){k=m;m=sonuc;sonuc=k+m;}printf("sonuc:%d\n",sonuc);}
if (N=0) {printf("sonuc:1");}
tabi çalışmadı doğal olarak sizce burdaki hata nedir yardımcı olursanız çooook memnun olurum...
fibonacci syı şöyle üretilir ortak f=f[i-1]+f[i-2] formülü ile şimdi bir dizi oluştur i=2,N=sayısı lavyeden girilir ve okutultulur. f[0]=1 VE f[1]=1 dir.for döngüsünde for(i=2;i<N;i++){ f=f[i-1]+f[i-2] } şeklinde dizilere sayıları yerleştir ve sonra bir for döngüsüylede diziyi yazdır sonucu görürsün
bence sen syntax olarak biraz daha egzersiz yap... yazdıkların sana da çok komik gelecek ilerde.. yardım istersen pm at msn vereyim...
Akasya, programinda sonuc degiskenini initialize etmedigin icin, yani ilk deger vermedigin icin program N>0 degerler icin sapitiyor. Ayrica, N<0 icin kontrol olarak N=0 degil de N==0 kullanmalisin. Cunku, == operatoru mantiksaldir.Digerinde ise sadece N degiskenini sifir yapiyosun ve if sarti hic saglanmiyor. O yuzden de if dongusune hic girmiyor.yani if(false) yaptiriyosun.Son olarak fibonacci hesaplamasinda cok yaklsamissin ama mantiksal kucuk bir hata var detayini bir sonraki mesajda yazacam..
ilk degerleri atamalısın önce . syntax hatalarında var ahh o c ödevlerinden bende az cekmemistim ilk odevimiz roma rakamlarını çviren programdı hic unutmam biraz daha pratik!!!
Akasya ha nerde kalmistik...Fibonacci yapmanin mantigi ucuncu bir fibonacci sayisi icin ondan onceki iki fibonacci sayisini kullanmaktir. Yani bize, n. fibonacci sayisi icin sadece n-1 ve n-2 nci fibonlar lazimdir. Yani bize bu iki fibon sayisi ve bu iki fibon sayisinin toplamini yazacagimiz gecici bir degisken yani senin sonuc degiskeni gibi lazimdir. Daha sonra bu sonucun senin bundan sonraki iki fibonacci sayindan sonuncusu olacak ilki ise bir oncekindeki ikinci olacak yani n-1 nci fibon sayisi delete! bellekte tutmaya gerek yok. Zaten sen bu mantigi cikarmissin. Tek yanlisin sonuc degiskenini once hesaplamak sonra atamakarini yapmak. Buna gore senin kodu duzeltiresek:
for(i=1;i<=N;i++) { sonuc=k+m; k=m; m=sonuc; } printf("sonuc:%d\n",sonuc); olmasi olayi cozer.Bu sekilde sonuc a da mantikli bir deger vermis olduk
Ayrica, bir hatirlatma: Fibonacci serisi 1 ile baslar. Yani 1,1,2,3,5,8,13,... k ile m in ilk degerlerine bir ayar cekmen de fayda var.
Bak bu benim fibonacci fonksiyonum. Bir kitapta gormustum. Cok elegant!.Uc bellek gozuyle isi bitiriyo.Embedded!
int fibonacci() { static int f1=1, f2=1; // Fibonacci serisinin ilk iki terimi int g;
g=f1+f2; // Ucuncu fibon sayisi olacak f1=f2; // ilk fibon sayisina gerek kalmadi artik. ikinci fibon bir sonrakinda birinci fibon. bellek gozu shift edildi f2=g; // bir sonraki hesaplamada ikinci fibon olacak
return g; // Ucuncu fibon sayisi.
}
Bu fonksiyona N parametresini aktararak ya da ana fonksiyondan N defa cagirarak ( ben birincisini tercih ederim) isini halledebilirsin.Eeeeeee artik bunun m
hepinizden Allah razı olsun ezmeyin beni öğreniriz inş. tekrar tşkler..
Akasya bence baskasına sormadan kendin yapmaya calısarak oğrenirsen eğer bir ödevse daha iyi.Ben ödevlerimi baskasına yaptıra yaptıra öğrendim daha doğrusu öğrendiğimi düşündüm sonra yaz okulunda tekrar almak zorunda kaldım
Sen de üzerinde düşünerk yap C ödevlerini..
yaaa haklısın msenel ama hoca da bişi anlatmıyoki programın karşısına geçip bakışıyoruz karşılıklı inş anlıycam bigün hepiciğini kendim yapcam ödevlerimin hoşgör daha çok yeniyim
Fibonacci dizisi c öğreten her kaynakta örnek olarak verilir,hocanız pek araştırmadan vermiş sanırım ödevi .Araştırmak sana düşüyo ,Msenel in söylediklerine de katılıyorum eğer öğrenmek istiyorsan yazılmış bir programı anlamaya çalışmak yerine ne yapıp edip kendin yazmaya çalış.Bundan sonraki çalışmaların için tavsiye olarak al bu söylediklerimi,kolay gelsin.
sana tavsiyem temp gibi geçici değişkenler kullanman.. hatta bunları kulanmay alışsan iyi olur.. zamanında bana da fib. serisi ödevi vermişlerdi.. ama fark olarak programda kaç basamaklı seri oluşturulacağını kullanıcı giriyordu... eğer örnek için kodu istersen öm at..
yeni mesaja git
Yeni mesajları sizin için sürekli kontrol ediyoruz, bir mesaj yazılırsa otomatik yükleyeceğiz.Bir Daha Gösterme