Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kayron8 en 13 Marzo 2014, 11:11 am



Título: [DUDA] Matrices
Publicado por: kayron8 en 13 Marzo 2014, 11:11 am
Hola buenos días, tengo un ejercicio que hacer en dos partes, una usando if/switch y otra sin ellos, es decir, usando una matriz de chars.

El ejercicio dice tal que así (segunda parte):
Haz un programa que muestre el nombre del día de la semana a partir de su código numérico ( 1=lunes, 2=martes....7=domingo), pero sin usar ningún if/switch!

De buenas a primeras, se que habría que hacer algo tal que así:
Código
  1. char frases[4][15] = {
  2. "Primera frase",
  3. "Segunda frase",
  4. "Hola mundo",
  5. "Y para acabar"
  6. };

¿Pero luego cómo hago para que el usuario escoja un numero y se muestre el día de la semana que corresponde?

Usando un switch sería la mar de fácil:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main() {
  5. int dia;
  6.  
  7. printf("¿Que numero de la semana quieres? \n");
  8. scanf("%d",&dia);
  9.  
  10. switch(dia) {
  11. case 1 :
  12. printf("lunes \n");
  13. break;
  14. case 2 :
  15. printf("martes \n");
  16. break;
  17. case 3 :
  18. printf("miércoles \n");
  19. break;
  20. case 4 :
  21. printf("jueves \n");
  22. break;
  23. case 5 :
  24. printf("viernes \n");
  25. break;
  26. case 6 :
  27. printf("sábado \n");
  28. break;
  29. case 7 :
  30. printf("domingo \n");
  31. break;
  32. default :
  33. printf("No existe \n");
  34. }
  35. system("PAUSE");
  36. return 0;
  37. }

Espero que me podáis echar un cable.

Un saludo :D


Título: Re: [DUDA] Matrices
Publicado por: amchacon en 13 Marzo 2014, 11:26 am
Código
  1. char frases[4][15] = {
  2. “Primera frase”,
  3. “Segunda frase”,
  4. “Hola mundo”,
  5. “Y para acabar”
  6. };

Ibas bien, crea una matriz con todos los días de la semana.

Después le pides el número y muestras el contenido de esa posición:

Código
  1. scanf("%d",&dia);
  2. printf(frase[dia]);

O si te resulta más intuitivo:
Código
  1. scanf("%d",&dia);
  2. printf("%s",frase[dia]);


Título: Re: [DUDA] Matrices
Publicado por: eferion en 13 Marzo 2014, 11:27 am
Usando tu primer planteamiento tienes el problema hecho:

Código
  1. char dias_semana[7][10] = {
  2. "Lunes",
  3. "Martes",
  4. "Miercoles",
  5. "Jueves",
  6. "Viernes",
  7. "Sabado",
  8. "Domingo" };

Si tienes una matriz con los días de la semana... puedes usar el número pedido al usuario para acceder a la matriz y recuperar el nombre correspondiente:

Código
  1. printf( "%s\n", dias_semana[ dia ] );

Lo único que tienes que tener presente es que los índices de las matrices empiezan en 0.


Título: Re: [DUDA] Matrices
Publicado por: kayron8 en 13 Marzo 2014, 12:14 pm
Hola amchacon y eferion,

¡Muchas gracias por vuestra ayuda!

Ya me funciona el programa perfectamente, visto así, es mucho más fácil resolverlo con una matriz de chars que no con un switch jajaja

Una ultima cosilla, para que quede "mas lógico/normal", ¿no hay alguna forma que el 1 corresponda al lunes y no al 0 y así sucesivamente?

Un saludo :D  


Título: Re: [DUDA] Matrices
Publicado por: eferion en 13 Marzo 2014, 12:18 pm
Puedes dejar vacío el primer espacio de la matriz

Código
  1. char dias_semana[][10] {
  2.  "", // Vacio
  3.  "Lunes",
  4. ...

Pero vete acostumbrando a lo de los índices empezando en 0 porque te vas a hartar a verlos. Es más cómodo adaptarse.


Título: Re: [DUDA] Matrices
Publicado por: amchacon en 13 Marzo 2014, 12:19 pm
Una ultima cosilla, para que quede "mas lógico/normal", ¿no hay alguna forma que el 1 corresponda al lunes y no al 0 y así sucesivamente?
Al número que te de el usuario, restale 1 ;)


Título: Re: [DUDA] Matrices
Publicado por: kayron8 en 13 Marzo 2014, 12:23 pm
Nuevamente, muchas gracias eferion.

Un saludo :D


Título: Re: [DUDA] Matrices
Publicado por: Gh057 en 13 Marzo 2014, 12:42 pm
hola kayron8 solo a título informativo, cuando tienes una serie de constantes a los cuales le asignas números enteros en especial positivos correlativos, puedes utilizar la enumeración:

Código
  1. enum DiasSemanas
  2. {
  3. Lunes = 1,
  4. Marte,
  5. Miercoles,
  6. Jueves,
  7. Viernes,
  8. Sabado,
  9.        Domingo
  10. };
  11.  
  12.  

mas info -> http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Estructuras_y_Uniones#Enumeraciones

pd: fui a la primera fuente lenguaje C de K&R, pero salía mucho mas enredado jajaa creo que aquí es más claro, y te ajusté la primera variable para que inicie en 1, como querías. saludos.


Título: Re: [DUDA] Matrices
Publicado por: eferion en 13 Marzo 2014, 12:48 pm
hola kayron8 solo a título informativo, cuando tienes una serie de constantes a los cuales le asignas números enteros en especial positivos correlativos, puedes utilizar la enumeración:

Código
  1. enum DiasSemanas
  2. {
  3. Lunes = 1,
  4. Marte,
  5. Miercoles,
  6. Jueves,
  7. Viernes,
  8. Sabado,
  9.        Domingo
  10. };
  11.  
  12.  

mas info -> http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Estructuras_y_Uniones#Enumeraciones

pd: fui a la primera fuente lenguaje C de K&R, pero salía mucho mas enredado jajaa creo que aquí es más claro, y te ajusté la primera variable para que inicie en 1, como querías. saludos.

Lo que el quiere son strings... no enumerados XD


Título: Re: [DUDA] Matrices
Publicado por: Gh057 en 13 Marzo 2014, 12:52 pm
jajaj si eferion por eso puse a título informativo  ;D saludos!