+ Cevap Yaz
Toplam 3 sayfadan 2. sayfa
İlkİlk 1 2 3 En SonEn Son
21 sonuçtan 11 ile 20 arası gösteriliyor

Konu: sayıları roma rakamlarına çeviren program

  1. #11
    energy engineer
    Üyelik Tarihi
    08/2008
    Yer
    Ankara||Istanbul
    Mesaj
    1,313

    çok karışık bu roma rakamları,
    ben cayma hakkımı kullanmak istiyorum nasıl olsa ödev falan değil
    ...

  2. #12
    Ali Çehreli
    Üyelik Tarihi
    10/2002
    Mesaj
    2,901

    Cayma! Yanılmıyorsam çok basit bir algoritma:

    - büyük hanelerden başla
    - bu hanenin değerine böl
    - bölüm 1, 2, veya 3 ise o kadar sayıda karakter yazdır (örneğin 2: II)
    - bölüm 4 ise, bu hanenin karakterini ve bir büyük hanenin karakterini yan yana yazdır (örneğin 40'ı 10'a bölünce 4 kaldığı için XL)
    - kalanıyla devam et

    Bölüm 5 olamaz. Sıfır olursa hiçbir şey yazma...

    Kendim yazmadım ama öyle olurmuş gibi geliyor.

    Ali

  3. #13
    energy engineer
    Üyelik Tarihi
    08/2008
    Yer
    Ankara||Istanbul
    Mesaj
    1,313

    caymayım erteleyim o zaman, bi yere not ediyorum bu programı bi ara yaparım, bi ara ne zaman gelir bilmem
    ...

  4. #14
    Ali Çehreli
    Üyelik Tarihi
    10/2002
    Mesaj
    2,901

    Ben şimdi bakıyorum... Haklısın: o kadar kolay değilmiş.

    Ali

  5. #15
    Ali Çehreli
    Üyelik Tarihi
    10/2002
    Mesaj
    2,901

    Beni zorlayan tarafı, 49 gibi değerlerin nasıl yazıldıklarını bilmememmiş: Örneğin 50-1 anlamında IL'nin yasal olup olmadığını bilmiyordum. Yasal değilmiş.

    Beni yanıltan; 1, 5, 10, 50, vs. gibi aksak değerler oldu. Oysa onlardan bağımsız olarak, ondalık sayı sistemindeki gibi ele almak gerekiyormuş: birler, onlar, yüzler, vs.

    Örneğin 1649: 1000 için M, 600 için DC, 40 için XL, ve 9 için IX.

    Ek kural: Sayıları parantez içinde yazdırmak "bin katı" anlamına geliyor. Örneğin bir milyon için (M).

    Ali

  6. #16
    Üye
    Üyelik Tarihi
    10/2009
    Mesaj
    43

    Dizilerle yazmayı denedim ve doğru çalıştı:

    PHP Kodu:
    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    #include <string>

    using namespace std;


    int _tmain(int argc_TCHARargv[])
    {
        
    int Sayi 0;

        
    string Sonuc "";

        
    string RomaBinler[] = {"""M""MM""MMM""MMMM""(V)""(V)M""(V)MM""(V)MMM""M(X)"};
        
    string RomaYuzler[] = {"""C""CC""CCC""CD""D""DC""DCC""DCCC""CM"};
        
    string RomaOnlar[] = {"""X""XX""XXX""XL""L""LX""LXX""LXXX""XC"};
        
    string RomaBirler[] = {"""I""II""III""IV""V""VI""VII""VIII""IX"};
        
        
    cout << "0 ile 9999 arasında bir sayı girin." << endl;
        
    cin >> Sayi;

        
    Sonuc RomaBirler[Sayi 10] + Sonuc;
        
    Sayi /= 10;
        
    Sonuc RomaOnlar[Sayi 10] + Sonuc;
        
    Sayi /= 10;
        
    Sonuc RomaYuzler[Sayi 10] + Sonuc;
        
    Sayi /= 10;
        
    Sonuc RomaBinler[Sayi 10] + Sonuc;
        
    Sayi /= 10;

        
    cout << endl << Sonuc;

        
    _getch();
        return 
    0;


  7. #17
    Ali Çehreli
    Üyelik Tarihi
    10/2002
    Mesaj
    2,901

    Ben de aynı şekilde bir tabloyla hallettim. Bu kadar kolay bir algoritması varmış gibi göründüğü halde en kolay ve belki de en hızlı çözümün bu olması ilginç.

    string'in önüne eklemek aklıma gelmediği için ben bütün sabit dizgileri ters sırada yazdım. Örneğin 40 için "LX". Hep sonucun sonuna ekledim ve en sonunda string'i ters çevirdim.

    Bu arada, karakterlerin tepesine çizgi çekmek, veya karakteri parantez içinde yazdırmak "bin katı" anlamına geliyormuş. Yani "(M)", milyon oluyor. Dolayısıyla daha büyük bir tabloyla daha büyük sayılar da desteklenebilir.

    Tablonun son satırı boş kalmasın diye kendimce iki kere parantez kullanmayı da kabul ettim:

    9999999: ((IX))(CM)(XC)(IX)CMXCIX

    Ali

  8. #18
    Üye
    Üyelik Tarihi
    10/2009
    Mesaj
    43

    kodu biraz daha geliştirdim,artık sınır 999999.

    PHP Kodu:
    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    #include <string>

    using namespace std;

    string Cevir(int Sayi)
    {
        
    string Sonuc "";

        
    string RomaYuzBinler[] = {"""(C)""(CC)""(CCC)""(CD)""(D)""(DC)""(DCC)""(DCCC)""(CM)"};
        
    string RomaOnBinler[] = {"""(X)""(XX)""(XXX)""(XL)""(L)""(LX)""(LXX)""(LXXX)""(XC)"};
        
    string RomaBinler[] = {"""M""MM""MMM""MMMM""(V)""(V)M""(V)MM""(V)MMM""M(X)"};
        
    string RomaYuzler[] = {"""C""CC""CCC""CD""D""DC""DCC""DCCC""CM"};
        
    string RomaOnlar[] = {"""X""XX""XXX""XL""L""LX""LXX""LXXX""XC"};
        
    string RomaBirler[] = {"""I""II""III""IV""V""VI""VII""VIII""IX"};

        
    Sonuc RomaBirler[Sayi 10] + Sonuc;
        
    Sayi /= 10;
        
    Sonuc RomaOnlar[Sayi 10] + Sonuc;
        
    Sayi /= 10;
        
    Sonuc RomaYuzler[Sayi 10] + Sonuc;
        
    Sayi /= 10;
        
    Sonuc RomaBinler[Sayi 10] + Sonuc;
        
    Sayi /= 10;
        
    Sonuc RomaOnBinler[Sayi 10] + Sonuc;
        
    Sayi /= 10;
        
    Sonuc RomaYuzBinler[Sayi 10] + Sonuc;
        
    Sayi /= 10;

        return 
    Sonuc;
    }


    int _tmain(int argc_TCHARargv[])
    {
        
    system("title Roma Rakamına Çevirici - CrimeCoder");

        
    setlocale(LC_ALL"Turkish");

        while (
    true)
        {
            
    system("cls");

            
    int Sayi 0;

            
    cout << "0 ile 999999 arasında bir sayı girin." << endl;
            
    cin >> Sayi;

            if (
    Sayi <= 999999)
            {
                
    cout << endl << Cevir(Sayi);
            }else
            {
                while (
    Sayi || Sayi 999999)
                {
                    
    cout << endl << "Girdiğiniz sayı belirtilen sınırlar içerisinde değil!" << endl;
                    
    cin >> Sayi;
                }
                
    cout << endl << Cevir(Sayi);
            }
            
    _getch();
        }

        return 
    0;


  9. #19
    energy engineer
    Üyelik Tarihi
    08/2008
    Yer
    Ankara||Istanbul
    Mesaj
    1,313

    Alıntı printf, mesajından alıntı: Mesajı Gör
    soru işaretli if'ler.
    tam olarak ne denir bu tür şartlara bilmiyorum, soru işaretli if denmiyordur o açık
    Ternary operator müş.
    ...

  10. #20
    Ali Çehreli
    Üyelik Tarihi
    10/2002
    Mesaj
    2,901

    Ben "ternary operator"u tam çevirisi ile "üçlü işleç" olarak kullanıyorum. (Bu forumla ilgili değil ama kendi benimsediğim sözcükleri içeren sözlük şu: http://ddili.org/sozluk.html)

    Ali

+ Cevap Yaz

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

     

Bookmarks

Mesaj Yazma Hakları

  • Yeni mesajgöndermezsiniz
  • Cevap yazamazsınız
  • Dosya ekleyemezsiniz
  • Mesajınızı düzenleyemezsiniz