Loading...

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

Radoslav.Tsanev avatar Radoslav.Tsanev 1 Точки

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.
0
Общи приказки
ppbaev avatar ppbaev 157 Точки

напиши само System.out.println(1 / 10);  и го пусни и виж резултата, от там ще се усетиш къде е проблема

0
01/02/2017 21:12:58
Radoslav.Tsanev avatar Radoslav.Tsanev 1 Точки

Не ти хващам идеята как като принтирам число ще се получи ? пробвах

0
ppbaev avatar ppbaev 157 Точки

идеята е да видиш, че като работиш с цели числа(integer) и разделиш 1 на 10 с оператора / се получава 0, а не 0.1 както очакваш, и да го google-неш защо е така и да си решиш задачата сам

или гледай лекцията за прости пресмятания с числа пак

0
01/02/2017 22:24:03
Radoslav.Tsanev avatar Radoslav.Tsanev 1 Точки

затова ползвам double ,за да мога да си работя с дробни числа.

0
ppbaev avatar ppbaev 157 Точки

добра идея да ползваш double, само че си сложил скоби на двете места (1 / 10) и на (1 / 20) изразите вътре се изчисляват като операции с integer преди да се присвоят на double променливите

махни скобите примерно и ще ти работи правилно, ама е по важно да разбереш защо става така по принцип

0
01/02/2017 22:37:30
Radoslav.Tsanev avatar Radoslav.Tsanev 1 Точки

Сега те разбрах,мерси!Не знаех.

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