АЛГОРИТМИ
Константни и променливи податоци
Графичко претставување на алгоритмите
Алгоритамски контролни структури
Редоследна алгоритамска контролна структура
Алгоритамски контролни структури за избор
Алгоритамски контролни структури за избор од две можности
Алгоритамска контролна структура за избор од повеќе можности
Алгоритамски контролни структури за повторување
Алгоритамски контролни структури за скок
Алгоритамска контролна структура додека-извршувај
Алгоритамска контролна структура извршувај–додека
Податоци и информации
Податоците ги изразуваат фактите, поимите и знаењата. Затоа велиме дека
значењето што го има некој податок е информација.
Податоците се запишуваат во форма разбирлива за човекот: текст, број, слика (видео) и звук. Затоа, често се вели дека
податоците претставуваат записи на информациите.
На пример, годините на некој човек претставуваат запис на информацијата за неговата возраст, просечната оценка на некој ученик е запис на информацијата за неговиот успех, температурата е запис на информацијата за времето (метереолошки) итн.
Секој податок носи во себе некоја (или неколку) информации.
Бидејќи човекот ги добива податоците од надворешниот свет и дава податоци во тој свет, а тие податоци носат информации, велиме дека
информацијата претставува содржина на сето она што го разменуваме (даваме и примаме)
со надворешниот свет.
За добивање информации од податоците, понекогаш е потребно да се обработат повеќе податоци. Затоа,
обработката на податоците претставува процес што се состои од низа на дејства што се извршуваат врз податоците за да се добијат информации.
На пример, за да се добие информацијата за успехот на некој ученик, треба да се пресмета просечната оценка, што се прави со следните дејства:
− Наоѓање на збирот на оценките.
− Делење на добиениот збир со бројот на оценките.
Најчесто, за добивање одредени информаци, треба да се обработат голем број податоци. На пример, за добивање на информациите за Македо-нија, како за: населеноста, староста на нацијата, вероисповедта, вработеноста, невработеноста, образованието итн., се врши попис на населението. Податоците собрани со пописот, мора да се обработат машински, односно компјутерски бидејќи рачната обработка на толкав број податоци е незамислива.
Следно што нѐ интересира е дали може да се мери количината на информации.
Единицата мерка за мерењето на количината информации се нарекува бит (англ. 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). Покрај типот, податоците имаат име и вредност. Значи, податоците ги имаат следниве карактеристики:
-
Име.
-
Тип.
-
Вредност.
Во многу случаи, вредноста на некој податок не се менува. На пример, вредноста на математичките броеви е = 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, за кој се задаваат pocetna_vrednost и krajna_vrednost, како и iznos-от на чекор-от со кој се менуваат вредностите на brojac од pocetna_vrednost до krajna_vrednost. Износот на чекор-от може да биде позитивен или негативен, зависно дали pocetna_vrednost е поголема или помала од krajna_vrednost.
Циклусот се извршува за секоја вредност на brojac-от од pocetna_vrednost до krajna_vrednost со зададениот iznos на чекор-от. Затоа, контрол-ната структура се нарекува за–до–чекор.
Циклусите се повторуваат за вредности на brojac, и тоа:
pocetna_vrednost,
pocetna_vrednost + iznos,
pocetna_vrednost + 2 × iznos,
pocetna_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.













