#include <stdio.h>
#include <assert.h>
typedef struct { double saldo;
} CuentaBancaria;
// Función para verificar el invariante
void verificarInvariante(CuentaBancaria *cuenta) { assert(cuenta->saldo >= 0); // Invariante: saldo >= 0
}
// Constructor
void inicializarCuenta(CuentaBancaria *cuenta, double saldoInicial) { cuenta->saldo = saldoInicial;
verificarInvariante(cuenta); // Verificar invariantes tras inicialización
}
// Método para depositar
void depositar(CuentaBancaria *cuenta, double cantidad) { // Precondición: cantidad > 0
assert(cantidad > 0);
// Antes de modificar, verificar invariantes
verificarInvariante(cuenta);
cuenta->saldo += cantidad;
// Después de modificar, verificar invariantes
verificarInvariante(cuenta);
}
// Método para retirar
void retirar(CuentaBancaria *cuenta, double cantidad) { // Precondición: cantidad > 0
assert(cantidad > 0);
// Precondición: saldo >= cantidad
assert(cuenta->saldo >= cantidad);
// Verificar invariantes antes
verificarInvariante(cuenta);
cuenta->saldo -= cantidad;
// Verificar invariantes después
verificarInvariante(cuenta);
}
int main() { CuentaBancaria miCuenta;
inicializarCuenta(&miCuenta, 100);
depositar(&miCuenta, 50);
retirar(&miCuenta, 30);
printf("Saldo final: %.2f\n", miCuenta.saldo); return 0;
}