c sharp uvod gimnazija

9
Uvod Kratak pregled razvoja programskih jezika Računarski sistem se sastoji od hardvera i softvera. Hardver čine delovi računara, a sof- tver programi koje računar izvršava. Računar je mašina bez inteligencije, on izvršava samo ono što mu je zadato i to na način na koji mu je zadato. Programom zadajemo računaru način na koji izvršava poslove. Da bismo rešili neki problem korišćenjem računara, moramo računaru precizno opisati sve korake-instrukcije (naredbe) koje on izvršava zadatim redosledom. Skup instrukcija napisan za rešavanje nekog problema naziva se program, a pisanje instrukcija programiranje. Ljudi za međusobnu komunikaciju koriste jezik. Jezik je sredstvo za predstavljanje i prenošenje informacija. Čovek mora na neki način da saopšti računaru niz instruk- cija koje treba da izvrši. Programski jezik je sredstvo kojim čovek saopštava računaru program. Čovek i računar komuniciraju pomoću programskog jezika. Prirodni jezici dopuštaju nejednoznačnost i nepreciznost. Računar može „razumeti” samo formalni zapis, ne tolerišući ni najmanje nepreciznosti. Programski jezici računaru omoguća- vaju zapis niza instrukcija koje se ne mogu višeznačno protumačiti. Jednoznačnost svake konstrukcije programskog jezika je njegova najbitnija karakteristika. Program- ski jezik je skup pravila kojim se računaru predstavljaju instrukcije i opisuju podaci. Programske jezike možemo podeliti po stepenu zavisnosti programskog jezika i računara na: mašinski jezik simbolički jezik jezici višeg nivoa Mašinski i simbolički jezici su zavisni od računara i njih nazivamo mašinski zavi- snim jezicima. Jezici višeg nivoa pripadaju skupini koje nazivamo mašinski nezavisni jezici. Mašinski zavisni jezici Najjednostavniji programski jezik je interni jezik računara – mašinski jezik. Najvažniji delovi računara izgrađeni su od elektronskih i magnetnih komponenti, koje karak- terišu dva stabilna stanja (ima napona – nema napona, teče struja - ne teče struja, severni pol – južni pol). Zbog jednostavnije tehničke realizacije u računaru se sve predstavlja pomoću dva simbola, 0 i 1, binarnom azbukom. Jedan znak binarne azbuke

Upload: slobodan-nikolic

Post on 18-Nov-2015

15 views

Category:

Documents


0 download

DESCRIPTION

Programiranje

TRANSCRIPT

  • UvodKratak pregled razvoja programskih jezikaRaunarski sistem se sastoji od hardvera i softvera. Hardver ine delovi raunara, a sof-tver programi koje raunar izvrava. Raunar je maina bez inteligencije, on izvrava samo ono to mu je zadato i to na nain na koji mu je zadato. Programom zadajemo raunaru nain na koji izvrava poslove. Da bismo reili neki problem korienjem raunara, moramo raunaru precizno opisati sve korake-instrukcije (naredbe) koje on izvrava zadatim redosledom. Skup instrukcija napisan za reavanje nekog problema naziva se program, a pisanje instrukcija programiranje.

    Ljudi za meusobnu komunikaciju koriste jezik. Jezik je sredstvo za predstavljanje i prenoenje informacija. ovek mora na neki nain da saopti raunaru niz instruk-cija koje treba da izvri. Programski jezik je sredstvo kojim ovek saoptava raunaru program. ovek i raunar komuniciraju pomou programskog jezika. Prirodni jezici doputaju nejednoznanost i nepreciznost. Raunar moe razumeti samo formalni zapis, ne toleriui ni najmanje nepreciznosti. Programski jezici raunaru omogua-vaju zapis niza instrukcija koje se ne mogu vieznano protumaiti. Jednoznanost svake konstrukcije programskog jezika je njegova najbitnija karakteristika. Program-ski jezik je skup pravila kojim se raunaru predstavljaju instrukcije i opisuju podaci.

    Programske jezike moemo podeliti po stepenu zavisnosti programskog jezika i raunara na:

    mainski jezik

    simboliki jezik

    jezici vieg nivoa

    Mainski i simboliki jezici su zavisni od raunara i njih nazivamo mainski zavi-snim jezicima. Jezici vieg nivoa pripadaju skupini koje nazivamo mainski nezavisni jezici.

    Mainski zavisni jeziciNajjednostavniji programski jezik je interni jezik raunara mainski jezik. Najvaniji delovi raunara izgraeni su od elektronskih i magnetnih komponenti, koje karak-teriu dva stabilna stanja (ima napona nema napona, tee struja - ne tee struja, severni pol juni pol). Zbog jednostavnije tehnike realizacije u raunaru se sve predstavlja pomou dva simbola, 0 i 1, binarnom azbukom. Jedan znak binarne azbuke

  • predstavlja bit (skraeno od binary digit). Sve informacije u raunaru predstavljaju se nizom bitova grupisanim u grupe od 8, 16, 32, 64 bita. Grupa od 8 bitova naziva se bajt.

    Mainski jezik je izgraen nad binarnom azbukom. Sve operacije i svi podaci pred-stavljeni su nizovima bitova. U zavisnosti od arhitekture raunara, ti nizovi bitova imaju razliita tumaenja i razliite su veliine.

    Kako se mainski program sastoji od niza nula i jedinica i zahteva dobro poznava-nje naina rada i arhitekture odreenog raunara, vrlo je teko programirati na njemu. Programi na prvim raunarima bili su zapisani mainskim jezikom to je uslovilo da uzak krug ljudi pie i odrava programe.

    Da bi se premostile potekoe pisanja programa na mainskom jeziku, dolazi do razvoja simbolikih jezika. Umesto instrukcija pisanih nizom bitova, uvedene su mne-motehnike skraenice za operacije i simbolike oznake podataka, npr. naredbom ADD a, b vri se sabiranje podataka a i b. Na taj nain proces programiranja je u znatnoj meri olakan, ali i dalje zavisi od konkretnog procesora, tj. i dalje je potrebno poznavati tehnike karakteristike konkretnog raunara za koji piemo program. Da bi se program napisan na simbolikom jeziku izvravao na raunaru, mora se prethodno prevesti na mainski jezik. Kako svakoj naredbi simbolikog jezika odgovara jedna naredba mainskog jezika, posao je automatizovan tako to je napisan program koji kao ulaz dobija program napisan u simbolikom jeziku, a kao izlaz odgovarajui pro-gram na mainskom jeziku. Program koji vri prevoenje iz simbolikog u mainski jezik naziva se asembler (translator). Zato se simboliki jezik esto naziva asemblerski jezik ili krae asembler. Napomenimo da skup naredbi simbolikog jezika zavisi od arhitekture raunara, pa program napisan u simbolikom jeziku za jedan raunar ne moe se koristiti za raunar druge arhitekture, ve se mora ponovo pisati. esto za mainske i simbolike jezike kaemo da su mainski zavisni jezici. Vano je istai da pri programiranju na mainski zavisnim jezicima programer mora vrlo detaljno, u ma-lim koracima opisati reavanje problema. Moemo to uporediti sa procesom gradnje kue pri emu moramo voditi rauna o poloaju svake cigle, daske i slino. Jasno je da prilikom izgradnje kue u jednom momentu moramo detaljno opisati poloaj svake cigle, tj. elemente kue predstavljati na taj nain. Meutim, pri izradi samog projekta, lake i razumljivije je govoriti o veim jedinicama, npr. soba, kuhinja, vrata, prozor i slino. Kako to izgleda kada koristimo raunare upoznaemo na sledeem primeru. Pretpostavimo da treba da saberemo etiri broja. U viim programskim jezicima to radimo korienjem jedne instrukcije (npr. x=a+b+c+d), a kada koristimo simboliki jezik, prvom instrukcijom aljemo prvi broj u poseban registar (akumulator) a zatim sledeom instrukcijom dodajemo drugi broj sadraju registra i tako dok ne dodamo i poslednji broj. Poslednja instrukcija je premetanje konanog rezultata iz registra u memoriju.

    Uvod

  • Programski jezici vieg nivoaDa bi se premostile potekoe u programiranju na asemblerskim jezicima, veoma rano poinju da se razvijaju mainski nezavisni jezici, drugim reima jezici vieg nivoa. Ko-rienjem jezika vieg nivoa opis naredbi i podataka vri se na nain blizak prirodnom (engleskom) jeziku. U ovim jezicima jednoj naredbi odgovara vie naredbi simbolikog jezika. Vano je napomenuti da ovi jezici imaju visok stepen nezavisnosti u odnosu na arhitekturu raunara i operativni sistem na kojem se izvravaju.

    S obzirom na to da raunar razume samo program napisan na mainskom je-ziku, svaki program pisan jezikom vieg nivoa mora se prevesti na mainski jezik. Na osnovu naina prevoenja i izvravanja, jezike vieg nivoa delimo na kompajlerske i interpreterske jezike. Najpre su nastali kompajlerski jezici Algol, Fortran, Cobol, PL/I... Kod ovih jezika izgrauju se programi za prevoenje (kompajleri) kojim se ceo pro-gram napisan na viem programskom jeziku prevodi u njemu ekvivalentan, mainski program koji se moe izvravati na raunaru. Kod interpreterskih jezika, program na viem programskom jeziku se prevodi i izvrava instrukcija po instrukcija. Primeri interpreterskih jezika su Lisp, Prolog, Basic, ...

    U poetku se razlikovala primena raunara u oblasti poslovanja od primene ra-unara u nauci i tehnici. Prvu je karakterisao veliki broj ulazno/izlaznih podataka i relativno jednostavan opis obrade podataka, pa su i jezici namenjeni toj primeni zadovoljavali te karakteristike (Cobol...). Za primenu u nauci i tehnici karakteristian je mali broj ulazno/izlaznih podataka, ali i veoma sloen opis obrade, pa su razvijani jezici za te namene poput Fortrana, Algola,... U to vreme programski jezik PL/I bio je dovoljno dobar za primenu u poslovanju kao i za primenu u oblasti sloenih nu-merikih izraunavanja. Dananjim razvojem jezika gubi se ova podela i savremeni programski jezici mogu se koristiti ravnopravno u svim oblastima.

    Prema nainu reavanja problema, moemo izvesti podelu viih programskih jezika na proceduralne i deklarativne programske jezike. U proceduralnim jezicima jezikom dajemo raunaru kompletan skup instrukcija kojim se reava problem, tj. dajemo mu algoritam za reavanje zadataka. Ovim jezicima opisujemo kako se reava dati problem. Manje-vie svi poznatiji vii programski jezici su ovog tipa: Fortran, Cobol, Basic, Pascal, C kao i mainski zavisni jezici. Kasnije, u razvoju programskih jezika dolazi se do ideje da se problemi opisuju, a da sam interpreter ima ugraene postupke kako da rei opisani problem to dovodi do razvoja deklarativnih jezika. Ovim jezicima opisujemo ta znamo o problemu i ta elimo da dobijemo reava-jui ga, a sistem (interpreter) sam dolazi do postupka za reavanje problema. Primeri deklarativnih jezika su Prolog i SQL. Sistem ima ugraen algoritam koji dovodi do reenja. Postojanje i pisanje opteg algoritma za nalaenje reenja je glavna potekoa u razvoju ovih jezika, pa su zato deklarativni jezici obino specijalizovani za odreene vrste problema. Koliko god da je ova ideja napredna, u praksi je vrlo teko u potpunosti sprovesti deklarativnost.

    Kratak pregled razvoja programskih jezika

  • Uvod

    Neke deklarativne jezike moemo podeliti na relacijske i funkcijske. Osnovni objekti u prvima su relacije, a u drugima su funkcije. Ideja razvoja funkcijskih jezika je u spajanju unapred definisanih funkcija, koje imaju svoje ulaze i izlaze, u cilju dobi-janja reenja problema. Programer koji koristi takav programski jezik gleda na razvoj programa kao na nain spajanja elementarnih funkcija, ime se dobija sistem koji izraunava eljeni rezultat. Primeri funkcijskih jezika su LISP, LOGO, ML.

    Posebnu klasu ine objektno orijentisani jezici, kod kojih su prisutni i procedu-ralni i neproceduralni elementi. U proceduralnim jezicima isticani su postupci, nain realizacije (procedura), neke vie ili manje sloene akcije. Podaci su na neki nain u podreenom poloaju u odnosu na algoritam. Moramo priznati da su podaci razlog postojanja programa. Svaki postupak obrauje neke podatke (ita ih, prikazuje, me-nja...). Podaci i akcije koje se izvode nad njima predstavljaju jednu nerazdvojnu celinu, jer nam podaci bez postupaka kojim ih obraujemo, kao i postupci za obradu bez podataka, ne znae puno. Kod objektno orijentisanih jezika podaci i postupci su obje-dinjeni u jednu celinu i ine aktivan objekat, za razliku od podataka u proceduralnim jezicima koji su krajnje pasivni. Svaki takav objekat izgleda kao mali raunar: on ima unutranje stanje i ima operacije koje moemo zahtevati da izvri. Jasno moemo uoiti analogiju izmeu takvih objekata i objekata u realnom svetu.

    Posmatrajmo niz imena uenika jednog odeljenja. Kod proceduralnog progra-miranja niz imena se posmatra kao skup pasivnih podataka. Potom piemo razne programe za rad sa ovim nizom u cilju njegovog abecednog ureivanja, modifikovanja (npr. dodavanje novog uenika, brisanje postojeeg uenika...). S jedne strane imamo podatke, a sa druge, od njih odvojene postupke (procedure) kojima obraujemo te podatke. Kod objektno orijentisanih jezika, prethodni primer posmatra se objedinjeno: postoji objekat niz koji s jedne strane ima skup imena, a sa druge strane skup akcija koje se mogu primenjivati nad tim imenima i jedno od drugog je neodvojivo. Program koji koristi objekat niz ne mora imati nijedan od postupaka za obradu niza jer su oni ugraeni u sam objekat.

    Mnotvo razliitih objekata moemo uoiti u okruenju grafikih operativnih si-stema (GUI, Graphic User Interface). Ikone su objekti. Svakoj je pridruen skup osobina i akcija koje opisuju kako reaguju na spoljanje dogaaje, ta se deava kada jednom kliknemo, kada dva puta kliknemo, kad pritisnemo desni taster, kako se ponaaju kada drimo pritisnut taster na miu i slino.

    U objektno orijentisanom programiranju cilj programera je da sakupi podatke i akcije u neku vrstu kutije sa alatom koju e koristiti za brzi razvoj aplikacija. Primeri objektno orijentisanih jezika su SmallTalk, Java, C#. C++ je hibridni jezik; jeste iz klase objektno orijentisanih jezika ali nije isto objektno orijentisan.

    Iz ovog kratkog prikaza razvoja programskih jezika moemo uoiti da objektno orijentisanim pristupom na prirodan nain opisujemo realan svet. Ipak, prirodnost opisa nije glavni razlog ozbiljnijeg razvoja objektno orijentisanih jezika, ve je to sof-tverska kriza nastala osamdesetih godina. U to vreme, razvoj hardvera doveo je do

  • znatnog poveanja primene raunara u raznim oblastima, pa su samim tim itavi timovi programera morali da rade na razvoju jednog projekta. Svaki deo tima razvijao je relativno nezavisne module, a zatim su se ti moduli uklapali u funkcionalnu celinu, korisniku aplikaciju. Svaki od modula mogue je koristiti u razliitim aplikacijama. Na taj nain dolazi se do standardizacije aplikativnog softvera.

    S druge strane, pored razvijanja objektno orijentisane metodologije u programi-ranju, razvojem interneta javila se i potreba da napisani projekti rade identino na razliitim platformama (operativnim sistemima...). Razvojem programskog jezika Java, koji je primer objektno orijentisanog pristupa, na neki nain se prevazilaze razliite platforme na kojima bi se softver izvravao. Java tehnologija izvorno je bila zamiljena za prenos multimedije mreom raznovrsnih ureaja.

    Ponovimoukratko:Program u proceduralnom jeziku je niz naredbi koji odreuje KAKO se odreena akcija obavlja (npr. otvori datoteku, ako nije EOF proitaj podatak, ..., zatvori datoteku)

    Program u neproceduralnom jeziku je niz naredbi koji odreuje TA treba uiniti (npr. izdvoji podatke koji zadovoljavaju dati uslov)

    Program u objektno orijentisanom jeziku moemo shvatiti kao skup objekata koji izmeu sebe i sa spoljnim svetom komuniciraju putem poruka.

    Algoritmi

    Reavanje problema primenom raunaraDa bismo reili neki problem korienjem raunara, neophodno je kreirati program u nekom programskom jeziku. Taj proces je kompleksan i u njemu moemo izdvojiti sledee faze:

    Postavka problema

    Problem koji se reava treba precizno i potpuno opisati na prirodnom jeziku. To radi korisnik kome je namenjen program u saradnji sa programerima. Jasno se odreuje cilj, analiziraju se postojee informacije i vri se izbor ne-ophodnih poetnih informacija, opisuju se svi podaci.

    Analiza problema

    U ovoj fazi definiu se ulazni i izlazni podaci, ogranienja njihovih vrednosti i precizno definiu veze izmeu podataka. Rezultat ove faze je formalan opis problema, izrada matematikog modela koji se moe realizovati na ra-unaru.

    Kratak pregled razvoja programskih jezika

  • Uvod

    Razrada algoritma

    U ovoj fazi se definie nain na koji se od poetnih, ulaznih podataka dolazi do traenih, izlaznih. Veina problema moe se reiti na vie naina, zato treba proanalizirati sve naine i izabrati optimalan. Sloenost reenja pro-blema moemo posmatrati sa aspekta broja potrebnih operacija (vremena potrebnog za izvravanje algoritma), i sa aspekta potrebnih memorijskih resursa da se algoritam izvri (prostorna sloenost algoritma). Dokaz o ko-rektnosti izabranog postupka za reavanje problema neophodno je precizno izvesti. O ovim aspektima treba posebno voditi rauna pri reavanju sloenih problema, dok ih kod jednostavnih problema zanemarujemo.

    Projektovanje opte strukture programa

    U ovoj fazi vri se izbor programskog jezika. Razmatra se ceo problem i deli se u logike celine; svaka celina se dalje deli u zavisnosti od njene sloeno-sti. Precizno se definie nain uvanja informacija, tj. definie se struktura podataka.

    Kodiranje

    U ovoj fazi opisuju se, u nekom programskom jeziku, podaci i postupak reavanja problema, koji su definisani u prethodnim fazama. Program zapi-san u nekom programskom jeziku esto se zove kd, zato se ova faza i na-ziva kodiranje. Ako smo u prethodnim fazama precizno razradili algoritam, strukturu programa i strukturu podataka, ova faza je relativno jednostavna za izvoenje.

    Faza prevoenja, izvravanja i testiranja programa

    Podsetimo se da se na raunaru moe izvravati samo program koji je napi-san pomou binarnih cifara (na mainskom jeziku). Zato je potrebno pro-gram napisan na programskom jeziku vieg nivo prevesti na mainski jezik; prevoenje se vri pomou posebnih programa: kompajlera, odnosno inter-pretera. Da bi se program izvravao, potrebno je formirati izvrnu verziju (EXE verzija). To se postie pomou specifinih programskih alata koji se ra-zlikuju od jezika do jezika (poveziva, bilder). esto su faza prevoenja i faza pravljenja izvrnog fajla objedinjene. Testiranjem programa treba proveriti da li program reava postavljeni zadatak. To je vrlo vana faza u kojoj treba otkriti eventualno skrivene greke. Za otkrivanje greaka koristimo testove kojima treba da obuhvatimo sve mogue situacije, svakako i one kad postav-ljeni problem nema reenja. Po potrebi se vraamo na prethodne faze.

    Izrada dokumentacije

    U dokumentaciji programa opisuje se ta program radi, daju se uputstva kako se koristi, detaljnije se opisuje algoritam kada su u pitanju sloeniji problemi i slino. Dokumentaciju nikako ne treba zapoinjati kada je pro-

  • gram ve napisan, ve je treba pisati tokom izrade programa, ali je svakako treba dopuniti na kraju kada je program zavren.

    Odravanje programa

    Tokom korienja programa mogu se uoiti neke greke, koje se moraju ot-kloniti. Ponekad treba izvriti neke promene u programu usled novih okol-nosti. Ako je program itko napisan i ako ima dobru dokumentaciju, onda je ova faza jednostavna, kako za same autore programa, tako i za druge programere. U suprotnom mnogim programerima je lake da napiu novi program nego da prepravljaju ve postojei. U ovoj fazi dolazi i do proiriva-nja programa dodavanjem novih funkcionalnosti.

    Kada se razvija veliki projekat, sve prethodno navedene faze su jednako vane. Osposobljavanje programera za uspeno realizovanje velikih projekata je dugotrajan proces. U edukaciji polazimo od jednostavnih primera ka sloenijim. U ovom procesu problemi koje reavamo su jednostavni pa su sve faze, osim faze razrade algoritma, jednostavne.

    Pojam i karakteristike algoritmaTermin algoritam potie od imena arapskog matematiara Al Horezmija (oko 825. godine nove ere). On je izvravanje aritmetikih operacija prikazivao u obliku uput-stava koja se sastoje od osnovnih koraka. Takav nain opisivanja reenja od tada se u matematici naziva algoritam. Daljim razvojem nauke algoritam je postao jedan od osnovnih pojmova u matematici i raunarstvu.

    Algoritam je konaan niz jednostavnih koraka kojim se opisuje postupak rea-vanja odreenog realnog problema, ali takav da se posle konano mnogo vremena postupak zavrava.

    Mnoge realne situacije se odvijaju po tano odreenim koracima tako da moemo rei da su algoritmi sastavni deo svakodnevnog ivota. Postoji relativno precizan po-stupak po kome pokreemo automobil, telefoniramo, prelazimo ulicu, kuvamo kafu ak moemo rei da se i sam ivot odvija po nekim pravilima. Dobar primer algoritma je svaki kulinarski recept; u njemu jasno razlikujemo ta je ulaz (potrebni sastojci), ta je obrada (precizno opisan postupak za kuvanje) i ta je izlaz (gotovo jelo).

    Algoritam moemo u najoptijim crtama prikazati slikom.

    Ulaz Obrada Izlaz

    Primer:Posmatrajmo postupak telefoniranja:

    Algoritmi

  • Uvod

    i) Podiemo slualicu.

    ii) Biramo broj.

    iii) Razgovaramo.

    iv) Prekidamo vezu.

    U opisanom postupku moemo uoiti niz nedostataka. ta ako nemamo odgova-rajui signal prilikom podizanja slualice, ili ako je linija zauzeta posle biranja broja? ta u sluaju kada uspostavimo vezu a pozvani korisnik se ne javlja? To su situacije koje prethodnim opisom postupka nisu predviene.

    Realne situacije su po pravilu znatno sloenije i da bismo ih opisali, neophodan je precizniji pristup svim detaljima. U procesu reavanja odreenih problema, esto se susreemo sa uslovima koji odreuju dalji tok reavanja. Zato je pri izradi algoritma neophodno omoguiti takozvane uslovne korake. Neke nedostatke uoene u prethod-nom opisu postupka telefoniranja moemo prevazii na sledei nain:

    i) Podiemo slualicu.

    ii) Ako nemamo odgovarajui signal, kraj postupka (neuspeno telefoniranje).

    iii) Biramo broj.

    iv) Ako se pozvani korisnik javi, razgovaramo.

    v) Prekidamo vezu, kraj postupka.

    Opisani postupak otklanja neke od navedenih nedostataka, ali i dalje ostaju nera-zjanjene mnoge situacije. U postupku telefoniranja uobiajeno je da u sluaju zauzea linije ponavljamo postupak dok se veza ne uspostavi ili dok ne odustanemo od poziva. Potreba za ponavljanjem delova procesa vrlo je esta u realnim situacijama. Zato je neophodno pri opisu algoritma koristiti takozvane cikline korake. Jedan od naina kako ciklini korak moemo ugraditi u prethodni primer je sledei:

    i) Podiemo slualicu.

    ii) Ako nemamo odgovarajui signal, kraj postupka (neuspeno telefoniranje).

    iii) Biramo broj.

    iv) Ako dobijamo signal zauzea, ponitavamo poziv i ponavljamo korak iii.

    v) Ako se pozvani korisnik javi, razgovaramo

    vi) Sputamo slualicu, kraj postupka.

    U prethodnom opisu postupka telefoniranja, koraci iii i iv ine ciklus u kome je korak iii telo ciklusa (korak koji se izvrava pri svakom prolasku kroz ciklus) a ko-rak iv uslovni korak kojim je odreeno trajanje ciklusa. I ovako opisanim postupkom telefoniranja nisu u potpunosti obuhvaene sve situacije koje se mogu javiti pri tom procesu, ali zbog velikog broja tih situacija u ovom trenutku neemo se baviti daljom razradom ovog algoritma.

  • Svaki algoritam mora da ima sledea svojstva:

    definisanost

    svaki korak u algoritmu mora biti jednoznano definisan;

    determinisanost

    vrednost koja se dobija posle izvravanja svakog koraka jednoznano je odreena vrednostima iz prethodnog koraka;

    konanost

    rad algoritma mora se zavriti u konanom broju koraka;

    rezultativnost

    algoritam mora dati rezultat za sve situacije za koje je kreiran;

    masovnost

    algoritam treba da obezbedi reavanje cele grupe problema koji se razlikuju samo po ulaznim veliinama.

    Algoritam je upotrebljiv ako se njegovom primenom dobija rezultat u konanom razumnom vremenu. Algoritam koji bi birao potez igraa aha tako to e ispitati sve mogue posledice poteza, zahtevao bi milijarde godina na najbrem raunaru.

    Postupci izrade algoritama nisu jednoznani, inae, ve bi postojali generatori algoritama. Samim tim, algoritmizacija problema zahteva i odreenu dozu kreativ-nosti.

    U praksi algoritmi se na raunaru predstavljaju izvornim kodom (source) nekog vieg programskog jezika. Svi programski jezici podleu strogim pravilima pisanja in-strukcija i definisanja podataka koji su za svaki programski jezik razliiti.

    Algoritmi