Errore anomalo Programma C++

di il
9 risposte

Errore anomalo Programma C++

Ciao a tutti, volevo chiedere un parere riguardo un problema

Sto scrivendo un programma che riceve in input le ore di lavoro di un dipendente, e calcola la retribuzione in base alle ore stesse, se sono inferiori o uguali a 40 la retribuzione applicata sarà di 10, mentre tutte le ore di straordinario, che si conteggiano dalla 41esima ora in poi, verranno retribuite a 15, cioè il 50% in più dello standard.

Ora nel mio codice rilevo un problema di iterazione credo, perche se l'esecuzione entra nell'else, scrivendo ad asempio come input un numero maggiore di 41, quando scriverò un altro numero mi darà un valore errato, in più nell'esecuzione ho rilevato questa anomalia:




vi posto il codice:
#include <iostream>

using namespace std;

int main()
{
    int hoursWorked = 0;
    double hourlyRate = 0;
    int counter = 1;
    double total = 0;
    double totalOver = 0;

    cout << "Inserire le ore di lavoro svolte (-1 Per Terminare): ";
    cin >> hoursWorked;

    cout << "Inserire la paga oraria del dipendente: ";
    cin >> hourlyRate;

    while (hoursWorked != -1)
    {
        if (hoursWorked <= 40)
        {
            hourlyRate = 10;
            total = hoursWorked * hourlyRate;

            cout << "Il salario del dipendente e': " << total << endl;
        }
        else
        {
            hoursWorked -= 40;
            hourlyRate = 15;
            totalOver = hoursWorked * hourlyRate;

            cout << "Il Salario del dipendente e': " << total + totalOver << endl;
        }

        counter++;

        cout << "Inserire le ore di lavoro svolte (-1 Per Terminare): ";
        cin >> hoursWorked;
    }

    cout << "\nControllati i salari di " << counter << " dipendenti.\n";

    return 0;
}

9 Risposte

  • Re: Errore anomalo Programma C++

    Perchè nell'else devi comunque calcolarti anche total altrimenti totalOver a cosa lo sommi?

    Visto che comunque in qualche iterazione con le ore <= 40 lo calcoli lui ti prende l'ultimo valore calcolato e lo usa.

    edit: infatti nel tuo screen quando ti fa quest'errore è perchè ti somma totalOver = 30 (15*2) e total = 10 che aveva calcolato l'iterazione prima ^^
  • Re: Errore anomalo Programma C++

    Eduadie ha scritto:


    Perchè nell'else devi comunque calcolarti anche total altrimenti totalOver a cosa lo sommi?

    Visto che comunque in qualche iterazione con le ore <= 40 lo calcoli lui ti prende l'ultimo valore calcolato e lo usa.

    edit: infatti nel tuo screen quando ti fa quest'errore è perchè ti somma totalOver = 30 (15*2) e total = 10 che aveva calcolato l'iterazione prima ^^
    Ho sostituito il valore total, della somma total + totalOver con 400 che è il valore ovvio se si entra in quell'if, e cosi non sembra dare errori, ma cosi con una paga oraria differente da 10 il programma diventa inutile.

    Invece se inserisco l'operazione total nell'else, allora il programma non fa più niente di ciò che dovrebbe fare
  • Re: Errore anomalo Programma C++

    Se ci ragioni un attimo il compito è semplice e potresti metterlo a posto da solo.

    Imposta la paga oraria di base prima della if e fai il calcolo relativo alle prime 40 ore nella else. Poi aumenta la paga del 10% e fai il calcolo per la restante parte di ore sommandole alle prime.
  • Re: Errore anomalo Programma C++

    B2OG4N ha scritto:


    Eduadie ha scritto:


    Perchè nell'else devi comunque calcolarti anche total altrimenti totalOver a cosa lo sommi?

    Visto che comunque in qualche iterazione con le ore <= 40 lo calcoli lui ti prende l'ultimo valore calcolato e lo usa.

    edit: infatti nel tuo screen quando ti fa quest'errore è perchè ti somma totalOver = 30 (15*2) e total = 10 che aveva calcolato l'iterazione prima ^^
    Ho sostituito il valore total, della somma total + totalOver con 400 che è il valore ovvio se si entra in quell'if, e cosi non sembra dare errori, ma cosi con una paga oraria differente da 10 il programma diventa inutile.

    Invece se inserisco l'operazione total nell'else, allora il programma non fa più niente di ciò che dovrebbe fare
    Non riesco a capire che intendi.
    Comunque io ti avevo suggerito di scrivere l'istruzione:
    total = 400
    nell'else e rimanere tutto invariato.
  • Re: Errore anomalo Programma C++

    oregon ha scritto:


    Se ci ragioni un attimo il compito è semplice e potresti metterlo a posto da solo.

    Imposta la paga oraria di base prima della if e fai il calcolo relativo alle prime 40 ore nella else. Poi aumenta la paga del 10% e fai il calcolo per la restante parte di ore sommandole alle prime.
    Grazie per la dritta, effettivamente invertendo e riscrivendo alcune cose, sembra non darmi più nessun problema, se non fosse per il fatto che continuo a trovare inutile l'inserimento di un input per determinare la paga oraria, se comunque il programma basa i calcoli su una paga di 10 o 15.

    Ad ogni modo ecco il codice riscritto, se avete appunti da fare siate crudeli, tranquilli, sto imparando ora, e mi mancano ancora i costrutti switch, do..while, e for da apprendere, magari c'è qualcosa che da inesperto mi sfugge

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int hoursWorked = 0;
        double hourlyRateExtra = 0;
        double hourlyRateBase = 0;
        int counter = 0;
        double total = 0;
        double totalOver = 0;
    
        cout << "Inserire le ore di lavoro svolte (-1 Per Terminare): ";
        cin >> hoursWorked;
    
        cout << "Inserire la paga oraria base del dipendente: ";
        cin >> hourlyRateBase;
    
        while (hoursWorked != -1)
        {
            if (hoursWorked >= 41)
            {
                hoursWorked -= 40;
                hourlyRateExtra = 15;
                totalOver = hoursWorked * hourlyRateExtra;
                total = 400;
    
                cout << "Il salario del dipendente e': " << total + totalOver << endl;
            }
            else
            {
                total = 0;
                hourlyRateBase = 10;
                total = hoursWorked * hourlyRateBase;
    
                cout << "Il salario del dipendente e': " << total << endl;
            }
    
            counter++;
    
            cout << "Inserire le ore di lavoro svolte (-1 Per Terminare): ";
            cin >> hoursWorked;
        }
    
        cout << "\nControllati i salari di " << counter << " dipendenti.\n";
    
        return 0;
    }
  • Re: Errore anomalo Programma C++

    Eduadie ha scritto:


    B2OG4N ha scritto:


    Eduadie ha scritto:


    .
    Comunque io ti avevo suggerito di scrivere l'istruzione:
    total = 400
    nell'else e rimanere tutto invariato.

    Si, alla fine è quello che ho fatto per farlo funzionare, purtroppo trovavo difficoltà nell'elaborare in codice il ragionamento che vedeva la paga oraria impostata a 10, e dalla 41esima ora in poi impostata a 15, ma mantenendo le prime 40 ore con un paga di 10
  • Re: Errore anomalo Programma C++

    In più sfrutto un pò il thread per fare qualche domanda spero non me ne vogliate per i post multipli

    Ho scritto un altro semplice programma per determinare il maggiore di una serie di 10 numeri, ma se nell'esecuzione scrivo un numero negativo, allora mi considera come valore più alto, quello inserito prima del numero negativo. Allego uno screen:



    questo è il codice:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int counter = 1;
        int number = 0;
        int largest = 0;
    
        cout << "Inserire una serie di 10 numeri, il programma restituira' il valore maggiore tra quelli inseriti." << endl;
        cout << "\nInserire il valore: ";
        cin >> number;
    
        while (counter < 10)
        {
            if (number > largest)
            {
                largest = number;
            }
    
            counter++;
    
            cout << "\nInserire il valore: ";
            cin >> number;
        }
    
        cout << "\nIl numero piu' grande tra quelli inseriti e': " << largest << endl;
    
        return 0;
    }
  • Re: Errore anomalo Programma C++

    No ... per un altro problema un altro thread. Altrimenti si fa solo confusione ...

    Ancora si sta rispondendo sul primo problema in questo thread ...
    Non hai compreso la mia risposte precedente ... io ti dicevo che il codice andava corretto in questo modo
    
            if (hoursWorked >= 41)
            {
                hoursWorked -= 40;
    	    total = 40 * hourlyRateBase;
                hourlyRateExtra = hourlyRateBase * 1.5;
                totalOver = hoursWorked * hourlyRateExtra;
    
                cout << "Il salario del dipendente e': " << total + totalOver << endl;
            }
            else
            {
                total = hoursWorked * hourlyRateBase;
                cout << "Il salario del dipendente e': " << total << endl;
            }
    
  • Re: Errore anomalo Programma C++

    oregon ha scritto:


    No ... per un altro problema un altro thread. Altrimenti si fa solo confusione ...

    Ancora si sta rispondendo sul primo problema in questo thread ...
    Non hai compreso la mia risposte precedente ... io ti dicevo che il codice andava corretto in questo modo
    
            if (hoursWorked >= 41)
            {
                hoursWorked -= 40;
    	    total = 40 * hourlyRateBase;
                hourlyRateExtra = hourlyRateBase * 1.5;
                totalOver = hoursWorked * hourlyRateExtra;
    
                cout << "Il salario del dipendente e': " << total + totalOver << endl;
            }
            else
            {
                total = hoursWorked * hourlyRateBase;
                cout << "Il salario del dipendente e': " << total << endl;
            }
    
    Vero, ti ringrazio per avermi fatto capire meglio
    Non servivano affatto le riinizializzazioni nell'else che avevo messo nel mio codice

    Per il nuovo quesito chiedo scusa, aprirò un nuovo thread per ogni nuovo quesito e cercherò di essere più specifico nel titolo del problema, grazie per la pazienza
Devi accedere o registrarti per scrivere nel forum
9 risposte