Loading...
joto_to avatar joto_to 40 Точки

Решение на Домашно 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 40 Точки

С бърз преглед през гугъл намирам 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 567 Точки

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

2
joto_to avatar joto_to 40 Точки

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

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 40 Точки

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

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

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

 

0
MartinBG avatar MartinBG 4803 Точки

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

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

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

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

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

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

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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.