elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++] Ayuda para ejercicio de un calendario usando arrays.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C++] Ayuda para ejercicio de un calendario usando arrays.  (Leído 3,502 veces)
nadales56

Desconectado Desconectado

Mensajes: 23


Ver Perfil
[C++] Ayuda para ejercicio de un calendario usando arrays.
« en: 11 Septiembre 2019, 20:26 pm »

Hola, buenas a todos, tengo una pequeña duda sobre el siguiente ejercicio, les dejo el enunciado en negrita.

Defina el tipo Matriz como un array de 6x7 números enteros, y diseñe un subprograma para crear un calendario de un mes genérico en una matriz que se devolverá como parámetro de salida.
El subprograma se denominará calendario.  El primer parámetro (m), de salida, es de tipo Matriz.  El segundo parámetro (ndias), de entrada, es de tipo int y representa el número total de días del mes del calendario (28, 29, 30 o 31). El tercer parámetro (pds), de entrada, es de tipo int y representa el índice del día de la semana donde comienza el primer día del mes (donde 0 corresponde a Lunes, 1 a Martes, y así sucesivamente hasta 6 que representa al Domingo).


El código que he implementado es el siguiente:
Código
  1. void calendario(Tipo_Matriz &m, const int ndias,const int pds){
  2. //Iniciar calendario me pone todos los valores de la matriz a 0
  3.    iniciar_calendario(m);
  4.  
  5.    int dia = 1;
  6.    int j;
  7.    for(int i = 0; i < 6; i++){
  8.        if(i == 0){
  9.            j = pds;
  10.        }else{
  11.            j = 0;
  12.        }
  13.        while(dia <= ndias && (j >= 0 && j < 7)){
  14.            m[i][j] = dia;
  15.            dia++;
  16.            j++;
  17.        }
  18.    }
  19.    //mostrar calendario
  20.    cout << endl;
  21.    for(int i = 0; i < 6; i++){
  22.        for(int j = 0; j < 7; j++){
  23.            cout << m[i][j] << " ";
  24.        }
  25.        cout << endl;
  26.    }
  27. }
  28.  

Cuando introduzco dias = 30 y pds = 2 (por ejemplo), el resultado que obtengo es:
0 0 1 2 3 4 6
6 7 8 9 10 11 13
13 14 15 16 17 18 20
20 21 22 23 24 25 27
27 28 29 30 0 0 0
0 0 0 0 0 0 0
me como una serie de números y no sé exactamente donde está el error, por lo que si pudiesen ayudarme, me sería de gran ayuda.
Muchas gracias!


 

Mod: No escribir titulos en mayusculas.


« Última modificación: 11 Septiembre 2019, 21:44 pm por #!drvy » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: AYUDA PARA EJERCICIO DE UN CALENDARIO USANDO ARRAYS EN C++
« Respuesta #1 en: 11 Septiembre 2019, 20:52 pm »

Código
  1. for(int i = 0; i < 6; i++){
  2.        if(i == 0){
  3.            j = pds;
  4.        }else{
  5.            j = 0;
  6.        }
  7.        while(dia <= ndias && (j >= 0 && j < 7)){
  8.            m[i][j] = dia;
  9.            dia++;
  10.            j++;
  11.        }

uno de tus errores (si es que hay mas) está aqui...
en el while
ciclo 1: j=2, dia=1 -> j=4, dia=2
ciclo 1: j=3, dia=2 -> j=5, dia=3
ciclo 1: j=4, dia=3 -> j=6, dia=4
ciclo 1: j=5, dia=4 -> j=7, dia=5
el ciclo se rompe porque  porque j pasa a ser 7 ergo no llega al dia 5

pero no estoy seguro por que se salta los siguientes dias

para ser sincero yo lo habría hecho linearmente con division y modulo

Código
  1. for(i=0; <=ndias; i++){
  2.  int x = (i+pds) % 7
  3.  int y = (i+pds) / 7
  4.  m[y][x] = i+1;
  5.  
  6. }

y te ahorrar andar trabajando con mas de 1 dimensión gracias a la magia de las matemáticas XD


« Última modificación: 11 Septiembre 2019, 20:57 pm por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
nadales56

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: [C++] Ayuda para ejercicio de un calendario usando arrays.
« Respuesta #2 en: 12 Septiembre 2019, 11:22 am »

Muchas gracias por la respuesta!
He probado el código que me has puesto, me ha parecido muy interesante y es una forma que no me hubiese planteado nunca, por lo que te agradezco mucho el aporte.

Tengo una pregunta al respecto, en qué tipo de situaciones (aparte de esta claro está) se ultiliza?, lo digo por si puedo aplicarlo en otro tipo de ejercicios, por tener esa opción en cuenta.

Por otra parte, el resultado que obtengo es el mismo que obtenía antes, me hace ese salto de número cuando llego a m[y][6].

Lo que he visto, que me ha parecido curioso es lo siguiente:
Código
  1.  
  2. for(int i = 0; i < ndias; i++){
  3.            int x = (i+pds) % 7;
  4.            int y = (i+pds) / 7;
  5.            m[y][x] = i+1;
  6.            cout << m[0][6] << " "; // linea nueva para comprobar el estado de la matriz en esa posicion
  7.  
  8. }
  9.  
  10.  

el resultado es este:
0 0 0 0 5 6 6 6 6 6 6 6 6 6...
de manera que llega a poner el 5, pero luego me pasa al 6 y se queda con ese último valor.

iré echandole un vistazo a lo largo del dia, a ver si llego solo a la solución. En cuanto la consiga la postearé.

Repito, muchas gracias por el aporte! =)
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: [C++] Ayuda para ejercicio de un calendario usando arrays.
« Respuesta #3 en: 12 Septiembre 2019, 15:35 pm »

Hola, buenas a todos, tengo una pequeña duda sobre el siguiente ejercicio, les dejo el enunciado en negrita.

Defina el tipo Matriz como un array de 6x7 números enteros, y diseñe un subprograma para crear un calendario de un mes genérico en una matriz que se devolverá como parámetro de salida.
El subprograma se denominará calendario.  El primer parámetro (m), de salida, es de tipo Matriz.  El segundo parámetro (ndias), de entrada, es de tipo int y representa el número total de días del mes del calendario (28, 29, 30 o 31). El tercer parámetro (pds), de entrada, es de tipo int y representa el índice del día de la semana donde comienza el primer día del mes (donde 0 corresponde a Lunes, 1 a Martes, y así sucesivamente hasta 6 que representa al Domingo).


El código que he implementado es el siguiente:
Código
  1. void calendario(Tipo_Matriz &m, const int ndias,const int pds){
  2. //Iniciar calendario me pone todos los valores de la matriz a 0
  3.    iniciar_calendario(m);
  4.  
  5.    int dia = 1;
  6.    int j;
  7.    for(int i = 0; i < 6; i++){
  8.        if(i == 0){
  9.            j = pds;
  10.        }else{
  11.            j = 0;
  12.        }
  13.        while(dia <= ndias && (j >= 0 && j < 7)){
  14.            m[i][j] = dia;
  15.            dia++;
  16.            j++;
  17.        }
  18.    }
  19.    //mostrar calendario
  20.    cout << endl;
  21.    for(int i = 0; i < 6; i++){
  22.        for(int j = 0; j < 7; j++){
  23.            cout << m[i][j] << " ";
  24.        }
  25.        cout << endl;
  26.    }
  27. }
  28.  

Cuando introduzco dias = 30 y pds = 2 (por ejemplo), el resultado que obtengo es:
0 0 1 2 3 4 6
6 7 8 9 10 11 13
13 14 15 16 17 18 20
20 21 22 23 24 25 27
27 28 29 30 0 0 0
0 0 0 0 0 0 0
me como una serie de números y no sé exactamente donde está el error, por lo que si pudiesen ayudarme, me sería de gran ayuda.
Muchas gracias!


 

Mod: No escribir titulos en mayusculas.

Después de estar un buen rato buscando dónde podía estar el fallo, he terminado por probar el código personalmente y... Esta es la salida que he obtenido:
Código:
0	0	1	2	3	4	5	
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 0 0 0
0 0 0 0 0 0 0
Por lo que no hay ningún error. No sé si es que lo has escrito manualmente y entonces has "corregido" el error sin darte cuenta o es que has modificado algo y lo estás ejecutando sin volver a compilarlo pero ya ves que funciona. Obviamente se puede mejorar como ya te han demostrado pero correcto es. Por ejemplo esta parte:
Código
  1. if(i == 0)
  2.    j = pds;
  3. else
  4.    j = 0;
La condición del <if> va a ser cierta una vez (en la primera iteración). Por lo que se puede poner directamente el valor de <pds> a la <j> antes del bucle.
Código
  1. int dia = 1;
  2. int j = pds;
  3. for(...){
  4.    while(...){
  5.        // el cuerpo del while
  6.    }
  7.    j = 0; // actualizamos siempre a 0 despues de la primera iteracion
  8. }

Y respecto a la solución que te ha dado @engel lex, también es correcta. El resultado es el mismo que he mostrado antes. Comprueba que estés guardando y recompilando el código con cada modificación o si estás usando un IDE prueba a cerrarlo y volver a abrirlo.

Ya nos contarás si consigues solucionarlo y cuál era el problema al final. Suerte :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: [C++] Ayuda para ejercicio de un calendario usando arrays.
« Respuesta #4 en: 12 Septiembre 2019, 15:54 pm »

efectivamente como te dicen tienes algo malo y no en tu codigo...

sobre la solucion, es basicamente como el programa aplica una matriz, en realidad una matriz no deja de ser unidimensional (porque en general la ram lo es), lo que hace es calcular los saltos para saber donde debe estar al acceder, yo hice lo mismo,  se que cada sección tiene 7 de largo, ergo divido sin resto entre 7, los elementos está dentro de los 7 contiguos que es el resto de la division
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
nadales56

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: [C++] Ayuda para ejercicio de un calendario usando arrays.
« Respuesta #5 en: 12 Septiembre 2019, 20:18 pm »

Buenas señor@s,
estaban ustedes en lo cierto, he descargado otro editor de texto y he actualizado la versión del compilador y no me da ningún problema.

Gracias igualmente por la ayuda que me habéis prestado. Un saludo!! =)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Tutorial] Usando el calendario JS (EpochPrime)
Desarrollo Web
dimitrix 0 2,068 Último mensaje 21 Mayo 2012, 18:43 pm
por dimitrix
Ejercicio C ARRAYS
Ejercicios
cantabria1234 0 2,587 Último mensaje 7 Mayo 2013, 18:20 pm
por cantabria1234
Necesito ayuda con un Ejercicio en C usando while, if, else
Programación C/C++
amcup 1 2,128 Último mensaje 23 Mayo 2014, 22:45 pm
por x64core
Optimizar el código de este ejercicio (arrays) C++
Programación C/C++
seryioo 1 2,314 Último mensaje 8 Agosto 2015, 08:37 am
por exoesqueleto
Duda ejercicio manejo de arrays
Programación C/C++
HIDE_95 0 1,735 Último mensaje 13 Agosto 2015, 18:08 pm
por HIDE_95
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines