Foro Oficial de Algoritmia

Pero complicao no esta hombre... si lo podes hacer con una "base de datos" en los vectores no hay nada de complique.
Si te lo exigen calculando de alguna manera ahi si lo veo muy teso, pero si lo pidieron con vectores no es sino que lea las recomendaciones que otros y yo le hicimos y por ahi lo saca.
En un vector los numeros romanos, en otro los numeros correspondientes en decimal y saca el decimal de acuerdo al romano que le hayan pedido.

Salu2
 
ese es el problemon

TENGO DOS VECTORES A1 Y A2

uno es CARACTER
OTRO ES NUMERICO ENTERO

el vector tipo caracter es el de la letra en romano ( I,X,V etc)
el vector tipo numero es el de los numeros en decimal ( 1,10,5 etc)

LO QUE NO SE ES COMO ASIGNAR LAS LETRAS A NUMEROS
 
Si te piden el numero cinco en romano: v
Vas y buscas en el vector de caracteres hasta que encontres la v. Cuando la encontres sabes en cual posicion estas parado; asi que solo restaria recorrer el vector de los numeros decimales hasta esa posicion y sacar el numero para saber cual es.

Si me entiende???
Sabiendo en cual posicion esta el romano que te pidieron, sabes cual es la posicion del decimal
 
osea que puedo hacer esto digamos
VAR A( 1-6) tipo arreglo tipo caracter
VAR B( 1-6) tipo arreglo tipo numerico

a(1) = " I"
a(2) = " V"
.. etc
B(1) = 1000
B(2) = 500
etc...

y luego como hago para que se compruebe que tal vector a(n) sea igual a tal numero b(n) ????
 
mira... algo asi:
VAR A( 1-6) tipo arreglo tipo caracter
VAR B( 1-6) tipo arreglo tipo numerico

A(1) = " I"
A(2) = " II"
A(3) = "III"
A(4) = "IV"
A(5) = "V"
.. etc
B(1) = 1
B(2) = 2
B(3) = 3
B(4) = 4
B(5) = 5
etc...

Ahora suponiendo que piden el numero cuatro (iv)te vas a asi:


x = iv (variable tipo caracter)
para i = 1 hasta n { //n tamaño del vector
contador++
if (x = A(i)){
pararCiclo
}
}
retorne B(contador) // Retorna el numero en decimal 4 pues el contador ya tiene la posicicion en la que esta


Espero que hayas entendido!!;)

Pd: Le puse llaves porque no me dejo identarlo como queria
 
lo q pasa es q el programa tmb tiene q poder dar cualquier cantidad ( incluso un millon)
pero como la m con raya arriba no existe, entonces nos dijeron que usaramos la G en vez de la M con rayita
ademas creo que lo que tu me dices solo me botara un numero, y que pasa si se ingresa CXX o MCM o numeros asi?

... y sigo sin entender como hago que el vector A se me vuelva en vector B ( osea volver esos caracteres numeros)

:( ademas no entiendo casi C++.., lo puedes poner en seudocodigo o en basic? :(
 
Venom, porq mejor no lo pone en pseudocodigo de algoritmo? para que podamos entender ;)

tienes que mirar la sintaxis del numero en romano, maton... ejemplo, usted sabe que si un caracter romano va primero que otro, se resta el primero al segundo. ejemplo: IV=4 o XL=40. para escribir 1999, entonces seria MCMXCIC (mas o menos.... sino, corriganme ;)).... entonces, si yo pongo en el algoritmo IMM, me va a Imprimir 1999 y usted sabe que este numero romano no existe. entonces, lo mejor es que lo haga con base de datos, y luego que llame al sector de memoria que tiene el numero que digite el usuario. si ud hace esto:


A(1) = " I"
A(2) = " II"
A(3) = "III"
A(4) = "IV"
A(5) = "V"
.. etc
B(1) = 1
B(2) = 2
B(3) = 3
B(4) = 4
B(5) = 5
etc...

se le hara infinito y nunk terminaria el algoritmo ;). salu2.
 
[LME]© CЄGФ dijo:
Venom, porq mejor no lo pone en pseudocodigo de algoritmo? para que podamos entender ;)

tienes que mirar la sintaxis del numero en romano, maton... ejemplo, usted sabe que si un caracter romano va primero que otro, se resta el primero al segundo. ejemplo: IV=4 o XL=40. para escribir 1999, entonces seria MCMXCIC (mas o menos.... sino, corriganme ;)).... entonces, si yo pongo en el algoritmo IMM, me va a Imprimir 1999 y usted sabe que este numero romano no existe. entonces, lo mejor es que lo haga con base de datos, y luego que llame al sector de memoria que tiene el numero que digite el usuario. si ud hace esto:




se le hara infinito y nunk terminaria el algoritmo ;). salu2.

JEJEJEJEJE que solucion la tuya.. jejejejeje la voy a tener en cuenta pa la proxima vez q tenga que hacer un algoritmo... jejej gracias
 
es que por eso, yo se que toka hacer eso pero

LO QUE NO SE ES COMO COMPARAR UN ARREGLO DE CARACTERES CON UNO NUMERICO :(

POR EJEMPLO EL ARREGLO A( 1-5) QUE ES DE CARACTERES

A(1) = C
A(2) = L
A(3) = X
A(4) = V
A(5) = I

AHORA EL ARREGLO B(1-5) QUE ES NUMERICO

B(1) = 100
B(2) = 50
B(3) = 10
B(4) = 5
B(6) = 1

YA TENGO LOS DOS ARREGLOS :) ahora que :S :(
 
leer un valor en romano y que con el ciclo, lo convierta. el problema es a sintaxis del numero romano y el numero de caracteres del numero romano :S
 
simple...

LEER NUM
NUMCAR= LEN ( NUM)

asi podemos saber el numero de caracteres del romano

pero como hago pa q el ciclo me convierta caracteres a numeros :S
 
POR ESO..., al decir que .

A(1) = 1000
A(2) = 500

en fin.. todos esos arreglos, a eso se refiere ud con la base de datos?
 
:( SURRENDER, que lo haga algun nerd de la clase y yo mejor lo copio :(

bueno mejor sigo con el otro, que creo que es mas facil

DADA UNA MATRIZ M POR N, HALLELE LA DETERMINANTE
 
PHP:
string numero_romano(int num)
{
 string nr;
 while(num>=1000)
 {
  nr=nr+'M';
  num=num-1000;
 }
 while(num>=500)
 {
  nr=nr+'D';
  num=num-500;
 }
 if(num>=400)
 {
  nr=nr+'C'+'D';
  num=num-400;
 }
 while(num>=100)
 {
  nr=nr+'C';
  num=num-100;
 }
 if(num>=90)
 {
  nr=nr+'X'+'C';
  num=num-90;
 }
 while(num>=50)
 {
  nr=nr+'L';
  num=num-50;
 }
 if(num>=40)
 {
  nr=nr+'X'+'L';
  num=num-40;
 }
 while(num>=10)
 {
  nr=nr+'X';
  num=num-10;
 }
 if(num>=9)
 {
  nr=nr+'I'+'X';
  num=num-9;
 }
 while(num>=5)
 {
  nr=nr+'V';
  num=num-5;
 }
 if(num>=4)
 {
  nr=nr+'I'+'V';
  num=num-4;
 }

 while(num>=1)
 {
  nr=nr+'I';
  num=num-1;
 }
 return nr;
}

PHP:
int romano_numero(string rom)
{
 int num=0, loc;
 loc=rom.rfind("M",0);
 while(loc>=0)
 {
  num=num+1000;
  rom.erase(0, 1);
  loc=rom.rfind("M",0);
 }
      loc=rom.rfind("CM", 1);
  while(loc>=0)
  {
   num=num+900;
   rom.erase(0,2);
   loc--;
  }

 loc=rom.rfind("D",0);
 while(loc>=0)
 {
  num=num+500;
  rom.erase(0, 1);
  loc=rom.rfind("D",0);
 }
     loc=rom.rfind("CD", 1);
  while(loc>=0)
  {
   num=num+400;
   rom.erase(0,2);
   loc--;
  }

  loc=rom.rfind("C",0);
 while(loc>=0)
 {
  num=num+100;
  rom.erase(0, 1);
  loc=rom.rfind("C",0);
 }
    loc=rom.rfind("XC", 1);
  while(loc>=0)
  {
   num=num+90;
   rom.erase(0,2);
   loc--;
  }


  loc=rom.rfind("L",0);
 while(loc>=0)
 {
  num=num+50;
  rom.erase(0, 1);
  loc=rom.rfind("L",0);
 }
     loc=rom.rfind("XL", 1);
  while(loc>=0)
  {
   num=num+40;
   rom.erase(0,2);
   loc--;
  }


  loc=rom.rfind("X",0);
 while(loc>=0)
 {
  num=num+10;
  rom.erase(0, 1);
  loc=rom.rfind("X",0);
 }

  loc=rom.rfind("IX", 10);
  while(loc>=0)
  {
   num=num+9;
   rom.erase(0, 2);
   loc--;
  }

  loc=rom.rfind("V",0);
 while(loc>=0)
 {
  num=num+5;
  rom.erase(0, 1);
  loc=rom.rfind("V",0);
 }
  loc=rom.rfind("IV", 10);
  while(loc>=0)
  {
   num=num+4;
   rom.erase(0, 2);
   loc--;
  }

  loc=rom.rfind("I",0);
 while(loc>=0)
 {
  num=num+1;
  rom.erase(0, 1);
  loc=rom.rfind("I",0);
 }
 if(num==0)num=-1;

  return num;
}

Lo mejor que pude hacer en varios minutos :p :p, el de int a romano sirve hasta 3000 :p si alguien lo desea puede terminarlo :)
Esta mas o menos pero para ser un ejercicio de primer semestre la solucion sirve :)
 

Los últimos temas