Forum: Ders Arası RSS
Project Euler
Ali #1
Kullanıcı başlığı: Python / Java / C,C++  / D
Üye Ock 2011 tarihinden beri · 84 mesaj · Konum: Orjin
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Project Euler
Selamlar.

Project Euler'i takip edeniniz var mi?

Burada gercekten guzel problemler var.

profil sayfanizi editlerseniz

Hangi dilde bu problemleri cozdugunuzu de gosterebilirsiniz.

D dili de dahil.

Algoritmanizi gelistirmeniz acisindan guzel bir olusum

344 kadar problem var

gittikce zorlasiyor ama.

Benim ilk cozdugum soru kolay gelmisti.

Sonralari 2 milyonun altindaki asal sayilari cozmek zor gelmisti.

Cunku nasil alacagimi bulamamistim (:

Bence burada algoritma gelistirilebilir.
Ali
Ali #2
Kullanıcı başlığı: Python / Java / C,C++  / D
Üye Ock 2011 tarihinden beri · 84 mesaj · Konum: Orjin
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hatta ilk problemi D ile cozdum

Ama anlam veremedigim su

ben sadece son sonucu isterken o 0'dan basliyor son sonucu da yazdiriyor

C++ aliskanligimdan olsa gerek bir hata yaptigimi dusunuyorum.

import std.stdio;
 
void main()
{
    int sayi = 0;
    for (int i = 0; i < 1000; i++) {
        if (i % 3 == 0 || i % 5 == 0) {
            sayi += i;
    writeln(sayi);
        }
    }
}

-----------------------------------------------

2. Problem icin bir fibonacci yapisi kullanayim dedim

4 milyon'u asmayacak sekilde fibonacci sayilarini yazdirin diyor sanirim. ve bu sayilarin toplamini bulun diyor.

yani 3.999.999 seklinde bir deger varsa en son ondan oncekilerde dahil toplayin diyor

bende su tarzda bir kod var

Nette gordum. Belki bu isime yarar diye. Ama her turlu fibonaccinin 4 milyonu asmayacak sekilde yazdirilip diger degerlerinin toplanmasi islemini yaptiramadim. cok kasmaya basladi pc.

Milyonu asan rakamlari cikardi :S

module main;
import std.stdio;
import std.string;
import std.conv;
import std.bigint;
 
int calculate(BigInt usernum)
{
if (usernum != 0)
{
BigInt num1 = 0;
BigInt num2 = 1;
BigInt total;
writeln("");
auto file = File("Fibonacci.txt", "w");
 
for (int x = 0; x<usernum; x++)
{
    if (total >=num1 + num2)
    {
        break;
    }
    total = num1 + num2;
    writeln(total);
    file.writeln(total);
    num1 = num2;
    num2 = total;
    }
file.writefln("The Fibonacci sequence to %d terms.", usernum);
writeln("");
writefln("The Fibonacci sequence to %d terms written to Fibonacci.txt", usernum);
readln();
return 0;
}
    else
    {
    writeln("");
    writeln("You can't enter 0!");
    writeln("");
    return 1;
    }
}
 
void main()
{
writeln("Please enter the terms of the Fibonacci sequence you want to calculate:");
string input = readln().chomp();
BigInt number = 0;
if (input.isNumeric)
{
    
if (calculate(number.__ctor(input)) == 1)
{
    main();
}
    return;
}
else
{
writeln("");
writeln("Non numeric input.");
writeln("");
main();
}
}
Ali
Bu mesaj Ali tarafından değiştirildi; zaman: 2011-06-29, 12:19.
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
CWSuskun:
ben sadece son sonucu isterken o 0'dan basliyor son sonucu da yazdiriyor

import std.stdio;
 
void main()
{
    int sayi = 0;
    for (int i = 0; i < 1000; i++) {
        if (i % 3 == 0 || i % 5 == 0) {
            sayi += i;
    writeln(sayi);
        }
    }
}

writeln'ı döngü içine yazmışsın. :) for'un dışında olması gerekiyor.

Kodu C++'tan D'ye kaydırmak için ve aklımızda bulunsun diye iyice D'ce yazılmış bir program da vereceğim. Delilik olduğunu biliyorum ama şu da aynı sonucu veriyor: :D

import std.stdio;
import std.range;
import std.algorithm;
 
void main()
{
    writeln(
        reduce!"a + b"(
            0, filter!"((a % 3) == 0) || ((a % 5) == 0)"(iota(0, 1000))));
}

Ali

Not: Diğerine ben şimdi bakamıyorum.
Bu mesaj acehreli tarafından değiştirildi; zaman: 2011-06-29, 12:43.
Ali #4
Kullanıcı başlığı: Python / Java / C,C++  / D
Üye Ock 2011 tarihinden beri · 84 mesaj · Konum: Orjin
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Abi senin yaptigin daha iyi ama

iyi programlama alistirmalarina bakarsak senin yaptigin daha iyi degil mi?

ben de yaptim ama

uzunca oldu

ne kadar kisa satir, o kadar okunakli program

diye bir makale okumustum sence bu dogru mudur?

(:

Birde su problemi yanlis mi cevirdim, ingilizcem bazen yetersiz kaliyor :D


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.

4 milyonu asmayan fibonacci sayilarinin tamaminin toplamini istiyor degil mi?

c++ ile yapinca patladi program.

d ile daha kuramadim kafamda :S (:
Ali
acehreli (Moderatör) #5
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Kısa program daha iyidir ama okunaklılık için gerekmese de aralarda anlamlı isimleri olan değişkenler tanımlanabilir.

Evet, 4 milyondan küçük sayıların çift (even-valued) olanlarının toplamı.

Ali
Ali #6
Kullanıcı başlığı: Python / Java / C,C++  / D
Üye Ock 2011 tarihinden beri · 84 mesaj · Konum: Orjin
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
çiftleri alabilirim de

işte onları alırken program patlıyor

daha toplama bile gelmeden yani.

thread kullanımında da daha bilgi sahibi degilim.

direkt ona atlamak istemiyorum.

bi sekilde cozucem (:
Ali
Ali #7
Kullanıcı başlığı: Python / Java / C,C++  / D
Üye Ock 2011 tarihinden beri · 84 mesaj · Konum: Orjin
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Kusura bakmayin flood gibi oluyor :(

Su sekilde cozdum (:

import std.stdio;
 
void main()
{
 
    int sayi = 0, sim = 0, once = 1, once2 = 1;
 
    while (sim <= 4000000) {
        sim = once + once2;
        once2 = once;
        once = sim;
 
        if (!(sim & 1)) {
            sayi += sim;
        }
    }
 
    writeln(sayi);
}
Ali
acehreli (Moderatör) #8
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
CWSuskun:
Kusura bakmayin flood gibi oluyor

Her sorunun kendi konusu olunca okunması ve bulunması da daha kolay oluyor. :) Ayrıca D ile yazdığımıza göre "Diğer Konular" bölümü artık doğru değil. Bence "Ders Arası" veya "D Programlama Dili" bölümlerinde soru numarasıyla yazarsak daha kullanışlı olur.

Ben de Aralıklar dersindeki ( http://ddili.org/ders/d/araliklar.html ) konuların örneği olarak yazdım:

import std.stdio;
import std.algorithm;
 
struct FibonacciSerisi
{
    int baştaki = 0;
    int sonraki = 1;
 
    static immutable bool empty = false;
 
    @property int front() const
    {
        return baştaki;
    }
 
    void popFront()
    {
        int ikiSonraki = baştaki + sonraki;
        baştaki = sonraki;
        sonraki = ikiSonraki;
    }
}
 
struct SınırlıFibonacciSerisi
{
    int sınır;
    FibonacciSerisi seri;
    int öndeki;
 
    this(int sınır)
    {
        this.sınır = sınır;
        this.öndeki = seri.front;
    }
 
    @property bool empty()
    {
        return öndeki >= sınır;
    }
 
    @property int front()
    {
        return öndeki;
    }
 
    void popFront()
    {
        seri.popFront();
        öndeki = seri.front;
    }
}
 
void main()
{
    writeln(
        reduce!"a + b"(
            0, filter!"(a % 2) == 0"(SınırlıFibonacciSerisi(4_000_000))));
}

Ali
Ali #9
Kullanıcı başlığı: Python / Java / C,C++  / D
Üye Ock 2011 tarihinden beri · 84 mesaj · Konum: Orjin
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Anladima bi su sekilde bir baslik acsam olur sanirim

Project Euler / Soru 3

gibi

her soru icin ayri baslik google icinde iyidir (:

*********

Abi ben daha araliklara gelmedim.

const ve immutable

konusuna gectim

oradayim su an.

Tabii sorular farkli boyutlarda olunca . (:

Son olarak diger birseye dikkat ettim abi

ben std.algorithm

kullanmadan yaziyorum

std.algorithm faydalari nelerdir?

benim yazdigim kod ile karsilastirirsak.
Ali
acehreli (Moderatör) #10
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
CWSuskun:
Project Euler / Soru 3

Çok iyi olur. :)

Abi ben daha araliklara gelmedim.

Ben göz alışkanlığı olsun diye öyle de çözüyorum. (Aralıklar aslında gerçekten de kolay bir konu.)

ben std.algorithm

kullanmadan yaziyorum

std.algorithm faydalari nelerdir?

benim yazdigim kod ile karsilastirirsak.

std.algorithm gibi modüller genel çözümler sunarlar. Örneğin kendi yazdığımız kod çok özel olarak örneğin "10'dan 20'ye kadar olan sayıların çift olanlarının toplamı" olabilir.

Ama o tanımın içinde üç tane genel kavram var:

- belirli bir aralıkta sayı üretme (iota)

- sayı süzme (filter)

- toplam alma (reduce)

Çoğu problem benzer şekilde genel algoritmalar olarak görülebilir. O zaman bizim kod yazmamıza fazla gerek kalmaz. Algoritmaları Lego parçaları gibi birbirlerine takarız. Takma düzeneğini de aralıklar sağlarlar.

Parçaları ayrı ayrı isimlerle yazınca daha anlaşılır oluyor:

import std.stdio;
import std.algorithm;
import std.range;
 
void main()
{
    auto hepsi = iota(10, 21);
    auto süzülmüşleri = filter!"!(a % 2)"(hepsi);
    auto toplamları = reduce!"a + b"(0, süzülmüşleri);
 
    writeln("hepsi            : ", hepsi);
    writeln("süzülmüş olanları: ", süzülmüşleri);
    writeln("toplamları       : ", toplamları);
}

Çıktısı:

hepsi            : [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
süzülmüş olanları: [10, 12, 14, 16, 18, 20]
toplamları       : 90


Kütüphane algoritmalarının büyük bir yararı, uzmanlar tarafından yazılmış olmaları ve çok sayıda programcı tarafından kullanıldıkları için hataları bulunmuş ve giderilmiş olmalarıdır.

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 04:11:15 (UTC -08:00)