Programiranje i programski jezici
Osnovni podaci - osoblje
Predavač:
Doc. dr Slobodan Đukanović
mail: [email protected]
konsultacije: svaki dolazak
Saradnik:
Mr Gojko Krunić
mail: [email protected]
konsultacije: po dogovoru
Provera znanja
• Načini proveravanja znanja:
–
–
–
–
Domaći zadaci: 5 poena
Prisustva: 5 poena
Kolokvijumi: 2×25 poena
Završni ispit: 40 poena
• Ispit je položen sa više od 50 poena u ukupnom
zbiru.
Kolokvijumi i završni ispit
• Da bi se izašlo na drugi kolokvijum, mora se
položiti prvi kolokvijum.
• Da bi se izašlo na završni ispit, moraju se
položiti oba kolokvijuma.
• Kolokvijumi i ispiti su položeni ako se dobije
preko 50% bodova.
Čovek i obrada podataka
• Još u XIX veku, pa i ranije, uočeno je da ljudi uspešno
obraĎuju samo male količine informacija, a da su podložni
raznim greškama kako se količina informacija povećava.
• Stoga se došlo na ideju kreiranja nepogrešivih računskih
mašina koje bi u zahtevnim obradama zamenile ljude.
• Nacrti prvih takvih mašina su bili plod rada Bebidža (Charles
Babbage) i Paskala (Blaise Pascal). (Paskal je napravio
mehaničku mašinu za sabiranje i oduzimanje)
• Revolucija u razvoju računskih mašina je omogućena
pojavom poluprovodničkih elektronskih komponenti –
tranzistora.
Pascal-ova mehanička mašina za sabiranje i oduzimanje
Jezik računara
• Savremeni elektronski računari rade na principu binarne
logike sa alfabetom {0,1}.
• Očigledno je veoma teško ljudsku logiku, zasnovanu na
procedurama, pretvoriti u binarni zapis direktnim putem.
• Poseban je problem što relativno prosta procedura zapisana
binarno može da ima desetine hiljada, pa i milione bita, što
je čini nemogućom za održavanje i prepravljanje.
• Stoga su se razvili programski jezici kao posrednici izmeĎu
jezika procedure i jezika koji razumeju računari.
Od čoveka do jedinica i nula
Išao, bio,
radio, €,
facebook
0101001000
1110100010
0100100101
Programski jezici
Viši: C, C++, C#,
Java, Matlab,
Visual Basic.net...
Niži: Asembler
Programski jezici
• Mašinski jezik je jezik koji razume procesor računara. Predstavlja
binarnu reprezentaciju (0 i 1) procesorskih instrukcija.
• Asemblerski jezik je jezik instrukcija procesora, na primer:
ADD R1, R2, R3
MULT R1, R2, R3
LOAD R1, A
// saberi registre R2 i R3 i smesti zbir u R1
// pomnoži registre R2 i R3 i smesti proizvod u R1
// učitaj podatak sa mem. adrese A i smesti ga u R1
• Program napisan u višem programskom jeziku podseća na
jednostavne direktive engleskog jezika, kombinovane sa preciznim
matematičkim formulacijama.
while(I < 10){
if(I > 2)
X = Y – 3;
}
Algoritam
• Pre pisanja programa u programskom
jeziku treba osmisliti korake u
rešavanju problema.
• Ti koraci, za razliku od jezika
procedure, moraju biti nedvosmisleni,
jer računari mogu da izvršavaju samo
nedvosmislene direktive.
• Niz koraka koji vode ka rešenju
nekog problema naziva se algoritam.
Osnovno o jeziku C
• C programski jezik je proceduralni programski jezik razvijen u ranim
70-im godinama 20. veka.
• Autor C-a je Dennis Ritchie, koji je stvorio ovaj programski jezik za
programiranje sistemskih aplikacija i jezgra operativnog sistema UNIX,
koji je praktično u potpunosti napisan u C-u.
• Programski jezik C dosta se menjao tokom godina, te je u više navrata
neformalno i formalno standardizovan. Prva važnija verzija poznata je
pod nazivom "K&R C" (K&R je od prezimena dva autora
najpoznatijeg C priručnika "The C Programming Language" - Brian
Kernighan i Dennis Ritchie).
• Prvo izdanje je iz 1978. godine, drugo iz 1988. godine, i ono opisuje
"ANSI C", standard kojeg je 1983. godine definirao američki
nacionalni institut za standardizaciju, a koji je i danas najbolje podržan.
• Trenutni standard jezika C je "C11" standard, odobren krajem 2011.
Šta je potrebno da se napiše program?
1. Poznavati programski jezik
2. Programski prevodilac
Programski prevodilac je program koji omogućava da se
program napisan u višem programskom jeziku (tzv. izvorni kôd)
prevede u jezik 0 i 1, razumljiv računaru (tzv. mašinski kôd).
3. Razvojno okruženje
Razvojno okruženje je program namenjen pisanju, editovanju i
ispravljanju grešaka (debug-ovanje). Postoje integrisana
razvojna okruženja (eng. integrated development environment IDE) koja omogućavaju i testiranje programa, tj. koja uključuju
programski prevodilac.
Programski prevodioci - Interpreteri
• Programski prevodioci se još nazivaju translatori.
• Dve osnovne grupe translatora su interpreteri i kompajleri.
• Interpreteri prolaze kroz izvorni kôd naredbu po naredbu, vrše
prepoznavanje naredbe i pozivaju dio koda intepretera koji
tumači tu naredbu.
• Prednosti interpretera:
– relativno su jednostavni,
– ne stvaraju izvršne verzije programa na računaru, pa štede memoriju.
• Mane interpretera:
– sporost,
– program se ne može tumačiti bez interpretera,
– ne postoji mogućnost sakrivanja sopstvene programerske veštine.
• Poznati interpreteri su Basic, Java, Matlab.
Programski prevodioci - Kompajleri
• Kompajeri prave izvršnu verziju programa (.exe fajl), koji
predstavlja samostalnu aplikaciju (može se izvršavati bez
dodatnog softvera).
• Kompajliranje je znatno složenije od interpretiranja.
• Prednosti kompajlera:
– brzina izvršavanja,
– sakrivanje programerske veštine,
– finalni produkt je samostalan bez potrebe za isporučivanjem programa
za tumačenje (kompajliranje).
• Mana kompajlera je složenost. Kompajleri su skupi programi,
kreiranje jednog kompajlera je vrlo složen proces. Detaljno
izučavanje procesa kompajliranja po pravilu zahteva poseban kurs.
• Jezici čiji se programi kompajliraju su C, C++, Fortran, Pascal,
Visual Basic.
Razvojno okruženje
• Na Internetu postoji mnoštvo razvojnih okruženja za
programiranje na bilo kom jeziku.
• Veliki broj okruženja je besplatan.
• Za programski jezik C, mi ćemo koristiti Code::Blocks,
freeware, koji se može download-ovati sa linka
http://www.codeblocks.org/downloads
(odabrati Download the binary release i odgovarajući
operativni sistem)
Prvi C program
#include <stdio.h>
int main()
{
printf("Prvi C program.\n");
printf("Jeste lak, al' dobro.");
return 0;
}
Prvi C program.
Jeste lak, al' dobro.
Štampa
Prvi C program
#include <stdio.h>
Uključivanje biblioteke
Glavna funkcija, od nje kreće izvršavanje programa
int main()
\n je prelazak u novi red
{
printf("Prvi C program\n");
printf("Jeste lak, 'al dobro.");
return 0;
}
Naredbe se moraju
završiti tačkom-zarez
Tekst (string) koji se štampa
Vraćanje vrednosti. Može i bez ovog koraka.
printf funkcija štampa tekst
Drugi C program
#include <stdio.h>
int main()
{
int broj1, broj2, zbir;
broj1 = 7;
broj2 = 5;
zbir = broj1 + broj2;
printf("Zbir %d i %d je %d",broj1,broj2,zbir);
}
Zbir 7 i 5 je 12
Štampa
Drugi C program
#include <stdio.h>
Deklaracija promenljivih
int main()
{
int broj1, broj2, zbir;
broj1 = 7;
broj2 = 5;
zbir = broj1 + broj2;
printf("Zbir %d i %d je %d",broj1,broj2,zbir);
}
Uparivanje vrednosti
Deklaracija promenljivih
• Deklaracija predstavlja navoĎenje imena i tipova promenljivih
korišćenih u programu.
• Ime promenljive može sadržati mala i velika slova, cifre i karakter
podvlaka _ (eng. underscore), i ne sme počinjati cifrom.
Dozvoljena imena
Nedozvoljena imena
aa
a1
a_b
Marko
1a
a&a
a b
printf
• Jezik C pravi razliku izmeĎu malih i velikih slova (eng. casesensitive). Tako, aa, aA, Aa i AA nisu iste promenljive.
• Deklaracijom se zauzima prostor u memoriji za promenljive.
• Vrednost promenljive nakon deklaracije je nepoznata!
Ključne reči
• Ključne reči su rezervisane reči koje koristi programski jezik C.
• Pomoću ključnih reči se predstavljaju programske strukture
(grananja, ciklusi), tipovi promenljivih, jezički operatori itd.
• Ključna reč ne može biti ime promenljive!
• Spisak ključnih reči je dat ispod.
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
Tipovi promenljivih
TIP
char
BAJTOVA
OPSEG
1
–128 do 127
short int
2
–32,768 do 32,767
long int
4
–2,147,483,648 do 2,147,483,647
int
2 ili 4, zavisno od implementacije
float
4
+/– 3.4×10–38 do +/–3.4×10+38
double
8
+/– 1.7×10–308 do +/–1.7×10+308
long double
10, 12, 16
Mi ćemo najviše raditi sa tipovima int, float, double i char.
Inicijalizacija i definicija promenljivih
• Inicijalizacija je davanje početnih vrednosti promenljivim.
broj1 = 7;
broj2 = 5;
• Inicijalizacija se mogla izvršiti i tokom deklaracije na
sledeći način:
int broj1 = 7, broj2 = 5;
• Ovo se naziva definicijom promenljivih.
Definicija = Deklaracija + Inicijalizacija
Funkcija printf
• printf je funkcija koja štampa formatirani tekst na ekranu.
• Šta je formatirani tekst? To je tekst koji može da se menja
(formatira).
• Kako se formatirani tekst menja? Koristeći specifikatore formata,
koji počinju karakterom %.
• U našem slučaju se koristi specifikator %d, koji znači da će
vrednost koja se upisuje na to mesto biti celobrojna.
printf("Zbir %d i %d je %d",broj1,broj2,zbir);
• Prilikom štampanja se prvi %d zameni vrednošću promenljive
broj1, drugi %d zameni vrednošću promenljive broj2, i treći %d
vrednošću promenljive broj3.
• Koliko ima %d toliko treba da bude izraza nakon "..." u printf.
Specifikatori formata
Najčešće korišćeni specifikatori formata su dati u tabeli ispod.
Spec. formata
%d
%f
%lf
%c
Tip
int
float
double
char
Treći C program
#include <stdio.h>
int main()
{
float a, b;
printf("Uneti dva realna broja: ");
scanf("%f %f",&a,&b);
printf("Kolicnik brojeva %f i %f je %f",a,b,a/b);
}
Štampa
Uneti dva realna broja: 3.21
5.47
Kolicnik brojeva 3.210000 i 5.470000 je 0.586837
Treći C program
#include <stdio.h>
int main()
{
Argument može biti
proizvoljan izraz
float a, b;
printf("Uneti dva realna broja: ");
scanf("%f %f",&a,&b);
printf("Kolicnik brojeva %f i %f je %f",a,b,a/b);
}
Funkcija scanf učitava podatke
scanf("%f %f",&a,&b);
Adresa promenljive a
Adresa promenljive b
Operacije sa celim brojevima
#include <stdio.h>
int main()
{
int a = 12, b = 8;
float c;
c = a/b;
printf("Kolicnik brojeva %d i %d je %f",a,b,c);
}
Štampa: Pogrešan rezultat!
Kolicnik brojeva 12 i 8 je 1.000000
Dolazi do gubitka tačnosti (odbacivanja decimalnog dela) pri izračunavanju
a/b jer su obe promenljive celobrojne, pa je i količnik celobrojan!!!
Aritmetički operatori u C-u
Operator
+
–
*
/
%
Operacija
Sabiranje
Negacija
Množenje
Deljenje
Modulo
•
Operator dodele vrednosti je =
•
Izraz tipa
2.3 = X;
nije dozvoljen jer se u konstantu ne može upisati vrednost.
•
Dozvoljeno je x = y = z = 0;
Logički i operatori poreĎenja
Operator
Operacija
&&
Logičko I
||
!
Logičko ILI
Logička negacija
Operator
Operacija
>
Veće od
>=
Veće od ili jednako
<
Manje od
<=
Manje od ili jednako
==
!=
Provera jednakosti
Provera nejednakosti
Logički i operatori poreĎenja
• Rezultat logičkih i operacija poreĎenja je ceo broj i to:
• 0 ako uslov nije ispunjen
• 1 ako je uslov ispunjen
• Na primer, ako je X = 5, onda će izrazi
X == 5
X != 7
X > 0
X > 3 && X < 7
imati vrednost 1, dok će izrazi
X == 0
X != 5
X > 10
imati vrednost 0.
Logički i operatori poreĎenja
• Logičkom istinom se tumači svaki izraz čija je vrednost različita
od 0, dok se izraz čija je vrednost jednaka 0 tumači kao logička
neistina.
• Na primer, izraz
5 && 10
imati vrednost 1, jer se brojevi 5 i 10 tumače kao logička istina.
• Sa druge strane, izraz
0 && 5
imati vrednost 0.
Kombinovani operatori dodele
•
Izraz
x = x + 2
se može skratiti sa
x += 2
•
Na isti način:
x = x - 2 se može skratiti sa x
x = x * 2 se može skratiti sa x
x = x / 2 se može skratiti sa x
x = x % 2 se može skratiti sa x
-=
*=
/=
%=
2
2
2
2
Operator inkrementiranja
•
Izraz
x = x + 1
se još može napisati i kao x++ ili ++x.
postfiksno inkrementiranje
(uzmi staru vrednost x u
izrazu, pa uvećaj x)
prefiksno inkrementiranje
(uvećaj x, pa uzmi novu
vrednost x u izrazu)
•
Posmatrajmo sledeće dve sekvence naredbi:
x = 1;
x = 1;
y = x++;
y = ++x;
•
Nakon prvog niza naredbi (crvene), y će imati vrednost 1, a
nakon drugog (zelene) 2. U oba slučaja, x ima vrednost 2.
Operator dekrementiranja
•
Izraz
x = x - 1
se još može napisati i kao x-- ili --x.
postfiksno dekrementiranje
(uzmi staru vrednost x u
izrazu, pa smanji x)
prefiksno dekrementiranje
(smanji x, pa uzmi novu
vrednost x u izrazu)
•
Posmatrajmo sledeće dve sekvence naredbi:
x = 5;
x = 5;
y = 3 + x--;
y = 3 + (--x);
•
Nakon prvog niza naredbi (crvene), y će imati vrednost 8, a
nakon drugog (zelene) 7. U oba slučaja, x ima vrednost 4.
Izvršavanje složenih logičkih izraza
•
Kod složenog logičkog izraza
A && B && C && ...
pri čemu su A, B, C,..., elementarni logički izrazi ili poreĎenja,
izvršavanje ide s leva na desno i prekida se kad se ustanovi
konačna vrednost izraza, tj. čim neki izraz nije tačan.
•
Kod logičke && operacije, dovoljno je da jedan izraz bude
netačan, da bi ceo izraz bio netačan.
•
Na primer, ako je X = 5, onda će X nakon izraza
(X < 3) && X++
imati vrednost 5, jer se X++ neće izvršiti zato što uslov X < 3
nije ispunjen, pa nema svrhe proveravati ostale uslove.
Izvršavanje složenih logičkih izraza
•
Kod složenog logičkog izraza
A || B || C || ...
pri čemu su A, B, C,..., elementarni logički izrazi ili poreĎenja,
izvršavanje ide s leva na desno i prekida se kad se ustanovi
konačna vrednost izraza, tj. čim se naiĎe na tačan izraz.
•
Kod logičke || operacije, dovoljno je da jedan izraz bude tačan,
da bi ceo izraz bio tačan.
•
Na primer, ako je X = 5, onda će X nakon izraza
(X > 3) || X++
imati vrednost 5, jer se X++ neće izvršiti zato što je uslov X > 3
ispunjen, pa nema svrhe proveravati ostale uslove.
Prvenstvo i asocijativnost operatora
OPERATOR
++
––
!
*
/
%
+
<
<=
>
>=
==
!=
&&
||
=
+=
-=
*=
/=
%=
OPIS
Inkrementiranje
Dekrementiranje
Logička negacija
Množenje
Deljenje
Moduo (ostatak)
Sabiranje
Oduzimanje
Manje od
Manje od ili jednako
Veće od
Veće od ili jednako
Jednako
Različito
Logičko I
Logičko ILI
Dodela vrednosti
ASOCIJATIVNOST
S desna na levo
S leva na desno
S leva na desno
S leva na desno
S leva na desno
S leva na desno
S leva na desno
S desna na levo
Primeri za vežbu
Koju će vrednost imati realna promenljiva B posle datog niza
naredbi?
int A;
float B;
A = 5;
B = 5*A/7;
Koju će vrednost uzeti promenljive s1 i s2 nakon izvršenja
svake od datih naredbi?
int s1, s2;
s1 = 1;
s2 = ++s1 + 5;
Zadaci za vežbu
1. Napisati C program koji učitava ceo broj N i štampa njegov
kvadrat i kub.
2. Napisati C program koji učitava realan broj X i štampa
vrednost sledećeg izraza:
X 1 2  X
Y

X  2 7.4 X 2
3. Napisati C program koji učitava dva cela broja X i Y, i štampa
ostatak pri deljenju ta dva broja.
Download

Програмирање и програмски језици