Vai al contenuto

Dubbio esercizio in linguaggio C sugli stipendi


Messaggi raccomandati

Buonasera a tutti. Ho provato a realizzare un programma che mi calcoli lo stipendio netto partendo da quello lordo.

Il mio problema (ho iniziato oggi a guardare if ed else) è che la seconda e la terza condizione (else if e else) mi danno dei problemi, a volte si sovrappongono non calcolandomi correttamente il dato. Qualcuno può aiutarmi?? Grazie mille :)

 

 

 

/* Scrivere un programma C che, dato il valore dello stipendio lordo, calcoli lo stipendio netto mensile considerando una tassazione pari al 20% per stipendi lordi compresi fra 10.001 euro e 30.000 euro, pari al 30% oltre ai 30.000 euro ed esentasse per gli stipendi lordi inferiori a 10.000 euro. Inserire nel codice il controllo sull’input dell’utente.

*/

 

 

 

#include <stdio.h>

#include <stdlib.h>

 

 

 

int main ()

{

    

    float stipendio_lordo, stipendio_netto1, stipendio_netto2; /* Inserisco le variabili, in float perchè difficilmente uno stipendio avrà valore intero */

    

    printf("Inserire il proprio stipendio lordo annuale: "); /* Stampo a video la richiesta affinchè l'utente inserisca il proprio stipendio lordo */

    

    scanf("%f", &stipendio_lordo);

    

    

    /* Inizio a scrivere le condizioni richieste dal problema */

    

    

    

    if (0 < stipendio_lordo <= 10000)

        

        printf("Il tuo stipendio netto mensile è: %f \n", stipendio_lordo / 12);

    

    

    else if (10001 <= stipendio_lordo <= 30000) {

        

        stipendio_netto1 = stipendio_lordo - (stipendio_lordo - 10000) * 0.2;

        

        printf("Il tuo stipendio netto mensile è: %f \n", stipendio_netto1 / 12);

    }

    

    else {

        

        stipendio_netto2 = stipendio_lordo - (stipendio_lordo - 10000) * 0.3;

        

        printf("Il tuo stipendio netto mensile è: %f \n", stipendio_netto2 / 12);

    }

    

   

    return 0;

}

 

 MacBook Pro Retina 15"  iPod Classic 80GB  iPhone 4s 16GB  The New iPad 32GB  Apple Cube G4  AppleTV2g 

Link al commento
Condividi su altri siti

prova cosi:

 

 
#include <stdio.h>
#include <stdlib.h>
 
 
 
int main ()
{
    
    float stipendio_lordo, stipendio_netto1, stipendio_netto2; /* Inserisco le variabili, in float perchè difficilmente uno stipendio avrà valore intero */
    
    printf("Inserire il proprio stipendio lordo annuale: "); /* Stampo a video la richiesta affinchè l'utente inserisca il proprio stipendio lordo */
    
    scanf("%f", &stipendio_lordo);
    
    
    /* Inizio a scrivere le condizioni richieste dal problema */
    
    
    
    if (0 < stipendio_lordo <= 10000)
    {
        printf("Il tuo stipendio netto mensile è: %f \n", stipendio_lordo / 12);
    }
    else 
    {
        if (10001 <= stipendio_lordo <= 30000) 
        {
            stipendio_netto1 = stipendio_lordo - (stipendio_lordo - 10000) * 0.2;
            printf("Il tuo stipendio netto mensile è: %f \n", stipendio_netto1 / 12);
        }
        else 
        {
            stipendio_netto2 = stipendio_lordo - (stipendio_lordo - 10000) * 0.3;
            printf("Il tuo stipendio netto mensile è: %f \n", stipendio_netto2 / 12);
        }
    }
    return 0;
}

 iPhone 6  iPad Air 2  MacBook Pro Retina 15 " Early 2013  Apple watch ï£¿

 

Link al commento
Condividi su altri siti

 

prova cosi:

 

 
#include <stdio.h>
#include <stdlib.h>
 
 
 
int main ()
{
    
    float stipendio_lordo, stipendio_netto1, stipendio_netto2; /* Inserisco le variabili, in float perchè difficilmente uno stipendio avrà valore intero */
    
    printf("Inserire il proprio stipendio lordo annuale: "); /* Stampo a video la richiesta affinchè l'utente inserisca il proprio stipendio lordo */
    
    scanf("%f", &stipendio_lordo);
    
    
    /* Inizio a scrivere le condizioni richieste dal problema */
    
    
    
    if (0 < stipendio_lordo <= 10000)
    {
        printf("Il tuo stipendio netto mensile è: %f \n", stipendio_lordo / 12);
    }
    else 
    {
        if (10001 <= stipendio_lordo <= 30000) 
        {
            stipendio_netto1 = stipendio_lordo - (stipendio_lordo - 10000) * 0.2;
            printf("Il tuo stipendio netto mensile è: %f \n", stipendio_netto1 / 12);
        }
        else 
        {
            stipendio_netto2 = stipendio_lordo - (stipendio_lordo - 10000) * 0.3;
            printf("Il tuo stipendio netto mensile è: %f \n", stipendio_netto2 / 12);
        }
    }
    return 0;
}

 

 

Niente da fare, purtroppo mi dà ancora il problema precedente.

 

esempio: lo stipendio lordo è 20.000.

 

Dovrebbe venire 1500 invece viene 1666,66 :(

 MacBook Pro Retina 15"  iPod Classic 80GB  iPhone 4s 16GB  The New iPad 32GB  Apple Cube G4  AppleTV2g 

Link al commento
Condividi su altri siti

È da un po' che non faccio C, ma non serve una fflush dopo la scanf?

 

In alcuni casi non mi era servita, oggi provo poi ti faccio sapere ;)

 MacBook Pro Retina 15"  iPod Classic 80GB  iPhone 4s 16GB  The New iPad 32GB  Apple Cube G4  AppleTV2g 

Link al commento
Condividi su altri siti

Hai sbagliato a definire la condizione nei condizionali.

Devi dire una condizione alla volta, cioè se stipendio_lordo è maggiore di 0  E  se è minore di 10000, allora fai questo. In questo modo definisci l'intervallo da 0 a 10000 (e tutti gli altri intervalli). L'operatore logico "E", o meglio, AND in C, C++ e Objective C è &&.

Se poi ti interessa l'OR è || .

Ciao.

Il Mac è come un televisore, quando ti serve lo accendi, lo usi, te lo godi e, quando ti sei stancato, lo spegni.

Un PC Windows è come se ti fossi preso il cane: gli devi togliere le pulci, lavarlo, pettinarlo e, per ricompensa, se per una volta ti dimentichi di portarlo in bagno, te la farà in casa.

[cit.]

Link al commento
Condividi su altri siti

Hai sbagliato a definire la condizione nei condizionali.

Devi dire una condizione alla volta, cioè se stipendio_lordo è maggiore di 0  E  se è minore di 10000, allora fai questo. In questo modo definisci l'intervallo da 0 a 10000 (e tutti gli altri intervalli). L'operatore logico "E", o meglio, AND in C, C++ e Objective C è &&.

Se poi ti interessa l'OR è || .

Ciao.

 

Perfetto grazie mille!! Nel corso della giornata avevo anche provato con || ma non funzionava, invece con && va alla grande! Ancora grazie :)

 MacBook Pro Retina 15"  iPod Classic 80GB  iPhone 4s 16GB  The New iPad 32GB  Apple Cube G4  AppleTV2g 

Link al commento
Condividi su altri siti

Volendo puoi usare anche else if anziché if annidati: 

if(stipendio_lordo > 0 && stipendio_lordo <= 10000)
{
    //Stipendio compreso tra 1 e 10000
}
else if(stipendio_lordo > 10000 && stipendio_lordo <= 30000)
{
    //Stipendio compreso tra 10001 e 30000
}
else
{
    //Stipendio maggiore di 30000
}
Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...