Autor Tema: Plantear un algoritmo en Pseint con variables y condicionales resolver consigna  (Leído 10713 veces)

blackburro

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Un saludo a todos. Tengo un problema con un algoritmo en pseint, pues apenas me estoy adentrando en él.

Tengo una actividad que no logro entender muy bien. Ya empecé una parte del algoritmo, pero estoy confundido con la parte final. a continuacion la instruccion del algoritmo:

Tras una discusión en la que Marge le reprocha a Homero su pésima planificación económica, Homero decide desafiar a su mujer comprando una autocaravana y comenzando a vivir en ella. El gasto de energía del autocaravana es de 3.5 litros de gasolina al día si no se enciende el aire acondicionado y 5 litros si este se enciende. El
tanque tiene una capacidad de X litros. Si Homero enciende el aire acondicionado cada 3° dia, diseñe el algoritmo en pseudocódigo y diagrama de flujo indique el número de
días en los que tarda en consumirse todo el combustible del autocaravana así como el
gastoacumulado de combustible por día.


Les pon lo que llevo del algoritmo. Ojala me puedan orientar.

Proceso Autocarabana
   definir cb,ca,drc,cap,acumulado,dia,r_c como real;
   escribir ("consumo en litros, de la autocarabana sin aire acondicionado: 3.5");
   escribir (" ");
   escribir ("consumo en litros, de la autocarabana con aire acondicionaado: 5 ");
   escribir (" ");
   escribir ("el aire acondicionado se enciende cada tercer dia");
   escribir (" ");
   acumulado<- 0;
   dia<- 1;
   r_c <- 1;
   escribir ("introduce el consumo, dias 1 y 2 ");
   leer cb;
   escribir ("introdue el consume, dia 3 ó tercero");
   leer ca;
   escribir ("dias para reiniciar el consumo");
   leer drc;
   escribir ("introduce la capacidad del tanque, en litros");
   leer cap;
   
FinProceso
« Última modificación: 12 de Febrero 2016, 10:47 por Ogramar »

candidatopardo

  • Visitante
Re:Pseint
« Respuesta #1 en: 12 de Febrero 2016, 10:04 »
¡Hola blackburro! Yo me atasco muchísimo con los problemas también y créeme que te entiendo perfectamente. Así que te he preparado parte de la resolución del problema muy muy masticado para que puedas ver como he conseguido resolver el problema paso por paso.

Espero que de alguna forma, el trabajo que te adjunto en un documento de texto, te sirva para un futuro. Y si te ha ayudado, ten presente que me ha llevado mucho trabajo y un buen rato preparártelo.

PD: Se nota que le tienes cariño a la tecla ENTER. Jajajajaj

¡Ah sí, y por cierto! Si quieres más de mis cositas:

Análisis y diseño elaborado de un problema sencillo
Calcular diferencia de días entre dos fechas contando años bisiestos

¡Y bienvenido a la comunidad! :)
« Última modificación: 12 de Febrero 2016, 11:22 por candidatopardo »

blackburro

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
que tal candiadtopardo,
es muy Buena tu descripcion ya me dio una idea de como resolverlo, pero aun no entiendo algunos detalles, ya que apenas empiezo a utilizer pseint.

1.- tengo duda con respetco a estas variables. las tengo que definer asi?
Dia 0: -3.5l
 Dia 1: -3.5l
 Dia 2: -3.5l  --> Este es el tercer día y deberían de haberse restado 5 litros.
 Dia 3: -5l

2.- lo segindo es si tengo que utilizer el commando repetir y mientras y en el si y sino
como seria en pseudocodigo esto

si(dias % 3 == 0){
        litrosActuales -= 5
      }sino{
        litrosActuales -= 3.5

que significa el % ya que en el pseint no lo habias usado.


de antemano gracias!

candidatopardo

  • Visitante
¡Hola de nuevo blackburro! Para que veas todo mas claro: en los archivos adjuntos de mi otro mensaje verás que he subido otro .txt de la documentación de la función calcularDiasRestantes. En este archivo de texto he suprimido toda la explicación de como fuy resolviendo el problema para centrarme en explicar como trabaja la función calcularDiasRestantes.

He descrito una funcion
Imagino que ya lo sabes, pero por si acaso.. Lo primero que tienes que tener claro es el concepto de función. Cuando defines una función correctamente en cualquier lenguaje de programación, o incluso en Pseint, puedes invocarla desde cualquier punto del programa.

La función hará lo que tenga que hacer. A la función que he descrito, la puedes invocar por ejemplo así.

calcularDiasRestantes(2.5)

Ese 2.5 es un número en coma flotante, que se pasa como parámetro a la función. Si te fijas en la documentación de la función, esta necesita un parámetro de entrada para funcionar. Ese valor será asignado a una variable local de la función llamada litrosActuales.

Y ya dentro de la función, esta hará lo que tenga que hacer.

En este caso, la sentencia de la función "calcularDiasRestantes(2.5)" será sustituida por un número 0-X, que representa los días que aguantará la caravana de Homer con ese combustible.

Así que podríamos hacer algo así en el programa principal:

Citar
SI (calcularDiasRestantes(200) >= 50) ENTONCES
     Escribir "Con 200 litros la caravana de Homer aguantará al menos 50 días"
SINO
     Escribir "Necesitas mas de 200 litros para que la caravana de Homer aguante al menos 50 dias"

He usado un pseudocódigo inventado, en lugar de Psint
A la hora de crear un programa, sobre todo cuando el progama es muy complicado como puede ser un videojuego, un equipo de analistas y diseñadores se encargan de documentar detalladamente como funcionara el programa. Luego serán los programadores los que se encarguen de traducir ese pseudocodigo a cualquier lenguaje de programación, por ejemplo, te presento el programa en javascript:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximun-scale=1, minimun-scale=1">
   
    <title>¡Working with JavaScript!</title>
  </head>
  <body>
    <script>

      //  ¿Qué hace la función?
      //    Retorna cuantos días aguantará la caravana de Homer con el combustible especificado
      //    y segun unos criterios de consumo internos.
      //
      //  ¿Cúales son los parametros de entrada?
      //     1) litrosActuales: Número real. Cantidad de litros restantes de la caravana. Puede tener un rango de 0..X (desconocido)
      //
      function calcularDiasRestantes(litrosActuales){
        var dias = 1;
        litrosActuales -= 3.5;
       
        // La comprobación al bucle prohibe la entrada si el combustible ni siquiera aguanta para un día
        while(litrosActuales > 0){
          // Aumentamos en 1 la cantidad de días que aguanta la caravana
          dias++;
         
          // Restamos el combustible correspondiente dependiendo del día
          if(dias % 3 == 0) litrosActuales -= 5;
          else litrosActuales -= 3.5;
        }
       
        return dias-1;
      }
     
      if(calcularDiasRestantes(200) >= 50){
        document.write('La caravana de Homer aguantará al menos 50 dias con 200 litros de combustible.');
      }else{
        document.write('La caravana de Homer necesita más de 200 litros para aguantar al menos 50 dias.');
      }
    </script>
  </body>
</html>

Este programa muestra por pantalla lo siguiente:
La caravana de Homer aguantará al menos 50 dias con 200 litros de combustible.

Así que si quieres que funcione en Psint, tendrás que traducir el algoritmo para que Psint lo pueda entender. Porque el pseudocodigo que he utilizado yo, es completamente inventado. (Esta basado en C++)

Pregunta numero 2: empiezo contestando la segunda
La operación (dias % 3) da como resultado el resto, o residuo de la división de la variable dias entre 3.

7 /   3 = 2  (resultado de la división sin decimales)
7 % 3  = 1 (resto de la división)
2 * 3 + 1 = 7

En el número 7, cabe el número 3 dos veces y nos falta 1 para llegar a 7.

¿Por qué hago esto? Porque con esa operación cada tres días (los múltiplos de 3), el resultado del MODULO dara 0
Así que si (dias % 3) == 0, nos encontramos en el caso de que ese día Homer gasta 5 litros en lugar de 3.5

¿Entendido? :)

Ahora respecto a la pregunta número 1
Las únicas variables que utiliza la función son las siguientes:
    litrosActuales -> llega como parámetro de entrada
    dias                  -> se crea como variable auxiliar dentro de la función.

Esto:
Código: [Seleccionar]
Dia 0: -3.5l
Dia 1: -3.5l
Dia 2: -3.5l  --> Este es el tercer día y deberían de haberse restado 5 litros.
Dia 3: -5l

No son variables. Como sabrás mi función va restando litros a la variable litrosActuales hasta que esta este por debajo de los 0 litros.

Lo que has citado es una explicación de por que nos viene bien que la variable dias empieze en 1, aunque al retornar los días tengamos que restar 1.

Suponiendo que el combustible que tiene la caravana aguanta al menos 4 días, lo que debería pasar es esto:

Código: [Seleccionar]
litrosActuales -= 3.5
litrosActuales -= 3.5
litrosActuales -= 5
litrosActuales -= 3.5

Pero con la función que hemos creado, la comprobación dias % 3 == 0, mostrará lo siguiente en caso de que la variable dias empiece por 0:

Código: [Seleccionar]
litrosActuales -= 3.5 (dias = 0)
litrosActuales -= 3.5 (dias = 1) -> 1 % 3 == 0 // FALSO
litrosActuales -= 3.5 (dias = 2) -> 2 % 3 == 0 // FALSO
litrosActuales -= 5 (dias = 3) -> 3 % 3 == 0 // VERDADERO (Pero es el 4º dia)

...
¡Se que es muy extenso! Pero es que no se me ocurre mejor manera de explicarlo todo para que lo puedas entender con facilidad. Mucha suerte con eso y si consigues hacer el programa en Psint compartelo por aquí, a ver como te ha quedado.

Salu2
« Última modificación: 12 de Febrero 2016, 21:08 por candidatopardo »

blackburro

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
la verdad si estoy confundido. ya que no puedo hacer el algoritmo
que comandos uso en pseint, ya que intente con mientras y repetir pero nada.
y no se como hacer (dias % 3 == 0)

candidatopardo

  • Visitante
Voy a intentar estudiar en un momento el Pseint para ver si puedo traducir el diseño a PSeInt.

Si lo consigo, te enviaré un mensaje privado por el foro para avisarte de que he modificado este mensaje.

Dame un ratito.... Vale! Te lo he traducido a Pseint. A ver que te parece:

Código: [Seleccionar]
SubProceso dias <- calcularDiasRestantes ( litrosActuales )
// VARIABLES LOCALES
dias <- 1

litrosActuales <- litrosActuales - 3.5

Mientras litrosActuales > 0 Hacer
dias <- dias + 1
Si dias MOD 3 = 0
Entonces
litrosActuales <- litrosActuales - 5
Sino
litrosActuales <- litrosActuales - 3.5
FinSi
Fin Mientras

dias <- dias-1
Fin SubProceso


Proceso funcionPrincipal
Si calcularDiasRestantes(200) >= 50
Entonces
Escribir "La caravana de Homer aguantará al menos 50 dias con 200 litros de combustible."
Sino
Escribir "La caravana de Homer necesita más de 200 litros para aguantar al menos 50 dias."

FinSi
Fin Proceso
« Última modificación: 12 de Febrero 2016, 22:33 por candidatopardo »

blackburro

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
que tal el codigo que me mandaste lo pego en pseint
pero solo indica ejecucion iniciada- ejecucion finalizada.
te mando uno que hice solo que en este tengo que introducirle el consumo del dia de uno por uno haste que se ttermina el combustible.
lo guarde como c++.
en este caso yo solo le indico la capacidad del tanque.
pero quisiera que automaticamente selecionara el consumo dependiendo del dia.
saludos

candidatopardo

  • Visitante
Para que el consumo varíe dependiendo de si es cada 3er día debes hacer una comprobación para averiguar en que día estas.

En este caso lo que tu necesitas averiguar, es si el día es un múltiplo de 3, o no. Algo así:

Comprobar(dia es un multiplo de 3)
    Entonces
       restar 5
En caso contrario
    Entonces
        restar 3.5


(dia es un multiplo de 3) esta comprobación se hace de la siguiente manera en PSeInt:
dia MOD 3 = 0

Suerte. PD: He tenido que mejorar el algoritmo porque no me dí cuenta de algo. Lo subo otra vez jjajaja.

« Última modificación: 13 de Febrero 2016, 19:02 por candidatopardo »

 

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".