Forum: Ders Arası RSS
Acemi işi koşul sistemi
Sayfa:  1  2  3  4  sonraki 
Avatar
huseyin #1
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Acemi işi koşul sistemi
Merhaba arkadaşlar
öncelikle Sql i iyi bilenlerden bir ricam var bana where kosulunda sadece sayı mı kullanılıyor belirtirlerse sevinirim
Tasarımım şu şekilde önerisi olan varsa lütfen söylesin
Database dbase=Database("db");
    Subtable subt;
        Data a;
    dbase.open();
    subt=dbase["tablo1"];
    a=subt["sayilar"].condition("<=",15); //işaret ve degeri giriyoruz döndürdüğü değer Data 
Huseyin
erdem (Moderatör) #2
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Hayır sayısal değerler için sayı, dizgiler için tırnak kullanılıyor diye biliyorum.

SELECT * FROM Kisiler
WHERE Sehir='Eses'


Öneri olarak SQL ya da benzeri bir yazım biçimi de olabilir. Hatta ben olsam hem kaynak kodları hem de sorgu ifadelerini Türkçe yazardım.
Avatar
huseyin #3
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
biz sql tarzı düşünmedik ama ikinci hedefim de o olacak
kaynak koda ingilizce başladık öyle devam ediyor artık
Peki biz bu mantığı nasıl çözeceğiz ya ? benim şuanda yazdığım yanlış bir kod çünkü dönen değer sadece o Data da değil Tüm subtablede onunla eşlenmiş olan değer yani hepsinde de
 
"datas[i]"
olan değer oluyor galiba
Huseyin
Kadir Can #4
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Tam olarak anlayamadım; ama sanırım veritabanındaki bütün tablolarda arama yapıldığını söylüyorsun. Yanlış anlamadıysam sen sadece bir tabloda aramak istiyorsun, değil mi?
Avatar
huseyin #5
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ben zaten bir tabloda arıyorum asıl sorun sql aradıktan sonra bulduğu sonucu diğer anahtarları ile birlikte veriyor yani bir subtable veriyor ben ise sadece bir anahtarı yani Data veriyorum
Huseyin
acehreli (Moderatör) #6
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ı
Böyle özelleşmiş diller (yani SQL gibi domain specific language) yerine bir temsilci almaya ne dersin? Sana verilen koşulu veri üzerinde işletir ve uyanlara eriştirirsin.

Hangi yöntemle olursa olsun veriyi nasıl sunacağının da önemi var: En kolayı kopyalarını bir dilim olarak vermek olabilir. Tabii büyük verilerde pahalı olabilir.

Daha iyisi veriye tembel olarak erişim sağlamaktır. C++'ta 'iterator'lar var; D aralık soyutlamasını kullanıyor. Yani senin condition() bir aralık döndürebilir ve kullanıcı popFront() dedikçe bir sonraki veriye geçebilirsin. Ama şart değil tabii: sonuç dilim olarak da verilebilir.

Ali
Avatar
huseyin #7
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yani tamamen bana kalmış bir olay diyorsunuz .Benim merak ettiğim aslında şu hani bir web sitesinde kullanıcı adı şifreyi doğrulamak için sql de and ile birleştiriyoruz ya dönen değer hepsinden dönüyor yani her anahtardan ona eşlenen değer dönüyor ben bunu merak ediyorum mantığı nedir acaba ?
Huseyin
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ı
Söylediğini ben anlayamadım. And ile birleştirince sorgunun her iki tarafının da tutması gerekir. (Bunu sorduğunu sanmıyorum.)

Eğer anahtarın ve değerin birlikte dönmesinden bahsediyorsan onu da ikisinden oluşan bir yapı olarak döndürebilirsin. Yani bir kere bulduktan sonra onunla ilgili istediğin veriyi döndürebilirsin.

Ben yine de anladığımı sandığım soruyu SQL deneyimim olmadan yanıtlamaya çalışıyorum: :)

SQL gibi bir düzenekte veri genellikle başka bir programda ve hatta başka bir sunucuda olabiliyor. Öyle olduğu için veriyi teker teker almak çok zaman kaybına neden olabilir: Program ilk uyan veriyi kullanacak sonra "sonrakine geç" diyecek; bu çağrı sunucuya gidecek; işlenecek; geri gelecek... Yavaş iş. (Aslında veri çok büyük olduğunda yararlı olan 'cursor' kavramı da var.)

Hem o yüzden hem de zaten en kolayı olduğu için sonuçların hepsini birden gönderilir. (Biz SQL kullanmıyoruz ama bizde de uyan veriler tek parça halinde gönderiliyorlar.)

Sen de bunu uygulayabilirsin: Uyan bütün veriyi tek dilim halinde döndürürsün; olur biter. Çoğu SQL kullanımı ile aynı işi yapmış olursun.

Ama senin durumunda veri ile program yan yana olduklarından bir avantajdan yararlanmak isteyebilirsin: Sorgulanan veriyi teker teker sunmak. Böylece hepsini tutacak kadar büyük bir dizi oluşturulması gerekmez; ve belki de yeterli olan ilk bir kaç veriden gerisi sorgulanmamış olur.

Ben kolay olduğu için hiç olmazsa şimdilik dilim döndürmeni öneririm.

Ali
Avatar
huseyin #9
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Dilim dondurmekten kastınız tam olarak nedir benim düşündüğüm şu şekildeydi
Tabi bu taslak hali = işleminde farklı onda string de varmış

for(int i=0;i<datas.length;++i)
            {
                if(to!(int)(datas[i])<deger)
                {
                    returndata.datas~=datas[i];
                }
                else
                {
                    ++i;
                }
            }
Huseyin
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ı
Evet, aynı şeyi düşünüyoruz. Benim dilim dediğim, senin returndata.datas dilimin. Sonuç olarak onu (veya tabii returndata'yı) döndürüyorsun, değil mi?

Oradaki if koşuluna kullanıcıdan alacağın kıstas işlevini yerleştirmek kullanışlılığını çok arttıracak.

Ali
Avatar
huseyin #11
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
returndata yı döndürüyorum if işleminin yerine ne yerleştireceğimi anlamadım ?
Huseyin
Avatar
huseyin #12
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
BU şekilde mi
Data condition(string isaret,int deger)
    {
        Data returndata;
        returndata=returndata.init;
        final switch (isaret)
        {
            case "<":
            
            for(int i=0;i<datas.length;++i)
            {
                if(to!(int)(datas[i])<deger)
                {
                    returndata.datas~=datas[i];
                }
                else
                {
                    ++i;
                }
            }
            break;
            case ">":
            for(int i=0;i<datas.length;++i)
            {
                if(to!(int)(datas[i])>deger)
                {
                    returndata.datas~=datas[i];
                }
                else
                {
                    ++i;
                }
            }
            break;
            
            case "<=":
                for(int i=0;i<datas.length;++i)
            {
                if(to!(int)(datas[i])<=deger)
                {
                    returndata.datas~=datas[i];
                }
                else
                {
                    ++i;
                }
            }
            break;
            case ">=":
                for(int i=0;i<datas.length;++i)
            {
                if(to!(int)(datas[i])>=deger)
                {
                    returndata.datas~=datas[i];
                }
                else
                {
                    ++i;
                }
            }
            break;
            
        }
        return returndata;
        
    }
Huseyin
acehreli (Moderatör) #13
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 #11
Aşağıda küçük bir örnek var. Programcı vt.ara() çağrısına bir kıstas gönderiyor ve sonuçları bir dilim olarak alıyor:

struct VeriTabanı
{
    int[] veriler;
 
    void ekle(int veri)
    {
        veriler ~= veri;
    }
 
    alias bool delegate(int) Kıstas;
 
    int[] ara(Kıstas kıstas)
    {
        int[] sonuç;
 
        foreach (veri; veriler) {
            if (kıstas(veri)) {
                sonuç ~= veri;
            }
        }
 
        return sonuç;
    }
}
 
void main()
{
    auto vt = VeriTabanı();
 
    foreach (i; 0 .. 10) {
        vt.ekle(i);
    }
 
    // Üçe tam bölünenler
    auto bulunanlar = vt.ara(v => (v % 3) == 0);
    assert(bulunanlar == [0, 3, 6, 9]);
}

vt.ara()'ya lambda göndermek yerine başlı başına bir işlev de gönderilebilir:

    // Yukarıdakiyle aynı şey
    bool üçeTamBölünür_mü(int sayı)
    {
        return (sayı % 3) == 0;
    }
 
    auto bulunanlar = vt.ara(&üçeTamBölünür_mü);

Ali
Avatar
huseyin #14
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Evet anladım galiba deneyelim bakalım benim yazdığım switch kullanıyor o da çok kod kalabalığı yapıyor
Yanlız ben hep string ler üzerinde çalıştım veritabanında onu yazarken sonra string e mi çevireyim
Huseyin
Bu mesaj huseyin tarafından değiştirildi; zaman: 2012-07-18, 00:40.
acehreli (Moderatör) #15
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 #12
huseyin325325:
BU şekilde mi
            case "<":
            
            for(int i=0;i<datas.length;++i)
            {
                if(to!(int)(datas[i])<deger)

Evet, o da olur ama her işlemi kendin desteklemek zorunda kalıyorsun. Senin istemcin aynı programın içinde olduğundan sana kıstas olarak bir temsilci veya işlev gönderebilirler. Sen de yalnızca onun kıstasını çağırırsın.

(Not: İstemci uzakta olsa "<" diye gerçekleştirdiğin çözüm gerekecektir çünkü örneğin kıstas işlevi internet üzerinden geçemez; bir şekilde string haline gelmesi gerekecektir.)

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:
Sayfa:  1  2  3  4  sonraki 
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-19, 08:14:07 (UTC -08:00)