РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf ·...

54
ДЕВЕТА БЕОГРАДСКА ГИМНАЗИЈА “Михаило Петровић – Алас” РАЧУНАРСТВО И ИНФОРМАТИКА 3. разред РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРА Милена Марић 2014. година www.alas.matf.bg.ac.rs/~mm97045/programiranje

Transcript of РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf ·...

Page 1: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ДЕВЕТА БЕОГРАДСКА ГИМНАЗИЈА “Михаило Петровић – Алас”

РАЧУНАРСТВО И ИНФОРМАТИКА3. разред

РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРА

Милена Марић2014. година

www.alas.matf.bg.ac.rs/~mm97045/programiranje

Page 2: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

Циљ предмета рачунарство и информатика

Упознати се са основним концептима програмирања данас.

Стицање основне програмерске писменостиУчење новог програмског језика (Delphi, Lazarus)

Развијање прецизног мишљења, јасног и прецизног изражавања

Могућност писања елементарних програма

Page 3: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

Како смо користили рачунаре до сада?

Текст процесори (писање семинарских радова)

Програми за обраду растерских слика (поправљање фотографија)

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

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

Page 4: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

Како ћемо надаље користити рачунаре?

Кључна карактеристика рачунара је да је програмабилан.

До сада смо били само корисници већ готовог софтвера (апликативни софтвер), сада учимо да програмирамо!

Page 5: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

АЛГОРИТМИ

Кључна питања:

1. Шта је алгоритам?2. Како је могуће описати алгоритам тако да га човек разуме, односно како да га рачунар разуме?

Page 6: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

АЛГОРИТМИ

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

Поступци се у рачунарству и математици

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

синоними. Мухамед ал Хорезми (825. г.н.е.)

Page 7: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

АЛГОРИТМИ

Занимљивост! Свакодневно примењујемо неки поступак

(алгоритам). Кулинарски рецепти, упутства за

коришћење техничких уређаја, ... Сабирање вишецифрених декадних

бројева, решавање система линеарних једначина Крамеровим правилом, дељење полинома, ...

Page 8: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

АЛГОРИТМИ

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

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

Page 9: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

АЛГОРИТМИ

Алгоритми прихватају неке бројеве на улазу, спроводе неке операције над њима и на излазу такође враћају неке бројеве. Овако посматрано, сваки алгоритам даје опис неке математичке функције (тј. даје прецизно упутство како се вредност те функције може израчунати за вредности које се уносе на почетку).

Улазне вредности алгоритма су аргументи или параметри, излазна вредност је резултат. Каже се да алгоритам враћа резултат.

Page 10: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

АЛГОРИТМИ

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

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

Занимљивост! Не постоји алгоритам којим би се могло проверити да ли се други алгоритам зауставља за дате улазне вредности. Тај

изузетно дубоки математички резултат назива се неодлучивост проблема заустављања (енгл. Halting problem undecidability) и

доказао га је Алан Тјуринг пре другог светског рата.

Page 11: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

АЛГОРИТМИ

Пример алгоритма “Док је x различито од нуле увећавај y, смањуј x и након тога као резултат врати y.”

x=3, y=5 алгоритам враћа 8

1. корак: x=3, y=5

2. корак: x=2, y=6

3. корак: x=1, y=7

4. корак: x=0, y=8

Извршавање алгоритма се завршило!

Анализирајмо претходни алгоритам за улазне параметре X=-3 и y=4.

1. корак: x=-3, y=4

2. корак: x=-4, y=5

3. корак: x=-5, y=6

4. корак: x=-6, y=7

….........

Извршавање алгоритма се за ове улазне парамере не зауставља!

Page 12: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

АЛГОРИТМИ

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

Page 13: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

АЛГОРИТМИ

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

Елементаран корак неког алгоритма:

“ f' је извод функције f. ” (овај корак није довољно прецизан да га изврши рачунер, прецизан је за некога ко познаје изводе.)

Page 14: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

АЛГОРИТМИ

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

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

● Ако би алготитам садржао корак: “Нека је x неки број између 1 и 10.”, тај корак би увео недетерминизам.

● Уколико би се након овог корака у истом алгоритму јавио корак који зависи од тога да ли је x веће или мање од 5, не би се могло предвидети даље извршавање алгоритма.

Page 15: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

АЛГОРИТМИ

Занимљивост:

Рачунари могу да симулирају недетерминистичност коришћењем тзв. генератора псеудо-насумичних бројева (енгл. pseudo-random number generators). То су поступци који као свој резултат враћају низове бројева који се људима чине прилично насумично, али ипак нису јер се сваки број израчунава на основу претходног применог неког веома јасно и прецизно дефинисаног алгоритма.

Page 16: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

НАЧИН ОПИСИВАЊА АЛГОРИТМА

Постоји неколико различитих начина да се алгоритам опише.

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

Говорно језички опис Опис у облику псеудо-кода Дијаграми тока MIT Scretch дијаграми Програми и програмски језици

Page 17: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

Говорно језички опис

Када алгоритам описујемо неком човеку, наш опис може да буде непрецизан јер се ослањамо на интелигенцију саговорника који може да апстрахује и “попуни рупе” у нашем опису. Може себи да разјасни, ако је нешто погрешно поправи, итд.

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

Page 18: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

Говорно језички опис

На пример, учитељица ученике учи сабирању тако што на табли прикаже велики број примера како се два броја сабирају!

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

"Бројеви се сабирају тако што се потпишу јеgан испоg gругог, тако gа се поравнају цифре на оgговарајућим позицијама. Затим се сабира цифра по цифра, кренувши оg цифре јеgиница, урачунавајући увек и пренос са претхоgне позиције који је нула на почетку при чему се за слеgећу цифру резултата узима остатак при gељењу gобијеног збира са 10, а за пренос се узима количник при gељењу gобијеног збира са 10. Поступак се понавља gок се све цифре у сабирцима не исцрпу. Ако је на крају остао неки пренос, он се gоgаје као почетна цифра резултата."

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

Page 19: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ОПИСИ У ОБЛИКУ ПСЕУДО-КОДА

Данас често присутан начин описивања алгоритама, компромис између флексибилности описа на говорном језику и прецизности алгоритама прихватљивих за рачунар.

Пример псеудо-кода:

:     a = (aУлаз декадни број nan­1...a0)10   b = (bи mbm­1...b0)

:     c = (cИзлаз декадни број kck­1...c0)10  = a + b

p := 0; i := 0; 

   i <= n   i <= m    :док је или ради следеће

       z := aнека је i + bi + p

       cнека је i :=       z   10остатак при дељењу бројем

       p :=           z   10нека је целобројни количник при дељењу броја бројем

     iувећај

   p     0,     cако је веће од нека је i := p.

Page 20: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ОПИС У ОБЛИКУ ПСЕУДО-КОДА

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

● Не постоји прецизан договор како би требало псеудо-код да изгледа већ појединац код прилагођава себи.

● Битно је шта су елеменарне операције код псеудо кода. У претходном примеру целобројно дељење елементарна операција, не мора ово увек да буде случај.

● Уколико су елементарне операције све “ситније и ситније” опис алгоритма је све дужи.

Page 21: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ДИЈАГРАМ ТОКА

● У другој половини XX века веома популаран начин за опис алгоритама били су такозвани дијаграми тока програма (engl. control-flow graphs, flowcharts) тј. дијаграми кода (енгл. code-charts).

● Иако се овакав вид представљања алгоритама данас не користи често, они представљају значајан део историје рачунарства и од њих су потекле дијаграмске технике које се и данас користе.

● Дијаграми тока спадају у тзв. блок дијаграме јер су дијаграми састављени од делова, тј. блокова повезаних стрелицама.

Page 22: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ДИЈАГРАМ ТОКА - пример

Page 23: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ДИЈАГРАМ ТОКА

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

су садржали математичке формуле које описују како се нове вредности израчунавају на основу постојећих),

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

● Линије означене стрелицама означавају наредни блок који треба да буде извршен.

Page 24: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ДИЈАГРАМИ ТОКА

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

Page 25: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ДИЈАГРАМИ ТОКА

Занимљивост.

Данас се у рачунарству углавном користе тзв. UML дијаграми (енгл. UML - Unified Modelling Language). UML је потпуно стандардизовани дијаграмски језик (то значи да је сасвим прецизно описано које врсте дијаграма се могу користити и шта сваки од симбола на тим дијаграмима представља). UML се често користи за опис структуре комплексног софтвера (често објектно-оријентисаног) и помаже великим развојним тимовима (пројектаната софтвера, програмера итд.) да међусобно размене своје идеје.

Page 26: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

MIT Scratch ДИЈАГРАМИ

Page 27: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

MIT Scratch ДИЈАГРАМИ

Још једна данас веома популарна дијаграмска техника програмирања - пре свега у образовању младих програмера појавила се 2006. у систему MIT Scratch. Данас јако популаран пројекат http://code.org/ који се бави популаризацијом програмирања користи веома сличан дијаграмски језик.

Алгоритми се описују слагањем блокова (попут лего коцкица) и обично су такви да описују кретање неке фигуре (цртаног јунака) по екрану. Већи блокови који могу да обухвате мање и они се обично користе да би се описало да се кораци у мањим, угњежђеним блоковима понављају одређени пут.

Page 28: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ПРОГРАМИ-ПОТПУНО ПРЕЦИЗНИ ОПИСИ АЛГОРИТМА

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

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

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

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

Page 29: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ПРОГРАМИ-ПОТПУНО ПРЕЦИЗНИ ОПИСИ АЛГОРИТМАТоком кратке историје развоја програмских језика

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

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

Page 30: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ПРОГРАМИ-ПОТПУНО ПРЕЦИЗНИ ОПИСИ АЛГОРИТМАВелики напредак се десио када су програмери

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

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

Page 31: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ПРОГРАМИ-ПОТПУНО ПРЕЦИЗНИ ОПИСИ АЛГОРИТМАПрограм за сабирање два декадна броја написан у C-у:

int saberi(int a[], int n, int b[], int m, int c[]) { int p = 0, i = 0; for (i = 0; i <= n || i <= m; i++) { int x = i <= n ? a[i] : 0; int y = i <= m ? b[i] : 0; int z = x + y + p; c[i] = z % 10; p = z / 10; i++; } if (p > 0) c[i++] = p; return i; }

Page 32: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ПРОГРАМИ-ПОТПУНО ПРЕЦИЗНИ ОПИСИ АЛГОРИТМА

Програм за сабирање два декадна броја написан у програмском језику Pascal:

Type Broj = Array[1..100] of Integer;Function saberi(a, b: Broj; n, m: Integer) : Integer;BeginVar p, i, z, ai, bi : Integer;i := 0; p := 0; While i <= n or i <= n Do Begin If i <= n Then ai := a[i] Else ai := 0; If i <= m Then bi := b[i] Else bi := 0; z := ai + bi + p; saberi[i] := z mod 10; p := z div 10; i := i + 1; End; If p > 0 Then saberi[i] := pEnd

Page 33: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ПРОГРАМИ-ПОТПУНО ПРЕЦИЗНИ ОПИСИ АЛГОРИТМАПретходна два програма ако упоредимо са

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

Page 34: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ИЗРАЖАЈНОСТ И ОСНОВНИ ЕЛЕМЕНТИ АЛГОРИТАМА

Основно за сваки алгоритам су елементарни кораци и контролне структуре које одређују редослед којим ће се елементарни кораци извршавати.

Сви садржаји у рачунару се кодирају бројевима. У складу са овим, логично је предпоставити да сви елементарни кораци представљају операције које се извршавају над (природним) бројевима. Односно да је скуп елементарних корака богатији скуп математичких функција које се могу описати, тј. Израчунати. Занимљиво је да ово није тачно!

Page 35: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ИЗРАЖАЈНОСТ И ОСНОВНИ ЕЛЕМЕНТИ АЛГОРИТАМА

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

Како је ово могуће? Како је могуће да се алгоритми који описују степеновање изврше на рачунарима који могу само да сабирају?

Page 36: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ИЗРАЖАЈНОСТ И ОСНОВНИ ЕЛЕМЕНТИ АЛГОРИТАМА

Одговор на претходна питања:

Степеновање је могуће свести на узастопно множење, множење на узастопно сабирање, сабирање се чак може свети на узастопно увећавање!

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

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

(www.alas.matf.bg.ac.rs/~mm97045/programiranje)

Page 37: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ИЗРАЖАЈНОСТ И ОСНОВНИ ЕЛЕМЕНТИ АЛГОРИТАМА

Поред елементарних корака код описа алгоритама поставља се питање контроле тока извршавања алгоритма.

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

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

Раније се ово остваривало коришћењем GOTO наредбе безусловног скока која се комбиновала са наредбом гранања IF.

Page 38: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ИЗРАЖАЈНОСТ И ОСНОВНИ ЕЛЕМЕНТИ АЛГОРИТАМА

Типичан пример претходно описаног програма био би:

10 ....

20 ....

30 IF a > b THEN GOTO 20

40 ...

50 GOTO 10

60 …

           GOTO        . Временом се показало да је наредба довела до појаве тзв„ “  , шпагети програма што никако није било добро.

Page 39: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ИЗРАЖАЈНОСТ И ОСНОВНИ ЕЛЕМЕНТИ АЛГОРИТАМА

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

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

Page 40: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ИЗРАЖАЈНОСТ И ОСНОВНИ ЕЛЕМЕНТИ АЛГОРИТАМА

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

Наредба безусловног скока се може избацити уколико се обезбеди:

Секвенција (могућност да се кораци извршавају један иза другог).

Гранање (могућност да се у зависности од неког логичког услова изврши један низ корака или други низ корака)

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

Page 41: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ИЗРАЖАЈНОСТ И ОСНОВНИ ЕЛЕМЕНТИ АЛГОРИТАМА

Секвенција

Улаз: број r

Излаз: О и P

Нека је O = 2 * r * PI

Нека је P = r * r * PI

Page 42: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ИЗРАЖАЈНОСТ И ОСНОВНИ ЕЛЕМЕНТИ АЛГОРИТАМА

Гранање

Улаз: Бројеви a и b

Излаз: Број m чија је вредност једнака већој од вредности бројева a и b

ако је a > b тада

променљивој m додели вредност a

иначе

променљивој m додели вредност b

Page 43: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ИЗРАЖАЈНОСТ И ОСНОВНИ ЕЛЕМЕНТИ АЛГОРИТАМА

Итерација

Улаз: број x и природан број n

Излаз: број s чија је вредност xn

Нека је s = 1

Нека је i = 0

Док је i < n ради следеће

променљивој s додели вредност s * x

увећај i

Page 44: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ПРОГРАМСКИ ЈЕЗИЦИ

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

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

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

Page 45: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ПРОГРАМСКИ ЈЕЗИЦИ

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

Размотрићемо израчунавање вредности

2x+3

Page 46: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ПРОГРАМСКИ ЈЕЗИЦИ

Ако променљиву чија је вредност улазни параметар означимо са x, a променљиву чија је вредност резултат израчунавања означимо са y, онда се поменуто израчунавање може описати следећим једноставним описом.

y := 2*x + 3

Ознака * означава множење, + сабирање, а := означава да се променљивој са њене леве стране додељује вредност израза са десне стране.

Page 47: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ПРОГРАМСКИ ЈЕЗИЦИ

mov ax, [100]

mov bx, 2

mul ax, bx

mov bx, 3

add ax, bx

mov [101], ax

Page 48: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ПРОГРАМСКИ ЈЕЗИЦИ

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

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

Y:=2*x+3

Остало ће урадити програмски преводилац.

Page 49: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ПРОГРАМСКИ ЈЕЗИЦИ

Fortran (Formula Translating System, сматра се првим вишим програмским језиком,

настао је у периоду од 1953-1957. године. Његов главни аутор је Џон Бекус).

Lisp (List Processing, заснован на λ-рачуну. Lisp је увео функционално

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

Cobol (Common Bussiness Oriented Language), чије су основне примене у области пословања. Занимљиво је да пуно старих Cobol програма и данас успешно ради у

великим пословним системима код нас и у свету.)

ALGOL 60, Pascal, C, C++, Java, C#

Скрипт језици: PHP, JavaScript, Python итд.

Page 50: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

КЛАСИФИКАЦИЈА ВИШИХ ПРОГРАМСКИХ ЈЕЗИКА

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

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

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

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

Page 51: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ЛЕКСИКА, СИНТАКСА И СЕМАНТИКА ПРОГРАМСКИХ

ЈЕЗИКАНеопходно је прецизно дефинисати шта су исправни

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

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

Лексика се бави описивањем основних градивних елемената језика, а синтакса начинима за комбиновање основних градивних елемената.

Page 52: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ЛЕКСИКА, СИНТАКСА И СЕМАНТИКА ПРОГРАМСКИХ

ЈЕЗИКАРазмотримо наредни фрагмент кôда у језику C:

if (a < 3)

   x1 = 3+4*a;У овом кôду, разликују се следеће лексеме (речи) и њима

придружени токени (категорије).

if кључна реч, ( заграда , а идентификатор, < оператор, 3целобројни литерал, )заграда, x1 идентификатор, =оператор, 3 целобројни литерал, + оператор, 4 целобројни литерал, * оператор, a целобројни литерал, ; пунктуатор

Page 53: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ЛЕКСИКА, СИНТАКСА И СЕМАНТИКА ПРОГРАМСКИХ

ЈЕЗИКАСемантика се бави питањем значења програма.

Тако се, на пример, наредби

if (  < 3) x1 = 3+4* ;а а

језика C може придружити следеће значење: "Ако је текућа вредност променљиве a мања од 3, тада променљива x1 треба да добије вредност збира броја 3 и четвороструке текуће вредности променљиве a".

Постоје синтаксно исправне реченице природног језика којима није могуће доделити исправно значење, тј. за њих није дефинисана семантика, на пример: ,,Безбојне зелене идеје бесно спавају`` или ,,Пера је ожењени нежења``.

Page 54: РЕШАВАЊЕ ПРОБЛЕМА ПОМОЋУ РАЧУНАРАmm97045/agi/3_razred_UVOD.pdf · Велики напредак се десио када су програмери почели

ФАЗЕ ИЗРАДЕ СОФТВЕРА

● Поставка проблема●Анализа проблема● Разрада алгоритма● Пројектовање опште структуре програма● Кодирање● Фаза превођења, извршавања и тестирања програма● Израда документације● Одржавање програма