[ Foro de Pascal ]
Novato, ayuda. Programa sencillo
Hola,
Ante todo Gracias Anticipadas. No logro conseguir que funcione esta aplicacion. Concretamente no realiza una sencilla operacion de Resta. Me he pasado todo el dia y no encuentro el error. Es como si el procedimiento Test_Operacion no procesara el procedimiento Nuevo_Saldo. Lenguaje de programacion Pascal. Utilizo Free Pascal IDE. Un saludo. Gracias Nacho Cabanes por tu generosidad.
Codigo:
program CuentaBanco;
uses crt;
var
SaldoActual, ImporteCheque : Real;
Mensaje : string;
procedure Introducir(var Saldo : real; Importe : real);
begin
Write ('Introduce el Saldo actual de la cuenta: ');
Readln (Saldo);
Write ('Introduce Importe del Cheque: ');
Readln (Importe);
end;
procedure Fondos_Insuficientes(var Mensaje : string);
begin
Mensaje := 'Fondos Insuficientes'
end;
procedure Nuevo_Saldo(var Saldo : real; Importe : real; Mensaje : string);
begin
Mensaje := 'Cantidad descontada en cuenta';
Saldo := Saldo - Importe
end;
procedure Test_Operacion(var Saldo : real; Importe : real; Mensaje : string);
begin
if Importe < Saldo Then
Nuevo_Saldo(Saldo, Importe, Mensaje)
else
Fondos_Insuficientes(Mensaje)
end;
procedure Visualizar(var Saldo : real; Mensaje : string);
begin
Write ('Saldo actual = ',Saldo:4:2,' ',Mensaje);
end;
BEGIN (* programa principal *)
ClrScr;
Introducir(SaldoActual, ImporteCheque);
Test_Operacion(SaldoActual, ImporteCheque, Mensaje);
Visualizar(SaldoActual, Mensaje);
Writeln;
Readln
END.
Muy buenas,
El programa está muy bien. Pero no te funciona por un simple detalle.
En la cabecera de introducir del procedimiento introducir:
procedure Introducir(var Saldo : real; Importe : real);
No estás pasando la variable Importe por referencia, ésto es con el VAR delante, por tanto al terminar de ejecutar el procedimiento, el valor original de Importe no se ha modificado. La razón de por qué no reste nada es que Pascal inicializa las variables numéricas NO inicializadas, a 0. Al no modificarse, Resta 0. Eso te pasa.
Saludos, espero haberte servido de gran ayuda.
David.
mira solo tenes que ver eso de pasar los valores por referencia en los parametros de los procedimientos,cuando queres que los combios hechos en tus procedimientos repercutan en el programa principal solo le tenes que agregar la palabra var antes de tus parametros.aca va tu programa modificado.espero te sea de ayuda!
program CuentaBanco;
uses crt;
var
SaldoActual, ImporteCheque : Real;
Mensaje : string;
procedure Introducir(var Saldo : real;var Importe : real);
begin
Write ('Introduce el Saldo actual de la cuenta: ');
Readln (Saldo);
Write ('Introduce Importe del Cheque: ');
Readln (Importe);
end;
procedure Fondos_Insuficientes(var Mensaje : string);
begin
Mensaje := 'Fondos Insuficientes'
end;
procedure Nuevo_Saldo(var Saldo : real; var Importe : real;var Mensaje : string);
begin
Mensaje := 'Cantidad descontada en cuenta';
Saldo := Saldo - Importe
end;
procedure Test_Operacion(var Saldo : real; Importe : real; var Mensaje : string);
begin
if Importe < Saldo Then
Nuevo_Saldo(Saldo, Importe, Mensaje)
else
Fondos_Insuficientes(Mensaje)
end;
procedure Visualizar(var Saldo : real; Mensaje : string);
begin
Write ('Saldo actual = ',Saldo:4:2,' ',Mensaje);
end;
BEGIN (* programa principal *)
ClrScr;
Introducir(SaldoActual, ImporteCheque);
Test_Operacion(SaldoActual, ImporteCheque, Mensaje);
Visualizar(SaldoActual, Mensaje);
Writeln;
Readln
END.
Solucionado. Gracias David.
Muy agradecido. Un saludo. Gracias Alfredo.
No hay de qué. Para eso estamos
Por mi parte, nada que objetar a las respuestas que te han dado, las veo perfectas.
Eso sí, en tu planteamiento sí corregiría una cosa: un procedimiento como este que se limita a modificar un valor y devolverlo:
procedure Fondos_Insuficientes(var Mensaje : string);
begin
Mensaje := 'Fondos Insuficientes'
end;
suena "mal". Conceptualmente parece más razonable considerar que si devuelve un valor, se trata de una función:
function Fondos_Insuficientes: string
y entonces no llamarías con
Fondos_Insuficientes(texto);
sino con
texto := Fondos_Insuficientes;
¿No te suena "más natural"? Debería serlo incluso a la vista: lo segundo se podría leer "el texto es el de fondos-insuficientes" mientras que tu planteamiento habría que leerlo con algo como "fondos-insuficienteame este texto". Raro, raro, raro... ;-)
(Sólo como detalle para mejorar la legibilidad, nada grave).
De acuerdo. Gracias
(No se puede continuar esta discusión
porque tiene más de dos meses de antigüedad.
Si tienes dudas parecidas, abre un nuevo hilo.)