Sunteți pe pagina 1din 9

/ ********************************************************* ******* * * * Nombre: ABRAHAM GAUSACHS HERNANDEZ, WIDA308 * * * * Descripcin: Convierte un numero a letras (Cat. y Cast.

) * * * * Data: 12 de Octubre de 2001 * * * ********************************************************* ********/ /* Este programa "traduce" un numero entrado por el usuario a su representacion grafica con caracteres alfabeticos. La salida puede ser escogida por el usuario en el idioma castellano o catalan Ejemplo: El usuario escribe 133: En catalan: cent trenta-tres En castellano: ciento treinta y tres */ / ****************************DECLARACIONES**************** *****************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #define MAX 100 int longitud;//LONGITUD DE LA CADENA ENTRADA int salgo;//BANDERA Q HACE ACABAR EL PROGRAMA SI EL USUARIO HA INSERTADO UNA MALA ENTRADA char entrada[MAX];//ENTRADA DEL USUARIO

char salida[MAX];//SALIDA YA CONVERTIDA A LETRAS char actual[MAX];//VALOR DEL NUMERO ACTUAL char actualposterior[MAX];//VALOR DEL NUMERO POSTERIOR char revisada[MAX]; //LA ENTRADA UNA VEZ REVISADA PARA Q EL USUARIO NO ENTRE LETRAS char opcio[MAX]; //OPCION SELECCIONADA 1 CASTELLANO 2 CATALAN int revisaelnumero(char a_revisar[]);//MIRA Q LA LONGITUD DEL TEXTO SEA MENOR DE 9 Y Q NO HAYAN LETRAS void traduce_a_Cas(char revisada[]); //FUNCION Q "TRADUCE" AL CASTELLANO void traduce_a_Cat(char revisada[]); //FUNCION Q "TRADUCE" AL CATALAN void interface(); //FUNCION Q PRINTA EL MENSAJE DE BIENVENIDA Y LAS OPCIONES //TAMBIEN ES LA Q SE ENCARGA DE RECOGER LA ENTRADA DEL USUARIO

/*********************************MAIN DEL PROGRAMA**************************************/ void main(){ while (salgo != 2){ // 0. MIENTRAS NO DECIDAN SALIR... interface(); //1. MUESTRA EL TEXTO EN PANTALLA Y ESPERA ENTRADA salgo = revisaelnumero(entrada); Q LA ENTRADA ESTE BIEN //2. REVISA

if (salgo == 0){ //3. SI LA ENTRADA NO ESTA BIEN SE QUEJA printf("La entrada ha sido erronea! Vuelva a intentarlo!\n"); printf("\nRecuerde que la longitud maxima son 8 numeros y no ponga letras!!"); } 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){ traduce_a_Cas(entrada); } else{ traduce_a_Cat(entrada); } printf("\nSU NUMERO ES:-------------------------------------------------------\n"); printf("%s\n",salida); //5. MUESTRA LA SALIDA

printf("--------------------------------------------------------------------\n"); strcpy(salida,""); //6. VACIO LA SALIDA PARA NO CONCATENAR } } }

/ *************************************FUNCIONES*********** ********************************/ // FUNCION QUE "TRADUCE" EL NUMERO A EL CASTELLANO void 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 int int int numerito; numeritoposterior; i; 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] = '\0'; numerito = atoi(actual); if (numerito != 1){ strcat(salida,unidades[numerito1]); } 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] = '\0'; numerito = atoi(actual); actualposterior[0] = revisada[bandera+1];actualposterior[1] = '\0'; numeritoposterior = atoi(actualposterior); if (numerito == 1){ if (numeritoposterior != 0){ strcat(salida,decenasespeciales[numeritoposterior]); i--; }else{

strcat(salida,decenas[numerito-1]); } } else{ strcat(salida,decenas[numerito1]); if (numeritoposterior !=0 && numerito != 0) strcat(salida,"y "); } break; case 3:case 6: //centenas actual[0] = revisada[bandera];actual[1] = '\0'; 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 CATALAN void traduce_a_Cat(char revisada[]){ char unidades[MAX][MAX]={"u ","dos ","tres ","quatre ","cinc ","sis ","set ","vuit ","nou "}; char decenas[MAX] [MAX]={"deu","vint","trenta","quaranta","cinquanta","sixa nta","setanta","vuitanta","noranta"}; char centenas[MAX][MAX]={"cent ","dos-cents ","trescents ","quatre-cents ","cinc-cents ","sis-cents ","setcents ","vuit-cents ","nou-cents "}; char decenasespeciales[MAX][MAX]={"deu ","onze ","dotze ","tretze ","catorze ","quinze ","setze ","disset ","divuit ","dinou "}; int int int int int numerito; numeritoposterior; i; bandera; posicionactual;

longitud = strlen(revisada); for (i=longitud;i >= 1 ;i--){ bandera = longitud - i; posicionactual = longitud - bandera; switch(posicionactual){ case 1:case 4:case 7: //unitats actual[0] = revisada[bandera];actual[1] = '\0'; numerito = atoi(actual); if (numerito != 1){ strcat(salida,unidades[numerito1]); } 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] = '\0'; numerito = atoi(actual); actualposterior[0] = revisada[bandera+1];actualposterior[1] = '\0'; numeritoposterior = atoi(actualposterior); if (numerito == 1){ if (numeritoposterior != 0){ strcat(salida,decenasespeciales[numeritoposterior]); i--; }else{ strcat(salida,decenas[numerito-1]); } } else{ strcat(salida,decenas[numerito1]); if (numeritoposterior !=0 && numerito != 0 && numerito !=2 ){ strcat(salida,"-"); } else if(numeritoposterior !=0 && numerito != 0 && numerito ==2){ strcat(salida,"-i-"); } } break; case 3:case 6: //centenas actual[0] = revisada[bandera];actual[1] = '\0'; numerito = atoi(actual); if (posicionactual == 6 && longitud > 6){

if (longitud == 7 && revisada[bandera-1] == '1'){ strcat(salida,"milio "); }else{ strcat(salida,"mil.lions "); } } 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,"cent "); }else{ strcat(salida,centenas[numerito 1]); } break; }//fin del switch }//fin del for } //fin de funcion //FUNCION Q PRINTA EL MENSAJE DE BIENVENIDA Y LAS OPCIONES void interface(){ printf("\n:: Escriba un numero de 1 a 99999999 y presione ENTER.\n"); printf(":: Si desea salir pulse * y ENTER.\n"); scanf("%s",entrada); if (entrada[0] != '*'){ printf("\nSeleccione un idioma:\n"); printf("\n1 - TRADUCIR AL CASTELLANO.\n"); printf("\n2 - TRADUIR AL CATALA.\n"); scanf("\n%s",opcio); } }

//FUNCION Q REVISA EL NUMERO EN BUSCA DE UNA LONGITUD INCORRECTA O CARACTERES ALFA int revisaelnumero(char a_revisar[]){ int decision = 1; int largo; int i; largo = strlen(a_revisar); if ((largo > 8) || (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; }

S-ar putea să vă placă și