• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Królestwo Naturlandii

Object Storage Arubacloud
0 głosów
530 wizyt
pytanie zadane 25 stycznia 2019 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)

O to zadanie: Krolestwo Naturlandii, gdzie jednostka monetarna jest twarp, stosuje nastepujaca skale podatkowa:

- pierwszych 5 000 twarpow: 0% podatku,

- następnych 10 000 twarpow: 10% podatku,

- następnych 20 000 twarpow: 15% podatku,

- dochód przekraczający 35 000 twarpów: 20% podatku.

Na przykład ktoś, kto zarabia 38 000 twarpów, powinien zapłacić tytułem podatku 4600 twarpów. Napisz program który w pętli wyliczy i pokaże należność podatkową.

 

Prosze pomógłby mi ktos zrozumieć te zadanie oraz wytłumaczyc co ja mam tutaj zrobic. wiem ze juz był taki temat ale go przeczytałem i nic mi nie pomógł. Z góry bardzo dziekuje :)

 

myslałem nad czyms takim ale to jest złe:

#include <iostream>

using namespace std;


int main() {
    int x;
    double y=0.0;
    cin>>x;

    int i=1;
    while(i!=x) {
        if(i<5000) {
            y+=5000*0.0;
            i = i+ 5000;
            cout << y;
        }
        else if(x<15000) {
            y+=10000*0.10;
            i = i+ 10000;
        }
        else if(x<35000) {
            y+=20000*0.15;
            i = i + 20000;
        }
        else {
            (x-35000)+0.20;
        }
    }
    cout << y;
    return 0;

}

 

1
komentarz 15 grudnia 2019 przez Ehlert Ekspert (212,670 p.)
Zauważ że jak masz 9000 hajsu to nie płacisz podatku wysokości 10% z 10000, tylko 10% z tego ile masz.

4 odpowiedzi

+1 głos
odpowiedź 26 marca 2020 przez michleyo Nowicjusz (200 p.)
edycja 26 marca 2020 przez michleyo

Zamieszczam prawidłowe rozwiązanie.

 

#include <iostream>
using namespace std;

int main()
{
    int i, x, dochod;
    double p=0.0;
    double stawka[4]={0.0, 0.1, 0.15, 0.2};

    cout<<"Podaj kwote dochodu: ";
    cin>>dochod;

    for(i=5000, x=0; x<4&&i<=dochod; i+=i, x++)
    {
        p+=(i*stawka[x]);
        dochod-=i;
    }

    if (x==4)
        x--;

    p+=dochod*stawka[x];
    cout<<"podatek wynosi "<<p<<endl;;

    return 0;
}

 

0 głosów
odpowiedź 26 stycznia 2019 przez Michał_Warmuz Mądrala (5,830 p.)
rel
komentarz 26 stycznia 2019 przez Secrus Nałogowiec (32,880 p.)
co?
1
komentarz 26 stycznia 2019 przez Michał_Warmuz Mądrala (5,830 p.)
ref chciałem odświezyć temat
0 głosów
odpowiedź 26 marca 2020 przez tangarr Mędrzec (154,860 p.)

Jako, że treść zadania mnie zainteresowała dorzucę coś od siebie.
Postanowiłem napisać bardziej generyczna funkcję w której bardzo łatwo zmodyfikować lub dodać nowe stawki.
 

int oblicz_podatek(int przychod) {
    static const std::vector<std::pair<int, int>> stawki = {
        {0, 5000},
        {10, 10000},
        {15, 20000},
    };
    static const int max_stawka = 20;
    
    int podatek = 0;
    for (const auto &s : stawki) {
        const auto &stawka = s.first;
        const auto &prog = s.second;
        
        if (przychod <= prog) {
            int czesc_podatku = stawka * przychod / 100;
            podatek += czesc_podatku;
            return podatek;
        }
        else {
            int czesc_podatku = stawka * prog / 100;
            podatek += czesc_podatku;
            przychod -= prog;
        }
    }
    int czesc_podatku = max_stawka * przychod / 100;
    podatek += czesc_podatku;
    return podatek;
}

 

komentarz 26 marca 2020 przez tkz Nałogowiec (42,000 p.)
Z ciekawości, dlaczego static?
komentarz 26 marca 2020 przez tangarr Mędrzec (154,860 p.)
Unikam konstrukcji zmiennych stawki i max_stawka w kolejnych wywołaniach funkcji.
–1 głos
odpowiedź 1 grudnia 2020 przez Pawisiek Początkujący (250 p.)
#include<iostream>
#include<cctype>
using namespace std;
int main()
{
	double zarobki;
	cout << "podaj ile zarabiasz: " << endl;
	if (cin >> zarobki && zarobki > 0)
	{
		if (zarobki < 5000)
			cout << "nie placisz podatku!" << endl;
		else if (zarobki > 5000 && zarobki <= 15000)
		{
			zarobki -= 5000;
			cout << "placisz " << (5000*0.0)+(zarobki * 0.10) << " podatku!" << endl;
		}
		else if (zarobki > 15000 && zarobki <= 35000)
		{
			zarobki -=15000;
			cout << "placisz " << (5000 * 0.0) +(10000*0.10)+(zarobki*0.15)<< " podatku!" << endl;
		}
			
		else
		{
			zarobki -= 25000;
			cout << "placisz" << (5000 * 0.0) +(10000 * 0.10) + (20000 * 0.15) + (zarobki * 0.20) << "podatku" << endl;
		}
			
	}
	return 0;
}

zamieszczam swoje rozwiązanie.

Podobne pytania

+1 głos
2 odpowiedzi 381 wizyt
0 głosów
1 odpowiedź 367 wizyt
pytanie zadane 30 listopada 2022 w C i C++ przez Pysa6 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 194 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...