Претрага
Претрага подразумева испитавање да ли у серији постоји неки елемент који задовољава дати услов (на пример, да ли је неки од ученика у одељењу постигао максималан број поена на контролном задатку). Такође, могуће је испитивати да ли сви елементи задовољавају услов, тражити позицију првог или позицију последњег елемента који задовољава или не задовољава дати услов и слично.
Алгоритам претраге се своди на итеративно израчунавање дисјункције
или конјункције. Постоји велика сличност између алгоритма претраге и
алгоритама израчунавања збира, производа, минимума и максимума серије
које смо већ разматрали. На пример, провера да ли је неки од бројева
a1
, a2
или a3
негативан се своди
на то да се провери да ли је први број негативан, да ли је други број
негативан и тако даље. Потребно је дакле израчунати вредност логичког
израза
< 0) or (a2 < 0) or (a3 < 0) (a1
Веома слично као и у случају израчунавања збира, производа или
минимума/максимума, резултујућу променљиву постављамо на неутралну
вредност (False
у случају дисјункције
тј. True
у случају конјункције), а онда
је у сваком кораку ажурирамо применом одговарајућег оператора.
= False
postoji = postoji or a1 < 0
postoji = postoji or a2 < 0
postoji = postoji or a3 < 0 postoji
Даље, може се приметити да ако је услов ai < 0
испуњен, онда вредност променљиве postoji
постаје
True
а ако није испуњен, онда остаје онаква каква је и била
раније. На основу тога, претходни кôд се може написати у следећем
облику:
= False
postoji if a1 < 0: postoji = True
if a2 < 0: postoji = True
if a3 < 0: postoji = True
Оператор or
има лењу семантику тј. у изразу
x or y
вредност израза y
се не израчунава ако
израз x
има вредност True
. Зато можемо и да
сваки наредни услов проверавамо само ако претходни није задовољен.
То постижемо тиме што уместо независних провера користимо
конструкцију elif
(илустровану у задатку Агрегатно
стање) и сваки наредни услов проверавамо само ако претходни није
испуњен.
= False
postoji if a1 < 0: postoji = True
elif a2 < 0: postoji = True
elif a3 < 0: postoji = True
Алгоритам линеарне претраге је нарочито значајан код дужих серија, и о њему ће више бити речи у задатку Негативан број.