SoloCodigo

Programación General => Pascal => Mensaje iniciado por: susicarlos4 en Martes 9 de Septiembre de 2008, 18:20

Título: No logro encontrar error
Publicado por: susicarlos4 en Martes 9 de Septiembre de 2008, 18:20
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.
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.
Título: Re: No logro encontrar error
Publicado por: CristhianUNSa en Jueves 23 de Octubre de 2008, 18:19
Creo que debes fijarte bien si el "mensaje" lo pasas por valor o por referencia.

Veo que le asignas un valor a "mensaje" en dos modulos, y en uno lo pasas por valor, pero si no lo pasas por referencia, mensaje queda en otra ubicacion de memoria, y no lo muestra nunca.

En otro modulo tienes el mismo problema

Ese es un error que veo
Título: Re: No logro encontrar error
Publicado por: eternity en Jueves 23 de Octubre de 2008, 21:20
no lo compile, pero me parece que esto
Cita de: "susicarlos4"
procedure Introducir(var Saldo : real; Importe : real);
esta mal y deberia ser asi:

Código: Pascal
  1. procedure Introducir(var Saldo : real; var Importe : real);
  2.  

es decir, hay que pasar por referencia tanto SALDO como IMPORTE

 :good:
Título: Re: No logro encontrar error
Publicado por: eternity en Viernes 24 de Octubre de 2008, 04:57
efectivamente es en esa linea:

Código: Pascal
  1. procedure Introducir(var Saldo : real; var Importe : real);
  2.  

te explico, como estas usando variables globales, y se las estas pasando por parametros a un procedimiento que les carga un valor a las mismas, si lo pasas por valor como lo estabas haciendo con IMPORTE, vos estas ingresando un valor, en una copia en memoria de IMPORTE, no en IMPORTE, al pasar IMPORTE por referencia (con la palabra reservada VAR) estas agregando el valor a la variable misma!

suerte amigo!

 :good: