Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-05-2018
nico.white nico.white is offline
Registrado
NULL
 
Registrado: abr 2018
Posts: 9
Poder: 0
nico.white Va por buen camino
Problemas con bucles do/while

Hola colegas, buenos dias soy bastante nuevo en el tema y no logro encontrar el error en esto.

intente de todo, y no logro darme cuenta del error

el enunciado dice así.
Ingreso la cantidad de km a recorrer y la velocidad crucero.
si la velocidad crucero del auto es menor a 110 km/h
a los 50 litros de combustible con los que empieza el auto se le restaran 0,33litros cada 5 km.
si es mayor a 110 se le restara 0,5 litros cada 5 km
si me quedo sin combustible tengo q mostrar la cantidad de km que recorri

aca va mí código

Variabes:
Código Delphi [-]
 kmar:real;
    velc:integer;
    fuel:real;
    kmfinal:real;  

fuel:=50;
velc:=StrToInt(vel_C.caption);
kmar:=strToInt(km.caption);
if (velc<=110) then
     begin
        begin
          while (fuel>0)do

          (fuel-0.33)
        kmfinal=kmfinal-5;
        end;
     end;         

showmessage ('km recorridos'(floattostring(kmfinal));
end.
Responder Con Cita
  #2  
Antiguo 10-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Código Delphi [-]
(fuel-0.33)
Esa línea no hace nada, ¿no?
Responder Con Cita
  #3  
Antiguo 10-05-2018
nico.white nico.white is offline
Registrado
NULL
 
Registrado: abr 2018
Posts: 9
Poder: 0
nico.white Va por buen camino
esa linea resta 0,33 litros a los litros iniciales que son 50 litros.
Responder Con Cita
  #4  
Antiguo 10-05-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Esboza la idea en papel y lápiz tratando de seguir paso a paso lo que te solicitan,
Código:
PROCEDIMIENTO consumo 

VARIABLES
  litros, kilometros, velocidad, consumo : FLOTANTE

COMENZAR

  litros <- 50
  leer (kilometros, velocidad)

  si velocidad < 110 entonces
    consumo <- kilometros / 5 * 0.33
  si no 
    consumo <- kilometros / 5 * 0.50

  escribir ("Combustible consumido:", consumo)
  escribir ("Combustible restante :", litros - consumo)

FIN
luego no es tán dificil codificarlo en Pascal.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 10-05-2018
nico.white nico.white is offline
Registrado
NULL
 
Registrado: abr 2018
Posts: 9
Poder: 0
nico.white Va por buen camino
El usuario deberá indicar cuántos km recorrerá.
cada 5 km (a una velocidad constante,llamémosla crucero, menor a 110km/h) que el simulador reduzca 0,33l (l=litro) de
combustible.
Si es mayor (pero constante) que 110km/h, el gasto de combustible debería ser
0,5l por cada 5km.
El nivel de combustible deberá ser full (lleno), con 50l al iniciar el viaje.
necesario que se controle si el tanque alcanza para realizar el viaje propuesto
(y mediante una ventana emergente: indicar tal situación).

el ejercicio debe resolverse con for, while, o repeat a eleccion

f= fuel
fuel =contador

Código Delphi [-]
  f:=50;
  kmfinal:=0;
  velc:=StrToInt(vel_C.caption);
  kmar:=strToInt(km.caption);
      if (velc <=110) then
      begin
      for fuel:=50 downto 0
        do
        repeat
        f:=f-0.33;
        resu:=kmar-5;
      until f=0;
         kmsr.text:= floatToStr(resu);
           showmessage('sin combustible');
          showmessage(floattostr(f));
          end
          else if (velc>110) then
          begin
          for fuel:=50 downto 0
            do
            repeat
            f:=f-0.5;
            resu:=kmar-5;
             until f=0;
     kmsr.text:= floatToStr(resu);
           showmessage('sin combustible');
          showmessage(floattostr(f));


end;
          end;


entra en un bucle infinito.
me doy por vencido (por hoy)

agradezco su ayuda

Última edición por nico.white fecha: 10-05-2018 a las 08:31:52. Razón: falto aclarar conceptos
Responder Con Cita
  #6  
Antiguo 10-05-2018
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Usar el operador de igualdad con flotantes no es muy buena idea. Ten en cuenta que los ordenadores son pésimos haciendo cálculos con fracciones cuyo denominador no es potencia de dos; un ordenador es incapaz de representar con exactitud el valor 0'1, por ejemplo, y menos aún 49'77. Deberías cambiar el "UNTIL f=0" por "UNTIL f <= 0", que es la única manera de asegurarte.

Por otro lado, cuida la indentación; es muy difícil seguir el código tal como tú lo escribes. Te lo reformateo para que veas la diferencia:
Código Delphi [-]
  f := 50;
  kmfinal := 0;
  velc := StrToInt (vel_C.Caption);
  kmar := StrToInt (km.Caption);
  IF velc <= 110 THEN
  BEGIN
    FOR fuel := 50 DOWNTO 0 DO
      REPEAT
        f := f - 0.33;
        resu := kmar - 5
      UNTIL f <= 0; { <-- ¿Flotante? }
    kmsr.Text := FloatToStr (resu);
    ShowMessage ('sin combustible');
    ShowMessage (FloatToStr (f))
  END
  ELSE { IF velc > 110 THEN <-- Este IF no es necesario. }
  BEGIN
    FOR fuel := 50 DOWNTO 0 DO
      REPEAT
        f := f - 0.5;
        resu := kmar - 5
      UNTIL f <= 0; { <-- ¿Flotante? }
    kmsr.Text := FloatToStr (resu);
    ShowMessage ('sin combustible');
    ShowMessage (floattostr (f))
  END
END;
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 10-05-2018 a las 12:36:36.
Responder Con Cita
  #7  
Antiguo 10-05-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por nico.white Ver Mensaje
El usuario deberá indicar cuántos km recorrerá.
cada 5 km
(a una velocidad constante,llamémosla crucero, menor a 110km/h) que el simulador reduzca 0,33l (l=litro) de
combustible.
...
¡Ha!, pero ese es un planteo muy diferente al que hiciste en el primer mensaje...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 10-05-2018
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Código Delphi [-](fuel-0.33)

Esa línea no hace nada, ¿no?

Supongo que a lo que se refería el compañero Casimiro es que debería ser

Código Delphi [-]
fuel:=fuel-0.33

para que vaya acumulandose la resta en la misma variable.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #9  
Antiguo 10-05-2018
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
Entiendo que el ejercicio es para que practiques los bucles, para resolver el problema indicado realmente no haría falta ninguno. Fijate en que en el enunciado se te fuerza a utilizar una entre 3 posibilidades (for,while,repeat). Solo necesitas utilizar uno, aunque para familiarizarte con ellos creo que estaría bien que resolvieses el problema de las tres formas posibles, una con cada bucle.

Creo que el problema que tienes es que aún no los entiendes bien. Temo que cualquier pista que podamos darte te desvie del proposito del problema que es que te esfuerces en encontrar una solución y aprendas en el proceso. Se ve que te esfuerzas en aprender por como has planteado la pregunta y porque has puesto lo que llevas averiguado. Intentalo un poco más, te recomiendo de veras que utilices un solo bucle en el proceso, el que tu quieras, pero solo 1.

Una cosilla mas, si ves que hay partes del código que son iguales y repites 2 veces, intenta cambiar el código para escribirlas una sola vez.

De veras que lo mas dificil y divertido de esto de programar es pelearse con un problema hasta encontrarle la solución. Por aquí hay unos cuantos hilos que lo demuestran.
Responder Con Cita
  #10  
Antiguo 10-05-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

De la última consulta entiendo que el combustible incial es constante (50) y debes ingresar los kilometros que pretendes lograr así como la velocidad a que conduciras.
El algorítmo debe ir mostrando el kilometraje realizado y el combustible restante (o el consumido para el caso es lo mismo) y de terminarse el combustible antes de realizar el kilometraje pretendido debe avisarlo con un mensaje. ¿ Es correcto ?

Claro está que conociendo el consumo a la velocidad ingresada sabemos a priori si podrá realizar el kilometraje pretendido, de todos modos a modo de guía un ejemplo en pseudocódigo:
Código:
PROCEDIMIENTO consumo 

VARIABLES
  litros, velocidad, consumo: FLOTANTE
  kilometros, aux: ENTERO

COMENZAR
  litros <- 50
  aux    <- 0;

  leer (kilometros, velocidad)

  si velocidad < 110 entonces
    consumo = 0.33
  si no
    consumo = 0.5
 
  mientras ( aux <= kilometros ) ^ ( litros >= 0 ) hacer
  comenzar
    si litros < consumo entonces
      escribir("¡ Tanque vacío ! recorrio:", aux, "km")
    si no
      escribir("km:", aux, "lt:", litros)  { km y litros restantes }
    aux = aux + 5;
    litros = litros - consumo;
  fin  

FIN
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 10-05-2018 a las 18:11:28.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda con Bucles Olenkaguilar OOP 1 05-04-2014 02:29:26
bucles en sql chass SQL 2 15-10-2008 20:14:39
Sobre los bucles While y Do While Mya Varios 8 25-08-2008 20:17:01
bucles en SQL servicomp SQL 3 11-06-2006 04:07:21
bucles anidados con PHP __cadetill PHP 8 21-07-2003 03:12:28


La franja horaria es GMT +2. Ahora son las 21:47:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi