Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

please help me with the Roman Calculator homework

cainhkcainhk Posts: 10Member
Roman number: I,V,X, L, C, D, M
Decimal number: 1,5,10,50,100,500,1000
VI=6
IV=4
sample output is:

First Roman number?XLV
Operator?+
Second Roman number?XVIII
this is 45 plus 18 and answer is LXIII(63).

Comments

  • zibadianzibadian Posts: 6,349Member
    : Roman number: I,V,X, L, C, D, M
    : Decimal number: 1,5,10,50,100,500,1000
    : VI=6
    : IV=4
    : sample output is:
    :
    : First Roman number?XLV
    : Operator?+
    : Second Roman number?XVIII
    : this is 45 plus 18 and answer is LXIII(63).
    :
    Step 1: write a roman to decimal converter and a decimal to roman converter
    Step 2: write a program, which can calculate the result of a 2 decimals calculation
    Step 3: link those together.
  • GaashiusGaashius Posts: 349Member
    : : Roman number: I,V,X, L, C, D, M
    : : Decimal number: 1,5,10,50,100,500,1000
    : : VI=6
    : : IV=4
    : : sample output is:
    : :
    : : First Roman number?XLV
    : : Operator?+
    : : Second Roman number?XVIII
    : : this is 45 plus 18 and answer is LXIII(63).
    : :
    : Step 1: write a roman to decimal converter and a decimal to roman converter
    : Step 2: write a program, which can calculate the result of a 2 decimals calculation
    : Step 3: link those together.
    :
    Hey Zib this is a bit complicated for our lil friend I think.
    Here's a proc for Dec2Rom:
    [code]
    function dec2rom(decimal:word):string;
    var
    Ms,Cs,Xs,Is:byte;
    DPrev,LPrev,VPrev:boolean;
    idlint:word;
    br:string;
    n:byte;
    begin
    idlint:=decimal;
    if (idlint<>0) and (idlint>=1000) then begin
    Ms:=idlint div 1000;
    idlint:=idlint mod 1000;
    end;
    if (idlint<>0) and (idlint>=100) then begin
    if idlint>500 then DPrev:=true;
    Cs:=idlint div 100;
    idlint:=idlint mod 100;
    if DPrev then dec(Cs,5);
    end;
    if (idlint<>0) and (idlint>=10) then begin
    if idlint>50 then LPrev:=true;
    Xs:=idlint div 10;
    idlint:=idlint mod 10;
    if LPrev then dec(Xs,5);
    end;
    if (idlint<>0) and (idlint>=1) then begin
    if idlint>5 then VPrev:=true;
    if VPrev then Is:=idlint-5 else Is:=idlint;
    end;
    br:='';
    if Ms>0 then for n:=1 to Ms do br:=br+'M';
    if DPrev then br:=br+'D';
    if Cs>0 then for n:=1 to Cs do br:=br+'C';
    if LPrev then br:=br+'L';
    if Xs>0 then for n:=1 to Xs do br:=br+'X';
    if VPrev then br:=br+'V';
    if Is>0 then for n:=1 to Is do br:=br+'I';
    dec2rom:=br;
    end;
    [/code]

    OKS? This will be the Rom2Dec(the simplest):
    [code]
    function Rom2Dec(rom:string):word;
    var
    br:word;
    n:byte;
    begin
    br:=0;
    for n:=1 to length(rom) do begin
    if rom[n]='M' then inc(br,1000);
    if rom[n]='D' then inc(br,500);
    if rom[n]='C' then inc(br,100);
    if rom[n]='V' then inc(br,50);
    if rom[n]='X' then inc(br,10);
    if rom[n]='L' then inc(br,5);
    if rom[n]='I' then inc(br,1);
    end;
    end;
    [/code]
    I hope it will work and helps you out.

    ****************
    Any questions? Just ask!

    :-) [b][blue]GAASHIUS[/blue][/b] :-)


  • GaashiusGaashius Posts: 349Member
    : : : Roman number: I,V,X, L, C, D, M
    : : : Decimal number: 1,5,10,50,100,500,1000
    : : : VI=6
    : : : IV=4
    : : : sample output is:
    : : :
    : : : First Roman number?XLV
    : : : Operator?+
    : : : Second Roman number?XVIII
    : : : this is 45 plus 18 and answer is LXIII(63).
    : : :
    : : Step 1: write a roman to decimal converter and a decimal to roman converter
    : : Step 2: write a program, which can calculate the result of a 2 decimals calculation
    : : Step 3: link those together.
    : :
    : Hey Zib this is a bit complicated for our lil friend I think.
    : Here's a proc for Dec2Rom:
    : [code]
    : function dec2rom(decimal:word):string;
    : var
    : Ms,Cs,Xs,Is:byte;
    : DPrev,LPrev,VPrev:boolean;
    : idlint:word;
    : br:string;
    : n:byte;
    : begin
    : idlint:=decimal;
    : if (idlint<>0) and (idlint>=1000) then begin
    : Ms:=idlint div 1000;
    : idlint:=idlint mod 1000;
    : end;
    : if (idlint<>0) and (idlint>=100) then begin
    : if idlint>500 then DPrev:=true;
    : Cs:=idlint div 100;
    : idlint:=idlint mod 100;
    : if DPrev then dec(Cs,5);
    : end;
    : if (idlint<>0) and (idlint>=10) then begin
    : if idlint>50 then LPrev:=true;
    : Xs:=idlint div 10;
    : idlint:=idlint mod 10;
    : if LPrev then dec(Xs,5);
    : end;
    : if (idlint<>0) and (idlint>=1) then begin
    : if idlint>5 then VPrev:=true;
    : if VPrev then Is:=idlint-5 else Is:=idlint;
    : end;
    : br:='';
    : if Ms>0 then for n:=1 to Ms do br:=br+'M';
    : if DPrev then br:=br+'D';
    : if Cs>0 then for n:=1 to Cs do br:=br+'C';
    : if LPrev then br:=br+'L';
    : if Xs>0 then for n:=1 to Xs do br:=br+'X';
    : if VPrev then br:=br+'V';
    : if Is>0 then for n:=1 to Is do br:=br+'I';
    : dec2rom:=br;
    : end;
    : [/code]
    :
    : OKS? This will be the Rom2Dec(the simplest):
    : [code]
    : function Rom2Dec(rom:string):word;
    : var
    : br:word;
    : n:byte;
    : begin
    : br:=0;
    : for n:=1 to length(rom) do begin
    : if rom[n]='M' then inc(br,1000);
    : if rom[n]='D' then inc(br,500);
    : if rom[n]='C' then inc(br,100);
    : if rom[n]='V' then inc(br,50);
    : if rom[n]='X' then inc(br,10);
    : if rom[n]='L' then inc(br,5);
    : if rom[n]='I' then inc(br,1);
    : end;
    : end;
    : [/code]
    : I hope it will work and helps you out.
    :
    : ****************
    : Any questions? Just ask!
    :
    : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    :
    :
    :
    Oh sorry, I have forgotten to write the main body of the program:
    [code]
    uses
    crt;

    var
    op:char;
    s1,s2:string;
    res:word;

    { converting routines are here }

    begin
    p1:=0;
    p2:=0;
    clrscr;
    write('First Roman Number?'); readln(s1);
    write('Operator?'); readln(op);
    write('Second roman number?'); readln(s2);
    if op='+' then res:=rom2dec(s1)+rom2dec(s2);
    if op='/' then res:=rom2dec(s1) div rom2dec(s2);
    if op='*' then res:=rom2dec(s1)*rom2dec(s2);
    if op='-' then res:=rom2dec(s1)-rom2dec(s2);
    writeln; writeln('Result:'+res);
    readkey;
    end.
    [/code]
    OKS?

    ****************
    Any questions? Just ask!

    :-) [b][blue]GAASHIUS[/blue][/b] :-)


  • zibadianzibadian Posts: 6,349Member
    : : : : Roman number: I,V,X, L, C, D, M
    : : : : Decimal number: 1,5,10,50,100,500,1000
    : : : : VI=6
    : : : : IV=4
    : : : : sample output is:
    : : : :
    : : : : First Roman number?XLV
    : : : : Operator?+
    : : : : Second Roman number?XVIII
    : : : : this is 45 plus 18 and answer is LXIII(63).
    : : : :
    : : : Step 1: write a roman to decimal converter and a decimal to roman converter
    : : : Step 2: write a program, which can calculate the result of a 2 decimals calculation
    : : : Step 3: link those together.
    : : :
    : : Hey Zib this is a bit complicated for our lil friend I think.
    : : Here's a proc for Dec2Rom:
    : : [code]
    : : function dec2rom(decimal:word):string;
    : : var
    : : Ms,Cs,Xs,Is:byte;
    : : DPrev,LPrev,VPrev:boolean;
    : : idlint:word;
    : : br:string;
    : : n:byte;
    : : begin
    : : idlint:=decimal;
    : : if (idlint<>0) and (idlint>=1000) then begin
    : : Ms:=idlint div 1000;
    : : idlint:=idlint mod 1000;
    : : end;
    : : if (idlint<>0) and (idlint>=100) then begin
    : : if idlint>500 then DPrev:=true;
    : : Cs:=idlint div 100;
    : : idlint:=idlint mod 100;
    : : if DPrev then dec(Cs,5);
    : : end;
    : : if (idlint<>0) and (idlint>=10) then begin
    : : if idlint>50 then LPrev:=true;
    : : Xs:=idlint div 10;
    : : idlint:=idlint mod 10;
    : : if LPrev then dec(Xs,5);
    : : end;
    : : if (idlint<>0) and (idlint>=1) then begin
    : : if idlint>5 then VPrev:=true;
    : : if VPrev then Is:=idlint-5 else Is:=idlint;
    : : end;
    : : br:='';
    : : if Ms>0 then for n:=1 to Ms do br:=br+'M';
    : : if DPrev then br:=br+'D';
    : : if Cs>0 then for n:=1 to Cs do br:=br+'C';
    : : if LPrev then br:=br+'L';
    : : if Xs>0 then for n:=1 to Xs do br:=br+'X';
    : : if VPrev then br:=br+'V';
    : : if Is>0 then for n:=1 to Is do br:=br+'I';
    : : dec2rom:=br;
    : : end;
    : : [/code]
    : :
    : : OKS? This will be the Rom2Dec(the simplest):
    : : [code]
    : : function Rom2Dec(rom:string):word;
    : : var
    : : br:word;
    : : n:byte;
    : : begin
    : : br:=0;
    : : for n:=1 to length(rom) do begin
    : : if rom[n]='M' then inc(br,1000);
    : : if rom[n]='D' then inc(br,500);
    : : if rom[n]='C' then inc(br,100);
    : : if rom[n]='V' then inc(br,50);
    : : if rom[n]='X' then inc(br,10);
    : : if rom[n]='L' then inc(br,5);
    : : if rom[n]='I' then inc(br,1);
    : : end;
    : : end;
    : : [/code]
    : : I hope it will work and helps you out.
    : :
    : : ****************
    : : Any questions? Just ask!
    : :
    : : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    : :
    : :
    : :
    : Oh sorry, I have forgotten to write the main body of the program:
    : [code]
    : uses
    : crt;
    :
    : var
    : op:char;
    : s1,s2:string;
    : res:word;
    :
    : { converting routines are here }
    :
    : begin
    : p1:=0;
    : p2:=0;
    : clrscr;
    : write('First Roman Number?'); readln(s1);
    : write('Operator?'); readln(op);
    : write('Second roman number?'); readln(s2);
    : if op='+' then res:=rom2dec(s1)+rom2dec(s2);
    : if op='/' then res:=rom2dec(s1) div rom2dec(s2);
    : if op='*' then res:=rom2dec(s1)*rom2dec(s2);
    : if op='-' then res:=rom2dec(s1)-rom2dec(s2);
    : writeln; writeln('Result:'+res);
    : readkey;
    : end.
    : [/code]
    : OKS?
    :
    : ****************
    : Any questions? Just ask!
    :
    : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    :
    :
    :
    I never make people's homework, because then they'll never learn to program. Programming is something you learn by doing it, and not from reading about it.
  • cainhkcainhk Posts: 10Member
    : : : : : Roman number: I,V,X, L, C, D, M
    : : : : : Decimal number: 1,5,10,50,100,500,1000
    : : : : : VI=6
    : : : : : IV=4
    : : : : : sample output is:
    : : : : :
    : : : : : First Roman number?XLV
    : : : : : Operator?+
    : : : : : Second Roman number?XVIII
    : : : : : this is 45 plus 18 and answer is LXIII(63).
    : : : : :
    : : : : Step 1: write a roman to decimal converter and a decimal to roman converter
    : : : : Step 2: write a program, which can calculate the result of a 2 decimals calculation
    : : : : Step 3: link those together.
    : : : :
    : : : Hey Zib this is a bit complicated for our lil friend I think.
    : : : Here's a proc for Dec2Rom:
    : : : [code]
    : : : function dec2rom(decimal:word):string;
    : : : var
    : : : Ms,Cs,Xs,Is:byte;
    : : : DPrev,LPrev,VPrev:boolean;
    : : : idlint:word;
    : : : br:string;
    : : : n:byte;
    : : : begin
    : : : idlint:=decimal;
    : : : if (idlint<>0) and (idlint>=1000) then begin
    : : : Ms:=idlint div 1000;
    : : : idlint:=idlint mod 1000;
    : : : end;
    : : : if (idlint<>0) and (idlint>=100) then begin
    : : : if idlint>500 then DPrev:=true;
    : : : Cs:=idlint div 100;
    : : : idlint:=idlint mod 100;
    : : : if DPrev then dec(Cs,5);
    : : : end;
    : : : if (idlint<>0) and (idlint>=10) then begin
    : : : if idlint>50 then LPrev:=true;
    : : : Xs:=idlint div 10;
    : : : idlint:=idlint mod 10;
    : : : if LPrev then dec(Xs,5);
    : : : end;
    : : : if (idlint<>0) and (idlint>=1) then begin
    : : : if idlint>5 then VPrev:=true;
    : : : if VPrev then Is:=idlint-5 else Is:=idlint;
    : : : end;
    : : : br:='';
    : : : if Ms>0 then for n:=1 to Ms do br:=br+'M';
    : : : if DPrev then br:=br+'D';
    : : : if Cs>0 then for n:=1 to Cs do br:=br+'C';
    : : : if LPrev then br:=br+'L';
    : : : if Xs>0 then for n:=1 to Xs do br:=br+'X';
    : : : if VPrev then br:=br+'V';
    : : : if Is>0 then for n:=1 to Is do br:=br+'I';
    : : : dec2rom:=br;
    : : : end;
    : : : [/code]
    : : :
    : : : OKS? This will be the Rom2Dec(the simplest):
    : : : [code]
    : : : function Rom2Dec(rom:string):word;
    : : : var
    : : : br:word;
    : : : n:byte;
    : : : begin
    : : : br:=0;
    : : : for n:=1 to length(rom) do begin
    : : : if rom[n]='M' then inc(br,1000);
    : : : if rom[n]='D' then inc(br,500);
    : : : if rom[n]='C' then inc(br,100);
    : : : if rom[n]='V' then inc(br,50);
    : : : if rom[n]='X' then inc(br,10);
    : : : if rom[n]='L' then inc(br,5);
    : : : if rom[n]='I' then inc(br,1);
    : : : end;
    : : : end;
    : : : [/code]
    : : : I hope it will work and helps you out.
    : : :
    : : : ****************
    : : : Any questions? Just ask!
    : : :
    : : : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    : : :
    : : :
    : : :
    : : Oh sorry, I have forgotten to write the main body of the program:
    : : [code]
    : : uses
    : : crt;
    : :
    : : var
    : : op:char;
    : : s1,s2:string;
    : : res:word;
    : :
    : : { converting routines are here }
    : :
    : : begin
    : : p1:=0;
    : : p2:=0;
    : : clrscr;
    : : write('First Roman Number?'); readln(s1);
    : : write('Operator?'); readln(op);
    : : write('Second roman number?'); readln(s2);
    : : if op='+' then res:=rom2dec(s1)+rom2dec(s2);
    : : if op='/' then res:=rom2dec(s1) div rom2dec(s2);
    : : if op='*' then res:=rom2dec(s1)*rom2dec(s2);
    : : if op='-' then res:=rom2dec(s1)-rom2dec(s2);
    : : writeln; writeln('Result:'+res);
    : : readkey;
    : : end.
    : : [/code]
    : : OKS?
    : :
    : : ****************
    : : Any questions? Just ask!
    : :
    : : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    : :
    : :
    : :
    : I never make people's homework, because then they'll never learn to program. Programming is something you learn by doing it, and not from reading about it.
    :
    :thank you gaa,zib too
  • cainhkcainhk Posts: 10Member
    : : : : : : Roman number: I,V,X, L, C, D, M
    : : : : : : Decimal number: 1,5,10,50,100,500,1000
    : : : : : : VI=6
    : : : : : : IV=4
    : : : : : : sample output is:
    : : : : : :
    : : : : : : First Roman number?XLV
    : : : : : : Operator?+
    : : : : : : Second Roman number?XVIII
    : : : : : : this is 45 plus 18 and answer is LXIII(63).
    : : : : : :
    : : : : : Step 1: write a roman to decimal converter and a decimal to roman converter
    : : : : : Step 2: write a program, which can calculate the result of a 2 decimals calculation
    : : : : : Step 3: link those together.
    : : : : :
    : : : : Hey Zib this is a bit complicated for our lil friend I think.
    : : : : Here's a proc for Dec2Rom:
    : : : : [code]
    : : : : function dec2rom(decimal:word):string;
    : : : : var
    : : : : Ms,Cs,Xs,Is:byte;
    : : : : DPrev,LPrev,VPrev:boolean;
    : : : : idlint:word;
    : : : : br:string;
    : : : : n:byte;
    : : : : begin
    : : : : idlint:=decimal;
    : : : : if (idlint<>0) and (idlint>=1000) then begin
    : : : : Ms:=idlint div 1000;
    : : : : idlint:=idlint mod 1000;
    : : : : end;
    : : : : if (idlint<>0) and (idlint>=100) then begin
    : : : : if idlint>500 then DPrev:=true;
    : : : : Cs:=idlint div 100;
    : : : : idlint:=idlint mod 100;
    : : : : if DPrev then dec(Cs,5);
    : : : : end;
    : : : : if (idlint<>0) and (idlint>=10) then begin
    : : : : if idlint>50 then LPrev:=true;
    : : : : Xs:=idlint div 10;
    : : : : idlint:=idlint mod 10;
    : : : : if LPrev then dec(Xs,5);
    : : : : end;
    : : : : if (idlint<>0) and (idlint>=1) then begin
    : : : : if idlint>5 then VPrev:=true;
    : : : : if VPrev then Is:=idlint-5 else Is:=idlint;
    : : : : end;
    : : : : br:='';
    : : : : if Ms>0 then for n:=1 to Ms do br:=br+'M';
    : : : : if DPrev then br:=br+'D';
    : : : : if Cs>0 then for n:=1 to Cs do br:=br+'C';
    : : : : if LPrev then br:=br+'L';
    : : : : if Xs>0 then for n:=1 to Xs do br:=br+'X';
    : : : : if VPrev then br:=br+'V';
    : : : : if Is>0 then for n:=1 to Is do br:=br+'I';
    : : : : dec2rom:=br;
    : : : : end;
    : : : : [/code]
    : : : :
    : : : : OKS? This will be the Rom2Dec(the simplest):
    : : : : [code]
    : : : : function Rom2Dec(rom:string):word;
    : : : : var
    : : : : br:word;
    : : : : n:byte;
    : : : : begin
    : : : : br:=0;
    : : : : for n:=1 to length(rom) do begin
    : : : : if rom[n]='M' then inc(br,1000);
    : : : : if rom[n]='D' then inc(br,500);
    : : : : if rom[n]='C' then inc(br,100);
    : : : : if rom[n]='V' then inc(br,50);
    : : : : if rom[n]='X' then inc(br,10);
    : : : : if rom[n]='L' then inc(br,5);
    : : : : if rom[n]='I' then inc(br,1);
    : : : : end;
    : : : : end;
    : : : : [/code]
    : : : : I hope it will work and helps you out.
    : : : :
    : : : : ****************
    : : : : Any questions? Just ask!
    : : : :
    : : : : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    : : : :
    : : : :
    : : : :
    : : : Oh sorry, I have forgotten to write the main body of the program:
    : : : [code]
    : : : uses
    : : : crt;
    : : :
    : : : var
    : : : op:char;
    : : : s1,s2:string;
    : : : res:word;
    : : :
    : : : { converting routines are here }
    : : :
    : : : begin
    : : : p1:=0;
    : : : p2:=0;
    : : : clrscr;
    : : : write('First Roman Number?'); readln(s1);
    : : : write('Operator?'); readln(op);
    : : : write('Second roman number?'); readln(s2);
    : : : if op='+' then res:=rom2dec(s1)+rom2dec(s2);
    : : : if op='/' then res:=rom2dec(s1) div rom2dec(s2);
    : : : if op='*' then res:=rom2dec(s1)*rom2dec(s2);
    : : : if op='-' then res:=rom2dec(s1)-rom2dec(s2);
    : : : writeln; writeln('Result:'+res);
    : : : readkey;
    : : : end.
    : : : [/code]
    : : : OKS?
    : : :
    : : : ****************
    : : : Any questions? Just ask!
    : : :
    : : : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    : : :
    : : :
    : : :
    : : I never make people's homework, because then they'll never learn to program. Programming is something you learn by doing it, and not from reading about it.
    : :
    : :thank you gaa,zib too. But how about 'if the input numbers or the result are out of range(greater than or equal to 4000)should display error message '?
    :

  • cainhkcainhk Posts: 10Member
    : : : : : : : Roman number: I,V,X, L, C, D, M
    : : : : : : : Decimal number: 1,5,10,50,100,500,1000
    : : : : : : : VI=6
    : : : : : : : IV=4
    : : : : : : : sample output is:
    : : : : : : :
    : : : : : : : First Roman number?XLV
    : : : : : : : Operator?+
    : : : : : : : Second Roman number?XVIII
    : : : : : : : this is 45 plus 18 and answer is LXIII(63).
    : : : : : : :
    : : : : : : Step 1: write a roman to decimal converter and a decimal to roman converter
    : : : : : : Step 2: write a program, which can calculate the result of a 2 decimals calculation
    : : : : : : Step 3: link those together.
    : : : : : :
    : : : : : Hey Zib this is a bit complicated for our lil friend I think.
    : : : : : Here's a proc for Dec2Rom:
    : : : : : [code]
    : : : : : function dec2rom(decimal:word):string;
    : : : : : var
    : : : : : Ms,Cs,Xs,Is:byte;
    : : : : : DPrev,LPrev,VPrev:boolean;
    : : : : : idlint:word;
    : : : : : br:string;
    : : : : : n:byte;
    : : : : : begin
    : : : : : idlint:=decimal;
    : : : : : if (idlint<>0) and (idlint>=1000) then begin
    : : : : : Ms:=idlint div 1000;
    : : : : : idlint:=idlint mod 1000;
    : : : : : end;
    : : : : : if (idlint<>0) and (idlint>=100) then begin
    : : : : : if idlint>500 then DPrev:=true;
    : : : : : Cs:=idlint div 100;
    : : : : : idlint:=idlint mod 100;
    : : : : : if DPrev then dec(Cs,5);
    : : : : : end;
    : : : : : if (idlint<>0) and (idlint>=10) then begin
    : : : : : if idlint>50 then LPrev:=true;
    : : : : : Xs:=idlint div 10;
    : : : : : idlint:=idlint mod 10;
    : : : : : if LPrev then dec(Xs,5);
    : : : : : end;
    : : : : : if (idlint<>0) and (idlint>=1) then begin
    : : : : : if idlint>5 then VPrev:=true;
    : : : : : if VPrev then Is:=idlint-5 else Is:=idlint;
    : : : : : end;
    : : : : : br:='';
    : : : : : if Ms>0 then for n:=1 to Ms do br:=br+'M';
    : : : : : if DPrev then br:=br+'D';
    : : : : : if Cs>0 then for n:=1 to Cs do br:=br+'C';
    : : : : : if LPrev then br:=br+'L';
    : : : : : if Xs>0 then for n:=1 to Xs do br:=br+'X';
    : : : : : if VPrev then br:=br+'V';
    : : : : : if Is>0 then for n:=1 to Is do br:=br+'I';
    : : : : : dec2rom:=br;
    : : : : : end;
    : : : : : [/code]
    : : : : :
    : : : : : OKS? This will be the Rom2Dec(the simplest):
    : : : : : [code]
    : : : : : function Rom2Dec(rom:string):word;
    : : : : : var
    : : : : : br:word;
    : : : : : n:byte;
    : : : : : begin
    : : : : : br:=0;
    : : : : : for n:=1 to length(rom) do begin
    : : : : : if rom[n]='M' then inc(br,1000);
    : : : : : if rom[n]='D' then inc(br,500);
    : : : : : if rom[n]='C' then inc(br,100);
    : : : : : if rom[n]='V' then inc(br,50);
    : : : : : if rom[n]='X' then inc(br,10);
    : : : : : if rom[n]='L' then inc(br,5);
    : : : : : if rom[n]='I' then inc(br,1);
    : : : : : end;
    : : : : : end;
    : : : : : [/code]
    : : : : : I hope it will work and helps you out.
    : : : : :
    : : : : : ****************
    : : : : : Any questions? Just ask!
    : : : : :
    : : : : : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    : : : : :
    : : : : :
    : : : : :
    : : : : Oh sorry, I have forgotten to write the main body of the program:
    : : : : [code]
    : : : : uses
    : : : : crt;
    : : : :
    : : : : var
    : : : : op:char;
    : : : : s1,s2:string;
    : : : : res:word;
    : : : :
    : : : : { converting routines are here }
    : : : :
    : : : : begin
    : : : : p1:=0;
    : : : : p2:=0;
    : : : : clrscr;
    : : : : write('First Roman Number?'); readln(s1);
    : : : : write('Operator?'); readln(op);
    : : : : write('Second roman number?'); readln(s2);
    : : : : if op='+' then res:=rom2dec(s1)+rom2dec(s2);
    : : : : if op='/' then res:=rom2dec(s1) div rom2dec(s2);
    : : : : if op='*' then res:=rom2dec(s1)*rom2dec(s2);
    : : : : if op='-' then res:=rom2dec(s1)-rom2dec(s2);
    : : : : writeln; writeln('Result:'+res);
    : : : : readkey;
    : : : : end.
    : : : : [/code]
    : : : : OKS?
    : : : :
    : : : : ****************
    : : : : Any questions? Just ask!
    : : : :
    : : : : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    : : : :
    : : : :
    : : : :
    : : : I never make people's homework, because then they'll never learn to program. Programming is something you learn by doing it, and not from reading about it.
    : : :
    : : :thank you gaa,zib too. But how about 'if the input numbers or the result are out of range(greater than or equal to 4000)should display error message '?
    : :
    : THE ROMAN TO DECIMAL PART IS NOT WROK
    :

  • cainhkcainhk Posts: 10Member
    : : : : : : : : Roman number: I,V,X, L, C, D, M
    : : : : : : : : Decimal number: 1,5,10,50,100,500,1000
    : : : : : : : : VI=6
    : : : : : : : : IV=4
    : : : : : : : : sample output is:
    : : : : : : : :
    : : : : : : : : First Roman number?XLV
    : : : : : : : : Operator?+
    : : : : : : : : Second Roman number?XVIII
    : : : : : : : : this is 45 plus 18 and answer is LXIII(63).
    : : : : : : : :
    : : : : : : : Step 1: write a roman to decimal converter and a decimal to roman converter
    : : : : : : : Step 2: write a program, which can calculate the result of a 2 decimals calculation
    : : : : : : : Step 3: link those together.
    : : : : : : :
    : : : : : : Hey Zib this is a bit complicated for our lil friend I think.
    : : : : : : Here's a proc for Dec2Rom:
    : : : : : : [code]
    : : : : : : function dec2rom(decimal:word):string;
    : : : : : : var
    : : : : : : Ms,Cs,Xs,Is:byte;
    : : : : : : DPrev,LPrev,VPrev:boolean;
    : : : : : : idlint:word;
    : : : : : : br:string;
    : : : : : : n:byte;
    : : : : : : begin
    : : : : : : idlint:=decimal;
    : : : : : : if (idlint<>0) and (idlint>=1000) then begin
    : : : : : : Ms:=idlint div 1000;
    : : : : : : idlint:=idlint mod 1000;
    : : : : : : end;
    : : : : : : if (idlint<>0) and (idlint>=100) then begin
    : : : : : : if idlint>500 then DPrev:=true;
    : : : : : : Cs:=idlint div 100;
    : : : : : : idlint:=idlint mod 100;
    : : : : : : if DPrev then dec(Cs,5);
    : : : : : : end;
    : : : : : : if (idlint<>0) and (idlint>=10) then begin
    : : : : : : if idlint>50 then LPrev:=true;
    : : : : : : Xs:=idlint div 10;
    : : : : : : idlint:=idlint mod 10;
    : : : : : : if LPrev then dec(Xs,5);
    : : : : : : end;
    : : : : : : if (idlint<>0) and (idlint>=1) then begin
    : : : : : : if idlint>5 then VPrev:=true;
    : : : : : : if VPrev then Is:=idlint-5 else Is:=idlint;
    : : : : : : end;
    : : : : : : br:='';
    : : : : : : if Ms>0 then for n:=1 to Ms do br:=br+'M';
    : : : : : : if DPrev then br:=br+'D';
    : : : : : : if Cs>0 then for n:=1 to Cs do br:=br+'C';
    : : : : : : if LPrev then br:=br+'L';
    : : : : : : if Xs>0 then for n:=1 to Xs do br:=br+'X';
    : : : : : : if VPrev then br:=br+'V';
    : : : : : : if Is>0 then for n:=1 to Is do br:=br+'I';
    : : : : : : dec2rom:=br;
    : : : : : : end;
    : : : : : : [/code]
    : : : : : :
    : : : : : : OKS? This will be the Rom2Dec(the simplest):
    : : : : : : [code]
    : : : : : : function Rom2Dec(rom:string):word;
    : : : : : : var
    : : : : : : br:word;
    : : : : : : n:byte;
    : : : : : : begin
    : : : : : : br:=0;
    : : : : : : for n:=1 to length(rom) do begin
    : : : : : : if rom[n]='M' then inc(br,1000);
    : : : : : : if rom[n]='D' then inc(br,500);
    : : : : : : if rom[n]='C' then inc(br,100);
    : : : : : : if rom[n]='V' then inc(br,50);
    : : : : : : if rom[n]='X' then inc(br,10);
    : : : : : : if rom[n]='L' then inc(br,5);
    : : : : : : if rom[n]='I' then inc(br,1);
    : : : : : : end;
    : : : : : : end;
    : : : : : : [/code]
    : : : : : : I hope it will work and helps you out.
    : : : : : :
    : : : : : : ****************
    : : : : : : Any questions? Just ask!
    : : : : : :
    : : : : : : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    : : : : : :
    : : : : : :
    : : : : : :
    : : : : : Oh sorry, I have forgotten to write the main body of the program:
    : : : : : [code]
    : : : : : uses
    : : : : : crt;
    : : : : :
    : : : : : var
    : : : : : op:char;
    : : : : : s1,s2:string;
    : : : : : res:word;
    : : : : :
    : : : : : { converting routines are here }
    : : : : :
    : : : : : begin
    : : : : : p1:=0;
    : : : : : p2:=0;
    : : : : : clrscr;
    : : : : : write('First Roman Number?'); readln(s1);
    : : : : : write('Operator?'); readln(op);
    : : : : : write('Second roman number?'); readln(s2);
    : : : : : if op='+' then res:=rom2dec(s1)+rom2dec(s2);
    : : : : : if op='/' then res:=rom2dec(s1) div rom2dec(s2);
    : : : : : if op='*' then res:=rom2dec(s1)*rom2dec(s2);
    : : : : : if op='-' then res:=rom2dec(s1)-rom2dec(s2);
    : : : : : writeln; writeln('Result:'+res);
    : : : : : readkey;
    : : : : : end.
    : : : : : [/code]
    : : : : : OKS?
    : : : : :
    : : : : : ****************
    : : : : : Any questions? Just ask!
    : : : : :
    : : : : : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    : : : : :
    : : : : :
    : : : : :
    : : : : I never make people's homework, because then they'll never learn to program. Programming is something you learn by doing it, and not from reading about it.
    : : : :
    : : : :thank you gaa,zib too. But how about 'if the input numbers or the result are out of range(greater than or equal to 4000)should display error message '?
    : : :
    : : THE ROMAN TO DECIMAL PART IS NOT WROK
    : :
    I'M SORRY, BUT THE HOLE PROGRAMME IS WRONG,OR YOU CAN TRY YOUSELVES
    THE DECIMAL TO WORD IS WRONG ;
    JUST THINK FOR YOUR SHARING
    :
    :

  • cainhkcainhk Posts: 10Member
    : : : : : : : : : Roman number: I,V,X, L, C, D, M
    : : : : : : : : : Decimal number: 1,5,10,50,100,500,1000
    : : : : : : : : : VI=6
    : : : : : : : : : IV=4
    : : : : : : : : : sample output is:
    : : : : : : : : :
    : : : : : : : : : First Roman number?XLV
    : : : : : : : : : Operator?+
    : : : : : : : : : Second Roman number?XVIII
    : : : : : : : : : this is 45 plus 18 and answer is LXIII(63).
    : : : : : : : : :
    : : : : : : : : Step 1: write a roman to decimal converter and a decimal to roman converter
    : : : : : : : : Step 2: write a program, which can calculate the result of a 2 decimals calculation
    : : : : : : : : Step 3: link those together.
    : : : : : : : :
    : : : : : : : Hey Zib this is a bit complicated for our lil friend I think.
    : : : : : : : Here's a proc for Dec2Rom:
    : : : : : : : [code]
    : : : : : : : function dec2rom(decimal:word):string;
    : : : : : : : var
    : : : : : : : Ms,Cs,Xs,Is:byte;
    : : : : : : : DPrev,LPrev,VPrev:boolean;
    : : : : : : : idlint:word;
    : : : : : : : br:string;
    : : : : : : : n:byte;
    : : : : : : : begin
    : : : : : : : idlint:=decimal;
    : : : : : : : if (idlint<>0) and (idlint>=1000) then begin
    : : : : : : : Ms:=idlint div 1000;
    : : : : : : : idlint:=idlint mod 1000;
    : : : : : : : end;
    : : : : : : : if (idlint<>0) and (idlint>=100) then begin
    : : : : : : : if idlint>500 then DPrev:=true;
    : : : : : : : Cs:=idlint div 100;
    : : : : : : : idlint:=idlint mod 100;
    : : : : : : : if DPrev then dec(Cs,5);
    : : : : : : : end;
    : : : : : : : if (idlint<>0) and (idlint>=10) then begin
    : : : : : : : if idlint>50 then LPrev:=true;
    : : : : : : : Xs:=idlint div 10;
    : : : : : : : idlint:=idlint mod 10;
    : : : : : : : if LPrev then dec(Xs,5);
    : : : : : : : end;
    : : : : : : : if (idlint<>0) and (idlint>=1) then begin
    : : : : : : : if idlint>5 then VPrev:=true;
    : : : : : : : if VPrev then Is:=idlint-5 else Is:=idlint;
    : : : : : : : end;
    : : : : : : : br:='';
    : : : : : : : if Ms>0 then for n:=1 to Ms do br:=br+'M';
    : : : : : : : if DPrev then br:=br+'D';
    : : : : : : : if Cs>0 then for n:=1 to Cs do br:=br+'C';
    : : : : : : : if LPrev then br:=br+'L';
    : : : : : : : if Xs>0 then for n:=1 to Xs do br:=br+'X';
    : : : : : : : if VPrev then br:=br+'V';
    : : : : : : : if Is>0 then for n:=1 to Is do br:=br+'I';
    : : : : : : : dec2rom:=br;
    : : : : : : : end;
    : : : : : : : [/code]
    : : : : : : :
    : : : : : : : OKS? This will be the Rom2Dec(the simplest):
    : : : : : : : [code]
    : : : : : : : function Rom2Dec(rom:string):word;
    : : : : : : : var
    : : : : : : : br:word;
    : : : : : : : n:byte;
    : : : : : : : begin
    : : : : : : : br:=0;
    : : : : : : : for n:=1 to length(rom) do begin
    : : : : : : : if rom[n]='M' then inc(br,1000);
    : : : : : : : if rom[n]='D' then inc(br,500);
    : : : : : : : if rom[n]='C' then inc(br,100);
    : : : : : : : if rom[n]='V' then inc(br,50);
    : : : : : : : if rom[n]='X' then inc(br,10);
    : : : : : : : if rom[n]='L' then inc(br,5);
    : : : : : : : if rom[n]='I' then inc(br,1);
    : : : : : : : end;
    : : : : : : : end;
    : : : : : : : [/code]
    : : : : : : : I hope it will work and helps you out.
    : : : : : : :
    : : : : : : : ****************
    : : : : : : : Any questions? Just ask!
    : : : : : : :
    : : : : : : : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    : : : : : : :
    : : : : : : :
    : : : : : : :
    : : : : : : Oh sorry, I have forgotten to write the main body of the program:
    : : : : : : [code]
    : : : : : : uses
    : : : : : : crt;
    : : : : : :
    : : : : : : var
    : : : : : : op:char;
    : : : : : : s1,s2:string;
    : : : : : : res:word;
    : : : : : :
    : : : : : : { converting routines are here }
    : : : : : :
    : : : : : : begin
    : : : : : : p1:=0;
    : : : : : : p2:=0;
    : : : : : : clrscr;
    : : : : : : write('First Roman Number?'); readln(s1);
    : : : : : : write('Operator?'); readln(op);
    : : : : : : write('Second roman number?'); readln(s2);
    : : : : : : if op='+' then res:=rom2dec(s1)+rom2dec(s2);
    : : : : : : if op='/' then res:=rom2dec(s1) div rom2dec(s2);
    : : : : : : if op='*' then res:=rom2dec(s1)*rom2dec(s2);
    : : : : : : if op='-' then res:=rom2dec(s1)-rom2dec(s2);
    : : : : : : writeln; writeln('Result:'+res);
    : : : : : : readkey;
    : : : : : : end.
    : : : : : : [/code]
    : : : : : : OKS?
    : : : : : :
    : : : : : : ****************
    : : : : : : Any questions? Just ask!
    : : : : : :
    : : : : : : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    : : : : : :
    : : : : : :
    : : : : : :
    : : : : : I never make people's homework, because then they'll never learn to program. Programming is something you learn by doing it, and not from reading about it.
    : : : : :
    : : : : :thank you gaa,zib too. But how about 'if the input numbers or the result are out of range(greater than or equal to 4000)should display error message '?
    : : : :
    : : : THE ROMAN TO DECIMAL PART IS NOT WROK
    : : :
    : I'M SORRY, BUT THE HOLE PROGRAMME IS WRONG,OR YOU CAN TRY YOUSELVES
    : THE DECIMAL TO WORD IS WRONG ;
    : JUST THANK FOR YOUR SHARING
    : :
    : :
    :
    :

  • GaashiusGaashius Posts: 349Member
    : : : : : : : : : : Roman number: I,V,X, L, C, D, M
    : : : : : : : : : : Decimal number: 1,5,10,50,100,500,1000
    : : : : : : : : : : VI=6
    : : : : : : : : : : IV=4
    : : : : : : : : : : sample output is:
    : : : : : : : : : :
    : : : : : : : : : : First Roman number?XLV
    : : : : : : : : : : Operator?+
    : : : : : : : : : : Second Roman number?XVIII
    : : : : : : : : : : this is 45 plus 18 and answer is LXIII(63).
    : : : : : : : : : :
    : : : : : : : : : Step 1: write a roman to decimal converter and a decimal to roman converter
    : : : : : : : : : Step 2: write a program, which can calculate the result of a 2 decimals calculation
    : : : : : : : : : Step 3: link those together.
    : : : : : : : : :
    : : : : : : : : Hey Zib this is a bit complicated for our lil friend I think.
    : : : : : : : : Here's a proc for Dec2Rom:
    : : : : : : : : [code]
    : : : : : : : : function dec2rom(decimal:word):string;
    : : : : : : : : var
    : : : : : : : : Ms,Cs,Xs,Is:byte;
    : : : : : : : : DPrev,LPrev,VPrev:boolean;
    : : : : : : : : idlint:word;
    : : : : : : : : br:string;
    : : : : : : : : n:byte;
    : : : : : : : : begin
    : : : : : : : : idlint:=decimal;
    : : : : : : : : if (idlint<>0) and (idlint>=1000) then begin
    : : : : : : : : Ms:=idlint div 1000;
    : : : : : : : : idlint:=idlint mod 1000;
    : : : : : : : : end;
    : : : : : : : : if (idlint<>0) and (idlint>=100) then begin
    : : : : : : : : if idlint>500 then DPrev:=true;
    : : : : : : : : Cs:=idlint div 100;
    : : : : : : : : idlint:=idlint mod 100;
    : : : : : : : : if DPrev then dec(Cs,5);
    : : : : : : : : end;
    : : : : : : : : if (idlint<>0) and (idlint>=10) then begin
    : : : : : : : : if idlint>50 then LPrev:=true;
    : : : : : : : : Xs:=idlint div 10;
    : : : : : : : : idlint:=idlint mod 10;
    : : : : : : : : if LPrev then dec(Xs,5);
    : : : : : : : : end;
    : : : : : : : : if (idlint<>0) and (idlint>=1) then begin
    : : : : : : : : if idlint>5 then VPrev:=true;
    : : : : : : : : if VPrev then Is:=idlint-5 else Is:=idlint;
    : : : : : : : : end;
    : : : : : : : : br:='';
    : : : : : : : : if Ms>0 then for n:=1 to Ms do br:=br+'M';
    : : : : : : : : if DPrev then br:=br+'D';
    : : : : : : : : if Cs>0 then for n:=1 to Cs do br:=br+'C';
    : : : : : : : : if LPrev then br:=br+'L';
    : : : : : : : : if Xs>0 then for n:=1 to Xs do br:=br+'X';
    : : : : : : : : if VPrev then br:=br+'V';
    : : : : : : : : if Is>0 then for n:=1 to Is do br:=br+'I';
    : : : : : : : : dec2rom:=br;
    : : : : : : : : end;
    : : : : : : : : [/code]
    : : : : : : : :
    : : : : : : : : OKS? This will be the Rom2Dec(the simplest):
    : : : : : : : : [code]
    : : : : : : : : function Rom2Dec(rom:string):word;
    : : : : : : : : var
    : : : : : : : : br:word;
    : : : : : : : : n:byte;
    : : : : : : : : begin
    : : : : : : : : br:=0;
    : : : : : : : : for n:=1 to length(rom) do begin
    : : : : : : : : if rom[n]='M' then inc(br,1000);
    : : : : : : : : if rom[n]='D' then inc(br,500);
    : : : : : : : : if rom[n]='C' then inc(br,100);
    : : : : : : : : if rom[n]='V' then inc(br,50);
    : : : : : : : : if rom[n]='X' then inc(br,10);
    : : : : : : : : if rom[n]='L' then inc(br,5);
    : : : : : : : : if rom[n]='I' then inc(br,1);
    : : : : : : : : end;
    : : : : : : : : end;
    : : : : : : : : [/code]
    : : : : : : : : I hope it will work and helps you out.
    : : : : : : : :
    : : : : : : : : ****************
    : : : : : : : : Any questions? Just ask!
    : : : : : : : :
    : : : : : : : : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    : : : : : : : :
    : : : : : : : :
    : : : : : : : :
    : : : : : : : Oh sorry, I have forgotten to write the main body of the program:
    : : : : : : : [code]
    : : : : : : : uses
    : : : : : : : crt;
    : : : : : : :
    : : : : : : : var
    : : : : : : : op:char;
    : : : : : : : s1,s2:string;
    : : : : : : : res:word;
    : : : : : : :
    : : : : : : : { converting routines are here }
    : : : : : : :
    : : : : : : : begin
    : : : : : : : p1:=0;
    : : : : : : : p2:=0;
    : : : : : : : clrscr;
    : : : : : : : write('First Roman Number?'); readln(s1);
    : : : : : : : write('Operator?'); readln(op);
    : : : : : : : write('Second roman number?'); readln(s2);
    : : : : : : : if op='+' then res:=rom2dec(s1)+rom2dec(s2);
    : : : : : : : if op='/' then res:=rom2dec(s1) div rom2dec(s2);
    : : : : : : : if op='*' then res:=rom2dec(s1)*rom2dec(s2);
    : : : : : : : if op='-' then res:=rom2dec(s1)-rom2dec(s2);
    : : : : : : : writeln; writeln('Result:'+res);
    : : : : : : : readkey;
    : : : : : : : end.
    : : : : : : : [/code]
    : : : : : : : OKS?
    : : : : : : :
    : : : : : : : ****************
    : : : : : : : Any questions? Just ask!
    : : : : : : :
    : : : : : : : :-) [b][blue]GAASHIUS[/blue][/b] :-)
    : : : : : : :
    : : : : : : :
    : : : : : : :
    : : : : : : I never make people's homework, because then they'll never learn to program. Programming is something you learn by doing it, and not from reading about it.
    : : : : : :
    : : : : : :thank you gaa,zib too. But how about 'if the input numbers or the result are out of range(greater than or equal to 4000)should display error message '?
    : : : : :
    : : : : THE ROMAN TO DECIMAL PART IS NOT WROK
    : : : :
    : : I'M SORRY, BUT THE HOLE PROGRAMME IS WRONG,OR YOU CAN TRY YOUSELVES
    : : THE DECIMAL TO WORD IS WRONG ;
    : : JUST THANK FOR YOUR SHARING
    : : :
    : : :
    : :
    : :
    :
    :
    Well sorry for this LATE reply - it would stir the messages - but I have to fix my silly things. Who want to use these converting procs need to put these lines after BEGIN.
    [code]
    ...
    begin
    Ms:=0;
    Xs:=0;
    Is:=0;
    Cs:=0;
    Dprev:=false;
    Lprev:=false;
    Vprev:=false;
    idlint:=decimal;
    ...
    [/code]
    This will fix the problem - and sorry again.

    ****************
    Any questions? Just ask!

    :-) [b][blue]GAASHIUS[/blue][/b] :-)


Sign In or Register to comment.