Час 8 - Цели и реални бројеви, дељење¶
Цели и реални бројеви¶
До сада смо у задацима користили само природне бројеве. Језик Python
подржава и рад са целим бројевима (који укључују и негативне
вредности) и они се записују на исти начин као у математици. На
пример, вредност израза 3 - 8
је -5
док је вредност израза
(-3) - (-8)
број 5
. На енглеском се цели бројеви називају
integers, па се за променљиве и изразе чија је вредност целобројна
каже да су типа int.
Реалне бројеве је такође веома једноставно користити, једино што се
уместо децималног зареза на који смо навикли у математици мора
користити децимална тачка. Тако се, на пример, број 2,5 записује као
2.5
. За реалне бројеве у рачунару се кажу да су записани у облику
покретног зареза (енгл. floating point), па се за променљиве и
изразе чија је вредност реалне кажу да су вредност типа float.
Решимо сада и неколико задатака који укључују и рад са бројевима који нису природни.
Бајкалско језеро¶
Бајкалско језеро у Русији је најдубље језеро на свету. Оно је криптодепресија јер се његово дно (најнижа тачка) налази на 1,181 километара испод нивоа мора, а површина му се налази на 456 метара надморске висине. Израчунај његову највећу дубину у метрима.
Криптодепресија је удубљење испуњено водом, чија је површина изнад нивоа мора, а дно испод нивоа мора. Потиче од грчке речи крипто, што значи скривен или тајан, и речи депресија, што у географији представља израз за предео нижи од нивоа површине мора. Криптодепресије су углавном језера. Највећа криптодепресија на свету је управо Бајкалско језеро, а у Европи је то језеро Ладога. На Балканском полуострву највећа криптодепресија је Скадарско језеро на граници Црне Горе и Албаније. Криптодепресије обично настају када се раседи и расцепи у земљиној кори испуне водом.
Куповина намирница¶
Марко је купио 0,45 kg саламе, 0,25 kg сира и два паковања од по 0,3 kg шунке. Колико је тешка кеса коју носи кући?
Банковни рачун¶
Ђура је уплатио летовање пре него што је добио плату и ушао је у тзв. дозвољени минус тј. након те уплате дуговао је банци 12.376,5 динара. Три дана касније на рачун му је уплаћена плата од 43.386,9 динара. Колико му је тада било стање на рачуну.
Допуни наредни програм тако да коректно решава тражени задатак
Након покретања, програм треба да испише вредност 31010.4
.
Исправи сада програм тако да се почетно стање и износ уплате учитава
на почетку рада програма. Подсетимо се, учитавање реалног броја може
се извршити помоћу float(input("..."))
.
Реално дељење¶
У наставку ћемо се посветити операцији дељења. У већини програмских језика разликују се два облика дељења: реално и целобројно. Резултат (количник) реалног дељења је реалан број (на пример, када се 13 реално дели са 4, добија се количник 3,25), док је код целобројног дељења количник увек цео број, при чему је могуће да постоји и целобројни остатак (на пример, када се 13 целобројно дели са 4, добија се количник 3 и остатак 1).
Реалним дељењем се могу делити и реални и цели бројеви, а резултат је
реалан број. На пример, ако се користи реално дељење тада је 7,5 :
2,5 једнако 3 док је 5 : 2 једнако 2,5. Реално дељење се у
језику Python3 обележава знаком /
. Тако је вредност израза 7.5 /
2.5
једнака 3.0
.
Провери своје знање наредним питањем.
Вредност израза 4.5 / 5
је
Посматрајмо наредни једноставан задатак у којем ћемо употребити реално дељење.
Просек скокова у даљ¶
Скакач у даљ је у квалификацијама у првој серији скочио 8,12, у другој 8,23, а у трећој 8,17 метара. Колико је износио његов просечни скок?
Просек (каже се и аритметичка средина) неколико бројева једнак је количнику њиховог збира и њиховог броја. Са просеком сте се сигурно већ срели када сте рачунали просек својих оцена. Дакле, да бисмо решили овај задатак потребно је сабрати дужине сва три скока и поделити са три.
Сложени израз из збирке из математике¶
У једној збирици из математике за шести разред јавља се задатак у коме се тражи да се израчуна вредност израза 1 + (3 - (-4)) : 2 + 0,7. Израчунај ту вредност у Python-у.
Израчунај вредност израза \(7 + \frac{4 - (-5)}{(-3) \cdot 2 - 7}\) у Python-у.
Ако урадиш све како треба, добићеш резултат 6.3076923076923075
.
Полице са књигама¶
На првој полици има 150 књига. На другој има дупло мање него на првој, а на трећој три пута мање него на другој. Колико је укупно књига на полицама.
Приметимо да се као резултат добија број 250.0
уместо 250
. То
је због тога што се након примене операције реалног дељења (операције
/
) добије увек резултат у облику реалног броја. Пошто је број
књига цео број и пошто је број 150 дељив и са 2, а број 75 са 3 (иначе
задатак не би имао смисла) на овом месту је било могуће употребити и
операцију целобројног дељења о којој ће више речи бити у наставку.
Поскупљења и појефтињења¶
Цена хлеба је била 35 динара, затим је поскупела 10%. Млеко је коштало 100 динара, али је сада на снижењу и продаје се по 20% нижој цени. Колико коштају три хлеба и два млека?
Проценат (каже се и посто) се у математици обележава знаком % и означава стоти део нечега. На пример, када напишемо 10% броја 200, мислимо заправо на десет стотих делова броја 200, што знамо да је заправо \(\frac{10}{100} \cdot 200\) тј. 20. Дакле, запамтимо, запис p% је просто скраћеница за запис \(\frac{p}{100}\). Провери да ли ово разумеш.
20% броја 80 је број
Ако је цена c, тада је p процената те цене једнако p стотих делова те цене тј. \(\frac{p}{100} \cdot c\). Када се каже да је производ поскупео p процената, то значи да му је цена порасла за p процената, тј. да је она увећана за p својих стотих делова. Ако је цена пре поскупљења била c, тада је након поскупљења она једнака \(c + \frac{p}{100} \cdot c\) тј. \(c \cdot (1 + \frac{p}{100})\). Слично, ако је производ појефтинио p процената, то значи да му је цена снижена за p процената, тј. да је почетна цена умањена за p својих стотина и једнака је \(c - \frac{p}{100} \cdot c\) тј. \(c \cdot (1 - \frac{p}{100})\). На основу овога, задатак се лако може решити.
Приметимо и да ако је неки производ поскупео 10%, тада је његова нова цена једнака старој цени помноженој бројем \(1 + \frac{10}{100} = 1,1\), а да ако је појефтинио 20%, тада је његова нова цена једнака старој цени помноженој бројем \(1 - \frac{20}{100} = 0,8\).
Група радника¶
\(n\) радника уради посао за \(s\) сати. Написати програм којим се одређује за колико сати ће посао бити завршен ако се прикључи још \(m\) радника?
Један начин да се задатак реши је да се прво израчуна колико је радник-сати потребно да се заврши цео посао. Пошто сваки од \(n\) радника ради \(s\) сати, за завршетак посла потребно је \(n \cdot s\) радник-сати (један радник би сам посао радио \(n\cdot s\) сати). Ако посао треба да заврши \(n+m\) радника, тада ће се посао завршити \(n+m\) пута брже него када радни један радник, тј. посао ће бити завршен за \(\frac{n\cdot s}{n+m}\) сати.
Други начин да се задатак реши је да се примени пропорција. Уколико ради више радника потребно је мање дана, па је потребно применити обрнуту пропорцију. Ако са \(x\) обележимо број сати за које посао уради већа група радника, тада важи да је \(n : (n+m) = x : s\) (са обе стране једнакости вредности су поређане од мање ка већој). Одатле опет закључујемо да је \(x = \frac{n\cdot s}{n + m}\).
Провери свој програм тако што провериш да ли за улазе 2
, 4
,
2
исписује 2.0
, док за улазе 3
, 5
, 3
исписује
2.5
.
Целобројно дељење¶
Целобројно дељење обично подразумева дељење целих бројева и као резултат се одређују целобројни количник и остатак при дељењу. На пример, ако се целобројно деле бројеви 14 и 3 тада се добија целобројни количник 4 и остатак 2.
У општем случају, целобројни количник и остатак при дељењу бројева \(a\) и \(b\) су бројеви \(q\) и \(r\) такви да је \(a = q \cdot b + r\) и \(0 \leq r < b\). Приметимо да ова веза важи у примеру дељења \(14\) и \(3\) важи управо ова веза тј. важи да је \(14 = 4 \cdot 3 + 2\), при чему је \(0 \leq 2 < 3\). Други услов каже да остатак мора бити мањи од делиоца тј. да количник мора бити што је могуће већи. Тај услов је веома важан (на пример, важи да је \(14 = 3 \cdot 3 + 5\), међутим, нећемо рећи да је целобројни количник \(3\) а остатак \(5\) јер број \(5\) није мањи од делиоца).
Кроз наредно питање провери колико разумеш операције целобројног дељења и остатка при дељењу.
При дељењу бројева 13 и 5 целобројни количник је а остатак је
У језику Python3 операција целобројног дељења се означава са
//
, а операција израчунавања остатка при дељењу се означава са
%
.
У математици се знак % користи да означи проценат (стоти део нечега). Коришћење истог знака за остатак при дељењу је заправо несрећна околност и треба бити обазрив да се та два заправо неповезана појма случајно не помешају.
Дакле, оператором /
се израчунава реални, оператором //
целобројни количник, а оператором %
остатак при дељењу. Провери колико
ово разумеш.
-
Превлачењем упари изразе са њиховим вредностима.
Покушај поново
- 27 / 10
- 2.7
- 27 // 10
- 2
- 27 % 10
- 7
-
Упари изразе са њиховим вредностима.
Покушај поново
- 43 / 8
- 5.375
- 43 // 8
- 5
- 43 % 8
- 3
Покажимо једноставну примену израчунавања целобројног количника и остатка на следећем задатку.
Подела чоколадних бананица¶
У школи се организује новогодишња приредба за децу. Од пара које су зарадили тако што су организовали сајам својих рукотворина купили су неколико крем бананица које желе да равномерно поделе свој деци (тако да свако дете добије исти број бананица). Ако се зна колико ће деце доћи на приредбу, колико ће свако дете добити бананица и колико ће бананица остати нерасподењено.
Приметимо и да смо број преосталих бананица могли израчунати и тако
што од укупног броја бананица одузмемо број бананица које су подељене
деци (а то је производ броја деце и броја бананица које је свако дете
добило) тј. помоћу израза ukupno_bananica - broj_dece *
bananica_po_detetu
. Ипак, коришћење оператора %
којим се
израчунава остатак је једноставније решење.
Ево једног сличног задатка, за вежбу.
Разломак у мешовити број¶
Бројилац разломка је 37, а именилац је 12. Преведи овај разломак у мешовит број.
Важи да је \(37 = 3 \cdot 12 + 1\), па је \(\frac{37}{12} = \frac{3 \cdot 12 + 1}{12} = 3 \frac{1}{12}\). У општем случају када разломак \(\frac{a}{b}\) преводимо у мешовит број потребно је да бројилац напишемо у облику \(a = q \cdot b + r\), при чему мора да важи да је \(0 \leq r < b\) и тада се добија межовити број \(q \frac{r}{b}\). Број \(q\) је целобројни количник бројева \(a\) и \(b\), док је \(r\) остатак при њиховом дељењу.
Наравно, резултат треба да буде 3 celih i 1 / 12
.
Целобројно дељење - конверзија јединица¶
Целобројни количник и остатак често користимо када желимо да прерачунавамо јединице. Размотримо следећих неколико задатака.
Конверзија центиметара у метре и центиметре¶
Напиши програм који на основу дате дужине у центиметрима израчунава исту дужину у метрима и центиметрима. На пример, ако је дужина 178 центиметара, програм израчунава да је то 1 метар и 78 центиметара.
Пошто у једном метру има 100 центиметара, задатак се своди на израчунавање целобројног количника и остатка при дељењу са 100. Заиста, ако имамо \(m\) метара и \(c\) центиметара, тада је укупан број центиметара једнак \(m\cdot 100 + c\), при чему је \(0 \leq c < 100\).
Рецимо поново да је често решење до којег ученици самостално долазе и
оно у којем се преостали број центиметара рачуна као centimetara =
ukupno_centimetara - metara * 100
. Иако је ово решење исправно, на
располагању нам је оператор израчунавања остатака %
и требало би
да се навикнемо да га користимо.
Конверзија милиметара у метре, дециметре, центиметре и милиметре¶
Напиши програм који на основу дате дужине у милиметрима израчунава исту дужину у метрима, дециметрима, центиметрима и милиметрима. На пример, ако је дужина 1789 милиметара, програм израчунава да је то 1 метар и 7 дециметара и 8 центиметара и 9 милиметара.
Један од начина је да прво, слично решењу претходног задатка одредимо број метара и преосталих милиметара. Пошто у једном метру има 1000 милиметара, то можемо урадити израчунавањем целобројног количника и остатка при дељењу са 1000. Тиме добијамо број метара и имамо даље задатак да преостали број милиметара разложимо на дециметре, центиметре и милиметре. Њега прво можемо разложити на дециметре и преостале милиметре израчунавањем целобројног количника и остатка при дељењу са 100 (јер у једном дециметру има 100 милиметара). На крају, преостале милиметре можемо разложити на центиметре и милиметре израчунавање целобројног количника и остатка при дељењу са 10 (јер у једном центиметру има 10 милиметара).
Ипак, задатак можемо решити и на мало систематичнији начин. Ако са \(mm\), \(c\), \(d\) и \(m\) означимо редом број милиметара, центиметара, дециметара и метара, тада је укупан број милиметара једнак \(m \cdot 1000 + d \cdot 100 + c\cdot 10 + mm\). Пошто су прва три сабирка дељива са 10, важи да се \(mm\) moже израчунати као остатак при дељењу укупног броја милиметара са 10. Целобројни количник укупног броја милиметара са 10 је \(m \cdot 100 + d\cdot 10 + c\), па се зато број центиметара може израчунати тако што се пронађе целобројни количник укупног броја милиметара са 10, а затим остатак при дељењу тог броја са 10. Слично, целобројни количник укупног броја милиметара са 100 једнак је \(m \cdot 10 + d\), па се број дециметара може израчунати као остатак при дељењу тог количника са 10. На крају, број метара једнак је целобројном количнику укупног броја дециметара са 1000.
Целобројно дељење - позициони запис броја¶
Ако је укупан број центиметара био 123, тада је број метара 1, број дециметара 2 и број центиметара 3. Решавањем претходног задатка смо заправо одређивали појединачне цифре коришћене у запису тог троцифреног броја. Приказана техника може бити уопштена тако да се одређују све цифре и у запису дужих бројева.
Цифре броја¶
Чест начин откривања грешака при слању података је да се уз податке које треба послати, пошаљу и одређени контролни подаци, израчунати на основу самих података. Када прималац прими податке, он на основу примљених података поново израчунава контролне податке и упоређује их са контролним подацима које је примио. Ако се приликом преноса података, услед неких сметњи, подаци случајно измене, прималац ће то приметити тако што ће видети да се контролни подаци које је он израчунао неће поклопити са онима које је примио. Сви подаци се у рачунарима представљају помоћу бројева, а још од најранијег доба рачунарства као метода контроле коришћен је збир цифара. На пример, ако би податак који се шаље био број 12345, онда би се уз њега слао и контролни број 15 (збир 1 + 2 + 3 + 4 + 5). Ако би приликом слања нека цифра била случајно промењена (на пример, ако би прималац грешком примио број 12335) тада би се и контролни број највероватније разликовао (контролни број би у нашем примеру био 14). Напиши програм који за дати петоцифрени број одређује његов контролни број (збир његових цифара).
Приметимо да смо цифре броја одређивали веома слично као у претходном задатку. Цифре одређујемо сдесна налево, тако што делимо број са тежином цифре (за цифру јединица број делимо са 1, десетица са 10, стотина са 100 итд.) и проналазимо остатак при дељењу са 10.
Људи су контролу података примењивали и ручно, а сада рачунари обављају такве контроле у овиру прецизно задатих поступака – протокола за размену података. Иако је контролни збир најједноставнији начин контроле, он не може да открије грешке до којих може доћи услед случајне размене редоследа цифара (на пример, ако се уместо броја 12345 грешком пошаље број 12435, контролни збир оба броја ће бити исти и грешка неће бити примећена). Зато се уместо збира понекад користе изрази облика \(c_0 + 2c_1 + 3c_2 + 4c_3 + 5c_4\). Покушај да измениш претходни програм тако да израчунава контролни број на овај начин.
Целобројно дељење - време и углови¶
За разлику од бројева и јединица мере које записујемо у систему чија је основа 10, при раду са временом и угловима користимо систем чија је основа број 60. Тако један сат има 60 минута, а један минут 60 секунди. Слично један степен има 60 угаоних минута, а један угаони минут има 60 угаоних секунди. Прикажимо сада кроз неколико задатака како можемо у програмима вршити израчунавања у којима учествују време и углови.
Конверзија сати и минута у минуте и обратно¶
Ако се зна колико је тренутно сати и минута, израчунај колико је минута протекло од претходне поноћи.
Пошто у једном сату има 60 минута, довољно је да помоножиш број сати са 60 и на то да додаш број минута.
Ако се зна колико је минута протекло од претходне поноћи, израчунај колико је тренутно сати и минута.
Ако са \(s\) обележимо тренутни број сати, са \(m\) тренутни број минута, а са \(M\) број минута протеклих од поноћи, тада важи да је \(M = s \cdot 60 + m\), при чему за \(m\) важи да је број између \(0\) и \(59\), што јасно указује на то да се тражене вредности могу израчунати применом целобројног дељења.
Аутобус¶
Aутобус је кренуо са станице у 6 часова и 17 минута и путовао је 2 сата и 55 минута. У колико сати и минута је стигао?
Други начин да се реши задатак је да се прво све прерачуна у минуте, да се сабирање изврши у минутима, а да се затим добијени минути претворе назад у сате и минуте. Приликом превођења неког временског тренутка у минуте израчунавамо заправо број минута протеклих од претходне поноћи (или поднева, ако се сати рачунају само до 12). Тај број минута се може добити тако што се број сати помножи бројем 60 (јер у једном сату има 60 минута) и на то дода број минута.
Криви торањ у Пизи¶
Криви торањ у Пизи је нагнут и са земљом заклапа угао од 86 степени и 3 минута. Колико степени и минута је торањ нагнут, то јест, колико одступа од усправног положаја.
Прав угао има 90 степени тј. 90·60 минута. Ако угао од 86 степени и 3 минута преведемо у минуте и одузмемо га од правог угла добићемо тражени угао у минутима. На крају ћемо израчунати целобројни количник и остатак и тако добити тражени угао у степенима и минутама. Рецимо још да смо у овом задатку заправо одређивали комплемент датог угла, што је операција о којој је сигурно било речи на часовима математике. Пошто се торањ с временом криви, твој програм треба исправно да ради и ако је угао мало другачји.
Домаћи задатак¶
Ако на часу нисте стигли да урадите све задатке, уради их сада, у склопу домаћег задатка. Након тога покушај да урадиш и наредних неколико задатака.
Прочитане стране књиге¶
Књига има 282 стране. Марко је првог дана прочитао трећину, другог дана половину остатка, а трећег књигу прочитао до краја. Колико страна је прочитао ког дана? Напиши програм тако да исправно ради и ако је број страна првог дана другачији.
Марко је прочитао 94 стране сваког дана. Првог дана је прочитао трећину и остале су му две трећине. Другог дана је прочитао пола од тога тј. опет трећину и за трећи дан му је остала последња трећина.
Повећање и смањење плата¶
Ево опет једног сличног задатка за вежбу.
Плате су прво смањене за десет процената, а онда су после неколико месеци те смањене плате повећане за 10 процената. Ако је у почетку плата била 50,000 динара, колика је она после смањења и повећања?
Ако добијеш решење 49,500 значи да је све како треба, иако је тај резултат мало неочекиван. Често се помисли да ће смањење и повећање за по 10% да се пониште и да ће се плата вратити на полазну вредност. Међутим, смањење је било 10% полазне величине од 50,000 динара тј. за 5,000 динара, док је повећање за 10% од смањене величине од 45,000 динара тј. повећање је за 450 динара.
Преостало време видео-снимка¶
Апликација за пуштање видео-снимака нуди опцију приказа преосталог времена до краја снимка. Ако је познато трајање снимка у сатима, минутима и секундама и време протекло од почетка снимка, такође задато у сатима, минутима и секундама напиши програм који израчунава време до краја у сатима, минутима и секундама.
Најлакши начин да решиш задатак је да оба позната времена претвориш у секунде, затим да тражено време израчунаш у секундама, а онда да добијени резултат претвориш у сате, минуте и секунде.
Ако урадиш све како треба, добићеш да је преостало 0 : 35 :
21
. Провери и на другим тест-примерима.