Exercice : Transactions bancaires#
Nous nous occupons de la gestion de comptes bancaires. Il faut nous
assurer qu’aucune somme d’argent n’est créée ou perdue dans les
virements et que les comptes restent toujours au-dessus du solde
autorisé. Nous disposons des comptes tels que définis dans le fichier
banque.cpp fourni.
- Définissez la fonction suivante : - bool virement(int compte_orig, int compte_dest, int somme); - qui verse si possible (c’est-à-dire si le versement ne rend pas le solde de - compte_orignégatif) un montant d’argent égal à- sommedepuis le- compte_origvers le- compte_dest. De plus, cette fonction doit renvoyer- truesi le versement a été effectué et renvoie- falsesinon.- BEGIN SOLUTION - bool virement(int compte_orig, int compte_dest, int somme) { if (somme <= 0) return false; if (compte_orig - somme < 0) return false; compte_orig -= somme; compte_dest += somme; return true; } - END SOLUTION 
- Lisez le code du programme principal puis exécutez le programme. Vérifiez alors les valeurs des comptes qui ont été passées en paramètres de la fonction - virement. Vous constaterez que ces valeurs sont inchangées, alors qu’un virement devait normalement les avoir changées. Ceci est dû au fait que les paramètres ont été passés par valeur à la fonction.
- Pour résoudre le problème constaté à la question précédente, nous allons transformer la fonction en procédure et passer les paramètres par référence. Ouvrez maintenant le fichier - banque_ref.cppet définissez maintenant la fonction- virementcomme une procédure :- void virement(int &compte_orig, int &compte_dest, int somme, bool &virement_ok) - Cette procédure doit mettre - truedans le paramètre- virement_oksi le versement a été effectué et- falsesinon.- BEGIN SOLUTION - void virement(int &compte_orig, int &compte_dest, int somme, bool &virement_ok) { if (somme <= 0 || compte_orig - somme < 0) { virement_ok = false; } else { virement_ok = true; compte_orig -= somme; compte_dest += somme; } } - END SOLUTION 
- Appelez enfin cette procédure dans le programme - mainen affichant «Virement effectué» ou «Virement impossible» selon le cas. Vérifier que, cette fois, les valeurs des comptes sont bien changées.- BEGIN SOLUTION - bool v; etat_comptes(); virement(compte1, compte2, 100, v); etat_comptes(); if (v) cout << "Virement effectué !" << endl; else cout << "Virement impossible !"<< endl; - END SOLUTION