Forum: Ders Arası RSS
Romen rakamı olarak yazdırmak
acehreli (Moderatör) #1
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ı
Konu adı: Romen rakamı olarak yazdırmak
ceviz.net'te böyle bir programdan konuşuldu:

  http://forum.ceviz.net/c-c/88844-sayilari-roma-rakamlarina…

D'de denemek isteyen var mı?

Ali
canalpay (Moderatör) #2
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ı
Bende görmüştüm :-)


Romen rakamını bilmesem de(X'den fazlasını ya öğrenmedim ya da unuttum:) )

I     1 (bir) (unus)
V     5 (beş) (quinque)
X     10 (on) (decem)
L     50 (elli) (quinquaginta)
C     100 (yüz) (centum)
D     500 (beşyüz) (quingenti)
M     1000 (bin) (mille)

Bunları bilmek yeterli olacaktır.


Ceviz.net'tekinden biraz daha farklı bir yöntem izleyebiliriz:
İlk 5'in modunu alırız. Ona göre | || ||| |V olacağına karar veririz filan.
Deniyorum şuan.


(Bu arada şu D'nin girişini(din.) hiç sevemedim.)
canalpay (Moderatör) #3
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ı
Yazdım :-)

Yazarken http://www.novaroma.org/via_romana/numbers.html buradan birde ceviz.net'teki şuanki en son mesajdan yararlandım.

import std.cstream;
void main()
{
    int sayı;
    
    dout.writef("Romen rakamına dönüştürmek istediğiniz sayı :");
    din.readf(&sayı);
    romen(sayı);
    
}
 
 
 
 
void romen(int say)
{
    string[] romen1B=["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"];
    string[] romen10B=["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"];
    string[] romen100B=["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"];
    string[] romen1000B=["", "M", "MM", "MMM", "MMMM", "(V)", "(V)M", "(V)MM", "(V)MMM", "M(X)"];
    string[] romen10BB=["", "(X)", "(XX)", "(XXX)", "(XL)", "(L)", "(LX)", "(LXX)", "(LXXX)", "(XC)"];
    string[] romen100BB=["", "(C)", "(CC)", "(CCC)", "(CD)", "(D)", "(DC)", "(DCC)", "(DCCC)", "(CM)"];    
    int sayı=say;
    
    string birler = romen1B[sayı % 10];
    sayı/=10;
    string onlar = romen10B[sayı % 10];
    sayı/=10;
    string yüzler= romen100B[sayı % 10];
    sayı/=10;
    string binler = romen1000B[sayı % 10];
    sayı/=10;
    string onbinler = romen10BB[sayı % 10];
    sayı/=10;
    string yüzbinler = romen100BB[sayı % 10];
    sayı/=10;
 
dout.writefln(yüzbinler,onbinler,binler,yüzler,onlar,birler);
 
 
}

Yinede uğraştırdı. Bunun nedeni algoritma değil çünkü zaten ceviz'den bakarak yaptım ama D'ye çevirirken sorun yaşadım :-) Hepsi basit sorunlar da olsa görmeyince insan görmüyor.
acehreli (Moderatör) #4
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ı
Beni de oldukça uğraştırdı. :)

Ben de orada da söylediğim gibi, dizginin başına eklemek aklıma gelmediği için sonunda reverse ile düzelteceğim diye bütün dizgileri ters olarak yazdım.

Bir de standart olduğundan şüphe duyduğum halde parantez içinde parantez de kullanarak:

import std.cstream;
import std.algorithm;
 
// Ayna görüntüsü olarak sonuçlar
const string[10][] basamaklar =
[
    // birler
    [ "", "I", "II", "III", "VI", "V", "IV", "IIV", "IIIV", "XI" ],
 
    // onlar
    [ "", "X", "XX", "XXX", "LX", "L", "XL", "XXL", "XXXL", "CX" ],
 
    // yüzler
    [ "", "C", "CC", "CCC", "DC", "D", "CD", "CCD", "CCCD", "MC" ],
 
    // binler
    [ "", "M", "MM", "MMM", ")VI(", ")V(", ")IV(", ")IIV(", ")IIIV(", ")XI(" ],
 
    // on binler
    [ "", ")X(", ")XX(", ")XXX(", ")LX(", ")L(", ")XL(", ")XXL(", ")XXXL(", ")CX(" ],
 
    // yüz binler
    [ "", ")C(", ")CC(", ")CCC(", ")DC(", ")D(", ")CD(", ")CCD(", ")CCCD(", ")MC(" ],
 
    // milyonlar
    [ "", ")M(", ")MM(", ")MMM(", "))VI((", "))V((", "))IV((", "))IIV((", "))IIIV((",
                                                                             "))XI((" ]
];
 
char[] romenRakamı(int sayı)
{
    char[] sonuç;
 
    foreach(basamak; basamaklar) {
        sonuç ~= basamak[sayı % 10];
        sayı /= 10;
 
        if (!sayı) {
            break;
        }
    }
 
    reverse(sonuç);
 
    return sonuç;
}
 
void main()
{
    int sayı;
    din.readf(&sayı);
    dout.writefln(romenRakamı(sayı));
}

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-19, 19:40:23 (UTC -08:00)