127
Ана Савић Светлана Штрбац - Савић Амела Зековић ДИСКРЕТНА МАТЕМАТИКА И АЛГОРИТАМИ ПРИРУЧНИК ЗА ЛАБОРАТОРИЈСКЕ ВЕЖБЕ ТРЕЋЕ ИЗДАЊЕ Висока школа електротехнике и рачунарства струковних студија Београд, 2012.

Dma prirucnik i labaratorijske vezbe

Embed Size (px)

DESCRIPTION

Овај приручник је намењен студентима прве године Високе школе електротехнике и рачунарства у Београду, за предмет Дискретна математика и алгоритми, на смеровима Рачунарска техника и Нове рачунарске технологије. Прво издање приручника је реализовано помоћу софтверског пакета Matlab . Лабораторијске вежбе у другом измењеном и допуњеном издању приручника су реализоване помоћу софтверских пакета OCTAVE и Matlab. Оctave је део GNU Project-а. Оctave је језик намењен нумеричким израчунавањима. Програм садржи командну линију за обављање линеарних и нелинеарних нумеричких израчунавања. Како Оctave не садржи графички интерфејс, за рад са овим програмом смо користили његову надоградњу QtOctave. Приручник садржи 14 лабораторијских вежби. Прве две вежбе се односе на основе рада у софтверским пакетима OCTAVE и Matlab. У осталим вежбама су обрађени основни појмови и проблеми из Дискретне математике и алгоритама. Обрађене области обухватају логику, скупове, графове, комбинаторику, а велики део приручника је посвећен алгоритмима. Вежбе садрже теоријски увод, решене примере и задатке за самостално решавање. Аутори се захваљују рецезентима др Слободану Обрадовићу и мр Зорану Мишковићу на корисним предлозима и сугестијама који су допринели квалитету овог приручника. Поред највеће пажње током формирања и писања овог приручника могуће је да су се поткрале грешке. Аутори ће бити захвални свим читаоцима који укажу на њих или дају предлоге и сугестије.

Citation preview

Ана Савић

Светлана Штрбац - Савић

Амела Зековић

ДИСКРЕТНА МАТЕМАТИКА И АЛГОРИТАМИ

ПРИРУЧНИК ЗА ЛАБОРАТОРИЈСКЕ ВЕЖБЕ

ТРЕЋЕ ИЗДАЊЕ

Висока школа електротехнике и рачунарства струковних студија

Београд, 2012.

Аутори: др Ана Савић

мр Светлана Штрбац - Савић дипл.инж. Амела Зековић

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

Рецензенти: др Слободан Обрадовић, доцент, Факултет за рачунарске науке у Београду мр Зоран Мишковић, предавач, Висока школа електротехнике и рачунарства струковних студија у Београду

Насловна страна: струк. инж. Ненад Толић Слике: струк. инж. Мирко Ступар Тираж: 90 Штампа: МСТ Гајић III издање Сва права су задржана. Није дозвољено да ниједан део овог приручника буде снимљен, емитован, или репродукован на било који начин, укључујући, али не и ограничавајући се на фотокопирање, фотографију, магнетни или било који други вид записа, без претходне писмене дозволе издавача. Издавач Висока школа електротехнике и рачунарства струковних студија, Војводе Степе 283, Београд Наставно веће Високе школе електротехнике и рачунарства струковних студија у Београду одобрило је издавање и коришћење овог приручника у настави.

Студент

Број индекса

Школска година

Евиденција израде вежби

Вежба број Датум Овера Напомена

1 2 3 4 5 6 7 8 9

10 11 12 13 14

Датум Овера Бодови

Одбрана вежби

Предговор

Овај приручник је намењен студентима прве године Високе школе електротехнике и рачунарства у Београду, за предмет Дискретна математика и алгоритми, на смеровима Рачунарска техника и Нове рачунарске технологије.

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

Matlab . Лабораторијске вежбе у другом измењеном и допуњеном издању приручника су реализоване помоћу софтверских пакета OCTAVE и Matlab.

Оctave је део GNU Project-а. Оctave је језик намењен нумеричким

израчунавањима. Програм садржи командну линију за обављање линеарних и нелинеарних нумеричких израчунавања. Како Оctave не садржи графички интерфејс, за рад са овим програмом смо користили његову надоградњу QtOctave.

Приручник садржи 14 лабораторијских вежби. Прве две вежбе се односе на основе рада у софтверским пакетима OCTAVE и Matlab. У осталим вежбама су обрађени основни појмови и проблеми из Дискретне математике и алгоритама.

Обрађене области обухватају логику, скупове, графове, комбинаторику, а

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

Аутори се захваљују рецезентима др Слободану Обрадовићу и мр Зорану

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

Поред највеће пажње током формирања и писања овог приручника

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

Београд, 2012. Аутори

САДРЖАЈ

1. Bежба 1 Упознавање са софтверским пакетима Octave и Matlab

1.1. Основни прозор софтверског пакета qtОctave 1.2. Основни прозор софтверског пакета Matlab 1.3. Помоћ у раду 1.4. Бројеви 1.5. Излазни формат 1.6. Аритметички оператори 1.7. Основне функције 1.8. Основне константе 1.9. Задаци за самосталан рад

2. Bежба 2 Улазне и излазне величине у Octave

2.1. Променљиве 2.2. Матрице 2.3. Уграђене матрице 2.4. Операције са матрицама 2.5. Задаци за самосталан рад

3. Bежба 3 Математичка логика

3.1. Искази 3.2. Основне логичке операције 3.3. Таутологија и логички закони 3.4. Примена математичке логике у рачунарству 3.5. Задаци за самосталан рад

4. Bежба 4 Математичка логика у рачунарству

помоћу софтвера Logic Gate Simulator

4.1. Увод 4.2. Основна логичка кола 4.3. Исказне формуле помоћу логичких кола 4.4. Задаци за самосталан рад

5. Bежба 5 Скупови

5.1. Појам скупа 5.2. Операције са скуповима 5.3. Задаци за самосталан рад

6. Bежба 6 Графови

6.1. Увод 6.2. Основни појмови 6.3. Представљање графова у рачунару 6.4. Задаци за самосталан рад

7. Bежба 7 Стабла

7.1 Увод 7.2 Стабла 7.3 Задаци за самосталан рад

8. Bежба 8 Комбинаторика

8.1. Увод 8.2. Пермутације 8.3. Пермутације са понављањем 8.4. Варијације без понављања елемената 8.5. Варијације са понављањем 8.6. Комбинације 8.7. Комбинације са понављањем 8.8. Задаци за самосталан рад

9. Bежба 9 M – документи

9.1. Увод 9.2. Командни документи 9.3. Фунцијски документи 9.4. Задаци за самосталан рад

10. Bежба 10 Линијски алгоритми

10.1. Увод 10.2. Линијски алгоритми 10.3. Задаци за самосталан рад

11. Bежба 11 Циклични алгоритми

11.1. Увод 11.2. Циклични алгоритми 11.3. Задаци за самосталан рад

12. Bежба 12 Сложени алгоритми

12.1. Сложени алгоритми 12.2. Задаци за самосталан рад

13. Bежба 13 Рекурзивни алгоритми

13.1. Рекурзивне формуле 13.2. Задаци за самосталан рад

14. Bежба 14 Булова алгебра

14.1. Дефиниција Булове алгебре 14.2. Теореме Булове алгебре 14.3. Алгебарско представљање прекидачких функција 14.4. Задаци за самосталан рад

15. Списак наредби и функција 16. Литература

1

Вежба 1

Упознавање са софтверским пакетима Octave и Matlab

ЦИЉ ВЕЖБЕ

Упознавање студената са софтверским пакетима ОCTAVE и Matlab. Студенти уче основни изглед прозора, његове делове, начинe добијања помоћи при раду у програму, ако и основне аритметичке, логичке и релацијске операторе који ће им омогућити даљи рад у овом програму.

1.1. ОСНОВНИ ПРОЗОР СОФТВЕРСКОГ ПАКЕТА QTОCTAVE

ОCTAVE је слободан програм. То значи да је дозвољено, без новчане надоканаде, користити програм, дистрибуирати, копирати, изучавати и мењати. ОCTAVE је део GNU Project-а. ОCTAVE је језик намењен нумеричким израчунавањима. ОCTAVE садржи командну линију за обављање линеарних и нелинеарних нумеричких израчунавања. Иако име програма ОCTAVE асоцира на музику, заправо је програм ОCTAVE добио име по професору Octave Levenspiel, који је био професор једног од аутора програма. Прву верзију програма написали су James Rawlings и John Ekerdt. Како ОCTAVE не садржи графички интерфејс, за рад са овим програмом ћемо користити његову надоградњу QTOCTAVE. QTOCTAVE нуди конформнији за рад у програму ОCTAVE. Инсталација за ОCTAVE и његову надоградњу QTOCTAVE могу се бесплатно преузети са интернета. Када су програми инсталирани, покретањем софтвера QTOCTAVE појављује је основни прозор програма који изгледа као на следећој слици. Основни прозор софтвера QTOCTAVE, се састоји из неколико делова: Variable List, Navigator и Command Line.

2

Variable List даје листу дефинисаних променљивих. На листи се приказују, њихова имена, величина и тип променљиве. Navigator омогућава повезивање, проналажење и отварање докумената. Command Line је део који ћемо највише користити. Овај део служи за унос команди. Резултат извршавања команди се приказује сукцесивно у делу прозора који започиње са >>>. Овај део прозора се назива Terminal. За брисање претходног рада, тј. његовог приказа на Terminal-у користи се иконица

.

У оквиру командне линије могуће је унети више наредби, раздвајајући их зарезима. Притискањем стралица на горе и на доле на тастатури, могуће је у оквиру командне линије изабрати неку од преходно написаних команди.

1.2. ОСНОВНИ ПРОЗОР СОФТВЕРСКОГ ПАКЕТА MATLAB

Matlab се покреће двоструким кликом на иконицу или из старт менија All Programs/Matlab. Основне целине Matlab прозора су Command Window и Workspace. Укључивање додатних целина, као што су на пример Command History и Current Dиrectory,

3

могуће је из менија View. Целина Workspace чува податке о променљивим, као што је име, врста и вредност променљиве.

У целини Command Window појављује се знак >> иза кога се пише команда. За прихватање и обраду команде потребно је притиснути тастер Enter. Matlab користи резервисану реч ans за приказивање резултата. Уколико није потребно приказивање резултата команде, онда се завршава са знаком ; . >> 5+6; >> У овом случају команда је извршена, али се резултат не приказује. Дугачка командна линија може бити настављена и у следећем реду уколико се на крају линије налази ознака за прекид линије ... (три тачке). Команде линије које започињу са знаком % се третирају као кориснички коментари. Matlab игнорише садржај командних линија које почињу са знаком % и отвара нову командну линију за унос следеће наредбе. >> %Ovo je komentar >> Напомене о раду са Command window:

Уписана команда биће извршена кад се притисне тастер Enter.

4

У исти ред се може уписати више команди ако се раздвоје зарезом.

Не може се вратити у претходни ред командног прозора. Тастер стрелица на горе (↑) приказује иза командног

одзивника (>>) претходну команду. За брисање садржаја целог командног прозора користи се команда clc. Затварање Matlab-а постиже се уобичајеним кликом на крстић у горњем десном углу или куцањем команде exit или quit у командну линију.

1.3. ПОМОЋ У РАДУ

Наредбом help обезбеђена је помоћ и информације током рада. То је велика погодност за кориснике јер је тешко меморисати велики број функција које су дефинисане. Ако откуцамо help у простор предвиђен за командну линију (Command Line) и притиснемо тастер Enter у оквиру дела Terminal ће се појавити објашњење. ПРИМЕР 1: Откуцати следеће наредбе help sin и help *. Видети шта се добија на екрану. >>> help sin `sin' is a built-in function -- Mapping Function: sin (X) Compute the sine for each element of X in radians. See also: asin, sind, sinh >>> help * Multiplication operator. See also `.*' Additional help for built-in functions and operators is available in the on-line version of the manual. Use the command `doc <topic>' to search the manual index. Help and information about Octave is also available on the WWW at http://www.octave.org and via the [email protected] mailing list.

1.4. БРОЈЕВИ

OCTAVE и Matlab омогућавају дефинисање реалних и комплексних бројева. За децимални зарез у овим софтверским пакетима се користи тачка, док се за имагинарну јединицу равноправно користе i и j. За експоненцијални запис броја користи мало слово e, које означава 10 на степен.

5

ПРИМЕР 1: Написати 32 105;1056;86;93;55,8;56,5 ii бројеве.

>>> 5.56, -8.55, 3+9i, 6+8j, 56e+2, 5e-3 ans = 5.5600 ans = -8.5500 ans = 3 + 9i ans = 6 + 8i ans = 5600 ans = 0.0050000 Највећи и најмањи број који Matlab користи се може добити командама realmax и realmin. >>> realmax ans = 1.7977e+308 >>> realmin ans = 2.2251e-308 Бесконачно се означава са Inf (Infinity), док је ознака за недефинисану вредност NaN (Not a Number).

ПРИМЕР 2: Одредити вредност израза 04 и

00 .

>>> 4/0 ans = Inf >>>warning: division by zero >>> 0/0 ans = NaN >>>warning: division by zero

1.5. ИЗЛАЗНИ ФОРМАТ

Излазни облик приказивања резултата може се контролисати наредбом format. Ова команда утиче само на приказ на екрану, а не на то како се нешто израчунава или смешта у меморију. Постоје различити излазни формати: format short, format long, format long e, format short e, format rat. Ако није дефинисан неки други формат подразумевани формат је format short, стандардни формат са 5 значајних цифара. ПРИМЕР 3: Број приказати користећи различите формате. >>> format short, pi

ans = 3.1416

6

>>> format long, pi

ans = 3.14159265358979 >>> format long e, pi

ans = 3.14159265358979e+000 >>> format short e, pi

ans = 3.1416e+000 >>> format rat, pi

ans = 355/113

Следећи број са којим будемо радили биће у последњем формату који смо користили. Да би се вратили у уобичајени format short, довољно је откуцати само наредбу format.

1.6. АРИТМЕТИЧКИ ОПЕРАТОРИ

Аритметички изрази се формирају коришћењем аритметичких операција за које у програмима ОCTAVE и Matlab користимо симболе дате у следећој табели.

+ САБИРАЊЕ

- ОДУЗИМАЊЕ

* МНОЖЕЊЕ

/ ДЕЉЕЊЕ

^ СТЕПЕНОВАЊЕ

ПРИМЕР 4: Израчунати вредност израза 223 .

>>> 3+2*2

ans = 7

ПРИМЕР 5: Израчунати вредност израза

41422x .

>>> x=2+(2*4-1/4)

x = 9.7500

7

ПРИМЕР 6: Израчунати вредност израза 3y x , ако је 23x . >>> x=3^2;

>>>y=3*x

y = 27

Ако не желимо да се резултат или међурезултат одмах прикаже на екрану, на крају наредбе унесе се знак ; . Ово се често користи у раду када нас међурезултати не интересују. На овај начин се убрзава рад на рачунару, јер се елиминише исписивање великог броја, често непотребних међурезултата.

ПРИМЕР 7: Израчунати вредност израза 6 72 4

z

.

>>> z=6*7/(2+4) z = 7

1.7. ОСНОВНЕ ФУНКЦИЈЕ

Функције се позивају тако што се иза имена функције у малој загради наведе аргумент функције. Функције се пишу малим словима. Неке од елементарних функција које су уграђене у софтверске пакете ОCTAVE и Matlab можемо видети у следећој табели.

abs() АПСОЛУТНА ВРЕДНОСТ

sqrt() КВАДРАТНИ КОРЕН

sin() СИНУС

cos() КОСИНУС

tan() ТАНГЕНС

cot() КОТАНГЕНС

exp() ЕКСПОНЕНЦИЈАЛНА ФУНКЦИЈА

log() ЛОГАРИТАМ ОСНОВЕ Е

log10() ЛОГАРИТАМ ОСНОВЕ 10

mod(x,y) ОСТАТАК ПРИ ДЕЉЕЊУ X СА Y

8

ПРИМЕР 8: Израчунати 3

sin .

>>> sin(pi/3) ans = 0.86603

ПРИМЕР 9: Израчунати 4e . >>> exp(4)

ans = 54.598

ПРИМЕР 10: За 5x и 7y израчунати вредност израза

lnz y x . >>> x=5;

>>> y=7; >>> log(y)+sqrt(x)

ans = 4.1820

Приметимо да вредности променљивих x и y нису приказане на екрану, јер се иза променљивих налази знак ;. ПРИМЕР 11: Израчунати вредност израза 10logz x y , за вредности променљивих x и y задатих у предходном примеру. >>> # x i y su vrednosti promenljivih iz prethodnog primera

>>> z=log10(x)+abs(y) z = 7.6990

Ознаке # или % се користе за писање коментара у програму ОCTAVE.

1.8. ОСНОВНЕ КОНСТАНТЕ

Неке променљиве су већ предефинисане у програму ОCTAVE. Ове променљиве заједно са њиховим објашњењем дате су у следећој табели.

ans Вредност израза када није придружен променљивој

9

i , j Имагинарна јединица, 1

pi =3.14159265…

e e = 2.71828182845905…

Inf , или резултат 1/0 (Infinity)

NaN Није број, или резултат 0/0 (Not a Number)

У програму Matlab није дефинисана променњива e, већ се за њу користи exp 1 .

ЗАДАЦИ ЗА САМОСТАЛАН РАД: 1. Представити следеће бројеве:

5 7 101, 234 10 , 8,674 10 ,10 , 5 85, 78,555i i . РЕШЕЊЕ:

2. Укључити формат који приказује више од 5 цифара иза

децималног зареза и наћи како у том случају изгледају дати бројеви. РЕШЕЊЕ:

3. За инсталирану верзију OCTAVE проверити који је најмањи и

највећи реалан број коју та верзија подржава. РЕШЕЊЕ:

10

4. Тригонометријска формула је дата једначином tgx

xtgxx2

sin2

cos2 .

Проверити да ли је тачна за 5

x тако што ћете израчунати

вредност са обе стране једначине. РЕШЕЊЕ:

5. Наћи вредност израза

8 5sin 2 .

РЕШЕЊЕ:

6. Наћи вредност израза

3

56,18dBm 10log10 .

РЕШЕЊЕ:

7. Наћи вредност израза

2e . РЕШЕЊЕ:

11

Вежба 2

Улазне и излазне величине у Octave

ЦИЉ ВЕЖБЕ

Циљ вежбе је упознавање студената са дефинисањем променљивих у OCTAVE, као и са матрицама као основним типом променљивих. У вежби су обрађене и предефинисане матрице. Дати су примери операција са матрицама. Описане променљиве се на исти начин дефинишу и у Matlab-у.

2.1. ПРОМЕНЉИВЕ

OCTAVE омогућава дефинисање променљивих којима се може мењати нумеричка вредност током рада програма. Променљива има своје име и вредност. Додељивање се врши знаком =. Име променљиве је низ знакова који обавезно почиње словом, за којим следе низ знакова који се састоји од слова, цифара или знака _. Тако су a, ab1, Ovo_je_promenljiva регуларна имена за променљиве, док 23a, _a, a# представљају недозвољена имена. OCTAVE разликује велика и мала слова, па су тако променљиве a и A рaзличите. Вредност променљиве се може дефинисaти конкретном вредношћу, мaтемaтичким изрaзом или уз помоћ већ дефинисaне променљиве.

ПРИМЕР 1: Дефинисaти променљиве

22,1,2,5 aACAaba . >>> a=5 a = 5 >>> b=a+2 b = 7 >>> A=1 A = 1 >>> C=A^2+a^2 C = 26 За списак свих променљивих које се тренутно налазе у меморији потребно је написати команду who у командну линију. За списак

12

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

ПРИМЕР 2: Одредити све променљиве, њихову величину и зaузету меморију. >>> who Variables in the current scope: A C a b >>> whos Variables in the current scope: Attr Name Size Bytes Class ==== ==== ==== ===== =====

A 1x1 8 double C 1x1 8 double a 1x1 8 double b 1x1 8 double

Total is 4 elements using 32 bytes OCTAVE садржи и неколико резервисаних имена променљивих. Нека од ових имена су већ поменута, и то су NaN и Inf. Резервисана променљива је и pi која представља број (3,141...).

2.2. МAТРИЦЕ Једна од основних намена програма OCTAVE је рад са матрицама. Матрица представља дводимензионални низ бројева. Уколико матрица има само једну колону или само један ред онда такву матрицу зовемо вектор. У OCTAVE се скалари посматрају као матрице чије су димензије 1x1. Постоји неколико начина за дефинисање матрице: експлицитно дефинисање листе елемената матрице, коришћењем већ дефинисане матрице или генерисањем матрице коришћењем уграђених функција. Приликом дефинисање листе елемената матрице поштују се следећа правила: - елементи једног реда се раздвајају зарезом или размаком - крај реда се означава са ; - цела листа је ограничена угластим заградама, [].

ПРИМЕР 3: Дефинисaти мaтрицу

984321

M .

>>> M=[1,2,3;4,8,9]

13

M = 1 2 3 4 8 9 Дат је пример матрице M, која је дефинисана уз помоћ набрајања листе симбола. Ова матрица има димензије 2x3, односно има 2 реда и 3 колоне. Уколико је матрица једнодимензионална, односно уколико се ради о вектору дефинисање је могуће и коришћењем знака :. Форма оваквог дефинисања вектора је <први елемент вектора>:<инкремент>:<број који је већи или једнак последњој вредности добијеној инкрементирањем>. Уколико се изостави инкремент, његова подразумевана вредност је 1. ПРИМЕР 4: Дефинисaти векторе 543211 V , 975311 V ,

727986931001 V и 432401 V . >>> V1=1:5 V1 = 1 2 3 4 5 >>> V2=1:2:9 V2 = 1 3 5 7 9 >>> V3=100:-7:70 V3 = 100 93 86 79 72 >>> V4=0:pi/4:pi V4 = 0.00000 0.78540 1.57080 2.35619 3.14159 Пошто је матрица генерисана могуће је приступање појединим елементима матрице или њеним деловима. Тако, уколико је дата матрица А, за приступање елементу у i -том реду и ј-тој колони се користи ознака A(i,j). ПРИМЕР 5: Издвојити елемент мaтрице који се нaлaзи у 1. врсти и 3. колони, кaо и елемент из 3. врсте и 2. колоне. >>> A=[5,8,6;3,4,9;7,1,2] A = 5 8 6 3 4 9 7 1 2 >>> A(1,3)

14

ans = 6 >>> A(3,2) ans = 1 За приступање делу матрице се користи синтакса A(r1:r2, k1:k2), где r1:r2 говори да се издвајају елементи од r1 до r2 reda, али тако да се налазе од k1 до k2 колоне. ПРИМЕР 6: Издвојити елементе мaтрице који се нaлaзе у 1. и 2. врсти и 2. и 3. колони, кaо и елементе који се нaлaзе у 2. врсти и 2. и 3. колони.

>>> A(1:2,2:3) ans = 8 6 4 9 >>> A(2,2:3) ans = 4 9 За издвајање свих редова или свих колона довољно је ставити знак :, док се за издвајање последњег реда или последње колоне може користити end. ПРИМЕР 7: Издвојити елементе мaтрице који се нaлaзе у 3. колони, кaо и елементе који се нaлaзе у 3. врсти. >>> A(:,2) ans = 8 4 1 >>> A(3,:) ans = 7 1 2

2.3. УГРAЂЕНЕ МAТРИЦЕ

За генерисање матрице могу се користити и уграђене функције OCTAVE, као што су magic, eye, ones и zeros.У овом случају је потребно само дефинисати димензије матрице. Функција magic(n) генерише Дирерову квадратну матрицу димензије н. Ова матрица има особину да су суме по колонама, редовима и дијагоналама исте. ПРИМЕР 8: Направити Дирерову матрицу димензија 33 .

15

>>> magic(3) ans = 8 1 6 3 5 7 4 9 2 Функција eye(n,m) генерише јединичну матрицу која има н редова и м колона. ПРИМЕР 9: Направити јединичну матрицу димензија 33 .

>>> eye(3,3) ans = Diagonal Matrix 1 0 0 0 1 0 0 0 1 Уз помоћ функција ones(n,m) и zeros(n,m) се генеришу матрице са н редова и м колона које имају све јединце, односно све нуле. ПРИМЕР 10: Нaпрaвити мaтрицу којa сaдржи све јединице димензијa 32 и мaтрицу којa сaдржи све нуле димензијa 23 .

>>> ones(2,3) ans = 1 1 1 1 1 1 >>> zeros(3,2) ans = 0 0 0 0 0 0

2.4. ОПЕРАЦИЈЕ СА МАТРИЦАМА

Пример дефинисања нове матрице N коришћењем већ дефинисане матрице М дат је у наставку текста. ПРИМЕР 11: Додати матрици M скалар 1.

>>> N=M+1 N = 2 3 4 5 9 10

16

За рад са матрицама могуће је користити операторе + и -, док се за операторе *, / и ^, додаје тачка испред оператора, уколико је потребно да се операција изврши за сваки елемент матрице појединачно. Уколико нема тачке испред оператора, онда ће операције бити извршене по правилима за операције са матрицама. ПРИМЕР 12: Креирати матрице KJ , и L . Матрице се формирају од матрице M тако што се свако елемент матрице помножи са 2, подели са 3, односно подигне на квадрат.

>>> J=M.*2 J = 2 4 6 8 16 18 >>> K=M./3 K = 0.33333 0.66667 1.00000 1.33333 2.66667 3.00000 >>> L=M.^2 L = 1 4 9 16 64 81

ПРИМЕР 13: Уочити рaзлику између множењa * и .*

>>> A=[1 2; 2 3]; B=[1 0; 2 3]; >>> A*B ans = 5 6 8 9 >>> A.*B ans = 1 0 4 9

За матрице је карактеристична операција транспоновања. Ова операција се у OCTAVE обавља оператором ’. Уколико урадимо транспоновање матрице то значи да ће колоне матрице сада постати редови и обрнуто, некадашњи редови су сада колоне.

ПРИМЕР 14: Креирати матрицу Mt помоћу матрице M , при чему је TMMt .

>>> Mt=M'

17

Mt = 1 4 2 8 3 9

ПРИМЕР 15: Генерисaти вектор x сa 4 елементa у опсегу [2,8] a зaтим изрaчунaти елементе векторa y= x2 - 4x. >>> x=2:2:8 x = 2 4 6 8 >>> y=x.^2-4*x y = -4 0 12 32

ЗАДАЦИ ЗА САМОСТАЛАН РАД:

1. Формирати матрицу димензија 3 x 2 чији су сви елементи

једнаки 5, коришћењем наредбе ones. РЕШЕЊЕ:

2. Ако је дата матрица

841679532

A , издвојити у нову

матрицу први ред матрице А, као и последња два елемента последње колоне. Формирати порменљиву користећи први елемент матрице.

РЕШЕЊЕ:

18

3. Додати 2 сваком од елеменате матрице

5932

A . Такође,

формирати матрицу чији су елементи добијени множењем са 3 сваког од елемената матрице А.

РЕШЕЊЕ:

4. Дефинисати векторе x = 2, 4, 6, 8, 10 и y= 3, 6, 9, 12, 15.

Израчунати

x

xyyx

xyz

2

.

РЕШЕЊЕ:

19

Вежба 3

Математичка логика

ЦИЉ ВЕЖБЕ

Циљ ове вежбе је упознавање са основним логичким операцијама и законима математичке логике, кроз примере реализоване помоћу OCTAVE.

3.1. ИСКАЗИ

Реченица која има тачно једну истинитосну вредност назива се исказ или суд. Искази се обележавају малим словима, на пример p , q , r и називају се исказна слова.

Истинитосна вредност исказа је:

,,

p је тачан исказp

p je нетачан исказ

Τ.

Уместо ознака Τ и користе се и ознаке 1 и 0 . За дефинисање исказа у OCTAVE се користе релацијски оператори дати у табели 1.

< Мање < = Мање или једнако > Веће > = Веће или једнако = = Једнако ! = Различито

Табела 1. ПРИМЕР 1: Проверити истинитосне вредности исказа p и исказа q, при чему први исказ гласи 2 је једнако 3, а други 2 је различито од 3. >>> p=(2==3) p = 0 >>> q=(2!=3) q = 1 ПРИМЕР 2: Проверити истинитосне вредности исказа, при чему први исказ гласи 5 је веће или једнако од 3, други 2 је веће од 3, а трећи 8 је мање или једнако од 10.

20

>>> 5>=3 ans = 1 >>> 2>3 ans = 0 >>> 8<=10 ans = 1

3.2. ОСНОВНЕ ЛОГИЧКЕ ОПЕРАЦИЈЕ Основне логичке операције су: - негација (НЕ), чија је ознака , - конјункција (И), у ознаци , - дисјункција (ИЛИ), у ознаци , - импликација (АКО - ОНДА), са ознаком - и еквиваленција (АКО И САМО АКО), са ознаком . Истинитосна вредност логичких операција дата је у тебели 2.

p q p q

p q

p q

p q

p

T T T T T T T T T T T T T T T

Табела 2. Оператори који омогућавају основне логичке операције у OCTAVE дате су у табели 3.

Логичка операција Оператор у OCTAVE Негација ~

Конјункција & Дисјункција |

Импликација ( p q ) ~ p | q Еквиваленција ( p q ) P = = q

Табела 3. ПРИМЕР 3: Ако исказ p гласи 2 је једнако 3, а исказ q гласи 5 је веће од 2. Извршити операције конјункције, дисјункције, импликације, еквиваленције и негације. Тачност добијених вредности проверити у истиносној таблици. >>> p=(2==3); >>> q=(5>2); >>> p&q ans = 0 >>> p|q ans = 1

21

>>> ~ p|q ans = 1 >>> p==q ans = 0 >>> ~p ans = 1 >>> ~q ans = 0 ПРИМЕР 4: Проверити истиносну таблицу за операције конјункције и дисјункције на примеру исказа p и q. Исказ p је тачан када гласи 2 је једнако 2, а нетачан за 2 је различито од 2. Исказ q је тачан када гласи 2 је мање од 3, а нетачан за 2 је веће од 3. >>> p=(2==2); >>> q=(2<3); >>> p&q ans = 1 >>> p|q ans = 1 >>> p=(2==2); >>> q=(2>3); >>> p&q ans = 0 >>> p|q ans = 1 >>> p=(2!=2); >>> q=(2<3); >>> p&q ans = 0 >>> p|q ans = 1 >>> p=(2!=2); >>> q=(2>3); >>> p&q ans = 0 >>> p|q ans = 0 ПРИМЕР 5: Проверити истиносну таблицу за операције импликације на примеру исказа p и q. Исказ p је тачан када гласи 3 је једнако 3, а нетачан за 3 је различито од 3. Исказ q је тачан када гласи 6 је мање од 8, а нетачан за 6 је веће од 8. >>> p=(3==3); >>> q=(6<8); >>> ~p|q ans = 1 >>> p=(3==3);

22

>>> q=(6>8); >>> ~p|q ans = 0 >>> p=(3!=3); >>> q=(6<8); >>> ~p|q ans = 1 >>> p=(3!=3); >>> q=(6>8); >>> ~p|q ans = 1

3.3. ТАУТОЛОГИЈА И ЛОГИЧКИ ЗАКОНИ Формулу чине исказна слова p , q , r , (ознаке исказа) и основне логичке операције (негација, конјункција, дисјункција, импликација, еквиваленција). Приорити логичких оператора дати су у табели 4.

Логички оператор Приоритет 1

, 2 , 3

Табела 4. Исказна формула која је увек тачна назива се таутологија. Исказна формула која је увек нетачна назива се контрапозиција. Основни логички закони су:

- Закон идемпотенције p p pp p p

- Двострука негација p p

- Комутативност p q q pp q q p

- Асоцијативност

p q r p q r

p q r p q r

- Де Морганови закони

p q p q

p q p q

.

ПРИМЕР 6: Ако исказ p гласи 6 је једнако 6, проверити на овом примеру закон идемпотенције и закон двострука негација.

23

>>> p=(6==6) p = 1 >>> (p & p)== p ans = 1 >>> (p | p)== p ans = 1 >>> ~(~p)==p ans = 1 ПРИМЕР 7: Исказ p је тачан када гласи 2 2 4 , а нетачан за 2 2 4 . Исказ q је тачан када гласи10 3 , а нетачан за 10 3 . Показати да је формула p p q таутологија, испробавајући све четири комбинације вредности исказа p и q. >>> p1=(2+2==4); >>> q1=(10>=3); >>> p2=(2+2==4); >>> q2=(10<3); >>> p3=(2+2~=4); >>> q3=(10>=3); >>> p4=(2+2~=4); >>> q4=(10<3); >>> p1|~(p1&q1) ans = 1 >>> p2|~(p2&q2) ans = 1 >>> p3|~(p3&q3) ans = 1 >>> p4|~(p4&q4) ans = 1 ПРИМЕР 8: Исказ p је тачан када гласи 3 8 11 , а нетачан за 3 8 11 . Исказ q је тачан када гласи 10 4 6 , а нетачан за 10 4 6 . Показати да је формула p q p q контрапозиција, испробавајући све четири комбинације вредности исказа p и q. >>> p1=(3+8>=11); >>> q1=(10-4==6); >>> p2=(3+8>=11); >>> q2=(10-4~=6); >>> p3=(3+8<11); >>> q3=(10-4==6); >>> p4=(3+8<11); >>> q4=(10-4~=6); >>> (p1&q1)&~(p1|q1) ans = 0

24

>>> (p2&q2)&~(p2|q2) ans = 0 >>> (p3&q3)&~(p3|q3) ans = 0 >>> (p4&q4)&~(p4|q4) ans = 0

3.4. ПРИМЕНА МАТЕМАТИЧКЕ ЛОГИКЕ У РАЧУНАРСТВУ Модерни рачунари користе бројни ситем који има две цифре 0 и 1. Једна бинарна цифра 0 или 1 представља минималну количину информација. Јединица репрезентује истину, а нула неистину. Логичке операције се могу спроводити и над бинарним бројевима, па се тада конјункција често означава као операција AND, а дисјункција као OR. OCTAVE има могућност обављања операција над бинарним бројевима, користећи исте операторе као у случају исказа. Бинарни бројеви се дефинишу у угластим заградама са размацима између цифара. Пример једног бинарног броја у OCTAVE дат је изразом: a = [1 0 1 0 1 1 0 0]. ПРИМЕР 9: Одредити негацију бинарних бројева 00101110 и 11110101. >>> ~[0 0 1 0 1 1 1 0] ans = 1 1 0 1 0 0 0 1 >>> ~[1 1 1 1 0 1 0 1] ans = 0 0 0 0 1 0 1 0 ПРИМЕР 10: Извршити операцију И над бинарним бројевима 10101100 и 00001111. Прокоментарисати резултат. >>> a=[1 0 1 0 1 1 0 0] a = 1 0 1 0 1 1 0 0 >>> b=[0 0 0 0 1 1 1 1] b = 0 0 0 0 1 1 1 1 >>> a&b ans = 0 0 0 0 1 1 0 0 ПРИМЕР 11: Извршити операцију ИЛИ над бинарним бројевима 10001110 и 10001101. Прокоментарисати резултат.

25

>>> m=[1 0 0 0 1 1 1 0] m = 1 0 0 0 1 1 1 0 >>> n=[1 0 0 0 1 1 0 1] n = 1 0 0 0 1 1 0 1 >>> m|n ans = 1 0 0 0 1 1 1 1

ЗАДАЦИ ЗА САМОСТАЛАН РАД: 1. Одредити истинитосну вредност израза у OCTAVE a) 2 6 8 , б) 8 2 4 , в) 5 2 3 . РЕШЕЊЕ: 2. Ако исказ p гласи 3 3 6 , а исказ q гласи 2 4 6 . Извршити операције конјункције, дисјункције, импликације, еквиваленције и негације. Тачност добијених вредности проверити у истиносној таблици датој у тексту вежбе. РЕШЕЊЕ: 3. Проверити да ли је формула p q p q таутологија. Исказ p је тачан када гласи 6 2 8 , а нетачан за 6 2 8 . Исказ q је тачан када гласи17 16 , а нетачан за 17 16 .

26

РЕШЕЊЕ: 4. Извршити следеће операције над бинарним бројевима а=00001010, b=10100111 и c=11101111 a) ¬ а, б) а AND b, в) (a OR b) AND ¬ c.

РЕШЕЊЕ:

27

Вежба 4

Математичка логика у рачунарству помоћу софтвера Logic Gate Simulator

ЦИЉ ВЕЖБЕ

Циљ вежбе је упознавање студената са логичким колима, као практичним примером примене математичке логике. Вежба је реализована помоћу софтвера Logic Gate Simulator који омогућава пројектовање логичких кола по исказној формули и проверу њиховог рада.

4.1. УВОД

Модерни рачунари користе бинарни бројни систем који има две цифре 0 и 1. Бинарни систем је изабран зато што рачунар мора да прикаже било коју цифру на јединствен начин, а постоји велики број електронских склопова који се налазе у два једиствена стабилна стања. Ова стања могу бити отворен-затворен, лево-десно, укључен-искључен и слично. Зато је бинарни систем погодан за коришћење применом математичке логике. Једна бинарна цифра 0 или 1 представља минималну количину информација, односно најмањи податак који се може обрадити у рачунару и зове се бит (bit). Бит може да репрезентује истину (true) и неистину (false). Јединица репрезентује истину, а нула неистину. Логичке операције се представљау и као конјукција AND, а дисјункција као OR, имајући у виду истинитосне таблице за дате логичке операције. У већини рачунара користи се група од осам бита која се назива бајт (byte). Дакле, бинарни бројеви су основа за функционисање рачунара. Дигитална кола комбинују нуле и јединице, и генеришу нове нуле и јединице. Дигитална кола су тако пројектована да имплементирају принципе бинарне аритметике и математичке логике. Софтвер Logic Gate Simulator омогућава једноставно испитивање математичке логике помоћу логичких кола. Логичка кола у софтверу дата су у табели 1. Повезивање логичких кола у софтверу остарује се левим кликом миша на улаз, односно излаз кола и држањем клика до жељеног места са којим се повезивање врши. Елементи софтвера који омогућавају улаз и излаз података дати су у табели 2. Улаз у логичко коло може бити само један бит или

28

уколико је коло на пример са четири улаза и четворобитна реч. Улаз бинарне речи нуди бинарни, али и октавни и децимални приказ броја. Промена приказа је могућа једностаним кликом на ознаку типа приказа кола. У табели 2 та ознака је bin, што значи да је изабран бинарни приказ речи. Када се у простор за рад доведе улазно коло са једним битом његова вредност је 0 и када се позиционира мишем изнад њега обојен је плаво. Вредност улазног бита се мења кликом на коло за улазни бит, при чему се боја кола промени из плавог у црвено. Исте боје сигнализирају и вредност бита на излазу логичког кола.

Конвертор

Логичко И

Логичко ИЛИ

Логичко НИ

Логичко НИЛИ

Ексклузивно ИЛИ

Ексклузивно НИЛИ

Табела 1.

Улаз бита

Излаз бита

Улаз бинарне речи

Излаз бинарне речи

Табела 2.

29

4.2. ОСНОВНА ЛОГИЧКА КОЛА

Рад неколико основних логичких кола у софтверу Logic Gate Simulator демонстриран је у следећим примерима. Рад логичких кола је у складу са истинитосним табелама одговарајућих математичких операција које су дате у вежби Математичка логика. ПРИМЕР 1: Направити помоћу софтвера двоулазно логичко коло И и проверити његов рад за све комбинације логичких бита.

ПРИМЕР 2: Направити помоћу софтвера четвороулазно логичко коло ИЛИ и проверити његов рад за све комбинације логичких бита.

Све комбинације бита дају следећи резултат:

улаз излаз улаз излаз 0000 0 1000 1 0001 1 1001 1

30

0010 1 1010 1 0011 1 1011 1 0100 1 1100 1 0101 1 1101 1 0110 1 1110 1 0111 1 1111 1

Напомена: Промена бита на улазу се врши кликом у коло за унос и уписивањем жељене комбинације бита. Ротирање кола се врши држањем десног клика. ПРИМЕР 3: Направити помоћу софтвера двоулазно логичко коло ексклузивно ИЛИ и проверити његов рад за све комбинације логичких бита.

4.3. ИСКАЗНЕ ФОРМУЛЕ ПОМОЋУ ЛОГИЧКИХ КОЛА

Помоћу логичких кола могуће је представити и целе исказне формуле, а не само основне логичке операције. ПРИМЕР 4: Помоћу логичких кола представити формулу p q p q и написати истинитосну табелу.

31

p q f 0 0 1 0 1 0 1 0 0 1 1 1

ПРИМЕР 5: Помоћу логичких кола представити формулу p q p q p .

ПРИМЕР 6: Помоћу логичких кола представити формулу

p p q p q и проверити да ли је формула таутолаогија.

32

p q Излаз1 Излаз2 f 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 1 1 1 1

Формула је таутологија. ПРИМЕР 7: Помоћу логичких кола представити формулу

p q r p q r и проверити да ли је формула контрапозиција. Користити НИ коло.

p q r Излаз1 Излаз2 f 0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 1 1 0 0

Формула је контрапозиција.

ЗАДАЦИ ЗА САМОСТАЛАН РАД: 1. Направити помоћу софтвера двоулазно логичко коло ИЛИ и проверити његов рад за све комбинације логичких бита.

33

РЕШЕЊЕ: 2. Направити помоћу софтвера четвороулазно логичко коло ексклузивно НИЛИ и проверити његов рад за све комбинације логичких бита. РЕШЕЊЕ:

3. Представити формулу p q p q логичким колима и направити истинитосну табелу. Да ли је формула таутологија? РЕШЕЊЕ: 4. Представити формулу p r q r p q p r q r логичким колима и направити истинитосну табелу. Да ли је формула контрапозиција? Користити коло које има уграђену негацију.

34

РЕШЕЊЕ:

35

Вежба 5

Скупови

ЦИЉ ВЕЖБЕ

Циљ вежбе је упознавање са скуповима и основним операцијама са скуповима. Обрађени су основни закони алгебре скупова. Студенти кроз примере и задатке, у софтверском пакету OCTAVE, за самостално решавање савладавају градиво.

5.1. ПОЈАМ СКУПА

Скуп је основни појам који се не дефинише. Чине га елементи који имају бар једно заједничко својство. Објекти скупа називају се његовим елементима. Скупови се најчешће обележавају велики словима, нпр. A , B , C , а његови елементи малим словима, нпр. a , b , c . Скуп који нема елементе назива се празан скуп и обележава са . Дефинисање скупа у OCTAVE обавља се помоћу вектора (једнодимензионални низ бројеве). Елементи скупа у OCTAVE се пишу у угластим заградама, при чему се раздвајају размаком или зарезом. Други начин дефинисања скупа је помоћу бројача, који у OCTAVE има синтаксу: почетна вредност : корак : крајња вредност. Уколико се изостави корак подразумевана вредност је 1. Празан скуп се у OCTAVE пише као [] . ПРИМЕР 1: Дефинисати скупове 1,3,6,8A , 0, 1,5B и

1,6,10,20C у OCTAVE. >>> A=[1 3 6 8] A = 1 3 6 8 >>> B=[0 -1 5] B = 0 -1 5 >>> C=[1,6,10,20] C = 1 6 10 20

36

ПРИМЕР 2: Дефинисати скупове 1,2,3,4,5,6,7,8,9,10A ,

2,4,6,8,10B и 3,6,9,12,15,18,21,24,27,30C у OCTAVE помоћу бројача. >>> A=1:10 A = 1 2 3 4 5 6 7 8 9 10 >>> B=2:2:10 B = 2 4 6 8 10 >>> C=3:3:30 C = 3 6 9 12 15 18 21 24 27 30 Неки елемент a може припадати датом скупу A , што се означава са a A , или не припадати истом скупу, што се означава са a A . Кажемо да је A подскуп скупа B и пишемо A B , ако сваки елемент скупа A припада истовремено и скупу B . За утврђивање да ли неки елемент припада скупу и да ли је неки скуп подскуп неког другог скупа у OCTAVE се користи наредба ismember. Синтaкса ове нарeдбе је у случају провере да ли неки елемент припада скупу је: ismember( element, skup). Резултат наредбе је 1 ако елемент припада скупу, а 0 ако не. Синтакса наредбе за утврђивање да ли је неки скуп подскуп неког скупа је: ismember( podskup, skup). Само уколико је резултат претходне наредбе све јединице тачно је да је скуп подскуп скупа. ПРИМЕР 3: Нека је дат скуп 2, 1,0,1,2,3,4,5,7,8B . Испитати да ли је 6a елемент овог скупа и да ли је скуп

1,0,3A подскуп скупа B . >>> A=[-1 0 3] A = -1 0 3 >>> B=[-2,-1,0,1,2,3,4,5,7,8] B = -2 -1 0 1 2 3 4 5 7 8 >>> ismember(6,B) ans = 0 >>> ismember(A,B) ans = 1 1 1

37

ПРИМЕР 4: Дефинисати скуп A чији су елементи парни бројеви између 1 и 30, као и скуп B чији елементи задовољавају услов

NxxNxxB

54010| . Користити бројач.

>>> A=2:2:30 A = 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 >>> B=10:5:40 B = 10 15 20 25 30 35 40

5.2. ОПЕРАЦИЈЕ СА СКУПОВИМА Унија два скупа A и B је скуп A B x x A x B .

Пресек скупова A и B је скуп A B x x A x B .

Ако је пресек два скупа A и B празан, тј. A B , тада за та два скупа кажемо да су дисјунктни . Разлика скупова A и B је скуп \A B x x A x B .

38

Симетрична разлика скупова A и B је унија скупова \A B и

\B A , тј. ( \ ) ( \ )A B A B B A .

Комплемент скупа A у односу на скуп B (или допуна скупа A до скупа B ) где је A B . је скуп \BC A B A .

Операција са скуповима Наредба у OCTAVE

Унија, A B union(A,B) Пресек, A B intersect(A,B) Разлика, \A B setdiff(A,B)

Симетрична разлика скупова, A B setxor(A, B)

39

У основне законе алгебре скупова спадају: 1. Асоцијативност A B C A B C A B C A B C , 2. Комутативност A B B A A B B A , 3. Дистрибутивност A B C A C B C A B C A C B C . ПРИМЕР 5: Ако је 1, 2,3A , 2,3, 4,5B и 3,4,5,6,7C

одредити A B и A B C . Проверити у OCTAVE да ли је

A B C A B C . Како се назива ова особина? >>> A=[1 2 3] A = 1 2 3 >>> B=[2 3 4 5] B = 2 3 4 5 >>> C=[3 4 5 6 7] C = 3 4 5 6 7 >>> union(A,B) ans = 1 2 3 4 5 >>> union(union(A,B),C) ans = 1 2 3 4 5 6 7 >>> union(A,union(B,C)) ans = 1 2 3 4 5 6 7 ПРИМЕР 6: Ако је 1, 2,3A , 2,3, 4,5B и 3,4,5,6,7C

одредити A B и A B C . Проверити у OCTAVE да ли је

A B C A B C . Како се назива ова особина? >>> A=1:3 A = 1 2 3 >>> B=2:5 B = 2 3 4 5 >>> C=3:7 C = 3 4 5 6 7 >>> intersect(A,B) ans =

40

2 3 >>> intersect(intersect(A,B),C) ans = 3 >>> intersect(A,intersect(B,C)) ans = 3 ПРИМЕР 7: Ако је 1, 2,3A , 2,3, 4,5B и 3,4,5,6,7C одредити \A B и \C A . >>> A=1:1:3; >>> B=2:1:5; >>> C=2:1:7; >>> setdiff(A,B) ans = 1 >>> setdiff(C,A) ans = 4 5 6 7 ПРИМЕР 8: Ако је 1, 2,3,4,5A , 2,3, 4,5,6,7,8,9,10B одредити симетричну разлику скупова A и B . >>> A=1:5 A = 1 2 3 4 5 >>> B=2:10 B = 2 3 4 5 6 7 8 9 10 >>> P1=setdiff(A,B) P1 = 1 >>> P2=setdiff(B,A) P2 = 6 7 8 9 10 >>> union(P1,P2) ans = 1 6 7 8 9 10 >>> setxor(A,B) ans = 1 6 7 8 9 10 ПРИМЕР 9: Ако је 1, 4,7,10A , 12,14,16,18, 20B и

17...10,9,8C одредити \A C A и A C и упоредити. >>> A=[1 4 7 10] A = 1 4 7 10 >>> B=12:2:20 B =

41

12 14 16 18 20 >>> C=8:17 C = 8 9 10 11 12 13 14 15 16 17 >>> union(A,setdiff(C,A)) ans = 1 4 7 8 9 10 11 12 13 14 15 16 17 >>> union(A,C) ans = 1 4 7 8 9 10 11 12 13 14 15 16 17 ПРИМЕР 10: Ако је 1, 2,3A , 2,3, 4,5B и 3,4,5,6,7C

одредити \ \B C A . >>> A=1:3 A = 1 2 3 >>> B=2:5 B = 2 3 4 5 >>> C=3:7 C = 3 4 5 6 7 >>> setdiff(setdiff(B,C),A) ans = [](1x0)

ЗАДАЦИ ЗА САМОСТАЛАН РАД: 1. Дефинисати следеће скупове у OCTAVE: а) 1,5,7,8,9,14,18A ,

б) 2,4,6,...,20B ,

в) 7,14,21,...,77C ,

г)

NxxNxxD

66020| ,

д) E . РЕШЕЊЕ:

42

2. Користећи наредбу OCTAVE одредити који од претходно дефинисаних скупова (у задатку 1) садржи елемент 18. РЕШЕЊЕ: 3. Нека су дати скупови 1,2,3,4,5M ,

1,2,3,...,10N и 2,4,6,8,10L извршити операције: а) M L , N L , \N L , б) \M L N и \M L N , в) симетрична разлика скупова M и L , г) комплемент скупа L у односу на скуп N . РЕШЕЊЕ: 4. Проверити особину дистрибутивности за скупове ,M N и L из претходног задатка. РЕШЕЊЕ:

43

Вежба 6

Графови

ЦИЉ ВЕЖБЕ

Циљ вежбе је разумевање појма графови и њихов значај. Кроз примере студенти уче различите типове графова и њихов начин представљања у рачунару.

6.1. УВОД

Теорија графова је самостални и важан део математике. Графови су посебно занимљиви јер помоћу њих можемо моделовати сложене проблеме веома једноставно, као што је постављање саобраћајница, постављање електричних мрежа, рачунарских мрежа и сл.

6.2. ОСНОВНИ ПОЈМОВИ Граф је апстрактни математички објекат. Графови су састављени од тачака, односно чворова (врхова) и линија међу њима, односно грана.

Скуп чворова убудуће ћемо обележавати са В, а скуп грана са Е. Граф је задат ако су позната два скупа, скуп чворова В и скуп грана Е. Пример Дат је скуп , , ,V a b c d и dccbdacabaE ,,,,,,,,, . Граф је приказан на слици.

44

Две гране су суседне ако имају исти чвор. Чворови једне гране називају се крајеви. Грана која спаја чвор са самим собом назива се петљом. Граф који нема ниједну петљу називају се простим графом. Комплетан или потпун граф је онај граф код кога су свака два чвора повезана граном.

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

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

45

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

Чворови b, c и d су степена 2, а чворови a и f степена 3. Граф је регуларан ако су сви чворови истог степена. Пример. Регуларан граф где су сви чворови степена 2.

6.3. ПРЕДСТАВЉАЊЕ ГРАФОВА У РАЧУНАРУ Графови се могу употребити за моделирање и решавање многих практичних проблема. Такве проблеме решавамо помоћу рачунара и посебно писаних програма. За представљање графова преко рачунара користе се матрице. Матрица суседства је најчешћа матрична интерпретација графова. Матрица суседства је матрица која на позицији пресека i-те врсте и j-те колоне садржи 1, ако је i-ти чвор спојен са j-тим чвором, иначе је 0. Матрица суседства је квадратна матрица, симетрична у односу на главну дијагоналу. Пример: Графу на слици одговара матрица суседства

46

0101101101011110

За представљање графова у Matlab-у користи се наредба

gplot(A,xy). Параметар А представља матрицу суседства, док параметар xy даје коридинате за положај чворова на слици. ПРИМЕР 1: Нацртати граф дат на слици користећи матрицу суседства.

>> A = [0 1; 1 0]; >> xy=[2 2;2 1]; >> gplot(A,xy) ПРИМЕР 2: Нацртати граф дат на слици користећи матрицу суседства.

>>A = [0 1 0; 1 0 1; 0 1 0]; >> xy=[2 2;3.5 4; 5 2]; >> gplot(A,xy,'-r*')

47

ПРИМЕР 3: Нацртати потпун граф који садржи три чвора користећи матрицу суседства. >> A = [0 1 1; 1 0 1; 1 1 0]; >>xy=[2 2;3.5 4; 5 2]; >> gplot(A,xy,'-ms') >> axis([1 6 1 5])

Матрица инцидeнције за овај граф је

48

110101011

.

ПРИМЕР 4: Нацртати пут који садржи три чвора користећи матрицу суседства. >> A = [0 1 0; 1 0 1; 0 1 0] A = 0 1 0 1 0 1 0 1 0 >> xy=[2 2;4 2; 6 2]; >> gplot(A,xy,'-k+') >> axis([1 7 1 3])

Матрица инцидeнције за претходни граф је

101101

.

ПРИМЕР 5: Нека је дат неусмерен граф G=(V,E), где је скуп чворова 6,5,4,3,2,1V , a скуп грана

6,5,6,3,5,2,3,2,2,1E . Нацртати граф. Да ли је граф повезан?

49

>> A = [1 0 0 0 0 0; 1 0 1 0 1 0; 0 1 0 0 0 1;0 0 0 1 0 0;0 1 0 0 0 1;0 0 1 0 1 0] xy=[1 2;2 2; 3 2;1 1;2 1; 3 1]; gplot(A,xy,'-gs') axis([0 4 0 3]) A = 1 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 Граф није повезан.

ЗАДАЦИ ЗА САМОСТАЛАН РАД: 1. Нацртати пут који садржи три чвора користећи матрицу суседства. Одредити матрицу инцидeнције. РЕШЕЊЕ:

50

2. Нацртати регуларан граф где су сви чворови степена 2 користећи матрицу суседства. Граф има 5 чворова. Одредити матрицу инцидeнције. РЕШЕЊЕ: 3. Нацртати потпун граф који садржи четири чвора користећи матрицу суседства. Одредити матрицу инцидeнције. РЕШЕЊЕ:

4. Нацртати граф са слике и одредити матрицу суседства и инцидeнције.

51

РЕШЕЊЕ:

5. Нека је дат неусмерен граф G=(V,E), где је скуп чворова

4,3,2,1V , a скуп грана 4,23,2,3,1,2,1E . Нацртати овај граф. Да ли је граф повезан?

РЕШЕЊЕ:

52

53

Вежба 7

Стабла

ЦИЉ ВЕЖБЕ

Циљ вежбе је разумевање појма стабла. Кроз примере студенти уче различите врсте стабла и њихову примену. Вежба је реализована коришћењем Matlab-а.

7.1. УВОД

Теорија графова је самостални и важан део математике. Графови су посебно занимљиви јер помоћу њих можемо моделовати сложене проблеме веома једноставно, као што је постављање саобраћајница, постављање електричних мрежа, рачунарских мрежа и сл.

7.2. СТАБЛА

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

Стабло је граф са v чворова и е=v-1 грана и без контура. Стабло је минимално повезан граф. Стабло садржи бар два чвора степена 1. За сваки пар чворова u,v постоји тачно један пут који их повезује. Чвор на врху стабла назива се кореном. Стабло у коме је један чвор посебно означен назива се корено стабло. Означени чвор назива се корен стабла.

54

Сваки чвор кореног стабла повезан је јединственим путем за корен стабла. Број грана у овом путу представља ниво тог чвора. Корен стабла има ниво 0, а највећи ниво имају од корена најудаљенији чворови.

Висина стабла је дужина најдужег могућег пута од корена до листа. Ако је највећи излазни степен, било ког чвора стабла, једнак m, тада се то стабло назива m - арним стаблом. У посебном случају, ако је m=2, добијамо бинарно стабло. У бинарном стаблу сваки отац има тачно 2 сина и свако дете се посматра као лево или десно дете. Ако су у бинарном стаблу завршни чворови сви истог нивоа, бинарно стабло се назива потпуно.

На нивоу к постоји тачно 2k чворова. Ако потпуно бинарно стабло има поред нивоа 0 још к нивоа, тада је број чворова н у стаблу једнак

2 11 2 2 2 2 1k kn

55

Број завршних чворова (листова) је 122

k n , а осталих

12 12

k n .

У Matlab-у стабло се формира користећи наредбу: ntree(ORD,D).

У Matlab-у се увек формира корено стабло. Параметар ORD представља ред стабла, док је параметар D висина стабла. Оваква функција увек прави потпуно стабло. Проширењем параметара наредбе може се подешавати потпуност стабла. У овом случају наредба има облик:

ntree(ORD,D,S). Параметар S је вектор који има 1 на месту чвора који има потомке, а 0 за чворове који их немају. ПРИМЕР 1: Нацртати стабло реда 3 и висине 2. >> t=ntree(3,2) Tree Object Structure ======================= Order : 3 Depth : 2 Terminal nodes : [4 5 6 7 8 9 10 11 12] -------------------------------------- >> plot(t)

ПРИМЕР 2: Нацртати бинарно стабло висине 4.

56

>> t=ntree(2,4) Tree Object Structure ======================= Order : 2 Depth : 4 Terminal nodes : [15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30] -------------------------------------- >> plot(t) Када је формирано потпуно корено стабло, ако је потребно да неки чвор добије или изгуби потомке користе се наредбе:

Т=nodesplt(T,N), Т=nodejoin(T,N).

Параметри наредби су T које означава стабло и N број чвора на који се наредба односи. ПРИМЕР 3: Нацртати бинарно стабло са слике.

>> plot(t) >> t=ntree(2,3) Tree Object Structure ======================= Order : 2 Depth : 3 Terminal nodes : [7 8 9 10 11 12 13 14] -------------------------------------- >> plot(t) >> %u prozoru sa grafikom u meniju Node Label izabrati Index >> t=nodejoin(t,3) Tree Object Structure ======================= Order : 2

57

Depth : 3 Terminal nodes : [3 9 10 11 12 13 14] -------------------------------------- >> t=nodejoin(t,4) Tree Object Structure ======================= Order : 2 Depth : 3 Terminal nodes : [7 8 4 11 12 13 14] -------------------------------------- >> plot(t) ПРИМЕР 4: Нацртати стабло реда 4 и висине 2, тако да само два чвора нивоа 1 имају потомке. >> t=ntree(4,2) Tree Object Structure ======================= Order : 4 Depth : 2 Terminal nodes : [5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20] -------------------------------------- >> plot(t) >> %u prozoru sa grafikom u meniju Node Label izabrati Index >> t=nodejoin(t,1) Tree Object Structure ======================= Order : 4 Depth : 2 Terminal nodes : [9 10 11 12 13 14 15 16 17 18 19 20] -------------------------------------- >> t=nodejoin(t,4) Tree Object Structure ======================= Order : 4 Depth : 2 Terminal nodes : [13 14 15 16 17 18 19 20] -------------------------------------- >> plot(t)

58

ПРИМЕР 5: Нацртати стабло са слике ако се чвор 1v узме за корени чвор.

>> t=ntree(3,2); t=nodejoin(t,1); t=nodejoin(t,2); plot(t)

59

За одређивање листова стабла користи се наредба leaves(T). За одређивање броја листова стабла користи се наредба ntnode(T). За одређивање чворова који нису листови користи се наредба noleaves(T). За одређивање родитеља стабла користи се наредба nodepar(T,N). ПРИМЕР 6: За потпуно бинарно стабло висине 3 одредити листове и њихов број. Одредити чворове који нису листови. Који је укупан број чворова? >> t=ntree(2,3); >> leaves(t) ans = 7 8 9 10 11 12 13 14 >> l=ntnode(t) l = 8 >> noleaves(t) ans = 0 1 2 3 4

60

5 6 >> m=length(noleaves(t)) m = 7 >> m+l ans = 15

ЗАДАЦИ ЗА САМОСТАЛАН РАД:

1. Нацртати потпуно стабло висине 3 и реда три. Одредити број листова овог стабла. За један изабрани лист одредити претке. РЕШЕЊЕ: 2. Нацртати стабло са слике ако се чвор 2v узме за корени чвор.

РЕШЕЊЕ:

61

3. Нацртати бинарно стабло које одговара стаблу насталом бинарним претраживањем имена: Милош, Софија, Владе, Стефан, Новак, Ана и Марија. РЕШЕЊЕ:

4. Нацртати бинарно стабло које садржи бројеве поредане у нумеричком поретку: 25, 6, 44, 2, 30, 58, 12. РЕШЕЊЕ:

62

63

Вежба 8

Комбинаторика

ЦИЉ ВЕЖБЕ

Циљ вежбе је упознавање студената са основним начинима распоређивања елемената у скупове. Кроз примере реализоване помоћу Matlab-а уче пермутације, варијације и комбинације. 8.1. УВОД

Предмет комбинаторике је распоређивање елемената у коначне скупове и одређивање броја таквих распореда. Разликујемо три врсте различитих распореда и то су: пермутације, варијације, и комбинације.

8.2. ПЕРМУТАЦИЈЕ Нека је дат скуп 1 2, , , nA a a a . Пермутација је било који распоред свих n елемената скупа A . Број пермутација скупа од n елемената износи:

1 2 1 !P n n n n . Симбол !n је скраћеница за записивање узастопног производа од n елемената и чита се n факторијел. По дефиницији се узима да је 0! 1 . За одређивање пермутација у Matlab-у користи се наредба

perms(v),

где је са v означен скуп елемената чије се пермутације одређују. Скупови се у Matlab-у представљају помоћу вектора. Факторијел се у Matlab-у одређује помоћу наредбе

factorial(n).

ПРИМЕР 1: Нека је дат скуп 1, 2,3A . Одредити све пермутације елемената овог скупа. >> A=[1 2 3] A =

64

1 2 3 >> P = perms(A) P = 3 2 1 3 1 2 2 3 1 2 1 3 1 2 3 1 3 2 ПРИМЕР 2: Нека је дат скуп 1, 2,3A . Колико има пермутација елемената овог скупа? >> factorial(3) ans = 6 ПРИМЕР 3: Колико троцифрених бројева се може написати помоћу цифара 4, 5 и 6? Свака цифра у броју се може појавити само једном. >> v=[4 5 6] v = 4 5 6 >> perms(v) ans = 6 5 4 6 4 5 5 6 4 5 4 6 4 5 6 4 6 5 ПРИМЕР 4: Наћи све пермутације скупа , , ,A a b c d . Напомена: Како су елементи скупа слова, а не бројеви пре њиховог коришћења потребно их је дефинисати помоћу наредбе syms. Набрајају се сва слова и раздвајају размаком. >> syms a b c d >> v=[a b c d] v = [ a, b, c, d] >> P=perms(v) P = [ d, c, b, a] [ d, c, a, b] [ d, b, c, a] [ d, b, a, c]

65

[ d, a, b, c] [ d, a, c, b] [ c, d, b, a] [ c, d, a, b] [ c, b, d, a] [ c, b, a, d] [ c, a, b, d] [ c, a, d, b] [ b, c, d, a] [ b, c, a, d] [ b, d, c, a] [ b, d, a, c] [ b, a, d, c] [ b, a, c, d] [ a, c, b, d] [ a, c, d, b] [ a, b, c, d] [ a, b, d, c] [ a, d, b, c] [ a, d, c, b] ПРИМЕР 5: На колико начина се могу распоредити 6 различитих књига на полицу? >> n=6; >> factorial(n) ans = 720

8.3. ПЕРМУТАЦИЈЕ СА ПОНАВЉАЊЕМ Нека је дат скуп 1 2, , , nA a a a . Број пермутација са понављањем, скупа од n елемената, међу којима има 1 2, , , mk k k једнаких износи

1 2

1 31, ,

31 2 1 2

!! ! !m

mk k k

m m

n k k kn n k nP nk kk k k k k

.

ПРИМЕР 6: Одредити број пермутација елемената 0,0,0,1,1,1,1. Напомена: Број пермутација за овај пример се рачуна по формули

3,4

7 7 3 7!73 4 3!4!

P

.

>> n=7; >> k1=3; >> k2=4; >> factorial(n)/(factorial(k1)*factorial(k2)) ans = 35

66

ПРИМЕР 7: Одредити број петоцифрених бројева који се може написати помоћу цифара 4,4,5,5,5. >> n=5; >> k1=2; >> k2=3; >> factorial(n)/(factorial(k1)*factorial(k2)) ans = 10

8.4 ВАРИЈАЦИЈЕ БЕЗ ПОНАВЉАЊА ЕЛЕМЕНАТА Нека је дат скуп 1 2, , , nA a a a . Варијација класе од k елемената је било која k -торка различитих елемената скупа A . Број варијација износи

1

11 1

kn

ki

V n i n n n k

.

ПРИМЕР 8: Дат је скуп 1 2 3, ,A a a a . Колико има варијација друге класе елемената овога скупа? >> n=3; >> k=2; >> n-k+1 ans = 2 >> 3*2 ans = 6 ПРИМЕР 9: На конкурс у фирму јавило се 6 кандидата за радна места директора, секретара и потрира. На колико начина их је могуће изабрати? >> n=6; >> k=3; >> n-k+1 ans = 4 >> 6*5*4 ans = 120

8.5. ВАРИЈАЦИЈЕ СА ПОНАВЉАЊЕМ ЕЛЕМЕНАТА Нека је дат скуп 1 2, , , nA a a a . Варијација са понављањем класе од n елемената је било која k - торка елемената скупа A .

67

Број варијација износи n k

kV n .

ПРИМЕР 10: Колико има двоцифрених бројева који се могу написати са цифрама 2, 4 и 6? >> n=3; >> k=2; >> n^k ans = 9

8.6. КОМБИНАЦИЈЕ Нека је дат скуп 1 2, , , nA a a a . Комбинација класе од k елемената је било која k -торка различитих елемената скупа A . За одређивање свих комбинација класе k у Matlab-у се користи наредба:

nchoosek(v,k), где је v скуп елемената. Скупови се у Matlab-у представљају помоћу вектора. Број комбинација износи

1 1! !

nn kk

n n n n kVCkk k

Израз nk

назива се биномни коефицијент и чита се н над к.

За одређивање вредности биномног коефицијена у Matlab-у се користи наредба:

nchoosek(n,k). ПРИМЕР 11: Дат је скуп 1 2 3, ,A a a a . Колико има комбинација друге класе елемената овога скупа и које су то комбинације? >> syms a1 a2 a3 >> v=[a1 a2 a3] v = [ a1, a2, a3] >> n=3; >> k=2; >> nchoosek(n,k) ans = 3 >> nchoosek(v,k) ans = [ a1, a2]

68

[ a1, a3] [ a2, a3]

8.7. КОМБИНАЦИЈЕ СА ПОНАВЉАЊЕМ ЕЛЕМЕНАТА Нека је дат скуп 1 2, , , nA a a a . Комбинација класе од k елемената са понављањем је

1 1 !! 1 !

nk

n k n kC

k k n

.

ПРИМЕР 12: Колико различитих бацања је могуће са две коцкице за јамб? Напомена: У овом примеру елементи скупа су 1, 2,3, 4,5,6A , а узимају се по два елемента, јер се бацају две коцкице. >> n=6; >> k=2; >> nchoosek(n+k-1,k) ans = 21 Важна напомена: Основне разлике између пермутација, варијација и комбинација дате су у табели 1.

Број елемената Распоред елемената Пермутације Користе све елементе Важан Варијације Не користе све

елементе Важан

Комбинације Не користе све елементе

Није важан

Табела 1.

ЗАДАЦИ ЗА САМОСТАЛАН РАД:

1. У једној учионици ред са 16 столица заузет је са тачно 16 студената. Колико има могућности за распоред седења студената? РЕШЕЊЕ:

69

2. Одредити број пермутација од елемената , , ,a b b c . РЕШЕЊЕ:

3. На тикету спортске прогнозе има 14 сусрета. Колико попуњених колона обезбеђује 14 тачних погодака? РЕШЕЊЕ:

4. Колико различитих лото листића 7/39 је потребно попунити да би се сигурно остварио добитак? РЕШЕЊЕ:

5. Колико има троцифрених бројева који се могу написати са цифрама 2,3,6,7 и 9, при чему цифре не смеју да се понављају? РЕШЕЊЕ:

70

71

Вежба 9

М документи

ЦИЉ ВЕЖБЕ

Циљ ове вежбе је даље упознавање са радом у софтверским пакетима ОCTAVE и Matlab. Студенти кроз примере уче писање командних и функцијских докумената. Писање докумената различитог типа помоћи ће студентима у решавању сложенијих проблема.

9.1. УВОД

Недостатак извршавања наредби у командном прозору је губљење унетих података и свих добијених резултата након завршетка рада у софтверским пакетима Оctave и Matlab. Зато се намеће потреба за формирањем докумената (фајлова) у које се могу сместити програми, нумерички резултати, графици, структуре, a који ће остати трајно сачувани и по потреби бити позивани од стране корисника. Команде се упишу у фајлове, сниме и затим покрену. Покретањем таквог фајла команде се извршавају редом којим су наведене. M фајлови су специфичност програма Оctave и Matlab. То су фајлови који садрже текст у ASCII коду и у имену имају екстензију .m. Постоје две врсте М фајлова: командни (script) и функцијски (function).

9.2. KOMАНДНИ ДОКУМЕНТИ

Командни или скрипт документ представља низ OCTAVE или Matlab команди снимљених као засебан програм, које се извршавају када се фајл позове. Формирање фајлова врши се коришћењем едитора текста који се у OCTAVE програмском пакету покреће тако што се из менија View командног прозора бира команда Dock Tools, а затим опција

72

Editor. Други начин да се отвори Editor је кликом на иконицу

. Тада се отвара нов прозор за писање програма. Команде се пишу ред по ред. OCTAVE аутоматски додељује број новом реду када се притисне тастер Enter.

Скрипт фајл мора бити снимљен да би се могао покренути. То се ради наредбом Save As из менија File Editor-a, после чега бира се место где ће се снимити фајл и име под којим се снима. Правила за имена су иста као и за имена променљивих (почињу словом, могу садржати цифре и имају највише 63 знака). Имена скрипт фајлова не могу бити имена OCTAVE команди или имена променљивих које дефинишете. Програм се извршава укуцавањем имена фајла без екстензије и

притиском на тастер Enter или кликом на иконицу . Промена између Editor-a и Octave Terminal-a где ће бити приказан резултат извршавање документа врши се помоћу падајућег менија приказаног на следећој слици.

73

Формирање фајлова врши се коришћењем едитора текста који се у Matlab програмском пакету покреће тако што се из менија File командног прозора бира команда New, а затим опција M-file. Тада се отвара нов прозор за писање програма. Команде се пишу ред по ред. Matlab аутоматски додељује број новом реду када се притисне тастер Enter. Скрипт фајл мора бити снимљен да би се могао покренути. То се ради наредбом Save As из менија File, после чега бира се место где ће се снимити фајл и име под којим се снима. Правила за имена су иста као и за имена променљивих. Имена скрипт фајлова не могу бити имена Matlab-ових команди или имена променљивих које дефинишете. Програм се извршава укуцавањем имена фајла без екстензије и притиском на тастер Enter. Бржи начин за позивање фајла је помоћу иконице у облику листа папира, са плавом стрелицом усмереном на доле.

ПРИМЕР 1: Написати фајл за одређивање збира квадрата првих двадесет природних бројева и сачувати фајл под именом zbirKvadrata.

74

#Ime ovog dokumenta je zbirKvadrata

s=0;

for i=1:20 s=s+i^2;

end s

>>> #Rezultat izvrsavanja je prikazan na Terminalu

>>> zbirKvadrata s = 2870

Сваки пут када нам је потребан овај резултат, довољно је само откуцати реч zbirKvadrata, под којим смо упамтили овај фајл и притиснути тастер Enter. Као резултат добијамо: Уколико желимо да променимо вредности у фајлу, морамо га отворити, променити жељене вредности и поново снимити овако измењени фајл. ПРИМЕР 2: Изменити фајл под именом zbirKvadrata. тако да број сабирака буде произвољан. Вредност променљиве унети наредбом input. #Ime ovog dokumenta je zbirKvadrata

s=0;

x=input('Unesi broj željenih sabiraka, x=') for i=1:x

s=s+i^2; end

s

>>> #Rezultat izvrsavanja je prikazan na Terminalu >>>Unesi broj željenih sabiraka, x= 10

x = 10 s = 385

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

75

9.3. ФУНКЦИЈСКИ ДОКУМЕНТИ

Функцијски фајл омогућава кориснику програма OCTAVE или Matlab да ствара нове функције. Функцијски фајлови се пишу и уређују исто као и скрипт фајлови. Основна особина функцијског фајла је да има улаз и излаз. Функцијски фајлови морају у првој линији да садрже наредбу function. Наредба има облик: function [ излазни аргументи y1, y2,…] = ime funkcije (улазни аргументи x1, x2,…), function ime funkcije (x1, x2,…), или function [y1, y2,…] = ime funkcije. После овога израза следи низ OCTAVE или Matlab команди и израза. ПРИМЕР 3: Формирати функцијски фајл у коме се дефинише

нова функција log1

xf xx

и запамтимо га под именом FL.

# Ove je funkcijski fajl

# Ime ovog fajla je FL function y=FL(x)

y=log10(x/(x+1)); end

Ако желимо да израчунамо вредност ове функције, довољно је да позовемо функцију FL и дефинишемо вредност променљиве, на пример 1x . >>>error: `x' undefined near line 4 column 9

error: evaluating argument list element number 1 error: evaluating argument list element number 1

FL.m at line 4, column 2

# Terminal javlja gresku zato sto jos uvek ne zna vrednost za x >>> FL(1)

ans = -0.30103

76

ПРИМЕР 4: Формирати функцијски фајл у коме се дефинише

функција 1x

xf x e под именом FEI, а да се вредност независно променљиве унеси коришћењем наредбе input. # Ove je funkcijski fajl # Ime ovog fajla je FEI

function y=FEI x=input('Uneti vrednost za x, x=')

y=exp(x/(x+1)); end

Позивањем функције FEI и одговором на постављено питање добићемо решење. >>> FEI

Uneti vrednost za x, x= 2 x = 2

ans = 1.9477

ПРИМЕР 5: Формирати функцијски фајл под именом ime којим се одређује број слова у неком имену. % Funkcijski fajl ime kojim se određuje broj slova u imenu function br(x)

x=input('unesi svoje ime:','s') % oznaka 's' u naredbi označava da se unose stringovi

n=length(x); disp(['broj slova u imenu je ',num2str(n)])

>>> ime unesi svoje ime: marko

x = marko broj slova u imenu je 5

У наредби disp, текст се састоји од два дела. Први део је текст (string), а други резултат програма за n - број који мора да се наредбом num2str пребаци у знак (string).

77

ПРИМЕР 6: Формирати функцијски фајл под именом KOMPL, који за два произвољна комплексна броја одређује њихове модуле и аргументе. # Ime ovog funkcijskog fajla je KOMPL

function [r1,r2,fi1,fi2]= KOMPL(z1, z2) r1=abs(z1)

r2=abs(z2) fi1=angle(z1)

fi2=angle(z2) end

>>>KOMPL(1+i, 1+3i)

r1 = 1.4142 r2 = 3.1623

fi1 = 0.78540 fi2 = 1.2490

Користећи формиране фајлове можемо формирати нове функцијске фајлове.

ЗАДАЦИ ЗА САМОСТАЛАН РАД:

1. Написати функцију која црта потпуно стабло произвољне висине и реда. Ова функција такође и одређује број листова стабла. РЕШЕЊЕ:

2. Написати функцију која за унете елементе скупова A и B

одређује унију, пресек и разлику скупова.

78

РЕШЕЊЕ:

3. Формирати функцијски фајл под именом име којим свако уноси

своје име и презиме, пребројава број слова и ако је тај број мањи од 15 одређује модуо и аргумент комплексног броја 1 3z i , ако је број слова између 15 и 20 дефинише јединичну матрицу 3 3 , а ако је већи од 20 израчунава суму првих 100 природних бројева. РЕШЕЊЕ:

4. Формирати функцијски фајл под именом si којим се израчунава

функција x

x)sin( , затим израчунати 2

si

, 0si .

РЕШЕЊЕ:

79

Вежба 10

Линијски алгоритми

ЦИЉ ВЕЖБЕ

Циљ вежбе је разумевање појма линијског, простог и разгранатог, алгоритма. Кроз примере и задатке за самостално решавање, у софтверском пакету OCTAVE, студенти уче да пишу алгоритмe са оваквом структуром.

10.1. УВОД Рачунарски програм је низ наредби. Када је програм једноставан наредбе се извршавају једна за другом, по редоследу како су написане. Међутим, постоје сложени програми када се наредбе не морају тако извршавати. Софтверски пакет OCTAVE има више наредби које омогућавaју кориснику да управља током програма. То су наредбе: if, switch, for, while, else, break, error, ...

10.2. ЛИНИЈСКИ АЛГОРИТМИ Линијске алгоритамске шеме су оне шеме код који се сваки алгоритамски корак извршава највише једанпут у току извршавања алгоритма. Могу бити просте и разгранате. За линијске разгранате алгоритме користе се наредбе if и switch. Наредба if се користи за условно извршавање програма. Приликом извршавања програма прво се долази на исказ if . Ако је условни израз у исказу if тачан, програм извршава команде које непосредно следе, све до исказа end. Ако је условни исказ нетачан, програм прескаче команде између if и end и наставља да извршава команде иза исказа end. Облик петље је if израз наредбе end

80

if израз наредбе 1 else наредбе 2 end

81

if израз 1 наредбе 1 elseif израз 2 наредбе 2 else наредбе 3 end

За уношење вредности променљиве може да се користи наредба input. Наредба има облик: ime promenljive=input (‘tekst‘). За исписивање излазних резултата користи се наредба disp. Наредба има облик: disp(‘tekst’). ПРИМЕР 1: Унети године старости и ако је број година мањи од 18 исписати на излазу 'забрањен алкохол', а у супротном исписати на излазу 'дозвољен алкохол'.

82

godine =input ('godine su:'); if godine <18 disp( 'zabranjen alkohol' ) else disp( 'dozvoljen alkohol' ) end >>>godine su: 16 zabranjen alkohol ПРИМЕР 2: За унапред задату вредност променљиве x израчунати вредност израза y , тако да, ако је 2x следи да је

2y x , за 2x је 2y , иначе је 2y x . x=input('x=') if x<2 y=-2*x; elseif x==2 y=2; else y=2*x; disp(y) end >>>x= 3 x = 3 6

83

ПРИМЕР 3: За унапред задате вредности променљивих a и b написати програм тако да се променљивој c додељује мања вредност од задате две. Уколико су вредности променљивих a и b једнаке потребно је да се исписује текст са обавештењем да је дошло до грешке. a=input('a=') b=input('b=') if a>b c=b elseif a<b c=a else disp('Dogodila se greska') end >>>a= 1 a = 1 b= 2 b = 2 c = 1 ПРИМЕР 4: Одредити да ли круг пречника a или квадрат странице a има мању површину. Написати функцију која за унету вредност променљиве a одређује мању површину, даје њену вредност и информацију о томе чија површина је мања. a=input('Unesi vrednost promenljive a, a=') Kr=(a/2)^2*pi; Kv=a^2; if Kr>Kv S=Kv disp('Manju povrsinu ima kvadrat.') elseif Kv>Kr S=Kr disp('Manju povrsinu ima krug') else disp('Povrsina kruga i kvadrata je ista.') end >>>Unesi vrednost promenljive a, a= 2 a = 2 S = 3.1416 Manju povrsinu ima krug

ПРИМЕР 5: Написати функцију која за унете вредности страница троугла одређује да ли је комбинација могућа. Водити рачуна да је збир било које две странице троугла увек већи или једнак трећој. a=input('Unesi vrednost stranice a, a=')

84

b=input('Unesi vrednost stranice b, b=') c=input('Unesi vrednost stranice c, c=') if (a+b)<c disp('Ovo nisu stranice trougla, jer je (a+b)<c.') elseif (a+c)<b disp('Ovo nisu stranice trougla, jer je (a+c)<b.') elseif (b+c)<a disp('Ovo nisu stranice trougla, jer je (b+c)<a.') else disp('Ovo su stranice trougla') end >>>Unesi vrednost stranice a, a= 1 a = 1 Unesi vrednost stranice b, b= 2 b = 2 Unesi vrednost stranice c, c= 3 c = 3 Ovo su stranice trougla >>>Unesi vrednost stranice a, a= 4 a = 4 Unesi vrednost stranice b, b= 2 b = 2 Unesi vrednost stranice c, c= 7 c = 7 Ovo nisu stranice trougla, jer je (a+b)<c.

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

Приликом извршавања програма прво се долази на наредбу switch и израз који иде уз њу. Вредност добијена овим изразом одређује који сет наредби ће бити извршен. Уколико не постоји случај који садржи вредност израза извршавају се наредбе после резервисане речи otherwise. По извршењу наредби код прелази на наредбу end.

switch израз case вредност израза1 низ наредби case вредност израза2 низ наредби

... otherwise низ наредби

end ПРИМЕР 6: За унапред задату вредност променљиве a написати програм тако да се зависно од вредности променљиве програм исписује који је то дан у недељи.

85

a=input('a=') switch a case 1 disp('Ponedeljak') case 2 disp('Utorak') case 3 disp('Sreda') case 4 disp('Cetvratak') case 5 disp('Petak') case 6 disp('Subota') case 7 disp('Nedelja') otherwise disp('Ne postoji dan sa tim rednim brojem') end >>>a= 2 a = 2 Utorak >>>a= 6 a = 6 Subota

ЗАДАЦИ ЗА САМОСТАЛАН РАД: 1. Нека су ba, и c коефицијенти квадратне једначине чије се вредности уносе. За унете коефицијенте решити једначину и то тако да ако се догоди да је једначина линерна или једначине нема да се добија обавештење о томе. Уколико је једначина заиста квадратна одређују се решења и даје се податак о томе каква су решења (иста, реална, комплексна). РЕШЕЊЕ:

86

2. Написати код који нам даје информацију о имену месеца у првој половини године чији је редни број дат. РЕШЕЊЕ:

3. Написати функцијски фајл који за унету вредност променљивих ba, и c враћа најмањи од њих користећи разгранати алгоритам. РЕШЕЊЕ:

4. Написати функцијски фајл који за унете вредности дужина

страница правоугаоника рачуна површину и обим правоугаоника. Обезбедити проверу унетих вредности и извршити захтев само ако су унете вредности веће од 0, а дати информацију о насталој грешци уколико нису. РЕШЕЊЕ:

87

Вежба 11

Циклични алгоритми

ЦИЉ ВЕЖБЕ

Циљ вежбе је упознавање са цикличним алгоритмима, кроз примере и задатке. Вежба је реализована помоћу софтверског пакета OCTAVE.

11.1. УВОД

Рачунарски програм је низ наредби. Када је програм једноставан наредбе се извршавају једна за другом, по редоследу како су написане. Међутим, постоје сложени програми када се наредбе не морају тако извршавати. OCTAVE има више наредби које омогућавју кориснику да управља током програма. То су наредбе: if, switch, for, while, else, break, error, ...

11.2. ЦИКЛИЧНИ АЛГОРИТМИ Цикличне алгоритамске шеме су оне шеме у којима се један или више алгоритамских корака може извршавати више од једнпут у току извршавања алгоритма. Ови кораци чине циклус. Уколико је услов испуњен излази се из циклуса, у супротном циклус се понавља. Услов за излазак из циклуса зове се излазни критеријум циклуса. For петља омогућава понављање дела програма задати број пута. Завршава се командом end. Облик петље: for променљива=израз наредбе end ПРИМЕР 1: За све вредности променљиве 1, 2,3, 4,5x израчунати вредност функције sin 2y x .

88

for x=1:5 y=sin(2*x) end >>>y = 0.90930 y = -0.75680 y = -0.27942 y = 0.98936 y = -0.54402 ПРИМЕР 2 : Написати програм који исписује табелу функције

1

cos

x

xy у границама од 0 до 2 са кораком 5 користећи for

петљу. x=0:pi/5:2*pi; for i=1:length(x) y(i)=cos(x(i))/(x(i)+1); end z=[x',y']; disp(' x y(x)') disp(z) >>> x y(x) 0.00000 1.00000 0.62832 0.49684 1.25664 0.13694 1.88496 -0.10711 2.51327 -0.23027 3.14159 -0.24145 3.76991 -0.16961

89

4.39823 -0.05724 5.02655 0.05128 5.65487 0.12157 6.28319 0.13730 While петља користи се за понављање скупа наредби докле год је неки услов тачан и када није познат број пролаза кроз петљу унапред. Услов је обично неко поређење у коме се користе релацијски логички оператори. Облик петље: while израз наредбе end ПРИМЕР 3: Израчунавати вредности променљиве x , по закону

2x x , док важи да је 15x . Почетна вредност променљиве x је 1. x=1; while x<=15 x x=2*x; end >>>x = 1 x = 2 x = 4 x = 8 Део програма између while и end извршава се све док је израз који следи после while истинит. ПРИМЕР 4: Користећи наредбу while написати функцијски фајл који за два унета природна броја, при чему је први већи од другог одређује количник и остатак при дељењу. %Ime ovog funkcijskog fajla je kolicinikOstatak function [k,o] =kolicinikOstatak(a,b) k=0; o=a; while o>=b o=o-b; k=k+1; end >>> [k,o] =kolicinikOstatak(10,2) k = 5 o = 0

90

>>> [k,o] =kolicinikOstatak(10,3) k = 3 o = 1 ПРИМЕР 5: Израчунати збир реда

2

1

1 1 1 114 9 16

n

ns

n

са тачношћу 210 ( догод је

апсулутна вредност члан реда већа од 210 ). s=0; n=1; while abs((-1)^n/n^2)>10^(-2) s s=s+(-1)^n/n^2; n=n+1; end >>>s = 0 s = -1 s = -0.75000 s = -0.86111 s = -0.79861 s = -0.83861 s = -0.81083 s = -0.83124 s = -0.81562

ПРИМЕР 6: Нека је 1 1 12 3na

n . Решити неједначину

2na . n=2; s=0; while s<2 n s=s+1/n n=n+1; end >>>n = 2 s = 0.50000 n = 3 s = 0.83333 n = 4 s = 1.0833 n = 5 s = 1.2833 n = 6 s = 1.4500

91

n = 7 s = 1.5929 n = 8 s = 1.7179 n = 9 s = 1.8290 n = 10 s = 1.9290 n = 11 s = 2.0199

ПРИМЕР 7: Написати алгоритам за израчунавање суме

n

iiS

1!,

где n уноси корисник. Користити само један циклус.

function sumF(n) s=0; i=1; pomf=1; while i<=n s=s+pomf; i=i+1; pomf=pomf*i; end s >>> sumF(2) s = 3 >>> sumF(3) s = 9 s = 153 >>> sumF(6) s = 873

ЗАДАЦИ ЗА САМОСТАЛАН РАД:

1. Израчунати 5! користећи петље. РЕШЕЊЕ:

92

2. Написати програм који одређује збир

100cos...

3sin

2cos

1sin s .

РЕШЕЊЕ:

3. Написати алгоритам за израчунавање производа 1

1!

n

i

Pi

,

где n уноси корисник. Користити само један циклус. РЕШЕЊЕ:

4. Нека је !

1.....!3

1!2

1n

sn . Одредити n тако да је

9,0ns користећи само једну наредбу while. РЕШЕЊЕ:

93

Вежба 12

Сложени алгоритми

ЦИЉ ВЕЖБЕ

Циљ вежбе је савладавање проблема писања сложеног алгоритма, као комбинације линијског и цикличног алгоритма. Вежба је реализована помоћу софтверског пакета OCTAVE.

12.1. СЛОЖЕНИ АЛГОРИТМИ Сложене алгоритамске шеме праве се различитим композицијама линијских и цикличних алгоритама. ПРИМЕР 1: За бројеве од 1 до 1000 формирати две суме и то тако да прва садржи само парне бројеве, а дуга само непарне. s1=0; s2=0; for i=1:1000 if mod(i,2)==0 s1=s1+i; end if mod(i,2)==1 s2=s2+i; end end >>> s1 s1 = 250500 >>> s2 s2 = 25000 ПРИМЕР 2: Унети произвољне вредности природних бројева a , b и c . Израчунати 2 2 2 3 ...s a b c a b c a . Уколико је сума већа од 500 зауставити израчунавање. Уколико је сума дељива са 6 зауставити израчунавање. a=input('a='); b=input('b=');

94

c=input('c='); s=0; s1=a+b+c; i=1; while s<500 s=s+s1*i; i=i+1; if mod(s,6)==0, break, end end s >>>a= 25 b= 35 c= 60 s = 120 Напомена: У оквиру претходног примера коришћена је наредба break. Ова наредба омогућава излазак из целе петље. ПРИМЕР 3: Написати код којим се уноси произвољан вектор X . Уколико је број елемената вектора мањи од 5 рачуна се производ свих елемената вектора. У случају да је број елемената већи од 5 и мањи од 10 одређује се збир елемената вектора. У осталим случајевима рачуна се количник 5. и 2. елемента вектора. X=input('Unesi vektor '); %vektor se unosi u uglastim zagradama n=length(X); i=1; P=1; S=0; if n<5 while(i<=n) P=P*X(i); i=i+1; end P elseif (n>5)&(n<10) while(i<=n) S=S+X(i); i=i+1; end S else K=X(5)./X(2); K end >>>Unesi vektor [1 2 3] P = 6

95

>>>Unesi vektor [1 2 3 4 5 6 7] S = 28 >>>Unesi vektor [1 2 3 4 5 6 7 8 9 10 11 12] K = 2.5000 ПРИМЕР 4: Дат је скуп 0,1, 2, 9M . Дефинисати скуп L

чији елементи задовољавају услов 2 1 7L x x M x . L=[]; for i=0:1:9 if 2*i-1>7 L=[L i]; end end L >>>L = 5 6 7 8 9 ПРИМЕР 5: Дат је скуп 10,20,30, 100A . Дефинисати скуп B чији елементи задовољавају услов

2 50 60B x x A x x . B=[]; for i=10:10:100 if (2*i>50)&(i~=60) B=[B i]; end end B >>>B = 30 40 50 70 80 90 100 ПРИМЕР 6: Написати код који учитава вектор са 10 елемената, а затим одређује најмањи и највећи елемент и исписује их. x=input('Unesi vektor x, x=') if length(x)==10 i=1; min=x(1); max=x(1); while i<=length(x) if x(i)<min min=x(i); end

96

if x(i)>max max=x(i); end i=i+1; end else disp('Nije uneto 10 elemenata!') end min max >>>Unesi vektor x, x= [1 25 6 4 7 81 6 29 13 47] x = 1 25 6 4 7 81 6 29 13 47 min = 1 max = 81 ПРИМЕР 7: Написати код који вектор у који је унет бинарни број претвара у променљиву чији је садржај природни број који одговара бинарном броју. Уколико унети вектор не садржи бинарни број добија се информација о грешци. x=input('Unesi vektor x, x=') s=0; for i=1:length(x) if (x(i)==0)|(x(i)==1) s=2^(length(x)-i)*x(i)+s; else disp('Broj nije binaran!') end end s >>>Unesi vektor x, x= [1 1 0] x = 1 1 0 s = 6 ПРИМЕР 8: Написати алгоритам који сортира елемента низа ia , где је ni ,1 у неопадајући поредак. function sortiranjeNeopadajuce(a,n) i=1; while i<=n j=i+1; while j<=n if a(i)>a(j) b=a(i); a(i)=a(j);

97

a(j)=b; end j=j+1; end i=i+1; end a sortiranjeNeopadajuce([5 3 6 2],4) a = 2 3 5 6 >>> sortiranjeNeopadajuce([5 3 6 2 11 1 5],7) a = 1 2 3 5 5 6 11

ЗАДАЦИ ЗА САМОСТАЛАН РАД: 1. Написати код који формира једну суму природних бројева дељивих са 3 између 1 и 1000 и једну суму бројева дељивих са 5. РЕШЕЊЕ:

2. Написати код којим се уноси произвољан вектор X . Уколико је број елемената вектора мањи од 6 рачуна се производ елемената вектора који су парни бројвеи. У случају да је број елемената већи од 6 и мањи од 14 одређује се збир елемената вектора који су непарни. У осталим случајевима рачуна се количник 8. и 1. елемента вектора. РЕШЕЊЕ:

98

3. Дат је скуп 10,11,12, 20M . Дефинисати скуп L чији

елементи задовољавају услов 2 1 1,55xL x x M

x

.

РЕШЕЊЕ:

4. Написати код који учитава вектор са 10 елемената, а затим одређује три највећа елемента и исписује их. РЕШЕЊЕ:

5. Написати алгоритам који сортира елемента низа ia , где је ni ,1 у нерастући поредак.

РЕШЕЊЕ:

99

Вежба 13

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

ЦИЉ ВЕЖБЕ

Циљ вежбе је упознавање са рекурзивним формулама. Дати су алгоритми реализовани рекурзивном и итеративном методом помоћу софтверског пакета OCTAVE. 13.1. РЕКУРЗИВНЕ ФОРМУЛЕ

Рекурзија у математици и информатици означава поступак или функцију које у својој дефиницији користе саме себе. Састоје се из два корака: 1. Функција је дефинисана за неку почетну вредност а (најчешће 0 или 1) 2. Ако је функција дефинисана за неку вредност n , која је већа или једнака а, тада може да се дефинише и за вредност 1n . Рекурзивне дефиниције су присутне у математици. Пример Дефиниција природних бројева: 1 је природни број Ако је n природни број, онда је то и 1n . Пример: Уочимо функцију nf n a , дефинисану на скупу ненегативних целих бројева. Она се може схватити као производ од n вредности броја a. Исто тако може се записати и рекурзивно на следећи начин.

00 1 1

1

f знајући да је a

f n a f n

.

Пример: Функција !fak n n , за рачунање факторијела броја се такође може изразити на следећи начин.

0 1

1

fak

fak n n fak n

100

Пример Фибоначијев низ је низ бројева код кога је први елемент број 1, други елемент такође број 1, а сваки следећи представља збир предходна два члана. Првих неколико чланова низа гласе 1,1,2,3,5,8,13,........ Тада би рекурзивна функција изгледала

1 1

2 1

1 2

fib

fib

fib n f n f n

Израчунати 3fib .

1. Како је 1 1, 2 1fib fib ,

2. 3 2 1 1 1 2fib fib fib ПРИМЕР 1: Написати алгоритам који ће за произвољан број одређивати његов факторијел. Користити функције, тј. алгоритам решити рекурзивном методом. function f=faktorial(n) if n<=0 f=1; else f=n*faktorial(n-1); end >>> faktorial(3) ans = 6 >>> faktorial(5) ans = 120 ПРИМЕР 2: Написати алгоритам који ће за унети редни број члана Фибоначијевог низа одређивати тај број. Користити функције, тј. алгоритам решити рекурзивном методом. function F=FibonacijevBr(n) if n==1 F=1; elseif n==2 F=1; else F=FibonacijevBr(n-1)+FibonacijevBr(n-2); end >>> FibonacijevBr(4) ans = 3

101

>>> FibonacijevBr(6) ans = 8 ПРИМЕР 3: Написати алгоритам који ће за унети редни број члана Лукасовог низа одређивати тај број. Лукасов низ је дат рекурзивном функцијом

0 2

1 1

1 2

luc

luc

luc n f n f n

.

Користити функције, тј. алгоритам решити рекурзивном методом. function L=LukasovBr(n) if n==0 L=2; elseif n==1 L=1; else L=LukasovBr(n-1)+LukasovBr(n-2); end >>> LukasovBr(4) ans = 7 >>> LukasovBr(5) ans = 11

Битно је напоменути да у савременим програмским језицима свако рекурзивно решење неког проблема има и свој итеративни еквивалент, тј. алгоритам који исти проблем решава без рекурзије. У практичном програмирању углавном треба избегавати рекурзију јер таква решења у општем случају троше више времена од итеративних. ПРИМЕР 4: Написати алгоритам који ће за произвољан број одређивати његов факторијел. Користити итеративни метод. n=input('Unesi vrednost promenljive n, n=') f=1; for i=1:n f=f*i; end f >>>Unesi vrednost promenljive n, n= 3 n = 3 f = 6

102

>>>Unesi vrednost promenljive n, n= 5 n = 5 f = 120

ПРИМЕР 5: Написати алгоритам који ће за унети редни број члана Фибоначијевог низа одређивати тај број. Користити итеративни метод. rbr=input('Unesi redni broj Fibonacijevog broja '); if rbr==1 F=1; elseif rbr==2 F=1; else Fp1=1; Fp2=1; for i=3:rbr F=Fp1+Fp2; Fp1=Fp2; Fp2=F; end end F >>>Unesi redni broj Fibonacijevog broja 4 F = 3 >>>Unesi redni broj Fibonacijevog broja 7 F = 13 ПРИМЕР 6: Написати алгоритам који ће за унети редни број члана Лукасовог низа одређивати тај број. Лукасов низ је дат рекурзивном функцијом

0 2

1 1

1 2

luc

luc

luc n f n f n

.

Користити итеративни метод. rbr=input('Unesi redni broj Lukasovog broja '); if rbr==0 L=2 elseif rbr==1 L=1 else Lp1=2; Lp2=1; for i=2:rbr L=Lp1+Lp2;

103

Lp1=Lp2; Lp2=L; end end L >>>Unesi redni broj Lukasovog broja 4 L = 7 >>>Unesi redni broj Lukasovog broja 5 L = 11

ЗАДАЦИ ЗА САМОСТАЛАН РАД: 1. Дата је веза Лукасовог и Фибоначијевог низа

1 1

5n n

nF FL

.

Користећи ову везу написати код који одређује n - ти Фибоначијев члан низа и на основу Фибоначијевог низа и n - ти Лукасов члан низа. Потребно је направити две функције једну за Фибоначијеве и једну за Лукасове бројеве која позива Фибоначијеву. Алгоритам решити рекурзивном методом. РЕШЕЊЕ: 2. Написати алгоритам који ће за унети редни број члана низа одређивати тај број. Низ је дат рекурзивном функцијом

0 5

1 3

2 1

1 3

niz

niz

niz

niz n f n f n

.

Алгоритам решити рекурзивном методом. РЕШЕЊЕ:

104

3. Дата је веза Лукасовог и Фибоначијевог низа

1 1

5n n

nF FL

.

Користећи ову везу написати код који одређује n - ти Фибоначијев члан низа и на основу Фибоначијевог низа и n - ти Лукасов члан низа. Алгоритам решити итеративном методом. РЕШЕЊЕ: 4. Написати алгоритам који ће за унети редни број члана низа одређивати тај број. Низ је дат рекурзивном функцијом

0 5

1 3

2 1

1 3

niz

niz

niz

niz n f n f n

.

Алгоритам решити итеративном методом. РЕШЕЊЕ:

105

Вежба 14

Булова алгебра

ЦИЉ ВЕЖБЕ

Циљ вежбе је упознaвање студената са Буловом алгебром. Дати су примери основних операција Булове алгебре реализовани помоћу софтверског пакета OCTAVE. У вежби су обрађени и основни закони Булове алгебре.

14.1. ДЕФИНИЦИЈА БУЛОВЕ АЛГЕБРЕ Булова алгебра је део математичке логике - алгебарска структура која сажима основу операција И, ИЛИ и НЕ, као и скуп операција као што су унија, пресек и комплемент. Булова алгебра је дедуктивни математички систем који почива на аксиомама, на бази којих се дефинишу теореме. Заснива се на бинарним законима мишљења, тј један исказ може да само буде тачан или нетачан. Дефиниција: Нека је B скуп у коме су дефинисане две бинарне операције и *, унарна операција ’, а 0 и 1 су елементи из скупа B , тада скуп

, ,*, ',0,1B називамо Буловом алгебром, ако за било које елементе скупа

, ,a b c из скупа B важе аксиоме: 1. затвореност , *a b B a b B 2. комутативност , * *a b b a a b b a 3. асоцијативност , * * * *a b c a b c a b c a b c 4. дистрибутивност

* * , * * *a b c a b a c a b c a b a c 5. постојање неутралног елемента а+0=а а*1=а 6. постојање инверзног елемента а+а’=1 а*а’=0.

106

Елемент 0 зове се нула елемент, елемент 1 се зове јединични елемент, а’ зове се комплемент од а. Операције + и * зову се сабирање и множење. Ознака за операцију * се често не пише, тако да важи ознака *a b ab . Усвајамо и класичне конвенције приоритета операција. Највећи приоритет има операција комплемента ’ , затим * и најмањег приоритета је операција +.

14.2. ТЕОРЕМЕ БУЛОВЕ АЛГЕБРЕ Дефиниција: Ако је А Булов израз под дуалним Буловим изразом А*, подразумева се Булов израз који се добија када се у изразу А операције + замени са * и обрнуто, а константе се замене њиховим комплементима. Теореме: Нека су , ,a b c елементи Булове алгебре B . 1. закон идемпотенције *a a a a a a 2. закон нуле 1 1 *0 0a a 3. закон апсорбције * *a a b a a a b a 4. закон инволутивности ' 'a a 5. закон комплемента за неутралне елементе 0' 1 1' 0 6. закон сажимања * * ' * 'a b a b a a b a b a 7. Де Морганови закони ' '* ' * ' ' 'a b a b a b a b ПРИМЕР 1: Проверити закон идемпотенције. a=0 opi= a&a opili= a|a >>>a = 1 opi = 1

107

opili = 1 >>>a = 0 opi = 0 opili = 0 ПРИМЕР 2: Проверити закон нуле. a=input('unesi vrednost bulove promenljive a, a=') (a|1)==1 (a&0)==0 >>>unesi vrednost bulove promenljive a, a= 1 a = 1 ans = 1 ans = 1 >>>unesi vrednost bulove promenljive a, a= 0 a = 0 ans = 1 ans = 1 ПРИМЕР 3: Проверити закон апсорпције. a=input('unesi vrednost bulove promenljive a, a=') b=input('unesi vrednost bulove promenljive b, b=') (a|(a&b))==a (a&(a|b))==a >>>unesi vrednost bulove promenljive a, a= 0 a = 0 unesi vrednost bulove promenljive b, b= 0 b = 0 ans = 1 ans = 1 >>>unesi vrednost bulove promenljive a, a= 0 a = 0 unesi vrednost bulove promenljive b, b= 1 b = 1 ans = 1 ans = 1 >>>unesi vrednost bulove promenljive a, a= 1 a = 1 unesi vrednost bulove promenljive b, b= 0 b = 0 ans = 1 ans = 1

108

>>>unesi vrednost bulove promenljive a, a= 1 a = 1 unesi vrednost bulove promenljive b, b= 1 b = 1 ans = 1 ans = 1 ПРИМЕР 4: Проверити закон сажимања. Написати код у М документу. a=input('unesi vrednost bulove promenljive a, a=') b=input('unesi vrednost bulove promenljive b, b=') ((a&b)|(a&~b))==a ((a|b)&(a|~b))==a >>>unesi vrednost bulove promenljive a, a= 0 a = 0 unesi vrednost bulove promenljive b, b= 0 b = 0 ans = 1 ans = 1 >>>unesi vrednost bulove promenljive a, a= 0 a = 0 unesi vrednost bulove promenljive b, b= 1 b = 1 ans = 1 ans = 1 >>>unesi vrednost bulove promenljive a, a= 1 a = 1 unesi vrednost bulove promenljive b, b= 0 b = 0 ans = 1 ans = 1 >>>unesi vrednost bulove promenljive a, a= 1 a = 1 unesi vrednost bulove promenljive b, b= 1 b = 1 ans = 1 ans = 1 ПРИМЕР 5: Израчунати збир, производ и негацију произвољних бинарних бројева у Буловој алгебри. a=input('unesi binarni broj a, a=') b=input('unesi binarni broj b, b=') z=a|b

109

p=a&b nega=~a negb=~b >>>unesi binarni broj a, a= [0 0 0 1 1 0] a = 0 0 0 1 1 0 unesi binarni broj b, b= [1 0 1 0 1 0] b = 1 0 1 0 1 0 z = 1 0 1 1 1 0 p = 0 0 0 0 1 0 nega = 1 1 1 0 0 1 negb = 0 1 0 1 0 1

14.3. АЛГЕБАРСКО ПРЕДСТАВЉАЊЕ ПРЕКИДАЧКИХ ФУНКЦИЈА Функције се могу представити у два облика. Дисјунктивна форма представља логичку суму логичких производа (пример): F AB AB AB AB Конјунктивна форма представља логички производ, логичких сума (пример):

F A B A B A B A B Табеларни приказ прекидачке функција представља се алгебарски помоћу дисјунктивне форме тако што напишемо логички збир онолико елементарних производа колико у табели има јединичних вредности функције. Пример: Функција је задата табелом. Наћи дисјунктивну и конјуктивну форму.

A B C F 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 1 0 1 1 1 1 1

110

Дисјунктивна формула је дата изразом:

ABCCABCBABCAF . Конјуктивна формула је дата изразом:

CBACBACBACBAF .

ЗАДАЦИ ЗА САМОСТАЛАН РАД: 1. Проверити закон инволутивности. РЕШЕЊЕ:

2. Проверити Де Морганове законе. РЕШЕЊЕ:

3. Израчунати збир, производ и негацију бинарних бројева 01011111 и 11010010 у Буловој алгебри. РЕШЕЊЕ:

111

4. Функција је задата табелом. Наћи дисјунктивну и конјуктивну форму.

A B C F 0 0 0 1 0 0 1 1 0 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 1 0 1 1 1 1 1

РЕШЕЊЕ:

5. Функција је задата табелом. Наћи дисјунктивну и конјуктивну форму.

A B C F 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 1 0 0 1 1 1 0

РЕШЕЊЕ:

112

113

СПИСАК КОМАНДИ И ФУНКЦИЈА

Команде за управљање help помоћ у раду. demo основни демонстрациони програми. clc брише се садржај командног прозора. clear брише све променљиве и функције из меморије. who листа текућих променљивих. whos листа текућих променљивих, дужа форма . size величина променљиве. format излазни формат. load учитавање променљивих са диска. save снимање променљивих на диск. delete брисање фајлова. home скок на почетак екрана. quit завршетак рада. exit завршетак рада. pause пауза до притиска на неки тастер. disp приказ резултата на екрану input захтева да корисник унесе податке

Знакови, аритметички, релацијски и логички оператори

+ плус. - минус. * множење. .* множење елемент по елемент. ^ степеновање. .^ степеновање елемент по елемент. / дељење удесно. \ дељење улево. (,) за позивање функција и редослед операција. [,] дефинишу векторе и матрице. . децимални зарез. ... наставља ред. , размак између елемената и аргумената функције. ; крај реда или искључује приказивање резултата. % коментар. = додељивање вредности. = = једнакост. < мање. > веће. >= веће или једнако. <= мање или једнако. ~= није једнако. & логичко и. | логичко или. ~ логичко не.

114

Унапред дефинисане променљиве ans резултат. pi 3,14..... i,j комплексна јединица , 1 . NaN није нумеричка вредност. inf бесконачно.

Mатематичке функције abs апсолутна вредност. sqrt квадратни корен. sin синус. cos косинус. tan тангенс. cot котангенс. exp експоненцијална функција основе е. log природни логаритам. log 10 декадни логаритам. conj коњуговано комплексни број. imag имагинрни део комплексног броја. real реални део комплексног броја.

Цртање и форматирање 2 D графикона plot црта се крива функције. fplot црта се крива функције. subplot црта се више графикона на истој страници. hist формира се хистограм. hold on држи се отворен текући график. hold off супротно од холд он. axis подешавање оса. colormap подешавају се боје на графикону. grid додаје се или одузима решетка на графикону. gtext додаје се текст на графикон. text додаје се текст на графикон. title графикону се додаје наслов. xlabel додаје се натпис на осу x. ylabel додаје се натпис на осу y.

Команде за управљање током програма break прекидање извршавања петље. else условно извршавање команди. elseif условно извршавање команди. end крај условног исказа или петље. for понављање извршавања групе команди. if условно извршавање команди. while понавља извршавање групе команди.

115

Операције са скуповима union(A,B) унија. intersect(A,B) пресек. setdiff(A,B) разлика. setxor(A, B) симетрична разлика скупова.

Графови и стабла gplot(A,xy) цртање графа. ntree(ORD,D) формира стабло. Т=nodesplt(T,N) додавање листова чвору стабла. Т=nodejoin(T,N) укидање листова чвору стабла. leaves(T) листови стабла. ntnode(T) број листова стабла. noleaves(T) чворови који нису листови. nodepar(T,N) родитељ чворова.

Комбинаторика perms(v) све пермутације. factorial(n) факторијел. nchoosek(v,k) све комбинације. nchoosek(n,k) број комбинација.

116

117

ЛИТЕРАТУРА

[1] K. H. Rosen, Discrete Mathematics and Its Applications, McGraw-Hill Science/Engineering/Math, 2003.

[2] И.Н.Бронштејн, К.А.Семенјајев, Г. ,ускол, Х. Милиг,

Математички приручник, SOHO Graph, Београд, 2004. [3] Л. Краус, Програмски језик C, Академска мисао, Београд,

2004. [4] И. Братко, В. Рајкович, Рачунарство са програмским

језиком Paskal, Нолит, Београд, 1984. [5] А. Гилат, Увод у Matlab са примерима, Микро књига,

Београд, 2008.

[6] T. A. Davis, K. Sigmon, MATLAB, Chapman & Hall/CRC, New York, 2005.

[7] S. J. Chapman, MATLAB Programming for Engineers,

Brooks/Cole Publishing Company, New York, 2002.