Ayuda con este problema?

Iniciado por TrashAmbishion, 18 Febrero 2021, 06:24 AM

0 Miembros y 1 Visitante están viendo este tema.

TrashAmbishion

Holas a todos,

A ver si me ayudan a comprender este problemilla..

-----------------------------------------------------------------------------

Dos vehículos A y B viajan por una pista que tiene una parte pedregosa entre los 20 y 40Km.

Los vehículos parten de los 0Km y se sabe que, en terreno pedregoso, el VehículoA viaja al 80% de su velocidad normal y el VehículoB al 75%.

Hay que desarrollar un programa que realice lo siguiente:

- Solicite al usuario que ingrese las velocidades de los 2 vehículos en KM/h.
- Solicitar el número de horas transcurridas.
- Mostrar distancia recorrida y sus posiciones.


Bueno la distancia se calcula hasta donde se y investigue, velocidad por tiempo.

Mi duda es en el terreno pedregoso que como bien dice que es entre 20 y 40KM, imagino que debo calcular el porciento de cada uno por 20 o no?

Y estos valores debería restarlos a la distancia final siempre que sea mayor de 20 o no?

----------------------------------------------------------------------------------

Saludos y gracias cualquier ayuda!!

Serapis

#1
Primero conforme a ka velocidad que lleva cada uno, debes determinar cuánto tardan en llegar al terreno pedregoso. . .
Luego si la velocidad es suficiente y el tiempo, y por tanto ha logrado entrar en dicho terreno,  debes aplicar el descuento de velocidad a cada uno.
Luego calcular cuánto tiempo tardará cada uno en cruzar ese terreno pedregoso.
Si el tiempo dado es aun mayor, es decir, les ha dado tiempo a cruzar ese terreno, de nuevo vuelven a tener el 100% de velocidad,  ahora con el tiempo que resta hay que calcular una tercera distancia. . .
Finalmente donde lograron cada uno llegar en ese tiempo, total que pediste de entrada es la respuesta pedida.

Se pueden dar 3 casos (para cada vehículo):
- Si el tiempo es muy corto, no llega al terreno pedregoso.
- Que el tiempo, dé para llegar al terreno pedregoso, pero no para terminar de cruzarlo.
- Que el tiempo alcance para cruzar el terreno pedregoso y más...

Tras cada calculo, debes comprobar si resta tiempo.
Una sola función, puede calcular con 3 parámetros,  tiempo, velocidad, y distancia, al regreso de la función se evalúa si resta tiempo, si es asi, se vuelve a invocar actualizando velocidad y pasando a la función los nuevos valores de los parámetros.... en el último caso, si sobra tiempo, la distancia no está acotada, luego pasa '- 1', con cada retorno de la funcion suma la distancia devuelta... (en el caso 1 y 2, si el tiempo se consumió ante de la distancia,  el valor de distancia devuelto, no sera la entrada,  pero si sobra tiempo en cada caso (1 y 2), la distancia a devolver es la misma entrada... en el caso 3, es hasta agotar el tiempo, la distancia ahí se entiende infinita (no se agotará, si no el tiempo).

Es muy sencillo, pero te puede resultar un enredo...

TrashAmbishion

Hola,

Gracias por la pronta respuesta.

Entonces en resumen debo calcular los 3 tiempos.

- Antes de llegar al camino pedregoso.
- El camino pedregoso
- Cuando haya pasado el camino pedregoso.

Pero para calcular esto primero debo saber si el tiempo dado es suficiente o no?

Imagino esto imagino que lo haría sacando un total para después aplicar las correspondientes correcciones.

D=v*t (Kilómetros recorridos)

Serapis

#3
Exacto.

En general, primero tienes un problema en prosa, que luego uno debe darle cierto orden (también en prosa).
Un siguiente examen debería permitirte dividir el problema en varios pasos, o subproblemas y de ahí entonces, luego resulta más fácil estructurarlo en pseudocodigo.
El pseudocódigo nunca es definitivo, es la primera aproximación al código final... pero con el pseudocódigo ya puedes ver que elementos de programación vas a necesitar (por supuesto siempre hay alternativas, así que de momento no importa en exceso la eficiencia, una vez que el código funciona y hace correctamente lo que se espera, un último paso es optimizarlo, sea para reducir código, hacerlo más eficiente o inclumo más claro. Si el objetivo del problema no es estrictamente para tí, suele documentarse el código para que el receptor 'entienda', algo oscuro o por qué elegiste tal cosa y no tal otra, etc...).

Te doy esa primera fase en pseudocódigo ( el mensaje anterior es la prosa de descomponer el problema de frma cuasi ordenada (no importa ser estricto, mientras se entienda, a cada fase se corrige 'el defecto' que se localizare).


// permite calcular para 1 o x vehiculos (1 de cada vez), la distancia total rcorrida en el plazo que se le ha dado.

[code] funcion Principal
    bucle por cada vehiculo   
        pedir frenada      // introducir -1 para terminar (por ejemplo).
        distanciaRecorrida = RecorridoVehiculo(frenada)
        imprimir distanciarecorrida
    repetir
fun funcion


entero = funcion RecorridoVehiculo(frenada)
  distancia1= X //km.
  distancia2 = y //km.
  distancia3 = -1 //km.
  distTotal = 0
  Pedir tiempo y ¿velocidad?

  Si tiempo > 0
      distTotal += Recorrer(tiempo, velocidad, distancia1)
  fin si
  Si tiempo > 0
      //reducir velocidad con 'frenada' // del vehiculo actual, frenada se recibe como parametro, es particular a cada vehículo
      distTotal += Recorrer(tiempo, velocidad - frenada, distancia2)
  fin si
  Si tiempo > 0
      //aumentar velocidad con 'frenada' // del vehiculo actual, frenada se recibe como parametro, es particular a cada vehículo
      distTotal += Recorrer(tiempo, velocidad, distancia3)  // recuerda distancia3 = -1
  fin si
 
  devolver distTotal
fun funcion[/code]

Esta funcion: mezcla de prosa y pseudocodigo... termina de pasarlo tu a pseucodigo y cuando quede claro, a código.
(tiempo se recibe por referencia, para hacer una resta y que dicho valor sea devuelto)

entero = funcion Recorrer(tiempo, velocidad, distancia)
   tiempoTotal, tmp

   (ej: supongamos recibido tiempo 2 horas, velocidad 20 k/h, distancia  60 km)
   Si distancia está acotada  (mayor que 0)    
       calcular el tiempoTotal para recorrer toda la distancia a la velocidad establecida
       (ej: tmpTotal =  (60km/ (20k/h)) = 3horas.   (km, con km se anulan y quedan horas))
      si tiempoTotal es igual que tiempo       // es decir si tiempo fuera 3horas.
           tiempo = 0
           devolver distancia                          // (ej: distancia =  (tiempo * velocidad) = (3h * 20km/h) = 60km ))
      si tiempototal es mayor que el tiempo   // distancia parcial recorrida consumiendo todo el tiempo (sobra carretera)
            tiempo =  0                                 // (ej: 2h - 3h) = -1h. (nos faltó una hora para recorrer todo.)
            //devolver proporcion de la distancia recorrida
            devolver (tiempo * velocidad)        // (ej: distancia = (2h. * 20km/h) = 40km  (horas con horas se anulan y quedan km.))            
      sino       // distancia agotada sin consumir el tiempo.
           //(ej: supongamos tiempo 4h, velocidad 20km/h, distancia 60km), luego tiempoTotal = (60/20) 3 (que es emnor que tiempo)
           
            tiempo =  (tiempo - tiempoTotal)
            devolver distancia  
   si no   // distancia ilimitada representada por -1, luego toda la distancia que dé de sí.
          distancia = (tiempo * velocidad)
          tiempo = 0
          devolver distancia
   fin si
fin funcion


Y eso sería más o menos, a partir de ahí, entiende el problema, haz que funciones, completa el pseudocódigo, deja o cambia comentarios, luego pásalo a código, prueba y corrige posibles errores... cuando todo funcione, simplifica (hay redundancia en la función recorrer, a veces es adecuada para simplificar entender el proceso), optimiza el código, elimina comentarios superfluos y deja los imprescindibles para entenderlo, etc, etc...
Una vez completo, verás que el código es realmente muy escueto...



p.d.: nota que no recuerdo (y no me apetece reler tu primer mensaje), si los datos (que dabas eran de ejemplo o si) se debían pedir enteramente o solo el tiempo o también, la velocidad, y/o las 2 primeras distancias, etc... así el pseudocódigo:

  distancia1= X //km.
  distancia2 = y //km.
  distancia3 = -1 //km.
  distTotal = 0
  Pedir tiempo y ¿velocidad?

Debe serle suministrado un valor inicial para las distancia1 y distancia2, o si debe solicitarse también al usuario... lo mismo con velocidad... se pueden pedir aquí o en el bucle de la funcion principal (y pasar dichos valores como parámetros a la función invocada)....