Jump to content

Crear un programa en C con ASCII


Recommended Posts

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 codifica

reemplazando cada vocal por el número (1 a 5) correspondiente al orden

natural de las vocales y cada consonante es codificada por la

consonante que le sigue en el abecedario. Por ejemplo, la consonante b

es codificada por la consonante c. Sin embargo, existen casos

especiales, por ejemplo, la consonante d debe ser codificada por la

consonante 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 finalizado

con un '.' e imprima, también carácter a carácter, el respectivo texto

codificado.

 

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

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

  • 2 months later...

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

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 by zafrada
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...