Сложена гранања¶
Узастопни услови¶
Има задатака у којима, када један услов није испуњен, треба проверити други, па ако ни тај услов не важи онда се проверава трећи итд. Да не бисмо писали
у Пајтону користимо специјалну реч elif
, која стоји уместо else: и увученог if у следећем реду. Тако добијамо прегледнији запис:
Напомена 1: Било који број узастопних elif наредби се може употребити на овај начин.
Напомена 2: Део
није обавезан и може да се изостави ако за њим нема потребе.
Примери и задаци¶
Пример - индекс телесне масе:
За брзу оријентацију у вези са степеном гојазности или мршавости користи се индекс телесне масе (енгл. body mass index, скраћено bmi). За израчунавање индекса телесне масе користи се формула \(bmi = {m \over {h \times h}}\), где је m маса у килограмима, а h висина у метрима. Тумачења вредности bmi су следећа:
до 18.5: потхрањена особа
од 18.5 до 25: особа нормалне телесне масе
од 25 до 30: особа прекомерне телесне масе
преко 30: гојазна особа
Написати програм који учитава телесну масу и висину особе, а затим исписује којој категорији припада та особа (граничне вредности прикључити нижој категорији).
Једно могуће решење је дато испод. Размислите о томе зашто није неопходно користити сложене услове (речи and, or, not) у овом решењу.
Задатак - категорије играча:
Млади кошаркаши се на почетку кошаркашке сезоне региструју у једној од узрасних категорија, према томе колико година пуне у календарској години у којој сезона почиње. Правила регистровања су следећа:
10 и мање - без категорије
11 или 12 година - млађи пионири
13 или 14 година - пионири
15 или 16 година - кадети
17 или 18 година - јуниори
19 и више година - сениори
Написати програм који учитава колико година кошаркаш пуни у години у којој се региструје, а исписује његову узрасну категорију.
Задатак - редни број:
Написати програм који учитава цео број од 1 до 6 (укључујући границе), а исписује одговарајући редни број словима. На пример, ако се учита број 6, треба исписати „шести” (без наводника).
Угнежђена гранања¶
Угнежђена гранања су if наредбе у гранама других if наредби. Угнежђене (уметнуте) if наредбе могу да се нађу у једној, другој или обе гране неке веће if наредбе. Овакав начин постављања if наредби може ићи до било које дубине, али треба имати на уму да програми на тај начин могу да постану врло непрегледни и тешки за тачно разумевање и евентуалне измене када је потребно.
У првом примеру намерно дајемо програм са три нивоа гнежђења if наредби, да бисте лакше замислили како може да изгледа програм са још дубље угнежђеним и дужим if наредбама. У осталим примерима и задацима ћемо се ограничити на један ниво уметања if наредби.
Примери и задаци¶
Пример - непознато име
У комшилуку има осморо деце која су често заједно. Њихова имена су: Ана, Бане, Вера, Горан, Дуња, Ђорђе, Ема и Жарко. Ана, Бане, Вера и Горан иду на програмерску секцију, а Ана, Бане, Дуња и Ђорђе на спортску секцију. Школска куварица је хтела да похвали једно од деце, али није знала име тог детета.
Написати програм који поставља три питања, прихвата одговоре на та питања (слово ’d’ за да, а сваки други одговор за не) и исписује име детета о коме је реч. Питања која програм поставља су:
Да ли је то девојчица
Да ли иде на спортску секцију
Да ли иде на програмерску секцију
Приметимо да програми са угнежђеним гранањима могу да се преправе тако да користе само узастопне услове и облик са „elif”, без уметања if наредби у дубину. При томе користимо сложене услове, које градимо помоћу логичких операција and, or и not.
Задатак - раскрсница:
У новом насељу налази се раскрсница великих улица А и Б. Бројеви у улици А су парни са десне стране а непарни са леве. На парној страни бројеви до раскрснице су од 2 до 200, а после раскрснице су већи од 200. На непарној страни бројеви до раскрснице су од 1 до 177, а после раскрснице су од 179 надаље.
Написати програм који учитава један кућна број у улици А и одговара да ли је тај број пре или после раскрснице и са које стране улице А. На пример:
за број 128 исписати „са десне стране, пре раскрснице”
за број 284 исписати „са десне стране, после раскрснице”
за број 177 исписати „са леве стране, пре раскрснице”
за број 219 исписати „са леве стране, после раскрснице”
Помоћ: Након учитавања, прво треба проверити да ли је кућни број n паран, то јест да ли је \(n \% 2 == 0\).
Задатак - учење:
Јованови родитељи су рекли Јовану да ако добије четворке или петице из математике и енглеског, може да иде поподневни фудбалски турнир, у противном мора да учи предмет или предмете из којих добије оцене мање од 4.
Написати програм који прво учитава Јованову оцену из математике а затим из енглеског и исписује поруку за Јована. На пример:
за оцене 2, 3 исписати „учи и математику и енглески”
за оцене 3, 4 исписати „учи математику”
за оцене 4, 2 исписати „учи енглески”
за оцене 5, 4 исписати „иди на турнир”
Задатак - облачење:
Игор прави програм који са сајта за временску прогнозу очитава тренутну температуру (у степенима Целзијуса) и шансе за кишу (од 0 до 100), па на основу тих података исписује препоруку да ли треба понети јакну (која има капуљачу) или кишобран, или ниједно од та два. Игор је изабрао овакво правило:
када је температура нижа од 21, савет нека гласи: „понеси јакну”
када је температура 21 или виша а шансе за кишу преко 50, препорука је: „понеси кишобран”
када је температура 21 или виша а шансе за кишу до 50, савет нека буде „можеш само у мајици”
Ви напишите програм који учитава прво температуру па шансе за кишу, а затим исписује препоруку.