Thread overview
Romen rakamı olarak yazdırmak
January 30, 2010

ceviz.net'te böyle bir programdan konuşuldu:

http://forum.ceviz.net/c-c/88844-sayilari-roma-rakamlarina-ceviren-program.html

D'de denemek isteyen var mı?

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 31, 2010

Bende görmüştüm :-)

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

Alıntı:

>

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.)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 31, 2010

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.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 31, 2010

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]