Решение на Домашно 04 от Основи на програмирането с Java - декември 2016
Дата: 21-ви януари 2017
Задача 01 ( Обръщение според възраст и пол )
За тази задача опитвах някакви варианти с char вместо String, но се отказах.
Задача 02 ( Квартално магазинче )
Ако желаете вместо вложен if може да се ползва switch, но целта на задачата беше да упражним вложени if конструкции, за това съм я направил така.
Задача 03 ( Точка в правоъгълник )
Използвах модифицирана версия на сорса от тази задача за 13-та задача. Няма нужда да "откриваме" велосипеда след като сме го направили 10 задачи по-рано ;-)
Задача 04 ( Плод или зеленчук? )
Използвах switch защото кодът е много по-чист и лесно четим.
Единственото "по-сложно" в тази задача е смесената проверска с || (логическо ИЛИ) и &&(логическо И), и отрицанието с ! (взимаме обратното на булевата променлива/израз в if).
Задача 06 ( Точка върху страната на правоъгълник )
Тук проверяваме дали точката е на някоя от линиите(граници) чрез сравняване на булевите резултати с || (логическо ИЛИ). Отново използвам модифициран код за 13-та задача.
Задача 07 ( Магазин за плодове )
Същата логика като в 4-та задача. Само добаваме цените на продуктите.
Задача 08 ( Търговски комисионни )
Като 7-ма задача, но с if проверка за интервал от чила, за да изчислим комисионната според интервала.
Задача 09 ( Ден на седмицата )
По скоро като 4-та задача. Може би тук се е очаквало да използваме swith за първи път в домашното.
Едно към едно с 4-та задача.
Като 7-ма задача.
Интересна задача. Обърнете внимание на това, че е задължително в изразите от тип double да използвате поне едно double число (каквото и да е число с десетична запетая).
Задача 13 ( * Точка във фигурата )
Много забавна задача. Изтормозих се, но не колкото с трабите в басейна. Тук използвам много булеви променливи, които надявам се говорят сами за себе си. Сорса на 3-та и 6-та задача ги използвам като функции, а използвам функции за да е по-лесно четима main() функцията/методът. Сложната фигува мислено и проиграмно я разделям на две прости фигури. Използвам два идентични по идея, но различни по съдържание, целочислени масива. В масивите записвам координатите на двете фигури (x1,y1 и x2,y2) и координатите на точката (x,y) която проверяваме. Координатите на търсената точка реално ги има и в двата масива, но това е с цел да опростя използването на функциите с които определяме къде е точката спрямо двете прости фигури. Тъй като двете прости фигури са долепени и имат обща стена, изключваме тази стена от проверката за "точка на границата". правим това чрез отрицание на булевата променлива с ! (логическо отрицание, или иначе казано взимаме обратната стойност на булевата променлива/израз).
Задача 14 ( Навреме за изпит )
Използваме същите похвати като в 7-ма и 14-та задаза от миналата лекция.
Тази задача май трябва да я напиша на ново за да си личи по-добре за какво става дума. Иначе си пработи :) Поради някаква причина съм решил да разделя изходният резултат на 3 стринга, което съвзем не е нужно или наложително. Трябва да се обърне внимание, че в заданието се иска резултатът да е на два реда.
С бърз преглед през гугъл намирам Math.floor() за закръгляне надолу. Трябва да пробвам довечера как става.
Math.floor() и на лекцията го имаше, обаче след като закръгли, изписва десетична точка и след нея нула, което не е същото като да отреже дробната част. Съответно Judge ще даде грешка.
Някъде попаднах на обяснение, че Math.floor() няма да работи при всички варианти, тъй като при отрицателни числа ще ги закръгля не към 0, а към минус безкрайност, т.е. да кажем -1.4 ще го закръгли на -2, а 1.4 - на 1. Винаги ще е надолу. Не знам дали в тестовете към задачата има и отрицателни стойности, но е по-добре с кастване.