Título: duda matriz Publicado por: EMANI en 30 Mayo 2022, 02:00 am buenas tardes tengo un problema en el siguiente codigo requiero que imprima los asientos en una tabla pero el problema que tengo es que este solo registra cualquier valor en la fila de I por lo que es lo unico que me falla por lo que requiero una guia en que estoy mal y que debo hacer para que me registre en las demas filas saludos.
Código
Título: Re: duda matriz Publicado por: Serapis en 30 Mayo 2022, 18:23 pm Tienes varios 'pequeños' errores... que incluyendo comentarios te señalo:
- Empezando por la declaración de la matriz. la declaras 'de 9, 9', pero luego la inicializas con: 0-9, 0-4 - Cuando solicitas la butaca, el limite en cambio es 0-5 - Inicializas la matriz 'asiento' (de tipo char), con valor char '0'. Que luego podría confundir... Es aceptable, si lueog eres consecuente con ello, aunque hubiera sido preferible que se declarara como un valor numérico. Al efecto es más útil y además en conjunto sería más util declarar dos constantes (numericas): BUTACA_LIBRE = 0 y BUTACA_OCUPADA = 1 - Igualmente es aceptable que el máximo de filas y de butacas por fila fueren declaradas también como constantes... (cualquier cambio a posterior basta cambiar el valor en 1 solo sitio en todo el código, donde se declaran y asigna el valor de la constante). - El conjunto 'si fila = letra', podrías meterlo mejor en un bloque switch (salvo que no lo hayais dado aún). - Tu mayores errores aparecen en (y a lo largo de las siguientes líneas de código): Código: if (asiento[x][butaca-1]=='X' ----- Primero por restar 1 a butaca. Si (el usuario) eligió la butaca 0, estás preguntando por la butaca -1 (0-1= -1, error que te saltará por que la matriz no lo contempla). Más preocupante aún... ocupada una butaca en la matriz asientos, como preguntas por la butaca anterior podría dar libre u ocupada, pués preguntas por una que no es la solicitada (esto es un error semántico, no habrá ningún mensaje de error, pero el resultado final es incierto), nota como la última butaca de cada fila, jamás será ocupada. ----- Segundo, si la comparación señala que la butaca está ocupada, reinvocas recursivamente la función 'reserva'... no es adecuado invocar una función recursiva sin dos preceptos: Saber que pasará con las variables, invocar innecesariamente... en tu caso al no recibir parámetros, puede parecer que carece de importancia, pero, cuando regrese de una llamada, seguirá ejecutando lo que reste de la función, por lo que sigue afectando a las variables en curso (que se declararon a nivel de módulo y no de función) y por ello, se debe estar seguro que valor mantiene al regreso de cada llamada. No he revisado que sucederá ante tales llamadas, pero es muy fácil que radique ahí lo que parece ser para tí tu error principal... Pero básicamente porque (la llamada recursiva) es innecesaria... Es preferible una de dos situaciónes: O bien 'reserva' es una función que devuelve un buleano (en tes caso el nombre de la función no sería el adecuado), solicitando fila y butaca e indicando si el asiento está libre (y por referencia la fila y butaca), y al regreso reinvocar la función o hacer la reserva en función dle valor devuelto... (pero en realidad para un principante esto puede complicarte la cuestión, al tener que mover código entre una función y otra, etc...) ...o bien envuelves todo el código en otro bucle while (es lo más simple en tu caso presente), he aquí en pseudocódigo la adaptación: Código: funcion reservar - En la función 'mostrar', esto (lo que sigue) es redundante, solo se diferencia en 'un espacio'. es preferible alterar el dato a presentar, que la diferencia sea más notable no un mero espacio. Código: if (j<5) -: 123456789 ----------------- 0: 000XX00XX 1: XX00X0XXX .... La primera línea es la numeración de cada butaca, y el primer carácter de cada fila, es la numeración de cada fila (sería aún mejor que fuera un carácter A-I, para coincidir con lo que está en uso en el ejercicio, por comodidad yo he puesto un número). Código: funcion mostrar ...y eso es todo, es tu turno. Título: Re: duda matriz Publicado por: K-YreX en 30 Mayo 2022, 21:14 pm Y otra cosa importante a tener en cuenta que creo que no se ha mencionado:
En la línea 82 tienes lo siguiente: Código
No estás comparando si 'fila' es igual a 'I'. Estás asignando el valor 'I' a 'fila. Esta instrucción se considera 'true' siempre ya que 'I' (en ASCII) es distinto de 0. Título: Re: duda matriz Publicado por: EMANI en 31 Mayo 2022, 01:15 am ok muchas gracias por su asistencia me pondre a ello en el caso de la I entonces utilizare otro orden de letras para que no tenga que utilizarla o en su defecto utilizare numeros lo que cuele primero saludos.
|