Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: sergioab1985 en 27 de Octubre 2012, 17:02
-
Hola a todos.
Hice el 1° ejercicio de la entrega CU00161A. La verdad es que cuando vi la solución era mucho más simple de lo que yo había pensado, pero igual comparto como lo resolví... si alguien encuentra algún error o alguna sugerencia será bienvenida y agradecida.
Saludos!!! (El diagrama de flujo va adjunto)
INICIO
i=1 : disponible=1000
Mostrar "¿Cuántos puntos de entrega habrá?"
Pedir P
Desde i= 1 hasta P hacer
Mientras disponible >= 200 hacer
Mostrar "¿Cuál es el abastecimiento para el punto de entrega", i, "?"
Pedir entrega
Si entrega <= disponible entonces
disponible = disponible - entrega
Sino
Mostrar "No se cuenta con disponibilidad para este abastecimiento.Hay disponibles", disponible, "vacunas."
i= i-1
FinSi
Repetir
Siguiente
Mostrar "El inventario está por debajo de 200 unidades; se cuenta con", disponible, "vacunas."
Mientras i <= P y disponible > 0 hacer
Mostrar "¿Cuál es el abastecimiento para el punto de entrega", i, "?"
Pedir entrega
Si entrega <= disponible
disponible = disponible - entrega
Si disponible <> 0 entonces
i= i+1
FinSi
Sino
Mostrar "No se cuenta con disponibilidad para la demanda."
Mostrar "¿Desesa que se le entregue el remaniente? s/n"
Pedir remanente
Si remanente = "s" entonces
disponible = 0
Sino
i= i+1
FinSi
FinSi
Repetir
Mostrar "Abastecimiento completo"
FIN
-
Hola, como pides sugerencias te voy a hacer algunas. Escribes:
Desde i= 1 hasta P hacer
...
...
SiNo
i= i-1
...
...
Esto no lo veo correcto: la variable que controla un bucle desde ... siguiente no debe ser manipulada en puntos intermedios, hay que dejar que el control lo lleve el propio bucle. Si quieres ser tú quien controle el avance del bucle, usa un bucle mientras ... repetir, pero tienes que tener cuidado con que no se pueda producir un bucle infinito. En general restar el contador dentro del bucle... no es común, en todo caso usando un mientras ... repetir lo que harías sería no sumar.
Fíjate que en el segundo bucle lo has hecho distinto, la variable i si la controlas tú. Además veo otro motivo para usar un mientras ... repetir en vez de un desde ... siguiente. Tal y como lo planteas tú i siempre terminará valiendo P+1 en el primer bucle, con lo cual nunca entrará en el segundo. Yo creo que ese bucle lo eliminaría completamente y lo que haría sería incorporar la condición en el bucle mientras, además de controlar manualmente la variable.
Hay una cosa que te señalo en rojo en el segundo bucle que no entiendo:
Mientras i <= P y disponible > 0 hacer
Mostrar "¿Cuál es el abastecimiento para el punto de entrega", i, "?"
Pedir entrega
Si entrega <= disponible
disponible = disponible - entrega
Si disponible <> 0 entonces
i= i+1
FinSi
Sino
Mostrar "No se cuenta con disponibilidad para la demanda."
Mostrar "¿Desesa que se le entregue el remaniente? s/n"
Pedir remanente
Si remanente = "s" entonces
disponible = 0
Sino
i= i+1
FinSi
FinSi
Repetir
¿Por qué pones Si disponible <> 0 entonces...? No entiendo para qué sirve esta condición.
¿No sería Si disponible > 0 entonces...?
-
GRACIAS MASTERMIND!!! tus recomendaciones me ayudaron mucho
lo de
Si disponible <> 0 entonces
i= i+1
FinSi
Me quedó residual de las distintas modificaciones que fui haciendo, pues en el principio no habia puesto como condicion para ingresar al bucle que DISPONIBLE debía ser >0.
Adjunto para que vean como quedó... Si hay algún error o más recomendaciones siempre serán bienvenidas.
-----------------------------------------------------------------------------
INICIO
i=1 : disponible=1000
Mostrar "¿Cuántos puntos de entrega habrá?"
Pedir P
Mientras i <= P disponible >= 200 hacer
Mostrar "¿Cuál es el abastecimiento para el punto de entrega", i, "?"
Pedir entrega
Si entrega <= disponible entonces
disponible = disponible - entrega
i= i+1
Sino
Mostrar "No se cuenta con disponibilidad para este abastecimiento.Hay disponibles", disponible, "vacunas."
i= i-1
FinSi
Repetir
Si disponible < 200 entonces
Mostrar "El inventario está por debajo de 200 unidades; se cuenta con", disponible, "vacunas."
Mientras i <= P y disponible > 0 hacer
Mostrar "¿Cuál es el abastecimiento para el punto de entrega", i, "?"
Pedir entrega
Si entrega <= disponible
disponible = disponible - entrega
i= i+1
Sino
Mostrar "No se cuenta con disponibilidad para la demanda."
Mostrar "¿Desea que se le entregue el remaniente? s/n"
Pedir remanente
Si remanente = "s" entonces
disponible = 0
Sino
i= i+1
FinSi
FinSi
Repetir
Mostrar "Abastecimiento completo"
Sino
Mostrar "Abastecimiento completo"
FinSi
FIN
-------------------------------------------------------------------------------
Gracias!!!
-
Ahora lo veo "casi bien", aunque siguen habiendo un par de cosas que no me cuadran:
Sino
Mostrar "No se cuenta con disponibilidad para este abastecimiento.Hay disponibles", disponible, "vacunas."
i= i-1
FinSi
¿Para qué ese i = i-1? Dentro de un bucle el elemento contador en general no va en un sentido y en otro, creo que esa línea debería ser i = i+1, es decir, le informas de que no se puede suministrar a ese punto de entrega y pasas al siguiente.
Al final pones
Mostrar "Abastecimiento completo"
Sino
Mostrar "Abastecimiento completo"
FinSi
Es decir, si ocurre algo muestras "Abastecimiento completo" y si no ocurre también, para eso lo pones una única vez fuera de los condicionales en vez de repetirlo dos veces (es mejor evitar repeticiones).
-
Hola!!! perdón por la demora en contestar, temas de trabajo no me permitieron estudiar esta semana...
Es cierto lo de i=i-1, esto lo había hecho para que el sistema pregunte nuevamente al mismo pedido si deseaba reajustar la cantidad de vacunas solicitadas, pero esto era necesario solo con la instrucción desde...hasta...hacer, que va aumentando automáticamente el contador. Al sacarla, esto quedó erroneo, pues daba la instrucción de dar un paso hacia atrás a la instrucción mientras...hacer
Lo de Mostrar "Abastecimiento completo" lo deduje erroneamente del diagrama de flujo, donde dos flechas desmbocan en esta instrucción
Adjunto la versión final!!! gracias!!!!
INICIO
i=1 : disponible=1000
Mostrar "¿Cuántos puntos de entrega habrá?"
Pedir P
Mientras i <= P disponible >= 200 hacer
Mostrar "¿Cuál es el abastecimiento para el punto de entrega", i, "?"
Pedir entrega
Si entrega <= disponible entonces
disponible = disponible - entrega
i= i+1
Sino
Mostrar "No se cuenta con disponibilidad para este abastecimiento.Hay disponibles", disponible, "vacunas."
FinSi
Repetir
Si disponible < 200 entonces
Mostrar "El inventario está por debajo de 200 unidades; se cuenta con", disponible, "vacunas."
Mientras i <= P y disponible > 0 hacer
Mostrar "¿Cuál es el abastecimiento para el punto de entrega", i, "?"
Pedir entrega
Si entrega <= disponible
disponible = disponible - entrega
i= i+1
Sino
Mostrar "No se cuenta con disponibilidad para la demanda."
Mostrar "¿Desea que se le entregue el remaniente? s/n"
Pedir remanente
Si remanente = "s" entonces
disponible = 0
Sino
i= i+1
FinSi
FinSi
Repetir
Sino
Mostrar "Abastecimiento completo"
FinSi
FIN