Премини към съдържанието
От 1-ви септември 2021 г., вход във форумите ще е възможен само с имейл адрес вместо потребителско име. Ако не помните имейла с който сте се регистрирали, вижте го в настройките на профила си. ×
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Моля да ми кажете къде греша


notorious19

Препоръчан отговор


Здравейте, имам следната задача: Напишете прогама която изисква от потребителя да въведе заплатата на служещ преди начисляването на данъци.Програмата трябва да изведе заплатата на служещия с начислените данъци в паричен вид.Данъците са 10%, ако заплатата е до 10000, 15% ако е до 20000 и 20% ако доходите са над 20000.

 

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int zaplata, nova, danaci;
cout << "Vavedi zaplatata sega " << "\n";
cin >> zaplata;
if (zaplata <= 10000);
danaci = (10/100)*zaplata;
if (zaplata <= 20000);
danaci = (15/100)*zaplata;
if (zaplata > 20000);
danaci = (20/100)*zaplata;
nova = zaplata - danaci;
cout << "Zaplatata s nachislenite danaci e" << nova << "\n";
return 0;
}
 
Това е моя опит, но явно някъде греша, защото не се получава правилно...
Линк към коментара
Сподели в други сайтове

Проблемът явно е логически, понеже програмата не изчислява правилно заплатата с начислените данъци.Затова и моля да ме поправите там където греша в задачата.Тези ; след иф-овете не са проблем.

Линк към коментара
Сподели в други сайтове

#include <iostream>

using namespace std;
int main()
{
int zaplata, nova=0, danaci=0;
cout << "Vavedi zaplatata sega " << "\n";
cin >> zaplata;
if (zaplata <= 10000){
danaci = zaplata*10/100;
}
else if (zaplata <= 20000 && zaplata > 10000){
danaci = zaplata*15/100;
}
else{
danaci = zaplata*20/100;
}
nova = zaplata - danaci;
cout << "Zaplatata s nachislenite danaci e " << nova << endl;

system("PAUSE");
return 0;
} 

 

Грешката беше в 2-рия if. Ако заплатата е по-голяма от 20000 и по-малка от 10000;

Линк към коментара
Сподели в други сайтове

Без ; след if-овете. Акo не оградиш кода, който се изпълнява в if-a с {}, то ще се изпълни само първия ред след условието, т.е. докато програмата срещне ';'.


Линк към коментара
Сподели в други сайтове

Като изключим това, което колегата спомена за точката и запетайката, ако кодът е в сегашния си вид (впрочем добре е да се ползва тагът за код) то заплата, по-малка от 10000 единици ще отговори и на втория if и най-вероятно от там идва грешката. Начинът е да се ползва логическо "И" в условието, което се проверява.

Линк към коментара
Сподели в други сайтове

Като изключим това, което колегата спомена за точката и запетайката, ако кодът е в сегашния си вид (впрочем добре е да се ползва тагът за код) то заплата, по-малка от 10000 единици ще отговори и на втория if и най-вероятно от там идва грешката. Начинът е да се ползва логическо "И" в условието, което се проверява.

Да или както е написал по-горе с else if.

Линк към коментара
Сподели в други сайтове

Подоходното облагане не се изчислява така, а 10% за сумата до 10000 + 15% за сумата между 10001 и 20000 + 20% за сумата над 20000.

#include <iostream>

using namespace std;

int main()
{
    int zaplata, nova, danaci=0;
    cout << "Vavedi zaplatata sega ";
    cin >> zaplata;
     
    nova = zaplata;
    if (nova>20000) {
         danaci = (nova-20000)*20/100;
         nova = 20000;
         }
    if (nova>10000) {
         danaci += (nova-10000)*15/100;
         nova = 10000;
         }
    
    danaci += nova*10/100;

    nova = zaplata - danaci;
    cout << "Danaci " << danaci << endl;
    cout << "Zaplatata s nachislenite danaci e " << nova << endl;
    return 0;
}

или ако на някой му се виждат много сметките

 

#include <iostream>

using namespace std;

int main()
{
    int zaplata, nova, danaci=0;
    cout << "Vavedi zaplatata sega ";
    cin >> zaplata;
    
    if (zaplata>20000) danaci =  2500 + (zaplata-20000)*20/100;
    else if (zaplata>10000) danaci =  1000 + (zaplata-10000)*15/100;
    else danaci = zaplata*10/100;

    nova = zaplata - danaci;
    cout << "Danaci " << danaci << endl;
    cout << "Zaplatata s nachislenite danaci e " << nova << endl;
    return 0;
}
Линк към коментара
Сподели в други сайтове

Нещо много шантаво и объркано си то направил

 

Подоходното облагане не се изчислява така, а 10% за сумата до 10000 + 15% за сумата между 10001 и 20000 + 20% за сумата над 20000.

#include <iostream>

using namespace std;

int main()
{
    int zaplata, nova, danaci=0;               тук е добре да са bruto, neto, danaci
    cout << "Vavedi zaplatata sega ";
    cin >> zaplata;
     
    nova = zaplata;                            това няма нужда
    if (nova>20000) {
         danaci = (nova-20000)*20/100;         тук - като махнеш 20К и смяташ 20% - къде ти е 
         nova = 20000;                         ​данъка за 20-те хил
    }
    danaci += nova*10/100;
    nova = zaplata - danaci;
    cout << "Danaci " << danaci << endl;
    cout << "Zaplatata s nachislenite danaci e " << nova << endl;
    return 0;
}
 

 

Данъка, с прагове е - 10% за дохода до 10К, 1000 + 15% за дохода до 20К и 20% за дохода над 20К

 

#include <iostream>
using namespace std;
int main(void)
{
    int bruto,neto,danaci;
    cout<<"Vavedi zaplatata sega ";
    cin>>bruto;
    cout<<endl;
    if(bruto<=10000)
    {
        (danaci=0.1*bruto);
    }
    if(bruto<=20000)
        {
            (danaci=1000+(0.15*(bruto-1000)));
        }
    if(bruto>20000)
        {
            (danaci=2500+(0.2*(bruto-20000)));
        }
    neto = bruto-danaci;
    cout<<endl;
    cout<<"Zaplatata s nachislenite danaci e "<<neto<<endl<<endl;
}
Линк към коментара
Сподели в други сайтове

 

 

тук - като махнеш 20К и смяташ 20% - къде ти е ​данъка за 20-те хил

Като копираш само част от програмата не очаквай да работи правилно?

А и като не разбираш как рабити програмата си спести коментарите ако обичаш.

Линк към коментара
Сподели в други сайтове

Като копираш само част от програмата не очаквай да работи правилно?

А и като не разбираш как рабити програмата си спести коментарите ако обичаш.

Кода съм го копирал целия.

 

И по-леко с препоръките

Линк към коментара
Сподели в други сайтове

Кода съм го копирал целия.

 

И по-леко с препоръките

целия, само дето му липсва частта за изчислението на данъка за суми от 10001 до 20000 лева

и от там вече объркваш сметките за заплатите над 10000, сравни постове #10 и #11 (липсва единия if...)

 

моя код може да има трески за дялане, но поне дава що годе верни резултати (парите по принцип не са цели числа)

докато  при твоя си объркал условията за проверката и  на практика губиш изчислението за заплатите които са до

10000 макар че на пръв поглед го има в програмата ти, а израза за заплатите до 20000 е сбъркан - има изтървана 0.

 

примерно заплатата е 8000

 

проверка дали е до 10000 - да  данъците са 10 % = 800лв

проверка дали е до 20000 - пак да! - данъци = 1000 + (8000-10000)*0.15 = 700 лв

   ( реално при твоята програма са данъци = 1000 + (8000-1000)*0.15 = 2049 лв )

 

защо се получават 2049, а не 2050 ще ти го оставя за домашно размишление.

Линк към коментара
Сподели в други сайтове

Само един съвет, използвайте double вместо integer. При заплата 10001, след данъци заплатата Е 8500,85лв.

Линк към коментара
Сподели в други сайтове

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване