[DUDA] Matrices

Iniciado por kayron8, 13 Marzo 2014, 11:11 AM

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

kayron8

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í:

char frases[4][15] = {
"Primera frase",
"Segunda frase",
"Hola mundo",
"Y para acabar"
};


¿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:

#include <stdio.h>
#include <stdlib.h>

int main() {
int dia;

printf("¿Que numero de la semana quieres? \n");
scanf("%d",&dia);

switch(dia) {
case 1 :
printf("lunes \n");
break;
case 2 :
printf("martes \n");
break;
case 3 :
printf("miércoles \n");
break;
case 4 :
printf("jueves \n");
break;
case 5 :
printf("viernes \n");
break;
case 6 :
printf("sábado \n");
break;
case 7 :
printf("domingo \n");
break;
default :
printf("No existe \n");
}
system("PAUSE");
return 0;
}


Espero que me podáis echar un cable.

Un saludo :D
¡Salu2 a to2!

amchacon

Código (cpp) [Seleccionar]
char frases[4][15] = {
"Primera frase",
"Segunda frase",
"Hola mundo",
"Y para acabar"
};


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 (cpp) [Seleccionar]
scanf("%d",&dia);
printf(frase[dia]);


O si te resulta más intuitivo:
Código (cpp) [Seleccionar]
scanf("%d",&dia);
printf("%s",frase[dia]);
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

eferion

Usando tu primer planteamiento tienes el problema hecho:


char dias_semana[7][10] = {
"Lunes",
"Martes",
"Miercoles",
"Jueves",
"Viernes",
"Sabado",
"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:

printf( "%s\n", dias_semana[ dia ] );

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

kayron8

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  
¡Salu2 a to2!

eferion

Puedes dejar vacío el primer espacio de la matriz


char dias_semana[][10] {
 "", // Vacio
 "Lunes",
...


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

amchacon

Cita de: kayron8 en 13 Marzo 2014, 12:14 PMUna 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 ;)
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

kayron8

Nuevamente, muchas gracias eferion.

Un saludo :D
¡Salu2 a to2!

Gh057

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 (cpp) [Seleccionar]

enum DiasSemanas
{
Lunes = 1,
Marte,
Miercoles,
Jueves,
Viernes,
Sabado,
        Domingo
};



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.
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

eferion

Cita de: 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 (cpp) [Seleccionar]

enum DiasSemanas
{
Lunes = 1,
Marte,
Miercoles,
Jueves,
Viernes,
Sabado,
        Domingo
};



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

Gh057

jajaj si eferion por eso puse a título informativo  ;D saludos!
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...