Софтуерно Инженерство
Loading...
fpetrov8906 avatar fpetrov8906 2 Точки

Тази част от кода ми е искало да бъде в if-a {}

pipe1 = Math.Truncate(pipe1);

pipe2 = Math.Truncate(pipe2);

capacity = Math.Truncate(capacity);

percent = Math.Truncate(percent);

0
st.penchev avatar st.penchev 3 Точки

Колеги, ако може малко помощ и на мен. Judge дава 76/100. Не мога да открия грешка.

Ето го и кода:

import java.util.Scanner;

public class Pipes {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

         int v = Integer.parseInt(scanner.nextLine());
         int p1 = Integer.parseInt(scanner.nextLine());
         int p2 = Integer.parseInt(scanner.nextLine());

         double h = Double.parseDouble(scanner.nextLine());

         double vol1=h*p1;
         double vol2=h*p2;
         double totalvol=vol1+vol2;

         double fullpercent=(totalvol/v)*100;
         double percent1=(vol1/totalvol)*100;
         double percent2=(vol2/totalvol)*100;

         if (totalvol<=v){

             System.out.printf("The pool is %d%% full. Pipe 1: %d%%. Pipe 2: %d%%.", (int)fullpercent, (int)percent1, (int)percent2);
          

        }
        else {
             System.out.printf("For %.1f hours the pool overflows with %.1f liters.", h, totalvol-v);
           
         }

    }


}
 

0
veronikaaa86 avatar veronikaaa86 351 Точки

Първо всички проценти се свеждат до цяло число - и във втората ти проверка процента трябва да е цяло число, а не %.1f.

Другото по-важно е че задачата е правена за C# и трябва да използваш Decimal Format за решение за Java за този процент във втората проверка:

else {             
DecimalFormat df = new DecimalFormat("0.##");
System.out.printf("For %s hours the pool overflows with %.1f liters.", df.format(h), totalvol-v);

Ето поправено твое решение:  https://pastebin.com/vb3Fu4K5

Дано да съм помогнала :)

 

0
st.penchev avatar st.penchev 3 Точки

Разбира се че сте помогнали. Благодаря Ви.

Но все още не са ми ясни следните неща:

1. (int)fullpercent - това всъщност връща цялата част - тоест цяло число, без закръгляне от double. Което отговаря на това което казвате - процентите до цяло число. Както се изисква в условието. Предполагам съм прав ? 

2. Във втората проверка няма проценти - там имаме часове и литри - и двете са числа с плаваща запетая и както е посочено в условието трябва да са закръглени до първия знак след десетичната запетая. Нещо което постигам с %.1f. Или бъркам ?

3. "задачата е правена за C#" - тука ме загубихте - нищо не ми говори това... а и не би ли следвало да си има решение и на Java ? И съответно judge да може правилно да го оцени ?

4. Decimal Format - казвате да позлвам това за проверката в else-a. Хубаво, но единствената разлика която виждам в резултата е че при мен връща примерно 2.5, с decimal 2,5 (при мен с точка, с decimal е запетая...ако не откривате разликата).

5. DecimalFormat("0.##") - това не форматира ли до втория знак  ако има втора значеща цифра? И то закръгля, нещо което е подчертано в условието че не трябва да става... Или аз бъркам... поне така разбирам от примера даден в stackoverflow:

public static final DecimalFormat df1 = new DecimalFormat( "#.##" );
public static final DecimalFormat df2 = new DecimalFormat( "#.00" );

System.out.println(df1.format(7.80));
System.out.println(df1.format(85));
System.out.println(df1.format(85.786));

System.out.println(df2.format(7.80));
System.out.println(df2.format(85));
System.out.println(df2.format(85.786));

And the output will be

7.8
85
85.79

7.80
85.00
85.79

6. Има ли как в judge да видя грешните резултати ? 

Test #4 (Incorrect answer)

Time used: 0.028 s

Memory used: 1.10 MB

Test #5 (Incorrect answer)

Time used: 0.024 s

Memory used: 1.10 MB

Test #12 (Incorrect answer)

Time used: 0.024 s

Memory used: 1.11 MB

 Има ли как да се види какво точно е грешно ? Какъв е входа и очаквания изход примерно...?

7. System.out.printf("For %s hours the pool overflows with %.1f liters.", df.format(h), totalvol-v);

%s ми говори че df.format(h) e всъщност числото форматирано, но конвертирано в стринг ? Или бъркам ? Това обяснява запетаята по-горе....

8. Възможно ли е да ми дадете пример в който моето решение се дъни за да го видя ?

Въпреки горните ми размишления и неясности факт е че judge даде 100/100 на програмата с поправката....

Съжелявам ако въпросите ми ви звъчат тъпо, но нямам опит и искам да си обясня правилно нещата.

 

 

0
veronikaaa86 avatar veronikaaa86 351 Точки

Хич не са ти тъпи въпросите, съвсем скоро и аз си ги задавах :)

Не знам дали ще успея да отговоря на всичките въпроси, но ще опитам:

1. Да, връща цяло число без закръгляне.

2. Грешката е моя, часове са (решавам друга задача...и докато превключа...:))....но в условието е казано да e число с плаваща запетая само за литрите, за часовете не е написано какво да ги правим : 

·Aко басейнът се е препълнил – с колко литра е прелял за даденото време, число с плаваща запетая

  • "For [x] hours the pool overflows with [y] liters."

3. Езиците C# и Java са много близки, но все пак имат разлика в синтаксиса мисля. Тази задача е от стар изпит, когато изпитите са били (мисля) само за C# и трябва допълнително нагаждане, така да се каже към  Java. Питах и трейнъра за задачата и той ми каза същото.

4. Не мисля, че може да е със запетая в отпечатването. На мен никога не ми се е случвало, десетичната запетая тук е точката. Запетаята означава друго.

5. Да, форматира и закръгля до втория знак след запетаята и връща стринг. Това беше единственото, което ми пречеше на 100-те точки в Judge. Защо да е указано да не се закръгля? За часовете има условие единствено във Входа на потребителя, че трябва да е с плаваща запетая:

  • Четвъртият ред съдържа числото H – часовете които работникът отсъства – число с плаваща запетая в интервала [1.0…24.00]

 

В първия случай от примера (df1) на stackoverflow ще сложи втори знак след запетаята, ако има такъв, а ако има повече от два ще закръгли до 2-ия.

При df2 - ще сложи нула след първия знак, ако нямаме втори такъв, след запетаята разбира се, а ако пак са повече от 2, ще ги закръгли.

Тук има хубава информация за Decimal format - https://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html

 

 

1
27/09/2017 20:01:56
veselin1985 avatar veselin1985 0 Точки

Здравейте Вероника,


Каква е разликата в използването на Decimal Format и закръглянето с %.1f ? Имах същия проблем и преди да използвам DF в judge ми даваше само 76 от 100 ?

 

0