Autor Tema: EJERCICIO CU00161A diagrama de flujo y pseudocódigo con bucles y condiciones  (Leído 5763 veces)

sergioab1985

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 13
    • Ver Perfil
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
« Última modificación: 12 de Septiembre 2014, 17:20 por Alex Rodríguez »

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:EJERCICIO CU00161A
« Respuesta #1 en: 27 de Octubre 2012, 20:36 »
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...?

sergioab1985

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 13
    • Ver Perfil
Re:EJERCICIO CU00161A
« Respuesta #2 en: 27 de Octubre 2012, 22:40 »
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!!!

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:EJERCICIO CU00161A
« Respuesta #3 en: 28 de Octubre 2012, 10:40 »
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).

sergioab1985

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 13
    • Ver Perfil
Re:EJERCICIO CU00161A
« Respuesta #4 en: 03 de Noviembre 2012, 23:10 »
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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".