Arkadaşlar c++ ile ilgili bir soru var. Yardımcı olursanız sevinirim...

eddie1982

New member
Katılım
25 Ara 2005
Mesajlar
3
Reaction score
0
Puanları
0
Arkadaşlar acilen c++ da roma rakamlarını normal rakamlara, normal rakamları roma rakamlarına çeviren bir programa ihtiyacım var. nasıl yazılır bu program bilmiyorum. yazıp gönderirseniz çok memnun olurum. şimdiden ilginize teşekkürler
 
Program Girilen input u digitlere bölsün. Son basamak dan başlasın incelemeye.

3den küçükse , bir for dongusu icinde son basamagındaki rakam kadar "I" bassın.
3den buyuk 5den kucukse , 5 eksi sonbasamak kadar "I" bassın we yanına bide "V" bassın
5den buyuk 8den kucukse, "V" bassın ve son basamak eksi 5 kadar "I" bassın
8den buyukse , 10 eksi sonbasamak kadar "I" ve yanına 1 adet "X" :)

Roma rakamLarının gerisini hatırlamıyorum , ama bu mantıklayapıLabilir

iyi $ansLar
 
Kod:
#include <stdio.h>
int main()
{
    float i,a,b,c,d,e,f,g;
    int num=0;
    char ch;
    printf("Roma rakamina cevrilecek sayi [1 - 2000 arasi]:");
    fflush(stdin);
    scanf("%c",&ch);
    while(ch>='0' && ch<='9')
    {
      num=num*10+ch-'0';
      scanf("%c",&ch);
    }
    a=(float)num/1000;
    b=((float)num-a*1000)/500;
    c=((float)num-a*1000-b*500)/100;
    d=((float)num-a*1000-b*500-c*100)/50;
    e=((float)num-a*1000-b*500-c*100-d*50)/10;
    f=((float)num-a*1000-b*500-c*100-d*50-e*10)/5;
    g=(float)num-a*1000-b*500-c*100-d*50-e*10-f*5;
    for(i=0;i<a;i++)
    printf("M");
    if(b>1)
    {
      c=c+5*(b-1);
      b=1;
    }
    if(b==1 && c==4)
    {
      printf("CM");
      c=c-4;
    }
    else
    {
      for(i=0;i<b;i++)
      printf("D");
    }
    if(c>4)
    {
      d=d+2*(c-4);
      c=4;
    }
    if(c==4)
      printf("CD");
    else
    {
      for(i=0;i<c;i++)
      printf("C");
    }
    if(d>1)
    {
      e=e+5*(d-1);
      d=1;
    }
    if(d==1 && e==4)
    {
      printf("XC");
      e=e-4;
    }
    else
    {
      for(i=0;i<d;i++)
      printf("L");
    }
    if(e>4)
    {
      f=f+2*(e-4);
      e=4;
    }
    if(e==4)
      printf("XL");
    else
    {
      for(i=0;i<e;i++)
      printf("X");
    }
    if(f>1)
    {
      g=g+5*(f-1);
      f=1;
    }
    if(f==1 && g==4)
    {
      printf("IX");
      g=g-4;
    }
    else
    {
      for(i=0;i<f;i++)
      printf("V");
    }
    if(g==4)
      printf("IV");
    else
    {
      for(i=0;i<g;i++)
      printf("I");
    }
    printf("\n");
    return main();
}


roma rakamlarıyla ilgili fazla bilgim olmadığı için kendim yazmaya üşendim ve şöyle bir şey buldum... güzel gibi ama çok iş... üstteki işlem kısaltılabilir gibi?? ne dersiniz üstadlar?
 
saoL paranoiac guzeL kod. Benim dedigim mantıga cıkmı$ ama i$i uzatiyor bu mantık .. dedigin gibi biraz elle kasmaca oLmu$. Digitleri tek tek ayıklayıp variable a atama.. Fonksion kullanılarak kısaltılabilir katiliorum . Belki güzel bir recursive fonksion yontemi ile kod fazLasıyLa kısaLtıLabilir..
 
bölme işlemi fln çok uzun... biz sınav olduumuzda da aynı tip bi soru gelmişti... basamaklara ayırırken 3 satırlık bir for döngüsü yetmişti 9 basamaklı bi sayı için :cool:
 
yeS

paranoiac' Alıntı:
bölme işlemi fln çok uzun... biz sınav olduumuzda da aynı tip bi soru gelmişti... basamaklara ayırırken 3 satırlık bir for döngüsü yetmişti 9 basamaklı bi sayı için :cool:

WalLa Haftaya Per$embeye Proje tesLimi War. Kagıt oyunLarı yazdim yazmaz oLaydım bitmedi gitti Card Games. Debug ından imanım gevredi artık :D

Hafta sonu bitecek hayırLısıyLa in$alLah o tarihe kadar da bir daha c++ mı$ , kapısının önünden geçemem :D :D :D

Sen bi kodu düzenLeyi wer paranoiac soyLedigin dogruLtuda.. benim ar$ivde yok bu .. ekLersem cok güzeL oLur :D

Te$ekkûRLer..
 
Kod:
#include <stdio.h>
int main()
{
    float i,a,b,c,d,e,f,g;
    int num=0;
    char ch;
    printf("Roma rakamina cevrilecek sayi [1 - 2000 arasi]:");
    fflush(stdin);
    scanf("%c",&ch);
    while(ch>='0' && ch<='9')
    {
      num=num*10+ch-'0';
      scanf("%c",&ch);
    }
    a=(float)num/1000;
    b=((float)num-a*1000)/500;
    c=((float)num-a*1000-b*500)/100;
    d=((float)num-a*1000-b*500-c*100)/50;
    e=((float)num-a*1000-b*500-c*100-d*50)/10;
    f=((float)num-a*1000-b*500-c*100-d*50-e*10)/5;
    g=(float)num-a*1000-b*500-c*100-d*50-e*10-f*5;
    for(i=0;i<a;i++)
    printf("M");
    if(b>1)
    {
      c=c+5*(b-1);
      b=1;
    }
    if(b==1 && c==4)
    {
      printf("CM");
      c=c-4;
    }
    else
    {
      for(i=0;i<b;i++)
      printf("D");
    }
    if(c>4)
    {
      d=d+2*(c-4);
      c=4;
    }
    if(c==4)
      printf("CD");
    else
    {
      for(i=0;i<c;i++)
      printf("C");
    }
    if(d>1)
    {
      e=e+5*(d-1);
      d=1;
    }
    if(d==1 && e==4)
    {
      printf("XC");
      e=e-4;
    }
    else
    {
      for(i=0;i<d;i++)
      printf("L");
    }
    if(e>4)
    {
      f=f+2*(e-4);
      e=4;
    }
    if(e==4)
      printf("XL");
    else
    {
      for(i=0;i<e;i++)
      printf("X");
    }
    if(f>1)
    {
      g=g+5*(f-1);
      f=1;
    }
    if(f==1 && g==4)
    {
      printf("IX");
      g=g-4;
    }
    else
    {
      for(i=0;i<f;i++)
      printf("V");
    }
    if(g==4)
      printf("IV");
    else
    {
      for(i=0;i<g;i++)
      printf("I");
    }
    printf("\n");
    return main();
}


roma rakamlarıyla ilgili fazla bilgim olmadığı için kendim yazmaya üşendim ve şöyle bir şey buldum... güzel gibi ama çok iş... üstteki işlem kısaltılabilir gibi?? ne dersiniz üstadlar?
çok saollasın
 
Geri
Üst