ProgramskijezikC
Uvod
Da bismo napisali program, neophodna su nam dva specijalizovana programa: jedan koji koristimo da
napišemo izvornu datoteku, i drugi (kompajler) sa kojim dobijamo izvršnu datoteku. Danas se ova dva
programa najčešće kombinuju u jedinstven paket – razvojno okruženje.
Najpoznatije C++ okruženje predstavlja Microsoftov proizvod Visual C++.NET. Međutim, većina
ovakvih programa je komercijalna i nije dostupna svim korisnicima. Ipak, moguće je naći veliki broj
besplatnih C++ okruženja. Jedno od takvih okruženja je i Dev-C++. Najnoviju verziju pomenutog
programa moguće je naći na web stranici firme BloodshedSoftware
Instalacija
Instalacija Dev-C++ programa ni u čemu se ne razlikuje od većine instalacionih datoteka u Windows
okruženjima. Dovoljno je dvostrukim klikom pokrenuti instalacionu datoteku (npr.devcpp4.9.9.2_setup.exe) i pratiti poruke na ekranu.
Kreiranje prvog programa
Upisivanje koda
Nakon pokretanja programa Dev-C++, prvi korak u kreiranju koda je otvaranje novog zadatka.
Dev-C++ pruža više opcija, ali mi ćemo uglavnom raditi na jednostavnim datotekama sa
izvršnim kodom (opcija File/New/File...C/C++Source). Nakon odabira ove opcije, otvara se dijalog
prozor u koji treba upisati ime i putanju fajla (npr. hello.), a zatim uneti kod u prozor:
1. #include <stdio.h>
2. main()
3. {
4. printf("Hello world!\n");
5. }
Generisanje izvršne datoteke
Nakon što se sačuva ovaj kod, treba ga kompajlirati, tj. proizvesti izvršnu mašinsku datoteku. Ovo se
izvodi korišćenjem kombinacije tastera Ctrl+F9 na tastaturi, ili izborom opcije Compile tj. Build, ili
pritiskom na ikonu u nizu alata.
Nakon startovanja procesa kompajliranja, pojavljuje se prozor sa porukama koje prate proces
kompilacije. Dev-C++ daje poruku u slučaju da nađe bilo kakvu grešku u programu. U slučaju da
nema grešaka, stvara se izvršna datoteka koja se naziva hello.exe.
Pokratanje programa
Pokretanje programa, koji smo prethodno kompajlirali, u Dev-C++ okruženju izvodi se izborom opcije
Run, kombinacijom tipki Ctrl+F10 na tastaturi, ili pritiskom na ikonu.
Prethodna dva procesa (kompajliranje i pokretanje) moguće je objediniti pritiskom na tipku F9 na
tastaturi, izborom opcije Build&Run, ili izborom odgovarajuće ikone .
Program je moguće pokrenuti i van Dev-C++ okruženja, dvostrukim klikom na izvršnu datoteku
hello.exe.
1
Struktura programa
C++ program se sastoji od jedne ili više celina za prevođenje, pri čemu ove celine predstavljaju
deo programa koji treba kompajlirati odvojeno od drugih celina. Tačnije, celina za prevođenje je
rezultat primene preliminarne faze kompilacije, koja se naziva predprocesiranje, na izvornu
datoteku (source).
Izvorna datoteka obično počinje sa jednom ili više (predprocesorskih) direktiva #include, pri čemu
svaka od njih navodi predprocesor da kopira deklaracije entiteta (funkcija, globalnih varijabli,
tipova, itd), koji su definisani u ostalim celinama za prevođenje.
U liniji 1 pozvana je datoteka stdio.h. Prvi karakter (#) predstavlja symbol, koji daje signal
predprocesoru. Svaki put kada pokrenemo kompajler, predprocesor je već pokrenut. U principu,
predprocesor čita kroz izvornu datoteku i traži linije koje počinju sa ovim karakterom, tako da ih
predprocesor prođe pre nego kompajler startuje sa radom. Ukratko ova linija znači: Ono što sledi je
ime datoteke. Nađi tu datoteku i odmah je pročitaj. Uglaste zagrade (<>) daju naredbu
predprocesoru da nađe zadatu datoteku koja je deo standardne biblioteke (u datom primeru to je
datoteka koja sadrži definicije za ispis i upis). U slučaju kada bismo hteli uvrstiti neku svoju
datoteku, umesto zagrada bismo koristili znake navoda. Dakle, ova linija kaže predprocesoru da
nađe datoteku koja se zove stdio.h i da je odmah pročita. Naravno, sadržaj tražene datoteke
bismo mogli upisati u izvornu datoteku bez korištenja direktive #include.
Linija 2 počinje stvarni program sa funkcijom koja se naziva main(). Svaki C++ program sadrži
ovu funkciju. Funkcija predstavlja deo koda koji odrađuje određenu radnju. Inače, program može da
ima proizvoljan broj funkcija, pri čemu je funkcija main() specijalna. Kada god se program startuje,
ona se automatski poziva. Sve funkcije počinju zagradom { i završavaju zagradom }, a sve između
ovih zagrada predstavlja deo funkcije.
Glavni deo programa je linija 4, koja predstavlja neku naredbu, tj. računarski korak koji daje neku
vriednost. Kraj naredbe uvek završava tačka-zarezom. Naredba u datom primeru šalje string
"Hello world \n" na štampu String je svaki niz karaktera koji se nalazi između
znaka navoda. Posljednji karakter u datom stringu (\n) je karakter koji označava novi red.
2
Proces kompajliranja
Kompajliranje C++ programa obuhvata nekoliko koraka, koji su većinom nevidljivi za korisnika:
• prvo, C++ predprocecsor ide kroz program i izvodi instrukcije koje su specificirane
predprocesorskim direktivama (npr. #include). Rezultat ovoga je modificirani tekst
programa koji više ne sadrži nikakve direktive.
• zatim, C++ kompajler prevodi programski kod. Kompajler može biti pravi C++ kompajer
koji pravi osnovni (asemblerski ili mašinski) kod, ili samo prevodilac, koji kod prevodi u C
jezik. U drugom slučaju, rezultujući C kod je zatim proveden kroz C kompajler kako bi se
napravio osnovni kod. U oba slučaja, rezultat može biti nepotpun zbog toga što program
poziva podprogramske biblioteke koje nisu definisane u samom programu.
• Na kraju, linker završava objektni kod njegovim povezivanjem sa objektnim kodom bilo
kog modula biblioteka koji program može pozvati. Konačan rezultat je izvršna datoteka.
Slika ilustruje prethodno
navedene korake i za C++
prevodilac i za C++ prirodni
kompajler.
U praksi su sve ove
komande obično izvršene
jednom komandom (npr.
CC), a korisnik ni ne vidi
datoteke koje su se napravile
međufazama.
u
Zadaci
zad1. Kreirati aplikaciju kojom se za data dva broja izračunava njihov zbir.
zad2. Kreirati aplikaciju kojom se od prirodnog broja N formira broj dobijen zamenom vrednosti cifre jedninica i stotina u
broju N.
zad3. Napisati program koji prevodi težinu iz funti u kilograme (1 funta = 0,45359237 kg)
zad4. Napisati program kojim se obračunavaju troškovi putovanja do mora i nazad, ako je S udaljenost do mora,
potrošnja automobila na 100 km L litara , a cena 1 litra goriva C dinar.
zad5. Napisati program koji datom prirodnom četvorocifrenom broju :
a)
b)
c)
d)
izračunava proizvod cifara
izračunava razlika sume krajnjih i srednjih cifara
izračunava suma kvadrata cifara
određuje broj koji se dobija ispisom cifara u obrnutom poretku.
3
Promenljive i tipovi podataka
Promenljive u nekom programskom jeziku su objekti koji imaju neku vrednost, pri čemu se vrednost
može menjati u toku izvršavanja programa.
Deklaracija promenljive određuje ime i tip promenljive:
imeTipa imeProm [= vrednost]
Prosti tipovi
•
•
•
•
tip
short
int
long
znakovni tip ( char )
celobrojni tip (short, int, long)
mešoviti tj. realni tip ( float, double)
veličina
1 ili 2 bajta
2 ili 4 bajta
4 bajta
Svakom od navedenih celobrojnih tipova može biti dodat prefiks
unsigned (neoznačen ceo broj).
Da bi se naglasilo da je neka celobrojna konstanta tipa long, iza niza
cifara koji čine tu konstantu, dodaje se sufiks L. Da bi se naglasilo da
je konstanta neoznačen broj, slično se dodaje sufiks U.
Podatak mešovitog tipa ne može za vrednost
imati bilo koji realan broj , već samo brojeve iz
određenog podskupa racionalnih brojeva.
Aritmetički operatori
Operator
++
-*
/
+
%
=
Naziv
inkrementacija
dekrementacija
promena znaka
množenje
deljenje
sabiranje
oduzimanje
ostatak pri deljenju
dodeljivanje
tip
float
intdouble
veličina
4 bajta
8 bajta
Tipovi
char, int
char, int
char, int
značajne cifre
6-7
14-15
Vrsta operatora
unarni
unarni
unarni
binarni
binarni
binarni
binarni
binarni
binarni
Inkrementacija – uvećavanjeza 1 (slično i dekrementacija)
++x jednako je x+1
x++ jednako je sa x ali kao dodatni efekat ima i uvećanje vrednosti x za 1.
Složeni operatori
+= dodavanje desnog operanda i dodela levom operandu (x+=3 je isto kao x=x+3)
-= oduzimanje desnog operanda i dodeljivanje levom (x-=3 je isto kao x=x-3)
slično : *= , /= , %=
Relacioni operator
<=,<,>, >=, ==, !=
Logički operatori
operator
naziv
!
negacija
&&
konjukcija
disjunkcija
||
vrsta
unarni
binarni
binarni
4
Operatori nad bitovima i operatori pomeranja
<< pomeranje ulevo, (x<<y vrši pomeranje cifara x (znakovni ili celobrojni) za y mesta ulevo)
>> pomeranje udesno, (x>>y vrši pomeranje cifara x (znakovni ili celobrojni) za y mesta udesno)
~ negacija nad bitovima
& konjukcija nad bitovima
| disjunkcija nad bitovima
^ ekskluzivna disjunkcija nad bitovima
Uslovni operator
uslov ? x : y; ako je uslov tačan onda se računa x, inače se računa y
npr. max = ( a > b ) ? a : b;
Operator veličine sizeof
Daje veličinu memorijskog prostora (izražena u bajtovima) koji taj tip zauzima.
Konverzije
Promena tipa podataka:
iz mešovitog u celi – odbacivanjem dela iza decimalne tačke
u izrazu važi pravilo jačeg tipa, a oni su poređani na sledeći način
char< unsigned char< short< unsigned short< int< unsigned int < long <unsigned long< float< double
Složeni tipovi podataka
Nizovi
Deklaracija:
tip ime[BR_ELEMENATA]
Strukturni tip
struct imeTipa{
tip1 ime1;
tip2 ime2;
...
tipk imek;
} imeProm;
npr:
float v[100];
realnih brojeva
int x[10] [20] [30];
brojeva
jednodimenzoioni niz od 10
trodimenzinalni niz celih
Pojedinačnim delovima promeljive ovog tipa
pristupa se navođenjem imena promenljive i
polja odvojenih tačkom.
npr:
struct osoba{
char ime[10];
int starost;
} ucenik;
ucenik.starost=15;
Pokazivači
Deklaracija:
tip *ime;
ime je adresa memorijske lokacije na kojoj može da se zapiše vrednost datog tipa. Toj lokaciji
pristupamo sa zapisom *ime, koje je isto što i promenljiva datog tipa.
Ukoliko nam treba adresa neke promenljive prostog tipa koristimo operator &(adresa).
npr:
int *x,y; x-pokazivač na int polje, y- int promenljiva
x=&y; vrednost x je adresa promenljive y
x++;
uvećava vrednost promenljive za 2 (veličina int polja je 2 bajta)
5
Naredbe
Više nardbi grupišemo stavljanjem u vitičaste zagrade. Obavezno je pisanje znaka ; na kraju svake
naredbe.
Naredbe grananja
if (uslov) naredba else naredba
switch (izraz){
case v1: naredba1
naredba2
...
naredbak1
case v2: ...
...
default: ...
}
Naredbe petlji
while (uslov) naredba - ponavlja naredbu dok je uslov tačan (prvo proveri uslov)
do naredba while (uslov) - ponavlja naredbu dok je uslov tačan (posle proveri uslov)
for (izraz1; izraz2; izraz3) naredba - izračunava se izraz1, ako je izraz2 tačan izvršava se naredba i
izračunava izraz3
npr:
for (int i=1; i<5;i++) printf(“%d”,i);
-ispisuje brojeve od 1 do 4 na ekran
Naredbe promene toka
brake – prekid petlje ili switch naredbe u kojoj je.
continue - prekida tekuće telo petlje i prelazi na proveru uslova tj. početak petlje.
goto obeležje; - skok na izvršavanje funkcije od dela ispred kojeg stoji obeležje.
return izraz;
- prekida izvršenje funkcije i vraća vrednost izraza kao vrednost funkcije.
6
Funkcije
Funkcija je složena leksička konstrukcija. Sastoji se od određenog broja deklaracija promenljivih i
niza naredbi koje čine logičku celinu. Izračunavanje niza naredbi može da proizvede jedan rezultat čiji
je tip (istovremeno i tip funkcije) standardni tip ili pokazivač.
npr:
int max (int a, int b) {
if (a>b) return a;
else return b;
}
promenljive koje su navedene kao argumenti (a i b) ovde su poyvane po vrednosti i koriste se da bi
uzele vrednosi za izračunavanje. Ukoliko je potrebno menjati vrednosti argumenata oni se moraju
pozivati po adresi što u deklaraciji funkcije naglašavamo kao pokazivačku promenljivu:
int inkrement(int *x){
x++;
return 0;
}
poziv je npr: int a=inkrement(&b); ima za efekat kao da je b=b+1, a=0.
Program
Program na programskom jeziku C čini određen broj funkcija. Pri tome obavezno mora postojati
funkcija sa imenom main. Ova funkcija je glavna. Izvršavanje programa predstavlja pozivanje funkcije
main.
Formatizovani ulaz i izlaz
printf – koristi format kao prvi argument da
odluči koliko argumenata sledi i koga su tipa.
Format je niz karaktera od kojih se neki
kopiraju na izlaz, a neki određuju konverzije za
naredne argumente. Svaka specifikacija koja
definiše konverziju počinje sa %.
Između % i znaka konverzije može da bude :
-5h ili –7l i slično (h za short a l za long)
Znak za konverziju
d, i
- ceo broj int
npr: printf (“%d”,x); prikazuje celi broj x
u
- pozitivan ceo broj
scanf – učitava podatke sa ulaza i tumači ih
prema specifikaciji u formatu, a ostali
argumenti moraju da budu pokazivači.
f
- double
s
- char * tj štampa znakove sve do znaka
za kraj stringa ‘\0’
npr: scanf(“%d %d”,&x,&y);
Algoritam
Algoritam je precizno definisan postupak koji uzima ulazne vrednosti i daje rezultate.
Ocena algoritma
Obično se ocenjuje jedna od dve veličine:
• vreme izvršavanja algoritma (vremenska složenost) i
• količina iskorišćene memorije neophodne za izračunavanje (prostorna složenost).
7
Download

Programski jezik C - cas1