[C] problema calcolo

di il
12 risposte

[C] problema calcolo

Salve a tutti, dovrei risolvere un esercizio che chiede di calcolare uno stipendio in base alle ore lavorate. Lo stipendio è uguale alle ore lavorate * il valore monetario di ogni ora; nel caso in cui le ore sono più di 40, le ore successive alla 40esima vengono pagate una volta e mezzo il valore delle ore "normali"
ad esempio con 40 ore lavorate ed un valore di 10 euro all'ora, il salario sarà di 400
con 41 ore invece sarà di 415
ecco, il mio codice con 41 ore mi restituisce 425
#include <stdio.h>
int main()
{
    int ore, pagamento_orario, salario;
while (ore > 0)
   {
    printf("Inserisci il numero di ore lavorate: \n");
    scanf("%d", &ore);
    printf("Inserisci il valore monetario di ogni ora: \n");
    scanf("%d", &pagamento_orario);
    salario = ore * pagamento_orario;

    if (ore > 40)
        salario = salario + (ore - 40) * pagamento_orario + (pagamento_orario / 2);
        printf("Il tuo salario è %d\n", salario);
   }
    return 0;

}

12 Risposte

  • Re: [C] problema calcolo

    L'errore sta nel fatto che inizialmente calcoli tutte le 41 ore al costo normale ...
  • Re: [C] problema calcolo

    Grazie mille! a volte l'errore è proprio sotto al naso...
    ho risolto in questo modo, grazie ancora!
    #include <stdio.h>
    int main()
    {
        int ore, pagamento_orario, salario;
    while (ore > 0)
       {
        printf("Inserisci il numero di ore lavorate: \n");
        scanf("%d", &ore);
        printf("Inserisci il valore monetario di ogni ora: \n");
        scanf("%d", &pagamento_orario);
        if (ore <= 40)
        salario = ore * pagamento_orario;
        else
            salario = salario + (ore - 40) * pagamento_orario + (pagamento_orario / 2);
            printf("Il tuo salario è %d\n", salario);
       }
    
    
        return 0;
    
    }
  • Re: [C] problema calcolo

    No ... non mi pare risolto ...

    Nel secondo caso sommi un valore precedente di salario che non esiste ...
  • Re: [C] problema calcolo

    Hai ragione... così dovrebbe essere corretto
    #include <stdio.h>
    int main()
    {
        int ore, pagamento_orario, salario;
    while (ore > 0)
       {
        printf("Inserisci il numero di ore lavorate: \n");
        scanf("%d", &ore);
        printf("Inserisci il valore monetario di ogni ora: \n");
        scanf("%d", &pagamento_orario);
        if (ore <= 40)
        salario = ore * pagamento_orario;
        else
            salario = ((ore - 40) * pagamento_orario + (pagamento_orario / 2)) + (40 * pagamento_orario);
            printf("Il tuo salario è %d\n", salario);
       }
    
    
        return 0;
    
    }
    
  • Re: [C] problema calcolo

    Perché non provi il codice che scrivi ... con 42 ore quanto dovrebbe essere il risultato?
  • Re: [C] problema calcolo

    Io credo sia corretto... con 42 ore sarebbero 400 + 25 dunque 425 (così come calcola il programma) , no?
  • Re: [C] problema calcolo

    Come hai fatto il calcolo? Mostra i passaggi ...
  • Re: [C] problema calcolo

    Allora il salario è il numero di ore moltiplicato per il loro valore, ipotizzando che le ore sono 40 e il loro valore è 10, il salario sarà di 400, e su questo ci siamo
    se le ore sono più di 40, ogni ora vale una volta e mezzo il valore delle ore normali, quindi un'ora in più vale 10 + (10 / 2)
    41 ore = 400 + 15
    42 ore = 400 + ((10 + (10 / 2)) * 2) = 430

    e dunque non mi trovo e hai ragione tu

    qui il problema è la matematica, non il linguaggio c... ma scusa perché con 41 ore funziona?
  • Re: [C] problema calcolo

    Funziona con 41 perché hai solo un'ora in più. L'espressione è sbagliata dopo la prima ora ...

    Controlla le parentesi e considera la priorità delle operazioni + e *
  • Re: [C] problema calcolo

    Non ho capito a cosa serve il while.
    
    #include<stdio.h>
    #define LIMIT (40)
    #define SALARY_INCREASE (1.5)
    int main(void)
    {
        float euros_per_hour;
        float salary;
        unsigned int hours;
        printf("Quanti prendi l'ora? ");
        scanf("%f",&uros_per_hour);
        printf("Quante ore hai lavorato? ");
        scanf("%u",hours);
        if( hours <= LIMIT)
        {
           salary = euros_per_hour * hours;
        }
        else
        {
            salary = (LIMIT * euros_per_hour)+ ((hours - LIMIT)*euros_per_hour*SALARY_INCREASE);
        }
        printf("Stipendio = %.2f\n",salary);
        return 0;
    }
    
  • Re: [C] problema calcolo

    Al fine della risoluzione dell'esercizio non serve a nulla. Ho inserito il ciclo in modo da poter ripetere l'operazione e dunque fare ulteriori prove, senza dover aprire e chiudere il programma ogni volta. Comunque il tuo codice mi ha dato uno spunto, grazie mille
  • Re: [C] problema calcolo

    Ho modificato la riga dell'else in questo modo, stavolta credo sia il codice definitivo ringrazio di nuovo chi ha cercato di aiutarmi
    salario = (40 * pagamento_orario) + ((ore - 40) * (pagamento_orario + pagamento_orario/2));
Devi accedere o registrarti per scrivere nel forum
12 risposte