Programación General > C/C++
FUNCIONES Y ARREGLOS???
(1/1)
infonet:
ESTIMADOS TENGO ESTE CODIGO QUE LA IDEA ES INGRESAR UN NUMERO Y ESTE PREGUNTE POR UN MENU SI LO QUIERO EN LETRAS O ROMANO, PERO AL INGRESAR LA FUNCION A ROMANO NO ME TOMA, PLIS AYUDA....
--- Código: C++ --- /****************************DECLARACIONES*********************************************/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<ctype.h>#define MAX 100 int longitud;//LONGITUD DE LA CADENA ENTRADAint salgo;//BANDERA Q HACE ACABAR EL PROGRAMA SI EL USUARIO HA INSERTADO UNA MALA ENTRADAchar entrada[MAX];//ENTRADA DEL USUARIOchar salida[MAX];//SALIDA YA CONVERTIDA A LETRASchar actual[MAX];//VALOR DEL NUMERO ACTUALchar actualposterior[MAX];//VALOR DEL NUMERO POSTERIORchar revisada[MAX]; //LA ENTRADA UNA VEZ REVISADA PARA Q EL USUARIO NO ENTRE LETRASchar opcio[MAX]; //OPCION SELECCIONADA 1 CASTELLANO 2 ROMANO int revisaelnumero(char a_revisar[]);//MIRA Q LA LONGITUD DEL TEXTO SEA MENOR DE 9 Y Q NO HAYAN LETRASvoid traduce_a_Let(char revisada[]); //FUNCION Q "TRADUCE" AL CASTELLANOvoid traduce_a_Rom(char revisada[]); //FUNCION Q "TRADUCE" AL ROMANOvoid interface(); //FUNCION Q MUESTRA EL MENSAJE DE BIENVENIDA Y LAS OPCIONESvoid romanos(int); //FUNCION QUE VALIDA NUMERO ROMANO /*********************************MAIN DEL PROGRAMA**************************************/ main(){ while (salgo != 2){ // 0. MIENTRAS NO DECIDAN SALIR... interface(); //1. MUESTRA EL TEXTO EN PANTALLA Y ESPERA ENTRADA salgo = revisaelnumero(entrada); //2. REVISA Q LA ENTRADA ESTE BIEN if (salgo == 0){ //3. SI LA ENTRADA NO ESTA BIEN SE QUEJA printf("INCORRECTO!! INTENTELO NUEVAMENTE!!!n"); printf("nLOMGITUD MAXIMA 3!!"); printf(" "); } else{ if (strcmp(opcio,"1") == 0){ traduce_a_Let(entrada); } else{ traduce_a_Rom(entrada); } printf("nSU NUMERO ES :n"); printf("%sn",salida); //5. MUESTRA LA SALIDA printf("---n"); strcpy(salida,""); //6. VACIO LA SALIDA PARA NO CONCATENAR } }} /*************************************FUNCIONES*******************************************/ // FUNCION QUE "TRADUCE" EL NUMERO A LETRAvoid traduce_a_Let(char revisada[]){ char unidades[MAX][MAX]={"UNO","DOS","TRES","CUATRO","CINCO","SEIS","SIETE","OCHO","NUEVE"}; char decenas[MAX][MAX]={"DIEZ","VEINTE","TRINTA","CUARENTA","CINCUENTA","SESENTA","SETENTA","OCHENTA","NOVENTA"}; char centenas[MAX][MAX]={"CIENTO"}; char decenasespeciales[MAX][MAX]={"DIEZ","ONCE","DOCE","TRECE","CATORCE","QUINCE","DIECISEIS","DIECISIETE","DIECIOCHO","DIECINUEVE"}; int numerito; int numeritoposterior; int i; int bandera; int posicionactual; longitud = strlen(revisada); for (i=longitud;i >= 1 ;i--){ bandera = longitud - i; posicionactual = longitud - bandera; switch(posicionactual){ case 1:case 4:case 7: //unidades actual[0] = revisada[bandera];actual[1] = ''; numerito = atoi(actual); if (numerito != 1){ strcat(salida,unidades[numerito-1]); } else{ if (longitud == 4 && posicionactual == 4){ } else if(longitud == 7 && posicionactual == 7){ strcat(salida," UN "); }else{ strcat(salida,unidades[numerito-1]); } } break; case 2:case 5:case 8: //decenas actual[0] = revisada[bandera];actual[1] = ''; numerito = atoi(actual); actualposterior[0] = revisada[bandera+1];actualposterior[1] = ''; numeritoposterior = atoi(actualposterior); if (numerito == 1){ if (numeritoposterior != 0){ strcat(salida,decenasespeciales[numeritoposterior]); i--; }else{ strcat(salida,decenas[numerito-1]); } } else{ strcat(salida,decenas[numerito-1]); if (numeritoposterior !=0 && numerito != 0) strcat(salida," Y "); } break; case 3:case 6: //centenas actual[0] = revisada[bandera];actual[1] = ''; numerito = atoi(actual); if (numerito == 1 && revisada[bandera+1] == '0' && revisada[bandera+2] == '0'){ strcat(salida,"CIEN"); }else{ strcat(salida,centenas[numerito - 1]); } break; }//fin del switch }//fin del for } //fin de funcion //FUNCION QUE "TRADUCE" EL NUMERO ROMANOvoid traduce_a_Rom(char revisada[]){/*void traduce_a_Rom(int); { int p; do { printf("Inserte un numero: "); scanf("%d",&p); if(p<1) printf("Deben ser mayores a ceron"); else { if(p<4000) traduce_a_Rom(p); else { if((p/1000)>3) printf("®"); traduce_a_Rom((p/1000)); printf("¯"); traduce_a_Rom(p%1000); } } } while(p<1); getchar(); getchar(); return 0;}void traduce_a_Rom(int x){ while(x>=1000){x-=1000;printf("M");} while(x>=900){x-=900;printf("CM");} while(x>=500){x-=500;printf("D");} while(x>=400){x-=400;printf("CD");} while(x>=100){x-=100;printf("C");} while(x>=90){x-=90;printf("XC");} while(x>=50){x-=50;printf("L");} while(x>=40){x-=40;printf("XL");} while(x>=10){x-=10;printf("X");} while(x>=9){x-=9;printf("IX");} while(x>=5){x-=5;printf("V");} while(x>=4){x-=4;printf("IV");} while(x>=1){x-=1;printf("I");}}*/} //fin de funcion //FUNCION QUE MUESTRA EL MENSAJE DE BIENVENIDA Y LAS OPCIONESvoid interface(){ printf("nEscriba un numero de 1 a 100 : n"); printf("* Para Salir.n"); scanf("%s",entrada); if (entrada[0] != '*'){ printf("nSELECCIONE UNA OPCION:n"); printf("n1 - TRADUCIR AL LETRAS.n"); printf("n2 - TRADUIR A NUM. ROMANO.n"); scanf("n%s",opcio); }} //FUNCION Q REVISA EL NUMERO EN BUSCA DE UNA LONGITUD INCORRECTA O CARACTERES ALFAint revisaelnumero(char a_revisar[]){ int decision = 1; int largo; int i; largo = strlen(a_revisar); if ((largo > 3) || (largo < 1)){ //MIRO Q LA LONGITUD SEA CORRECTA decision = 0; } else if(a_revisar[0] == '*'){ decision = 2; } else{ for(i=0;i<largo;i++){ if(isalpha(a_revisar[i]) != 0){ //MIRO Q NO HAYA LETRAS INTRODUCIDAS decision = 0; } } }return decision;}
ESTE ES EL QUE VALIDA A NUMERO ROMANO
--- Código: C++ --- //FUNCION QUE "TRADUCE" EL NUMERO ROMANO//void traduce_a_Rom(int); #include<stdio.h>void traduce_a_Rom(int);main(){ int p; do { printf("Inserte un numero: "); scanf("%d",&p); if(p<1) printf("Deben ser mayores a ceron"); else { if(p<4000) traduce_a_Rom(p); else { if((p/1000)>3) printf("®"); traduce_a_Rom((p/1000)); printf("¯"); traduce_a_Rom(p%1000); } } }while(p<1); getchar(); getchar(); return 0;}void traduce_a_Rom(int x){ while(x>=1000){x-=1000;printf("M");} while(x>=900){x-=900;printf("CM");} while(x>=500){x-=500;printf("D");} while(x>=400){x-=400;printf("CD");} while(x>=100){x-=100;printf("C");} while(x>=90){x-=90;printf("XC");} while(x>=50){x-=50;printf("L");} while(x>=40){x-=40;printf("XL");} while(x>=10){x-=10;printf("X");} while(x>=9){x-=9;printf("IX");} while(x>=5){x-=5;printf("V");} while(x>=4){x-=4;printf("IV");} while(x>=1){x-=1;printf("I");}}
infonet:
LISTO Y FUNCIONANDO EN DEV C++
--- Código: C++ --- #include<stdio.h>#include<conio.h>#include<string.h>#include<stdlib.h>#include<ctype.h>#define MAX 100int longitud;//LONGITUD DE LA CADENA ENTRADAint salgo;//BANDERA Q HACE ACABAR EL PROGRAMA SI EL USUARIO HA INSERTADO UNA MALA ENTRADAchar entrada[MAX];//ENTRADA DEL USUARIOchar salida[MAX];//SALIDA YA CONVERTIDA A LETRASchar actual[MAX];//VALOR DEL NUMERO ACTUALchar actualposterior[MAX];//VALOR DEL NUMERO POSTERIORchar revisada[MAX]; //LA ENTRADA UNA VEZ REVISADA PARA Q EL USUARIO NO ENTRE LETRASchar opcio[MAX]; //OPCION SELECCIONADA 1 CASTELLANO 2 ROMANOint p;int aux;int revisaelnumero(char a_revisar[]);//MIRA Q LA LONGITUD DEL TEXTO SEA MENOR DE 9 Y Q NO HAYAN LETRASvoid traduce_a_Cas(char revisada[]); //FUNCION Q "TRADUCE" AL CASTELLANOvoid traduce_a_Rom(int); //FUNCION Q "TRADUCE" AL ROMANOvoid interface(); //FUNCION Q PRINTA EL MENSAJE DE BIENVENIDA Y LAS OPCIONESvoid Bienvenida(); //TAMBIEN ES LA Q SE ENCARGA DE RECOGER LA ENTRADA DEL USUARIO /*********************************MAIN DEL PROGRAMA**************************************/int main(){ while (salgo != 2)// 0. MIENTRAS NO DECIDAN SALIR... { Bienvenida();// LLAMA A LA FUNCION BIENBENIDA... getche(); interface();//1. MUESTRA EL TEXTO EN PANTALLA Y ESPERA ENTRADA salgo = revisaelnumero(entrada);//2. REVISA Q LA ENTRADA ESTE BIEN if (salgo == 0) { system("cls"); printf("n_______________________________________________________________nn"); printf("La entrada ha sido erronea! Vuelva a intentarlo!n"); printf("nRecuerde que la longitud maxima son 3 numeros y no ponga letras!!"); printf("n_______________________________________________________________nn"); getche(); main(); } if (salgo == 3) { system("cls"); printf("n_______________________________________________________________nn"); printf("La entrada ha sido erronea! Vuelva a intentarlo!n"); printf("nSolo el Numero 100 es soportado para 3 digitos!!"); printf("n_______________________________________________________________nn"); getche(); main(); } if (salgo == 2) { printf("nAdios!!!n");//3.5 EL USUARIO HA DECIDIDO SALIR } else //4. SI LA ENTRADA ESTA BIEN LO TRADUCE AL IDIOMA SELECCIONADO { if (strcmp(opcio,"1") == 0) { system("cls"); printf("n__________________________________________________________nn"); printf("nSU NUMERO EN PALABRAS:n"); printf("n__________________________________________________________nn"); traduce_a_Cas(entrada); } else { system("cls"); printf("n__________________________________________________________nn"); printf("nSU NUMERO EN ROMANO:n"); printf("n__________________________________________________________nn"); traduce_a_Rom(p); } printf("nn"); printf("%sn ",salida);//5. MUESTRA LA SALIDA printf("nn"); strcpy(salida,"");//6. VACIO LA SALIDA PARA NO CONCATENAR getche(); } }}/*************************************FUNCIONES*******************************************/// FUNCION QUE "TRADUCE" EL NUMERO A EL CASTELLANOvoid traduce_a_Cas(char revisada[]){ char unidades[MAX][MAX]={"uno ","dos ","tres ","cuatro ","cinco ","seis ","siete ","ocho ","nueve "}; char decenas[MAX][MAX]={"diez ","veinte ","treinta ","cuarenta ","cincuenta ","sesenta ","setenta ","ochenta ","noventa "}; char centenas[MAX][MAX]={"ciento ","doscientos ","trescientos ","cuatrocientos ","quinientos ","seiscientos ","setecientos ","ochocientos ","novecientos "}; char decenasespeciales[MAX][MAX]={"diez ","once ","doce ","trece ","catorce ","quince ","dieciseis ","diecisiete ","dieciocho ","diecinueve "}; int numerito; int numeritoposterior; int i; int bandera; int posicionactual; longitud = strlen(revisada); for (i=longitud;i >= 1 ;i--) { bandera = longitud - i; posicionactual = longitud - bandera; switch(posicionactual) { case 1:case 4:case 7: //unidades actual[0] = revisada[bandera];actual[1] = ''; numerito = atoi(actual); if (numerito != 1) { strcat(salida,unidades[numerito-1]); } else { if (longitud == 4 && posicionactual == 4) { } else if(longitud == 7 && posicionactual == 7) { strcat(salida,"un "); } else { strcat(salida,unidades[numerito-1]); } } break; case 2:case 5:case 8: //decenas actual[0] = revisada[bandera];actual[1] = ''; numerito = atoi(actual); actualposterior[0] = revisada[bandera+1];actualposterior[1] = ''; numeritoposterior = atoi(actualposterior); if (numerito == 1) { if (numeritoposterior != 0) { strcat(salida,decenasespeciales[numeritoposterior]); i--; } else { strcat(salida,decenas[numerito-1]); } } else { strcat(salida,decenas[numerito-1]); if (numeritoposterior !=0 && numerito != 0) strcat(salida,"y "); } break; case 3:case 6: //centenas actual[0] = revisada[bandera];actual[1] = ''; numerito = atoi(actual); if (posicionactual == 6 && longitud > 6) { if (longitud == 7 && revisada[bandera-1] == '1') { strcat(salida,"millon "); } else { strcat(salida,"millones "); } } else if (posicionactual == 3 && longitud > 3) { if(revisada[bandera-1] =='0' && revisada[bandera-2] == '0' && revisada[bandera-3] == '0') { } else { strcat(salida,"mil "); } } if (numerito == 1 && revisada[bandera+1] == '0' && revisada[bandera+2] == '0') { strcat(salida,"cien "); } else { strcat(salida,centenas[numerito - 1]); } break; }//fin del switch }//fin del for} //fin de funcion /*******************************************/// FUNCION QUE "TRADUCE" EL NUMERO AL ROMANO void traduce_a_Rom(int x){ while(x>=1000){x-=1000;printf("M");} while(x>=900){x-=900;printf("CM");} while(x>=500){x-=500;printf("D");} while(x>=400){x-=400;printf("CD");} while(x>=100){x-=100;printf("C");} while(x>=90){x-=90;printf("XC");} while(x>=50){x-=50;printf("L");} while(x>=40){x-=40;printf("XL");} while(x>=10){x-=10;printf("X");} while(x>=9){x-=9;printf("IX");} while(x>=5){x-=5;printf("V");} while(x>=4){x-=4;printf("IV");} while(x>=1){x-=1;printf("I");}} //fin de funcion /***********************/// FUNCION DE BIENVENIDA void Bienvenida(){ system("cls"); printf("n________________________________________________________________________________nn"); printf("BIENVENIDO SR USUARIOn"); printf("ESTA APLICACION LE PERMITE TRADUCIR NUMEROS A PALABRAS O NUMEROS ROMANOS.n"); printf("n________________________________________________________________________________nn"); printf("presione la tecla ENTERn");} /******************///FUNCION OPCIONESvoid interface(){ system("cls"); printf("n__________________________________________________________nn"); printf(" Digite un numero entre 1 y 100 , luego presione ENTER.n"); printf(" Si desea salir pulse * y ENTER.n"); printf("n__________________________________________________________nn"); printf("nNumero : "); scanf("%s",entrada); p=atoi(entrada); if (entrada[0] != '*') { system("cls"); printf("n__________________________________________________________nn"); printf("nSELECCIONE UN TIPO DE TRADUCCION:n"); printf("n__________________________________________________________nn"); printf("nn"); printf("n[1] - TRADUCIR A PALABRAS.n"); printf("nn"); printf("n[2] - TRADUIR A NUMERO ROMANO.n"); printf("nn"); printf("nOpcion : "); scanf("n%s",opcio); }} /*********************************************************************************///FUNCION Q REVISA EL NUMERO EN BUSCA DE UNA LONGITUD INCORRECTA O CARACTERES ALFAint revisaelnumero(char a_revisar[]){ int decision = 1; int largo; int i; largo = strlen(a_revisar); aux=atoi(a_revisar); if (aux>100) { decision = 3; } if ((largo > 3) || (largo < 1)) //MIRO Q LA LONGITUD SEA CORRECTA { decision = 0; } else if(a_revisar[0] == '*') { decision = 2; } else { for(i=0;i<largo;i++) { if(isalpha(a_revisar[i]) != 0) //MIRO Q NO HAYA LETRAS INTRODUCIDAS { decision = 0; } } } return decision;}
m0skit0:
Es buena idea dividir el código en varios ficheros.
Saludos
Navegación
Ir a la versión completa