Array de reserva de vuelos
Disculpe mi ignorancia pero tengo que realizar un algoritmo que me pide según las normas
Número de plazas del avión: 300, plazas fumadores: 1 a 100 y plazas no fumadores: 101 a 300.
Debo reralizar la reserva y cerrarla cuando no hayan plazas libres.
Quisiera saber si en la primera parte del algoritmo voy bien encaminado:
Algoritmo Reserva
Tipo
Tipo array[1...100] de entero: Fumadores
Tipo array[101..300] de entero: NoFumadores
var
Fumadores: F
NoFumadores:NF
Entero: i
Cadena: respuesta
Inicio
Escribir('Reserva para fumador o No fumador')
Leer(respuesta)
si respuesta = fumador entonces
desde i = 1 hasta 100 hacer
leer(F)
si F = 1 entonces
F = 0
escribir ('Su asiento es:', F]
si_no
escribir ('No hay Lugar')
fin_si
fin_desde
Coloco si es igual a 1 como condición del Si porque:
F = 1 Hay lugar
F = 0 No hay Lugar
Número de plazas del avión: 300, plazas fumadores: 1 a 100 y plazas no fumadores: 101 a 300.
Debo reralizar la reserva y cerrarla cuando no hayan plazas libres.
Quisiera saber si en la primera parte del algoritmo voy bien encaminado:
Algoritmo Reserva
Tipo
Tipo array[1...100] de entero: Fumadores
Tipo array[101..300] de entero: NoFumadores
var
Fumadores: F
NoFumadores:NF
Entero: i
Cadena: respuesta
Inicio
Escribir('Reserva para fumador o No fumador')
Leer(respuesta)
si respuesta = fumador entonces
desde i = 1 hasta 100 hacer
leer(F)
si F = 1 entonces
F = 0
escribir ('Su asiento es:', F]
si_no
escribir ('No hay Lugar')
fin_si
fin_desde
Coloco si es igual a 1 como condición del Si porque:
F = 1 Hay lugar
F = 0 No hay Lugar
1 Respuesta
Respuesta de rca_correo
1
1
rca_correo, Más de 10 años en el mundo IT como programador, consultor y Jefe...
Según lo que comentas vas bien encaminado. Solo hay un punto que debes de corregir y es el punto siguiente:
si_no
Escribir ('No hay Lugar')
Te cuento. Imagina que el siguiente asiento libre de fumadores está en el asiento 99. En ese caso te aparecería 98 mensajes por pantalla del tipo 'No hay Lugar'
Lo que yo haría es definir una varaible de tipo booleana, por ejemplo bEncontradoSitio. La inicializas a False después de leer la respuesta para fumador o no fumador. Si encuentras el asiento haces
F = 0
escribir ('Su asiento es:', F]
bEncontradoSitio = True
después del fin_desde lo que haría es
Si No bEncontradoSitio entonces
escribir ('No hay Lugar')
fin_si
Es decir, si hemos recorrido todo el array de no fumadores y no hay sitio libre la variable bEncontradoSitio valdrá False por lo que mostrará el mensaje de que no hay sitio. Mientras que si lo ha encontrado mostrará el número de asiento y acabará.
Otro consejo que te hago es que utilices un único array para los asientos, ya que entre otras cosas cuando muestras el número de asiento para no fumadores no muestras el número de asiento del avión sino la posición del vector de no fumadores por lo que el valor dado no será correcto, ¿Lo entiendes?
si_no
Escribir ('No hay Lugar')
Te cuento. Imagina que el siguiente asiento libre de fumadores está en el asiento 99. En ese caso te aparecería 98 mensajes por pantalla del tipo 'No hay Lugar'
Lo que yo haría es definir una varaible de tipo booleana, por ejemplo bEncontradoSitio. La inicializas a False después de leer la respuesta para fumador o no fumador. Si encuentras el asiento haces
F = 0
escribir ('Su asiento es:', F]
bEncontradoSitio = True
después del fin_desde lo que haría es
Si No bEncontradoSitio entonces
escribir ('No hay Lugar')
fin_si
Es decir, si hemos recorrido todo el array de no fumadores y no hay sitio libre la variable bEncontradoSitio valdrá False por lo que mostrará el mensaje de que no hay sitio. Mientras que si lo ha encontrado mostrará el número de asiento y acabará.
Otro consejo que te hago es que utilices un único array para los asientos, ya que entre otras cosas cuando muestras el número de asiento para no fumadores no muestras el número de asiento del avión sino la posición del vector de no fumadores por lo que el valor dado no será correcto, ¿Lo entiendes?
Antes que nada quiero expresar mi agradecimiento por haberme dado un poco de su valioso tiempo y por la pedagogía expresada para explicarme.
Creo haber comprendido de no ser así mi algoritmo reflejara lo contrario, lo expongo para ver si voy bien en su desarrollo:
Algoritmo Reserva
Tipo Array[1...300] de entero: Avión
var
Avión: A
boolean: sitioencontrado
Entero: i
Cadena: respuesta
Inicio
sitioencontrado = falso
Escribir('Reserva para fumador o para no fumador')
Leer(respuesta)
si respuesta = fumador entonces
desde i = 1 hasta 100 hacer
leer(A)
si A = 1 entonces
A = 0
escribir('Su asiento es:', A)
sitioencontrado = verdadero
si_no
escribir('No hay lugar')
fin_si
fin_desde
De nuevo agradezco su tiempo y quisiera saber si he mejorado la primera parte de mi desarrollo, nuevamente gracias y que se encuentre bien saludos!
Creo haber comprendido de no ser así mi algoritmo reflejara lo contrario, lo expongo para ver si voy bien en su desarrollo:
Algoritmo Reserva
Tipo Array[1...300] de entero: Avión
var
Avión: A
boolean: sitioencontrado
Entero: i
Cadena: respuesta
Inicio
sitioencontrado = falso
Escribir('Reserva para fumador o para no fumador')
Leer(respuesta)
si respuesta = fumador entonces
desde i = 1 hasta 100 hacer
leer(A)
si A = 1 entonces
A = 0
escribir('Su asiento es:', A)
sitioencontrado = verdadero
si_no
escribir('No hay lugar')
fin_si
fin_desde
De nuevo agradezco su tiempo y quisiera saber si he mejorado la primera parte de mi desarrollo, nuevamente gracias y que se encuentre bien saludos!
¿Hola cómo está? Espero que bien, me han agregado la condición de que si el avión está pronto a despegar no hay reserva
ni cancelación y justamente la posibilidad de poder anular las reservas, quisiera saber
si mi desarrollo es correcto:
Algoritmo Reserva
Tipo Array[1...300] de entero: Avión
var
Avión: A
boolean: sitioencontrado
entero: i, noroAsiento
cadena: respuesta
real: horaActual, horaSalida
inicio
sitioencontrado = falso
horaActual = X //(función interna para la hora del sistema)
Mientras (horaSalida <= horaActual - 100) hacer
escribir('Reserva para fumador o para no fumador o presione * para cancelar reserva')
leer(respuesta)
mientras (respuesta <> *) hacer
si respuesta = fumador entonces
desde i = 1 hasta 100 hacer
leer(A)
si A = 1 entonces
A = 0
escribir('Su asiento es:', A)
sitioencontrado = verdadero
fin_si
fin_desde
si sitioencontrado = falso entonces
escribir ('No hay lugar')
fin_si
fin_si
si respuesta = nofumador entonces
desde 1 = 101 hasta 300 hacer
leer(A)
si A = 1
A = 0
escribir('Su asiento es:', A)
sitioencontrado = verdad
fin_si
fin_desde
si sitioencontrado = falso entonces
escribir('No hay lugar')
fin_si
fin_si
fin_mientras
escribir('Deme nro asiento para cancelar reserva')
leer(nroAsiento)
desde i = 1 hasta nroAsiento hacer
leer(A)
si A = nroAsiento entonces
A = 1
fin_desde
escribir('Reserva cancelada')
fin _mientras
Escribir('Lo sentimos pero el tiempo ha caducado para su tramite')
Fin
Nuevamente le expreso mi agradecimiento por la disponibildad de su tiempo y po su paciencia, gracias!
ni cancelación y justamente la posibilidad de poder anular las reservas, quisiera saber
si mi desarrollo es correcto:
Algoritmo Reserva
Tipo Array[1...300] de entero: Avión
var
Avión: A
boolean: sitioencontrado
entero: i, noroAsiento
cadena: respuesta
real: horaActual, horaSalida
inicio
sitioencontrado = falso
horaActual = X //(función interna para la hora del sistema)
Mientras (horaSalida <= horaActual - 100) hacer
escribir('Reserva para fumador o para no fumador o presione * para cancelar reserva')
leer(respuesta)
mientras (respuesta <> *) hacer
si respuesta = fumador entonces
desde i = 1 hasta 100 hacer
leer(A)
si A = 1 entonces
A = 0
escribir('Su asiento es:', A)
sitioencontrado = verdadero
fin_si
fin_desde
si sitioencontrado = falso entonces
escribir ('No hay lugar')
fin_si
fin_si
si respuesta = nofumador entonces
desde 1 = 101 hasta 300 hacer
leer(A)
si A = 1
A = 0
escribir('Su asiento es:', A)
sitioencontrado = verdad
fin_si
fin_desde
si sitioencontrado = falso entonces
escribir('No hay lugar')
fin_si
fin_si
fin_mientras
escribir('Deme nro asiento para cancelar reserva')
leer(nroAsiento)
desde i = 1 hasta nroAsiento hacer
leer(A)
si A = nroAsiento entonces
A = 1
fin_desde
escribir('Reserva cancelada')
fin _mientras
Escribir('Lo sentimos pero el tiempo ha caducado para su tramite')
Fin
Nuevamente le expreso mi agradecimiento por la disponibildad de su tiempo y po su paciencia, gracias!
El algoritmo parce correcto. Pero lo que no acabo de entender es por que indicas lo de cancelar la reserva al final del algoritmo. ¿Por qué no añades la opción de cancelar en la pregunta para la reserva?
Hola muchas gracias como siempre por tu disponibilidad, creo ver que a lo que te refieres de no entender es lo que tengo en negrita
A = 1
fin_desde
Escribir('Reserva cancelada')
Lo que yo quiero es darle un mensaje de verificación al usuario como que ha concretado la cancelación de la reserva. Si es a eso a lo que te refieres, ¿crees qué he podido desarrollar el algoritmo?
Gracias por tu disponibilidad, que este bien saludos!
A = 1
fin_desde
Escribir('Reserva cancelada')
Lo que yo quiero es darle un mensaje de verificación al usuario como que ha concretado la cancelación de la reserva. Si es a eso a lo que te refieres, ¿crees qué he podido desarrollar el algoritmo?
Gracias por tu disponibilidad, que este bien saludos!
Casiiiiiiii, lo que no entiendo es porque preguntas al final del todo lo de cancelar la reserva. Desde mi punto de vista deberías de preguntarlo al mismo tiempo de lo de fumadores o no fumadores. ¿Qué tal ahora?
Un lujo ya he comprendido, la ultima duda que me surge después de varias lecturas del algoritmo es:
Si cuando busco en el array depende la respuesta de fumador o no fumador, por ejemplo en fumador desde i = 1 hasta 100 y asigno A = 0 cuando encuentro el asiento libre (A = 1), ¿no estaría colocando todo lo que encuentre en 1 en 0 en lugar ( o sea todos los asientos libres en lugar del primero que encuentre) del primer asiento libre que encuentre?. ¿Tendría qué colocar dos condiciones en el desde como por ejemplo desde i = 1 hasta 101 o A = 1. Se puede hacer esto?. Eso es lo único que no me termina de convencer, ¿qué crees?
Gracias por tu disponibilidad, saludos!
Si cuando busco en el array depende la respuesta de fumador o no fumador, por ejemplo en fumador desde i = 1 hasta 100 y asigno A = 0 cuando encuentro el asiento libre (A = 1), ¿no estaría colocando todo lo que encuentre en 1 en 0 en lugar ( o sea todos los asientos libres en lugar del primero que encuentre) del primer asiento libre que encuentre?. ¿Tendría qué colocar dos condiciones en el desde como por ejemplo desde i = 1 hasta 101 o A = 1. Se puede hacer esto?. Eso es lo único que no me termina de convencer, ¿qué crees?
Gracias por tu disponibilidad, saludos!
Debes de modificar tu algoritmo para que cuando devuelvas el número de asiento lo marques como ocupado. Algo como:
Asiento estructura de
NumAsiento como int;
ocupado como booleano;
AvionFumador array [1..100] de Asiento
De esta forma cuando busques en fumadores mirarás si el asiendo está libre así:
Si NO Avionfumador. Ocupado entonces
// está libre.
Avionfumador.ocupado = True
Escribir('Su asiento es:', i)
¿Qué tal?
Asiento estructura de
NumAsiento como int;
ocupado como booleano;
AvionFumador array [1..100] de Asiento
De esta forma cuando busques en fumadores mirarás si el asiendo está libre así:
Si NO Avionfumador. Ocupado entonces
// está libre.
Avionfumador.ocupado = True
Escribir('Su asiento es:', i)
¿Qué tal?
Hola, pero si yo coloco
desde i = 1 hasta 100 hacer
si AvionFumador.ocupado = false entonces
AvionFumador = true
escribir('Su asiento es :', i)
fin_desde
¿Al estar en una estructura repetitiva no me estaría ocupando todos los asientos para un pasajero? ¿O dices de suprimir el desde y dejarlo con la selectiva si y dos arrays una para fumadores y otra para no fumadores?
Gracias!
desde i = 1 hasta 100 hacer
si AvionFumador.ocupado = false entonces
AvionFumador = true
escribir('Su asiento es :', i)
fin_desde
¿Al estar en una estructura repetitiva no me estaría ocupando todos los asientos para un pasajero? ¿O dices de suprimir el desde y dejarlo con la selectiva si y dos arrays una para fumadores y otra para no fumadores?
Gracias!
Ah, ya te entiendo!. Puedes hacer varias cosas, te aconsejo la más fácil y es que cuando encuentres el asiento libre pongas
i = 100
de esta forma acabarás la iteración en el momento que encuentres el sitio libre.
Otra cosa, corrijo un detalle y es el siguiente:
si AvionFumador.ocupado = false entonces
AvionFumador = true
escribir('Su asiento es :', i)
fin_desde
i = 100
de esta forma acabarás la iteración en el momento que encuentres el sitio libre.
Otra cosa, corrijo un detalle y es el siguiente:
si AvionFumador.ocupado = false entonces
AvionFumador = true
escribir('Su asiento es :', i)
fin_desde
Hola muchas gracias como siempre por tu disposición para conmigo y para con los demás usuarios,
claro ese justamente era mi dilema, entonces al poder darle el valor 100 (fumador) o 300 (no fumador) a i al final de la iteración termina el bucle sin llenar todos los asientos.
Adjunto mi algoritmo que ahora si parece haber quedado finalizado (gracias a tu ayuda) para que si lo puedes confirmar:
Algoritmo Reserva
Tipo
array[1...300] de entero: Avión
var
Avion: A
double: hora_salida, hora_actual
entero: i, nroAsiento
cadena: respuesta
boolean: asiento_encontrado
inicio
hora_actual = x (funcion interna para calcular la hora del sistema)
asiento_encontrado = false
hora salida = 19.30
mientras (hora_actual <= hora_salida - 2) hacer
escribir('Reserva para fumador o no fumador o presione * para cancelar reserva')
leer(respuesta)
mientras(respuesta <> *) hacer
si respuesta = fumador entonces
desde i=1 hasta 100 hacer
leer(A)
si A = 1 entonces
A = 0
escribir('Nro Asiento:', i)
asiento_encontrado = true
i = 100
fin_desde
si asiento_encontrado = false entonces
escribir('No hay lugar')
fin si
fin si
si respuesta = no fumador entonces
desde i=101 hasta 300 hacer
leer(A)
si A = 1 entonces
A = 0
escribir('Nro Asiento:', i)
asiento_encontrado = true
i = 300
fin_desde
si asiento_encontrado = false entonces
Escribir('No hay lugar')
Fin si
Fin si
Fin mientras
Escribir('Deme Nro asiento para cancelar reserva')
Leer(nroAsiento)
desde i = 1 hasta nroAsiento
leer(A)
si A = nroAsiento entonces
A = 1
Escribir('Reserva Cancelada')
Fin si
fin_desde
Fin mientras
Escribir('Lo sentimos pero el tiempo ha caducado para su trámite')
Fin
Espero que este correcto, de nuevo agradezco su disposición y paciencia para el refinamiento del algoritmo, que esté muy bien y saludos.
Gracias!
claro ese justamente era mi dilema, entonces al poder darle el valor 100 (fumador) o 300 (no fumador) a i al final de la iteración termina el bucle sin llenar todos los asientos.
Adjunto mi algoritmo que ahora si parece haber quedado finalizado (gracias a tu ayuda) para que si lo puedes confirmar:
Algoritmo Reserva
Tipo
array[1...300] de entero: Avión
var
Avion: A
double: hora_salida, hora_actual
entero: i, nroAsiento
cadena: respuesta
boolean: asiento_encontrado
inicio
hora_actual = x (funcion interna para calcular la hora del sistema)
asiento_encontrado = false
hora salida = 19.30
mientras (hora_actual <= hora_salida - 2) hacer
escribir('Reserva para fumador o no fumador o presione * para cancelar reserva')
leer(respuesta)
mientras(respuesta <> *) hacer
si respuesta = fumador entonces
desde i=1 hasta 100 hacer
leer(A)
si A = 1 entonces
A = 0
escribir('Nro Asiento:', i)
asiento_encontrado = true
i = 100
fin_desde
si asiento_encontrado = false entonces
escribir('No hay lugar')
fin si
fin si
si respuesta = no fumador entonces
desde i=101 hasta 300 hacer
leer(A)
si A = 1 entonces
A = 0
escribir('Nro Asiento:', i)
asiento_encontrado = true
i = 300
fin_desde
si asiento_encontrado = false entonces
Escribir('No hay lugar')
Fin si
Fin si
Fin mientras
Escribir('Deme Nro asiento para cancelar reserva')
Leer(nroAsiento)
desde i = 1 hasta nroAsiento
leer(A)
si A = nroAsiento entonces
A = 1
Escribir('Reserva Cancelada')
Fin si
fin_desde
Fin mientras
Escribir('Lo sentimos pero el tiempo ha caducado para su trámite')
Fin
Espero que este correcto, de nuevo agradezco su disposición y paciencia para el refinamiento del algoritmo, que esté muy bien y saludos.
Gracias!
Después de repasar tu algoritmo veo que has puesto otra vez lo de cancelar la reserva después de preguntar lo de fumador o no fumador. Te recuerdo lo que yo te puse:
"hola,
casiiiiiiii, lo que no entiendo es porque preguntas al final del todo lo de cancelar la reserva. Desde mi punto de vista deberías de preguntarlo al mismo tiempo de lo de fumadores o no fumadores. ¿Qué tal ahora?
Un saludo"
Es decir, que no tenga que preguntar lo de fumador o no fumador para poder cancelar una reserva.
"hola,
casiiiiiiii, lo que no entiendo es porque preguntas al final del todo lo de cancelar la reserva. Desde mi punto de vista deberías de preguntarlo al mismo tiempo de lo de fumadores o no fumadores. ¿Qué tal ahora?
Un saludo"
Es decir, que no tenga que preguntar lo de fumador o no fumador para poder cancelar una reserva.
Hola como está, gracias como siempre por su disponibilidad, he reformado alguna parte del algoritmo, aquí lo adjunto para ver si comprendí lo que me aconsejo usted en la última respuesta:
Algoritmo Reserva
Tipo
array[1...300] de entero: Avión
var
Avion: A
double: hora_salida, hora_actual
entero: i, nroAsiento
cadena: respuesta
boolean: asiento_encontrado
inicio
hora_actual = x (funcion interna para calcular la hora del sistema)
asiento_encontrado = false
hora salida = 19.30
mientras (hora_actual <= hora_salida - 2) hacer
Escribir('Reserva o Cancelación ')
Leer(respuesta)
Si respuesta = Reserva hacer
Escribir('Fumador o no fumador')
Leer(respuesta)
si respuesta = fumador entonces
desde i=1 hasta 100 hacer
leer(A)
si A = 1 entonces
A = 0
escribir('Nro Asiento:', i)
asiento_encontrado = true
i = 100
fin si
fin_desde
si asiento_encontrado = false entonces
escribir('No hay lugar')
fin si
fin si
si respuesta = no fumador entonces
desde i=101 hasta 300 hacer
leer(A)
si A = 1 entonces
A = 0
escribir('Nro Asiento:', i)
asiento_encontrado = true
i = 300
fin si
fin_desde
si asiento_encontrado = false entonces
Escribir('No hay lugar')
Fin si
fin si
Si NO
Escribir('Deme Nro asiento para cancelar reserva')
Leer(nroAsiento)
desde i = 1 hasta nroAsiento
leer(A)
si A = nroAsiento entonces
A = 1
Escribir('Reserva Cancelada')
Fin si
fin_desde
Fin Si
Fin mientras
Escribir('Lo sentimos pero el tiempo ha caducado para su trámite')
Fin
Muchas gracias por su disponibilidad y amabilidad, que se encuentre bien, saludos!
Algoritmo Reserva
Tipo
array[1...300] de entero: Avión
var
Avion: A
double: hora_salida, hora_actual
entero: i, nroAsiento
cadena: respuesta
boolean: asiento_encontrado
inicio
hora_actual = x (funcion interna para calcular la hora del sistema)
asiento_encontrado = false
hora salida = 19.30
mientras (hora_actual <= hora_salida - 2) hacer
Escribir('Reserva o Cancelación ')
Leer(respuesta)
Si respuesta = Reserva hacer
Escribir('Fumador o no fumador')
Leer(respuesta)
si respuesta = fumador entonces
desde i=1 hasta 100 hacer
leer(A)
si A = 1 entonces
A = 0
escribir('Nro Asiento:', i)
asiento_encontrado = true
i = 100
fin si
fin_desde
si asiento_encontrado = false entonces
escribir('No hay lugar')
fin si
fin si
si respuesta = no fumador entonces
desde i=101 hasta 300 hacer
leer(A)
si A = 1 entonces
A = 0
escribir('Nro Asiento:', i)
asiento_encontrado = true
i = 300
fin si
fin_desde
si asiento_encontrado = false entonces
Escribir('No hay lugar')
Fin si
fin si
Si NO
Escribir('Deme Nro asiento para cancelar reserva')
Leer(nroAsiento)
desde i = 1 hasta nroAsiento
leer(A)
si A = nroAsiento entonces
A = 1
Escribir('Reserva Cancelada')
Fin si
fin_desde
Fin Si
Fin mientras
Escribir('Lo sentimos pero el tiempo ha caducado para su trámite')
Fin
Muchas gracias por su disponibilidad y amabilidad, que se encuentre bien, saludos!
- Compartir respuesta
- Anónimo
ahora mismo