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
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
k.sevov avatar k.sevov 1077 Точки

Опитай с това:

 Console.WriteLine("{0:f2}", neobPlochki);

0
vib1336 avatar vib1336 0 Точки

Така стана, благодаря.

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

0
01/08/2017 19:20:24
natashanikolova avatar natashanikolova 2 Точки

Вместо Console.WriteLine(Math.Round(incomesEUR, 2));

Използвай Console.WriteLine("{0:0.00}", incomesEUR);

При мен това свърши работа.

0
natashanikolova avatar natashanikolova 2 Точки

За да изпише нулата след запетаята,

вместо Console.WriteLine(Math.Round(Tiles, 2));

използвай Console.WriteLine("{0:0.00}",Tiles);

 

За последната задача и аз имах странни резултати.

Когато използвах:

double Tax= yearPay * 0.25;

double Income = yearPay - Tax;

Получавах по-големи суми от очакваните и понеже прецених, че разликата е от данъка замених двата реда с този:

double Income = yearPay * 0.75;

и вече смята вярно.

0
02/08/2017 14:59:03
vib1336 avatar vib1336 0 Точки

Здравейте, да се върна на задачата с плочките. След като накарах нулата да се появи, judge продължава да се запъва и сега ми дава 30/100. Не разбирам, изразите със скобите ли не му харесват или? Някой идеи? Иначе изходите ми се получават с примерните.

0
natashanikolova avatar natashanikolova 2 Точки

            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 = obshtaPlosht - ploshtPeika;
            double ploshtPlochki = w * l;
            double neobPlochki = ploshtPokrivane /ploshtPlochki;
            double vreme = neobPlochki * 0.2;
                   
            Console.WriteLine("{0:f2}", neobPlochki);
            Console.WriteLine("{0:f2}", vreme);

Колега, опитайте с тези промени, имам предвид след като смятате obshtaPlosht и ploshtPeika ги използвайте, за да опростите кода, при толкова много букви и скоби лесно се допуска грешка при писането, която трудно ще се види после.

0
RadoslavStamboliev avatar RadoslavStamboliev 6 Точки

Това е моят код за Ремонт на плочки: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tile_repair
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = int.Parse(Console.ReadLine()); // strana ploshtadka    
            double a = double.Parse(Console.ReadLine()); //shirina plochki
            double b = double.Parse(Console.ReadLine()); //duljina plochki
            int c = int.Parse(Console.ReadLine()); //shirina peika         
            int x = int.Parse(Console.ReadLine()); //duljina peika        


            double ploshtadka = i * i;
            double ploshtpeika = c * x;
            double ploshtzapokrivane = ploshtadka - ploshtpeika;
            double ploshtplochki = a * b;
            //double plochki = (ploshtadka / ploshtplochki);                
            double plochki = ploshtzapokrivane / ploshtplochki;
            double vreme = plochki * 0.2;
            Console.WriteLine("{0:f2} ", +plochki);
            //Console.WriteLine("Plochki = {0} ", +plochki);                 
            //Console.WriteLine("Vreme za slagane = {0} ", vreme);           
            Console.WriteLine("{0:f2} ", vreme);
            
        }
    }
}
 

0
RadoslavStamboliev avatar RadoslavStamboliev 6 Точки

Ето в Pastebin 

https://pastebin.com/JVStNTLe

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