D.ershane D Programlama Dili Dersleri

çökme: [crash], programın hata ile sonlanması
düzen: [format], bilginin giriş ve çıkışta nasıl düzenlendiği
işlev: [function], programdaki bir kaç adımı bir araya getiren program parçası
parametre: [parameter], işleve işini yapması için verilen bilgi
Phobos: [Phobos], D dilinin standart kütüphanesi
... bütün sözlük

Bölümler
İngilizce Kaynaklar
Diğer



Giriş Düzeni



Not: Phobos'un bir hatası yüzünden, bu derslerdeki örneklerdeki düzen dizgilerinin hepsinin sonuna bir .dup eklemek zorunda kaldım. Ne yazık ki o hata, .dup'suz derlenen programların çökmesine neden oluyor.

Hata giderildiğinde, hem bu notu hem de normalde gerekmeyen aşağıdaki .dup'ları kaldıracağım.



Çıktı düzeni dersinde anlatılanlara benzer şekilde, girişten gelen verilerin düzeni de belirtilebilir. Bu düzen; hem okunması istenen bilgiyi, hem de gözardı edilmesi istenen bilgiyi belirtebilir.

Düzen dizgisi kullanılmadığında değerler çıkışa sanki %s belirteci kullanılmış gibi yazdırılıyorlardı. Girişten okurken de normalde düzen belirteci kullanılmadığında, her değişken kendi türünün normal düzeni olarak okunur. Örneğin şu readf çağrılarının ikisi de aynı şekilde çalışır; ikisi de girişten bir kesirli sayı okur:

    double sayı;

    din.readf(&sayı);
    din.readf("%f".dup, &sayı);

Giriş için kullanılan düzen dizgisi, C'deki scanf işlevinin düzen dizgisine çok benzer.

Düzen dizgisi içinde üç tür bilgi bulunabilir:

O bilgiler sayesinde, girişten gelen veri içerisinden bizim için önemli olanlarını seçip çıkartmak ve geri kalanını gözardı etmek son derece kolaydır.

Ayrıntıya girmeden önce, bu üç tür bilgiyi kullanan bir örneğe bakalım. Girişte tek satır halinde şöyle bir bilgi bulunsun:

öğrenci_numarası:123 öğrenci_ismi:Ayşe

O satır içerisinden bizim için önemli olan iki bilgi, öğrencinin numarası ve ismi olsun; yani girişteki öğrenci_numarası: ve öğrenci_ismi: gibi karakterlerin bizim için bir önemi bulunmasın. İşte o satır içinden öğrencinin numarasını ve ismini seçen ve geri kalanını gözardı eden bir düzen dizgisi şöyle yazılabilir:

    int numara;
    char[] isim;
    din.readf("öğrenci_numarası:%d öğrenci_ismi:%s".dup,
              &numara, &isim);

%d ve %s, belirtildikleri noktalarda girişte sırasıyla bir tamsayı ve bir dizgi olduğunu ifade ederler.

"öğrenci_numarası:%d öğrenci_ismi:%s" düzen dizgisi içinde maviyle gösterdiğim bütün karakterler girişte aynen bulunmalıdırlar; onlar readf tarafından girişten okunup gözardı edilirler.

O düzen dizgisinde kullanılan tek boşluk karakteri, girişte o noktada bulunan bütün boşluk karakterlerinin gözardı edilmelerine neden olur.

Girişte kullanılan düzen belirteçleri, çıkışta kullanılanlardan çok daha basittir:

   % genişlik düzen_karakteri

Baştaki % karakterinin ve sondaki düzen karakterinin yazılması şarttır, genişlik ise isteğe bağlıdır.

% karakterinin böyle özel bir anlamı olduğu için, girişte % karakterinin kendisinin gözardı edilmesi istendiğinde %% şeklinde çift olarak yazılır.

düzen_karakteri

d: onlu sistemde tamsayı

o: sekizli sistemde tamsayı

x: onaltılı sistemde tamsayı

i: tabanı bilinmeyen tamsayı; 0x ile başlarsa onaltılı, 0 ile başlarsa sekizli, değilse onlu olarak okunur

f: kesirli sayı

s: sözcük

c: tek bir karakter; bu belirteç, boşlukları da okur (gözardı edilmelerini önler)

n: şimdiye kadar okunan karakter sayısı

Örneğin girişte 3 tane "23" bulunduğunu varsayarsak; değer, düzen belirtecine göre farklı olarak okunur:

    int sayı_d;
    int sayı_o;
    int sayı_x;

    din.readf("%d %o %x".dup, &sayı_d, &sayı_o, &sayı_x);

    dout.writefln("onlu olarak okununca    : ", sayı_d);
    dout.writefln("sekizli olarak okununca : ", sayı_o);
    dout.writefln("onaltılı olarak okununca: ", sayı_x);

Girişine 3 defa "23" girdiğimiz halde, değerler farklı okunur:

onlu olarak okununca    : 23
sekizli olarak okununca : 19
onaltılı olarak okununca: 35

Not: Çok kısaca; "23", sekizli düzende 2x8+3=19 değerinde, ve onaltılı düzende 2x16+3=35 değerindedir.

genişlik

Normalde değer, düzen belirtecine uyan bütün karakterleri içerir. Örneğin girişte "1234" şeklinde bulunan karakterler %d ile 1234 değerinde okunurlar. Düzen belirtecinin genişlik bölümü, bize o dört karakteri örneğin iki farklı tamsayı olarak okuma olanağı sağlar:

    din.readf("%2d%2d".dup, &birinci, &ikinci);
    dout.writefln("birinci: %d, ikinci: %d", birinci, ikinci);

Girişten "1234" geldiğinde:

birinci: 12, ikinci: 34
Problem
  • Girişten yıl.ay.gün düzeninde bir tarih bilgisi gelsin. Ekrana kaçıncı ay olduğunu yazdırın. Örneğin 2009.09.30 geldiğinde 9 yazılsın.
... çözüm