Consulta ejercicio 5

Consulta ejercicio 5

de Joaquín Manrique Machín -
Número de respuestas: 9

Hola, tengo una duda sobre este ejercicio. Adjunto el programa que hice.

No hay errores al compilar pero al ejecutar, luego de ingresar los "datos de la transacción" y escribir la X para finalizar no pasa nada, no termina y ni da el saldo final sino que me permite seguir agregando datos, aunque si vuelvo a escribir me da error. 

Agradecería la ayuda para saber como solucionarlo.

Saludos.

(No se ve pero hay un end. al final)ej5

En respuesta a Joaquín Manrique Machín

Re: Consulta ejercicio 5

de Felipe Miranda Torres De La Llosa -
Hola Joaquín, ¿cómo andas?

En la línea 22 solo tenés que leer solo el monto, pues el tipo ya lo leíste anteriormente. Proba si con eso se soluciona el problema y si no coméntame y lo vemos.

Saludos,
Felipe
En respuesta a Joaquín Manrique Machín

Re: Consulta ejercicio 5

de Jose Gabriel Provera Sabaño -
¡Hola!
Adentro del while debe ir readln(tipots); como dijeron ya y luego del while y antes del writeln('...'); debe ir un readln; que no lea nada para que no quede esperando otra entrada luego de la 'x'
Saludos.
En respuesta a Jose Gabriel Provera Sabaño

Re: Consulta ejercicio 5

de Joaquín Manrique Machín -
Buenas, también probé poner un readln entre el end del while y el último writeln pero sigue sin funcionar.
En respuesta a Joaquín Manrique Machín

Re: Consulta ejercicio 5

de Felipe Miranda Torres De La Llosa -
Joaquín, ¿cómo andas?

Lo pudiste solucionar?

Si no cualquier cosa pasa el código (mejor copiado y pegado que captura), y capturas de los errores que se producen y lo vemos.

Saludos,
Felipe
En respuesta a Felipe Miranda Torres De La Llosa

Re: Consulta ejercicio 5

de Joaquín Manrique Machín -
Buenas, no he podido resolverlo. Lo estuve corrigiendo de muchas maneras pero no funciona correctamente.

Así esta el programa:

PROGRAM saldofinal;

CONST
retiro = 'R';
deposito = 'D';
fin = 'X';
VAR
saldo, montots : REAL;
tipots : CHAR;

BEGIN
writeln ('Indique el saldo inicial.');
read (saldo);
write ('Ingrese el tipo de transaccion realizada ');
write ('(Una "D" para deposito y una "R" para retiro) ');
write ('y el monto de las misma. ');
writeln ('Si no efectua una transaccion ingrese la letra "X".');

read (tipots);
WHILE tipots <> fin DO
BEGIN
read (tipots, montots);
IF tipots = retiro THEN
saldo := saldo - montots
ELSE IF tipots = deposito THEN
saldo := saldo + montots
ELSE writeln ('Tipo de transaccion invalido.');
read (tipots)
END;
writeln ('El saldo final es: ', saldo:1:2)
END.

Lo que ocurre es que luego de escribir las transacciones y la X para finalizar no termina el programa, lo cual es raro porque creo que la expresión booleana del while esta correcta. Si vuelvo a escribir una X o cualquier otra cosa da error. Adjunto captura de la terminal.
En respuesta a Joaquín Manrique Machín

Re: Consulta ejercicio 5

de Felipe Miranda Torres De La Llosa -
Buenas!!!

No sé si es la última versión del código, pero sigue estando el error que te comentaba antes, "read (tipots, montots)" debería ser "readLn(montots)", ya que el tipo se lee antes de entrar al while y al final de cada iteración de forma que inmediatamente después se controle si ingresaron una X, en cuyo caso termino, o si tengo que leer otro monto.

Después me parece que hay un tema con los read o readLn. Cuando lees el saldo deberías hacer readLn(saldo) porque las operaciones las vas a leer de la siguiente línea. Lo mismo te pasa cuando lees el monto, ya que después de un monto la siguiente operación va a venir en la siguiente línea.

Lo estuve probando y con esos cambios debería funcionar.

Saludos,
Felipe