Бројање и сумирање

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

Бројање

Програм (алгоритам) помоћу кога пребројавамо елементе колекције који испуњавају дати услов у општем облику изгледа овако:

br = 0
for x in kolekcija:
    if (x ispunjava uslov):
        br += 1
print(br)

Наредба x += a повећава вредност променљиве x за a. То је у ствари скраћени запис наредбе x = x + a, која променљивој x додељује вредност x + a.

Наредба x -= a смањује вредност променљиве x за a. То је скраћени запис наредбе x = x - a, која променљивој x додељује вредност x - a.

У нашем примеру, наредба br += 1 повећава вредност променљиве br за 1.

Примери и задаци

Пример - састанак:

Вођа тима је понудио два термина за састанак који треба да се одржи сутра. Сваки члан тима је уписао у табелу који термин би му више одговарао (1 за први термин, 2 за други). Ти подаци су пребачени у први ред програма.

Довршити програм - скрипту, тако да за дате податке о гласању чланова тима одговара колико их је гласало за први, а колико за други термин.

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

Други начин је да бројимо упоредо гласове и за први и за други термин.

или, ако претпоставимо да су подаци „чисти”, то јест да нема других вреднсоти осим 1 и 2:

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

На почетку овог програма учитавамо број гласова n, а затим користимо for петљу да n пута поновимо учитавање и бројање једног гласа.

Задатак - тестирање:

Неколико људи је решавало тест познавања саобраћајних прописа, што је услов за излазак на практични део испита. Тест се сматра положеним ако је је број нетачних одговора мањи или једнак 3.

На почетку програма - скрипте су дати резултати тестирања једне групе кандидата (број нетачних одговора за сваку особу која је решавала тест). Довршите скрипту тако да исписује колико кандидата је положило тест.

Задатак - базен

Припрема се посета базену за групу деце. Сви који су нижи од 160 сантиметара могу да иду само у мањи у базен. Организатора интересује колико деце је ниже од 160 сантиметара, да би могао да планира групе.

На почетку програма су дате висине деце. Допунити програм тако да исписује број деце ниже од 160 сантиметара.

Задатак - влажност

У ботаничкој башти се код ретких и осетљивих врста једном дневно мери влажност земљишта. Влажност се изражава бројем од 0 до 1, а сматра се да су услови за развој биаљака добри када је влажност између 0.3 и 0.7 (укључујући и границе).

На почетку програма - скрипте су дате влажности измерене током неког периода. Довршити скрипту тако да исписује број дана када влажност није била добра.

Сумирање

У једној великој групи практичних проблема до резултата долазимо тако што га постепено градимо (накупљамо) током пролажења кроз податке. На пример, ако нам је потребан збир неких бројева, до њега можемо да дођемо на овај уопштени начин:

zbir = 0
for podatak in kolekcija:
    zbir += podatak
print(zbir)

Када нам треба збир свих елемената колекције, исти резултат добијамо и позивом функције sum:

print(sum(kolekcija))

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

zbir = 0
for podatak in kolekcija:
    if (podatak ispunjava uslov):
        zbir += podatak
print(zbir)

Да бисмо добили средњу вредност података који испуњавају неки услов, потребно је пребројати и сабрати такве податке, а онда њихов збир поделити њиховим бројем. У општем случају то изгледа овако:

zbir = 0
brojac = 0
for podatak in kolekcija:
    if (podatak ispunjava uslov):
        zbir += podatak
        brojac += 1
print(zbir / brojac)

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

Примери и задаци

Пример - Просечан резултат IQ теста:

Дати су резултати IQ теста за групу људи. Резултат -1 значи да особа није радила тест. Довршити програм тако да исписује средњу вредност добијену на тестирању.

Програм можемо да напишемо овако:

Задатак - дежурства:

У предузећу Х сви запослени повремено остају на дежурству. Норма за претходни период је 20 сати дежурства. Сваки сат дежурства преко норме се плаћа по посебном ценовнику. Дат је број сати дежурства за сваког запосленог, а директор жели да зна колико је укупно било сати дежурства преко норме.

Довршити програм тако да исписује укупан број прековремених сати дежурства.

Ако сто добро решили задатак, за дате податке треба да добијете резултат 25, јер је \((21-20)+(23-20)+(34-20)+(25-20)+(22-20)=25\).

Задатак - просечан принос:

У једном воћњаку после треће године се прати принос шљиве по стаблу. Стабла са приносом испод 3 килограма се сматрају оштећеним или оболелим и биће извађена.

Дат је принос свих стабала у воћњаку. Довршити програм тако да израчунава и исписује просечан принос здравих стабала (са приносом од 3 и више килограма).

За дате податке треба да добијете реултат приближно 14.757 .