Programming Basics - януари 2017 - задача от предишен изпит - Софтуерен университет

Programming Basics - януари 2017 - задача от предишен изпит - Софтуерен университет

+ Нов въпрос
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 156 Точки

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

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

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

0
ppbaev avatar ppbaev 156 Точки

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

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

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

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

0
LepTon avatar LepTon 5 Точки

На първо четене вместо 1/10 и 1/20 ги замести съответно с 0,5 и 0,05.

А ето код за 100 точки:

package com.company;
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
       Scanner input = new Scanner(System.in);
      double areaMinRoom = Double.parseDouble(input.nextLine());
      double areaKitchen = Double.parseDouble(input.nextLine());
      double priceOneMetar = Double.parseDouble(input.nextLine());
      double areaBadRoom = 0.5 * areaMinRoom;
      double areaTwoRoom = 1.1 * areaMinRoom;
      double areaThreeRoom = 1.1 * areaTwoRoom;
      double allArea = areaMinRoom + areaKitchen + areaBadRoom + areaTwoRoom + areaThreeRoom;
      double areaKoridor = allArea * 0.05;
      double totalArea = allArea + areaKoridor;
      double priceTotalArea = priceOneMetar * totalArea;
      System.out.printf("%.2f%n", priceTotalArea);
    }
}

 

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

Искаш да кажеш с 0.1 и 0.05.Зааместих и получих почти същия отговор 63356,09,но не разбирам защо като са написани по този начин - 1/10 ,1/20 ... не се получава? и благодаря за отговора!

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

Като смених стойностите стана 100/100.С този код :

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 * (0.1) + smallroom;
        double thirdroom = secondroom * (0.1) + secondroom;
        double bath = smallroom / 2;
        double koridor = ((smallroom + kitchen + secondroom + thirdroom + bath) * (0.05));
        double area = (smallroom + kitchen + secondroom + thirdroom + bath + koridor);
        double result = area * pricemetyr;
        System.out.printf("%.2f" , result);

    }

}
0
LepTon avatar LepTon 5 Точки

При 1/10 и 1/20 се получава целочислено деление т.е. отрязва се дробната част, докато  0.5 и 0.05 са дробни числа и не си форматирал изхода до втория знак.

0