Autor
|
Tema: Numeros Romanos (Leído 13,465 veces)
|
dato000
Desconectado
Mensajes: 3.034
|
por ultima vez no espero que me lo hagan ¬¬ !!!!
XDDDDDDDDDD bien dicho amigo mio, como te quedo esa amchacon XDDDD la de leo esta mejor, puesto que usa de una vez las variables que fueron llamadas a la función, es mucho mejor, aunque es confuso al principio XD
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
la de leo esta mejor, puesto que usa de una vez las variables que fueron llamadas a la función, es mucho mejor, aunque es confuso al principio XD
No veo donde puede estar la confusión, salvo porque no explico ni pijo lo que va haciendo el código, mea culpa.
En esencia se va pasando cada caracter de la cadena introducida, romano, a la función y en ella se va comparando con los caracteres/valores en romano, que conforman el array rom. Caso de encontrar una coincidencia retorno el equivalente en decimal de la variable valor. Así de sencillo.
Lo que no entendí fue el uso, a mi parecer innecesario, de la variable anterior.
No dejo de reconocer que el código que posteo 05K4R1N era muy deficiente, le faltaba el tipo int de la función main, el correspondiente return 0, el uso de .lengh, más cercano al C++ y alejado del C -creo que ahí confundió conceptos-, la presencia de la librería conio.h -para nada-, el uso de la función indeseable fflush(stdin) y el resto de código muy disperso/descuidado.
Pero, en fin, parece que algo se lo había currado.
Tampoco entiendo el uso de una función para algo tan simple y a la que sólo se le va a llamar una vez, para eso no hacen falta tantas alforjas. Mi criterio es reservar el uso de funciones para casos repetitivo, códigos muy complejos o que se va a trabajar entre varios y cada uno se va a encargar de una parte/función, pero en este caso ¡puafffff!, me sobra la función. Si la puse fue porque imagino será una tarea que le piden haga con una función.
Saluditos!. ... ..
|
|
|
En línea
|
|
|
|
|
05K4R1N
Desconectado
Mensajes: 7
Desarrollo e Investigación
|
dat000 lo que sucede es que recien toy comenzando con lenguaje C y si hice varias cosas innecesarias, vaya que me estan dando un jalon de orejas ustedes aunque si deberia agradecerles por eso =)... por otro lado les digo que no volverá a ocurrir
|
|
|
En línea
|
|
|
|
ecfisa
Desconectado
Mensajes: 114
|
Hola 05K4R1N. Otra opción: #include <stdio.h> #include <stdlib.h> char *DecToRom(int num); int main() { int num; printf("%d en numeros romanos: %s\n",num ,DecToRom (num )); return 0; } char *DecToRom(int num) { char *uni[] = {"","I","II","III","IV","V","VI","VII","VIII","IX"}; char *dec[] = {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"}; char *cen[] = {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"}; char *udm[] = {"","M","MM","MMM"}; char result[50]; strcpy(result , udm [num /1000]); strcat(result , cen [num /100%10]); strcat(result , dec [num /10%10]); return (char*)result; }
Saludos.
|
|
|
En línea
|
|
|
|
KaL3o
Desconectado
Mensajes: 60
|
#include <stdio.h> #include <string.h> int main(){ char romano [100]={0}; printf("Ingrese Numero Romano: "); scanf ("%s",romano); printf ("Romano: %s\n",romano); char rom[8]={'I','V','X','L','C','D','M'}; int valor[7]={1,5,10,50,100,500,1000}; convertidor(romano, rom, valor); return 0; } void convertidor ( char romano [], char rom [9],int valor [8]) { int suma=0,i,j; for (i=0;i<strlen(romano);i++) for (j=0;j<9;j++){ if (romano[i]==rom[j]){ suma+=valor [j]; break; } else continue; } printf ("Numero: %d",suma); }
El problema con ese codigo es que si ingresas por ejemplo el cuatro (IV) el va a decir que es seis... salu2 Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
|
|
|
En línea
|
Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
El problema con ese codigo es que si ingresas por ejemplo el cuatro (IV) el va a decir que es seis...
Pues no, no se puede ingresar el IV, sólo los símbolos que el usuario estimó considerar:Otra cosa es que hubiese incluido a:En cuyo sencillamente caso habría que considerar a un caracter y su anterior.
Pero eso sería otra cosa distinta a la propuesta por 05K4R1N.
Si estas interesado en el tema publica el avance de lo que lleves y con gusto te echaré una manita. Saluditos! .... ..
|
|
« Última modificación: 4 Junio 2013, 05:34 am por leosansan »
|
En línea
|
|
|
|
KaL3o
Desconectado
Mensajes: 60
|
Lo que no entendí fue el uso, a mi parecer innecesario, de la variable anterior.
te lo decia por esto q tu mismo dices q no lo entendias... Pero bueno si dices q esta bien no pasa nada Volviendo a lo q planteaba quien puso el hilo Funciona así:
Usuario ingresa un número romano y para que pueda convertir mas sencillo de romano a decimal hice un arreglo char que solo alberga romanos y otro con numeros decimales.
mirar los numeros romanos https://es.wikipedia.org/wiki/Numeraci%C3%B3n_romanaSi estas interesado en el tema publica el avance de lo que lleves y con gusto te echaré una manita.
Solo señalaba alguna deficiencia obvia, pero gracias por ofrecerme tu ayuda salu2
|
|
|
En línea
|
Todos los caminos se vuelven a juntar. Pero nunca de la misma forma.
|
|
|
ecfisa
Desconectado
Mensajes: 114
|
Hola. Disculpas 05K4R1N, ahora caigo que entendí tu consulta al revés... (msg #14) Podría ser: #include<stdio.h> #include<string.h> #include<ctype.h> #define NRO_ELEM(x) (sizeof(x) / sizeof(x[0])) int RomToDec(char *nrom); int main() { char *roman = "MMMDLXXXIV"; printf("%s = %d",roman ,RomToDec (roman )); return 0; } int RomToDec(char *nrom) { char *NROROM[][9] = { {"M","MM","MMM"}, {"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"}, {"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"}, {"I","II","III","IV","V","VI","VII","VIII","IX"}}; int fil, col; char *aux = (char*) nrom; for(fil =0; aux [fil ]; fil ++) aux [fil ] = toupper(aux [fil ]); for(fil=0; fil < NRO_ELEM(NROROM); fil++) { col = (fil == 0 ? 2 : 8); while ( col ) { if (strncmp(NROROM [fil ][col ], aux , strlen(NROROM [fil ][col ]))==0) { aux = &aux [strlen(NROROM [fil ][col ])]; } col--; } } return (int)res; }
Saludos.
|
|
|
En línea
|
|
|
|
edr89
Desconectado
Mensajes: 105
|
...En cuyo sencillamente caso habría que considerar a un caracter y su anterior.
Pero eso sería otra cosa distinta a la propuesta por 05K4R1N.
Escribí un código distinto que no contempla los numeros IX, XL, etc, simplemente suma las letras, para algunos valores funciona, para otros no. La idea no se como implementarla es: 1. Longitud del dato tecleado usando strlen(). 2. Si es par leer primer y segundo caracter, revisar si hay alguna combinacion tipo IV, IX, XL, XC, CD, CM..., si verdadero restar digitos, de lo contrario sumar. 3. Si la longitud es impar se lee primer y segundo caracter, segundo y tercero, etc. Las condiciones son las mismas, buscar casos donde se tenga que restar y no sumar Estoy pensando en algo como //stringlenght = longitud de dato if((stringlenght%2)==0) //Cuando la longitud es par { for(i=0;i<(stringlenght-1);i+2)//lectura de primer caracter en par. { /*Aqui se me ocurre usar algo como isalpha() Si I entonce digito=1 Si X ,digito= 10, etc se asigna el valor del caracter a una variable PrimerDigito */ for(j=1;numero_romano[j]!=NULL;j+2) //lectura de segundo caracter en par. { /*Aca tambien algo similar si C = 100 si D... tambien asignamos el valor del segundo caracter a SegundoDigito */ if((PrimerDigito - SegundoDigito)<0) { //Si es negativo quiere decir que hay numeros tipo IV, IX, XL, etc //entonces aqui se asigna el resultado de los dos digitos en una nueva variable global } } } } else { //Codigo para impar }
Esto es el codigo que solamente suma: int main() { int i,romano=0,caracteres=0; char numero[10]; printf("Escribe un numero romano:"); for(i=0;i<10;i++) { switch(numero[i]) { case 'M': romano+=1000; break; case 'D': romano+=500; break; case 'C': romano+=100; break; case 'L': romano+=50; break; case 'X': romano+=10; break; case 'V': romano+=5; break; case 'I': romano+=1; break; } } }
alguna idea? saludos!!
|
|
« Última modificación: 11 Junio 2013, 00:35 am por edr89 »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Calculadora que suma numeros romanos
Programación C/C++
|
miiku
|
1
|
10,292
|
13 Agosto 2012, 03:50 am
por farresito
|
|
|
verificar numeros romanos
« 1 2 »
Programación C/C++
|
m@o_614
|
15
|
10,706
|
22 Agosto 2013, 08:46 am
por rir3760
|
|
|
Pasar numeros enteros arábigos a romanos, por donde empezar.
« 1 2 3 »
Programación C/C++
|
Caster
|
21
|
12,526
|
18 Mayo 2014, 18:38 pm
por Blaster
|
|
|
[Aporte]Convertidor de números decimales a romanos
Programación C/C++
|
0xFer
|
0
|
3,210
|
24 Mayo 2015, 19:00 pm
por 0xFer
|
|
|
Conversor de números arábigos a números romanos
Programación C/C++
|
perico1995
|
0
|
1,872
|
19 Diciembre 2017, 17:54 pm
por perico1995
|
|