Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Hur ska jag gå till väga???

Postades av 2006-07-11 13:11:50 - Urban Olsson, i forum c++, Tråden har 3 Kommentarer och lästs av 1027 personer

Hej på er alla.

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 Urban


Svara

Sv: Hur ska jag gå till väga???

Postades av 2006-07-11 13:30:33 - Peter Larsson

Hej Urban

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;


Svara

Sv: Hur ska jag gå till väga???

Postades av 2006-07-11 13:31:04 - Niklas Jansson

Det finns väl ett par olika varianter på just det problemet.

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.


Svara

Sv:Hur ska jag gå till väga???

Postades av 2006-07-11 13:35:41 - Urban Olsson

Tack grabbar för de snabba svaren.
Ska genast testa.

Mvh

Urban


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 619
27 953
271 709
5 765
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies