Professional Documents
Culture Documents
SP23-06 1 Algoritmi
SP23-06 1 Algoritmi
Алгоритми и
програмирање
Структурно програмирање
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Алгоритамско размислување
Алгоритамското (пресметковното)
размислување (англ. computational thinking)
е фундаментална вештина за секого, не
само за информатичарите. Кон читањето,
пишувањето и аритметиката треба да се
додаде и алгоритамското размислување
како неопходна вештина за секое дете.
...
Jeannette M. Wing
Computational Thinking
CACM, vol. 49, no. 3, pp. 33-35, 2006
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
СТРУКТУРНО ПРОГРАМИРАЊЕ
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Примери од Scratch
СТРУКТУРНО ПРОГРАМИРАЊЕ 6
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Алгоритми - дефиниции
◼ Chamber's on-line dictionary “A set of prescribed computational
procedures for solving a problem; a step-by-step method for solving
a problem.”
СТРУКТУРНО ПРОГРАМИРАЊЕ 7 7
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Алгоритми
◼ Алгоритам –
постапка која се состои од конечно множество на
точно дефинирани дејства (операции),
операции применети врз влезните податоци, по
строго пропишан редослед, кои доведуваат до
излезни резултати
◼ алгоритамски чекори - дејства од кои се состои
еден алгоритам
◼ Зависно од општоста на чекорите алгоритамот
може да биде:
- општ
- детален
СТРУКТУРНО ПРОГРАМИРАЊЕ 8
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Пример за алгоритам
Да се подредат три броја а, b и c по големина.
Општ алгоритам:
чекор-1: Задавање на три броеви.
чекор-2: Подредување на првиот и вториот број по големина.
чекор-3: Подредување на првиот и третиот број по големина.
чекор-4: Подредување на вториот и третиот број по големина.
чекор-5: Печатење на броевите.
Подетален алгоритам:
чекор-1: Задавање на броевите а, b и c.
чекор-2: ако а>b тогаш а b
чекор-3: ако а>c тогаш а c
чекор-4: ако b>c тогаш b c.
чекор-5: Печатење на броевите а, b и c.
СТРУКТУРНО ПРОГРАМИРАЊЕ 9
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Детален алгоритам
чекор-1: Задавање на броевите а, b и c.
чекор-2: ако а>b тогаш
чекор-2-1: pom a
чекор-2-2: а b
чекор-2-3: bpom
чекор-3: ако а>c тогаш
чекор-3-1: pom а
чекор-3-2: а c
чекор-3-3: c pom
чекор-4: ако b>c тогаш
чекор-4-1: pom b
чекор-4-2: b c
чекор-4-3: c pom
чекор-5: Печатење на броевите а, b и c.
СТРУКТУРНО ПРОГРАМИРАЊЕ 10
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
СТРУКТУРНО ПРОГРАМИРАЊЕ 11
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Пример
алгоритам СоГрешка;
почеток
Дали овој алгоритам читај m, n;
е ПРАВИЛЕН? ако m n
тогаш
печати m,'',n;
инаку
ако m < n
тогаш
печати m,'<',n;
инаку
печати m,'=',n;
крај_ако {m<n}
крај_ако {m n}
печати 'Каде е грешката ?';
крај
СТРУКТУРНО ПРОГРАМИРАЊЕ 12
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Пример
алгоритам СоГрешка;
почеток
Дали овој алгоритам читај m, n;
е ПРАВИЛЕН? ако m n
тогаш
печати m,'',n;
инаку
Има недостапен сегмент
ако m < n
тогаш
печати m,'<',n;
инаку
печати m,'=',n;
крај_ако {m<n}
крај_ако {m n}
печати 'Каде е грешката ?';
крај
СТРУКТУРНО ПРОГРАМИРАЊЕ 12
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Пример
алгоритам СоГрешка;
почеток
Дали овој алгоритам читај m, n;
е ПРАВИЛЕН? ако m n
тогаш
печати m,'',n;
инаку
Има недостапен сегмент
ако m < n
тогаш
печати m,'<',n;
инаку
печати m,'=',n;
крај_ако {m<n}
крај_ако {m n}
печати 'Каде е грешката ?';
крај
СТРУКТУРНО ПРОГРАМИРАЊЕ 12
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Пример
алгоритам СоГрешка;
почеток
Дали овој алгоритам читај m, n;
е ПРАВИЛЕН? ако m n
тогаш
печати m,'',n;
инаку
Има недостапен сегмент
ако m < n
тогаш
печати m,'<',n;
Што треба да се исправи за да биде инаку
правилен? печати m,'=',n;
крај_ако {m<n}
крај_ако {m n}
печати 'Каде е грешката ?';
крај
СТРУКТУРНО ПРОГРАМИРАЊЕ 12
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Пример
алгоритам СоГрешка;
почеток
Дали овој алгоритам читај m, n;
е ПРАВИЛЕН? ако m n
тогаш
печати m,'',n;
инаку
Има недостапен сегмент
ако m < n
тогаш
печати m,'<',n;
Што треба да се исправи за да биде инаку
правилен? печати m,'=',n;
крај_ако {m<n}
крај_ако {m n}
aко m>n
печати 'Каде е грешката ?';
крај
СТРУКТУРНО ПРОГРАМИРАЊЕ 12
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
СТРУКТУРНО ПРОГРАМИРАЊЕ 13
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Правило 1
(започни со Правило 2
наједноставниот Секој правоаголник може
да се замени со два
Блок-дијаграм) последователни
правоаголници
.
.
.
СТРУКТУРНО ПРОГРАМИРАЊЕ 14
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Правило 3
Правило 3
Правило 3
Правило 3
СТРУКТУРНО ПРОГРАМИРАЊЕ 15
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
СТРУКТУРНО ПРОГРАМИРАЊЕ 13
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Анализа на алгоритми
◼ Што може да се анализира?
◼ Може:
да се одреди времето на извршување на алгоритамот
како функција од неговите влезни податоци
да се одреди максималното побарување на меморија
што е потребна за податоците
да се одреди точната големина на програмскиот код
да се одреди дали програмата точно го пресметува
посакуваниот резултат
да се одреди комплексноста на алгоритамот
да се види колку добро алгоритамот се соочува со
неочекуваните и погрешни влезни податоци
СТРУКТУРНО ПРОГРАМИРАЊЕ 16
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Анализа на сложеност
◼ Сложеноста на алгоритмите се однесува
на тоа колку ресурси (како време или
меморија) се потребни за да се реши
даден проблем или изврши некоја задача.
◼ Најчеста мерка за сложеност е
временската сложеност
се однесува на времето кое му е потребно на
алгоритамот за да произведе резултат како
функција од големината на влезот.
СТРУКТУРНО ПРОГРАМИРАЊЕ 22
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Анализа на сложеност
◼ Мемориска сложеност
се однесува на меморискиот простор што го
користи алгоритамот
СТРУКТУРНО ПРОГРАМИРАЊЕ 23
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Претставување на
броевите во компјутер
Контрола на тек 24
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НЕОЗНАЧЕНИ , Пример
◼ Бројот на нумерички вредности кои можат да
се претстават со неозначени броеви долги n-
бита е: 2n
n-1 n-2 n-3 5 4 3 2 1 0
◼ 0 0 0 0 0 0 0 0 … 0 0 0 0 0 0 0 0
.
. n-1 n-2 n-3 5 4 3 2 1 0
◼ 2n-1 1 1 1 1 1 1 1 … 1 1 1 1 1 1 1 1
СТРУКТУРНО ПРОГРАМИРАЊЕ 26
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
НЕОЗНАЧЕНИ
◼ n=4, 0 до 15
Overflow marker
0000
1111 0001
0000 +1= 1000 +1= 0
1110 15 1 0010
0001 +1= 1001 +1=
14 2
0010 +1= 1010 +1= 1101 0011
13 3
0011 +1= 1011 +1=
Inside: Natural number
0100 +1= 1100 +1= 1100 12 Outside: 4-bit encoding 4 0100
СТРУКТУРНО ПРОГРАМИРАЊЕ 28
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Како се добиваат
броевите од опсегот?
◼ Со n битови, броевите се наоѓаат во опсегот [–2n–1, 2n–1 – 1]
◼ Негативниот дел од опсегот се добива со
ИНВЕРТИРАЊЕ
Додавање 1 ... ДВОЕН КОМПЛЕМЕНТ
Пр. n=3, [ -4 , 3]
◼ 000 0 Кај овие предзначени броеви
◼ 001 1 битот со најголема важност е:
◼ 010 2 0 за позитивен број
◼ 011 3 1 за негативен број.
◼ 100 - 4 ( 11 +1 = 100 (4))
◼ 101 -3 (10 +1 = 11 (3))
◼ 110 -2 (01+1=10 (2))
◼ 111 -1 (00+1=01 (1))
СТРУКТУРНО ПРОГРАМИРАЊЕ 29
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Преполнување (owerflow)
За n=4, -8 до 7 (-2n-1 x 2n-1-1)
0000
1111 0001
+0
1110 –1 +1 0010
–2 +2
При аритметички операции со 1101
Increasing values 0011
броеви ограничени во некој опсег –3 +3
Overflow
marker
СТРУКТУРНО ПРОГРАМИРАЊЕ 30
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
− bita
16 − bita
16
0 00...00000 -16 11 ... 10000
1 00…00001 -15 11…10001
2 00…00010 -14 11…10010
3 00…00011 -13 11…10011
4 00…00100 -12 11…10100
5 00…00101 -11 11…10101
6 00…00110 -10 11…10110
7 00…00111 -9 11…10111
8 00…01000 -8 11…11000
9 00…01001 -7 11…11001
10 00…01010 -6 11…11010
11 00…01011 -5 11…11011
12 00…01100 -4 11…11100
13 00…01101 -3 11…11101
14 00…01110 -2 11…11110
15 00…01111 -1 11…11111
S l i ka 1_21
СТРУКТУРНО ПРОГРАМИРАЊЕ 31
Numeral systems, number representation
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
s e m
СТРУКТУРНО ПРОГРАМИРАЊЕ 32
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
◼ wchar_t (wide character) проширен карактер е податочен тип кој е исто така
карактер само што големината не е 8 бита, туку може да биде 16 или 32
бита.
СТРУКТУРНО ПРОГРАМИРАЊЕ 33
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
СТРУКТУРНО ПРОГРАМИРАЊЕ 34
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
СТРУКТУРНО ПРОГРАМИРАЊЕ 36
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Имплицитна конверзија
◼ Тип на конверзија која се извршува
автоматски од страна на компајлерот
Позната и како автоматска конверзија
Пр. Конверзија од double во int
СТРУКТУРНО ПРОГРАМИРАЊЕ 37
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Имплицитна конверзија
◼ Тип на конверзија која се извршува
автоматски од страна на компајлерот
Позната и како автоматска конверзија
Пр. Конверзија од double во int
Излез:
СТРУКТУРНО ПРОГРАМИРАЊЕ 38
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Имплицитна конверзија
Пр. Конверзија од int во double
СТРУКТУРНО ПРОГРАМИРАЊЕ 39
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Имплицитна конверзија
Пр. Конверзија од int во double
Излез:
СТРУКТУРНО ПРОГРАМИРАЊЕ 40
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Експлицитна конверзија
◼ Кога корисникот мануелно сака да
промени еден податок во друг се нарекува
експлицитна конверзија
◼ Три начини како може да се постигне:
C-style кастирање
Со функциска нотација
Со користење оператори за кастирање
СТРУКТУРНО ПРОГРАМИРАЊЕ 41
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Експлицитна конверзија
◼ Пример за C-style кастирање
◼ Синтакса:
(data_type)expression;
Излез:
СТРУКТУРНО ПРОГРАМИРАЊЕ 42
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Експлицитна конверзија
◼ Пример за кастирање со функциска
нотација
◼ Синтакса:
data_type(expression);
Излез:
СТРУКТУРНО ПРОГРАМИРАЊЕ 43
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Експлицитна конверзија
◼ Оператори за кастирање:
static_cast
dynamic_cast
const_cast
reinterpret_cast
СТРУКТУРНО ПРОГРАМИРАЊЕ 44
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Пример со static_cast
◼ Излез:
СТРУКТУРНО ПРОГРАМИРАЊЕ 45
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Проблеми со кастирање
◼ Недостаток:
◼ Можност за губење на
податоци за време на
конверзијата
Се случува кога
правиме конверзија од
поголем во помал
податочен тип (пр. int
во char)
СТРУКТУРНО ПРОГРАМИРАЊЕ 46
Контрола на тек
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО
Проблеми со кастирање
◼ Недостаток:
◼ Можност за губење на
податоци за време на
конверзијата
Излез:
Прашања?
СТРУКТУРНО ПРОГРАМИРАЊЕ 18