Forum: Projeler trileri RSS
toupperInPlace_tr denemesi
canalpay (Moderatör) #1
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: toupperInPlace_tr denemesi
Aynı anda ikisi tamamen benim yazdığım biri de phobosdan alıp düzenlediğim 3 toupperInPlace_tr uygulaması var.

Bir tanesi oldu gibi. Büyültüyor ve I ile İ'de düzgün oluyor gibi.
void toupperInPlace_tr(T)(ref T[] s){
    dchar[] dene = to!(dchar[])(s);
    dstring giriş = dene.idup;
    dchar büyükHarf;
 
    dchar[] çıkış;
    çıkış.length = giriş.length;
 
    foreach(int i, dchar küçükHarf; giriş) {
        büyükHarf = (küçükHarf == 'i') ? 'İ' : toUniUpper(küçükHarf);
        çıkış[i] = büyükHarf;
    }
    s = to!(T[])(çıkış);
}

Sizce eksik bir şey kaldı mı ?

Ayrıca referans ne demek ? Galiba diğer denemelerimde referans ile ilgili sorunlarım oluşuyor.
Avatar
esatarslan52 (Moderatör) #2
Üye Haz 2009 tarihinden beri · 142 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Fazladan değişken ve tür dönüşümleri var sanki. Birazdaha kısası aşağıdaki şekilde olabilir.
void toupperInPlace_tr(T)(ref T[] s){
    dchar[] dene = to!(dchar[])(s);
 
    foreach(int i, dchar küçükHarf; dene) {
        dene[i] = (küçükHarf == 'i') ? 'İ' : toUniUpper(küçükHarf);
        //i++;
    }
    s = to!(T[])(dene);
}

Benim çözümümde farklı olarak döngüyü for ile kurmuştum. Bİrde "i" değişkeninin değerini foreach kendisi otomatik olarak bir arttırıyormuş  :huh:
Avatar
esatarslan52 (Moderatör) #3
Üye Haz 2009 tarihinden beri · 142 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #1
canalpay:
Ayrıca referans ne demek ? Galiba diğer denemelerimde referans ile ilgili sorunlarım oluşuyor.

Referanslar sayesinde parametre olarak fonksiyona gönderilen değişken üzerinde yapılan değişikler direk olarak değişkenin kendisini etkiler.

Fonksiyona referans olarak gönderilmeyen değişklerin fonksiyona girmeden önce bir kopyası oluşturulur ve o değişken üzerinde fonksiyon içinde yapılan bütün işlemler kopyasını etkiler yani değişkenin orjinal hali hiç bozulmaz.

Söylediklerimi okuyunca ben bile anlamakta zorlandım :-D O yüzden şöyle küçük bir örnek işleri daha kolaylaştırır.

import std.stdio;
 
void birşeyYap1(int pSayı)
{
    pSayı = 50;
}
void birşeyYap2(ref int pSayı)
{
    pSayı = 150;
}
 
int main()
{
    int sayı1=5;
    int sayı2 =15;
    
    //Sayı1 in değeri değişmicek    
    birşeyYap1(sayı1);
    //Sayı2 nin değeri değişecek
    birşeyYap2(sayı2);
    
    writeln(sayı1);
    writeln(sayı2);
    return 0;
}
Bu mesaj esatarslan52 tarafından değiştirildi; zaman: 2009-09-19, 08:33.
canalpay (Moderatör) #4
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Örnek için teşekkürler.

Evet bazı saçma tür dönüşümleri yapmışım. toUniUpper'ı dchar[] aldığını unutmuştum. Onun için yapmıştım.

esatarslan52:
Bİrde "i" değişkeninin değerini foreach kendisi otomatik olarak bir arttırıyormuş  :huh:


Galiba c++'a göre foreach çok gelişmiş.

E ozaman birimiz ekleyelim svn'ye.
acehreli (Moderatör) #5
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4481 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #3
Elinize sağlık arkadaşlar... :)

Birim test olarak da şuna benzer bir şey kullanabiliriz:

unittest
{
    dchar[] d = "aıiğşöz"d.dup;
    toupperInPlace_tr(d);
    assert(d == "AIİĞŞÖZ");
 
    wchar[] w = "ğıaibBcıĞizİŞIıi"w.dup;
    toupperInPlace_tr(w);
    assert(w == "ĞIAİBBCIĞİZİŞIIİ");
 
    char[] c = "aiığz"c.dup;
    toupperInPlace_tr(c);
    assert(c == "AİIĞZ");
}

(Biraz sonra yerel fonksiyon olanağını deneyerek onu daha da küçülteceğim.)

Ali
canalpay (Moderatör) #6
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
(Biraz sonra yerel fonksiyon olanağını deneyerek onu daha da küçülteceğim.)


Onu derken toupperInPlace_tr kodundan mı bahsediyorsunuz.

Birde tr.string belgesine bakar mısınız ? Nedense orada parametreler boş gözüküyor. Çözümü bulamadım. Sadece stringde böyle oluyor. Uni de sorun yok.
acehreli (Moderatör) #7
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4481 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #5
(toupperInPlace_tr'nin unittest'inden bahsadiyorum.)

Bunun daha kısa olduğu tartışılır :) ama hiç olmazsa kod tekrarını azaltıyor

unittest
{
    void toupperInPlace_tr_dene(T)(T dizgi, T beklenen)
    {
        auto d = dizgi.dup;
        toupperInPlace_tr(d);
        assert(d == beklenen);
    }
 
    toupperInPlace_tr_dene("ğıaibBcıĞizİŞIıi"c,
                           "ĞIAİBBCIĞİZİŞIIİ"c);
    toupperInPlace_tr_dene("ğıaibBcıĞizİŞIıi"w,
                           "ĞIAİBBCIĞİZİŞIIİ"w);
    toupperInPlace_tr_dene("ğıaibBcıĞizİŞIıi"d,
                           "ĞIAİBBCIĞİZİŞIIİ"d);
}

Ali
acehreli (Moderatör) #8
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4481 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Parametrelerin boş çıkma konusunu belge.ddoc'a not etmişim:

/*
 * Projenin html belgelerinde kullanılan Türkçeler.
 *
 * Bakınız: http://www.digitalmars.com/d/2.0/ddoc.html
 *
 * BUG: Ddoc'un Unicode karakterlerle ilgili bir hatası yüzünden Türkçe
 *      fonksiyon parametreleri html belgelerinde çıkmayabiliyor:
 *
 *          http://d.puremagic.com/issues/show_bug.cgi?id=1812
 */

Geçici çözüm olarak parametrelerde Türkçe harf kullanmayabiliriz ama bence kodumuzu etkilemek yerine adamların hatayı gidermelerini bekleyelim.

Ali
canalpay (Moderatör) #9
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #7
Bence ilki daha okunaklı.  İkinci fonksiyon oluşturarak yaptığınız unittest bence çok fazla unittest denemek için ideal. Ama o kadar unittest'e gerek yok. Çünkü ortada o kadar çok ihtimal yok.

Ben svn'ye eklemek için hazırlıklar yapayım mı? upper yazıldığı için lower'ı kolayca yazabiliri(m|z).

acehreli:
Geçici çözüm olarak parametrelerde Türkçe harf kullanmayabiliriz ama bence kodumuzu etkilemek yerine adamların hatayı gidermelerini bekleyelim.

Gidercekleri kesin mi  ? :-)

Geride iki tane fonksiyon kaldı.


- int cmp(C1, C2)(in C1[] s1, in C2[] s2); Süprinizi bekliyorum Ali Bey.


- CaseSensitive yes olabilen bütün fonksiyonlarda yesli hali düzeltilmesi gerekiyor.
canalpay (Moderatör) #10
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bu arada svn'ye to(upper|lower)InPlace_tr fonsiyonları eklenmiştir.
Unittest için ilk verdiğiniz kodları kullandım.
acehreli (Moderatör) #11
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4481 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #9
canalpay:
Bence ilki daha okunaklı.

Kesinlikle katılıyorum. Ama onda bir programcılık günahı var: kod tekrarı. :)

Ben svn'ye eklemek için hazırlıklar yapayım mı? upper yazıldığı için lower'ı kolayca yazabiliri(m|z).

Tabii ki...

int cmp(C1, C2)(in C1[] s1, in C2[] s2); Süprinizi bekliyorum Ali Bey.

Biraz yanlış anlaşıldım. :) Sürpriz cmp'un ta kendisi. Şöyle bir Türkçesini yapmaya başlayın hele... He he... :)

Ali
canalpay (Moderatör) #12
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Biraz yanlış anlaşıldım. :) Sürpriz cmp'un ta kendisi. Şöyle bir Türkçesini yapmaya başlayın hele... He he... :)

esatarslan52:
Biz bütün bunları görmedik okumadık bunlar yaşanmadı Ali hocam :-D . Sürprizi beklemeye devam ediyoruz.Hatta Ne sürpriz mi biri sürpriz mi yapacak ?. Unuttuk gitti bile  :-D
Tek ben yanlış anlamadım sanırım.

Tahminim cmp Türkçe karakteri destekliyor. Ama destekleyemez ki. Ya süpriz başka bir şey yada ben yanıldım.

acehreli:
Kesinlikle katılıyorum. Ama onda bir programcılık günahı var: kod tekrarı. :)


Günahsız kul olmaz :-)
acehreli (Moderatör) #13
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4481 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
cmp, bundan önce Türkçeleştirilen fonksiyonlar yanında çok zor olacak. Ötekilerin kolaylığına aldanıp buna da bir heves başladıktan sonra sürprizle karşılaşacaktık.

Sürpriz o olacaktı... :)

Size kolay da gelebilir ama bence çok zor. Başlayın hele... :)

Ali
canalpay (Moderatör) #14
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
cmp, bundan önce Türkçeleştirilen fonksiyonlar yanında çok zor olacak. Ötekilerin kolaylığına aldanıp buna da bir heves başladıktan sonra sürprizle karşılaşacaktık.

Sürpriz o olacaktı... :)

Size kolay da gelebilir ama bence çok zor. Başlayın hele... :)

He öyle ise ben zaten tahmin ettiğim için başlamadım :-D Eğer dikkat ettiyseniz kolaylarından 6 tane filan fonksiyonu ben ekledim. Size zorları bıraktım, yoksa ben o fonksiyonları rastgele mi seçtim sandınız :-D
canalpay (Moderatör) #15
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
İki dizgiyi karşılaştırır. cmp küçük büyük harf ayrımı yapar.

Tamam iki dizgiyi karşılaştırıyorda neye göre karşılaştırıyor ? Küçük büyük neye göre karar veriyor. Wiki pek açıklayıcı olmamış.
Sanırım ilk boyutu karşılaştırıyor. Sonrada boyut aynı ise yazılar aynı mı diye karşılaştırıyor. char içinde Türkçe harfler 2 baytlık olduğu için sorun oluşabiliyor. ı i de yine başka bir sorun var. Benim anladığım sorun bu.

Eğer 2 baytlar sorun oluyorsa şablon yerine dstring kullanırız ama şuan fonksiyonu hiç kullanmadığım ve wiki'dende bir şey anlamadığım için boş yorum yapıyorum.

Tahminim casesenstive'de zor olacak. Belki şuan fonksiyonun nasıl yazıldığını bilmediğim için çok zor geliyor ama bana ikisi çok zor gözüktü.
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: Projeler trileri 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-09-25, 15:11:59 (UTC -07:00)