Forum: Ders Arası RSS
Project Euler Soru 6
Kadir Can #1
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Project Euler Soru 6
Bu soru da oldukça kolaydı.Yalnız gözüme çarpan bir nokta var.
Kod:
import std.stdio;
void main()
{
    long[] sayılar;
    long karetop;
    long topkare;
    foreach( long arada ; 1..101 ){
        sayılar ~= arada;
    }
    foreach( long arada; sayılar ){
        karetop += arada * arada;
    }
    foreach( long arada; sayılar ){
        topkare += arada;
    }
    topkare *= topkare;
    writeln( topkare - karetop );
}
Gözüme çarpan nokta şu; long[] sayılar = 1..101 şeklinde atama yapamıyoruz.Neden böyle?
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ı
Bendeki 6.nin cozumu ise soyle gelisti

import std.stdio;
 
void main()
{
    int a = 0;
    int b = 0;
    for(int i = 0; i <= 100; i++) {
        a += i * i;
    }
    for(int i = 0; i <= 100; i++) {
        b += i;
    }
    b = b * b;
    writeln(b - a);
}
Ali
Kadir Can #3
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Aynı şekilde yapmışız aslında.Sadece ben sayıları bir değişkende tutmuşum, sen döngüde belirtmişsin.
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ı
Sizin yaptiginizi daha iyi buluyorum hocam.

Sayilari degiskene alip, onun uzerinden goturmek (:
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ı
Yanıtlanan mesaj #1
Sayı döngüsü olarak da olur, iota'yı foreach ile kullanarak da:

import std.stdio;
import std.range;
 
void main()
{
    foreach (i; iota(0, 11)) {
        writeln(i);
    }
}

(Bu arada, iota'nın üçüncü parametresi sayı adımını belirler. Örneğin ikişer ikişer: iota(0, 11, 2)).

Kadir Can:
long[] sayılar = 1..101 şeklinde atama yapamıyoruz

Önceki yöntemler hep tembeldirler (lazy evaluation). Hiç sayı dizisi oluşmaz. Eğer gerçekten de bir dizinin hevesli olarak (eager evaluation) olarak oluşturulması gerekiyorsa, o zaman "aralıktan dizi üreten" std.array.array kullanılabilir:

import std.stdio;
import std.range;
import std.array;
 
void main()
{
    writeln(array(iota(0, 11)));
}

Ali
Bu mesaj acehreli tarafından değiştirildi; zaman: 2011-06-30, 07:30.
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ı
Her mesaj ayri bir ders (:

Cok sagolun hocam (:

Hocam aslinda biz problemleri cozsek (:

Sizin vaktiniz olursa kutuphanelerin kullanimiyla birlikte bu sekilde verseniz harika olur ama tabii zaman onemli
Ali
Kadir Can #7
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #5
Teşekkürler Ali Bey;
Bundan sonra çok işime yarayacak bir fonksiyonmuş std.array.array .
Ali #8
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ı
Bu

std.array cok mu hizli bana mi oyle geldi?

1 milyonluk bir diziyi yazdirdi su an

hemde hizli bir bicimde kasma yapmadan.
Ali
acehreli (Moderatör) #9
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:
Bu

std.array cok mu hizli bana mi oyle geldi?

1 milyonluk bir diziyi yazdirdi su an

hemde hizli bir bicimde kasma yapmadan.

Bilgisayarlar hızlı! :) Bende writeln(iota(0, 10_000_000)) 2.4 saniye kadar sürüyor; writeln(array(iota(0, 10_000_000))) da 2.5 saniye kadar.

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ı
Türkçe'si: "Karelerin toplamı ile toplamların kareleri arasındaki farkı hesaplayınız."

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-22, 05:04:00 (UTC -08:00)