Професионална програма
Loading...
+ Нов въпрос
joto_to avatar joto_to 39 Точки

Решение на Домашно 04 от Основи на програмирането с Java - декември 2016

По-сложни логически проверки

Дата: 21-ви януари 2017

 

Задача 01 ( Обръщение според възраст и пол )

За тази задача опитвах някакви варианти с char вместо String, но се отказах.

Задача 02 ( Квартално магазинче )

Ако желаете вместо вложен if може да се ползва switch, но целта на задачата беше да упражним вложени if конструкции, за това съм я направил така.

Задача 03 ( Точка в правоъгълник )

Използвах модифицирана версия на сорса от тази задача за 13-та задача. Няма нужда да "откриваме" велосипеда след като сме го направили 10 задачи по-рано ;-)

Задача 04 ( Плод или зеленчук? )

Използвах switch защото кодът е много по-чист и лесно четим.

Задача 05 ( Невалидно число )

Единственото "по-сложно" в тази задача е смесената проверска с || (логическо ИЛИ) и &&(логическо И), и отрицанието с ! (взимаме обратното на булевата променлива/израз в if).

Задача 06 ( Точка върху страната на правоъгълник )

Тук проверяваме дали точката е на някоя от линиите(граници) чрез сравняване на булевите резултати с || (логическо ИЛИ). Отново използвам модифициран код за 13-та задача.

Задача 07 ( Магазин за плодове )

Същата логика като в 4-та задача. Само добаваме цените на продуктите.

Задача 08 ( Търговски комисионни )

Като 7-ма задача, но с if проверка за интервал от чила, за да изчислим комисионната според интервала.

Задача 09 ( Ден на седмицата )

По скоро като 4-та задача. Може би тук се е очаквало да използваме swith за първи път в домашното.

Задача 10 ( Тип на животно )

Едно към едно с 4-та задача.

Задача 11 ( Кино )

Като 7-ма задача.

Задача 12 ( Волейбол )

Интересна задача. Обърнете внимание на това, че е задължително в изразите от тип double да използвате поне едно double число (каквото и да е число с десетична запетая).

Задача 13 ( * Точка във фигурата )

Много забавна задача. Изтормозих се, но не колкото с трабите в басейна. Тук използвам много булеви променливи, които надявам се говорят сами за себе си. Сорса на 3-та и 6-та задача ги използвам като функции, а използвам функции за да е по-лесно четима main() функцията/методът. Сложната фигува мислено и проиграмно я разделям на две прости фигури. Използвам два идентични по идея, но различни по съдържание, целочислени масива. В масивите записвам координатите на двете фигури (x1,y1 и x2,y2) и координатите на точката (x,y) която проверяваме. Координатите на търсената точка реално ги има и в двата масива, но това е с цел да опростя използването на функциите с които определяме къде е точката спрямо двете прости фигури. Тъй като двете прости фигури са долепени и имат обща стена, изключваме тази стена от проверката за "точка на границата". правим това чрез отрицание на булевата променлива с ! (логическо отрицание, или иначе казано взимаме обратната стойност на булевата променлива/израз).

Задача 14 ( Навреме за изпит )

Използваме същите похвати като в 7-ма и 14-та задаза от миналата лекция.

Задача 15 ( Пътешествие )

Тази задача май трябва да я напиша на ново за да си личи по-добре за какво става дума. Иначе си пработи :) Поради някаква причина съм решил да разделя изходният резултат на 3 стринга, което съвзем не е нужно или наложително. Трябва да се обърне внимание, че в заданието се иска резултатът да е на два реда.

2
Programming Basics
danslavov avatar danslavov 22 Точки

На задача 12 за волейбола и аз извеждам резултата  с кастване (int), а в обясненията пише да използваме Math.Truncate, ама такова чудо никъде не намерихsurprise

1
joto_to avatar joto_to 39 Точки

С бърз преглед през гугъл намирам Math.floor() за закръгляне надолу. Трябва да пробвам довечера как става.

0
danslavov avatar danslavov 22 Точки

Math.floor() и на лекцията го имаше, обаче след като закръгли, изписва десетична точка и след нея нула, което не е същото като да отреже дробната част. Съответно Judge ще даде грешка.

0
Stranger83 avatar Stranger83 0 Точки

Някъде попаднах на обяснение, че Math.floor() няма да работи при всички варианти, тъй като при отрицателни числа ще ги закръгля не към 0, а към минус безкрайност, т.е. да кажем -1.4 ще го закръгли на -2, а 1.4 - на 1. Винаги ще е надолу. Не знам дали в тестовете към задачата има и отрицателни стойности, но е по-добре с кастване.

0
Sim0o0na avatar Sim0o0na Trainer 566 Точки

Чудесно е, че споделяш работата си във форума за твоите колеги, съветвам те да го правиш и за напред. Качвай ги и в github и го прикачай към различни профили. Успех :)

2
joto_to avatar joto_to 39 Точки

Благодаря за съветите.

1
ivan.tod.ivanov avatar ivan.tod.ivanov 9 Точки

12та задача съм я направил с Math.floor()  и Switch - case. Ако на някой му е интересно може да я види тук: http://pastebin.com/4b6B2vfG

0
Jovtcho avatar Jovtcho 20 Точки

Здравей колега,

Ти си доста по-напреднал от повечето от нас. След като си направя задачите после ги сравнявам с твоите, за да видя и друг начин на мислене.

Позволявам си при твоите решения да сложа и моето решение на задачата "Точка във фигурата". Също като теб разделям фигурата на 2 правоъгълника.

http://pastebin.com/c5cpwmHQ

 

 

0
joto_to avatar joto_to 39 Точки

Благодаря за комплимента, но ми се струва незаслужен. Твоето решение ми харесва много повече от моето. По-разбираемо е, по-упростено е. В желанието си да не пиша на ново код който вече съм написал си копирах кода от други две задачи и ги направих на функции. После трябваше да измисля начин да им давам и връщам променливи в "удобен" вид, което още повече ми усложни кода. Всеки път си добре дошъл да си споделяш решенията. Благодаря, че го направи този път.

0
28/01/2017 10:53:38
Jovtcho avatar Jovtcho 20 Точки

И аз благодаря. Важното е да споделяме различни решения, за да се учим един от друг.

 

0
MartinBG avatar MartinBG 3084 Точки

Задача 13 има много възможни решения и аз лично се забавлявах докато я решавах.

Ще споделя едно от решенията ми: http://pastebin.com/5uHY2yrp

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

Използването на методи конкретно в тази задача не е наложително, тъй като се извикват само по веднъж, но разбиването на кода на по-малки специализирани блокове прави програмата по-четима и улеснява дебъгването (намирането на грешки).

0
30/01/2017 17:29:47
joto_to avatar joto_to 39 Точки

Много добро решение на проблема с общата стена на двете полуфигури. Браво!

private static boolean isInside(int h, int x, int y){
        return (((y < h) && (y > 0) && (x > 0) && (x < 3*h)) ||
                ((y >= h) && (y < 4*h) && (x > h) && (x < 2*h)));
    }

0
torosian88 avatar torosian88 6 Точки

Супер ! Благодаря , че сподели  !

0