UVOD U PROGRAMIRANJE

Download Report

Transcript UVOD U PROGRAMIRANJE

Prof. dr Nikola Klem, dipl.el.inž.
Građevinski fakultet
Univerziteta u Beogradu
OSNOVE PROGRAMIRANJA
LEKCIJA I - ALGORITMI
Beograd, šk. god. 2010/2011.
44
Šta je računarski sistem?
© Nikola Klem
2006-2011.
44
Šta je računarski sistem?
Računar je elektronska mašina koja obrađuje
ulazne podatke ili informacije (INPUT) i
proizvodi iz njih nove podatke ili izlazne
informacije (OUTPUT).
Računar obrađuje podatke na osnovu programa
koji je napisan za određenu primenu.
Program po kome računar radi mora za vreme
izvršavanja da bude u memoriji računara.
© Nikola Klem
2006-2011.
44
Šta je program?
Skup instrukcija za rešavanje određenog
problema naziva se program.
Proces pisanja instrukcija za računar naziva se
programiranje.
© Nikola Klem
2006-2011.
44
Podela računarskih sistema
SISD – Single Instruction Single Data
SIMD – Single Instruction Multiple Data
(supercomputers)
MIMD – Multiple Instruction Multiple Data
(ultracomputers – clusters)
© Nikola Klem
2006-2011.
44
PREDNOSTI KORIŠĆENJA RAČUNARA
BRZINA
TAČNOST
RAZNOVRSNOST
© Nikola Klem
2006-2011.
44
ALGORITMI
Persijski matematičar Al-Khowarizmi (Abu Ja'far
Mohammed Ibn Musa al Khowarizmi ) u udžbeniku
matematike (oko 825. godine n.e.) prikazao je
rešenja nekih aritmetičkih problema u obliku
uputstava koja su se sastojala od tačno određenih
osnovnih koraka.
Ovakva uputstva su kasnije nazvana algoritmima.
Razvojem računara algoritmi su postali
samostalno i važno područje računarskih nauka.
© Nikola Klem
2006-2011.
44
ALGORITMI – Šta je algoritam?
Algoritam je u opštem slučaju konačni redosled
operatora, elementarnih obrada i pravila o njihovoj
primeni u cilju dobijanja rešenja nekog problema.
Izvođenje svakog operatora predstavlja jedan
algoritamski korak.
Sa računarskog stanovišta ova definicija nije
dovoljna pa se mora dopuniti još nekim uslovima
koje algoritam mora da zadovolji. To su:
- definisanost,
- konačnost i
- rezultat.
© Nikola Klem
2006-2011.
44
ALGORITMI
Definisanost. Svaka operacija ili pravilo mora imati
definisano i samo jedno značenje, tj. rezultat
svake operacije mora biti jasno definisan.
Konačnost. Svaki korak mora biti takav da bi ga,
bar u prinicipu, mogao izvesti čovek koristeći
olovku i papir za konačno vreme.
Postoje jednostavni i jednoznačni postupci koji
nisu algoritmi jer su beskonačni sa stanovišta
broja koraka potrebnog za dobijanje rezultata.
Algoritmi se moraju zaustaviti posle izvršenog
konačnog broja koraka i u konačnom vremenu.
© Nikola Klem
2006-2011.
/44
ALGORITMI
U vezi sa primenom računara treba napomenuti
da vreme rada računara potrebno za završetak
algoritma treba da bude razumno kratko.
Rezultat. Po završetku algoritma mora da postoji mogućnost da se ustanovi rezultat njegovog
rada, odnosno da li je algoritam postigao svoj
cilj ili nije.
Pojam algoritma ne mora biti vezan za primenu
računara. Algoritmi se koriste u svakodnevnom
životu za izvršavanje različitih aktivnosti (na pr.
kuvarski recepti).
© Nikola Klem
2006-2011.
/44
ALGORITMI
Postoje različite mogućnosti za predstavljanje
algoritma, ali se on najčešće pretstavlja grafički
pod imenom dijagram toka programa
(flowchart).
U ovom dijagramu pojedine akcije predstavljene
su tačno određenim grafičkim simbolima čime
se osigurava jednostavnost, preglednost i
jednoznačnost zapisa algoritma.
Najčešće korišćeni simboli su prikazani na
sledećem slajdu.
© Nikola Klem
2006-2011.
/44
ALGORITMI
Grafički
simbol
Značenje
Terminator
Unošenje podataka
Izdavanje podataka
Obrada podataka
Odluka
Povezivanje algoritamskih koraka
© Nikola Klem
2006-2011.
/44
ALGORITMI – Struktura algoritma
Pod strukturom algoritma podrazumeva se
redosled izvršavanja pojedinih vrsta
algoritamskih koraka u algoritmu.
Sa stanovišta ovog redosleda postoje tri
osnovne algoritamske strukture:
- linijska,
- razgranata i
- ciklička.
© Nikola Klem
2006-2011.
/44
ALGORITMI
Linijska struktura
Algoritamski koraci se
izvršavaju jedan za
drugim redosledom
kojim su napisani.
Primer
Algoritam za zamenu
točka na automobilu.
© Nikola Klem
2006-2011.
POČETAK
1. Pripremi dizalicu
2. Pripremi rezervni točak
3. Olabavi šrafove na točku
4. Podigni auto
5. Odvrni šrafove na točku
6. Skini točak
7. Stavi rezervni točak
8 . Zavrni šrafove na točku
9. Spusti auto
10. Zategni šrafove
11. Spremi dizalicu
12. Spremi rezervni točak
KRAJ
/44
ALGORITMI
Razgranata struktura
Struktura algoritma u
kojoj tok operacija zavisi
od ispunjenosti nekih
uslova zove se
razgranata struktura.
Primer
Algoritam za prelazak
ulice sa semaforom.
POČETAK
1. Stani ispred kolovoza
2. Pogledaj semafor
NE
Zeleno
svetlo
3. Čekaj zeleno svetlo
4. Pređi ulicu
KRAJ
© Nikola Klem
2006-2011.
DA
3. Pređi ulicu
/44
ALGORITMI
Ciklička struktura
Algoritam kod kog se određeni broj algoritamskih
koraka ponavlja više puta ima cikličku strukturu.
Ako je broj ponavljanja dela algoritma poznat
unapred struktura je konstantna (brojački ciklus).
Primer - algoritam za punjenje deset boca vodom
Ako broj ponavljanja nije poznat unapred, nego
zavisi od ispunjenosti nekog uslova struktura je
promenljiva (uslovni ciklus).
Primer - algoritam za prelazak ulice bez semafora.
© Nikola Klem
2006-2011.
/44
POČETAK
ALGORITMI
1. Otvori vodu
Ponovi
10 puta
Uzmi praznu bocu
3. Napuni je vodom
4. Zatvori bocu
5. Odloži punu bocu
POČETAK
1. Stani ispred kolovoza
2. Pogledaj levo i desno
2.
NE
Nema vozila
3. Sačekaj malo
DA
4. Pređi ulicu
6. Zatvori vodu
KRAJ
© Nikola Klem
Konstantna ciklička struktura
2006-2011.
KRAJ
Uslovna ciklička struktura
/44
ALGORITMI
Složene algoritamske strukture
Složene algoritamske strukture sastoje se
od proizvoljnog broja, proizvoljnih
kombinacija osnovnih algoritamskih
struktura.
© Nikola Klem
2006-2011.
/44
REŠAVANJE PROBLEMA
PRIMENOM RAČUNARA
Koraci:
1.
2.
3.
4.
Izbor i formulacija problema,
Analiza problema,
Izbor metoda za rešavanje problema,
Projektovanje programa,
© Nikola Klem
2006-2011.
/44
ALGORITMI
"TOP-DOWN" PROJEKTOVANJE
Na svakom nivou postoji algoritam za rešavanje problema.
Svaki modul može da se zameni drugim modulom koji mu je
funkcionalno ekvivalentan.
© Nikola Klem
2006-2011.
/44
REŠAVANJE PROBLEMA
PRIMENOM RAČUNARA
Koraci:
1.
2.
3.
4.
Izbor i formulacija problema,
Analiza problema,
Izbor metoda za rešavanje problema,
Projektovanje programa,
5.
6.
7.
8.
Kodiranje algoritma,
Ispitivanje korektnosti programa,
Izrada dokumentacije,
Održavanje programa.
© Nikola Klem
2006-2011.
/44
FUNKCIONALNA ŠEMA RAČUNARA
ULAZNE
JEDINICE
IZLAZNE
JEDINICE
© Nikola Klem
2006-2011.
KONTROLNA
JEDINICA
UNUTRAŠNJA
MEMORIJA
ARITMETIČKO
LOGIČKA
JEDINICA
JEDINICE
SPOLJNE
MEMORIJE
/44
Komunikacija sa računarom
01100111101
© Nikola Klem
2006-2011.
/44
Tipovi jezika
Nižeg nivoa:
Mašinski,
Asemblerski (mašinski orijentisani).
Višeg nivoa:
Proceduralno orijentisani (treća generacija),
Problemski orijentisani jezici,
Objektno orijentisani jezici.
© Nikola Klem
2006-2011.
/44
Programski jezici
FORTRAN = FORmula TRANslation
COBOL = Common Bussines Oriented Language
ALGOL = ALGOrithmic Language
PL/I = Programing Language I
BASIC = Beginners All Purpose Symbolic
Instruction Code
PASCAL
ADA
C
© Nikola Klem
2006-2011.
/44
Programski jezici
Problemski orijentisani jezici
COGO = Civil Engineering Coordinate Geometry
STRESS = STRuctural Engineering System Solver
HYDRO = Hydraulic Engineering Computations
Objektno orijentisani
SmallTalk, C++, Java, Delphi, Visual Basic
© Nikola Klem
2006-2011.
/44
Programski jezici
- prevođeni (compiled)
- interpretativni (interpreted)
- intermedijarni (intermediate)
© Nikola Klem
2006-2011.
/44
Programski jezici
Program se piše u izvornom jeziku (source
language).
Računar izvršava program u mašinskom jeziku
(object language).
IZVORNI
PROGRAM
© Nikola Klem
2006-2011.
PROGRAM
PREVODILAC
MAŠINSKI
KOD
/44
Programski jezici
Program prevodilac (compiler) prevodi program
napisan u izvornom jeziku u mašinski kod.
Proces prevođenja se zove kompilacija.
Kod asemblerskih jezika proces prevođenja se
zove asemblovanje.
SVAKI RAČUNAR MORA DA IMA PROGRAM
PREVODILAC ZA SVAKI PROGRAMSKI JEZIK
KOJI SE KORISTI.
© Nikola Klem
2006-2011.
/44
Programski jezici
Cilj prevođenja ne mora uvek biti mašinski kod.
To može biti neki međujezik ili drugi programski
jezik.
Na primer, iz FORTRAN-a u C++.
Ako je cilj prevođenja međujezik, onda se
obično iz više programskih jezika prevodi u
međujezik, a zatim posebnim optimizacionim
prevodiocem iz međujezika u mašinski kod.
© Nikola Klem
2006-2011.
/44
Programski jezici
Interpretativni i interaktivni programski jezici su
jezici kod kojih svaka naredba može da se
tumači i izvršava nezavisno od ostalih
programskih naredbi.
Interpreteri – prepoznaju i izvršavaju naredbe
jednu po jednu, što olakšava, ali i usporava rad
programa, naročito kod ciklusa.
© Nikola Klem
2006-2011.
/44
Programski jezici
Intermedijarni programski jezici su jezici kod
kojih se izvorni kod prevodi u specijalni
međujezik - meta-kod. Meta-kod je univerzalni
veštački kod koji ne može da se izvrši ni na
jednom računaru, ali je osmišljen da bude
krajnje jednostavan za prevođenje u bilo koji
mašinski jezik.
Za svaki računar se piše specijalni program
(virtualna mašina) koji izvršava meta-kod.
Primer: Java, byte-code, VM.
© Nikola Klem
2006-2011.
/44
Programski jezici
Svaki programski jezik se sastoji od:
 Skupa znakova,
 Rečnika,
 Sintakse (pravila gramatike),
 Semantike (značenja svake naredbe).
© Nikola Klem
2006-2011.
/44
Struktura programa
Program je skup instrukcija (naredbi) za računar,
napisanih za rešavanje jednog problema.
Naredbe programskog jezika formiraju se
koristeći reči iz rečnika programskog jezika i
nazive koje programer dodeljuje memorijskim
lokacijama u koje su uskladišteni podaci sa
kojima se radi u programu, a prema pravilima
sintakse jezika.
© Nikola Klem
2006-2011.
/44
Struktura programa
Svaka naredba se završava oznakom za kraj
naredbe. U velikom broju programskih jezika
oznaka za kraj naredbe je tačka-zapeta (;).
Naredbe se izvršavaju redosledom kojim su
napisane, ukoliko taj redosled nije izmenjen
posebnim naredbama za izmenu toka programa
(grananje i ciklusi).
© Nikola Klem
2006-2011.
/44
Struktura programa
Naredbe programskog jezika mogu se podeliti u
dve kategorije:
 Izvršne i
 Nezvršne.
Izvršne naredbe (naredbe koje računar treba da
izvrši) – su naredbe koje se u procesu prevođenja
prevode u odgovarajući mašinski kod.
© Nikola Klem
2006-2011.
/44
Struktura programa
Neizvršne naredbe (deklaracije) – su naredbe
kojima se daju uputstva programu prevodiocu
neophodna za prevođenje programa (definisanje
imena memorijskih lokacija, definisanje tipova
podataka, opisi funkcija i procedura).
S obzirom na to da su namenjene programu
prevodiocu, one se koriste samo za prevođenje
programa i ne prevode se u mašinski kod.
© Nikola Klem
2006-2011.
/44
Struktura programa
U većini programskih jezika u programu se, na
početku, pravi odeljak u kome su date neizvršne
naredbe, a posle toga sledi blok sa izvršnim
naredbama.
Tako se program prevodilac prvo upozna sa
uputstvima za prevođenje programa, a zatim,
sledeći ta uputstva i pravila sintakse jezika,
učitava naredbe iz bloka sa izvršnim naredbama i
prevodi ih u mašinski kod.
© Nikola Klem
2006-2011.
/44
Struktura programa
U svim programskim jezicima znakovi koji se
mogu koristiti za formiranje elemenata jezika su:
Alfabetski – velika i mala slova engleske abecede,
Numerički – cifre 0,1,2,3,4,5,6,7,8,9
Specijalni – zavisno od jezika (. , = ; + zagrade itd.)
Znakovi iz prva dva skupa (alfabetskih i
numeričkih) nazivaju se alfanumerički.
© Nikola Klem
2006-2011.
/44
Imena podataka
Podaci sa kojima program radi moraju za
vreme izvršavanja programa da se nalaze
u memoriji računara.
U naredbama programa zadaju se
memorijske lokacije na kojima se nalaze
podaci sa kojima naredba radi.
Korisnik se poziva na podatke tako što
dodeljuje imena ovim lokacijama na
osnovu pravila sintakse.
/44
Imena podataka
Postoje dve grupe memorijskih lokacija za
podatke:
konstante - lokacije u kojima se podaci
postavljaju pre početka rada programa i ne
menjaju tokom rada programa,
promenljive (varijable) - lokacije kod kojih
se sadržaj (podaci uskladišteni u njima)
menjaju tokom rada programa.
/44
Tipovi podataka
Podaci sa kojima računari rade se dele
prema načinu njihovog skladištenja u
memoriji računara na sledeće tipove:
 celi brojevi,
 realni brojevi u običnoj tačnosti
 realni brojevi u dvostrukoj tačnosti
 znakovni podaci
 logički podaci
Svaki tip podataka ima odgovarajući tip
konstante.
© Nikola Klem
2006-2011.
/44
© Nikola Klem
2006-2011.