Adsence

martes, 27 de agosto de 2013

De romano a Decimal

Leave a Comment
[slide_resp][sliderresp image="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghPzOgWdijmHFqZjwVwkCAYWnsdXIy7W1Nw8jM5Kq5r9g7p9SuycocCn9RXppK1U-PTLCIOwg3pRaRHJtJmKs1HqPnCpklzfwdlxFvDYmHQiruaR0z7dYXTQZuR8tf4sbtxDQXb8ABdC6Y/s640/de%2520Romano%2520a%2520Decimal%2520en%2520VBpng.png"] [/sliderresp] [sliderresp image="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjF8KRWGpE1L7xFqTXKD097OaxvZfml-1Gyeb9qCSnZN49SQbud1DjNxEq7B1TEHFo1sMUePGzGKIKkP1rGdLnFtylv98rpXgX-QeteynExKbTwNL8-N1Wr8Q5xfA3TGWnxokAwjWuuWwk/s640/de%2520Romano%2520a%2520Decimal%2520en%2520C%2523.png"] [/sliderresp] [sliderresp image="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXZATTSYI71VwT4d2-MOnhqcxLenB4HZ6RDMP-IPUERGeFnrio24XVQ6ADULriUlJruAJsa15w6lmMSXsgeGFnXgteJvCW3D-Kb2H2PufZC96aeXnVYzsW9KNcJLTwuwRcvaf0Nb0GHz5c/s640/de%2520Romano%2520a%2520Decimal%2520en%2520C%252B%252B.png"] [/sliderresp] [sliderresp image="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh259YuZwoDYV_lJMIdgbjefm2M2sWjq0KdIWwZKKnWJVIu4ar_gJ6hcaqz-_M8F-oPBayRru_joZDJ61dky-RF5u8VNnfQmxrblqYsK-Dk7hHm7mDYKK2Km1h9_uVHxQ4tKm_3MzTxY1M/s640/de%2520Romano%2520a%2520Decimal%2520en%2520C.png"] [/sliderresp] [sliderresp image="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFmQFwEznEhJI73_bXkRH6eng_QThCGSSyc_Eojy_w_wGpwd5eLlNTRYRyVxGIl3eONbfhlFedriLGdMaQB9FxHfT2abe8zDauIqMrpxG7qSdE9rUMfU-E2_gzOKLCbVeUGXt5ss_EDyiR/s640/de%2520Romano%2520a%2520Decimal%2520en%2520Java.png"] [/sliderresp] [/slide_resp]

Este programa consiste en que dado un numero romano (escrito todo en mayuscula, como XIV), le devuelva el valor en el sistema decimal.

 

El programa fue testeado con los siguientes ejemplos:

VI = 6;    XXI = 21;    LXVII = 67

IV = 4;    IX = 9;    XL = 40;    XC = 90;    CD = 400;    CM = 900

XIII = 13;    XIV = 14;    XXXIII = 33;    XXXIV = 34

XIX = 19;    LIV = 54;    CXXIX = 129

 

Espero les sirva, y lo compartan con sus amigos :S

icn-C++

[codesyntax lang="cpp"]
#include<iostream>
using namespace std;
int saber(char n)
{
int nv=0;
switch(n)
{
case 'I':nv=1;break;
case 'V':nv=5;break;
case 'X':nv=10;break;
case 'L':nv=50;break;
case 'C':nv=100;break;
case 'D':nv=500;break;
case 'M':nv=1000;break;
};
//printf("%d,",nv);
return nv;
};

void convertir(char r[],int n)
{
int nume[n];
int s=0,sig=0,act;
//Paso XXIV a 10,10,1,5
for(int i=0;i<n;i++)
{
nume[i]=saber(r[i]);
}
if(n%2==0)
{
for(int i=0;i<n;i=i+2)
{
act=nume[i];
sig=nume[i+1];
if(act>=sig)
s=s+(act+sig);
else
s=s+(sig-act);
}
}else{
for(int i=n-1;i>0;i=i-2)
{
act=nume[i];
sig=nume[i-1];
if(act>sig)
s=s+(act-sig);
else
s=s+(sig+act);
}

act=nume[0];
s=s+act;
}

cout<<"El numero es : "<<s;
};

int main()
{
int lon;
cout<<"Cantidad Letras: ";
cin>>lon;
char romano[lon];
cout<<"Numero Romano: ";
cin>>romano;
convertir(romano,lon);
return 0;
}

[/codesyntax]

 

icn-VB

[codesyntax lang="vb"]
Module Module1

Sub Main()
Dim romano As String
Console.WriteLine("Numero Romano:")
romano = Console.ReadLine()
convertir(romano, romano.Length )
Console.ReadLine()

End Sub
Function saber(ByVal n As Char) As Integer
Dim nv As Integer
Select Case n
Case "I"
nv = 1
Case "V"
nv = 5
Case "X"
nv = 10
Case "L"
nv = 50
Case "C"
nv = 100
Case "D"
nv = 500
Case "M"
nv = 1000
Case Else
nv = 0
End Select
Return nv
End Function

Function convertir(ByVal r As String, ByVal n As Integer)
Dim nume(n) As Integer
Dim s, sig, act As Integer
s = sig = act = 0

For i = 0 To n - 1
nume(i) = saber(r.ElementAt(i))
Next
If (n Mod 2) = 0 Then
For i = 0 To n - 1 Step 2
act = nume(i)
sig = nume(i + 1)
If act >= sig Then
s = s + (act + sig)
Else
s = s + (sig - act)
End If

Next
Else
For i = (n - 1) To 1 Step -2
act = nume(i)
sig = nume(i - 1)
If act > sig Then
s = s + (act - sig)
Else
s = s + (sig + act)
End If
Next
act = nume(0)
s = s + act

End If
Console.WriteLine("El numero es: " & s)
End Function

End Module

[/codesyntax]

 

icn-Java

[codesyntax lang="java"]
	import java.util.Scanner;
/**
* @(#)deRomanoADecimal.java
*
*
* @author Jorge Moreno
* @version 1.00 2013/8/27
*/

public class deRomanoADecimal {

static int saber(char n)
{
int nv=0;

switch(n)
{
case 'I':nv=1;break;
case 'V':nv=5;break;
case 'X':nv=10;break;
case 'L':nv=50;break;
case 'C':nv=100;break;
case 'D':nv=500;break;
case 'M':nv=1000;break;
};
//printf("%d,",nv);
return nv;
};

static void convertir(String r,int n)
{
int nume[]=new int [n];
int s=0,sig=0,act;
//Paso XXIV a 10,10,1,5
for(int i=0;i<n;i++)
{
nume[i]=saber(r.charAt(i));
}
if(n%2==0)
{
for(int i=0;i<n;i=i+2)
{
act=nume[i];
sig=nume[i+1];
if(act>=sig)
s=s+(act+sig);
else
s=s+(sig-act);
}
}else{
for(int i=n-1;i>0;i=i-2)
{
act=nume[i];
sig=nume[i-1];
if(act>sig)
s=s+(act-sig);
else
s=s+(sig+act);
}

act=nume[0];
s=s+act;
}

System.out.println("El numero es : "+s);
};

/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Scanner leer=new Scanner(System.in);
System.out.print("Numero Romano: ");
String romano=leer.next();
convertir(romano,romano.length());
// TODO code application logic here
}
}

[/codesyntax]

icn-C

[codesyntax lang="c"]
#include <stdio.h>
#include <conio.h>
int saber(char n)
{
int nv=0;
switch(n)
{
case 'I':nv=1;break;
case 'V':nv=5;break;
case 'X':nv=10;break;
case 'L':nv=50;break;
case 'C':nv=100;break;
case 'D':nv=500;break;
case 'M':nv=1000;break;
};
//printf("%d,",nv);
return nv;
};

void convertir(char r[],int n)
{
int nume[n];
int s=0,sig=0,act;
//Paso XXIV a 10,10,1,5
for(int i=0;i<n;i++)
{
nume[i]=saber(r[i]);
}
if(n%2==0)
{
for(int i=0;i<n;i=i+2)
{
act=nume[i];
sig=nume[i+1];
if(act>=sig)
s=s+(act+sig);
else
s=s+(sig-act);
}
}else{
for(int i=n-1;i>0;i=i-2)
{
act=nume[i];
sig=nume[i-1];
if(act>sig)
s=s+(act-sig);
else
s=s+(sig+act);
}

act=nume[0];
s=s+act;
}

printf("El numero es : %d",s);
};

main()
{
int n=1;
while(n!=0){
printf("nDigite el numero a de caracteres que tiene el numero romano,para salir 0:");
scanf("%d",&n);
char rom[n];
printf("Digite el numero Romano:");
scanf("%s",&rom);
convertir(rom,n);
};
printf("njamper91.hostei.com");
getch();
return 0;
}

[/codesyntax]

icn-C#

[codesyntax lang="csharp"]
    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace deRomanoADecimalCS
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Numero Romano: ");
String romano = Console.ReadLine();
convertir(romano, romano.Length);
Console.ReadLine();
}
static int saber(char n)
{
int nv=0;
switch(n)
{
case 'I':nv=1;break;
case 'V':nv=5;break;
case 'X':nv=10;break;
case 'L':nv=50;break;
case 'C':nv=100;break;
case 'D':nv=500;break;
case 'M':nv=1000;break;
};
//printf("%d,",nv);
return nv;
}

static void convertir(String r,int n)
{
int []nume=new int[n];
int s=0,sig=0,act;
//Paso XXIV a 10,10,1,5
for(int i=0;i<n;i++)
{
nume[i]=saber(r.ElementAt(i));
}
if(n%2==0)
{
for(int i=0;i<n;i=i+2)
{
act=nume[i];
sig=nume[i+1];
if(act>=sig)
s=s+(act+sig);
else
s=s+(sig-act);
}
}else{
for(int i=n-1;i>0;i=i-2)
{
act=nume[i];
sig=nume[i-1];
if(act>sig)
s=s+(act-sig);
else
s=s+(sig+act);
}

act=nume[0];
s=s+act;
}

Console.WriteLine("El numero es : " +s);
}
}
}

[/codesyntax]

0 comentarios :