Forum: Projeler trileri RSS
toupperInPlace_tr denemesi
canalpay (Moderator) #1
User title: Can Alpay Çiftçi
Member since Jul 2009 · 1032 posts · Location: İzmir
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
Subject: 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 (Moderator) #2
Member since Jun 2009 · 142 posts
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
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 (Moderator) #3
Member since Jun 2009 · 142 posts
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
In reply to post #1
Quote by 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;
}
This post was edited on 2009-09-19, 08:33 by esatarslan52.
canalpay (Moderator) #4
User title: Can Alpay Çiftçi
Member since Jul 2009 · 1032 posts · Location: İzmir
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
Ö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.

Quote by 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 (Moderator) #5
User title: Ali Çehreli
Member since Jun 2009 · 2279 posts
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
In reply to post #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 (Moderator) #6
User title: Can Alpay Çiftçi
Member since Jul 2009 · 1032 posts · Location: İzmir
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
Quote by 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 (Moderator) #7
User title: Ali Çehreli
Member since Jun 2009 · 2279 posts
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
In reply to post #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 (Moderator) #8
User title: Ali Çehreli
Member since Jun 2009 · 2279 posts
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
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 (Moderator) #9
User title: Can Alpay Çiftçi
Member since Jul 2009 · 1032 posts · Location: İzmir
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
In reply to post #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).

Quote by 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 (Moderator) #10
User title: Can Alpay Çiftçi
Member since Jul 2009 · 1032 posts · Location: İzmir
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
Bu arada svn'ye to(upper|lower)InPlace_tr fonsiyonları eklenmiştir.
Unittest için ilk verdiğiniz kodları kullandım.
acehreli (Moderator) #11
User title: Ali Çehreli
Member since Jun 2009 · 2279 posts
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
In reply to post #9
Quote by 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 (Moderator) #12
User title: Can Alpay Çiftçi
Member since Jul 2009 · 1032 posts · Location: İzmir
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
Quote by acehreli:
Biraz yanlış anlaşıldım. :) Sürpriz cmp'un ta kendisi. Şöyle bir Türkçesini yapmaya başlayın hele... He he... :)

Quote by 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.

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


Günahsız kul olmaz :-)
acehreli (Moderator) #13
User title: Ali Çehreli
Member since Jun 2009 · 2279 posts
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
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 (Moderator) #14
User title: Can Alpay Çiftçi
Member since Jul 2009 · 1032 posts · Location: İzmir
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
Quote by 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 (Moderator) #15
User title: Can Alpay Çiftçi
Member since Jul 2009 · 1032 posts · Location: İzmir
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
İ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ü.
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please note the verification code from the picture into the text field next to it.
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Forum: Projeler trileri RSS
Not logged in. · Lost password · Register
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Current time: 2012-05-18, 10:12:24 (UTC -07:00)