Forum
#include <stdio.h>
int main()
{
int i, n, t1 = 0, t2 = 1, nextTerm;
printf("Enter the number of terms: ");
scanf("%d", &n);
printf("Fibonacci Series: ");
for (i = 1; i <= n; ++i)
{
printf("%d, ", t1);
nextTerm = t1 + t2;
t1 = t2;
t2 = nextTerm; //burayı disaled yaptığımda 4 değeri için sonucu 0 1 1 1 verdi.
}
return 0;
}
//result 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 for value 10
#include <stdio.h>
int main()
{
int t1 = 0, t2 = 1, nextTerm = 0, n;
printf("Enter a positive number: ");
scanf("%d", &n);
// displays the first two terms which is always 0 and 1
printf("Fibonacci Series: %d, %d, ", t1, t2);
nextTerm = t1 + t2;
while(nextTerm <= n)
{
printf("%d, ",nextTerm);
t1 = t2;
t2 = nextTerm;
nextTerm = t1 + t2;
}
return 0;
}
Selam.
Bu Soru basit gelebilir ama ben kodun bazı yerlerinde mantığını anlayamadım (t1=t2 ve t2 = nextTerm) nasıl eşit kabul ediliyor while ve for döngüsünde bu nasıl işleniyor. sonra bu iki değere nextTerm = t1 + t2; sonucu elde ediliyor ki toplamasını mantıkla çözmedim
Sorum
1.while döngüsü içersinde (t1 = t2; t2 = nextTerm; nextTerm = t1 + t2;) sırası fordan farklı . bu şekilde düzenlenmesindeki kasıt ne?
2. t2 = nextTerm; //burayı disaled yaptığımda 4 değeri için sonucu 0 1 1 1 verdi. bu kod aktif için sonuç 0 1 1 2 oluyor 4 değeri için.
3. for döngüsünde for (i = 1; i <= n; ++i) n ve i değeri kıvırcıklı parantezin içindeki kodlarda kullanılmamış program bunu nasıl anlıyor.
4. t1 ve t2 değerli sabit değerler atanmış yoksa bunlar const keyword ile mi sabit hale getiriliyor.
5. printf("Fibonacci Series: %d, %d, ", t1, t2); sonrasında gelen diğer printf komutu içindeki değerlere ekleniyor buna sebeb olan ne?
https://www.programiz.com/c-programming/examples/fibonacci-series
Teşekkürler.
Merhaba
Soru 1 : aslında bu gayet mantıklı şu demek bir döngü içinde eğer n değeri nextTermmdeğerinden küçük eşitse değişkenin değeri ne olursa olsun t1 i t2 ye t2 yi de nextTermme eşitle döngüye devam et
soeu 2 : doğal nextTerm = t1+t2 yaparak döngüye sevam etmiş doğal olarak nextterm i kaprsanız kodunuz hesaplamada yanlış olur mayematiksel işlem sapıtıyor
soru 3: eğer kodu tam okursanız consoledan bir giriş istiyor kullanıcıdan kullanıcı rakamsal bir değer giriyor onu n değişkenine alıyor i yendeğer vermemiş yani 0 n değeri 10 ise kullanıcı tarafından girilen 10 rakamına kadar ++ yapar
soru 4: const gibi düşünebilirsin programı yazan onları başlangıçta sabitlemiş herhangi bir an değişmesi için const olayında değiştirilmesi zor olur
5 için soruyu anlamadım 🙁
saygılar
ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com
(Belki biraz uzun olacak ama detaylı anlatmaya çalışayım)
En başta şunu söyleyeyim iki programın tasarımı farklı birincisi yani for ile yapılan terim sayını istiyor ve dolaysı ile siz 15 terim girerseniz 15 terim işliyor buradaki n değişkeni terim sayısı için kullanılmış. İkincisi ise sizden fibonacci dizisi elemanlarından bir terim istiyor ve verdiğiniz sayıya kadar olan terimleri hesaplayıp gösteriyor. Buradaki n değeri ise fibonacci dizisi elemanlarından birisini belirlemek için kullanılmış zaten birinci (for'lu olanda) printf("Enter the number of terms: "); gir diyor, ikincisinde (while'lı olanda) ise printf("Enter a positive number: "); gir diyor.
Fibonacci serisinin açılımı: Pozitif sayılar kümesinde her terim kendisinden önceki son iki terimin toplamı şeklindedir. Buna göre;
1. terim 0 (kendisinden önceki iki terim yok)
2. terim 1 (kendisinden önceki iki terim yok)
3. terim 1 (kendisinden önceki iki terim 0+1 toplamı 1)
4. terim 2 (kendisinden önceki iki terim 1+1 toplamı 2)
5. terim 3 (kendisinden önceki iki terim 2+1 toplamı 3)
6. terim 5 (kendisinden önceki iki terim 3+2 toplamı 5)
şeklinde sonsuza kadar devam eder.
Cevap1: Baştada anlattığım gibi iki programın çalışma mantığı farklı. while olan program fibonacci serisinin içindeki bir elemana kadar (o eleman da dahil) çalışıyor. Fazladan olan satır yani while döngisindeki son satır (nextTerm = t1 + t2;) olmasının neden while döngü yapısı nextTerm'i kontrol ettiği için bir sonraki çevrim bizim istediğimiz aralığın dışına çıkmış olabilir dolaysı ile bu değer atanıyor ki while kontrol ettiğinde çevrim dışına çıkmışsa döngüyü sonlandırabilsin.
Cevap2: Fibonacci serisinin açılım tanımı gereği kendisinden önce gelen iki sayı burada t1 değişken kendisinden iki önceki sayıyı tutuyor. ve t2 değişkeni ise kendisinden bir öneceki sayıyı tutuyor. Siz "t2 = nextTerm;" satırını disable ederseniz bir sonraki çevrim için t2 yeni değerinin atanmasını engellemiş oluyorsunuz. Yanı seri içerisinde t2'nin değeri hep en baştaki değer olarak kalıyor.
Cevap3: for ile yapılan program terim sayısı ile ilgilendiği için burada önemli olan hesaplanacak terim adedi örnegin 12 girerseniz for dongusu 1'den başlayıp (1 dahil) 12'ye kadar (12 dahil) 12 defa dönecek. O yüzden program (yani for'un içi) i ve n ile ilgilenmiyor onun ilgilendiği for'un dönme sayısı yanı hesaplanacak terim sayısı.
Cevap4: C/C++ programlama dillerinde bir değişkenin tanımlandığı yer önemlidir. Değişken (bu örneğimizde t1 ve t2) tanımlandığı scope içerisinden görülebilir/kullanılabilir (özel durumlar hariç değişkenin pointer'ını başka bir yere gönderilmesi gibi..) ve bu scope sonlana kadar yaşamını sürdürür. Global scope hariç tum scopelardaki değişlenler herhangi bir ilklendirme işlemine (ilk değer verme) tabi tutlmazlar. Programcı bunu bildiği için diyorki ben t1 ve t2 yı tanımlıyorum ve ilk değini yanı t1 için 0 ve t2 için ise 1 değerini veriyorum.
Cevap5: printf stdout (bu örneğimizde ekran) çıkış verir. Bilgiyi yazar. stdout yazıcıya yönlendirirseniz ekran yerine yazıcıdan çıktı alırsınız (neyse konumuz bu değil). Bir çıkış aygıtına veri gönderdikten sonra aygıtın sonraki yeni satıra geçmesini istiyorsanız yeni satır ve satır başı komutlarını gondermeniz gerkir. Eğer printf ifadesininnin sonuna \n yani yeni satırın başına geç komutu konulmaz ise satır başına dönmeyeceği için bulunduğu yerde kalır bir sonraki printf ifadesi ise bu noktadan devam eder. Bu program için sonuç olarak program bittiğinde çıktı yekpare bir görünüm alır.
O Bir Efsane
Merhaba
Soru 1 : aslında bu gayet mantıklı şu demek bir döngü içinde eğer n değeri nextTermmdeğerinden küçük eşitse değişkenin değeri ne olursa olsun t1 i t2 ye t2 yi de nextTermme eşitle döngüye devam et
soeu 2 : doğal nextTerm = t1+t2 yaparak döngüye sevam etmiş doğal olarak nextterm i kaprsanız kodunuz hesaplamada yanlış olur mayematiksel işlem sapıtıyor
soru 3: eğer kodu tam okursanız consoledan bir giriş istiyor kullanıcıdan kullanıcı rakamsal bir değer giriyor onu n değişkenine alıyor i yendeğer vermemiş yani 0 n değeri 10 ise kullanıcı tarafından girilen 10 rakamına kadar ++ yapar
soru 4: const gibi düşünebilirsin programı yazan onları başlangıçta sabitlemiş herhangi bir an değişmesi için const olayında değiştirilmesi zor olur
5 için soruyu anlamadım 🙁
saygılar
Merhaba
Teşekkürler.
Uğraşınca anlayabildim.
5. Sorumda anlatmak istediğim
printf("Fibonacci Series: "); // koddan sonra gelen diğer printf kodu içersindekileri dahil ediliyordu yani for dahilindeki printf("%d, ", t1); kodunu ekliyor.
for (i = 1; i <= n; ++i)
{
printf("%d, ", t1);
-----
}
bunu Hamit Turgut bey efendi cevaplamış
08:21:50 2018-09-16
resimdeki çalışmayı yapmıştım bu değerleri göstererek program kodunu okuyabildim. Fakat aşağıdaki linkde bulunan kodlarda da aynı sorun olmakla birlikte for döngüsünde 45'den sonraki değerlerin bazıları hep - işareti alıyor. bunun sebebi ne olabilir ki? bir sebebini biliyorum. oraya digit yerine character girdiğimizde negatif sayılar veriyor.
https://www.geeksforgeeks.org/program-for-nth-fibonacci-number/