TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: remi04 en 24 de Mayo de 2019, 05:02:18

Título: Ejercicio de examen a un conocido:
Publicado por: remi04 en 24 de Mayo de 2019, 05:02:18
Elaborar una función en C a la que le envías un char ascii dentro de rango del abecedario.  La función intercambia mayúscula por minúscula o viceversa.

 Es decir,  le envías una ‘a’  y la función cambia su valor por una ‘A’
Le envías una ‘B’ y cambia el valor por una ‘b’

 Las condiciones son:

   -1 sola línea de código.
   - Solo se puede usar un “;”    (Las de las interacciones for cuentan así que no vale)


Código: C
  1. void maymin(char *letra) {
  2.  
  3.   /* aquí tu línea de código */
  4.  
  5. }
Título: Re:Ejercicio de examen a un conocido:
Publicado por: Jorge555 en 24 de Mayo de 2019, 06:00:37
*letra = (*letra) + 20;

supongo que será algo así, sumando un offset.

edito: he leído mal, cambia en los dos sentidos, lo anterior solo cambiaría en uno, habría que usar el operador ternario para establecer la condición, que haría el if else para restar o sumar el offset.

*letra = (*letra > 0x5A ) ? *letra - 20 : *letra + 20;

O algo así, no sé, soy más de soldador que de teclas  :D
Título: Re:Ejercicio de examen a un conocido:
Publicado por: KILLERJC en 24 de Mayo de 2019, 08:12:31
Usando las funciones toupper y tolower de C

Código: C
  1. void maymin(char *letra) {
  2.  
  3.   *letra = isupper(*letra) ? tolower((unsigned char) *letra) : toupper((unsigned char) *letra);
  4.  
  5. }

La otra seria:

Código: C
  1. void maymin(char *letra) {
  2.  
  3.   if(isalpha(*letra)) *letra ^= 0x20;
  4.  
  5. }

Primero necesito saber que lo que voy a estar convirtiendo es realmente una letra... Y segundo entre la A mayuscula que es 0x41 ( 0100 0001 ) Y la a minuscula que es 0x61 ( 0110 0001) cambia un solo bit. Por lo tanto podria cambiarlo haciendole una XOR...

EDIT: cambie a usar isalpha y isupper
Título: Re:Ejercicio de examen a un conocido:
Publicado por: remi04 en 24 de Mayo de 2019, 11:15:17
Yo lo había resuelto utilizando la XOR pero sin preguntar isalpha. Daba por sentado que siempre llegaría una letra y no otra cosa.

  Hay gente que lo que ha hecho es una llamada a otra función.

  Ya tienen una sola línea y un solo ;  luego en esa función se explayaban poniendo de todo, sumas restas, ciclos for recorriendo la variable hasta su desborde para detectar la letra y luego buscar su minúscula en una tabla...  en fin.  Todos suspendidos  :D

 Esta claro que el profesor buscaba averiguar si la Peña controla una tabla ascii y operaciones a nivel de bits.