890 likes | 1.32k Views
Programiranje. Neja Zupan. Uvod 2. Skripta : Srečko Zorman: Programiranje, gradivo za interno uporabo. Knjige (na primer): Donald Knuth : Umetnost računalniškega programiranja ( The Art of Computer Programming )
E N D
Programiranje Neja Zupan
Uvod 2 Skripta: • Srečko Zorman: Programiranje, gradivo za interno uporabo. Knjige (na primer): • Donald Knuth: Umetnost računalniškega programiranja (The Art of Computer Programming ) • Viljem Žumer, Janez Brest: Uvod v programiranje in programski jezik C++, Maribor, FERI 2004. • Martin Juvan, Matjaž Zaveršnik: Vaje iz programiranja: C, C++ in Mathematica, Ljubljana, Študentska založba, 2000. • http://marcel.uni-mb.si/janez/cpp/ • http://www.islovar.org/iskanje_enostavno.asp
Namen • Spoznati procese v izgradnji programske opreme • Spoznati osnovne sestavine programiranja • Spoznati osnove dela s podatki • Spoznati elemente algoritmov za pisanje programov
Cilj Slušatelj naj bi bil sposoben: Kodirati postopke za obdelavo podatkov med uporabnikom, notranjim in zunanjim pomnilnikom
Vsebina • Uvod (Osnovne in značilnosti programiranja, objektno usmerjen pristop, …) • Osnove (gradniki, spremenljivke, konstante, podatkovni tipi, …) • Osnovne krmilne strukture (pogojni in ponavljalni stavek, podprogrami) • Kazalci in funkcije • Tabele • Dinamični pomnilnik
Znanost in umetnost Snovanje programov vsebuje elemente: znanosti, umetnosti, matematike in tehnike.
Programiranje je dejavnost, katere cilj je ustvarjanje novih računalniških programov ali njihovih sestavnih delov na temelju določenih pravil.
Vrste programiranja • Proceduralno programiranje • Potek izvajanja je v naprej določen • START ... KONEC • Bližje računalniškemu jeziku • Dogodkovno - objektno programiranje • Potek programa je odvisen od dogodkov npr.: • Na kateri gumbek klikne uporabnik • Bližje človeškemu razmišljanju
Računalniški programi Računalniški programi so napisani v izvorni kodi določenega programskega jezika, pri delu pa si programer lahko pomaga z ustreznimi razvojnimi orodji zanj.
Programski jezik • skupek pravil, podatkovnih struktur in vmesnikov, ki programerju služijo kot orodje za izdelavo programa. • zbirka ukazov, ki jih razume računalnik, s katerimi mu določimo katera opravila naj opravi in po katerem vrstnem redu
Programski jezik Izbira programskega jezika odvisna od: • Vrsta problema • Naše znanje programskih jezikov • Delovno okolje • Karakteristike računalnika • Finančne omejitve
Programski jeziki • Strojni jezik • Zaporedje cifer 1 in 0, edino kar rač. razume • Odvisen od procesorja • Počasno in nepregledno programiranje • Zbirni jezik (assembler) • 1 in 0 zamenjajo črkovne kode, lažje si zapomnimo • Samo za časovno kritične elemente (rač. igre) • Višji programski jeziki: Pascal, C++, Basic,… • Prenosljivost – neodvisnost od procesorja • Prevajalniki prevajajo kodo v zbirni jezik • Jeziki 4. Generacije: SQL, … • Neprilagodljivi in potratni • Za hitro reševanje ozkih problemov več dela za človeka večja pomoč računalnika
Programski jezik Programski jezikise uporabljajo zato, ker sta človekova in računalnikova »govorica« tako različni, da je pisati programe v jeziku računalnika (strojni kodi) nepregledno in nasploh mukotrpno.
Računalnik razume le strojni jezik Obstajata dva načina pretvorbe kode: • Prevajanje opravi prevajalnik (compiler) • Prevede preden program poženemo • Prevedemo 1x, poženemo večkrat • Za različne platforme prevedemo na vsaki (razen Jave) • Tolmačenje opravi tolmač (interpreter) • Postopno korak za korakom tolmači vrstico izvorne kode med izvajanjem • Lažje odkrivanje napak, npr. v katerem koraku • Počasnejše izvajanje programa
Zbirni jezik • Zbirni jezik (assembler) (angleško assemble - zbirati) je programski jezik, ki je napisan z mnemoniki. • Mnemoniki predstavljajo kodo v strojnem zapisu (ničle in enice).
Zbirni jezik • povezano s strojno opremo • programi neprenosljivi na drugačno strojno opremo • zavzamejo manj prostora v pomnilniku • izvajajo se hitreje
C++ • konec ’70ih: Bjarne Stroustrup (takrat inženir pri Bell Labs) • razširitev zelo razširjenega programskega jezika C • dodatki iz Simula67 ter Algol68 • prvotno se je jezik imenoval »C with Classes« (C z razredi) • ime C++ se prvič pojavi v letu 1983 • v drugi polovici osemdesetih let C++ doživi korenite spremembe
Zgodovina imena »C++« • Ime jezika pripisujejo Ricku Mascittiju in so ga prvič uporabili decembra 1983. • Kombinacijo C+ je tedaj že tudi zasedel drug nesoroden jezik. Pripono ++ je po Stroustrupovih besedah dal zaradi evolucijske/revolucionarne narave razširitve C. C++ je tudi pogosteje kot npr. raba ++C. Ker C++ v bistvu ni spremenil C-ja, bi bilo še pravilnejše ime »C+1«. • Ko so leta 1992 vprašali Mascittija zakaj je dal takšno ime, je navedel, da je bilo ime le neuradno in da si ni nikoli mislil da bo postalo tudi uradno ime.
C++ standardizacija • Leta 1989 pod okriljem ANSI (American National Standards Institution) organizacije ustanovljen oddelek za standardizacijo programskega jezika C++ (J16) • zatem ISO (International Standardization Organization) oddelek za mednarodno standardizacijo • Specifikacije standarda so tudi zamrznili za naslednjih pet let, dovoljene spremembe so le popravki morebitnih napak • Leta 1998 so sprejeli tudi ISO standard za jezik C++ kot ISO/IEC 14882:1998. Trenutna različica standarda je ISO/IEC 14882:2003. • Razvijajo tudi novo različico z neuradnim imenom C++0x.
C++ • C++ (C plus plus) [ce plus plus] je splošnonamenski programski jezik. • V C++ so podatkovni tipi statični, zapis kode je prost. • Jezik podpira: • večparadigmatično proceduralno programiranje • podatkovno abstrakcijo • objektno usmerjeno • generično programiranje
Proceduralno programiranje • uporablja procedure • zaporedje programskih stavkov s svojim imenom • lahko izvedena večkrat med delovanjem programa • zaključen del programa, ki ga lahko izvajanje naloge celotnega programa potrebuje večkrat
Objektno orientirano programiranje • lažja in bolj neposredno predstavitev realnega problema v programu z objekti • svoje lastnosti (podatkovni del programiranja) • svoje obnašanje (funkcionalni del programiranja)
OOP: objektno orientirano programiranje • Razred – abstrakna predstavitev – vsebuje definicije lastnosti in metod • Objekt– konkretna instanca (primerek) razreda – vsebuje vrednosti • Lastnost(property) – označuje neko lastnost objekta, npr. velikost črk • Metoda(methode) – funkcija, ki prebere ali spremeni neko lastnost objekta • Pri tiskanju bi bila matrica razred, vsak tiskan list pa svoj objekt tega razreda
OOP • Gumbek na ekranu je svoj objekt • Objekti izhajajo iz razredov • Vsi objekti, ki izhajajo iz istega razreda, imajo skupne lastnosti in metode: • Napis • Pozicija na ekranu • Lahko je (ne)aktiven • Zazna, ko ga uporabnik pritisne • ... • Objektom uporabniškega vmesnika pravimo tudi gradniki uporabniškega vmesnika
OOP • Lastnosti razreda so zavarovane – do njih lahko dostopamo (beremo, spremeninjamo) le preko metod (object-based programming) • Pomemben element so dogodki (events), npr: • Ko uporabnik klikne na gumbek • Ko uporabnik premakne miško • Ko uporabnik spremeni besedilo v vnosnem polju
OOP • Vsak razred lahko sprejme sporočila o določenih dogodkih (event-driven programming, event procedure) • Program dogodke zazna in takrat lahko program izvede del programske kode imenovan
Primer C++ #include <iostream> int main() { std::cout << "Pozdravljen svet!" << std::endl; return 0; // ni potrebno po ISO standardu }
Zakaj C++ • objektno orientirano programiranje • prenosljivost • zgoščenost, jedrnatost • modularno programiranje • združljivost s C • hitrost
Povzetek • Programiranje: pisanje (oblikovanje, ...) zaporedja ukazov • Programski jezik: skupek pravil, zbirka ukazov • Program: Natančen opis zaporednih korakov (ukazov, akcij, ...), ki naj jih izvede računalnik • Prevajalnik: računalniški program, ki prevede izvorno kodo napisano v višjem programskem jeziku v strojni jezik • Aplikativni programi (aplikacije, uporabniške rešitve)
Algoritem • navodilo, s katerim rešujemo določen problem • seznam korakov, ki nas pripeljejo do rešitve problema • primer algoritma iz vsakdanjega življenja je kuharski recept • zaporedje operacij, ki nas v končnem številu korakov vodijo do rešitve problema
X ZAČNI ZAČNI VSOTA =A + B PREBERIŠTEVILO A IZPIŠIVSOTA PREBERIŠTEVILO B KONEC KONEC X Značilnosti algoritma • (lahko) ima podatke, • (običajno) vrne rezultat, • je natančno določen, • je končen, • je izvedljiv. • zajemanje podatkov • obdelava podatkov • izpis rezultatov
Kategorije algoritmov • Obstajajo različne kategorije algoritmov, bolje rečeno strategij, ki jih uporabljamo za reševanje problemov. Poznane strategije so: • deli in vladaj • dinamično programiranje • požrešna metoda • linearno programiranje • verjetnostni algoritmi • Pri analizi algoritma nas običajno zanimata njegova prostorska in časovna zahtevnost.
Deli in vladaj • Deli in vladaj (angleško Divide and Conquer) predstavlja strategijo delitve problema na manjše probleme, ki so prvotnemu problemu enaki (enakega tipa). Tak postopek ponavljamo, dokler nismo sposobni rešiti podproblemov. • Strategija temelji na rekurziji.
Dinamično programiranje • sistematično pregledovanje možnih poti v reševanju problema in zato tudi pride do optimalne rešitve • potencialne rešitve na tekočem koraku določamo na osnovi potencialnih rešitev iz prejšnjega koraka • Poznamo dva pristopa za reševanje: • pristop naprej • pristop nazaj
Požrešna metoda • lažji del prepustimo računalniku, težji del pa izvedemo sami • neko dejanje privede na preprost način do cilja • Princip delovanja: iščemo optimum funkcije (minimum ali maksimum), tako da sproti gradimo rešitev. • Graditev rešitev: dodajamo najboljše dopustne dele rešitev.
Zapis algoritma Algoritem lahko zapišemo na več načinov: • v naravnem jeziku • hierarhični diagram • s pomočjo odločitvene tabele • s pomočjo psevdokode • grafično s pomočjo diagrama poteka • programskem jeziku
Hierarhični strukturni (drevesni) diagram Korake za strukturo programa dobimo iz hierarhične strukture, npr. že obstoječe, kjer spreminjamo predvsem spodnji del MAIN INICIALIZACIJA PROCES ZAKLJUČEK Deklaracijespremenljivk Izpis glaveporočila Preberi enzapis Računaj Seštejvsote Izpis vrsticetabele Izračunpovprečja Izpis skupnih vsot in povrp. Izračunbruto Izračundavka Izračunneto
C A D B E Odločitvena tabela • Delno zamenja oz. dopolnjuje diagram poteka • Razdeljena je na 5 enot: • A – vprašanja, ki jih lahkoodgovorimo z True ali False, ter različnost odgovorov vpliva na odločitev • B – možne odločitve • C, D in E – stolpci, kjer je vsak stolpec svoje pravilo
Pravila C 1 2 3 4 Stranka ima račun A D Na računu je dovolj denarja Vodstvo odobri Izvedi transakcijo B E Zavrni transakcijo Odločitvena tabela - primer • Pravila: • Če ima stranka pri nas odprt račun na katerem je dovolj denarja, izvedi transakcijo • Če ima stranka pri nas odprt račun s premalo denarja izvedi transakcijo le, če se strinja vodstvo • V vseh drugih primerih zavrni transakcijo
Strukturirano programiranje Programiramo samo z naslednjimi strukturami: zaporedje če-potem-drugače ponavljaj-dokler True False False Rutina 1 Pogoj Pogoj True Rutina 2 Rutina 1 Rutina 2 Rutina 1
Psevdokoda • Opisujemo opravila delno s programskimi ukazi: • DO WHILE imamo še zapise v datoteki IF zaloga je manjša od 10% načrtovane THEN izpolni naročilo pošlji naročilo po e-pošti ENDIF zapiši logLOOP
* Glavni program Prikaži naslove Za i = 1 do 100 Vnesi podatke If (podatek ni numeričen) If (vsaj en podatek) Izračun Prikaži rezultat Else Prikaži “Ni podatkov” Akcijski diagram • Podbno psevdokodi • Grafično označimo: • zanke (debelo) • pogojne stavke (tanke) • prekinitev zanke (puščica) • Kodo sestavljata: • * (naslov) • (akcija)
Dogodkovni diagram • Opisujejo opravila, ki sledijo npr. enemenu dogodku (za vse dogodke): Uporabnik pritisnegumbek za konec Izpiši,da zaključuješ Zapiši podatkev datoteko Sprazni podatkev pomnilniku Izpiši “Konec”
Diagram poteka • Grafično opisuje pravila po katerih pridemo do rešitve • Diagram poteka je eden izmed načinov zapisa algoritma