Loading...

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

joto_to avatar joto_to 40 Точки

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

Работа с по-сложни цикли

Дата: 25-ти февруари 2017

Отново ви привтствам да разгледаме решенията на задачите, да споделите вашите решения, да задавате въпроси, да си помагаме.

По-късно днес ще разпиша и разясненията по решенията.

Задача 01 ( Числата от 1 до N през 3 )

Решена на лекцията. Индексът i на цикълът for можем да го променяме с каквато стъпка/формула си искаме. Не е задължително да е стойността +1 или -1.

Задача 02 ( Числата от N до 1 в обратен ред )

Решена на лекцията. Въртим цикъл for наобратно. От n до 0, като намаляме индексът и проверяваме дали е стигнал 0.

Задача 03 ( Числа от 1 до 2^n )

Решена на лекцията.

Задача 04 ( Четни степени на 2 )

Решена на лекцията.

Задача 05 ( Редица числа 2k+1 )

Не помня на лекцията дали я разписахме с for или с while, но сега ще го разпиша и с for за да видите как постигаме един и същи резултат с различните цикли. алтернативно решение.

Задача 06 ( Число в диапазона [1…100] )

 

Задача 07 ( Най-голям общ делител (НОД) )

 

Задача 08 ( Факториел )

 

Задача 09 ( Сумиране на цифрите на число )

 

Задача 10 ( Проверка за просто число )

 

Задача 11 ( Въвеждане на четно число (с обработка на грешен вход) )

 

Задача 12 ( Числа на Фибоначи )

 

Задача 13 ( Пирамида от числа )

 

Задача 14 ( Таблица с числа )

 

Задача 15 ( Генератор за тъпи пароли )

Много забавна задачка :)

Задача 16 ( Магически числа )  (леко променено решение)

 

 

Ами това е. Ако има нещо неясно питайте, ще обърна внимание на всеки. Публикувайте и вашите решения и нека ги обсъдим. И да не забравя.. поемам критики всякакви. Можем само да се поучим от тях ;)

0
Programming Basics 21/02/2017 23:44:32
pavsavov avatar pavsavov 18 Точки

Понеже мъча 7-а.  И само донякъде я бях докарал,та въпроса ми е за нея

while (b != 0){
    int numC = b;
    b = a % b;
    a = numC;
}

Ето тази част не ми е много ясна. Въпреки,че я дебъгвах някак си немога да схвана логиката.

Поправи ме ако грешно те разбирам(сто про ще има какво да ме поправяш,де :) ).

Така както го прочитам, въвеждаш 3-та променлива,която да приема стойността на Б.

Същевременно  Б ти е равно на остатъка от делението на А и Б и накрая А е равно на новата,трета променлива.

И всичко това ще се върти,ако б НЕ е равно на 0.  

Така го чета ама не го разбирам.Отделно защо работи без да има нужда от " break; " ? Не би ли трябвало да върти защото условието е неизпълнимо. Един вид Б никога няма да бъде 0,затова да трябва да върти ? Аз поне с такова впечатление останах за while конструкцията.

 

0
joto_to avatar joto_to 40 Точки

първо да те успокоя и аз не го разбирам добре. нещото което направих е да потърся алгоритъм (не сорс код, а алгоритъм). и просто имплементирах алгоритъма с програмен код на джава. numC играе ролята на памет, запаметява стойността на b. правиш деление с остатък и записваш остатъка в b, а първоначалната стойност на b, която е записана в паметта numC я записваш в a. по този начин следващият път като завъртиш цикъла в делението с остатък делиш първата стойност на b с остатъка от a%b. един вид правиш деление с остатк с остатъка на входните(първите) числа. мисля че го казаха на лекцията, че програмистите не е нужно да изборетяват сами супер сложни алгоритми, които са отнели 100 години на математиците. нужно е ние като програмисти да можем да намерим алгоритъма и да го разпишем като програма. и тъй като евентуално остатъка от остатъка от остатъка... колкото пъти е нужно да се извърши операцията в един момент ще стане нула и за това не е безкраен цикъла и за това не ползваме break. математиците да си мислят сложните алгоритми, ние ще ги разписваме с програмен код. цикъла while ти си избираш дали да го въртиш до безкрайност и да го break-неш или да му зададеш горе условие което да го break-не. например в лекцията където правим хващане на грешки с try и catch (задача 11). там нарочно правим безкраен цикъл while(true) и в него е try/catch конструкцията, за да може като получиш грешка/изключение да не приключи програмата а да се върнеш в началото и да опиташ пак (try). и ако стигнем до последният ред на try, и нямаме грешка, с break чупим безкрайният цикъл while(true).

0
pavsavov avatar pavsavov 18 Точки

Много ти благодаря. "numC играе ролята на памет, запаметява стойността на b. правиш деление с остатък и записваш остатъка в b, а първоначалната стойност на b, която е записана в паметта numC я записваш в a" ето това изречение ще трябва да явно да си го набия в главата,защото ми звучи абстрактно,но на този етап ще го приема,че просто така работи :).

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

http://pastebin.com/WL4BbTxa

 

Разликата е в една дума,но понеже помислих,че Judge желае последната цифра от фактурела,затова така

0
21/02/2017 22:52:00
Jovtcho avatar Jovtcho 20 Точки

Надявам се теи два линка малко да изяснят логиката на 7ма задача.

https://bg.wikipedia.org/wiki/%D0%9D%D0%B0%D0%B9-%D0%B3%D0%BE%D0%BB%D1%8F%D0%BC_%D0%BE%D0%B1%D1%89_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB

https://bg.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D1%8A%D0%BC_%D0%BD%D0%B0_%D0%95%D0%B2%D0%BA%D0%BB%D0%B8%D0%B4

0
21/02/2017 23:40:28
Jovtcho avatar Jovtcho 20 Точки

Здрасти,

ето и моите решения на задачите. Ще се радвам да чуя коментари.

http://pastebin.com/1D8EX4Ls - Число в диапазона [1…100]

http://pastebin.com/Y9x05nHv - Най-голям общ делител

http://pastebin.com/HE1ZTNHW - Факториел

http://pastebin.com/YvUfrAVL - Сумиране цифрите на число

http://pastebin.com/wf4yD6aV - Проверка за просто число

http://pastebin.com/QxNAhCF3 - Въвеждане на четно число с проверка

http://pastebin.com/TThJbq7t - Фибоначи

http://pastebin.com/27z5jfag  - Пирамида от числа

http://pastebin.com/hdaT79ih - Таблица от числа

На задачите за пирамидата и таблицата от числа не съм махал спейса след последното число на всеки ред. Нещо не ми се занимаваше, а може би е добре да го направя.

http://pastebin.com/XZ4Z4iD4 - Генератор за тъпи пароли

Тук също не махам спейса след последно генерираната парола.

http://pastebin.com/ceuLUG1Z - Магически числа

Тук също не махам спейса след последно генерираното число.

0
Gyunay93 avatar Gyunay93 0 Точки

Може ли да ми обясниш защо започваме от digit6?

0
23/02/2017 13:39:24
Jovtcho avatar Jovtcho 20 Точки

Просто броя цифрите в числото отдясно наляво. Най-дяснта цифра в числото е digit1, a най- лявата digit6.

Пример:

Число - 246813

digit1 = 3   digit2 = 1   digit3 = 8   digit1 = 3    digit4 = 6    digit5 = 4    digit6 = 2

 

 

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