Пра навыкі праграмавання

Пра навыкі праграмавання

Нядаўна на працы давялося вырашаць даволі простую, і ў той жа час цікавую практычную задачу. Патрэбна было разлічыць і паказаць у адсотках запоўненасць бягучага ўзроўня гульні адносна агульнай колькасці ачкоў. Дадатковай складанасці дадаваў той факт, што крок паміж узроўнямі мог змяняцца.

Для аднаго ўзроўня разлічыць значэнне даволі лёгка. Я нават прапанаваў гэтую задачу сваяку, які займае месцы на школьных алімпіядах. І ён паспяхова зрабіў матэматычную частку, але калі дайшла справа да рашэння задачы цалкам, пачаліся складанасці. І прычына была ў тым, што яму бракавала навыкаў праграмавання.

Што за навыкі праграмавання?

Большасць аперацый ў праграмаванні – гэта аўтаматызацыя нейкіх дзеянняў, то бок паўтарэнее нейкай аперацыі над асобным элементам з набору нейкіх даных.

Так сама да навыкаў праграмавання адносіцца і ўменне выкарыстоўваць умоўныя аператары бінарнай логікі. Але з гэтым навыкам павінна быць прасцей, усе ж людзі умеюць рабіць высновы і прымаць рашэнні, як раз карыстаючыся такой логікай.

Камбінацыя ведаў пра магчымыя аперацыі над данымі і практычны вопыт і ствараюць тыя самыя навыкі праграмавання.

А навошта імі валодаць?

Апошні час вельмі актыўна развіваюцца розныя no-code інструменты, аўтары якіх заяўляюць, што любы чалавек, не ведаючы пэўную мову праграмавання, можа зрабіць нейкі карысны інструмент. І гэта праўда, калі чалавек валодае базавымі навыкамі праграмавання, інакш не атрымаецца. Таму развіваць навыкі праграмавання становіцца неабходнай задачай у наш час.

Нават зрабіць нейкія аперацыі над данымі ў Excel, гэта так сама пэўнага ўзроўню праграмаванне, хоць і ў вельмі спрошчаным выглядзе. Такіх задач будзе станавіцца ўсё болей, таму валодаць базавымі аперацыямі патрэбна, як і матэматыкай.

Алгарытм рашэння задачы

Вяртаючыся да задачы, рашэнне яе даволі простае і эфектыўнае, таму што патрабуе толькі адзін “праход” на набору ўзроўняў. Дастаткова разлічыць працэнт для кожнага ўзроўня па формуле (points - bottom) / (margin - bottom) * 100, дзе:

points - агульная колькасць ачкоў на балансе гульца
bottom - колькасць ачкоў для папярэдняга ўзроўня
margin - колькасць ачкоў для бягучага ўзроўня

Спіс узроўняў выглядае як калекцыя гранічных значэнняў ачкоў, па дасягненні якой павялічваецца ўзровень: [50, 75, 100, 150, 210]

Але тут яшчэ патрэбна ўлічваць той факт, што калі разлічыць паказчык для ўзроўня ніжэй за бягучы, то значэнні будуць заўседы больш за 100%, а калі разлічыць для ўзроўняў вышэй за бягучы, то значэнні будуць увогуле адмоўныя. Каб вырашыць гэтую праблему, дастаткова звярнуцца да ўбудаваных у любую мову праграмавання функцый min і max.

max(0, min(100, round((points - bottom) / (margin - bottom) * 100)))

Такім чынам, мы спачатку зробім усе значэнні, якія вышэй за 100 адсоткаў, роўнымі 100 адсоткам з дапамогай функцыі min, то бок гэтыя ўзроўні ўжо гарантавана завершаны.

Для усіх адмоўных значэнняў зробім найменшае значэнее роўным 0 з дапамогай функцыі max, то бок гэтыя ўзроўні яшчэ нават не пачыналіся. Ну а для бягучага ўзроўня атрымаем правільнае значэнне ў адсотках, адносна якога потым можна намаляваць палоску запаўнення.

Калі такі фармат разбораў задач вам цікавы, падтрымайце калі ласка падпіскай мой YouTube-канал, дзе хуткім часам я планую рабіць відэа-разборы.

На чытанне спатрэбілася 3 хвіліны Нататка змяшчае 471 слова

Сябры, акрамя блога, я амаль што рэгулярна пішу адмысловую рассылку пра праграмванне і тэхналогіі, дзе раз на двы тыдні збіраю самыя цікавыя навіны тэхналогій і раблю агляд цікавых інструментаў, якія мне трапіліся. Таму хутчэй падпісвайцеся, каб не прапусціць штосці цікавае наступным разам!