Autor
|
Tema: [C++] Ayuda para ejercicio de un calendario usando arrays. (Leído 3,457 veces)
|
nadales56
Desconectado
Mensajes: 23
|
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: void calendario(Tipo_Matriz &m, const int ndias,const int pds){ //Iniciar calendario me pone todos los valores de la matriz a 0 iniciar_calendario(m); int dia = 1; int j; for(int i = 0; i < 6; i++){ if(i == 0){ j = pds; }else{ j = 0; } while(dia <= ndias && (j >= 0 && j < 7)){ m[i][j] = dia; dia++; j++; } } //mostrar calendario cout << endl; for(int i = 0; i < 6; i++){ for(int j = 0; j < 7; j++){ cout << m[i][j] << " "; } cout << endl; } }
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
|
for(int i = 0; i < 6; i++){ if(i == 0){ j = pds; }else{ j = 0; } while(dia <= ndias && (j >= 0 && j < 7)){ m[i][j] = dia; dia++; j++; }
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 for(i=0; <=ndias; i++){ int x = (i+pds) % 7 int y = (i+pds) / 7 m[y][x] = i+1; }
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
Mensajes: 23
|
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: for(int i = 0; i < ndias; i++){ int x = (i+pds) % 7; int y = (i+pds) / 7; m[y][x] = i+1; cout << m[0][6] << " "; // linea nueva para comprobar el estado de la matriz en esa posicion }
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
|
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: void calendario(Tipo_Matriz &m, const int ndias,const int pds){ //Iniciar calendario me pone todos los valores de la matriz a 0 iniciar_calendario(m); int dia = 1; int j; for(int i = 0; i < 6; i++){ if(i == 0){ j = pds; }else{ j = 0; } while(dia <= ndias && (j >= 0 && j < 7)){ m[i][j] = dia; dia++; j++; } } //mostrar calendario cout << endl; for(int i = 0; i < 6; i++){ for(int j = 0; j < 7; j++){ cout << m[i][j] << " "; } cout << endl; } }
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: 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: if(i == 0) j = pds; else 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. int dia = 1; int j = pds; for(...){ while(...){ // el cuerpo del while } j = 0; // actualizamos siempre a 0 despues de la primera iteracion }
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
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
engel lex
|
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
Mensajes: 23
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Tutorial] Usando el calendario JS (EpochPrime)
Desarrollo Web
|
dimitrix
|
0
|
2,043
|
21 Mayo 2012, 18:43 pm
por dimitrix
|
|
|
Ejercicio C ARRAYS
Ejercicios
|
cantabria1234
|
0
|
2,571
|
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,101
|
23 Mayo 2014, 22:45 pm
por x64core
|
|
|
Optimizar el código de este ejercicio (arrays) C++
Programación C/C++
|
seryioo
|
1
|
2,283
|
8 Agosto 2015, 08:37 am
por exoesqueleto
|
|
|
Duda ejercicio manejo de arrays
Programación C/C++
|
HIDE_95
|
0
|
1,713
|
13 Agosto 2015, 18:08 pm
por HIDE_95
|
|