[Homework] C# Basics - "Математика за програмисти" (Enthusiast)
Здравейте , относно задачите от това домашно , решил съм ги с код , надявам се не е грешно . Разбрах , че не беше нужно да се пише цял код а само отговорите , но имах свободно време и желание да го направя. Ако някой би искал да види решението в код да пише тук , ще ги пейстна в Pastebin и евентуално да го обсъдим с по нахъсаните - добре ли е или не е.
п.с. ето ги направо всички форматирани:
num се използва като горна граница на for loop-а и ако се променя стойността му ще повлияе на for loop-a - т.е. няма да се изпълнява желания брой пъти, ами повече или по-малко. Затова е използвана втора променлива - temp.
Kamigawa всъщност Viktor_Boyanov е прав сложил съм излишен big integer - temp защото num не се променя през цялото време има x в for цикъла който се опитва да стане колкото нъм
п.с. благодаря на всеки който дава мнение , за да помогне както на мен така и на останалите заинтересовани , да си намирам грешките , които не са малко и са елементарни като гледам :)
Не мога да се съглася (освен ако не ви разбирам погрешно идеята).Пробвах го(за да бъда не пиша наизуст) и никога не спира loop-a(погледнато реално ще спре като си препълни паметта де), понеже num се увеличава геометрично (заради умножението), докато x се увеличава аритметично(или там както се наричаше, заради събирането с 1).
аз пък съм с орязан визуал студио че съм на работа и не мога да намеря как да сложа биг нъм и не мога да го тествам може и да си прав но на пръв поглед ми се видя , че е излишен както и да е ясно е , че още не знам да пиша правилен код без излишни редове , но всеки коментар по темата е от полза
Мога да ти дам един съвет - поне в началото като се учиш се стреми да излиза вярно решението и кода да е правилно написан (имена на променливи, логически връзки и т.н.), без да те притеснява, че имаш 20 реда код „излишни“. Веднъж като схванеш основите на нещата и правиш гореспоменатото без проблем, тогава може да се притесняваш, че решението е 50 реда, а може да бъде 10.
прав си трябва да има последователност в ученето и мисля , че ако вървя по ред елементарно нещо като правилното именуване трябва да е едно от първите неща , които трябва да свикнем да правим
Имам още едно въпросче. Все още нямах възможността да се пробвам да подкарам какъвто и да е код, но доколкото знам като му дам да изпълни кода тогава задавам и параметрите. Съответно като задам, например, "num" да е 250(едно от числата, които търсим), тоагава и първоначалната стойност на "temp" ще бъде 250, следователно ако следваме логиката на цикъла получаваме следното(в числени стойности):
250 = 250 х 1, което е равно на 250
--> 250 = 250 х 2, което е равно на 500
--> 500 = 500 х 3 = 1500 и т.н., докато достигнем максималната стойност на i - 250.
Това, което не мога да разбера е как тази формула е равна на 250х249х248...х1? Според мен така ще получим доста по-голямо число от това, което търсим. Не трябва ли по-скоро да зададем първоначално "х" да е равно на 249, да намаля с 1-ца и по някакъв начин(не знам как :) ) да зададем на цикъла да спре да се изпълнява като "х" стане 1 и по този начин ще получим:
250 = 250 х 249 = 62 250
---> 62 250 = 62 250 х 248 = 15 438 000
---> 15 438 000 = 15 438 000 х 247 = .... и така докато стигнем до стойността на х да е 1?
Не мога да се ориентирам, но ако питаш за същата задача там "num" иска да му кажеш факториала на кое число да ти покаже , после в цикъла създаваме променлива "х=1" която всъщност циклим и увеличаваме с единица докато "х " не стане равно на "num" а при всяко увеличаване на "х" го омнужаваме по текущата стойност на "num" , с f10 дебъгваш ред по ред в визуал студио най-лесно ще го разбереш там ако не съм успял да ти обясня
п.с. или най-добре изчакай лекцията с цикли и там ще ти стане още по-ясно как точно функционират.
Прав си, с дебъг сигурно ще ми стане по-ясно, ако не ще чакам до лекцията :)
Абсолютно достатъчно е само temp да е Biginteger, за другите променливи int-а върши работа. Другото е много добре. А според мен е добре и отпечатването да излезе извън цикъла. Поне ще се виждат само цифрите на търсеното число.