[C++] Programma per valori finanziari interi

di il
3 risposte

[C++] Programma per valori finanziari interi

Ciao a tutti, sono alle prese con un problema insito nel C++, ovvero visualizzare valori finanziari, che se impostati come double, in programmi sull'interesse composito ad esempio, potrebbero portare a valori errati per via dell'arrotondamento (ma non c'è bisogno che io stia qui a spiegarlo a voi ), per farla breve insomma, ho modificato un programma per acquisire in input il valore intero e quello decimale di una cifra finanziaria, ma sottoforma di interi, e creato una tabella per mostrare l'interesse anno dopo anno, in percentuali del 5-6-7-8-9-10%, ora dopo parecchie prove, sono bloccato per i seguenti problemi:
1) Quando devo mostrare in output i cent, i numeri a singola cifra non presentano lo zero, come potrebbe essere ad esempio 05 o 09, questo scompone la simmetria della griglia, come potrei ovviare ?

2) Quando inserisco una cifra in cent, superiore a 70, per via dei calcoli essa supererà i 99, e in questo caso dovrebbe aumentare la parte intera di un ipotetico dollaro di 1 e ripartire essa stessa da 0, ma nonostante i miei if per cercare di fare questa cosa, al secondo raggiungimento dei 99 gli if non fanno più il loro dovere poichè dovrei implementare una struttura iterativa, ma non capisco come controllare il ciclo per non finire in un loop

Vi posto il codice e resto in attesa per dare altre delucidazioni, in quanto sono certo che la complessità di ciò che ho spiegato (Per via della mia scarsa dote di sintesi) lascerà quancuno cosi hahahaha

Ringrazio per la pazienza

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main()
{
    cout << "Questo programma calcola l'interesse maturato in 10 anni, ad un tasso variabile tra il 5% e il 10%.\n" << endl;

    int dollari;
    int cent;

    cout << "Inserire la parte intera della cifra: ";
    cin >> dollari;

    cout << "Inserire la parte decimale della cifra: ";
    cin >> cent;
    cout << endl;

    while (cent < 0 || cent > 99)
    {
        cout << "Errore. Inserire un valore compreso tra 0 e 99.\n";

        cout << "Inserire la parte decimale della cifra: ";
        cin >> cent;
        cout << endl;
    }

    double tasso5x100 = .05;
    double tasso6x100 = .06;
    double tasso7x100 = .07;
    double tasso8x100 = .08;
    double tasso9x100 = .09;
    double tasso10x100 = .10;

    cout << "Anno" << setw(19) << "Tasso 5%" << setw(19) << "Tasso 6%" << setw(19) << "Tasso 7%"
        << setw(19) << "Tasso 8%" << setw(19) << "Tasso 9%" << setw(20) << "Tasso 10%" << endl;

    for (int anno = 1; anno <= 10; anno++)
    {
        int dollari5;
        int dollari6;
        int dollari7;
        int dollari8;
        int dollari9;
        int dollari10;

        int cent5;
        int cent6;
        int cent7;
        int cent8;
        int cent9;
        int cent10;

        dollari5 = dollari * pow(1.0 + tasso5x100, anno);
        dollari6 = dollari * pow(1.0 + tasso6x100, anno);
        dollari7 = dollari * pow(1.0 + tasso7x100, anno);
        dollari8 = dollari * pow(1.0 + tasso8x100, anno);
        dollari9 = dollari * pow(1.0 + tasso9x100, anno);
        dollari10 = dollari * pow(1.0 + tasso10x100, anno);

        cent5 = cent * pow(1.0 + tasso5x100, anno);
        cent6 = cent * pow(1.0 + tasso6x100, anno);
        cent7 = cent * pow(1.0 + tasso7x100, anno);
        cent8 = cent * pow(1.0 + tasso8x100, anno);
        cent9 = cent * pow(1.0 + tasso9x100, anno);
        cent10 = cent * pow(1.0 + tasso10x100, anno);

        if (cent5 >= 100)
        {
            cent5 -= 100;
            dollari5 += 1;
        }

        if (cent6 >= 100)
        {
            cent6 -= 100;
            dollari6 += 1;
        }

        if (cent7 >= 100)
        {
            cent7 -= 100;
            dollari7 += 1;
        }

        if (cent8 >= 100)
        {
            cent8 -= 100;
            dollari8 += 1;
        }

        if (cent9 >= 100)
        {
            cent9 -= 100;
            dollari9 += 1;
        }

        if (cent10 >= 100)
        {
            cent10 -= 100;
            dollari10 += 1;
        }

        cout << setw(4) << anno << setw(16) << dollari5 << "." << cent5 << setw(16)
            << dollari6 << "." << cent6 << setw(16) << dollari7 << "." << cent7 << setw(16)
            << dollari8 << "." << cent8 << setw(16) << dollari9 << "." << cent9 << setw(17)
            << dollari10 << "." << cent10 << endl;
    }

    return 0;
}

3 Risposte

  • Re: [C++] Programma per valori finanziari interi

    Benché si tratti di valori con decimali, gli importi in dollari e anche in euro possono essere gestiti semplicemente con degli interi, moltiplicando tutti i valori x 100.
  • Re: [C++] Programma per valori finanziari interi

    E poi ottenere la parte decimale con divisione e modulo ?
  • Re: [C++] Programma per valori finanziari interi

    Internamente lavori sempre e solo con un intero, ovvero fai i calcoli in centesimi anzichè in dollari: 42 dollari per te saranno 4200 centesimi.
    La gestione della virgola sarà una questione unicamente di output, ovvero un bel /100 nel momento di stampare i risultati
Devi accedere o registrarti per scrivere nel forum
3 risposte