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

[0] Índice de Mensajes

Ir a la versión completa