Autor Tema: Ejercicio de examen a un conocido:  (Leído 2628 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Ejercicio de examen a un conocido:
« 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. }

Desconectado Jorge555

  • PIC18
  • ****
  • Mensajes: 496
    • JMN
Re:Ejercicio de examen a un conocido:
« Respuesta #1 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
« Última modificación: 24 de Mayo de 2019, 06:12:58 por Jorge555 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Ejercicio de examen a un conocido:
« Respuesta #2 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
« Última modificación: 24 de Mayo de 2019, 08:41:45 por KILLERJC »

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Ejercicio de examen a un conocido:
« Respuesta #3 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.


 

anything