eğer biri mesaj yazdıysa mesajı görünmüyor bende. |
ilk 2 soru için
olarak değişken takibi yaparsan olay netleşebilir.Örn:
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: For döngüsü { } içindeki kodu n kadar döndürüyor, i sadece numaratör ve döngü içinde kullanılmak zorunda değil 4. t1 ve t2 değerli sabit değerler atanmış yoksa bunlar const keyword ile mi sabit hale getiriliyor: sabit değer atanması yok. değişken ikisi de. 5. printf("Fibonacci Series: %d, %d, ", t1, t2); sonrasında gelen diğer printf komutu içindeki değerlere ekleniyor buna sebeb olan ne: printf 'de "\n" (new line) koymadıkça kaldığı yerden devam eder. |
Post için teşekkürler peki bir şey daha soracaktım unutmuşum. 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. } kodun blogundaki t1 = t2; t2 = nextTerm; ifadelerini nasıl anlamalıyız. t1 ve t2 bir değer atanmış değer atanması anlamamı zorlaştırıyor. sabit bir değer olarak düşünüyorum. her sayıda sonuç değeri artınca kafam karışıyor. örneğin 4.terim için sonuç iki t1 eşittir t2 yukarda bu expression zıt bir (int i, n, t1 = 0, t2 = 1, nextTerm;) girdi var bu expression nasıl oluyor. @revivo72 |
Enter the number of terms: 4 Fibonacci Series: 0, nextTerm =0 t1 degeri 0, t2 deger 1 t1=t2 degeri 1 t2 = nextTerm degeri 1 1, nextTerm =1 t1 degeri 1, t2 deger 1 t1=t2 degeri 1 t2 = nextTerm degeri 2 1, nextTerm =2 t1 degeri 1, t2 deger 2 t1=t2 degeri 2 t2 = nextTerm degeri 3 2, nextTerm =3 t1 degeri 2, t2 deger 3 t1=t2 degeri 3 t2 = nextTerm degeri 5 işte böyle bir sonuç veriyor t1=t2, t2 = nextTerm anlamam lazım
![]() nedense " " işaretini göstermedim kodu kopyalıyorum foruma post gönderilirken new line olarak algılıyor birde bu kodda özellikle for loop'ta kod işleyiş sırası yukarıdan aşağıya şeklinde mi? yada işlemci bunu yorumlarken nasıl bir sıra izliyor. kodda bir yanlışlık var mı diye yazdım. @revivo72 |
açıklamalı. yanda fibonacci'nin ilginç bir özelliğiini de ekledim (konu dışı) fibonacci dizisinin mod 9 'u ile 13 rakam sonraki mod 9'unun toplamı hep 9 (9 istisna olmak üzere) < Resime gitmek için tıklayın > |
Herhangi bir değişkeni tanımlarken ilk değer verebilirsin, ya da hiç değer vermeyebilirsin. İlk değer atanmış bir değişkene, program akışı içerisinde başka bir değer atadığında, ilk değer ortadan kalkar, programın geri kalanında bu değişken atadığın yeni değeri taşır. Dikkat! Bir değişkene ilk değer atamak o değişkeni sabit yapmaz. Program akışı içerisinde değerini değiştirebilirsin. Ancak const int t1=0 şeklinde, başına const getirerek tanımlamış olsaydın, bu bir sabit olurdu ve program içerisinde değerini değiştiremezdin. |
@Iqtam Teşekkürler. < Resime gitmek için tıklayın > Bu resimde visual studio cl.exe command derleme yapıldığında nextTerm için başlatılmamış yerel değişken hatası veriyor o sorunu da (int ---- nextTerm=0;) yaparak çözdüm https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-and-level-4-c4700?view=vs-2017 burda da hata ile ilgili bilgi veriyor. programa t1=t2,t2=nextTerm değerlerinin çıktısını verince herşey netlik kazandı. Post için herkese teşekkürler. @revivo72 |
bunu nasıl yaptın kodu paylaşabilir misin? |
Öyle cok zor birşey değil ; cok basit printf (".... Mod9 = %d\n"... , t1%9); içine kalın basılı ifadeleri ekledim. Mod 9 analizi için çeşitli başka yordamlar da yazabilir ve Fibonacci dizisi ile mitoz bölünme, elektrik/magnetik ilişkisi, altın oran (1.618) arasında matematiksel ilişkiyi de görüntüleyebilirsin. |
< Resime gitmek için tıklayın > |
int değişken tipinin tutabileceği veri büyüklüğü sınırlı. sınıra dayanınca eksi rakama geçiyor olabilir. |
farkındasındır. değer yine - deperi almış başka bir programcıkta zannederim ki tanınmayan bir karakter var olabilir yada başka bir şey de olabilir fibonacci sayısında. ama u değerini girince eksili değer yazdı. fibonacci bu kodu kullandım. #include <stdio.h> @revivo72 |
Sadece C++ ve onun int değişken tanımıyla ilgili bir sorun bence. Bu tür durumlarda genelde aynı kodu Scheme ile denerim cunku onda değişken den kaynaklı bu tür sorunlar olmuyor nitekim denedim ve cok büyük fibonacci rakamlarında (yaklaşık 50. fibonacci sayısı) öyle bir sorun cıkmadı. Fakat büyük rakamları e üssü olarak göstermeye başladı o yüzden aynı kodu Scheme'in endüstriyel versiyonu olan Common Lisp ile yazıp denedim ve rakamlar düzgün göründü. Kodu ilk başta iteratif yazdım fakat 30. fibonacci sayısına gelince cok ağırlaştı o yüzden rekürsif yazdım. < Resime gitmek için tıklayın > |
@revivo72 Sağolasın. Bunlara ben c/c++ ilerledikçe bakarım. Ama şu var program ile uğraşmak güzel. bu arada kullandığın program bu mu https://en.wikipedia.org/wiki/GNU_Emacs ilaveten: program mentin editorü ama derleme kısmı var eklenti ile mi oluyor. Ben Tüm Platformların derlemesini Visual Studio Denemeye karar verdim. yani cross platform bakalım ne kadar sağlıklı olacak bu konu hakkında görüşün nedir |
Aynen Emacs'in Windows versiyonu. Derleme kısmı programlama dili ve derleyiciye göre değişiyor. Emacs'te eklenti yerine "package" deniliyor. örneğin solda gördüğün Scheme kodunu düzenlerken kullandığım package "Chicken Scheme" ve onu elpa.gnu.org ve Emacs-24.0'dan itibaren melpa.milkbox.net/packages adreslerindeki package repository (paket repertuarları) ndan indirip kuruyorsun ve hangi klasöre kurduysan onu ~/.emacs isimli Emacs 'in konfig dosyasına işliyorsun, örneğin benim kurulum klasörünü şunun gibi işledim:
Bu işin Emacs tarafıydı. Bir de Chicken Scheme derleyiciyi kurma tarafı var ki onu da kurduktan sonra derleyicinin adını da Emacs'e tanıtman gerekiyor şunun gibi:
orada gördüğün csi'yi Emacs sadece ismiyle Windows >> Gelişmiş Sistem Ayarları >> Ortam Değişkenleri >> Sistem Değişkenleri >> Path içine C:\Programs\chicken-4.13.0\bin u eklediğim için bulabiliyor. sonra gelen -:c ise Windows'ta csi'nin doğru çalışması için gerekli, macOS ve Linux'ta gereksiz. Bu şekilde ayarları yaptıktan sonra Emacs'te Alt-x 'e bastıktan sonra run-scheme yazınca csi ekranı geliyor ve sol üstte gördüğün Scheme kodu ctrl-x ve ctrl-e (Evaluate) basınca csi ekranında deneyebiliyorsun. Emacs kullanmadan direkt csi içinden de kod deneyebilirsin. Windows'un klasik CMD.EXE 'si ileörneğin 20 fibonacci sayısını hesaplama: < Resime gitmek için tıklayın > |
#! optional (a 0) (b 1) (acc '()); komutunda a sıfır b 1 olsun mu demek acc tırnak işareti ne işe yarıyor. bunları anlayabilmek için kaynak önerebilir misin? ______________________________________ https://www.geeksforgeeks.org/program-for-nth-fibonacci-number/ bak burda başka değişik formüllerde verilmiş. matrice matris logaritma ile yapılıyor Method 6 (O(Log n) Time) incele |
Kodları kendi bilgisayarına adapte etmek için öncelikle kendi bilgisayarına Scheme kurarak ve kodları çalıştırarak denemelisin bence. Scheme'i kendi bilgisayarına kurmak içinhttps://code.call-cc.org/ 'dan Scheme son versiyonunun kodlarını indirip Windows bilgisayarında derlemen gerekli, gerekli derleme talimatları README 'de var. Benim windows 7 bilgisayarda TDM-GCC-5.1.0 (Download:http://tdm-gcc.tdragon.net/download ) ve msys2-x86_64 (Download:https://sourceforge.net/projects/msys2/files/Base/x86_64/ ) kurulu old için, Scheme'i kolaylıkla derledim. Nitekim CMD.EXE üzerinde 120 tane fibonacci rakamını bu sayede listeleyebiliyorum: < Resime gitmek için tıklayın > CMD.EXE gibi terminal içinden kullanırken (yani Emacs Scheme plugin'i ile kullanmıyorken) denediğiim programları kolaylıkla yükleyebilmek için Scheme init / başlangıç kodu .csirc (Chicken Scheme Interactive Run Commands kısaltması) ekledim: < Resime gitmek için tıklayın > Oradaki Almanca karşılama mesajı dahil kodları daha rahat çalışmak için yazdım. Bir otomobile oturunca koltuk ayna direksiyon ayarını yapınca en rahat kullanabilirsin ya onun gibi bu kodlar. Fakat bir ufak şey daha var, bu sekilde klasik Scheme kodu kullanabilmek için Chicken Scheme 'e R7RS kütüphanesini de eklemen gerekli fakat Chicken Scheme'i başarıyla kurduktan sonra o kolay:
< Resime gitmek için tıklayın > CMDer'i tamamen keyfi olarak tercih ettim, CMD.EXE dahil herhangi bir terminalle de kurabilirsin. #!optional ve devamındaki parametrelerihttps://srfi.schemers.org/srfi-89/srfi-89.html biraz açıklıyor. #!optional adından da anlaşılabileceği gibi bir fonksiyondaki parametrelerin "istege bağlı" olduğunu gösteriyor. Scheme 'de birçok şey bu sekilde kendi kendini açıklayıcıdır. Parantezler coğunlukla kapsam / context belirleyicidir. (fib n #!optional (a 0) (b 1) (acc '()) ) ifadesinde dikkat edersen parantezler birbirini tamamlıyor. Orada fib adında bir fonksiyon tanımlanıyor (baştaki define) ve ardından fonksion gövdesi geliyor. Sorduğun a sıfır b 1 olsun kısmı ise o fonksiyonun parametre tanımları ve dediğin gibi a 0 b 1 yapılıyor ancak #!optional olmadan da fonksiyonu çağırabiliyorsun. #!optional'ın sebebi fonksiyonu ilk başta (fib 5 0 1 '() ) yerine (fib 5) şeklinde kısaca çağırabilmek için. Bu arada #! ve optional bitişik yazılmalı. acc accumulator değişkeni, her döngüde elde edilen Fibonacci rakamını listede toplamak için ve '() boş liste demek. acc'in ilk başta boş liste olması gerekli yoksa elde edilen Fibonacci rakamlarını ekleyemeyiz. Python 'da acc = [] ifadesi gibi düşünebilirsin. Sanırım Python'da da bir diziye dinamik olarak veri eklemek için başta böyle bir tanımlanmalı, denemedim. Scheme konusunda en baba kitap Structure and Interpretation of Computer Programs / SICP kitabın fakat onda genel olarak programcılık temelleri anlatılır ve Scheme ise sadece anlatma aracıdır yani yukarda bahsedilen #!optional gibi ayrıntılar pek yoktur, onun için R. Kent Dybvig'i The Scheme Programming Language 4th edition 'una bakabilirsin. 2nd edition 'u PDF olarak şurada var:https://irywoh.files.wordpress.com/2015/07/scheme-programming-language-dybvig-pdf.pdf Bahsettiğin matriks yöntemi Fibonacci'nin başka bir yansıması. Fibonacci rakamları doğada bir çok şeyin matematiksel temeli. |
http://www.dipmat.unict.it/~barba/LinguaggiII.html/READING_MATERIAL/THESCHEMEPROGRAMMINGLANG.PDF burda 2nd pdf dosyası var. schemehttps://en.wikipedia.org/wiki/Scheme_(programming_language) başlı başına bir programlama dili. Cmder tarzı programlar kullanmıştım. Linux terminali çok hoşuma gidiyor. kısayol kopyala yapıştır var. vertical girdileri daha fazla hafızada tutuyor yani bir yeni bir line satır eklendiğinde üsteki satırlar kaybolmuyor. @revivo72 https://www.cs.unm.edu/~williams/cs357/springer-friedman.pdf bu başka bir kitap https://download.csdn.net/download/jizheair/10472163 burda var ama çince https://www.scheme.com/tspl4/ html full version var 4nd edition https://www8.zippyshare.com/v/6rBvouDy/file.html e kitap şeklinde olanı var birde kontalk status.im yazmışsın imzanda düzenli bakıyor musun? iletişime geçebilirsin demişsin |
Konu dışı sende bu ilk postta bu reklamlar gözüküyor bir enfeksiyon kapmış olabilir mi? browser normalde ben böyle bir imza koymadım < Resime gitmek için tıklayın >
bir tanesinin adresi bu |
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?
haşiye:while döngüsünde çıktı for döngüsü ile aynı değil
misal bir 10 değeri için
for loop 0 1 1 2 3 5 8 13 21 34
while loop 0, 1, 1, 2, 3, 5, 8,
çıktı değerini veriyor.
int t1 = 0, t2 = 1, nextTerm = 0, n; //değerinde fark ettiğim nextterm atanan value silinmesi bir programda bir hata döndürmüyor
https://www.programiz.com/c-programming/examples/fibonacci-series
Teşekkürler.