Programming Basics - януари 2017 - задача от предишен изпит
Здравейте ,някой може ли да ми каже къде бъркам в писането на кодът?
Условие на задачата:
Напишете програма, която да пресмята цената на ново жилище, което има кухня, баня и 3 стаи. На входа програмата получава площта на кухнята и най-малката стая. Трябва да пресметнете площта на отделните помещения, за да намерите общата площ, като знаете че:
- Банята е наполовина по-малка от най-малката стая.
- Втората стая е 10% по-голяма от най-малката стая.
- Третата стая е 10% по-голяма от втората стая.
Към общата площ трябва да се прибавят 5% за коридор. На входа програмата получава и цена на квадратен метър.
Вход
Входът се чете от конзолата и съдържа точно 3 реда:
- Първия ред – площта на най-малката стая – реално число в интервала [1.00...100.00]
- Втория ред – площта на кухнята – реално число в интервала [1.00...100.00]
- Третия ред – цена на квадратен метър – реално число в интервала [1.00...1000.00]
Изход
Да се отпечата на конзолата цената на жилището, форматирана до вторият знак след десетичната запетая.
Примерен вход и изход
Вход |
Изход |
Обяснения |
20 10 699.99 |
63356.09 |
Втората стая = 20 + 10% = 22 Третата стая = 22 + 10% = 24.20 Банята = 20 / 2 = 10 Обща площ = 20 + 10 + 22 + 24.20 + 10 = 86.20 + 5% коридор = 86.20 + 4.31 = 90.51 Цена = 90.51 * 699.99 = 63356.094900000004 |
Решение:
import java.util.Scanner; public class HousePrice { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); double smallroom = Double.parseDouble(scanner.nextLine()); double kitchen = Double.parseDouble(scanner.nextLine()); double pricemetyr = Double.parseDouble(scanner.nextLine()); double secondroom = smallroom * (1 / 10) + smallroom; double thirdroom = secondroom * (1 / 10) + secondroom; double bath = smallroom / 2; double koridor = ((smallroom + kitchen + secondroom + thirdroom + bath) * (1 / 20)); double area = (smallroom + kitchen + secondroom + thirdroom + bath + koridor); double result = area * pricemetyr; System.out.println(result); } } Отговорът ми е 55999.2 вместо 63356.09.
Не ти хващам идеята как като принтирам число ще се получи ? пробвах
идеята е да видиш, че като работиш с цели числа(integer) и разделиш 1 на 10 с оператора / се получава 0, а не 0.1 както очакваш, и да го google-неш защо е така и да си решиш задачата сам
или гледай лекцията за прости пресмятания с числа пак
затова ползвам double ,за да мога да си работя с дробни числа.