Prijavi problem


Obeleži sve katergorije koje odgovaraju problemu

Jos detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link
Na žalost nismo trenutno u mogućnosti da obradimo Vaš zahtev.
Molimo Vas da pokušate kasnije.

Priručnik za Džupajter

5. час: Просек низа бројева

На овом часу ћеш научити:

  1. како да израчунаш просек низа бројева;
  2. како да дефинишеш своје функције у Пајтону (а пре свега функцију која рачуна просек); и
  3. како да на истом графикону прикажеш и податке и њихов просек.

5.1. Просек

Постоји много ситуација када се низ бројева може згодно описати неком карактеристичном вредношћу. На пример, ученици добијају оцене из много предмета, али на крају школске године школски систем жели да "изведе" једну оцену и да том оценом окарактерише рад ученика у тој години.

Временом се као најпогоднији представник низа бројева показао просек. Просек низа бројева се рачуна овако:

$$ \hbox{просек низа } [x_1, x_2, \dots, x_n] = \frac{x_1 + x_2 + \dots + x_n}{n}. $$

Дакле, да бисмо добили просек низа бројева саберемо све елементе низа и тако добијени број поделимо дужином низа.

У Пајтону се обе ове активности могу обавити позивом одговарајуће уграђене функције: функција len рачуна дужину низа, док функција sum рачуна збир елемената низа бројева.

На пример:

In [1]:
L = [1, 3, 5, 7, 9, 10]
print(len(L))
print(sum(L))
6
35

(Примети да су ове функције уграђене у Пајтон и да нема потребе ловити их по библиотекама!)

Према томе, просек низа бројева се у Пајтону рачуна овако:

In [2]:
print("Prosek niza brojeva", L, "je", sum(L) / len(L))
Prosek niza brojeva [1, 3, 5, 7, 9, 10] je 5.833333333333333

5.2. Дефинисање нових функција у Пајтону

Како ћемо у много наврата рачунати просек, дефинисаћемо нову функцију која га рачуна. У претходним разредима смо се већ срели са дефиницијама нових функција у Пајтону и зато мали програм који следи не би требало да представља изненађење за тебе:

In [3]:
def prosek(L):
    return sum(L) / len(L)

Претходни програм је у систем унео нову дефиницију: функција prosek ће прихватити неки низ L и онда ће као резултат свог рада вратити збир елемената низа L подељен дужином низа L (дакле, просек елемената тог низа).

Примети да је списак Пајтон наредби које представљају тело функције и објашњавају шта функција ради увучен за четири празнине.

Да видимо како ради наша нова функција:

In [4]:
print("Prosek niza brojeva", L, "je", prosek(L))
Prosek niza brojeva [1, 3, 5, 7, 9, 10] je 5.833333333333333

У ћелији испод унете су оцене једног ученика из информатике и приказан је њихов просек:

In [5]:
ocene = [5, 3, 5, 4, 4, 5]
print("Prosek ocena iz informatike je", prosek(ocene))
Prosek ocena iz informatike je 4.333333333333333

Ако ћемо искрено, просек оцена се увек приказује заокружен на две децимале. У Пајтону постоји уграђена функција round(x, n) која заокружује дати број x на n децимала. На пример:

In [6]:
round(1.666666666, 2)
Out[6]:
1.67

Према томе, просек оцена из информатике сада можемо да добијемо овако:

In [7]:
print("Prosek ocena iz informatike je", round(prosek(ocene), 2))
Prosek ocena iz informatike je 4.33

5.3. Приказивање података и њиховог просека

Претпоставимо да је на полугодишту један ученик имао следеће оцене из наведених предмета:

In [8]:
predmeti = ["мат", "срп", "лик", "ист", "физ", "муз", "тио"]
ocene    = [2,     4,     5,     3,     5,     4,     5    ]

Желимо да прикажемо његове оцене хистограмом и да просечна оцена буде означена црвеном линијом како бисмо могли да видимо које оцене су изнад просека, а које испод.

Прво ћемо учитати библиотеку за цртање графикона:

In [9]:
import matplotlib.pyplot as plt

Хистограм са оценама можемо да нацртамо веома једноставно:

In [10]:
plt.figure(figsize=(10,5))
plt.bar(predmeti, ocene)
plt.title("Оцене на полугодишту")
plt.show()
plt.close()

Сада желимо да преко хистограма нацртамо црвену линију која представља просечну оцену. Прво ћемо израчунати просечну оцену po:

In [11]:
po = prosek(ocene)

а онда ћемо на горњи дијаграм додати и низ података који изгледа овако:

[po, po, po, po, po, po, po]

In [12]:
plt.figure(figsize=(10,5))
plt.bar(predmeti, ocene)
plt.plot(predmeti, [po, po, po, po, po, po, po], color="r")
plt.title("Оцене на полугодишту")
plt.show()
plt.close()

Ако један исти податак s треба поновити n пута можемо да пишемо као горе:

[s, s, s, (и тако даље)]

али можемо да то запишемо краће овако:

[s]*n

Ознаком [s]*n смо Пајтону рекли да желимо да направимо нови низ који се добија тако што се низ [s] "умножи" n пута. На пример, [5]*7 = [5, 5, 5, 5, 5, 5, 5]. (Такође је [6, 7, 8]*3 = [6, 7, 8, 6, 7, 8, 6, 7, 8], али нам ово за сада неће бити потребно.)

Тако добијамо следећу верзију програма:

In [13]:
plt.figure(figsize=(10,5))
plt.bar(predmeti, ocene)
plt.plot(predmeti, [po] * len(ocene), color="r")
plt.title("Оцене на полугодишту")
plt.show()
plt.close()

За крај ћемо дијаграму додати легенду:

In [14]:
plt.figure(figsize=(10,5))
plt.bar(predmeti, ocene, label="оцене")
plt.plot(predmeti, [po] * len(ocene), color="r", label="просек")
plt.title("Оцене на полугодишту")
plt.legend()
plt.show()
plt.close()

5.4. Задаци

Задатке уради у Џупајтеру.

Задатак 1. Једна збирка кратких прича за децу има 12 страна - по једна прича на свакој страни. Приче имају мали број речи, и то, по странама: 271, 354, 296, 301, 333, 326, 285, 298, 327, 316, 287 и 314. Колики је просечан број речи по причи у овој књизи?

Задатак 2.

(а) Мирко из музичког има 5, 4, 5 и још једну оцену која се не види јер се преко ње разлило мастило. Просек његових оцена из музичког је 4. Која је то оцена преко које се разлило мастило?

(б) Колико још петица Мирко треба да добије да би наставница музичког за крај године морала да му закључи оцену 5? (Према Правилнику о оцењивању у основним школама, ако је просек оцена уписаних у дневник 4,50 или више, наставник мора да закључи оцену 5.)

(Помоћ: решење задатка под (а) израчунај - за то ти не треба Пајтон; решење задатка под (б) можеш да израчунаш, али можеш и да га погодиш тако што ћеш експериментисати са разним могућностима Миркових оцена из музичког - користи функцијe prosek и round.)

Задатак 3. Првих десет места на АТП листи на дан 12.11.2018. изгледа овако:

In [ ]:
teniseri = ["Đoković", "Nadal", "Federer", "Del Potro", "Zverev", "Anderson", "Čilić", "Thiem", "Nishikori", "Isner"]
poeni    = [8045,      7480,    6020,      5300,        5085,     4310,       4050,    3895,    3390,        3155]

(а) Прикажи хистограмом податке о АТП поенима првих десет тенисера на свету, а црвеном линијом прикажи просечан број поена првих десет играча на АТП листи.

(б) Колико од њих је изнад просека?

Задатак 4. На почетку одељка 5.3. дате су оцене једног ученика на полугодишту. Хистограмом прикажи колико свака од оцена одступа од просека. Следећи Пајтон програмчић ће ти помоћи:

In [ ]:
odstupanje = [0] * len(ocene) # овим смо направили низ нула, само да резервишемо простор
for i in range(len(ocene)):
    odstupanje[i] = ocene[i] - po