Programul de denominare a bancnotelor și monedelor (Revizuirea codului, C++, Număr Întreg, Finanțe)

Alex a intrebat.

În prezent sunt la un curs de introducere în programare C++. Avem o temă în care trebuie să convertim o sumă în dolari și cenți, să zicem 192,89$, în bancnote și monede folosind cea mai mică cantitate din ambele. Mai jos este programul pe care l-am scris.

#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int main()
{
    double TotalAmount;
    int DollarsConversion;
    int Change;     
    int Dollars;     
    int Hundreds = 0;
    int Fifties = 0;
    int Twenties = 0;
    int Tens = 0;
    int Fives = 0;
    int Ones = 0;
    int CentsConversion;    
    int Cents;
    int Quarters = 0;
    int Dimes = 0;
    int Nickels = 0;
    int Pennies = 0;

    cout << "Please enter the amount to convert: $";
    cin >> TotalAmount;

    //Dollars Calculation.
    DollarsConversion = TotalAmount * 100;
    Hundreds = DollarsConversion / 10000;
    Change = DollarsConversion % 10000;
    Fifties = Change / 5000;
    Change %= 5000;
    Twenties = Change / 2000;
    Change %= 2000;
    Tens = Change / 1000;
    Change %= 1000;
    Fives = Change / 500;
    Change %= 500;
    Ones = Change / 100;
    Change %= 100;

    //Resets the Stack to calculate for the cents.
    Dollars = TotalAmount;   
    CentsConversion = TotalAmount * 1000;   
    Dollars *= 1000;    
    Cents = CentsConversion - Dollars;

    //Cents Calculation.
    Quarters = Cents / 250;
    Change = Cents % 250;
    Dimes = Change / 100;
    Change %= 100;
    Nickels = Change / 50;
    Change %= 50;
    Pennies = Change / 10;
    Change %= 10;

    cout << "
Number of Hundred Dollar Bills: " << Hundreds << endl;
    cout << "Number of Fifty Dollar Bills: " << Fifties << endl;
    cout << "Number of Twenty Dollar Bills: " << Twenties << endl;
    cout << "Number of Ten Dollar Bills: " << Tens << endl;
    cout << "Number of Five Dollar Bills: " << Fives << endl;
    cout << "Number of One Dollar Bills: " << Ones << endl;

    cout << "
Number of Quarters: " << Quarters << endl;
    cout << "Number of Dimes: " << Dimes << endl;
    cout << "Number of Nickels: " << Nickels << endl;
    cout << "Number of Pennies: " << Pennies << endl;

    return 0;
}

Comentarii

  • Double-urile nu rețin o valoare cu exactitate. Convertiți numărul într-un număr întreg (numărul de cenți). Apoi folosiți acest lucru pentru a face calculele.  > Por Martin York.
  • Nu uitați să folosiți funcția % operator. Acesta vă va simplifica considerabil codul.-  > Por Martin York.
  • Scuze, Identificatorul Pennies a fost inițializat la int, nu la float în programul meu. În cele din urmă am reușit să fac codul meu să funcționeze corect. Acesta trunchia numerele întregi CentConversion și Dollar. Am reușit să găsesc o soluție pentru a reduce divizorul la 1000, în loc de 10000. Apoi, am eliminat diviziunea din formula Cents și le-am făcut doar să se scadă una pe cealaltă. Apoi am schimbat cuantele fiecăruia dintre identificatorii de schimbare pentru a fi de 10 ori mai mari decât erau. Totul pare să funcționeze corect acum! Mulțumesc pentru ajutor. Am editat codul pentru a reflecta acest lucru, astfel încât, dacă mai are cineva această problemă, să se poată referi la codarea mea corectată.  > Por Alex.
  • Mă bucur că ai reușit să funcționeze. Un truc pe care l-am văzut deseori implică utilizarea floor() sau ceil() – puteți ghici singuri cum.  > Por mckenzm.
1 răspunsuri
200_succes

Aveți mult cod copy-and-paste, în care singurele lucruri care variază sunt numele variabilei, denumirea și descrierea textuală. Puteți generaliza logica.

#include <iostream>

struct Denomination {
    const int cents;
    const char *description;
};

const Denomination DENOMINATIONS[] = {
    { 10000, "Hundred-Dollar Bills" },
    {  5000, "Fifty-Dollar Bills" },
    {  2000, "Twenty-Dollar Bills" },
    {  1000, "Ten-Dollar Bills" },
    {   500, "Five-Dollar Bills" },
    {   100, "One-Dollar Bills" },
    {    25, "Quarters" },
    {    10, "Dimes" },
    {     5, "Nickels" },
    {     1, "Pennies" }
};

int main() {
    double totalAmount;
    std::cout << "Please enter the amount to convert: $";
    std::cin >> totalAmount;
    std::cout << '
';

    int cents = 100 * totalAmount;
    for (int i = 0; i < sizeof(DENOMINATIONS) / sizeof(DENOMINATIONS[0]); ++i) {
        std::cout << "Number of " << DENOMINATIONS[i].description
                  << ": " << (cents / DENOMINATIONS[i].cents) << '
';
        cents %= DENOMINATIONS[i].cents;
    }
}

De asemenea, rețineți:

  • O convenție oarecum comună este de a folosi această NamingConvention pentru tipuri, acest namingConvention pentru denumirile variabilelor, iar această NAMING_CONVENTION pentru constante.
  • DollarsConversion are un nume greșit, în opinia mea, deoarece stochează de fapt numărul de cenți.

Comentarii

  • Acest lucru este mult mai simplu, însă nu am învățat încă nimic despre structurile de date, array-uri sau bucle. Am făcut cursul cu mult timp în urmă, dar nu-mi amintesc pe deplin ce am învățat. Voi ține minte acest lucru pentru viitor, dacă va trebui să construiesc altul!-  > Por Alex.