Loading...
vib1336 avatar vib1336 0 Точки

Programming Basics - Simple Calculations Задача {20} - Дневна печалба

Здравейте, имам проблем със задача, която е давана на предишни издания на изпита по Основи на програмирането.

 

20.*Дневна печалба

Иван е програмист в американска компания и работи от вкъщи средно N дни в месеца като изкарва средно по M долара на ден. В края на годината Иван получава бонус, който е равен на 2.5 месечни заплати. От спечеленото през годината му се удържат 25% данъци. Напишете програма, която да пресмята, колко е чистата средна печалба на Иван на ден в лева, тъй като той харчи изкараното в България. Приема се, че в годината има точно 365 дни. Курсът на долара спрямо лева ще се чете от конзолата.

Вход

От конзолата се четат 3 числа, въведени от потребителя:

  • На първия редработни дни в месеца. Цяло число в интервала [5…30]
  • На втория редизкарани пари на ден. Реално число в интервала [10.00… 2000.00]
  • На третия ред – курсът на долара спрямо  лева /1 долар = X лева/. Реално число в интервала [0.99… 1.99]

Изход

На конзолата да се отпечата 1 числосредната печалба на ден в лева. Резултатът да се форматира до втория знак след запетаята.

 

 

Примерен вход и изход

Вход

Изход

Обяснения

21

75.00

1.59

74.61

1 месечна заплата = 21 * 75 = 1575 долара

Годишен доход = 1575*12 + 1575*2.5 = 22837.5 долара

Данък = 25% от 22837.5 = 5709.375

Чист годишен доход = 17128.125 долара = 27233.71875 лв

Средна печалба на ден = 27233.71875 / 365 = 74.61 лева

Вход

Изход

Вход

Изход

15

105

1.71

80.24

22

199.99

1.50

196.63

 

Проблемът е, че първите два входа и изхода ми се получават като горните примери, обаче на третия където трябва да е 196.63 ми дава нещо съвсем различно?

Ето това  е кода:

            int workdays = int.Parse(Console.ReadLine());
            double salaryDay = double.Parse(Console.ReadLine());
            double exchangeRate = double.Parse(Console.ReadLine());

            double zaplata = 21 * 75;
            double godDohod = (zaplata * 12) + (zaplata * 2.5);
            double danuk = (godDohod * 25) / 100;
            double chistGodDohod = (godDohod - danuk) * exchangeRate;
            double srednaPechalbaDen = chistGodDohod / 365;

            srednaPechalbaDen = Math.Round(srednaPechalbaDen, 2);
            Console.WriteLine(srednaPechalbaDen);

Тагове:
0
Programming Basics
martinml avatar martinml 297 Точки

Проблемът е, че променливите workdays и salaryDay не се използват, вместо това са написани числата от първия пример - 21 и 75. 

double zaplata = 21 * 75;

Трябва да стане

double zaplata = workdays * salaryDay;

 

Другият проблем е, че ако srednaPechalbaDen е число с един символ след десетичната запетая, няма на конзолата да се принтира 0 след него (например 75.50 ще стане 75.5). Затова вместо Math.Round трябва да се използва :f2

Console.WriteLine($"{srednaPechalbaDen:f2}");

 

Поправено решение:

https://pastebin.com/EdCRPhFu

0
Kristian8606 avatar Kristian8606 42 Точки

Мисля че трябва да умножиш workdays по  salaryDay а не  21 * 75; 

С тези цифри които съм оградил в скобките си фиксирал  zaplata =( 21 * 75) и когато имаш друг вход с други цифри става мазало.

0
01/08/2017 14:20:28
vib1336 avatar vib1336 0 Точки

Да, прави сте. Сега по другия въпрос, понеже започнахте по-горе. В една друга задача трябва да накарам нулата да се покаже след 19.9 на изхода (т.е. да стане 19.90) обаче не иска. Търсих в гугъл, но нищо не става. Горната команда  с :f2 също не ми работи?

 

EDIT: Като тествам задачата "Дневна печалба" по вашия начин , джъджа ми казва: "Грешка при компилация", не знам кво се случва.

0
01/08/2017 18:30:12
Kristian8606 avatar Kristian8606 42 Точки

А каква е задачата ?

0
vib1336 avatar vib1336 0 Точки

Ремонт на плочки

 

На площадката пред жилищен блок трябва да се поставят плочки. Площадката е с форма на квадрат със страна N метра. Плочките са широки „W“ метра и дълги „L“ метра. На площадката има една пейка с ширина M метра и дължина O метра. Под нея не е нужно да се слагат плочки. Всяка плочка се поставя за 0.2 минути.

Напишете програма, която чете от конзолата размерите на площадката, плочките и пейката и пресмята колко плочки са необходими да се покрие площадката и пресмята времето за поставяне на всички плочки.

Пример: площадка с размер 20м. има площ 400кв.м. Пейка широка 1м. и дълга 2м., заема площ 2кв.м. Една плочка е широка 5м. и дълга 4м. има площ = 20кв.м. Площта която трябва да се покрие е 400 – 2 = 398 кв.м. Необходими са 398 / 20 = 19.90 плочки. Необходимото време е 19.90 * 0.2 = 3.98 минути.

Вход

От конзолата се четат 5 числа, въведени от потребителя:

  • N – дължината на страна от площадката в интервала [1...100]
  • W – широчината на една плочка в интервала [0.1...10.00]
  • L – дължината на една плочка в интервала [0.1...10.00]
  • М – широчината на пейката в интервала [0...10]
  • О – дължината на пейката в интервала [0...10]

Изход

Да се отпечата на конзолата две числа: броят плочки, необходим за ремонта и времето за поставяне, всяко на нов ред. Резултатът да се форматира до втория знак след запетаята.

Примерен вход и изход

Вход

Изход

Обяснения

20

5

4

1

2

19.90

3.98

Обща площ = 20 * 20 = 400; площ на пейката = 1 * 2 = 2

Площ за покриване = 400 – 2 = 398

Площ на плочки = 5 * 4 = 20

Необходими плочки = 398 / 20 = 19.9

Необходимо време = 19.9 * 0.2 = 3.98

40

0.8

0.6

3

5

3302.08

660.42

 

Това е кода:

 

            double n = double.Parse(Console.ReadLine());
            double w = double.Parse(Console.ReadLine());
            double l = double.Parse(Console.ReadLine());
            double m = double.Parse(Console.ReadLine());
            double o = double.Parse(Console.ReadLine());
            

            double obshtaPlosht = n * n;
            double ploshtPeika = m * o;
            double ploshtPokrivane = (n * n) - (m * o);
            double ploshtPlochki = w * l;
            double neobPlochki = ((n * n) - (m * o)) / (w * l);
            double vreme = (((n * n) - (m * o)) / (w * l)) * 0.2;
            neobPlochki = Math.Round(neobPlochki, 2);
            
            Console.WriteLine(neobPlochki);
            Console.WriteLine(vreme);

 

Не мога да накарам нулата да се появи на първия изход.

0
01/08/2017 18:00:46
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.