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

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

първо да те успокоя и аз не го разбирам добре. нещото което направих е да потърся алгоритъм (не сорс код, а алгоритъм). и просто имплементирах алгоритъма с програмен код на джава. 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