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