Računarski jezici - Mašinski fakultet Univerziteta u Nišu

Download Report

Transcript Računarski jezici - Mašinski fakultet Univerziteta u Nišu

Računarski jezici
Prof. dr Miroslav Trajanović
Mašinski fakultet u Nišu
Osnove programiranja
STRUKTURA RAČUNARSKIH
SISTEMA
Mašinski fakultet u Nišu
Osnove programiranja
Struktura
tehničkog
sistema
Mašinski fakultet u Nišu
Osnove programiranja
Pojam kodiranja
• Računar interno koristi binarni brojni sistem, jer njegova
logika poznaje samo dva moguća stanja: uklučeno (1) i
isključeno (0).
• Pošto postoji potreba da se obrađuju različiti simboli
(cifre , slova, znaci) bilo je potrebno razraditi sistem
interne reprezentacije ovih simbola u računaru.
• Da bi se obezbedila jednoznačnost, uvode se pravila
kodiranja podataka u binarni sistem.
• Binarno kodiranje je postupak kojim se simbol zamenjuje
nizom bitova po strogo propisanom sistemu kodiranja.
Mašinski fakultet u Nišu
Osnove programiranja
Reprezentacija celih brojeva
• Celi brojevi (engleski integers) mogu biti sa ili bez znaka.
• Interna reprezentacija celih brojevi bez znaka odgovara
binarnoj reprezentaciji broja.
• Najznačajniji bit (prvi sa leva) se koristi za kodiranje znaka.
Po konvenciji bit znaka (engleski sign bit) je 0 ako je broj
pozitivan i 1 ako je broj negativan.
• Metode za kodiranje celih brojeva sa znakom su:
– Magnituda sa znakom,
– Komplement jedinice,
– Komplement dvojke.
• Danas gotovo isključivo koristi metod komplementa dvojke.
Mašinski fakultet u Nišu
Osnove programiranja
Magnituda sa znakom
• Reprezentacija broja se sastoji od dva dela: znaka i
magnitude broja.
• Za znak je odvojen jedan bit, a ostali bitovi prestavljaju
magnitudu u binarnoj reprezentaciji.
• Primer broj +5610 = 00111000, a negativni broj -56 =
10111000.
• Nedostaci:
• Javljaju se dva moguća koda za nulu, +0 (00000000) i -0
(10000000),
• Sabiranje pozitivnog i negativnog broja nije moguće izvesti,
nego se operacija mora preurediti na oduzimanje magnitude
negativnog broja od pozitivnog.
Mašinski fakultet u Nišu
Osnove programiranja
Komplement jedinice
• Komplement jedinice nekog binarnog broja se dobija tako
što svi bitovi koji su bili 0 postaju 1, a svi koji su bili 1 postaju
0.
• Primer: komplement jedinice binarnog broja 1001 je 0110.
• Prvi bajt predstavlja znak broja.
• Magnituda pozitivnih brojeva odgovara binarnoj reprezentaciji
magnitude.
• Magnituda negativnih brojeva se dobija kao komplement
jedinice binarne reprezentacije magnitude.
• Primer, broj +5110 ima reprezentaciju 00110011, a broj -5110
11001100.
• Kodiranje negativnih celih brojeva komplementom jedinice
opisano je izrazom: -X = not(X)
Mašinski fakultet u Nišu
Osnove programiranja
Komplement dvojke
• Komplement dvojke nekog binarnog broja nalazi se po
sledećoj proceduri:
– Odredi se komplement jedinice datog binarnog broja
– Doda se jedinica rezultatu iz prvog koraka.
• Procedura nalaženja komplementa dvojke će biti prikazana
na primeru broja 5610
Binarni broj
00111000
Komplement jedinice
11000111
Sabiranje sa 1
Komplement dvojke
Mašinski fakultet u Nišu
Osnove programiranja
+1
11001000
Komplement dvojke
• Reprezentacija negativnih brojeva dobija se tako što se
nađe komplement dvojke datog pozitivnog broja.
• Primer: -5610 = 11001000
• Kodiranje negativnih celih brojeva komplementom dvojke
opisano je izrazom:
• -X = not(X) + 1
• U slučaju reprezentacije celih brojeva sa znakom postoji
samo jedan kod za 010 čiji je kod 00000000, pa se
jednim bajtom mogu reprezentovati brojevi od -128 do
+127.
Mašinski fakultet u Nišu
Osnove programiranja
BCD (Binary Coded Decimal) kodiranje
Decimalni broj
NBC
BCD
Exces-3
Gray
0
0
0000
0011
0
1
1
0001
0100
1
2
10
0010
0101
11
3
11
0011
0110
10
4
100
0100
0111
110
5
101
0101
1000
111
6
110
0110
1001
101
7
111
0111
1010
100
8
1000
1000
1011
1100
9
1001
1001
1100
1101
Mašinski fakultet u Nišu
Osnove programiranja
Primer 8421 BCD kod
Decimalno
8421 BCD
2
5
7
9
0010
0101
0111
1001
• BCD kodovi su manje ekonomičan od binarne reprezentacije broja.
• Na primer, sa 8 bita je moguće predstaviti cele nenegativne brojeve
u intervalu od 0 do 255, a u BCD kodu samo od 0 do 99.
• U radu sa 8421 BCD kodom se javljaju problemi pri operacijama
sabiranja i oduzimanja, pa se zbog toga često koristi Excess-3 kod.
Grey-ov kod se uglavnom koristi kod računara i merne opreme koja
je namenjena akviziciji podataka.
Mašinski fakultet u Nišu
Osnove programiranja
Reprezentacija realnih brojeva
• Računari koriste racionalne (razlomljene) brojeve koji se u
računarskoj tehnici nazivaju realni brojevi.
• Reprezentacija sa pokretnim zarezom (floating point).
• Sistem sa pokretnim zarezom se bazira na zapisu koji se naziva
naučna notacija.
• Primer: decimalni broj 2349,625 se može prikazati kao
– 23,49625 * 102
– 234,9625 * 101
– 23496,25 * 10-1
• Da bi se izbegle zabune brojevi u naučnoj notaciji se prikazuju u
normalizovanom obliku, u kome celobrojni deo ima samo jednu
cifru, a sve ostale cifre su iza zareza.
• Normalizovan oblik 2,349625 * 103
Mašinski fakultet u Nišu
Osnove programiranja
Opšti slučaj decimalnog broja u
normalizovanom obliku
• ± M * 10E
• M – mantisa
• E – eksponent
• Mantisa se može razložiti na celobrojni deo C i decimalni deo D, pri
čemu je celobrojni deo C jedna cifra koja mora biti u intervalu 1 ≤ C
≤ 9. Jedini izuzetak od ovog pravila je broj nula.
• Broj cifara koje sadrži mantisa definišu preciznost kojom broj opisuje
neku vrednost. Ove cifre se nazivaju značajne cifre.
• Primer: vrednost izraza 1/3 se može zapisati kao 3,33* 10-1 ili kao
3.3333 * 10-1.
• U prvom slučaju preciznost je 3 značajne cifre, a u drugom 5.
Mašinski fakultet u Nišu
Osnove programiranja
Realni brojevi se u binarnom brojnom
sistemu
n
m
i 1
j 1
V   ai  2i1   a j  2  j
•
•
•
•
•
•
i - pozicija cifre levo od decimalnog znaka
j - pozicija cifre desno od decimalnog znaka
n - broj cifara celobrojnog dela broja
m - broj cifara decimalnog dela broja
ai - cifra na i-toj poziciji ulevo od decimalnog znaka
aj - cifra na j-toj poziciji udesno od decimalnog znaka.
Mašinski fakultet u Nišu
Osnove programiranja
Težine cifara levo od decimalnog znaka
Pozicija cifre levo od
decimalnog
znaka
1
2
3
4
5
...
Težina
2-1
2-2
2-3
2-4
2-5
...
Težina
1/2
1/4
1/8
1/16
1/32
...
Težina
0.5
0.25
0.125
Mašinski fakultet u Nišu
Osnove programiranja
0.0625 0.03125
...
Konverzija decimalnog realnog broja u
binarni
• Posebno se konvertuju celobrojni i decimalni deo.
• Celobrojni deo broja se konvertuje u binarni broj metodom koji se
normalno koristi za cele brojeve.
• Decimalni deo, koji ima opšti oblik 0,abcde..., se konvertuje prema
sledećem algoritmu:
– Decimalni broj 0,abcde se množi sa 2 i dobija se rezultat oblika
p,qrstu
– Cifra p postaje prva decimalna cifra binarne reprezentacije i ona
se otklanja iz broja
– Ostatak 0,qrstu se ponovo množi sa 2 kako bi se dobila sledeća
decimalna cifra binarnog broja
– Koraci 2 i 3 se ponavljaju sve dok ostatak ne bude nula ili dok se
ne postigne željena preciznost.
Mašinski fakultet u Nišu
Osnove programiranja
Primer konverzije broja 0,2875
Korak
Množenje sa 2
Rezultat
Binarna cifra
1
0,2875 * 2
0,575
0
2
0,575 * 2
1,15
1
3
0,15 * 2
0,30
0
4
0,30 * 2
0,60
0
5
0,60 * 2
1,2
1
6
0,2 * 2
0,4
0
7
0,4 * 2
0,8
0
8
0,8 * 2
1,6
1
9
0,6 * 2
1,2
1
0,287510 ~ 0,0100100112
Mašinski fakultet u Nišu
Osnove programiranja
Binarni oblik naučne notacije
• Normalizovani oblik nekog broja u naučnoj notaciji se
može predstaviti i u binarnom brojnom sistemu
• Opšti oblik broja je:
• ± M * 2E
• Celobrojni deo mantise C, koji je u ovom slučaju binarna
cifra, može da uzme samo vrednost C=1, jer zbog
izvršene normalizacije prva cifra ne može da bude nula.
• Ova činjenica je iskorišćena da se sa istim brojem bitova
dobije binarna reprezentacija veće preciznosti.
Mašinski fakultet u Nišu
Osnove programiranja
Primer broja 2349,62510
• U binarnom brojnom sistemu pre normalizacije
izgleda 100100101101,1012.
• Posle normalizacije 1,001001011011012 * 21011.
• Decimalni zarez je pomerena za 11 mesta, pa je
vrednost eksponenta E = 1110 = 10112.
• Jedina cifra celobrojnog dela 1, što je slučaj sa svim
normalizovanim binarnim brojevima.
Mašinski fakultet u Nišu
Osnove programiranja
Format zapisa brojeva sa pokretnim
zarezom
31
znak
30
23
eksponent
Mašinski fakultet u Nišu
22
0
mantisa
Osnove programiranja
Pozitivan ili negativan celobrojni
eksponent
• Za reprezentaciju vrednosti eksponenta predviđeno 8 binarnih cifara
• Ako se jedna cifra odvoji za znak eksponentasmanjiće se vrednost
najvećeg eksponenta koji je moguće reprezentovati na polovinu.
• eksponent bi mogao da bude u intervalu ± 6410.
• Zato se uvodi predvrednost eksponenta (bias) koja iznosi 127.
• Ovaj broj se dodaje stvarnoj vrednosti eksponenta koja može da se
kreće u intervalu -12710 ≤ E ≤ +12810.
• U reprezentaciji eksponenta se upisuje u binarnom obliku pozitivan
broj koji može da bude u rangu od 0 do 255, a stvarna vrednost
eksponenta se dobija kad se od tog broja oduzme broj 12710.
Mašinski fakultet u Nišu
Osnove programiranja
Predvrednost eksponenta (bias)
Stvarna decimalna
vrednost
eksponenta (E)
Decimalna vrednost
u zapisu
eksponenta
Binarna vrednost u
zapisu
eksponenta
+6
133
10000101
+128
255
11111111
0
127
01111111
-6
121
01111001
-127
0
00000000
Mašinski fakultet u Nišu
Osnove programiranja
Jednostruka tačnost
• Interna reprezentacija mantise se sastoji od prvih 23
decimalnih cifara iz normalizovanog binarnog zapisa
mantise.
• Celobrojni deo mantise, koji je uvek jedinica, se
odbacuje kao redundantan podatak.
• Na taj način se povećava preciznost prezentacije na 24
cife.
• Ova reprezentacija je poznata kao reprezentacija
skrivene jedinice.
• Ovakva interna reprezentacija mantise dozvoljava tačno
prikazivanje prvih sedam značajnih cifara realnog broja u
decimalnom obliku.
Mašinski fakultet u Nišu
Osnove programiranja
Dvostruka tačnost
•
•
•
•
•
•
Ukupno 64 bita
Jedan bit se koristi za znak,
11 za eksponent i
52 za mantisu.
predvrednost (bias) je u ovom slučaju 102310.
Binarna preciznost mantise od 52 cifre omogućuje
preciznost od 15 značajnih cifara u decimalnom brojnom
sistemu.
znak
63
eksponent
62
mantisa
52
51
0
mantisa
Mašinski fakultet u Nišu
Osnove programiranja
Oblasti brojeva
Dužina internog
zapisa u
bitovima
Preciznost
mantise u
bitovima
Oblast brojeva (približno)
Binarno
Decimalno
Jadnostruka
preciznost
32
24
2-126 do 2127
1,18*10-38 do
3,40*1038
Dvostruka
preciznost
64
53
2-1022 do 21023
2,23*10-308 do
1,79*10308
Mašinski fakultet u Nišu
Osnove programiranja
Specijalni slučajevi
• IEEE 754 standard identifikuje 5 kategorija brojeva sa pokretnim
zarezom: nula, beskonačan broj, NaN, denormalizovani broj i
normalizovani broj.
• Nula je izdvojena u posebnu kategoriju zato što po napred
navedenim pravilima normalizacije nikad ne može biti
normalizovana (ne javlja se celobrojna 1). Ona može bit pozitivna ili
negativna.
• Beskonačan broj se dobija kao rezultat operacije u kojoj se broj
različit od nule deli sa nulom. I on može biti pozitivan ili negativan.
• NaN je skraćenica od Not a number. Ovakav “broj” se dobija kao
rezultat loše definisanih operacija. Tipičan primer je operacija
deljenja 0.0 sa 0.0 koja nema matematički definisan rezultat, pa se
rezultat operacije ne smatra brojem.
• Denormalizovani brojevi su uvedeni da bi mogla da se vrši interna
prezentacija brojeva koji su manji od najmanjeg normalizovanog
broja koji je moguće zapisati.
Mašinski fakultet u Nišu
Osnove programiranja
5 kategorija brojeva sa pokretnim
zarezom
Kategorija
Eksponent
Frakcija
nula
000000002
0
Beskonačan broj
111111112
0
NaN (not a number)
111111112
≠0
Denormalizovani brojevi
000000002
≠0
Normalizovani brojevi
≠ 000000002
≠ 111111112
≠0
Mašinski fakultet u Nišu
Osnove programiranja
Princip rada računara
OPERATIVNA MEMORIJA
SISTEMSKI PROGRAMI
APLIKATIVNI PROGRAMI
UPRAVLJAČKA JEDINICA
MEMORIJSKI REGISTRI PODATAKA
PODACI
DEKODER ADRESA
MEMORIJSKI ADRESNI REGISTRI
REGISTAR NAREDBI
KOD OPERACIJA
ADRESNI DEO (OPERANDI)
PROGRAMSKI
BROJAČ
DEKODER OPERACIJE
GENERATOR UPRAVLJAČKIH SIGNALA
TAKTNI GENERATOR
ARITMETIČKO – LOGIČKA JEDINICA
Mašinski fakultet u Nišu
Osnove programiranja
Koraci izvođenja naredbe
 Faza prihvatanja
 Čitanje naredbe
 Dekodiranje naredbe
 Čitanje operanda
 Određivanje adrese naredne naredbe
 Faza izvršavanja - izvođenje naredbe
 Faza odlaganja -zapisivanje rezultata
Mašinski fakultet u Nišu
Osnove programiranja
Mašinski jezik
• Svaki procesor ima svoj mašinski jezik
• Svi programski jezici se pre izvršenja prevode na
mašinski jezik
Mašinski fakultet u Nišu
Osnove programiranja
Mašinski jezik
Primer Java programa:
int counter = 0;
counter = counter + 1;
Adekvatni zapis u mašinskom jeziku:
000101000100010001000100001000101010111110
000001110101000111110000100010000010101010
Mašinski fakultet u Nišu
Osnove programiranja
Vrste računarskih jezika
•
•
•
•
•
Programski jezici (npr. Java, C++)
Skript jezici (npr. pHp, Pyton, JavaScript)
Specifikacioni jezici (IDEF, dijagrami)
Jezici upita (SQL)
Markup jezici (HTML, XHTML, TeX, SGML,
XML)
• Transformacioni jezici (XSLT - Extensible
Stylesheet Language Transformations)
Mašinski fakultet u Nišu
Osnove programiranja
OSNOVNI POJMOVI
• SINTAKSA JEZIKA: skup pravila koja definišu
legalnu upotrebu jezika
• SEMANTIKA: značenje pojedinih konstrukcija
• REZERVISANE REČI
Mašinski fakultet u Nišu
Osnove programiranja
Generacije programskih jezika
• I generacija - Mašinski jezik
• II generacija - Asembler
• III generacija
– Proceduralno orijentisani
– Problemski orijentisani
– Objektno orijentisani
• IV generacija (Aplikacioni jezici 4GLs)
• V generacija (Rešavanje problema
upotrebom ograničenja 5GL)
• Prirodni jezici
Mašinski fakultet u Nišu
Osnove programiranja
VRSTE JEZIKA
• Deklarativni jezici
– Šta program treba da uradi
– Primer SQL
• Imperativni jezici
– Kako program to treba da uradi
– Primer Java, C++
Mašinski fakultet u Nišu
Osnove programiranja
JOŠ JEDNA KLASIFIKACIJA
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Applicative (functional) languages
Concurrent, distributed, and parallel languages
Constraint and logic languages
Data-flow languages
Design languages
Extensible languages
Macro and assembly languages
Microprogramming languages
Multiparadigm languages
Nondeterministic languages
Nonprocedural languages
Object-oriented languages
Specialized application languages
Very high-level languages
Mašinski fakultet u Nišu
Osnove programiranja
Asembler
• Jezik zasnovan na mnemonicima
• Svakom mnemoniku odgovara jedna instrukcija
mašinskog jezika
• I danas se koriste kada je potrebno pisati sistemske
programe
Mašinski fakultet u Nišu
Osnove programiranja
Asembler
movl
compare:
cmpl
cgt
acddl
bra
end_of_loop:
Mašinski fakultet u Nišu
#0x1,n
#oxa,n
end_of_loop
#0x1,n
compare
Osnove programiranja
Proceduralno orijentisani
• NAUČNI
– FORTRAN (1954-1957) FORmula TRANslator
– APL (1968) A Programming Language
• POSLOVNI
– COBOL (1959) Comon Busines Oriented Language
– RPG (1964) Report Program Generator
• VIŠENAMENSKI
– BASIC (1965)
– Pascal (1968) Blaise Pascal
– Ada (1980) Augusta Ada Lovelance
– C (1972)
Mašinski fakultet u Nišu
Osnove programiranja
Problemski orijentisani
• GPSS - jezik za simulaciju sistema
• APT - za NUMA
• PostScript
Mašinski fakultet u Nišu
Osnove programiranja
Objektno orijentisani jezici
•
•
•
•
Smalltalk
C++
Java
Eiffel
Mašinski fakultet u Nišu
Osnove programiranja
RAZVOJ JEZIKA
Mašinski fakultet u Nišu
Osnove programiranja
JEZICI ČETVRTE GENERACIJE
• "Application specific" jezici.
• Neproceduralni jezici visokog nivoa izgrađeni
oko baza podataka.
• Nazivaju ih i "report-generator" jezici jer opisuju
format podataka i izveštaj da bi se generisao i
preveo u neki drugi jezik (npr COBOL)
• Poznatiji 4GL su: SQL, FOCUS, PostScript,
Gaus, Mathematica
Mašinski fakultet u Nišu
Osnove programiranja
JEZICI PETE GENERACIJE
• Prolog, OPS5, Mercury
• Povezani sa veštačkom inteligencijom (AI - artificial
intelligence)
• Programiranje logike , modeliranje realnog sveta ili
situacije
• Experni sistemi
• Sistemi zasnovani na znanju (KBS – Knowledge
Based Systems)
• Fuzzy logic, Neural networks
Mašinski fakultet u Nišu
Osnove programiranja
JEZICI VEŠTAČKE
INTELIGENCIJE
• IPL – Information Processing Language (1960) –
vrlo primitivan
• LISP - list processing 1960 – fakti su
predstavljani listama
• PROLOG – programming in logic – jezik
zasnovan nad produkcionim pravilima
• CLIPS
Mašinski fakultet u Nišu
Osnove programiranja
ŽIVOTNI CIKLUS PROGRAMA
• PROJEKTOVANJE
– Algoritam
– User interface
– Arhitektura i organizacija programa
• RAZVOJ
• IZVRŠENJE
– Izvršni kod se učitava u RAM (loader)
– Rezerviše se mesto za program i podatke
• ODRŽAVANJE
– Ispravljanje uočenih grešaka
– Poboljšanje i proširenje funkcija programa
Mašinski fakultet u Nišu
Osnove programiranja
RAZVOJ PROGRAMA
–
–
–
–
–
Projektovanje aplikacije
Pisanje izvornog koda (editor)
Dokumentovanje programa
Prevođenje u objektni kod (compiler - interpreter)
Povezivanje sa podprogramima i bibliotečkim
funkcijama (linker)
– Testiranje
– Izrada uputstva za korišćenje programa
– Izrada poboljšanih i novih verzija programa
Mašinski fakultet u Nišu
Osnove programiranja
IZVRŠAVANJE PROGRAMA
• Prevodioci – compiler
• Interpreteri
• Virtuelne mašine
• WEB - čitači web stranica
Mašinski fakultet u Nišu
Osnove programiranja
NAJVAŽNIJI JEZICI U UPOTREBI
•
•
•
•
•
•
PASCAL
C++
C#
JAVA
VISUAL BASIC
HTML
Mašinski fakultet u Nišu
Osnove programiranja
PASCAL
• Razvio ga je 1970 Nicklaus Wirth da bi efikasno učio
studente programiranju
• Strukturno programiranje (top-down design) korišćenjem
procedura
Mašinski fakultet u Nišu
Osnove programiranja
BASIC I PASKAL
if X>5 then
100 IF X>5 THEN 200 ELSE 300
110 PRINT "VREDNOST X=";X
120 END
200 X=X*X + 5
210 GOTO 110
300 X=0
310 PRINT "X JE PREMALO"
320 GOTO 120
begin
X :=sqr(X) + 5
writeln ('Vrednost X=',X)
end
else
begin
X:=0
writeln (X je premalo')
end;
Mašinski fakultet u Nišu
Osnove programiranja
C++
•
•
•
•
Objektno orijentisan
Objekti su definisani klasama
Objekt je instanca neke klase
Izvedene klase nasleđuju osobine svojih roditelja
(Inheritance)
• Polimorfizam
Mašinski fakultet u Nišu
Osnove programiranja
JAVA
• 1995
• Objektno orijentisan
• Interpretiran – Java prevodilac generiše kod za Java
Virtual Machine
• Nezavisan od arhitekture
• Multithreaded – izvršenje u više niti
• Posebno pogodan za Internet aplikacije
Mašinski fakultet u Nišu
Osnove programiranja
C#
• C# je komponentno orijentisan programski jezik
(na srpskom se čita kao C sharp.
• Sličan je Javi u tom smislu što programerima
omogućava da kôd pišu samo jednom a potom
njegove delove iznova koriste za pravljenje
različitih aplikacija.
• Izveden je iz jezika C i C++ i Microsoft ga smatra
najefikasnijim programskim jezikom za izgradnju
Web usluga zasnovanih na proširivom jeziku za
označavanje (Extensible Markup Language, XML).
Mašinski fakultet u Nišu
Osnove programiranja