Решение на Домашно 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 стринга, което съвзем не е нужно или наложително. Трябва да се обърне внимание, че в заданието се иска резултатът да е на два реда.
Много добро решение на проблема с общата стена на двете полуфигури. Браво!
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)));
}