Hej på er alla. Hej Urban Det finns väl ett par olika varianter på just det problemet.Hur ska jag gå till väga???
Försöker att lära mig att göra små program om div. saker.
Nu står ett litet skatteprogram på tur.
Man ska kunna mata in en inkomst sen ska programmet dra skatt ifrån inkomsten.
Inga problem med det, men.
När det är olika skatter på hur mycket inkomst man har så får jag lite problem.
Ex. om du tjänar 230.000 och ska betala 43% i skatt på allt över 200.000,
mellan 150.000-199.999 ska man betala 27%,
mellan 20.000-149.999 ska man betala 10%,
under 20.000 skattefritt.
Eftersom jag är nybörjare så föredrar jag en så enkel kod som möligt.
Är det någon som kan ge tips på hur jag ska lägga upp det.
Tacksam för all hjälp.
Mvh UrbanSv: Hur ska jag gå till väga???
Skrev ihop följande: (ej testat, men det bör fungera)
double inkomst = 0, skatt = 0;
cout << "Aktuell inkomst: " << endl;
cin >> inkomst;
if(inkomst >= 20000)
skatt += 0.10 * (inkomst - 20000);
if(inkomst >= 150000)
skatt += 0.27 * (inkomst - 150000);
if(inkomst >= 200000)
skatt += 0.43 * (inkomst - 200000);
cout << "Inkomst: " << inkomst << endl;
cout << "Skatt: " << skatt << endl;
cout << "Procent: " << (skatt/inkomst)*100;
Sv: Hur ska jag gå till väga???
Ett ganska enkelt är:
amount = ...;
remaining = amount;
if(remaining>20000){
tax = 20000*p1;
remaining -= 20000;
}
else {
tax = remaining*p1;
remaining = 0;
}
if(remaining>130000){
tax = 130000*p2;
remaining -= 130000;
}
else {
tax = remaining*p2;
remaining = 0;
}
osv.
Det är dock inte speciellt snyggt. Om du vänder på det kan du få något lite trevligare:
if (amount>200000){
tax = base1 + (amount-200000) * p1
}
else if (amount>150000){
tax = base2 + (amount-150000) * p2
}
...
Där base1, base2 är skatt för allting under den nivån du är. Tråkigt att räkna ut själv.
Ytterligare en variant är att istället kolla på hur mycket <b>mer</b> i skatt man betalar per nivå.
n0=0;
n1=0.10-n0;
n2=0.27-n1
n3=0.43-n2;
if(amount > 20000){
tax = (amount - 20000)*n1;
}
if(amount > 150000){
tax += (amount - 150000)*n2;
}
...
Principen är i alla fall en radda if-satser och en procentsats förknippad med varje.
Ytterligare en variant hade kunnat vara att blanda in Heaviside-funktioner. Då hade det bara blivit ett uttryck, något i stil med:
int h(int i){
if (i>0)
return 1;
else
return 0;
}
int fh(int i, int offset){
return (i-offset) * h(i-offset);
}
...
x1 = 20000;
x2 = 150000;
...
n1 = 0.10;
...
tax = fh(amount, x1)*n1 + fh(amount, x2)*n2 ...
//eller:
x[1] = 20000;
...
n[1] = 0.10;
...
tax = 0;
for(int i=1 to 5)
tax += fh(amount, x[i])*n[i];
Den sistnämnde tycker nog jag är den absolut snyggaste, slipper man if-sats-härvan.
Du har helt enkelt väldigt många sätt att välja mellan. Tänk hur du själv skulle lösa det för hand först och lägg sen upp det på samma sätt.