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 |
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 ми дава нещо съвсем различно?
Ето това е кода:
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);
Да, прави сте. Сега по другия въпрос, понеже започнахте по-горе. В една друга задача трябва да накарам нулата да се покаже след 19.9 на изхода (т.е. да стане 19.90) обаче не иска. Търсих в гугъл, но нищо не става. Горната команда с :f2 също не ми работи?
EDIT: Като тествам задачата "Дневна печалба" по вашия начин , джъджа ми казва: "Грешка при компилация", не знам кво се случва.
А каква е задачата ?
Ремонт на плочки
На площадката пред жилищен блок трябва да се поставят плочки. Площадката е с форма на квадрат със страна 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 числа, въведени от потребителя:
Изход
Да се отпечата на конзолата две числа: броят плочки, необходим за ремонта и времето за поставяне, всяко на нов ред. Резултатът да се форматира до втория знак след запетаята.
Примерен вход и изход
Вход
Изход
Обяснения
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);
Не мога да накарам нулата да се появи на първия изход.
Опитай с това:
Console.WriteLine("{0:f2}", neobPlochki);
Така стана, благодаря.
EDIT: Явно има проблеми с джъджа, постоянно дава "Грешка при компилация".
Вместо Console.WriteLine(Math.Round(incomesEUR, 2));
Използвай Console.WriteLine("{0:0.00}", incomesEUR);
При мен това свърши работа.
За да изпише нулата след запетаята,
вместо 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;
и вече смята вярно.
Здравейте, да се върна на задачата с плочките. След като накарах нулата да се появи, judge продължава да се запъва и сега ми дава 30/100. Не разбирам, изразите със скобите ли не му харесват или? Някой идеи? Иначе изходите ми се получават с примерните.
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 ги използвайте, за да опростите кода, при толкова много букви и скоби лесно се допуска грешка при писането, която трудно ще се види после.
Това е моят код за Ремонт на плочки:
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);
}
}
}
Ето в Pastebin
https://pastebin.com/JVStNTLe