Haftanın sorusu

Başlatan Erdem, 11 Mayıs 2011 - 18:31:26

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

travego0403

Evet, program yazarken kodların tekrar kullanılabilmesi önemlidir. Fonksiyonlara bölmek bunu sağlayabilir.

Parametre aktarımı konusunda haklısınız, işaretci kullanılırsa hız artacaktır. Bir söz varya hani C++ ta işaretciler ile alakalı:

"Programcılar ikiye ayrılır, C/C++ bilenler ve diğerleri, C/C++ bilenler de ikiye ayrılır işaretci kullanmayı bilenler ve diğerleri."   :)

Ektede belirttiğin gibi fonksiyon özyinelemi olunca işler değişiyor. :)
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

mami96

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

Boyle bir problem var

4 milyona kadar olacak sekilde fibonacci sayilarini yazdir

ve bunlari toplat diyor

Tabii bunu yapinca cokuyor program

Oneriniz nedir?

utdmr

@mami96, cevap 7 haneli, C'nin limitini geçmez; önerim, sayıları bulup bir listeye ekleyip ardından toplatma, sürekli yeni bulduğun sayıyı ekle. Python'da bile birkaç milisaniye sürüyor, C'de programı patlatacak kadar büyümemesi lazım.
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

mami96

Ben, 4 milyon tane fibonacci sayisini yazdirmaya kalkmisim (:, ama olmasi gereken 4 milyona ulasacak bir program 4 milyon tane fibonacci sayisini ard arda yazdirmak degilmis. Dusunun yani

1,2,3,5,8,13

gibi 4 milyon rakam ard arda eh bunun patlatmamasi icin bir sey olabilir mi? Tabii ki de patlar. Boyle olumcul hatalar yaparsam (: Ama ben isi hala kavrayamadim. Bana algoritma olarak cikartabilir misiniz? (:

utdmr

# -*- coding: utf-8 -*-
Algoritma yazmayı bilmiyorum, ama Python ile şöyle yazmıştım, kodu yorumladım.

Not: Yaptığım Project Euler çözümlerini bir klasörde soru numarasına göre saklıyorum belki işime yarar diye, tavsiye ederim :).
"""Problem 2
19 October 2001

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

Find the sum of all the even-valued terms in the sequence which do not exceed four million."""

def fib(to): #fibonacci fonksiyonu "to" diye bir parametre alır
    r=[] #boş bir dizi oluştur
    r.append(1)
    r.append(2) #1 ve iki ekle
    while True: #sonsuz döngü
        new=r[-1]+r[-2] #yeni bir fibonacci sayısı için dizinin son iki rakamını topla
        if new<=to: #eğer yeni sayı hedeften küçükse
            r.append(new) #diziye ekle
        else:
            break #değilse döngüden çık
    return r #diziyi döndür


f=fib(4000000)

s=0
for i in f: #dizideki her eleman için
    if i%2==0: #iki ile bölünebiliyorsa
        s=s+i #s'e ekle

print s #s'i yazdır.
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

mami96

Dediginizi simdi anladim.

Kodunuzdan yola cikarak ben biraz daha garibini yaptim

D dili ile


import std.stdio;

void main()
{

int sayi = 0, simdi = 0, once = 1, once2 = 1;

while (simdi <= 4000000) {
simdi = once + once2;
once2 = once;
once = simdi;

if (!(simdi & 1)) {
sayi += simdi;
}
}

writeln(sayi);
}

sem

4000000 * sizeof(int)...

Güzelmiş =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Erdem

Alıntı yapılan: sem0900 - 27 Haziran 2011 - 01:34:51
Göstericiler ile ya da  C++ için göstericilere ek olarak referanslar ile kopyalama yerine adres aktarımı sayesinde verimlilik arttırılabilir.

Aslında referans bir değişkenin adresine yazım olarak benzese de basitçe bir değişken için takma isimdir.

Alıntı yapılan: travego0403 - 27 Haziran 2011 - 18:39:22
"Programcılar ikiye ayrılır, C/C++ bilenler ve diğerleri, C/C++ bilenler de ikiye ayrılır işaretci kullanmayı bilenler ve diğerleri."   :)

C++ için mümkün olduğunca göstergeler yerine referansları kullanın diye tavsiyeler var.  Hatta C++ için akıllı göstergeler, RAII (Resource Acquisition Is Initialization) basitçe kaynakları kurucularda ayırıp bozucularda vermeliyiz gibi kavramlar var.

% işleci ile rastgele sayı üretince de (bu her ne kadar ufak aralıklar için önemli olmasa da) alt düzey bit yüksek düzey bit meselesinden yeterince rastgele sayı üretemiyorduk sanırım. % işleci kullanınca bir aralığa düşen sayı miktarı diğerinden fazla oluyordu galiba. O yüzden rand() % sayı yöntemini  pek tavsiye edilmiyor.

Eğer Arch Linux tabanlı bir dağıtıma geçmek isterseniz Arcolinux D sürümünü buradan indirebilirsiniz.

Elektronik