Fabian rivera Posted July 19, 2012 Report Share Posted July 19, 2012 necesito crear un programa en c este es el ejercicio que pide el profe"Con propósitos de protección, un mensaje de texto se codificareemplazando cada vocal por el número (1 a 5) correspondiente al ordennatural de las vocales y cada consonante es codificada por laconsonante que le sigue en el abecedario. Por ejemplo, la consonante bes codificada por la consonante c. Sin embargo, existen casosespeciales, por ejemplo, la consonante d debe ser codificada por laconsonante f y no por la vocal e (existen 5 de estos casos).Escribir una función que lea, carácter a carácter, un texto finalizadocon un '.' e imprima, también carácter a carácter, el respectivo textocodificado. Ayudas:--Estudie como leer caracteres en C (opción "%c" con la función scanf).--Para facilitar la codificación puede utilizar el código ASCII" Link to comment Share on other sites More sharing options...
AshWilliams Posted July 19, 2012 Report Share Posted July 19, 2012 Se mueve a Aplicaciones de Escritorio ;) PS: Está bastante fácil......pregunta, puedes usar arreglos???? Saludos :krider: Link to comment Share on other sites More sharing options...
Fabian rivera Posted July 19, 2012 Author Report Share Posted July 19, 2012 siii se puede usar lo que sea pero tiene que ser c y se tiene que compilar en linux :D Link to comment Share on other sites More sharing options...
AshWilliams Posted July 19, 2012 Report Share Posted July 19, 2012 No te tinca hacer 2 arreglos....uno solo con vocales y el otro con consonantes...asi estaría super fácil el codificar el mensaje ;) Saludos :krider: Link to comment Share on other sites More sharing options...
quesozerowitz Posted September 20, 2012 Report Share Posted September 20, 2012 Lo pudiste hacer?me gustaría saber cual es la solución, manda el código ps xD me pareció re entrete :P Link to comment Share on other sites More sharing options...
known Posted September 23, 2012 Report Share Posted September 23, 2012 Haz una función que te diga si una letra es una vocal o no.Haz otra función que te calcule la siguiente letra del alfabeto: si el caracter ingresado es 'd', 'h', 'n' o 't', que retorne caracter + 2 (2 teclas mas adelante), en caso contrario, retorna caracter+1. (En ascii, los caracteres son consecutivos en orden alfabetico, y tienen representación numérica (ej: a=97, b=98, c=99, etc), puedes comprobar esto escribiendo en tu código " char letra = 'a'; printf("%i",a); " ). Por cada letra del texto, si es vocal (usamos la primera funcion), la reemplazamos por su numero equivalente (unos pares de if).Por el contrario, si es consonante, hacemos uso de la segunda funcion. saludos ! Link to comment Share on other sites More sharing options...
xomarx69 Posted September 25, 2012 Report Share Posted September 25, 2012 Y si usas tablas hash?? http://developer.gnome.org/glib/stable/glib-Hash-Tables.htmlSuerte! Link to comment Share on other sites More sharing options...
zafrada Posted October 1, 2012 Report Share Posted October 1, 2012 (edited) Por el enunciado del problema, yo creo que apunta a el uso del switch case múltiple. Es una paja, pero el código queda entendible. void codificar(char *string ){ int i; for(i=0;i<strlen(string);i++){ switch (*(string + i)){ //si son vocales, le asignamos el número correspondiente case 'a': case 'A': *(string+i) = '1'; break; case 'e': case 'E': *(string+i) = '2'; break; case 'i': case 'I': *(string+i) = '3'; break; case 'o': case 'O': *(string+i) = '4'; break; case 'u': case 'U': *(string+i) = '5'; break; //si son consonantes que preceden a una vocal, le sumamos 2 para saltar la vocal case 'd': case 'h': case 'n': case 't': case 'D': case 'H': case 'N': case 'T': *(string+i) = *(string+i) + 2; break; //si es la z o Z, como precede a la "a", no basta con sumarle 1 case 'z': *(string+i) = 'b'; break; case 'Z': *(string+i) = 'B'; break; //también podríamos ver los símbolos que no son letras, esto es un ejemplo, pero lo conveniente //sería verificar antres de entrar al switch case si el carácter es una letra o no case ' ': case '.': case ',': case '-': break; default: *(string+i) = *(string+i) + 1; break; } } } Entonces desde el main vas leyendo carácter a carácter y guardando en un buffer, y cuando te metan un punto, terminas de leer y llamas a la función pasándole como parámetro la cadena de carácteres. Como lo que le pasas es el puntero a la cadena, entonces te modifica la cadena automáticamente, por eso la función es void. Un ejemplo de uso: int main(){ char palabra[100]; printf("Ingrese palabra a codificar: "); scanf("%s", palabra); codificar(palabra); printf("\nPalabra codificada: %s\n", palabra); return 0; } Saludos ;) Edited October 1, 2012 by zafrada Link to comment Share on other sites More sharing options...
AshWilliams Posted October 1, 2012 Report Share Posted October 1, 2012 Cerrado.....ahora que recuerdo hace tiempo vimos este tema con el user y lo solucionamos vía email...se me había olvidado cerrarlo ;) Saludos :krider: Link to comment Share on other sites More sharing options...
Recommended Posts