Professional Documents
Culture Documents
Neja Zupan
Uvod
Skripta: Sreko Zorman: Programiranje, gradivo za interno uporabo. Knjige (na primer):
Donald Knuth: Umetnost raunalnikega programiranja (The Art of Computer Programming ) Viljem umer, Janez Brest: Uvod v programiranje in programski jezik C++, Maribor, FERI 2004. Martin Juvan, Matja Zavernik: Vaje iz programiranja: C, C++ in Mathematica, Ljubljana, tudentska zaloba, 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
Sluatelj naj bi bil sposoben:
Kodirati postopke za obdelavo podatkov med uporabnikom, notranjim in zunanjim pomnilnikom
Vsebina
1. Uvod (Osnovne in znailnosti programiranja, objektno usmerjen pristop, ) 2. Osnove (gradniki, spremenljivke, konstante, podatkovni tipi, ) 3. Osnovne krmilne strukture (pogojni in ponavljalni stavek, podprogrami) 4. Kazalci in funkcije 5. Tabele 6. Dinamini pomnilnik
Znanost in umetnost
Snovanje programov vsebuje elemente:
znanosti, umetnosti, matematike in tehnike.
Programiranje
je dejavnost, katere cilj je ustvarjanje novih raunalnikih programov ali njihovih sestavnih delov na temelju doloenih pravil.
Vrste programiranja
Proceduralno programiranje
Potek izvajanja je v naprej doloen START ... KONEC Blije raunalnikemu jeziku
Raunalniki programi
Raunalniki programi so napisani v izvorni kodi doloenega programskega jezika, pri delu pa si programer lahko pomaga z ustreznimi razvojnimi orodji zanj.
Programski jezik
skupek pravil, podatkovnih struktur in vmesnikov, ki programerju sluijo kot orodje za izdelavo programa. zbirka ukazov, ki jih razume raunalnik, s katerimi mu doloimo katera opravila naj opravi in po katerem vrstnem redu
Programski jezik
Izbira programskega jezika odvisna od:
Vrsta problema Nae znanje programskih jezikov Delovno okolje Karakteristike raunalnika Finanne omejitve
Programski jeziki
Strojni jezik Zaporedje cifer 1 in 0, edino kar ra. razume Odvisen od procesorja Poasno in nepregledno programiranje Zbirni jezik (assembler) 1 in 0 zamenjajo rkovne kode, laje si zapomnimo Samo za asovno kritine elemente (ra. igre) Viji programski jeziki: Pascal, C++, Basic, Prenosljivost neodvisnost od procesorja Prevajalniki prevajajo kodo v zbirni jezik Jeziki 4. Generacije: SQL, Neprilagodljivi in potratni Za hitro reevanje ozkih problemov
ve dela za loveka veja pomo raunalnika
Programski jezik
Programski jeziki se uporabljajo zato, ker sta lovekova in raunalnikova govorica tako razlini, da je pisati programe v jeziku raunalnika (strojni kodi) nepregledno in nasploh mukotrpno.
Zbirni jezik
Zbirni jezik (assembler) (angleko assemble - zbirati) je programski jezik, ki je napisan z mnemoniki. Mnemoniki predstavljajo kodo v strojnem zapisu (nile in enice).
Zbirni jezik
povezano s strojno opremo programi neprenosljivi na drugano strojno opremo zavzamejo manj prostora v pomnilniku izvajajo se hitreje
C++
konec 70ih: Bjarne Stroustrup (takrat inenir pri Bell Labs) raziritev zelo razirjenega 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++ doivi korenite spremembe
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 razliica standarda je ISO/IEC 14882:2003. Razvijajo tudi novo razliico z neuradnim imenom C++0x.
C++
C++ (C plus plus) [ce plus plus] je splononamenski programski jezik. V C++ so podatkovni tipi statini, zapis kode je prost. Jezik podpira: veparadigmatino proceduralno programiranje podatkovno abstrakcijo objektno usmerjeno generino programiranje
Proceduralno programiranje
uporablja procedure zaporedje programskih stavkov s svojim imenom lahko izvedena vekrat med delovanjem programa zakljuen del programa, ki ga lahko izvajanje naloge celotnega programa potrebuje vekrat
Abstrakcija podatkov
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 ...
OOP
Lastnosti razreda so zavarovane do njih lahko dostopamo (beremo, spremeninjamo) le preko metod
(object-based programming)
OOP
Vsak razred lahko sprejme sporoila o doloenih 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 zgoenost, jedrnatost modularno programiranje zdruljivost s C hitrost
Povzetek
Programiranje: pisanje (oblikovanje, ...) zaporedja ukazov
Programski jezik: skupek pravil, zbirka ukazov Program: Natanen opis zaporednih korakov (ukazov, akcij, ...), ki naj jih izvede raunalnik Prevajalnik: raunalniki program, ki prevede izvorno kodo napisano v vijem programskem jeziku v strojni jezik Aplikativni programi (aplikacije, uporabnike reitve)
Algoritem
navodilo, s katerim reujemo doloen problem seznam korakov, ki nas pripeljejo do reitve problema primer algoritma iz vsakdanjega ivljenja je kuharski recept zaporedje operacij, ki nas v konnem tevilu korakov vodijo do reitve problema
Znailnosti algoritma
(lahko) ima podatke, 1. (obiajno) vrne rezultat, 2. 3. je natanno doloen, ZANI je konen, PREBERI je izvedljiv. TEVILO A
PREBERI TEVILO B
X
VSOTA = A+B
IZPII VSOTA
KONEC
Kategorije algoritmov
Obstajajo razline kategorije algoritmov, bolje reeno strategij, ki jih uporabljamo za reevanje problemov. Poznane strategije so:
deli in vladaj dinamino programiranje porena metoda linearno programiranje verjetnostni algoritmi
Pri analizi algoritma nas obiajno zanimata njegova prostorska in asovna zahtevnost.
Deli in vladaj
Deli in vladaj (angleko Divide and Conquer) predstavlja strategijo delitve problema na manje probleme, ki so prvotnemu problemu enaki (enakega tipa). Tak postopek ponavljamo, dokler nismo sposobni reiti podproblemov. Strategija temelji na rekurziji.
Deli in vladaj
procedure DeliInVladaj(a, dno, vrh, reitev) // a[dno], a[dno+1], ... , a[vrh]; dno>=1 so podatki begin if problem majhen (dno, vrh) then resi (a, dno, vrh, reitev) else begin // problem ni majhen, potrebna delitev s := deli(dno,vrh) // index delitve, razdeli na 2 podproblema DeliInVladaj(a, dno, s, reitev) // rei levi podproblem DeliInVladaj(a, s+1, vrh, reitev) // rei desni podproblem Zdrui(dno, s, vrh, reitev) // zdrui reitve posameznega podproblema end end
Dinamino programiranje
sistematino pregledovanje monih poti v reevanju problema in zato tudi pride do optimalne reitve potencialne reitve na tekoem koraku doloamo na osnovi potencialnih reitev iz prejnjega koraka Poznamo dva pristopa za reevanje:
pristop naprej pristop nazaj
Porena metoda
laji del prepustimo raunalniku, teji del pa izvedemo sami neko dejanje privede na preprost nain do cilja Princip delovanja: iemo optimum funkcije (minimum ali maksimum), tako da sproti gradimo reitev. Graditev reitev: dodajamo najbolje dopustne dele reitev.
Zapis algoritma
Algoritem lahko zapiemo na ve nainov: v naravnem jeziku hierarhini diagram s pomojo odloitvene tabele s pomojo psevdokode grafino s pomojo diagrama poteka programskem jeziku
PROCES
ZAKLJUEK
Preberi en Setej Izpis vrstice Izraun Izpis skupnih Raunaj zapis vsote tabele povpreja vsot in povrp.
Izraun bruto
Izraun davka
Izraun neto
Odloitvena tabela
Delno zamenja oz. dopolnjuje diagram poteka Razdeljena je na 5 enot:
A vpraanja, ki jih lahko odgovorimo z True ali False, ter razlinost odgovorov vpliva na odloitev B mone odloitve C, D in E stolpci, kjer je vsak stolpec svoje pravilo
C A D
Zavrni transakcijo
Strukturirano programiranje
Programiramo samo z naslednjimi strukturami:
zaporedje
Rutina 1 Rutina 2 e-potem-drugae ponavljaj-dokler Pogoj True Rutina 1
True
Rutina 1
Pogoj
False
Rutina 2
False
Strukturirano programiranje
Psevdokoda
Opisujemo opravila delno s programskimi ukazi:
DO WHILE imamo e zapise v datoteki IF zaloga je manja od 10% nartovane THEN izpolni naroilo polji naroilo po e-poti ENDIF zapii log LOOP
Akcijski diagram
Podbno psevdokodi Grafino oznaimo:
zanke (debelo) pogojne stavke (tanke) prekinitev zanke (puica)
* Glavni program Prikai naslove Za i = 1 do 100 Vnesi podatke If (podatek ni numerien) If (vsaj en podatek) Izraun Prikai rezultat Else Prikai Ni podatkov
Kodo sestavljata:
* (naslov) (akcija)
Dogodkovni diagram
Opisujejo opravila, ki sledijo npr. enemenu dogodku (za vse dogodke):
Uporabnik pritisne gumbek za konec Izpii, da zakljuuje Zapii podatke v datoteko Sprazni podatke v pomnilniku Izpii Konec
Dogodkovni diagram
Diagram poteka
Grafino opisuje pravila po katerih pridemo do reitve Diagram poteka je eden izmed nainov zapisa algoritma
Osnovni gradniki
start block
izpisovalni blok bralni blok
Osnovni gradniki
prireditveni blok
klic podprograma odloitveni blok
a=0
funkcija
odloitev
Osnovni gradniki
blok za shranjevanje podatkov
pot konni blok
konec
Osnovni gradniki
Naloge
Nalogi za ogrevanje: Nariite diagram poteka za popoldanske aktivnosti. Sestavi diagram poteka, ki izrauna ploino trikotnika z dano osnovnico in viino. Sestavi diagram poteka, ki izrauna ploino trikotnika iz treh stranic s pomojo Heronove formule.
Naloge
Naloga 1 Sestavi diagram poteka, ki izrauna absolutno vrednost danega tevila. Naloga 2 Sestavi diagram poteka, ki izbere veje od dveh tevil. Naloga 3 Sestavi diagram poteka, ki vpie 10 tevil in jih seteje.
Povzetek
Algoritem: seznam korakov, ki nas pripeljejo do reitve problema
Kategorije algoritmov: strategije za reevanje problemov Naini zapisa algoritma:
v naravnem jeziku hierarhini diagram s pomojo odloitvene tabele s pomojo psevdokode grafino s pomojo diagrama poteka programskem jeziku
1 2 3 4
LEGENDA dokumentacija
Dokumentacija za konnega uporabnika Vzdrevanje
5
6
nae delo
7
1. Analiza problema
Precizno definiramo problem oz. podroje, ki ga pokriva aplikacija, napiemo programske specifikacije: opis vhodov, obdelave, izhodov in uporabnikih vmesnikov
2. Zasnova programa
izdelaj podrobno logiko programov z uporabo orodij kot so akcijski diagrami, psevdokoda, diagrami strukture objektov, dogodkovni diagrami, ..in razleni funkcije programa v module, izdelaj algoritme za obdelavo podatkov, preveri algoritme
Problem razdelimo na manje podprobleme, dokler ne pridemo do problemov, ki jih znamo kodirati Poiemo e napisano programsko kodo za posamezne korake oz. podprobleme Posamezne korake komentiramo v kodi, kar nam olaja nadaljnje delo
Posamezne korake zapiemo v izbranem programskem jeziku Teavnost dela je odvisna predvsem od dodelanosti prejnje stopnje in sposobnosti programerja Teimo k im veji preglednosti, enostavnim proceduram (posamezni logino loeni deli kode)
5 Izvajanje, testiranje
Testiranje program in sprotno odpravljanje napak Pri testiranju je potrebno vnaati logine (raznolikost testnih podatkov) in mejne vrednosti (npr. max. tevilo priakovanih podatkov...) Program lahko javi, da so mejne vrednosti preseene, ne sme pa prenehati delovati se odzivati
5 Izvajanje, testiranje
Zagotoviti moramo delovanje programa v skladu s cilji (hitrost, ...) in skladno popraviti kodo Testirajo naj e izkueni programerji, ki niso sodelovali pri programiranju in uporabniki
5. Dokumentiranje aplikacije
Preveri in popravi in integriraj interno dokumentacijo, izdelaj uporabnikovo dokumentacijo
6. Vzdrevanje
Omogoi usposabljanje in podporo konnim uporabnikom; popravljaj napake, ki se pokaejo med uporabo aplikacije, prilagaja program spremenjenim oz. novim zahtevam
KODIRANJE
C++
Vstopna toka
komentar
// Moj Program // verzija 0.0.1 /* OPIS: Kaj e ponemo? Piemo komentarje, ki se lahko raztezajo ez ve vrstic. */ /* 20.2.2022 */ // Naredil sem to!
Vstopna toka
funkcija main () struktura programa
// prvi program izpis pozdrava #include <iostream.h> int main () { cout << Pozdrav iz C++a!; return 0; }
Vstopna toka
deklaracija in definicija
/* */ // deklaracija char a; int b; // deklaracija ter definicija, uporaba preznaka char c = 10; int d = +10; // prvi program izpis pozdrava char e = -10; #include <iostream.h> int f = +10; int main () { cout << Pozdrav iz C++a!; return 0; } Primeri deklaracij ter definicij celotevilnih spremenljivk.
Podatki
podatkovni tipi spremenljivke konstante inicializacija doseg spremenljivk
ARITMETINI
LOGINI
ZNAKOVNI
CELOTEVILNI
REALNI BOOL
CHAR
INT
FLOAT
DOUBLE
Podatkovni tipi
podatkovni tip tevilo zlogov short int long char float double long double bool 2zloga (16 bitov) 2 zloga ali 4 zlogi 4 zlogi 1 zlog 4 zlogi 8 zlogov 10 zlogov 1 bit obseg -32768...32767 (predznaena) (nepredznaena) 0...65355
-2147483648...2147483648 (predznaena) 0...4294967295 (nepredznaena) -128...127 (predznaena) 0...255 (nepredznaena) 7 mest 15 mest 19 mest true ali false
Cela tevila
Naravna, cela tevila (integer) sestavljajo tiri podskupine: short je sestavljen iz dveh bajtov, int iz 4 bajtov, long pa omogoa uporabo tevil, ki niso veja od osmih bajtov.
Cela tevila
Cela tevila lahko zapisujemo v treh tevilnih sistemih: Najpogosteje jih zapiemo v desetikem sistemu. e jih elimo v osmikem sistemu, uporabimo le tevilke od O do 7, pred tako tevilko pa moramo vedno zapisati tevilko 0, npr.011 (decimalno 9) Za pisanje estnajstikih tevil lahko uporabimo tevilke od 0 do 9 in rke od A do F. Pred estnajstiko tevilo moramo zapisati simbola 0x ali 0X. tevilo 11 bi lahko zapisali v obliki 0xB.
Realna tevila
Realna tevila so sestavljena iz celega tevila in decimalne vrednosti, ki ju loimo z decimalno piko. e elimo, jih lahko zapiemo v eksponenti obliki, z znakom e ali E, npr.12.16+E20. Realna tevila sestavljata dve podskupini, podatkovni tip z enojno (float) ali z dvojno natannostjo (double). Prvi podatkovni tip zasede 4 bajte raunalnikovega pomnilnika, drugi pa 8.
Znaki
Spremenljivko lahko predstavlja en sam znak (char). Znak zapiemo med dva enojna narekovaja, npr. 'P'. S simbolom \ lahko prikaemo tudi posebne, ubene (escape) znake, ki jih ne najdemo na tipkovnici. Znak za novo vrstico lahko zapiemo v obliki '\n Znak za pomik na zaetek vrstice '\r'
Konstante in spremenljivke
V spremenljivke shranjujemo zaasne vrednosti, ki se praviloma spreminjajo med izvajanjem programa Konstante shranjujejo vrednosti, ki se ne spreminjajo med izvajanjem programa Vsako spremenljivke najavimo preden jo uporabimo v programu (opiemo tip, dolino, ) (priporoeno)
Konstante in spremenljivke
Na prvem mestu naj bo rka angleke abecede; v imenih slovenskih rk ne uporabljamo sledijo lahko rke, tevilke, spodnji vezaji pika, presledek, posebni znaki, (%,$,/, ) ne smejo biti del imena; ne sme vsebovati rezerviranih besed (ukazov, vgrajenih konstant, ) ime naj bo pomensko dolga imena so lae berljiva, e se vsaka beseda v imenu zane z veliko rko
Definicija konstant
const pomeni, da ima spremenljivka konstantno vrednost in je ne moremo spreminjati
Definicija spremenljivk
deklaracija
TIP IME_SPREMNLJIVKE;
definicija
IME_SPREMNLJIVKE = NEKA_VREDNOST;
Modifikatorji
MODIFIKATOR TIP IME_SPREMENLJIVKE;
MODIFIKATOR TIP IME_SPREMENLJIVKE = NEKA_VREDNOST;
// uporaba modifikatorjev short ter long short int malo = 100; // velikost spremenljivke naj bi bila 2 byte-a long int veliko = 10000; // velikost spremenljivke naj bi bila 8 byte-ov
Modifikatorji
// uporaba modifikatorjev signed ter unsigned char a; // -127 do +128, signed je privzeta vrednost signed char b; // -127 do +128 unsigned char c; // 0 do 255 int d; // - 21474836648 do +21474836647 unsigned int e; // 0 do 42944967296
Modifikatorji
char a; // v char lahko zapiemo tevila od -128 do +127 a = 0; // ni teav a = -100; // ni teav a = +100; // ni teav a = +129; // teava! vrednost spremenljivke a postane -127, kako? 129 - 256 = -127 a = 135; // teava! vrednost spremenljivke a postane -121, kako? 135 - 256 = -121 a = 1000; // teava! vrednost spremenljivke a postane -24, kako? 1000 - (4*256) = -24 a = -200; // teava! vrednost spremenljivke a postane +56, kako? -200 + 256 = +56
Modifikatorji
unsigned char a; // 0 do 255 a = 100; // ni teav a = 300; // teave, vrednost spremenljivke a postane 44, kako? 300 - 256 = 44 a = -300; /* teave, vrednost spremenljivke a postane 212, kako? -300 + (2*256) = 212, dvakrat pridemo naokoli*/ a = 1000; /* teave, vrednost spremenljivke a postane 232, kako? 1000 - (3*256) = 232, trikrat pridemo naokoli*/
V/I funkcije
//predprocesorska direktiva za V/I tok #include <iostream.h> int main() { int stevilo;
cout << "Vpisi celo stevilo:" << endl; cin >> stevilo; cout << "Vpisal-a si stevilo:" << stevilo << endl; return 0;
Operatorji
aritmetini operatorji (arithmetical operators), prireditveni operatorji (assignment operators), primerjalni operatorji (relational operators), logini operatorji (logical operators), operatorji nad biti (bitwise operators).
:: :: () () . -> [] ++ -++ -+ ! ~ & * podatkovni tip .* ->* * / % + << >> < <= > >= == != & ^ | && || ?: = *= /= %= += -= ,
//operator za doloanje globalnega vidnega obmoja //operator za doloanje vidnega obmoja v objektu (member) //oklepaji za klic funkcije //oklepaji pri klicu konstruktorja //izbor lana v nekem objektu //izbor lana v nekem objektu, kot kazalec //dostop do elementa v polju //inkrementacija, dekrementacija (kot popona) //inkrementacija, dekrementacija (kot predpona) //predznak //logini NE //bitni komplement //naslov spremenljivke //dereference //osnovna pretvorba enega tipa v drugega //razklic nad lanom (bolji prevod e iemo) //indirekten razklic nad lanom (bolji prevod e iemo) //mnoenje, deljenje //setevanje, odtevanje //vhodni ter izhodni operator //operatorji za doloanje neenakosti //operatorji za doloanje enakosti //bitni AND //bitni XOR //bitni OR //logini IN //logini ALI //pogojni operator //prirejanje, nastavitev //mnoenje in prirejanje //deljenje in prirejanje //deljenje z ostankom in prirejanje //setevanje in prirejanje //odtevanje in prirejanje //tudi to je operator (ne samo loilo), dve izjavi zdrui v eno