top of page
Anchor 0
Anchor 1
Anchor 3

АЛГОРИТМИ

Податоци и информации

 

Податоците ги изразуваат фактите, поимите и знаењата. Затоа велиме дека

значењето што го има не­кој податок е ин­форма­ција.

Податоците се запишуваат во форма разбирлива за човекот: текст, број, слика (видео) и звук.  Затоа, често се вели дека

податоците претставуваат записи на ин­фор­мациите.

На пример, годините на некој човек претставуваат запис на ин­фор­мацијата за неговата возраст, просечната оценка на некој ученик е запис на информацијата за неговиот успех, температурата е запис на ин­формаци­јата за вре­мето (метереолошки) итн.

Секој податок носи во себе некоја (или неколку) информации.

Бидејќи човекот ги добива податоците од надворешниот свет и дава податоци во тој свет, а тие податоци носат информации, велиме дека

информацијата претставува содржина на сето она што го разменуваме (даваме и примаме)

со надворешниот свет.

За добивање информации од по­датоците, понекогаш е потребно да се обработат повеќе податоци. Затоа,

обработ­ката на податоците прет­ставува процес што се состои од низа на дејства што се извршуваат врз податоците за да се добијат информации.

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

− Наоѓање на збирот на оценките.

− Делење на добиениот збир со бројот на оценките.

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

Следно што нѐ интересира е дали може да се мери количината на информации.

Единицата мерка за мерењето на количината ин­формации се наре­кува бит (англ. bit). (Зборот е кратенка од англиските зборови binary digit – bit.)

Инфор­мација од еден бит дава одгово­рот на прашањето за кое се можни два еднакво веројатни одговори.

На пример, на прашањето при фрлање на мон­ета: „Што падна?“, можни се два еднакво веројатни одгово­ри: „Глава“ или „Писмо“. Кој било одговор да го добиеме, добиваме инфор­мација од еден бит.

Да наведеме уште еден пример.

Некој нека замисли број од 1 до 10. Колкупати (најмногу) мора да се постави прашањето: „Дали бројот е по­голем од Х?“,  каде Х е број од 1 до 10, за да се погоди замислениот број. Да претпоставиме дека замислениот број е 7. Може да постапиме на след­ниот начин:

                                Прашање                                                Одговор                           Можен броj

                                                                                                                                       1, 2, 3, 4, 5, 6, 7, 8, 9, 10

                1. Дали бројот е поголем од 5?                     Да                           6, 7, 8, 9, 10

                2. Дали бројот е поголем од 8?                     Не                           6, 7, 8

                3. Дали бројот е поголем од 7?                     Не                           6, 7

                4. Дали бројот е поголем од 6?                     Да                           7

Гледаме дека бројот го погодивме со поставување на 4 прашања. Ако замислиме кој било број од 1 до 10, можеме да го по­годиме со поставу­вање на најмногу 4 прашања. На пример, ако замислениот број е 5, ќе го по­годиме со следните 3 прашања.

                              Прашање                                                Одговор                           Можен број

                                                                                                                                       1, 2, 3, 4, 5, 6, 7, 8, 9, 10

                1. Дали бројот е поголем од 5?                     Не                           1, 2, 3, 4, 5

                2. Дали бројот е поголем од 3?                     Да                           4, 5

                3. Дали бројот е поголем од 4?                     Да                           5

 

Бидејќи со секој одговор добиваме информација од еден бит, значи дека за погодување на бројот 7, ни се потребни 4 бита, а за погодување на бројот 5, ни се потребни 3 бита.

Ако одговорот „Да“ го означиме со 1, а „Не“ со 0, тогаш информа­цијата за погодување на замислениот број 7, можеме да ја запишеме како низа од битови 1001, а за бројот 5, како низа 011. Ова значи дека со ци­фрите 0 и 1, може да се запише секоја ин­формација. Која било цифра да е упот-ребена (0 или 1), велиме дека таа носи информација од еден бит.

Во некои случаи, можни се повеќе еднакво веројатни одго­вори на едно прашање. Ако се можни n одговори, тогаш количината на информа­ции може да се запише со k битови, при што важи релацијата n = 2^k. (2 на степен к.)

Бит, бајт и збор

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

Група од осум бита се нарекува бајт (англ. byte) и претставува основна единица за изразување на капацитетот на меморијата.

Полубајт е група од 4 бита, а се нарекува и нибл (англ. nible).

Групи од неколку бајти фор­мираат зборови (англ. words).

Кај првите компјутери, зборот имал 8 бита = 1 бајт, кај подоцнежните, имал 2 бајта (16 бита), а кај денешните компјутери, зборот се состои од 4 бајти (32 бита) и 8 бајти (64 бита).

0 − бит

1 − бит

01101001                                                                       − бајт ( = 8 бита)

          1011                                                                       − полубајт или нибл ( = 4 бита)

1001001101101110                                                  − збор од 16 бита

10010011011011101001001101101110         − збор од 32 бита

Мени

Константни и променливи податоци

Секој предмет или појава има свои карактеристики. На пример: должина, волумен, маса, возраст, брзина, обоеност и др. Карактеристиките се изразуваат со податоци (англ. data). На пример: податок за ширината на правоаголник, податок за брзината на автомобил, податок за возраста на лице итн. Податоците имаат вредности (англ. values), кои се изразуваат во мерките или вредностите од некое множество. На пример, должи-ната може да биде кој било позитивен реален број, а се изразува во cm, dm, m и други единици за должина. Возраста може да биде кој било цел позитивен број ако ја изразиме само во години. Обоеноста може да биде која било боја од боите од бела до црна. На пример: должината е 100 cm, возраста е 18 години, бојата е сина итн.

Податоците се обработуваат со алгоритми (англ. algorithms). Алгоритмите може да се изразат со програми (англ. programs) напишани во некој програмски јазик (англ. programming languages).

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

  • цели броеви (... ‒2, ‒1, 0, 1, 2, 3…),

  • реални броеви (…‒2.34…, ‒1.89…, 0…, 0.573…, 123.45…),

  • знаци (ʼ?‘,  ʼ*‘,  ʼ@‘,  ʼ7‘,  ʼ+‘…) (Знаците во програмските јазици се означуваат со полунаводници.),

  • текстови (“Macedonia“, “Denes e 21 vek“, “Aleksandar Makedonski“…)  (Текстовите во програмските јазици се означуваат со наводници.),

  • слики (видео),

  • звук итн.

Велиме дека тоа се податоци од различен тип (англ. type). Покрај типот, податоците имаат име и вредност. Значи, податоците ги имаат следниве карактеристики:

  1. Име.

  2. Тип. 

  3. Вредност.

Во многу случаи, вредноста на некој податок не се менува. На пример, вредноста на математичките броеви е = 2.71 и  π = 3.14  никогаш не се менува и затоа, велиме дека тие се константи (англ. constants). Таквите константи се нарекуваат литерали (англ. literals).

Но програмерите, во своите програми, можат да зададат (именуваат) свои константи. На пример, ако во програмата се користи името на нашата држава, тогаш тоа ќе се зададе како константа со некое име, на пример drzava и вредност “Makedonija“. Или, може да се користи константата meseci, која може да прими вредност 12. Ваквите константи кои ги дефинираат и именуваат програмерите и на кои може да им се доделува вредност, се нарекуваат именувани константи (англ. named constants).

За разлика од константите, вредноста на некои величини се менува. На пример: возраста на некој човек, времето во текот на денот, брзината на некој автомобил итн., може да добиваат различни вредности и затоа, велиме дека нивните вредности се променливи. Велиме дека годините на брат ми се 10, моите години се 19, годините на кучето се 5 итн. Значи, 10, 19 и 5 се вредности на податокот со име vozrast. Според тоа, vozrast е податок кој може да има променливи вредности. Ваквите податоци, кои може да имаат променливи вредности, се нарекуваат променливи (англ. variables).

При обработка на податоците со помош на компјутер, константите и променливите имаат свои имиња: drzava, vozrast, brojPi, vreme, brzina, boja итн.

Ако податокот е константа, тогаш вредноста што ѝ се доделува (на пример, drzava = “Makedonija“) не се менува за време на извршувањето на програмата.

Aко, пак, податокот е променлива, тогаш нејзе може да ѝ се доделуваат различни вредности. На пример, vozrast = 10, vozrast = 19 итн. 

Математичките формули, најчесто, во себе вклучуваат променливи. Велиме дека во функцијата y = f(x), x и y се променливи затоа што за различна вредност на х се добива различна вредност на у. Или, во формулата за пресметување на плоштината на правоаголник со страни а и b (p = a × b), страните а и b се променливи. Понекогаш, во формулите се вклучени и константи. На пример, формулата за пресметување на плоштината на круг е P = r × r × π. .

Вредноста што им се доделува на променливите го определува типот на променливата. На пример, променливата denovi (ако се изразува во денови во месецот) е од целоброен тип бидејќи може да добива вредности само на целите броеви од 1 до 31. На пример, denovi = 23. Слично, променливата plostina (плоштината на круг) е од реален тип бидејќи добива вредности на реални броеви. На пример, plostina = 28.2735. Променливата која може да добива  вредност на кој било знак ставен во полунаводници е од знаковен тип. На пример, znak = ʼ+‘. Променливите кои може да добиваат вредност на кој било текст ставен во наводници се од текстуален тип. На пример, drzava = “Makedonija e vecna“.  (Променливите од текстуален тип се нарекуваат низи од знаци или стрингови (англ. strings) ). Иако во македонскиот јазик има синоним за поимот стринг, а тоа е низа, во книгата се употребува поимот стринг поради неговото специфично значење во програмските јазици. 

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

                целоброен          ‒ за целоброен тип

                реален                   ‒  за реален тип

                знаковен              ‒  за знаковен тип

                логички                 ‒  за логички тип

                наброив               ‒  за наброив тип

                стринг                    ‒  за текстуален тип

Мени

Вовед во алгоритми

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

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

На пример, елементарните активностите при варење кафе се:

                ‒ Турање вода во ѓезвето.

                ‒ Ставање кафе во ѓезвето.

                ‒ Ставање ѓезвето на ринглата.

                ‒ Приклучување на ринглата на која е ставено ѓезвето.

                ‒ Чекање кафето да се свари.

                ‒ Тргање на ѓезвето од ринглата.

                ‒ Исклучување на ринглата.

За да може еден изведувач (како оној што вари кафе), да изврши дадена активност (варење кафе), тој треба да ги знае елементарните активности и постапката (редоследот) за нивното извршување. Таквата листа со елементарни активности се нарекува постапка или алгоритам (англ. algo-rithm).

Можеме да кажеме дека

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

Поимот алгоритам ќе го објасниме подетално на примерот за наоѓање на најголемиот број од три дадени броја.                                  

Можеме да ја примениме следнава постапка:

  • Споредување на кои било два броја и одредување на поголемиот од нив.

  • Споредување на поголемиот број од првото споредување со третиот број и одредување на поголемиот од нив.

Поголемиот број, при второто споредување, е најголемиот од трите броја.

Очигледно е дека постапката се состои од само две точно дефинирани активности (дејства).

За да се примени оваа постапка врз кои било три броја, тие треба да бидат претходно зададени. Резултатот од постапката е најголемиот број. Тоа значи дека решавањето на некоја задача се состои од одредување на излезните резул­тати со примена на одредена постапка ‒ алгоритам врз влезните пода­тоци. Затоа, може да се рече дека

алгоритам претставува постапка од конечно множество точно дефинирани активности (дејства), применети врз влезните податоци по строго пропишан ре­дослед, со која се доаѓа до излезните резултати.

Зборот алгоритам е земен од латинскиот јазик и претставува превод на името на арапскиот математичар од IX век Abu Ja’far Muhammad ibn Musa Аl‒Khwarizmi, кој прв ги формули­рал правилата за извршување на четирите основни аритметички  операции со арапски цифри.

Мени

Алгоритамски чекори

Активностите од кои се состои еден алгоритам се нарекуваат алгори­там­ски чекори (англ. algorithmic steps). Во зависност од тоа дали чекорите се поопшти или поде­тални, алгоритамот може да биде општ или детален.       

На пример, општиот алгоритам за задачата за одредување на најголемиот од трите дадени броја, можеме да го запишеме како на слика 1:

чекор 1: Задавање на три броја.

чекор 2: Споредување на кои било два броја и наоѓање на поголемиот од нив.

чекор 3: Споредување на поголемиот број најден во чекор 2 со третиот број и наоѓање на поголемиот од нив.

чекор 4: Печатење на резултатот.

Слика 1

Ако ги означиме бро­евите со a, b и c, поголемиот од a и b со p, поголемиот од p и c со n, тогаш може да напишеме подетален алгоритам, како на слика 2:

чекор 1: Задавање на броевите a, b и c.

чекор 2: Ако a е поголем од b, тогаш p = a, инаку p = b.

чекор 3: Ако p е поголем од c, тогаш n = p, инаку n = c.

чекор 4: Печатење на n.

Слика 2

Рековме дека во некои алгоритми има влезни податоци и излезни ре­зултати. Излезните резултати се добиваат со „трансформација“ на влезните податоци при извршувањето на алгоритамот. При­тоа, трансформацијата не се врши секогаш директно, туку со посредство на меѓурезултати. Така, во горниот алгоритам, меѓурезултат е p, влезни пода­тоци се a, b и c, а излезен резултат е n.

За да ја провериме исправноста на некој алгоритам, се врши тестирање врз произволни влезни податоци. На пример, да го тестираме разгле-дуваниот алгоритам за броевите: a = 37, b = 12, c = 44.

чекор 1: a = 37, b = 12, c = 44.                                                                                        

чекор 2: a (= 37) е поголем од b (= 12), тогаш p = а (= 37).

чекор 3: p (= 37) не е поголем од c (= 44), затоа n = c (= 44).

чекор 4: печати n (= 44).

Мени

Претставување на алгоритмите

Алгоритмите може да се претстават на три начини:

  • Текстуално.

  • Графички.

  • Преку програмски јазик.

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

Ние ќе го користиме псевдо-јазикот (со зборови од македонскиот јазик), кој се состои од зборовите: алго­ритам, подалгори­там, почеток, крај, ако, тогаш, инаку, случај, додека, извршувај, повторувај, до, за, чекор, зголемувај, намалувај, читај, печати, продолжи, прекин, излез, скок, врати, целоброен, реален, знаковен, логички, наброив, стринг и други.

Овие зборови ќе ги пишуваме зацрнето (задебелено) за да потенцираме дека тие се зборови ре­зервирани за псевдо-јазикот. 

Пример за текстуално прет­ставу­вање на алгоритам со ваков псевдојазик е даден на слика 3, каде што е претста­вен алгоритамот за наоѓање на најголемиот од три броја од слика 2.

Во него, со стрелката (p <-- a), се изразува дејството со кое на променливата p ѝ се доделува вредноста од променливата a.  

Графичкото претставување на алго­ритмите се врши со т.н. блок-ди­ја­грам (англ. flowchart).

Во блок-дија­грамот, се користат посебни графички симболи (блокови) за одре­дени деј­ства (операци­и) дадени на слика 4. Претставувањето на алгоритмите со овие графички симболи се нарекува стандардно графичко претставување.

Алгоритамот за одре­дување на најголемиот од трите дадени броја (слика 3), претставен графички со блок-ди­јаграм е даден на слика 5.                                                                                                                                                                          

                                                                                                                                                                                                                                                                                 

 

 

 

 

 

                        Слика 3                                                                                                         Слика 4                                                                                                                   Слика 5

Графичкото претставување на алгоритмите има свои предности и свои недостатоци.

Предноста е во поголемата прегледност на текот на активностите во алгоритамот, би-

дејќи човекот полесно перципира слика од текст. Од друга страна, блок-дијаграмот за

поголем алгоритам може да зафаќа повеќе страници и алгоритамот да биде непрегле-

ден.

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

Притоа, алгоритамот го „изразуваме“, т. е. кодираме (англ. encoding) со наредбите од

некој програмски јазик. Така кодираниот алгоритам, со наредби од некој програмски ја-

зик, се нарекува изворна програма (англ. source program). За да може да се изврши

изворната програма, таа мора да се преведе (англ. compile) во извршна програма

(англ. executive program).

На пример, разгледаниот алгоритам за наоѓање на најголемиот од 3 дадени броја, ко-

диран во програмскиот јазик С++, е даден на слика 6.

По извршувањето на програмата, излезот е:

                                                                                                                                                                                                                                                    Слика 6

Мени

Структурирани алгоритми

 

Алгоритмите за посложените задачи може да бидат многу долги и непрегледни. Затоа, и програмите што ќе се напишат според тие алго­ритми може да бидат тешко разбирливи. Тоа е посебно важно кога ќе се јави потреба од некоја измена или надополнување во нив. За полесно снаоѓање во големите програми, денес, тие се пишуваат со техника на прог­рамирање позната под името структурирано програмирање (англ. structured programming).

Името структурирано програмирање е добиено според користењето на т.н. алгоритамски контролни структури (англ. algorithmic control structures), со кои се контролира дејството на алгори­т­мите.

Во структурираното програмирање се користат две техники за прог­рамирање:

  • Програмирање одгоре надолу (англ. top-down programming).

  • Модуларно програмирање (англ. modular programming).

Програмирањето одгоре надолу се врши со разделување (расчленување) на задачата на помали и поедноставни задачи т.н. подзадачи. Ако е потребно, и тие подзадачи понатаму се разде­луваат на уште поедноставни подзадачи сè додека не се добијат задачи што лесно се програми­раат.

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

За секоја подзадача може да се напише посебен алгоритам т. н. подалгоритам (англ. subalgorithms) , а потоа, и да се

имплементира (програмира) како посебен програмски дел. Таквите програмски делови (целини) од програмата се

нарекуваат модули (англ. modules) или потпрограми (англ. subprograms) .

Сите модули во програмата се подредени секвенцијално (еден по друг) и не може ниту еден од нив да се прескокне, слика 7.                    

Функцијата што ја извршува еден модул не смее да се повторува во друг модул, од­носно не смее да има преклопување на моду-

лите. Исто така, еден модул може да се состои од повеќе други модули, а може да биде и дел од по­голем модул.

Модуларното програмирање е посебно ко­рисно при измена на прог­рамите или при по­правка на грешки. Ако треба да се измени

прог­рамата или да се поправи некоја грешка во неа, тогаш се  менува само модулот во кој се јавила грешката, а не целата програма.

Графичкото претставување на ал­горитмите при структурираното прог­рами­рање, се разликува од графичкото претставување

при неструктурираното (стандардното) програмирање.

Структурираните алгоритми се претставу­ваат со правоаголни блокови. Секој правоаголник изразува посебна це­лина (модул)

со свој почеток и крај. Ако не­кој модул се дели на поедноставни де­лови, тие се претставуваат со по­мали пра­воаголници вгнез-

дени во поголемите. 

Слика 7      

Мени

Графичко претставување на алгоритмите со дијаграм на активности

 

За унифицирано претставување на разните дија-

грами, кон крајот на 90-тите години од минатиот

век, е создаден графички јазик наречен Unified

Modeling Language – UML.

Овој јазик има голем број графички симболи, а ние

ќе ги користиме следните,слика 8:

Графичкиот дијаграм за задачата за наоѓање на

најголемиот од три броја, даден на слика 5, изразен

со UML, е даден на слика.9.

Мени

Алгоритамски контролни структури

 

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

За опис и контрола на текот на алгоритмите, се користат посебни т.н. алгоритамски контролни структури. Со нив, не се извршуваат никакви пресметки, туку се одредува редоследот на извршување на алгоритамските чекори.

Во теоријата на програмирањето, познато е дека текот на секој алгоритам може да се контролира со корис­тење на следниве алгоритамски кон-тролни структури:

  • Редоследна контролна структура или секвенца (англ. sequence).

  • Контролна структура за избор или селекција (англ. selection).

  • Контролна структура за повторување или итерација (англ. iteration).

  • Контролна структура за скок  или скок (англ. jump).

Првата алгоритамска контролна структура е позната и под името линиска контролна структура, втората е позната и под името

разгранета контролна структура, а третата е позната и под името циклична контролна структура

Секоја алгоритамска контролна структура има само една влезна точка и само една излезна точка , слика 10.                                                            Слика 10

Мени

Редоследна алгоритамска контролна структура

Оваа контролна структура се состои од алго­ритамски чекори кои се извршуваат по оној редослед по кој се наведени.

Графички, структурата е претставена на слика 11.

Секоја редоследна алгоритамска контролна структура претставува посебна целина и може да се појави каде било во алгори-

тамот. Затоа, треба да се означат почетокот и крајот на структурата. Тоа се прави со зборовите почеток (англ. begin) и крај

(англ. end), слика 12. Поради тоа, редоследната алгоритамска контролна структура

се нарекува почеток–крај.

почеток

                чекор А;

                чекор Б; 

                ...

                чекор Т;                                                                                                                                                                                                                                                            Слика 11

крај

               Слика 12

Знакот ; (точка и запирка) се користи за разделување на чекорите во ре­доследната контролна структура почеток–крај.  Содржината на редос-ледната контролна структура е еден блок од чекори, а за поголема преглед­ност, тој се пишува малку вовлечено надесно од зборовите почеток и крај. Зборовите почеток и крај се пишуваат во иста верти­кала. Ова важи за сите алгоритамски контролни структури. Овој начин на пишување на алгоритмите и програмите со вовлекување (најчесто за една табуларна позиција), се нарекува назабување (англ. indentation). Со назабувањето, полесно се препознаваат алгоритамските контролни структури. 

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

На пример:

почеток {Почетни вредности}

            a <-- 3;

            b <-- 3.74;

            c <-- '@';

крај

Притоа, стрелката налево <--, се користи како симбол за доделување вредности на променливите. 

Мени

Алгоритамски контролни структури за избор

Мени

Алгоритамски контролни структури за избор од две можности ако-тогаш‒инаку и ако‒тогаш 

 

Алгоритамската контролна структура за избор од две можности се користи за избор на една од двете можни насоки за продолжување на дејство-то во алгоритамот, во зависност од некој услов. Условот е некој логички израз. Логичкиот израз може да има само две вред­ности: точно и неточ-но. Тие се нарекуваат логички вредности и за­тоа, изразот се нарекува логички израз.

Контролната структура за избор од две можности графички е претставена на слика 13.

Ако вредноста на логичкиот израз е точно, тогаш се извршува чекор А, инаку (ако вредноста е неточно)

се извршува чекор Б. Затоа, оваа контролна структура се нарекува акотогашинаку (англ. if-then-else).

Текстуалниот запис на структу­рата во псевдо-јазикот е даден на слика 14.

ако логички израз

                тогаш

                              чекор А;

                инаку

                             чекор Б;

крај_ако {логички израз}

               Слика 14

Структурата започнува со ако, а завршува со крај_ако {логички израз}.

На пример, на слика 15 е користена оваа структура за наоѓање на пого­лемиот од броевите a и b. 

                                                                                                                                                                                                                                                                                  Слика 13

ако a > b

                тогаш

                                pogolem <-- a;

                инаку

                                pogolem <-- b;

крај_ако {a > b}

          Слика 15

Контролната структура за избор од две можности може да се ко­ристи и кога една од можностите не содржи извршни

чекори. Во тој случај, се продолжува на следниот чекор по контролната структура.

Текстуалниот запис е даден на слика 16.

ако логички израз

                тогаш

                                чекор А;

крај_ако {логички израз}

               Слика 16

Оваа контролна структура се нарекува ако–тогаш (англ. if-then). Графичко претставување e дадено на слика 17.                                     Слика 17

На пример, за наоѓање на поголемиот од два броја a и b, со користење на оваа контролна структура, ќе запишеме:

pogolem <-- b;

ако a > b

                тогаш

                                pogolem <-- a;

крај_ако {a > b}               

Контролната структура за избор од две можности може да биде вгнездена (англ. nested) во друга иста контролна структура за избор, на два начи-ни:

  • Во можноста тогаш.

  • Во можноста инаку.

Ако вгнездувањето е во можноста тогаш, структурата се нарекува ако–тогаш–и–ако. Нејзиниот текстуален запис во псевдо-јазикот е даден на слика 18

ако логички израз1

                и–ако логички израз2

                                тогаш

                                                чекор А1;

                                инаку

                                                чекор А2;

                крај_и_ако {логички израз2}

                инаку

                                чекор Б;

крај_ако {логички израз1}

               Слика 18

Ако вгнездувањето е во можноста инаку, контролната структура се нарекува ако–тогаш–или–ако. Нејзиниот текстуален запис во псевдо-јази-кот е даден на слика 19

ако логички израз1

                тогаш

                                чекор А;

                или–ако логички израз2

                                тогаш

                                                чекор Б1;

                                инаку

                                                чекор Б2;

                крај_или_ако {логички израз2}

крај_ако {логички израз1}

          Слика 19

Мени

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

Кога има повеќе можности за продолжување на дејството во алго­ритамот, се користи алгоритамската контролна структура за избор од повеќе можности, слика 20. Изборот на една од можностите се врши во зависност од вредноста на не­кој податок или на некој аритметички израз.

случај израз

                a: чекор А;

                     прекин;

                b: чекор Б;

                     прекин;

                    ...

                k: чекор К;

                     прекин;

                инаку

                     чекор Х;

крај_случај {израз}

          Слика 20

Вредноста на израз може да биде a, b...  k или израз може да не добие ниту една од тие вредности. Во

случај израз да добие вредност a, дејството продолжува со чекор А, во случај вредноста на израз да е

b, дејството продолжува со чекор Б итн.

Во случај израз да не добие ниту една од вредностите a, b... k, тогаш дејството продолжува со чекор Х.

Од досега кажаното се гледа дека со оваа контролна структура се врши избор на еден од повеќе мож-

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

случај (англ. case).

По чекорите a, b... k е наведена алгоритамската контролна структура прекин, со која се прекинува извр-

шувањето на останатите чекори во контролната структура случај и дејството продолжува со чекорот

или контролната структура по случај.

Типот на израз (една променлива или аритметички израз) може да биде од целоброен тип, знаковен тип,

логички тип, или наброив тип.

a, b... k мора да бидат константи од целоброен, знаковен, логички или наброив тип. Тие не може да бидат променливи.

Оваа контролна структура графички е претставена на слика 21.

Мени

Алгоритамски контролни структури за повторување

Овие алгоритамски контролни структури се користат тогаш кога е потребно една група чекори да се извршат повеќе пати. Таквото повторување на извршувањето на група чекори се нарекува циклично повторување. Едно извршување на групата чекори се нарекува циклус.

циклус

                чекор А;

                чекор Б;

                ...                

                чекор М;

крај_циклус

Има повеќе начини да се прекине цикличното повторување. Еден начин е да се испи­тува некој услов. Тој може да се испитува пред почетокот или по завршување на секој циклус.

Друг начин да се прекине повторувањето кога циклусот ќе се повтори одреден број пати.

Затоа, се воведени три алгоритамски кон­тролни структури за повторување, и тоа: две логички – кога се испитува некој услов и една нумеричка – кога се задава бројот на циклуси што треба да се извршат.

Логичките контролни структури за повторување се:

  • Повторување со излез на почетокот од циклусот или додека-извршувај

  • Повторување со излез на крајот од циклусот или  извршувај-додека.

Нумеричката контролна структура за повторување е повторување со броење на циклусите или за-до-чекор

Во некои алгоритми, една контролна структура треба да се наоѓа во друга. Тоа се нарекува вгнезду­вање (англ. nesting).

При вгнездување на контролните структури за повторување, сите чекори на едната контролна структура мора да се наоѓаат во другата, односно не смее да има сечење (преклопување) на контролните структури, како што е претставено на следнава слика.

Мени

Алгоритамски контролни структури за скок

 

Има три вида алгоритамски контролни структури за скок, и тоа:

  • Скок на крајот на циклусот продолжи.

  • Скок на крајот на контролната структурапрекин.

  • Скок на крајот на алгоритамотизлез.

  • Скок на произволно местоскок.

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

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

Алгоритамската контролна структура излез се користи за прекин на ал­горитамот и негово  регуларно завршување.

Алгоритамската контролна структура скок се користи за скок од кое било место на кое било место во алгоритамот. Притоа, мес­тото (чекорот) на кое се скока мора да биде означено. Ознаката може да биде бројна или тексту­ална. Се избегнува корис-тењето на оваа контролна структура во структурираното програмирање, бидејќи алгоритмите ги прави нејасни.

Мени

Алгоритамска контролна структура за повторување додека-извршувај

 

додека услов извршувај

                чекор А;

                чекор Б;

                 ...               

                чекор М;

крај_додека{услов}

Оваа контролна структура се состои од чекорите А, Б... М. Едно извршување на чекорите од А до М е еден циклус. Пред почетокот на секој циклус се испитува дали е исполнет услов-от. Додека е ис­пол­нет (точен) услов-от, се извршуваат чекорите од циклусот. Кога во не­кое испитување на услов-от ќе се констатира дека тој не е испол­нет (не е точен), се прескокнува контролната структура и дејството продолжува со следната. За­тоа, оваа контролна структура се нарекува додека–извршувај.

Бидејќи условот се испитува пред секој циклус, може да се случи условот да не е исполнет уште при првото испитување  и контролната структура да не се изврши ниту еднаш.

Мени

Алгоритамска контролна структура за повторување извршувај–додека

 

извршувај

                чекор-А;

                чекор-Б;

                ...               

                чекор-Е;

додека услов;

Во оваа контролна структура, усло-вот дали следниот циклус од повторувањето ќе се изврши или не, се испитува на крајот по извршување на се-кој циклус. Ако услов-от е исполнет (точен), тогаш циклусот пак се извршува, а ако услов-от не е исполнет (неточен), тогаш циклусот не се извршу-ва, туку дејството продолжува со првиот чекор по циклу­сот. Тоа значи дека циклусите се извршуваат додека е ис­пол­нет некој услов. Затоа, алгоритамската контролна структура за повторување со излез на крајот од циклусот се нарекува извршувај–додека.

Од претходно наведе­ното, може да се заклучи дека контролната структура извршувај–додека мора да се изврши барем еднаш.

Мени

Алгоритамска контролна структура за повторување за–до–чекор

 

за brojac <--  pocetna_vrednost до krajna_vrednost чекор iznos

                чекор А;

                чекор Б;

                ...               

                чекор Т;

крај_за{brojac}

Во контролната структура за повторување со броење на циклусите, бројот на повтору­вања на циклусот е однапред познат.

Повторувањата се бројат со посебен brojac, за кој се задаваат pocet­na_vrednost и krajna_vrednost, како и iznos-от на чекор-от со кој се менуваат вред­нос­тите на brojac од pocetna_vrednost до krajna_vrednost. Износот на чекор-от може да биде позитивен или негативен, зависно дали pocetna_vrednost е поголема или помала од krajna_vrednost.

Циклусот се извршува за секоја вред­ност на brojac-от од pocet­na_vrednost до kraj­na_vrednost со зададениот iznos на чекор-от. Затоа,  контрол-ната структу­ра се нарекува за–до–чекор

Циклусите се повторуваат за вредности на brojac, и тоа:

pocet­na_vrednost,

pocetna_vrednost + iznos,

pocetna_vrednost + 2 × iznos,

pocet­na_vrednost + 3 × iznos итн.

сè додека brojac не добие вредност поголема (или помала) од krajna_vrednost, зависно дали iznos е позитивен или негативен.

Ако iznos > 0, тогаш pocetna_vrednost треба да е помала од krajna_vrednost, инаку нема да се изврши ниту еден циклус.

Ако iznos < 0, тогаш pocetna_vrednost треба да е поголема од krajna_vrednost, инаку нема да се изврши ниту еден циклус.

Променливите brojac, pocetna_vrednost, krajna_vrednost и iznos мора да бидат податоци од ист тип. Вредноста на brojac не смее да се менува во ал­горитамските чекори од кои се состои циклусот.

Ако вредноста на iznos е 1, структурата се нарекува за–зголемувај–до, при што се подразбира дека зголемувањето е за 1.

Ако вредност на iznos е –1, структурата се нарекува за–намалувај–до, при што се подразбира дека намалувањето е за 1.

Текстуалниот запис на овие контролни структури е:

за brojac <-- pocetna_vrednost зголемувај до krajna_vrednost

                чекор А;

                чекор Б;

                ...              

                чекор М;

крај_за {brojac}

 

за brojac <-- pocetna_vrednost намалувај до krajna_vrednost

                чекор А;

                чекор Б;

                ...              

                чекор Ј;

крај_за {brojac}

Мени

Подалгоритми

 

Расчленувањето на некоја задача на помали и поедноставни задачи (подзадачи) се нарекува прог­рамирање одгоре надолу. Притоа, секоја подза-дача може да се разгле­дува како посебна це­лина, независно од другите подзадачи. Затоа, за секоја подзадача може да се напише посебен алго-ритам кој го нарекуваме подалгоритам.

Целта на подалгоритмите е тие да се напишат еднаш и доволно општо за да се користат за сите дозволени вредности на аргументите. Подал-горитмите може да се користат во различни алгоритми, а и на повеќе места во ист алгоритам. Тоа е овозможено преку механизмот формални аргументи (наречени параметри) и вистин­ски аргументи (наречени само аргументи).

Параметрите може да бидат влезни параметри и излезни параметри. Тие се ставаат во загради по името на подалгоритамот и ја прават т.н. листа_на_параметри.

Општиот запис на насловот на секој подалгоритам е:

ИмеНаПодалгоритамот (листа_на_параметри) {

                тело на подалгоритамот

}

Кога треба да се изврши еден подалгоритам за некои ар­гументи, тој се повикува. Повикот на подалгоритамот ги содржи името на подалгорита-мот и листата_на_аргументи .

ИмеНаПодалгоритамот (листа_на_аргументи)  

Со повикот, се овозможува извршување на подалгоритамот, за аргументите наведени во листата_на_аргументи во повикот. Притоа, парамет-рите се заменуваат со соодветните аргументи.

При повикувањето на подалгоритмите, аргументите мора да одговараат со параметрите по број, по тип и по редослед.

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

Подалгоритмите може да се напишат како функциски подалгоритми и како процедурални подалгоритми.

Кај процедуралните подалгоритми, листата_на_параметри содржи влезниизлезни и влезно-излезни параметри, а кај функциските подалго-ритми, таа содржи само влезни параметри.

 Мени

Функциски подалгоритми

 

Функциските подалгоритми го добиле името бидејќи имаат само една излезна вредност, исто како и функ­циите во математиката. Излезната вред­ност се пресметува од влезните параметри, кои може да бидат повеќе. Тие се нарекуваат и влезни формални аргументи, се ставаат во загра-да по името и се одделени со запирки.

Општиот облик на функцискиот подалгоритам е:

подалгоритам Ime(листа_на_влезни_параметри)

почеток

                . . .

                 врати <-- променлива или израз;

крај{ Ime }            

Функциските подалгоритми најчесто се повикуваат со чекор за доделување  

променлива <-- Ime(листа_на_влезни_аргументи);

Исто така, функциските подалгоритми може да се повикуваат во кој било израз или чекор, како и секоја променлива. Затоа, нивното име ќе го пишуваме со латиница. За да се разликуваат од обичната променлива, првата буква ќе ја пишуваме голема, а по името ќе ставаме загради со или без листа_на_влезни_параметри.

Мени

Процедурални подалгоритми

 

Процедуралните подалгоритми (наречени процедури) имаат и влезни параметри и излезни параметри и влезно-излезни параметри. Тие се нарекуваат формални параметри.

Општиот облик на процедуралниот подалгоритам е:

подалгоритам Име(листа_на_влезни_на_излезни_и_на_влезно-излезни_параметри)

почеток

                . . .

крај{ Име }            

Во листа_на_влезни_на_излезни_и_на_влезно-излезни_параметри, пред влезните параметри ќе ставаме знак ↧ (стрелка надолу), пред излез-ните знак ↥ ­ (стрелка нагоре), а пред влезно-излезните знак ↕ (стрелка нагоре-надолу).

Процедуралните подалгоритми се повикуваат само со наведување на името и аргументите.

Име(листа_на_влезни_на_излезни_и_на_влезно-излезни_аргументи);

Процедуралните подалгоритми не може да се повикуваат во чекор за доделување, во чекор за печатење или во изрази. Затоа, нивните имиња ќе ги пишуваме на кирилица со голема прва буква и коси знаци.

Мени

Рекурзивни подалгоритми

 

Eден алгоритам или подалгоритам може да повикува друг подалгоритам. Исто така, подалгоритмите може да се пови­куваат и самите себеси. Таквото повикување се нарекува повратно (рекурентно) повикување, односно повторување (англ. recursion) на повикува­њето. Затоа, пос-тапката на самоповикување на еден подалгоритам е наречена рекурзија, а таквите подалгоритми се наречени рекурзивни подалгоритми.

Рекурзивните подалгоритми може да се реализираат како процедурални или како функциски подалгоритми. Сè што важи за функциските и за процедуралните подалгоритми, важи и за рекурзивните функциски и за рекурзивните процедурални подалгоритми.

На пример, збирот на првите n природни броеви е еднаков на збирот на првите (n – 1) природни броеви плус бројт n.

Рекурзивниот функциски подалгоритам за збир на првите n природни броеви е:

подалгоритам Suma(n)

почеток

                ако n = 0

                                тогаш

                                                врати <-- 0

                                инаку

                                                врати <-- Suma(n ‒ 1) + n;

                крај_ако {n = 0)

крај {Suma}

Рекурзивниот процедурален подалгоритам за збир на првите n природни броеви е:

подалгоритам Збир(n, ­s)

почеток

                ако n > 0

                                тогаш

                                                s <-- s + n;

                                                n <-- n ‒ 1;

                                                Збир(n, s);

                крај_ако {n > 0}

крај {Збир}

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

 zbir <-- Suma(n);

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

Збир(n, s);

Мени

Низи

Мени

Еднодимензионална низа

 

Кога се работи со голем број пода­тоци од ист тип, тие се организираат во структури наречени низи (англ. arrays).

Структурата низа е таква структура на податоци во која секој елемент од низата има свој реден број (индекс).

На пример, елементите a1, a2... an имаат исто име „a“, a се разликуваат само по бројот (индексот) 1, 2... n. Математичкиот запис на овие n елементи со индекси од 1 до n е a[1..n] или [a]n или a[]n.

Вак­вата низа која има само еден индекс, односно една димен­зија, се нарекува еднодимензионална низа или едноиндексна низа.

За означување на низа во алгоритмите, ќе ја користиме ознаката a[1..n].

 Мени

Дводимензионални низи

Дводимензионална низа или двоиндексна низа a[][]m,n се нарекува низата со два индекси, чии елементи имаат исто име, а индексите се менува-ат, и тоа: првиот индекс од 1 до m и вториот индекс од 1 до n.

Ваквата низа може да се претстави како дводимензионална табела, во која првиот индекс на елементите ја означува редицата (едната димензи-ја), а вториот индекс ја означува колоната (другата димензија). На пример, елементот ai,j се наоѓа на пресекот на i-тата редица и ј-тата колона.

Во математиката, за дводимензионална низа се користи терминот матрица. Матрицата претставува правоаголна дводимензионална табела чии елементи се распоредени во редици (елементите што имаат ист прв индекс) и во колони (елементите што имаат ист втор индекс). Ознаката a[][]m,n означува матрица со m редици и n колони.

Дводимензионалните низи во алгоритмите ќе ги означуваме со a[1..m][1..n];       

Забелешки:

             а) Индексите ќе ги запишуваме со запирка, како ai,j или без запирка како aij. Во некои случаи, е неопходно да се стави запирка, како, на пример, ai+1,j-1, а во некои случаи, кога е јасно, како aij, нема да ставаме запирка.  

                б) Димензијата на овие низи ќе ја означуваме со m,n или со m x n.

Мени

redosledna.jpg
kon-str.jpg
akotogasinaku.jpg
akotogas.jpg
moduli.jpg
Anchor 8
Anchor 2
Anchor 5
Anchor 12
Anchor 4
Anchor 6
Anchor 7
Anchor 15
Anchor 9
Anchor 10
Anchor 17
Anchor 11
Anchor 18
Anchor 13
Anchor 19
Anchor 14
Anchor 20
Anchor 16
Anchor 21
Anchor 22
Anchor 23
Anchor 24

2023 проф. д-р Ѓорѓи Јованчевски

bottom of page