Loading [MathJax]/jax/output/HTML-CSS/fonts/TeX/fontdata.js

MPZI_predavanje_09

2418 days ago by fresl

Uvod u programiranje

 


... and it is well known that a vital ingredient of success is not knowning that what you're attempting can't be done.

T. Prachett


Računala su elektronički uređaji namijenjeni obradi podataka. Ona prihvaćaju podatke u propisanom obliku, obrađuju ih i vraćaju rezultate u obliku informacija ili signala za automatsko upravljanje drugim strojevima.

Bitna je odrednica računala mogućnost programiranja, a time i rješavanja različitih zadaća.

Većina suvremenih računala su digitalna računala s von Neumannovom arhitekturom.

Digitalna računala obrađuju podatke kodirane kao niz diskretnih numeričkih elemenata; najčešći je binarni kôd (položajni zapis s bazom 2 i znamenkama 0 i 1).

Von Neumannov stroj ima sljedeća svojstva:

  1. glavne su jedinice računala upravljačka i aritmetičko–logička jedinica (koje zajedno čine procesor), te memorija i ulazno–izlazni uređaji;
  2. program i podaci nalaze se u istoj memoriji kodirani na isti način, te se naredbe mogu smatrati podacima i obratno;
  3. program je sastavljen od niza naredbi koje se izvode nad podacima; u nekom trenutku izvodi se samo jedna naredba, a redoslijed izvođenja naredbi određuje upravljačka jedinica.

 

Računalni ili kompjutorski programi su formalno i nedvosmisleno zapisane upute prema kojima računala mogu riješiti određene zadaće.


Podaci su brojčane vrijednosti i druge opisne jedinice značenja, sastavljene od brojeva, slova i drugih simbola, prilagođene obradi računalom (pohranjivanju, prikazu, prijenosu i preoblikovanju). Informacija je značenje koje se pridaje podacima prema dogovorenim pravilima za njihovo tumačenje.


Programski jezik je umjetni jezik strogo određene sintakse i semantike, to jest, skup znakova, riječi i pravila namijenjen nedvosmislenom zapisivanju računalnih programa.

Na najnižoj razini, najbližoj računalu je strojni jezik, skup instrukcija u binarnom kôdu. Program napisan u strojnom jeziku gotovo je nečitljiv. Stoga je uveden mnemonički jezik (asembler) u kojem se strojne instrukcije označavaju kraticama njihovih (engleskih) naziva. Kako različite vrste računala imaju različite skupove instrukcija, mnemonički programi napisani za jednu vrstu računala ne mogu se izvoditi na računalima druge vrste. Osim toga, mnemonički su programi usko vezani uz način rada računala, koji se često bitno razlikuje od načina na koji ljudi rješavaju iste zadaće.

Oba su problema znatno smanjena, ali ne i potpuno uklonjena, uvođenjem viših programskih jezika: izvorni programi napisani u višim jezicima mogu se pomoću odgovarajućih programa prevodilaca ili programa tumača izvoditi na različitim računalima, a sintaksa i simbolika viših jezika približavaju se prirodnim jezicima (u pravilu engleskom) i djelomice formaliziranom, ali ipak razumljivom jeziku matematike.

Program prevoditelj prevodi izvorni program u izvršni program u strojnom jeziku, a program tumač izvorni program prevodi naredbu po naredbu te je odmah izvodi.


Sintaksa jezika je skup pravila koja propisuju poredak simbola pri njihovu povezivanju u izraze.

Primjerice:

        <datum> := ZZ/ZZ/ZZZZ

        <Z> := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

tako da je  01/12/2013  ispravno oblikovani datum, a  010/A/20000  nije dopušteno.


Semantika jezika je skup pravila koja definiraju značenja simbola i sintaktički pravilno oblikovanih izraza.

Primjerice,  01/12/2017  je 1. prosinca ove godine kod nas, ali 12. siječnja u Americi. 

Sintaktički pravilno oblikovani izraz ne mora imati značenje:  26/11/2018  je danas kod nas, a u Americi ??

 

Viši programski jezici podržavaju različite programske paradigme: zapovjednu, funkcijsku, logičku, objektno usmjerenu...

Zapovjedni programi su nizovi definicija i naredaba koje opisuje uzastopne korake transformacije zadanih ulaznih podataka u tražene rezultate.

Zapovjedni programi i njihovi cjeloviti dijelovi—programske funkcije—formalni su zapisi algoritama.

Programska funkcija je imenova programska cjelina, namijenjena izvođenju određene zadaće. Programi se najčešće sklapaju od razmjerno kratkih, neovisno napisanih i testiranih funkcija.

 

Algoritam je razgovijetan, potpun i nedvosmislen opis postupka rješavanja određene zadaće u obliku niza jasno definiranih koraka. Svaki algoritam mora imati sljedeća svojstva:

  1. konačnost — izvođenje algoritma, neovisno o konkretnom skupu ulaznih/početnih podataka, mora završiti u konačnom broju koraka;
  2. jedinstveni početak — svako izvođenje algoritma mora početi istim korakom;
  3. jedinstveni nastavak — iza svakog pojedinog koraka mora slijediti jednoznačno određeni korak;
  4. rješenje — svako izvođenje algoritma mora dovesti do rješenja ili završiti s naznakom da za zadani skup početnih podataka zadaća nije rješiva tim algoritmom.

Algoritam se u izvorni računalni program može prevesti različitim programskim jezicima.

 

Primjer

Napišite programsku funkciju ulazni podaci koje su broj x i niz brojeva a. Funkcija treba utvrditi broj pojava broja x u nizu a.

Algoritam:

  1. postaviti vrijednost brojača c na 0
  2. redom, od početka do kraja niza a, za svaki broj y u nizu a
    1. usporediti y i x te, ako su jednaki, povećati vrijednost brojača c za 1
  3. „vratiti” vrijednost brojača c

 

       

Programska se funkcija definira na sljedeći način:

    def naziv (parametri) :

        tijelo funkcije

Definicija funkcije započinje ključnom riječju def iza koje slijedi naziv funkcije. Dobro odabrani naziv trebao bi biti ključem značenja i svrhe funkcije. Nakon naziva se između okruglih zagrada navode parametri funkcije. Parametri su varijable koje pri upotrebi funkcije prihvaćaju vrijednosti koje se prenose u funkciju—koje „ulaze” u nju. (Par zagrada treba napisati i ako funkcija nema parametara.) Prvi redak definicije funkcije završava dvotočkom.

Tijelo funkcije niz je naredaba koje propisuju kako funkcija radi ono čemu je namijenjena.

Vrijednost koju funkcija izračunava i „vraća” naredbom return je vrijednost funkcije.

 

Upotreba funkcije naziva se pozivom funkcije

       naziv (argumenti)

Nakon naziva se između okruglih zagrada navode funkcijski argumenti—vrijednosti koje se prenose u funkciju.

Ako je (izdvojeni) poziv funkcije posljednja naredba u ćeliji, njezina se vrijednost ispisuje:

       
3
3
       
3
3
       
0
0

Vrijednost funkcije bilo gdje u ćeliji možemo ispisati naredbom print:

       
3
0
0
3
0
0

Zadnji redak ćelije može sadržavati nekoliko poziva funkcije, odvojenih točkama–zarezima:

       
3
0
0
3
0
0

... ili zarezima:

       
(3, 0, 0)
(3, 0, 0)

Vrijednost funkcije često se pridružuje varijabli:

        varijabla = naziv (argumenti)

Pritom se, međutim, vrijednost ne ispisuje:

       
       
2
2
       
0
0

 

Programska funkcija ne mora ništa vratiti. Takva se funkcija poziva zbog popratnih učinaka koje izaziva:

       
       
0 se u nizu [0, -1, 2, -3, 2, -3, -2, 0, 1, -3] pojavljuje 2 puta
0 se u nizu [0, -1, 2, -3, 2, -3, -2, 0, 1, -3] pojavljuje 2 puta
       
13 se u nizu [] pojavljuje 0 puta
13 se u nizu [] pojavljuje 0 puta
       
       
<type 'NoneType'>
<type 'NoneType'>
       
Integer Ring
Integer Ring