3.5 Programiranje in programski jeziki - dodatne vsebine

Dodatne vsebine

3.5 PROGRAMIRANJE IN PROGRAMSKI JEZIKI

Uporabniška programska oprema je že tako razvita, da omogoča reševanje skoraj vseh problemov, na katere naletijo računalniški uporabniki različnih področij. Za pomembnejša tehnična ali poslovna področja je napisanih tudi po več različic programske opreme. Toda za drobnejše, zelo specifične naloge je še vedno potrebno pripraviti poseben program. Če ga hočemo narediti, moramo poznati določene postopke in imeti vsaj osnovno znanje o programiranju.

Kaj je torej program? To je niz logično povezanih ukazov, instrukcij, ki računalniku zapovedujejo, kako naj obdela določene podatke, da bo rešil določen problem. Postopkom izdelave programov pa pravimo programiranje. Računalniško programiranje je torej dejavnost, katere cilj je ustvarjanje novih računalniških programov ali njihovih sestavnih delov na temelju določenih pravil. Med programiranjem naletimo na več stopenj; najprej je treba nalogo opredeliti, jo razčleniti in najti rešitev, nato pa jo preverjeno zapišemo v obliki in jeziku, ki ga razume računalnik. Seveda s tem delo še ni končano, saj so potrebna še dodatna preverjanja, pregled in testiranje programa. Šele nato ga lahko varno shranimo na določeni element zunanjega spomina. Glede na vse to je za programiranje potrebno poznati simbolične ukaze, pravila pisanja programa, nalogo pa je treba tudi analizirali. Programiranje obsega torej več stopenj, in sicer:

  1. opredelitev - specifikacija oz. opis problema,
  2. razčlenitev - analiza problema,
  3. načrtovanje algoritma,
  4. kodiranje oziroma implementacija programa,
  5. preskušanje in vzdrževanje programa.

Pa si malce podrobneje poglejmo te stopnje!

3.5.1 Opredelitev in razčlenitev problema

     Prvi pogoj za reševanje problema z računalnikom je, da problem oz. nalogo v celoti in popolnoma razumemo; to pomeni, da jo znamo na kratko z besedami podrobno opisali. Zato je prvi korak pri reševanju kakega problema kar začetni opis, v katerem povemo predvsem, KAJ je potrebno narediti, torej jasno oblikujemo bistvo problema.

Takoj zatem je treba nalogo opredeliti, to je določiti, katere podatke potrebujemo in jih obdelujemo, kje jih dobimo, kako si jih zapomnimo, kako jih prepoznamo, kam jih shranimo, koliko jih je, kakšne operacije bomo z njimi opravljali (računske ali druge), kako bomo izrazili rezultat in kako ga bomo oblikovali. Šele ko je začetna opredelitev problema končana, ko je torej povsem jasno KAJ je potrebno narediti, pričnemo postopek razčlenjevanja, to je, KAKO narediti. Imenujemo ga načrtovanje rešitve problema. Bistvo tega dela je razgrajevanje problema na niz zaporednih majhnih korakov - postopkov, tako imenovanih neodvisnih podproblemov. Seveda je potrebno vsak tak korak sproti preverjali, da se izognemo napakam, ki se rade vrinejo.

Ko opravimo razčlenitev in ko menimo, da že poznamo rešitev problema, posamezne neodvisne podprobleme sestavimo v celoto in preverimo, če so ustrezni, prilagojeni reševanju z računalnikom, in zares najboljši. A ves postopek poteka še v okviru besednega izražanja, čeprav si lahko pomagamo tudi z besednim zapisom ali pa z dogovorjenimi (ali tudi lastnimi) grafičnimi simboli. Toda o tem več pozneje.

Opisani postopek razreševanja problema ima v računalništvu tudi svoje ime; pravimo mu strukturirano programiranje ali sistematično razgrajevanje, ki je nepogrešljivo zlasti pri reševanju zapletenejših problemov. Tak način dela je dokaj razširjen v vsakdanjem življenju, saj predstavlja najenostavnejši način reševanja problemov oziroma nalog (slika 146) . Vsaki nalogi lahko določimo še manjše in ožje podnaloge. To delamo toliko časa, dokler ne pridemo do nalog, ki jih lahko razrešimo brez težav.

     Vsak podproblem ali podnaloga torej sestoji iz enostavnejšega niza instrukcij. Sistematično razgrajevanje običajno teče po tako imenovani drevesni razgradnji »od zgoraj navzdol«, to je od splošnega in zapletenejšega k ožjemu in enostavnejšemu. Za ponazoritev bi bilo primerno opredeliti kak primer, ki ne bi bil povezan  le z računalništvom in programiranjem. Naslov teme problema oziroma naloge naj bo npr. Letovanje na morju. K temu »težavnemu« opravilu spadajo tile podproblemi (ali kot jim v računalništvu pravimo tudi podprogrami ali moduli):

  • priprava avtomobila,
  • pakiranje kovčkov,
  • potovanje na morje,
  • razpakiranje kovčkov,
  • kopanje in zabava,
  • priprava avtomobila,
  • pakiranje kovčkov,
  • potovanje domov in
  • razpakiranje kovčkov.

Vsak od naštetih podproblemov je videti enostaven, toda vsaka aktivnost potrebuje podrobnejšo razlago ali navodila. Priprava avtomobila obsega npr. vrsto stopenj:

  • tehnični pregled pri mehaniku,
  • odpravo večjih in manjših napak,
  • plačilo popravila,
  • notranje in zunanje pranje avtomobila,
  • polnjenje goriva,
  • pregled gum.

Vsak tak podproblem bi lahko razgradili še na niz opravil (instrukcij); tehnični pregled pri mehaniku obsega namreč:

  • pregled zavornega sistema,
  • pregled sistema za vžig (svečk, platin, uplinjača. . .),
  • pregled akumulatorja,
  • pregled svetil itd.

V računalništvu imenujemo nižje in dokaj zaključene podprobleme postopki.
Podrobnejši pregled osnovne razgradnje »problema«, letnega dopusta prikaže, da se določeni postopki ponavljajo (pakiranje in razpakiranje kovčkov, ...); podobna aktivnost se ponavlja več kot enkrat. Dolgočasno bi bilo navajati posamezne korake večkrat, zato je prednost takega dela tudi ta, da že razčlenjene in opredeljene postopke lahko uporabimo večkrat oz. v različnih stopnjah reševanja problema. Prednosti takega ravnanja v zvezi s pripravo programov so očitne:

  • omogočajo enostavnejšo definicijo glavne naloge oz. problema,
  • vsak posamezen postopek in korak se lahko zapiše in testira samostojno,
  • postopki oz. podproblemi se lahko v glavnem poteku naloge uporabijo večkrat.

 

 3.5.2 Priprava algoritma

Kot smo videli, lahko določeni problem razgradimo na niz postopkov, seveda pa je koristno pripraviti še spisek navodil, ki bo postopek pomagal izpeljati. Pri pregledu svetil (omenjenih v prejšnjem poglavju) smo npr. naleteli na vrsto opravil in sicer:

  • Vključi luči za označevanje vozila.
  • Če katera od luči ne sveti, poišči napako in jo odpravi.
  • Vključi zasenčene luči.
  • Če katera od luči ne sveti, poišči napako in jo odpravi.
  • Vključi dolge luči.
  • Če katera od luči ne sveti, poišči napako in jo odpravi.
  • Vključi levi in desni smerokaz....Itd.

Seveda bi navedenim opravilom lahko dodali še kako podrobnejše navodilo. Tak spisek navodil, s katerim lahko opravimo določen postopek, imenujemo algoritem. Vsako navodilo s spiska (korak algoritma) mora biti kaka dobro znana operacija. Torej je algoritem pomemben element v pripravljanju računalniških programov. Algoritem je postopek, opremljen z nizom navodil za reševanje naloge. Biti mora nedvoumen, ustavljiv in zapisan z elementarnimi navodili. Nedvoumen je takrat, ko je izvajanje navodil v vseh okoliščinah natančno določeno. Tudi ustavljivost je njegova nujna lastnost (algoritmov, v katerih se delovanje ponavlja); ustavljiv je, če se v vseh okoliščinah konča v merljivem času. Algoritem mora biti sestavljen iz samih elementarnih navodil, elementarno navodilo je tisto, ki ga oblikovalec algoritma razume in zna izpolniti.

     Sestavljanje algoritma ni vedno preprosto predvsem zato, ker algoritmično razmišljanje človeku ni domače in se ga mora šele priučiti. Prav preskok od tega, da nam je povsem jasno, KAJ je treba storiti, do tega, da znamo nedvoumno povedati tudi, KAKO to storiti, zahteva dokaj truda.

Algoritem lahko zapišemo:

  • z besednim opisom in
  • z grafično predstavitvijo.

Sestavine besednega opisa algoritma so:

  • naslov oz. ime algoritma;
  • podatki, ki jih algoritem potrebuje, in rezultati, ki nam jih vrne;
  • opis postopka oz. algoritem sam.

Računalniku je potrebno poleg postopka posredovati tudi podatke, s katerimi bo izvedel določeno delo. Opredeliti je treba vse podatke, določiti, kakšni so in kako so med seboj povezani. Zato je vsak računalniški program sestavljen iz algoritma in podatkov.

Kot vidimo, s pisanjem algoritma v bistvu sestavljamo navodila, ki povedo, kako s podatki ravnati in to največkrat neodvisno od vrednosti, ki jo podatek v tistem trenutku res ima. Zato v algoritmu na zahtevanem mestu zapišemo oznako količine - njeno ime. Med preizkusom algoritma in pozneje, med potekom programa, na vsakem mestu, kjer smo to ime zapisali, računalnik uporabi njeno trenutno vrednost. Ker se ta vrsta podatkov lahko spreminja, ji (tako tudi v matematiki) pravimo spremenljivka. Če si računalnikov pomnilnik predstavljamo kot omaro, si spremenljivko kot predal v njej. Med potekom algoritma (oz. programa) v tem »predalu« hranimo dano vrednost (slika 147). Ime spremenljivke »je oznaka predala, njena trenutna vrednost pa tisto, kar v tem trenutku v njem tiči«. Če spremenljivki priredimo novo vrednost, se prejšnja izgubi. Torej samo ime spremenljivke označuje mesto v pomnilniku, kjer poiščemo vrednost, ko spremenljivko pri delu potrebujemo. Na začetku dela so vrednosti spremenljivk nedoločene, zato jim moramo (vsaj enkrat) vrednost predhodno prirediti.
Za ponazoritev sestavljanja besednega opisa algoritmov in dela s spremenljivkami je prav, če si ogledamo nekaj primerov (primer 1, 2 in 3), iz katerih je mogoče razbrali tudi princip delovanja računalnika.

 


Primer 1: Povečaj število.

Postopek povečanja števila za B zahteva tele korake.

vzemi število (A),
prištej mu B,
shrani na prejšnje mesto (torej je prejšnja vrednost izgubljena).

Sestavimo algoritem:

Ime algoritma: Povečaj število
Podatki:    A, B
Rezultat:   A
Postopek: A ← A + B
               Konec

Rezultat je seveda matematični nesmisel, ni pa računalniški, saj se podobni postopki v računalniku res dogajajo. Potrebno je opraviti še preizkus za nekaj poljubnih vrednosti (številskih in nizovnih)!

Primer 2: Zamenjaj vrednost dveh količin.
Vzemimo dve spremenljivki, npr. A in B, katerih vrednosti želimo zamenjati, torej: kar je bilo prvotno v spremenljivki A, naj bo na koncu v B, in obratno. V spremenljivki se lahko skriva število, znak, beseda itd., kar pa nas sedaj ne zanima. Če vam pojem spremenljivke še ni jasen, poskusite problem rešiti s primerom dveh lončkov: v enem so kroglice bele barve, v drugem pa modre. Naloga zahteva, da zamenjamo vsebino kroglic (različnih barv) v obeh lončkih (spremenljivkah)!
Variante postopka zamenjave bi bile (slika 147): 

  • Vrednost v A vstavimo v B: vrednost iz A prekrije vrednost v B, in tako imamo v obeh spremenljivkah vrednosti iz A. Izgubili smo podatek iz B.
  • Vrednost v B vstavimo v A: rezultat je podoben gornjemu primeru, saj smo prav tako izgubili podatek iz A.
  • Za pravilno rešitev tega problema torej potrebujemo novo (»začasno«) spremenljivko C, v katero začasno prenesemo eno od vrednosti spremenljivk A oziroma B.

Sestavimo algoritem po dogovorjenem postopku:

Ime algoritma: Zamenjava
Podatki: A, B
Rezultat: Zamenjane vrednosti A, B
Postopek:
C ← A           (Znak »←»se imenuje prireditveni operator.)
A ← B
B ← C
Konec

Primer 3: Štetje od 1 do 20.
V tej nalogi bomo uporabili znanje sestavljanja algoritmov iz prejšnjih dveh primerov. Spremenljivki I bomo prištevali 1 tako dolgo, dokler ne bo dosegla številke 20.

Ime algoritma: Štetje od 1 do 20
Podatki: I
Postopek: 
I←1
Izpiši I
Če je I<20 potem I=I+1 in nazaj v stavek: Izpiši I, sicer Konec
Konec 

Problem sicer ni težak, a poudariti velja člen I=I+1, ki v bistvu opravlja štetje. Štetje je pogosta naloga v programiranju. Običajno jo rešimo tako, da uvedemo posebno spremenljivko, ki ji pravimo števec. Ta spremenljivka (v našem primeru I) se obnaša podobno kot resnični števec (npr. števec kilometrov v avtomobilu, električni števec itd.). Vsakič, ko se izpiše nova številka, se števec poveča za 1; to pomeni, da se števni spremenljivki poveča vrednost za 1.

Opravimo še preizkus. Za to je zelo pripravna t.i. tabela rezultatov ali preizkusna tabela, ki jo prikazuje slika 147. 

     Besedni opis algoritma je največkrat (še posebno, če je daljši) nepregleden. V takih primerih se je uveljavilo zapisovanje algoritmov v drugih, nazornejših oblikah (slika 148), med katerimi je najpogostejši grafični zapis algoritma z dogovorjenimi bloki; po tem se ta način imenuje zapisovanje algoritmov z blok diagramom ali diagramom poteka. V takem diagramu s posebnimi (standardiziranimi) simboli označimo posamezne vrste navodil, simbole med seboj povežemo in opredelimo vrstni red, po katerem se navodila izvršujejo. Simboli, ki jih največkrat uporabljamo kaže slika 149. Prikaz standardiziranega pravila za risanje posameznih blokov izhaja iz pravokotnika z enotno stranico (slika 149, torej a=1 → b=2/3a (Primer: a=6 cm → b=4 cm).

Za rešitev problema je dovolj, če algoritem zapišemo na enega od naštetih načinov: z besednim zapisom ali z diagramom poteka. Oglejmo si še nekaj primerov z rešitvami.

Naloga 1:  Zapišite diagram poteka za vse tri primere algoritmov, ki smo jih reševali na primeru besednih algoritmov (slika 147 in rešitve slika 150)!

Naloga 2: Zapišite algoritem z besednim opisom in diagramom poteka za program, ki naj izpiše števila od 1 do 10, in sicer tako, da ob številu zapiše še kvadrat tega števila. Preverite algoritem s preizkusno tabelo (slika 151)!

Naloga 3: Zapišite algoritem z besednim opisom in diagramom poteka za program, s katerim želimo pomagati mlajšemu bratcu ali sestrici pri učenju poštevanke: izpiše naj se tabela poštevanke želenega števila, in to od 1 do 10 (slika 152)! Tabela naj ima npr. za število 7 takle izpis:

7 * 1 = 7
7 * 2 = 14
7 * 3 = 21 itd.



3.5.3 Programski jeziki

     V dosedanji obravnavi še ni bil potreben noben programski jezik, temveč le strokovno znanje za razčlenitev problema in znanja za sestavo algoritma (slika 148). Algoritem v bistvu že predstavlja rešitev problema, njegove stavke moramo le prekodirati oziroma prevesti v ukaze izbranega jezika. Kdor pozna kak računalniški jezik (npr. Pascal,  Basic, Html,  Java itd.), ve, da je potrebno določene besede oziroma stavke algoritma le prevesti v ustrezne angleške ukaze, in program je hitro pripravljen za uporabo. Seveda celoten postopek ni tako preprost, še zlasti pa ni bil v prvih letih računalništva.

Računalnik se odziva le na dva simbola (0 ali 1 oz. DA in NE...) oz. točneje dve stanji (napetost je (1) in napetosti ni(0)). Za sporočanje, kakršnega je navajen človek, je to dokaj nenavadno in nesprejemljivo. Zato bi bilo najbolje, če bi računalnik lahko naučili človekovega jezika. A do tega je še dolga pot (ali pa tudi ne). Na področju programskih jezikov so znanstveniki dosegli precejšen napredek, saj so pripravili na ducate tako imenovanih programskih jezikov, ki se jih je mogoče razmeroma zlahka in hitro naučiti in so človeku bližji kot računalnikov strojni jezik. To pomeni, da so lažje razumljivi, hkrati pa bliže strojnemu jeziku kot naravni jezik. Programskih jezikov je danes na stotine. Vendar so v praksi uveljavljeni le nekateri. Prvi programski jeziki segajo v 50-a in 60-ta leta prejšnjega stoletja, ko so začeli uvajati zbirne jezike, prve prevajalnike in interpreterje.  S pojavom računalnikov, zgrajenih po Von Neumannovem modelu so se začeli pojavljati tako imenovani postopkovni (proceduralni) jeziki. Računalnike so sprva uporabljali za znanstvena računanja. Tako ni čudno, da je bil eden prvih programskih jezikov FORTRAN (kar izhaja iz angleških besed Formula Translation). 
Hitro so mu sledili programski jeziki za poslovne aplikacije (COBOL, PL/I), saj je bilo to obdobje velikih računskih centrov. Računalniki so bili za vsakdanjo rabo še preveliki, predragi in preredki. Kasneje so se pojavile nove tehnike programiranja, ki jih uporabljamo še danes, to je strukturirano programiranje in nato še  objektno usmerjeno programiranje. 

     Kot smo že povedali, z računalnikom lahko komuniciramo le s posebno vrsto jezika, ki ga imenujemo strojni jezik. Določene naloge procesor računalnika opravi le, če mu damo napotke (ukaze določenega procesorja) v tem jeziku (slika 153). In tako je tudi bilo vrsto let, še posebno v začetni dobi uporabe računalnikov, ko so bili vsi programi pisani v tem osnovnem programskem jeziku. To je bilo za programerje, pa tudi za druge uporabnike (katerih krog je bil tudi zato tako ozek) zelo zahtevno, težavno in zapleteno opravilo. Kaj kmalu je postalo jasno, da pisanje programov v strojnem jeziku ne pomaga širitvi uporabe računalnikov. Razloga sta bila predvsem dva: pisanje programov z zaporedjem ničel in enic je tako nepregledno, da na tak način lahko rešujemo le najpreprostejše probleme. Strojni jezik torej sestavlja niz strojnih instrukcij, kjer vsaka od njih sestoji iz niza dvojiških številk (cifer) določene dolžine (slika 155). Ta niz se deli na dva dela: operacijskega in naslovnega. Operacijski del predstavlja kodirano obliko določene operacije, naslovni del pa kodirano obliko efektivnih naslovov v spominu ali/in v registrih, na katerih vsebinah se želi opraviti določena operacija. Programer, ki je uporabljal strojni jezik, je bil resnično zelo blizu računalniku; z njim sta govorila isti jezik.

     Strojni jezik se je uporabljal se vse dotlej, dokler se uporabniki niso domislili, da bi vsaki instrukciji določili črkovno kratico -simbol. Tako smo dobili t.i. simbolične programske jezike, ki jih delimo v dve skupini:

  • nižje programske jezike (usmerjeni k stroju) in
  • višje programske jezike (usmerjeni k problemu). 

     Značilen predstavnik nižjih programskih jezikov poleg strojnega jezika  je t.i. zbirni jezik (ang. assembly language - slika 153), ki strojne instrukcije predstavlja v simbolični in (ali) številčni obliki (zapisan z opisnimi - mnemoničnimi ukazi) in se ne more neposredno izvajati na računalniku, saj ga je treba prej prevesti v strojni jezik. Kako poteka pisanje programov v teh jezikih? Program najprej napišemo v zbirnem jeziku (navadno je različen glede na tip računalnika oz. procesorja - torej je še vedno je odvisen od procesorja). Uporabi se kot vhodni ali t.i. izvirni program v zbirniku (ang. assembler); zbirnik je program, ki prevede program v zbirnem jeziku v strojni jezik (strojno kodo). Zbirnik preveri, ali so uporabljeni pravilni nazivi (simboli) in oblike ukazov. Če program nima napak, zbirnik oblikuje izhodno datoteko, ki jo često imenujemo ciljna koda; to je sedaj program (t.i. objektni program), preveden v strojni jezik, ki se lahko izvede na računalniku.  Vsak simboličen ukaz se v zbirniku prevede v en strojni ukaz, torej je tem pogledu odnos še vedno 1:1, vsakemu strojnemu ukazu ustreza en simboličen ukaz (ukaz zbirnika). Vsekakor pa je pisanje programov v zbirnem jeziku enostavnejše kot pisanje s strojnim jezikom. Tak način programiranja se še uporablja v procesnem računalništvu, kjer potrebujemo hitre odzivne programe.

     Okoli leta 1950 se je veliko razpravljalo o uporabi ustreznih programskih jezikov; mnogi uporabniki so zagovarjali nadaljnje izpopolnjevanje in uporabo programskih jezikov izključno na podlagi zbirnika (nižjih simboličnih programskih jezikov), drugi pa so menili, da se mora programiranje poenostaviti in približati človeku. Ta skupina je tudi prevladala, zato so se kmalu pojavile nove vrste jezikov, t.i. višjih programskih jezikov - problemsko orientiranih jezikov.
Ti so precej neodvisni od strukture določenega računalniškega sistema in so tudi bližje človekovemu načinu zapisovanja (slika 153). So problemsko usmerjeni, kar pomeni, da je njihova struktura prirejena področju, za katerega so namenjeni. Tudi ti potrebujejo prevajalnike, ki skrbijo za »razumevanje« med zapisanim programom v višjem programskem jeziku in strojnim ukazom, ki ga razume računalnik. Ne vsebujejo posameznih strojnih ukazov, temveč pomensko-simbolične ukaze, ki pomenijo niz strojnih ukazov izvedbe (razmerje ni več 1:1 temveč 1:n).

Višje programske jezike delimo:

  • glede na strukturo prevedenega programa:
    • strukturirani (C, Pascal, Java.)
    • nestrukturirani (Basic)
  • glede na vsebino kodiranja:
    • postopkovni, izdelan v obliki recepta (C, Pascal, Basic ... )
    • deklarativni (nepostopkovni), programiranje sloni na opredelitvi pravil in dejstev. (Prolog, Lisp .)
  • glede na to, kaj je osnovni element programa:
    • proceduralni (Pascal, Basic, C .)
    • modularni/objektni (Java, (C++ .)

Za pretvorbo višjega programskega jezika v strojni jezik se v glavnem uporabljata dva načina (slika 156):

  • Prevajanje - uporablja se poseben program, imenovan prevajalnik (ang. compiler), ki celoten program prevede v strojni jezik računalnika. Šele v prevedeni obliki se lahko izvede. To pot uporablja večina »klasičnih« jezikov, kot npr. Fortran, Cobol, Algol, C, C++, Ada, Pascal itd. Prevedeni programi so le nekoliko počasnejši, kot če bi rešitev problema programirali kar v zbirniku.
  • Tolmačenje - uporablja poseben program tolmač (ali interpreter), pri izvajanju programa sproti pregleduje, urejuje, javlja napake in prevaja oz. tolmači posamezne stavke programa. Ta pristop uporabljajo jeziki, kot so: Lisp, Logo, Basic, Prolog itd. Tolmačenje je po navadi okoli desetkrat počasnejše kot izvajanje prevedenega programa. Po drugi strani pa predstavlja bližnjico med pripravo in izvajanjem programa - preskoči zamudno stopnjo prevajanja, hkrati pa nas sproti opozarja na napake pri programiranju. Zato je tak način zelo dobrodošel pri učenju jezika in preverjanju programov.

     In katere jezike in prevajalnike bi bilo smotrno uporabljati v določenih okoliščinah, če bi se znašli v vlogi programerja? Odgovor je odvisen predvsem od področja in narave programa. Pri pustolovskih igrah, kjer hitrost ni zelo pomembna in kjer večji del obdelave poteka v obliki niza besed, lahko uporabimo višji programski  jezik na osnovi tolmačenja (npr. Basic, Logo...): posamezne ukaze bo tolmač oziroma interpreter prevajal sproti. Probleme, ki potrebuje hitrejšo obdelavo, kot npr. poslovne programe, kjer bi bilo množico matematičnih operacij težko napisati v strojnem jezika, bi bilo primerno pisati v enem od višjih programskih jezikov in potem prevesti s prevajalnikom, saj bi bil tolmač v tem primeru prepočasen. Za hitre in razburljive arkadne igre, ki imajo tudi obsežno grafično podporo, pa bi strojni jezik ustrezal, saj bi bil tudi prevajalnik prepočasen.


Oglejmo si nekaj pomembnejših predstavnikov višjih programskih jezikov (v oklepaju navajamo angleške besede, iz katerih je sestavljena kratica) in starejšega in novejšega datuma!

  • FORTRAN (FORmula TRANslation) je nastal okoli leta 1955 kot program za prevajanje matematičnih postopkov v računalniške programe. Sprva zelo enostavni verziji so se kmalu pridružile izpeljanke, kot npr. Fortran II, III, IV, V, Fortran 77 in cela vrsta t.i. strukturiranih Fortranov. Uporablja(l) se (je) predvsem za reševanje znanstvenih in tehničnih problemov.
  • COBOL (Common Business Oriented Language) je nastal okoli leta 1960, vpeljan pa je bil sedem let kasneje. Namenjen je bil predvsem pisanju programov za poslovno-ekonomsko problematiko. Strukturiran je tako, da skuša biti čim bolj podoben naravnemu (angleškemu) jeziku in razumljiv tudi neprogramerjem, zlasti vodstvenim delavcem.
  • BASIC (Beginner's All-purpose Symbolic Instruction Code) je nastal leta 1965 kot preprost jezik za učenje programiranja in kot stopnička k Fortranu. Zasnovali so ga kot jezik za neposredno (pogovorno, interaktivno) delo z računalnikom in kot jezik, ki bo primeren za najrazličnejše uporabnike: začetnike, učence, študente pa tudi strokovnjake različnih strok. Njegova uporaba se je še posebno razmahnila, ko so se uveljavili hišni in osebni računalniki, in to zlasti v šolstvu, saj je bila uporaba tolmača z že vgrajenim Basicom (v ROM-u) za začetno delo, posebno v osnovnih šolah, izredno ugodna. Čeprav Basicu lahko očitamo, da npr. nima dovolj preglednih programov, pa je ta programski jezik v "vročici uveljavljanja računalništva" zagotovo poznalo največ ljudi. Novejših verzij tega jezika je kar precej, med njimi sta med najbolj poznanima MS Small Basic in Visual Basic za razvojno okolje Visual Studio.
  • PASCAL je nastal leta 1968, prvi prevajalnik pa dve leti kasneje. Njegov »oče« je N. Wirth; imenoval ga je po francoskem matematiku Blaisu Pascalu, ki je izumil enega prvih praktično uporabnih računskih strojev. Za osnovo sta mu rabila jezika ALGOL-60 in ALGOL-W. Wirth je izpustil večino težjih, manj uporabnih lastnosti Algola, dodal pa je nekaj koristnih novih elementov. Za to je imel dva razloga: želel je napraviti jezik, ki bo imel učinkovit prevajalnik, uporabniki pa bi lahko pri pisanju programov izkoriščali polno moč jezika. Pascal se je hitro razširil po svetu in v nekaj letih postal eden pomembnejših programskih jezikov (še posebej njegove novejše izpeljave, kot npr. Turbo Pascal, Vizual Pascal itd.): je šolski primer za lepo izdelan in strukturiranemu programiranju naklonjen programski jezik. Ima vrsto koristnih prijemov, ki jih najdemo tudi pri drugih programskih jezikih, in programerju naravnost ponuja možnost, da piše programe kar se da strukturirano.
  • C je zelo sposoben višji programski jezik (avtor je Dennis Ritchie), ki se je razvil ob operacijskem sistemu UNIX. Večina sistemskih programov drugih operacijskih sistemov je namreč napisanih v nižjih programskih jezikih (zbirnem jeziku). Programski jezik C in njegove poznejše izpeljave (C++, Visual C itd.), so (še) posebno primerene za pisanje operacijskih sistemov in sistemskih servisnih programov.
  • LOGO - ime programskega jezika Logo ne izhaja iz kratice, temveč je izpeljanka iz grške besede LOGOS (gr. logos - misel, razum). Njegovi avtorji so želeli ustvariti jezik, ki bi povezoval način programiranja in način človekovega razmišljanja. Začetnike, zlati otroke, naj bi spodbujal, da bi probleme reševali z razstavljanjem na manjše in lažje rešljive enote. In to se jim je tudi v celoti posrečilo. Logo se je razvijal več let. Sodelovali so strokovnjaki z obeh strani Atlantika, glavni vodja pa je bil profesor Seymour Papert z Inštituta za tehnologijo v Massachusettsu. Značilnost jezika Logo je t.i. »želvja grafika«, to je skupek ukazov, ki enostavno in z razumljivimi gesli premikajo »želvico« (zaslonska želvica v obliki trikotnika, puščice...) po ekranu, sled premikanja pa riše želene vzorce, risbe itd. Nekateri zmotno menijo, da je začetek in konec tega jezika v njegovi »želvji grafiki«; ta del je le manjši del, saj je Logo zelo močan in izredno strukturiran jezik (še posebej novejše verzije), ki ima že precej lastnosti nepostopkovnih jezikov. Zato so ga v procesih računalniškega opismenjevanja uporabljali na veliko šolah, zlasti še v nižjih razredih osnovne šole.
  • Python je programski skriptni jezik, ki je dobil ime po priljubljeni televizijski nanizanki Leteči cirkus Montyja Pytona. Ustvaril ga je Guido van Rossum leta 1990; za izvajanje uporablja interpreter. Je popolnoma objektno orientiran, sintaksa je preprosta. Zaradi zanimive in uporabne strukture omogoča programerju zelo hitro pisanje kode; je zelo preprost in učinkovit za začetnike ter zato izredno primeren za prve in vse nadaljnje korake v sodobnem programiranju!
  • Scratch je v osnovi na Logu zasnovan programski jezik za mlajše, s katerim po zaslonu premikamo predmete - skice. Te se odzivajo na zunanje dogodke (tipkovnica, miška...) in na položaje drugih predmetov (enostavna izdelava iger, animacij itd.). Uporabljena je grafična predloga z gradniki za programiranje. Gradniki so različnih vrst, od tistih za premikanje (premakni predmet, zavrti predmet...) do upravljalnih (ponavljaj n-krat, ponavljaj dokler...). Obstaja tudi v slovenščino preveden uporabniški vmesnik.
  • Programski jeziki s spletno orientacijo, kot npr. HTML, Java Script, JAVA, PHP, VRML itd. Med njimi je gotovo najbolj poznan in uporabljan jezik HTML - jezik za označevanje nadbesedila (ang. Hyper Text Markup Language) in s tem osnova za izdelavospletnihstrani (slika 155). Predstavlja osnovo spletnega dokumenta. S HTML razen prikaza dokumenta v brskalniku hkrati določimo tudi strukturo in semantični pomen delov dokumenta. Dokaj pogosto se je uporabljal tudi programski jezikJava, in to za celo paleto različnih aplikacij v različnih okoljih. Izjemno popularen jezik je tudiJavaScript, saj se z njim ustvari veliko spletnih aplikacij in vmesnikov, ki jih vidimo v spletnih brskalnikih; pomemben je tudi za programiranje v okviru pdf dokumentov, specifičnih spletnih in intranet brskalnikov ter 'widgetov'. V zadnjem letu naj bi se število uporabnikov JavaScript okolja povečalo za kar 76 odstotkov. Tudi PHPje izjemno popularen programski jezik za upravljanje s strežniki in bazami podatkov v HTML okoljih.

Višjih programskih jezikov je doslej že več 100.  Kot smo že omenili, jih v osnovi lahko delimo v dve vrsti, in sicer jezike, s katerimi predvsem opisujemo, kaj želimo narediti, in jezike, s katerimi tudi podrobneje povemo, kako to storiti. Prva skupina jezikov je bliže naravnemu (3., 4. in 5. generacija), druga pa strojnemu jeziku računalnika (1. in 2. generacija). Jezike prve vrste imenujemo nepostopkovne ali opisno usmerjene (neproceduralni jeziki), jezike druge vrste pa postopkovne ali ukazovalno usmerjene (proceduralni jeziki). Postopkovni jeziki opisujejo program podobno kot kuharska knjiga kuho: vzemi to ali to, stori prvo, drugo, tretje itd. Danes pa že obstajajo jeziki, ki se programiranja lotevajo na popolnoma drugačen način: program npr. opišemo s pomočjo lastnosti želene rešitve. Tako lastnost imajo nepostopkovni jeziki, jeziki pete generacije računalnikov, ki so po svoji strukturi in logiki še najbolj prilagojeni človeškemu načinu razmišljanja: ljudem se naj ne bi bilo treba prilagajati računalniški programski logiki. Pomemben predstavnik takih jezikov je PROLOG (ang. PROgramming in LOGic) - prvi poskus oblikovanja jezika, ki naj bi programerjem omogočal definiranje rešitev s pomočjo logike. Zasnovali so ga že leta 1975 na Univerzi v Marseillu. To je preprost, vendar presenetljivo močan programski jezik, ki se na določenih področjih vedno bolj uveljavlja (npr. avtomatika, sistemska logika, robotika itd.). Posebno učinkovit je pri simboličnem nenumeričnem procesiranju in pri delu z bogatimi podatkovnimi strukturami. Med njim in postopkovnimi jeziki obstaja bistvena razlika: postopkovni jeziki opisujejo postopke, to je, kako pridemo od vhoda do izhoda oz. od danih podatkov do rezultatov, v Prologu pa definiramo samo razmerja med podatki in rezultati, prevajalnik pa mora sam poiskati postopek operacij, ki prevedejo podatke v rezultate tako, da najbolje ustrezajo zahtevam.

In kako kaže, da se bodo razvijali programski jeziki v prihodnje? V bistvu programiranje nenehno napreduje in je ljudem vse bližje. Prvi začetki so bili v strojni kodi, nato so se pojavili zbirni jeziki, pred približno 25 leti pa so se začeli pojavljati višji programski jeziki, tipa Fortran, Cobol, Basic itd. Zadnjih nekaj 10 let se poleg novejših postopkovnih jezikov tipa Pascal in C pojavljajo in uveljavljajo nepostopkovni jeziki ti-pa Prolog. Veliko študij in projektov kaže, da gre razvoj jezikov in programiranja v to smer, torej k približevanju ljudem in njihovemu načinu mišljenja in sklepanja. Računalniki novejše generacije, ki temeljijo na nepostopkovnih jezikih, so že taki, da je njihova strojna oprema prilagojena tem jezikom. Ti načrti imajo močno finančno podporo zlasti od takrat, ko so Japonci in Američani pričeli hud boj za prevlado na področju računalništva. Danes je večina aplikacij narejena v postopkovnih jezikih in le peščica v nepostopkovnih; nepostopkovni se bodo morali še precej izpopolniti, če bodo hoteli pridobiti veljavo, kakršno imajo najbolj razširjeni jeziki.

V celotnem tekstu smo omenjali generacije programskih jezikov; slika 156 prikazuje razvrstitev v značilne generacije računalniških programskih jezikov glede na svoj abstrakcijski nivo. V 1. generacijo računalniških programskih jezikov torej štejemo strojni jezik, ki predstavlja binarne ukaze, ki jih računalnik neposredno izvaja in tudi neposredno razume. Kot smo videli je bilo tako programiranje izredno zamudno in tudi težko.  2. generacijo jezikov predstavlja zbirni jezik (assembler), ki pomeni simbolični zapis strojnih ukazov. S tem se bistveno izboljša razumljivost in preglednost programov, čeprav je programiranje še vedno zamudno; potreben je tudi prevajalnik iz zbirnega v strojni jezik. Višji programski jeziki predstavljajo 3. generacijo programskih jezikov; so v bistvu simbolični jeziki, katerih ukazi se prevedejo v več strojnih ukazov. Predstavljajo enostavnejše in preglednejše programiranje, manj napak v programiranju in seveda tudi prenosljivost - neodvisnost od znamke računalnika. Jeziki 4. generacije (zelo visoko nivojski jeziki) so simbolični jeziki za nepostopkovno (neproceduralno) reševanje problemov; usmerjeni so k rezultatu (kaj želimo rešiti in ne kako). Razširjeni so predvsem v zvezi z bazami podatkov za poizvedovanje (SQL) in generiranje poročil. 5. generacija opredeljuje programske jezike, ki služijo reševanju specifičnih problemov ozkega področja (npr. splet, spletne baze podatkov, umetna inteligenca itd.).

  3.5.4 Kodiranje programa

     Kot smo v pregledu programske opreme videli, lahko računalnik uporabljamo, ne da bi veliko vedeli o njegovi sestavi, delovanju in sestavljanju programov. A v nekem trenutku nas kupljeni ali od prijateljev ali s spleta »sposojeni« programi in igre ne zadovoljujejo več, ali pa smo v situaciji, ko za rešitev določenega problema, ne najdemo ustreznega programa. Takrat pomislimo na to, da bi samostojno pripravili program, ki bo rezultat lastnega dela, želja, zahtev in seveda našega znanja. Takrat pričnemo programirati, to je pripravljati navodila in ukaze, ki računalniku natančno povedo, kaj in kako mora opraviti, če hoče rešiti zadano nalogo. Seveda moramo poznati tudi vsaj en programski jezik.

Računalnik sam po sebi ne naredi ničesar: če mu zapovemo, naj naredi neumnost, jo bo zagotovo naredil; če mu podamo napačen način reševanja problema, ga bo po napačni poti tudi izpeljal. Če želimo torej z računalnikom rešiti kak problem, moramo postopke reševanja vnesti natančno in strokovno pravilno. Torej, ko z analizo rešimo določen problem, je treba rešitev kot delovno nalogo prenesti v računalnik, seveda v izbranem programskem jeziku. V dosedanji obdelavi smo videli, je na voljo kar precejšnje število programskih jezikov. V starejših šoIskih krogih sta bila precej razširjean programski jezik BASIC in PASCAL; slednji je gotovo primer programersko dobro - strukturirano izdelanega programskega jezika. Nekateri kritiki pripominjajo, da ne premore tega ali onega prijema, da zaradi natančnega izražanja spremenljivk na začetku programa ni najprikladnejši za začetnike itd., toda to so le malenkosti v primerjavi z vsemi drugimi programerskimi možnostmi. Pascal se je hitro razširil po svetu in je bil v 90-tih letih eden pomembnejših programskih jezikov (še posebej njegove novejše izpeljave, kot npr. Turbo Pascal, Vizual Pascal, Delphy itd.): je šolski primer za lepo izdelan in strukturiranemu programiranju naklonjen programski jezik. Prav zaradi tega, ga bomo v kratkem pregledu osnovnih pojmov o programiranju  uporabljali, na predstavljeni osnovi pa boste lahko primere napisali tudi v novejših programskih jezikih, vam bolj poznanih. Eden takih je gotovo že omenjeni Python, ki je med najpogosteje uporabljenimi programskimi jeziki v osnovnošolskem in srednješolskem izobraževanju osnov programiranja; je popolnoma objektno orientiran, z zelo preprosto sintakso, zaradi česar omogoča tudi začetniku-programerju zelo hitro pisanje programske kode. Primerjavo zapisa programa v programskem jeziku Pascal in programskem jeziku Pyton, si lahko ogledamo na primeru izračuna kvadrata in kuba izbranega števila (slika 157); vidimo le manjše sintaktične razlike med obema jezikoma!

      To poglavje seveda nima namena predstavljati posameznih ukazov programskih jezikov  Pascal in Pyton, temveč le prikazati pomembnejše algoritemske stavke, ki jih navadno najdemo v vsakem programu. Ker bodo enostavni programski problemi napisani v Pascalu in Pytonu in hkrati opremljeni z diagramom poteka, bo to priložnost, da spoznamo osnovno strukturo programskih stavkov in seveda postopek prehoda iz algoritma v zapis programa.

Za začetek si oglejmo dva enostavna matematična programa za izračun kvadrata in kuba podanega števila (rešitev v algoritemski in programski kodi kažeta sliki 157 in 158). Posebno pozornost (v tem in vseh nadaljnjih  podanih primerih) posvetite algoritmu, pretvorbi algoritma v programsko kodo (blok - programski stavek), poteku programa, načinu rešitve in uporabljenim programskim stavkom (v našem primeru v programskih jezikih Pascal in Pyton). Poskušajte zapisati program v vašem izbranem programskem jezik, ga preveriti v delovanju, nato pa najti boljšo, krajšo ali lepšo rešitev podanega problema!

Predstavljenih programov (PRIMER_1 in PRIMER_2) ni težko razumeti, posebno če si ogledamo oba diagrama poteka. Ob njih lahko dokaj nazorno spoznamo tudi dve vrsti instrukcij: s prvo računalnik opravi nalogo, pri drugi pa se glede na postavljen pogoj odloča o nadaljnjem zaporedju instrukcij. Glede na to ločimo dve vrsti algoritemskih navodil (ti. osnovnih stavkov ) in sicer:

  • prireditvene stavke in
  • pogojne (odločitvene) stavke.

V programu PRIMER_1 (slika 157) je prikazan primer prireditvenega stavka. Znak ":=" (v Pascalu) ne pomeni matematično mišljenega enačaja, temveč mu pripisujemo vlogo prireditvenega operatorja, kar pomeni: spremenljivki »a« priredi vrednost kvadrata števila n, spremenljivki »b« pa vrednost kuba števila n! Seveda so rešitve problemov, ki bi jih opravili v celoti, od začetka do konca, redke, saj imamo po navadi možnost, da se odločamo (primer programa PRIMER_2 na sliki 158); v tem primeru imamo opraviti s t.i. pogojnim ali odločitvenim stavkom (slika 159). Računalniku s takim stavkom naložimo, naj preveri dani pogoj; če je le-ta izpolnjen, opravi prvo skupino stavkov, če ni, pa drugo.

Vendar ni nujno, da program teče le navzdol po diagramu - ves čas v isti ali s pogojem izbrani smeri. Lahko se vrne spet na neki stavek, v katerem je že bil; s tem dobimo zelo pogosto in priljubljeno strukturo, ki ji pravimo zanka (slika 159).

Oglejmo si še nekaj primerov programov, v katerih bomo našli prireditveni stavek in pogojni stavek!


  1. Pripravite diagram poteka in program po algoritmu za določanje poti, ki jo prevozi avtomobil z določeno enakomerno hitrostjo v določenem času!

  Rešitev - Primer_3: Fizika nas uči, da se pot pri enakomernem prememu gibanju izračunava pa enačbi: s=v*t. Zato moramo vnesti vrednosti za hitrost »v« in čas »t«. Glede na enačbo, nam računalnik izračuna prevoženo pot.  Diagram poteka in programa v programski kodi Pascal in Pyton za Primer_3 kaže slika 160.

  2. Pripravite program in diagram poteka za primer, ki za vneseni dve različni števili a in b opravi deljenje večjega z manjšim. Vnašamo samo števili, večji od nič.

  Rešitev - Primer_4: Za rešitev tega problema bomo uporabili pogojni stavek, s katerim bomo ugotovili, ali je a>b. Če je a>b, bo opravljena delitev a/b, če pa ne, pa b/a. V nalogi je postavljen pogoj, da je potrebno vnašati števila, ki so večje od nič. Poskušajte rešiti ta problem tudi za primer, ko te omejitve ni! Diagram poteka in programa v programski kodi Pascal in Pyton za Primer_4 kaže slika 161.

  3. Zapišite diagram poteka in program za prikaz tabele kvadratov in kubov naravnih števil med izbranima številkama a in b. Prikaz naj bo takšen, da so v isti vrstici: naravno število, kvadrat in nato še kub tega naravnega števila.

  Rešitev - Primer_5: Za rešitev tega primera bomo vsekakor uporabili zanko. Izbrano spodnjo mejo (izraz a) bomo povečevali za 1 toliko časa, da bo a>b; ko bo pogoj izpolnjen, bo delo končano. Vmes bo seveda program izpisoval naravno število, njegov kvadrat in kub. Diagram poteka in programa v programski kodi Pascal  in Pyton za Primer_5 kaže slika 163.

Rešitev, kakršno dobimo v 3. nalogi, ni najboljši primer podanega problema. V takem primeru je ugodneje, če združimo prireditveni in pogojni stavek z zanko; dobimo ponavljalni stavek, ki ga ločimo v dve vrsti: v prvem je pogoj pred izvršilnim stavkom, pri drugem pa je za njim (slika 162). Pri prvem stavku se vrtimo v zanki toliko časa, dokler je izraz v odločitvenem bloku pravilen, v drugem pa končamo, ko postane izraz pravilen. Taki stavki, ki zahtevajo, da se glede na pogoj določeno opravilo ponovi večkrat, so pogosto in nepogrešljivo orodje v programerski tehniki.

Oglejmo si še dva primera programov, ki vsebujeta ponavljalni stavek!

  4Rešimo sedaj nalogo 3 s pomočjo ponavljalnega stavka.

  Rešitev - Primer_6: V diagramu poteka bomo uporabili blok cikličnih ponavljanj, katerega pomen in obliko kaže slika 164, v programu pa ponavljalni stavek FOR; svoje ime je dobil po ukazu, ki začne njegovo konstrukcijo. Izraz a bomo povečevali za 1 toliko časa, da bo a>b; ko bo pogoj izpolnjen, bo delo končano; ob tem bo seveda program izpisoval naravno število, njegov kvadrat in kub. Diagram poteka in programa v programski kodi Pascal in Pyton za Primer_6 kaže slika 164.

  5. Zapišimo diagram poteka in program za izračunavanje vsote kvadratov naravnih števil med 1 in x, pri čemer je x poljubno število, ki jo vnesemo prek tipkovnice!

  Rešitev - Primer_7: Tudi v tej nalogi se srečujemo s ponavljalnim stavkom: ponavljal se bo postopek kvadriranja in seštevanja teh vrednosti od števila 1 do izbranega x. Vsota (s) je v začetku nič, nato pa se po vsakem »prehodu skozi« ponavljalni stavek poveča za kvadrat vrednosti števca programske zanke (n). Razumljivo je, da je začetna vrednost števca 1, nato 2 itd., vse tja do izbranega števila x (končna vrednost števca). Diagram poteka in programa v programski kodi Pascal in Pyton za Primer_7 kaže slika 165.


Takšni so torej osnovni programski stavki, ki smo jih pregledali na hitro. Ob rešitvah nalog smo spoznali tudi osnovni pristop in značilnosti programiranja in značilnosti programskih  jezikov Pascal in Pyton. Vidimo določeno razliko v sintaksi obeh jezikov, pa tudi malce sodobnejši programerski pristop v novejšem jeziku Pyton. Seveda imamo še več pomembnih in uporabnih programskih stavkov (kot npr. za ponavljalni stavek oz. zanke: WHILE, FOR, DO, REPEAT itd.), ki jih kaže tistim, ki žele razviti sposobnosti programiranja podrobneje pregledati v ustrezni običajni ali e-literaturi; tudi v tem poglavju jih nekaj pod razdelkom »za boljše razumevanje in širitev znanja« podajamo.


Nekaj dodatnih nalog za tiste, ki želijo narediti druge korake v programiranje:

  1. Razložite prikazani del diagrama poteka na sliki 166 (Naloga 1). Kateri programski stavek je uporabljen v obeh primerih? Zapišite ju z uporabo izbranega programskega jezika.

  2. Razložite prikazani del diagrama poteka na sliki 166 (Naloga 2). Kateri programski stavek je uporabljen v obeh primerih? Zapišite ju z uporabo izbranega programskega jezika.

  3. Razložite prikazani del diagrama poteka na sliki 166 (Naloga 3). Kateri programski stavek je uporabljen v tem primeru? Zapišite ga z uporabo izbranega programskega jezika.

  4. Razložite skico prikazanih pogojnih stavkov na sliki 166 (Naloga 4). Zapišite ju z uporabo izbranega programskega jezika.

  5. Merjenje dolžine mize smo opravili 5-krat in dobili take izmere: 2.10 m, 2.08 m, 2.05 m, 2.00 m in 2.06 m. Sestavite diagram poteka in program v izbranem programskem jeziku, ki bo izračunal srednjo vrednost meritev.

  6. Pripravite diagram poteka in program v izbranem programskem jeziku, ki bo s pomočjo odločitve z zanko izrisal stolpiček zvezdic, kot ga prikazuje slika 166 (Naloga 6), in sicer v tehle variantah:

  • v enem programskem koraku lahko hkrati narišemo 4 zvezdice;
  • v enem programskem koraku lahko hkrati narišemo le eno zvezdico.

Ponovi enak problem oz. nalogo z uporabo ponavljalnega stavka.

  7. Zapišite diagram poteka in program v izbranem programskem jeziku za izračunavanje stranic pravokotnega trikotnika s pomočjo Pitagorovega izreka in sicer: na vprašanje po obeh katetah (a in b) računalnik izračuna vrednost hipotenuze (c).

  8. Zapišite diagram poteka in program v izbranem programskem jeziku za primer, ko želimo z računalnikom preveriti, ali podatki za obe kateti a in b ter hipotenuzo c resnično ustrezajo pravokotnemu trikotniku.

  9. Zapišite diagram poteka in program v izbranem programskem jeziku za primer, ko želimo, da računalnik »šteje« od 1 do 15 (na ekranu zapiše števke), in sicer:

  • z uporabo pogojnega stavka;
  • z uporabo ponavljalnega stavka.
Izpis naj bo:
  • v stolpcu,
  • v vrstici.
  10. Sestavite diagram poteka in program v izbranem programskem jeziku, ki je podoben kot v nalogi 9, le da želimo, da računalnik »šteje«:

 

a) od 1 do poljubno izbrane številke b;

b) od a do b, torej med poljubno izbranima številkama;

c) od b do a, torej »šteje« nazaj (npr.: 25,24,23,22...).

  11.Zapišite diagram poteka in program v izbranem programskem jeziki, ki bo opravil 10-kratni izpis vašega imena in priimka na:

  • zaslonu;
  • tiskalniku.

  12. Zapišite diagram poteka in program v izbranem programskem jeziku, ki  izračuna vsoto vseh naravnih števil, manjših od 100 in deljivih s 5.

  13. Dane so tri številke a, b in c. Napišite diagram poteka v izbranem programskem jeziku za določanje:

a) največje med njimi,

b) najmanjše med njimi;

c) ureditve vseh treh števil po velikosti, in sicer:
  • od največje do najmanjše in
  •   od najmanjše do največje.

  14. Sestavite diagram poteka in program v izbranem programskem jeziku za ugotavljanje, katera (in za koliko) je večja vsota prvih 1000 parnih naravnih števil ali vsota prvih 1000 neparnih naravnih števil.

  15. Mlajšemu bratu/sestrici ali sinu/hčerki želite pripraviti program, s katerim se bo učil poštevanke. Znanja nočete preverjati, želite mu le pomagati in to tako, da mu program izpiše tisto poštevanko med 1 in 10, ki jo želi utrjevati. Izpis poštevanke naj poteka do števila 10, izpis pa naj bo v stolpiču in s komentarji, kot prikazuje slika 166 (naloga 15). Program testirajte, nato pa ga shranite na disk in ključek.

  *16. Primer iz naloge 15 spremenite tako, da boste dobili program za preverjanje znanja iz poštevanke. Uporabnik izbere, katero poštevanko bo vadil, nato pa dobi 8 različnih nalog poštevanke izbranega števila. Za pravilen odgovor dobi pohvalo, za nepravilen pa opozorilo in ponovitev iste naloge. Program testirajte, nato pa ga shranite na disk in ključek.

  *17. Napišite diagram poteka in program s podobnimi kriteriji kot v nalogi 16  za tele računske operacije: 

  • seštevanje,  
  • odštevanje, 
  • množenje,
  • deljenje.

  Program testirajte, nato pa ga shranite na disk in ključek.

  *18. Z ukazom za prikaz točke na zaslonu in ponavljalnega stavka pripravite in preverite program za risanje:

  • ravne črte dolžine pol ekrana, 
  • dveh črt, ki se pravokotno sekata,
  • kvadrata,
  • trikotnika,
  • poljubnega lika, telesa ali predmeta.

  *19. Spoznajte nekaj sestavljenih grafičnih ukazov (npr. Line, Fill, Block, Circle...) in z njimi narišite slike, ki ste jih risali v nalogi 18!


3.5.5 Preizkušanje in vzdrževanje programa

Ko je program v izbranem programskem jeziku napisan in shranjen v računalnik, ga najprej poskusno pregledamo in hkrati popravimo glavne napake. Začetniki so seveda presenečeni zaradi številnih in nenavadnih napak, ki jih računalnik sporoči med prevajanjem, tolmačenjem ali izvajanjem programa. Obravnava napak v programu je za računalnik zapleten in zahteven postopek, v katerem žal ni mogoče predvideti vseh napak, ki jih zagreši programer. Tako lahko manjkajoči ali odvečni znak v programu povzroči, da računalnik sporoči napako, s katero najustrezneje opiše nastalo situacijo. Če je situacija taka, da računalnik ne najde pravega zapisa zanjo, javi neustrezno sporočilo ali prekine nadaljnji potek dela. Zato je že na začetku treba poskrbeti, da je program napisan pravopisno pravilno, saj ni tehtnega opravičila za manjkajoče vejice, podpičja, dvopičja in nepravilno napisane ključne besede programskega jezika.

Programske napake v osnovi delimo na:

  • pravopisne (sintaktične),
  • logične in
  • snovalske.

Pravopisne napake nastanejo zaradi slovnično nepravilnih zapisov ukazov, zato jih je še mogoče popraviti. Logične napake so že zahtevnejše, saj zaradi njih program ne deluje pravilno; so v bistvu takšne napake, ki jih z analizo še lahko popravimo (pojavijo se npr. prekoračitve v tabeli itd.). Snovalske napake so strateške. Te so najhujše, saj zahtevajo veliko premišljevanja in popravljanja (če npr. v zasnovi uporabimo nepravilen algoritem ali algoritem z napakami ali zgrešeno zasnovo programa). Pravopisne napake odkrivamo brez težav s pomočjo sporočil prevajalnika, logične s premišljevanjem in posebnimi programi za odpravljanje napak (razhroščevalnik -  ang. debugger). Pri snovalskih napakah pa je odpravljanje najtežje, saj je pravilna zasnova najpomembnejša in najzahtevnejša stopnja dela. Zato velja: Če napišemo program, ki je zgrešen v zasnovi, je najbolje, če začnemo delo z vsemi koraki programiranja znova!

Da bi bilo napak kar najmanj, se moramo (ne glede na to, kateri jezik bomo uporabili za zapis programa) naučiti slovničnih pravil; poznati moramo zgradbo in pomen stavkov. Za popoln opis jezika je torej potrebno dvoje:

  • opis zgradbe jezika (jezikovno pravilnost - sintaksa); vedeti moramo, kako so zgrajeni pravilni programi, to je, katera zaporedja znakov pomenijo smiseln program;
  • opis pomena (semantika), ki pove, kaj naj sintaktično pravilen program počne.

Semantiko jezika navadno opišemo z besedami, sintakso pa z besedami težko opisati, zato navadno uporabljamo grafični prikaz; to pomeni, da jo prikažemo v obliki t.i. pravopisnih oz. sintaktičnih diagramov (slika 167).

Ko so osnovne programske in pravopisne napake odpravljene, je najbolje, če program shranimo na ustrezen element zunanjega spomina (disk, zunanji disk, ključek, zgoščenko..). Tako dobimo prvo verzijo programa, katerega uporabnost je treba še preveriti. Nadaljnja stopnja programiranja je testiranje oziroma preverjanje pravilnosti in celovitosti rešitve določenega problema. Postopek testiranja navadno poteka tako, da v program vnašamo izmišljene podatke; seveda težavnost, zapletenost in različnost podatkov stopnjujemo. Na ta način ugotavljamo, ali so vrednosti, ki jih dobimo kot rezultat procesa, pravilne in predvsem logične. Zato ni odveč, če vnašamo za preskus programa tudi nelogične podatke. Testiranje programa je torej logično preverjanje pravilnosti programa, druge napake smo namreč že popravili v prejšnji stopnji. Dobro je, če program testira še kdo, ki ga sicer ni pripravljal.

    Na koncu je treba programsko dokumentacijo dodelati, opraviti poskusno dobo in poskrbeti za trajno hrambo originala programa. Program, ki je testiran, moramo še nekaj časa preskušati in ga s tem preverjati ob manjših in večjih količinah podatkov, pa tudi pri različnih uporabnikih.

Program nato shranimo na element zunanjega spomina in to vsaj v dveh verzijah; izvirni program pisan v izbranem jeziku, pa hranimo, saj ga bomo uporabljali za poznejše spremembe, dopolnitve, razširitve itd.

Dober in skrben programer zbrano dokumentacijo (idejno skico, algoritem, diagram poteka posameznih podprogramov in glavnega programa, zapis napak itd.) na koncu uredi, nato pa napiše še podrobna navodila za delo in uporabo programa, saj s tem zelo pomaga bodočim uporabnikom. Ni odveč, če pripravi tudi demonstracijski program s karakterističnimi pozitivnimi in negativnimi primeri uporabe.

Ikona poučevalne enote Album slik
SW45.jpg<>Slika 146. Opredelitev in razčlenitev problema SW46.jpg<>Slika 147. SW51.jpg<>Slika 148. Primer različnih zapisov algoritma SW47.jpg<>Slika 149. Grafični zapis algoritma in osnovni  bloki za pripravo diagrama poteka SW48.jpg<>Slika 150. Rešitve primerov 1, 2 in 3.
SW49.jpg<>Slika 151. Rešitev naloge 2. SW50.jpg<>Slika 152. Rešitev naloge 3. SW53.jpg<>Slika 153. Primer nižjih in višjih prog. jezikov SW88.jpg<>Slika 154. Prevajanje in tolmačenje SW54.jpg<>Slika 155. Primer HTML kode in rezultata
SW52.jpg<>Slika 156. Generacije programskih jezikov SW69.jpg<>Slika 157. Zapis programa v programskem jeziku Pascal in programskem jeziku Pyton SW70.jpg<>Slika 158. Primer programa za izračun kvadrata in kuba podanega števila SW71.jpg<>Slika 159. Primer programske zanke SW72.jpg<>Slika 160.
SW73.jpg<>Slika 161. SW75.jpg<>Slika 162. SW74.jpg<>Slika 163. SW76.jpg<>Slika 164. SW77.jpg<>Slika 165.
SW78.jpg<>Slika 166. SW89.jpg<>Slika 167.









Za boljše razumevanje in širitev znanja!
Ikona poučevalne enote POJMI, KI SI JIH VELJA ZAPOMNITI

  • program,
  • programiranje,
  • strukturirano programiranje,
  • podprogram, modul,
  • postopki,
  • algoritem,
  • podatki,
  • spremenljivka,
  • tabela rezultatov ali preizkusna tabela,
  • blok diagram ali diagram poteka,
  • začetni in končni blok,
  • prireditveni blok,
  • vhodno-izhodni blok,
  • odločitveni blok,
  • blok cikličnih ponavljanj,
  • nižji - višji programski jezik,
  • strojni jezik,
  • simbolični programski jezik,
  • zbirni jezik,
  • zbirnik (assembler),
  • strukturirani in nestrukturirani programski jeziki,
  • postopkovni in deklarativni programski jeziki,
  • proceduralni in modularni programski jeziki,
  • prevajanje in tolmačenje,
  • programski jezik,
  • generacije programskih jezikov,
  • kodiranje programa,
  • prireditveni stavek,
  • odločitveni - pogojni stavek,
  • zanka,
  • pravopisne, logične in snovalske napake,
  • razhroščevalnik,
  • sintaktični diagram,
  • shranjevanje in oprema programa,
  • programska dokumentacija.


RAZMISLI - ODGOVORI - OPRAVI
  1. Kako razumete pojma programiranje in program? Definirajte posamezna pojma.
  2. Programiranje obsega več stopenj. Naštejte in kratko opišite posamezne.
  3. Kaj v pripravi programa pomeni opredelitev naloge oz. problema? Podajte primer.
  4. Kaj je značilnost strukturiranega programiranja?
  5. Zapišite primer iz vsakdanjega življenja, v katerem boste lahko prikazali značilnost strukturiranega programiranja, in pojmov, kot sta: podprogram in postopek.
  6. Kaj je algoritem?
  7. Kaj pomeni, da mora biti algoritem nedvoumen, ustavljiv in zapisan z elementarnimi navodili?
  8. Oglejte si enostavnejši program na računalniku in skušajte prikazati njegovo strukturo. Ali znate zapisati tudi njegov algoritem z besednim opisom?
  9. Kakšna je razlika med spremenljivko in podatkom?
  10. *Zapišite algoritem z besednim opisom in diagram poteka za pripravo programa, s katerim želite poljubno izbranemu številu zapisati predhodno in naslednje število (npr. izbrali ste npr. število 5:  predhodnik je 4, naslednik pa 6).
  11. *Zapišite algoritem z besednim opisom ali diagramom poteka za primer, ki bi vam pomagal izračunati srednjo vrednost ocen, ki jih imate trenutno v indeksu.
  12. *V datoteki računalnika se nahaja N imen varčevalcev neke banke in višina njihove hranilne vsote. Zapišite algoritem, ki bo izpisal poročilo s takim vrstnim redom podatkov: zaporedno število, ime in priimek, hranilna vsota, obresti in skupna vrednost hranilne vloge. Obrestna mera je vhodni podatek.
  13. *Zapišite algoritem za rešitev problema, ki bo preveril in izpisal, ali je poljubno število N parno ali neparno.
  14. *Pripravite algoritem za pripravo programa, ki naj določi in izpiše vsa naravna števila od 1 do 3000, ki so deljiva s 3.
  15. *Zapišite algoritem, ki bo omogočil zaokrožitev več mestnega decimalnega števila na dve decimalni mesti.
  16. *Pripravite algoritem, s katerim izračunate porabo goriva osebnega avtomobila z naslednjimi vhodnimi podatki: datum polnjenja, količina goriva in število prevoženih kilometrov. Izračun povprečne porabe goriva želimo dobiti po vsakih 10 polnjenjih in na koncu vsakega leta.
  17. *Joule je enota za merjenje energije (tudi za energijo, ki jo vsebuje hrana). Včasih se je za to uporabljala enota kalorija (cal). Pripravite algoritem, ki nam bo preračunaval kalorije v Joule in obratno (1 cal = 4,2 Joula).
  18. *Pripravite algoritem, ki prebere celo pozitivno število (do 5000) in ga izpiše z rimskimi številkami.
  19. *Smučarske skoke ocenjuje 5 sodnikov z ocenami od 1 do 20. V skupni oceni se največja in najmanjša ne upoštevata, iz ostalih pa se izračuna povprečna vrednost. Pripravite algoritem, ki prebere vse ocene in izpiše skupno oceno skoka.
  20. *Leta 1000 je bila višina kapnika 3mm, nato pa se je vsakih 10 let povečevala za 6mm. Sestavite algoritem, s katerim lahko izračunamo, kolikšna bo višina kapnika leta 2025 in katerega leta bo dosegel višino 1,5m.
  21. Opišite razliko med nižjim in višjim programskim jezikom. Podajte primere posameznih.
  22. Katere vrste višjih programskih jezikov ločimo glede na strukturo prevedenega programa?
  23. Katere vrste višjih programskih jezikov ločimo glede na vsebino kodiranja?
  24. Katere vrste višjih programskih jezikov ločimo glede na to, kaj je osnovni element programa?
  25. Kakšna je razlika med strojnim in simboličnim programskim jezikom? V čem pa je enakost?
  26. Kako razumete pojem: strojni jezik?
  27. Opišite razliko med tolmačenjem in prevajanjem. Podajte primer programskega jezika za posamezna!
  28. Naštejte pomembne razlike med postopkovnimi in nepostopkovnimi jeziki.
  29. Zakaj imenujemo nepostopkovne jezike tudi jezike umetne inteligence?
  30. Naštejte in opredelite programske jezike s spletno orientacijo.
  31. Kaj predstavlja kodiranje programa?
  32. **V izbranem programskem jeziku pripravite programe za algoritme v nalogah 10 do 20!
  33. Kaj spada pod preizkušanje in vzdrževanje programa?
  34. Programske napake v osnovi delimo na pravopisne (sintaktične), logične in snovalske. V čem se razlikujejo?