Osnove programiranja Osnove...ove knjige, kao i onima koji su omogućili njeno publikovanje....

135
Osnove programiranja Praktikum Biblioteka "Udžbenici" 242 2019/2020 Univerzitet u Novom Sadu Tehnički fakultet "Mihajlo Pupin", Zrenjanin, 2020. Dr Eleonora Brtka

Transcript of Osnove programiranja Osnove...ove knjige, kao i onima koji su omogućili njeno publikovanje....

Osnove programiranja Praktikum

Biblioteka

"Udžbenici"

242

2019/2020

Univerzitet u Novom Sadu Tehnički fakultet "Mihajlo Pupin", Zrenjanin, 2020.

Dr Eleonora Brtka

Univerzitet u Novom Sadu, Tehnički fakultet "Mihajlo Pupin", Zrenjanin

Dr Eleonora Brtka

Osnove programiranja

Praktikum

Biblioteka "Udžbenici" 242

Zrenjanin, 2020.

Dr Eleonora Brtka Osnove programiranja Praktikum Recenzenti: Prof. dr Ivana Berković Doc. dr Vesna Makitan Izdavač: Tehnički fakultet "Mihajlo Pupin", Zrenjanin, Đure Đakovića bb. Za izdavača: Prof. dr Dragica Radosav, dekan Tehničkog fakulteta "Mihajlo Pupin", Zrenjanin Tehnička priprema: Eleonora Brtka

Naučno-nastavno veće Tehničkog fakulteta „Mihajlo Pupin“ u Zrenjaninu na

sednici 8.9.2020. godine je donelo odluku da je ovaj Praktikum odobren za

objavljivanje i korišćenje u nastavi.

CIP - Каталогизација у публикацији

Библиотеке Матице српске, Нови Сад

004.42(075.8)(076)

OSNOVE programiranja [Elektronski izvor] : praktikum /

Eleonora Brtka. - Zrenjanin : Tehnički fakultet "Mihajlo Pupin",

2020. - 1 elektronski optički disk (CD-ROM) ; 12 cm

Sistemski zahtevi: Nisu navedeni. - Nasl. s naslovnog ekrana.

ISBN 978-86-7672-339-3

а) Програмирање -- Практикуми

COBISS.SR-ID 21302025

PREDGOVOR

Praktikum, Osnov e p r og r am i r an ja , nastao je na osnovu

višegodišnjeg nastavnog iskustva koje obuhvata teoretska i praktična

izlaganja gradiva iz domena osnova programiranja. Namenjena je

studentima osnovnih studija usmerenja: informacione tehnologije,

menadžment informacionih tehnologija i informatika i tehnika u

obrazovanju. Po obimu sadržaja i dubini izlaganja, knjiga je namenjena

pre svih studentima navedenih usmerenja, ali i široj populaciji čitalaca

koja se zanima za ovu problematiku.

Imajući u vidu raznorodnost smerova i predznanja potencijalnih

čitalaca, sadržaj knjige je odabran i prilagođen tako da su teoretska

izlaganja praćena primerima programskih kôdova (koriste se programski

jezik C i JavaScript), a pojedini delovi ilustrovani su prikazom primene i

korišćenja softverskih alata i okruženja.

Zahvaljujem se onima koji su pomogli pri uobličavanju sadržaja

ove knjige, kao i onima koji su omogućili njeno publikovanje. Takođe,

sve dobronamerne kritike, predlozi poboljšanja, smernice i primedbe su

dobrodošli.

Autor,

Zrenjanin, jul 2020. godine

SADRŽAJ

1 Uvod 6 1.1 Programsko okruženje Code::Blocks 7 1.2 Pisanje, kompajliranje i izvršavanje programa 10 2 Struktura C programa 13 3 Tipovi podataka programskog jezika C 14 3.1 Varijable 16 3.2 Funkcije printf i scanf 20 4 Operatori i izrazi 24 4.1 Aritmetički operatori 24 4.2 Relacioni operatori 25 4.3 Logički operatori 25 4.4 Operatori i izrazi dodeljivanja vrednosti 26 4.5 Inkrementacija i dekrementacija 28 5 Programske upravljačke strukture 30 5.1 Kontrola toka - if 30 5.2 Kontrola toka - else-if 31 5.3 Organizacija ciklusa while, do - while, for 32 5.3.1 while 32 5.3.2 do - while 33 5.3.3 for 34 5.4 Uslovni operator: ? 35 5.5 Operator višestrukog izbora - Switch 37 5.6 Break i Continue 39 5.7 Operator sizeof() 39 6 Funkcije 41 6.1 Definicija funkcije 41 6.2 Pokazivači 46 6.3 Veza između funkcija korišćenjem pokazivača 48 6.4 Nizovi 50 6.5 Znakovni nizovi 62 7 Datoteke 79 8 Sintaksa i iskazi JavaScripta 91 8.1 Osnove JavaScript-a 91 9 Rad sa promenljivama i tipovima podataka 94 10 Upotreba operatora i izraza 98 11 Kontrolisanje toka pomoću uslovnih iskaza i petlji 101 12 Rad sa funkcijama 111 13 Objekti u JavaScriptu 117 14 JavaScript događaji i pretraživač 119 15 Rad sa slikama u JavaScriptu 123 16 Upotreba JavaScripta u veb obrascima 127 Literatura 134

6

1 UVOD

Viši programski jezici (C, Pascal, FORTRAN, C++, Java, . . . ) razvijeni

su kako bi se prevladali nedostaci asemblerskog jezika.

Oni oslobađaju programera potrebe poznavanja arhitekture računara,

omogućavaju prenosivost programa između računara različitih

arhitektura te brže i jednostavnije programiranje.

Programski jezik C je viši programski jezik opšte namene.

Razvio ga je Dennis Ritchie sedamdestih godina prošlog veka u Bell

Telephone Laboratories, Inc.

Opis jezika prvi put je predstavljen u knjizi Brian W. Kernighan, Dennis

M. Ritchie: The C Programming Language, Prentice-Hall, 1978.

Tokom sedamdesetih i osamdesetih godina jezik se brzo širio te je

American National Standard Institute (ANSI) pristupio njegovoj

standardizaciji koja je dovršena 1989. godine.

Jezik C je dizajniran za stvaranje malih, brzih programa.

Ima niži nivo od većine ostalih jezika - to znači da kreira kôd koji je

mnogo bliži onome što mašine zaista razumeju.

C se koristi tamo gde je brzina, prostor i prenosivost važna.

Većina operativnih sistema su napisani u C-u (Microsoft Windows

kernel, Linux, Mac, Mobile, Databases, 3D Movies, Embedded Systems,

Portability and Efficiency).

Većina ostalih računarskih jezika su takođe napisani u C-u (C++, C#,

Objective-C, Java, JavaScript, Go, Rust, Julia, Limbo, LPC, PHP,

Python, Perl). većina softvera za igru je napisanа na jeziku C.

7

1.1 Programsko okruženje Code::Blocks

Na vežbama ćemo koristiti programsko okruženje Code::Blocks.

nstalacija programskog okruženja Code::Blocks se može besplatno

preuzeti na sajtu http://www.codeblocks.org/ . Na sajtu je dostupna

instalaciona verzija za operativni sistem MS Windows i verzija za

operativni sistem Linux. Takođe, na sajtu se može preuzeti uputstvo za

rad sa programskim okruženjem Code::Blocks (pogledajte

http://www.codeblocks.org/user-manual ).

Sada ćemo se ukratko upoznati kako ćemo pisati i pokretati programe u

programskom okruženju Code::Blocks. Pokretanjem programskog

okruženja Code::Blocks dobijamo izgled ekrana kao na slici 1.

Slika 1: Programsko okruženje Code::Blocks

Potrebno je izabrati radni direktorijum u kojem ćemo čuvati projekte.

Neka je to, na primer, direktorijum C:\Temp\prvi. Sada ćemo napraviti

projekat. U glavnom meniju biramo opciju File, zatim biramo opciju New

Project i dobijamo prozor u okviru kojeg klikom biramo Console

Application kao što prikazuje slika 2.

8

Slika 2: Biramo vrstu projekta koji kreiramo

Ukoliko je sve pravilno urađeno dobijamo izgled ekrana kao što je

prikazano na slici 3.

Slika 3: Izgled ekrana sa fajlom main.c

Kada je tekst programa napisan potrebno ga je snimiti (biramo opciju

File, a zatim opciju Save). Program se pokreće tako što se u glavnom

meniju izabere opcija Build i dobija padajući meni u okviru kojeg se prvo

9

bira opcija Build (ili Ctrl+F9), a zatim opcija Run (ili Ctrl+F10). Takođe,

kada se u glavnom meniju izabere opcija Build u padajućem meniju

postoji opcija Build&run (ili F9) koja objedinjuje opciju Build i Run. Dakle,

kada je naš program napisan i snimljen, pritiskom na F9 dobijamo

korisnički ekran na kojem vidimo da je ispisana poruka Hello world, što

se može videti na slici 4.

Slika 4: Pokretanje snimljenog programa

Već postojeći projekat se može pokrenuti tako što se u glavnom meniju

izabere opcija File, a zatim opciju Open. Projekat ima ekstenziju .cbp.

10

1.2 Pisanje, kompajliranje i izvršavanje programa

Sledeći program je najmanji mogući program u C jeziku:

main()

{

}

Ne radi ništa.

Sledeći program ipak nešto radi:

#include <stdio.h>

main()

{

printf("TFMP\n");

}

Ispis programa:

TFMP

Za pisanje C-programa koriste se mala i velika slova, ali sve naredbe u

C-u moraju biti napisane malim slovima.

Početak C programa označava se sa:

main() – deklaracija funkcije main

Zagrade koje se nalaze nakon ključne riječi main označavaju da

program ne prima nikakve argumente

Dve zagrade, { i }, označavaju početak i kraj delova programa. Svrha

izraza

#include <stdio.h> (standardna biblioteka za ulaz i izlaz

podataka)

je da omogući upotrebu printf funkcije za ispis. Tekst koji će

ispisati printf() mora biti u navodnicima. Program ima samo jednu

naredbu

printf(“TFMP\n");

11

printf() je zapravo funkcija u C-u koja se koristi za formatirani ispis

varijabli i teksta. Tekst unutar navodnika " ", ispisuje se onako kako je

zadano.

Ipak postoje neki izuzetci - označavaju se znakovima: \ i % . Ovi znakovi

su modifikatori. U našem primeru \ koji prethodi znaku n predstavlja

oznaku prelaza u novi red.

Tako program ispisuje TFMP i kursor se postavlja na početak nove linije.

Kao što ćemo kasnije videti, znak koji sledi iza znaka \ određuje šta se

ispisuje, tj. 8 praznih mesta (tab), prazan ekran, prazna linija itd.

Sve naredbe u C-u završavaju se tačka-zarezom ;.

Pisanje koda:

Kôd je niz naredbi koje čine program.

Kôd se piše u EDITOR-u koji generiše tzv. ACSII file.

Napisanom kôdu se mora dati neko ime sa ekstenzijom .C .

Kompajliranje kôda:

je prevođenje napisanih naredbi u tzv. objektni kôd.

Kompajliranje se vrši pomoću posebnog programa – kompajlera

(prevodioca) koji generiše objektni kôd (datoteka s nastavkom .OBJ)

Povezivanje koda u izvršni program:

Povezivanje znači konačno formiranje izvršnog programa.

Povezivanje se vrši pomoću posebnog programa – linkera

(povezivač) koji generiše izvršni kôd (datoteka s nastavkom .EXE).

Ispravljanje grešaka:

Napisani program u svom izvornom kôdu može imati grešaka

koje prijavljuje kompajler ili linker.

Ako kompajler ili linker jave neku grešku, treba se vratiti korak ili

dva nazad, ispraviti greške i ponoviti postupak.

Ako kompajler i linker ne jave greške, program se može izvršiti

(što ne znači da je i dobar).

Izvršavanje programa

12

Konačni program koji se dobije nakon što linker izvrši svoj deo

posla (ako ne javi neku grešku) izvršava se ukucavanjem njegovog

naziva.

Traženje logičkih grešaka

Ako program radi, ali ne ispravno, treba potražiti logičke greške u

programu. To se obično radi s tzv. debuger programom koji između

ostalog omogućava izvršavanje jedne po jedne naredbe i uvid u

vrednost svih varijabli.

Komentari

Dodavanje komentara programu je poželjno. Komentari se u C

programu mogu dodati unutar znakova /* */:

/* ovo je komentar. */

Primetite da /* otvara polje komentara, a da ga */ zatvara. Komentari

mogu obuhvatati više linija. Međutim, ne mogu se gnezditi jedan unutar

drugog.

/* ovo je komentar. /* ovaj komentar je unutra */

pogrešno */

U gornjem primeru, prva pojava znaka */ zatvara komentar za čitavu

liniju, što znači da se reč pogrešno interpretira kao C izraz ili varijabla, i

u ovom primeru, generiše grešku.

Zašto se komentari koriste:

dokumentovanje varijabli i njihovo korišćenje

objašnjavanje složenih delova programa

opis programa, autor, datum, promene, revizije itd.

13

2 STRUKTURA C PROGRAMA

C programi u osnovi imaju sledeću strukturu:

/* ZAGLAVLJE */

/* Sadrži ime programa, ime autora, broj revizije...*/

/* INCLUDE deo */

/* sadrži #include izraze */

/* KONSTANTE I TIPOVI */

/* sadrži tipove i #define izraze */

/* GLOBALNE VARIJABLE */

/* ako postoje globalne varijable deklarišu se ovde */

/* FUNKCIJE */

/* funkcije koje definiše korisnik */

/* main() */

int main()

{

}

Pridržavanje ove dobro definisane strukture učinit će vaše programe

lakim za čitanje i modifikovanje .

14

3 TIPOVI PODATAKA PROGRAMSKOG JEZIKA C

Tip podatka označava način kodiranja i operacije koje je dozvoljeno

primeniti na programske varijable, čija je vrednost smeštena u memoriji

računara.

Položaj varijable u memoriji naziva se adresa ili memorijska referenca

varijable.

Programski jezik C ima ČET R osnovna tipa podataka: integer (ceo

broj), float (broj sa pokretnim zarezom jednostruke tačnosti), double

(broj sa pokretnim zarezom dvostruke tačnosti) ili character (jedan bajt,

može čuvati jedan znak iz lokalnog skupa znakova).

Celobrojni decimalni (INTEGER)

U ovaj tip podataka spadaju pozitivni i negativni celi brojevi. Takođe

imamo i unsigned int (samo pozitivni celi brojevi).

Postoje i short int i long int celi brojevi.

Ključna reč za definisanje celog broja je:

int

Primer deklaracije i dodeljivanja vrednosti integer varijable sum je,

int sum;

sum = 30;

Realni brojevi s pokretnim zarezom (FLOATING POINT)

Obuhvaćeni su i pozitivni i negativni realni brojevi. Ključna reč za

definisanje realnog broja je:

float ime_varijable;

Primer deklaracije i dodele vrednosti float varijable money:

float money;

money = 0.12;

15

Realni brojevi s eksponentom (DOUBLE)

To su brojevi zapisani u obliku realnog dela x 10 na eksponent, pozitivni

i negativni. Ključna reč koja se koristi za definisanje double varijabli je,

double

Primer:

double big;

big = 31.2E+7;

/* znači big=312000000 */

Znak (CHARACTER)

Ključna reč za deklarisanje znaka je

char

Primer:

char letter;

letter = 'A';

Primetite da se pridruživanje znaka A varijabli letter vrši stavljanjem

znaka u jednostruke navodnike. Varijabli se može pridružiti samo jedan

znak!

Primer programa koji pokazuje upotrebu svih tipova podataka:

#include < stdio.h >

main()

{

int sum;

float money;

char letter;

double pi;

sum = 10; /* pridruživanje integer vrednosti */

money = 2.21; /* pridruživanje float vrednosti */

16

letter = 'A'; /* pridruživanje character vrednosti */

pi = 2.01E6; /* pridruživanje double vrednosti */

printf("vrednost sum = %d\n", sum );

printf("vrednost money = %f\n", money );

printf("vrednost letter = %c\n", letter );

printf("vrednost pi = %e\n", pi );

}

Ispis programa:

vrednost sum = 10

vrednost money = 2.210000

vrednost letter = A

vrednost pi = 2.010000e+06

3.1 Varijable

Varijable koje definiše korisnik moraju biti deklarisane pre nego što će

se koristiti u programu.

C razlikuje mala i velika slova, tako da iako dve varijable imaju isto ime,

u C-u se smatraju različitim varijablama:

sum, Sum

Deklaracija varijabli vrši se nakon otvorene zagrade main().

Primer: Prikaz ispisa vrednosti celobrojne promenjive koristeći

printf("%d")

#include <stdio.h>

main()

{

/* definisanje promenljive i sa dodeljivanjem vrednosti 2 */

int i = 2;

/* ispis vrednosti */

printf("Vrednost promenjive i je %d\n",i);

17

}

Osnovni format deklarisanja varijabli je:

tip podatka var1, var2, ... ;

gdje je tip podataka jedan od četiri osnovna tipa podataka: integer

(ceo broj), character (jedan bajt, može čuvati jedan znak iz lokalnog

skupa znakova), float (broj sa pokretnim zarezom jednostruke tačnosti)

ili double (broj sa pokretnim zarezom dvostruke tačnosti).

Imena varijabli moraju započinjati slovom ili znakom _, a nakon toga

bilo kakvom kombinacijom slova, znaka _, ili cifara 0 - 9.

Primeri dozvoljenih imena varijabli:

zbroj izlazna_zastavica Jerry7

Broj_poteza _važeća_zastavica

Koristite imena sa značenjem za vaše varijable. Razlozi za to su:

imena sa značenjem na prvi pogled pokazuju šta varijabla radi

lakša su za razumevanje

nema povezanosti s korišćenjem prostora u izvršnom kodu (

.EXE file )

čine program lakšim za čitanje

Pogledajmo sada pobliže printf() funkciju. Ima dva argumenta, odvojena

zarezom. Pogledajmo prvi argument,

"Vrednost promenjive i je %d\n"

Znak % je posebni znak u C-u. Koristi se za ispis vrednosti

varijable. Kad se program izvršava, C ispisuje tekst dok ne naiđe na

znak % .

Kada naiđe, traži sledeći argument (u ovom slučaju i), ispisuje njegovu

vrednost, te nastavlja.

Znak d koji prati % označava da se očekuje integer tip varijable.

18

Tako, kada se naiđe na znak %d printf() funkcija traži sledeći argument

(u ovom slučaju varijablu i, koja iznosi 2), i ispisuje ga. Znak \n se nakon

toga izvršava što znači da se kursor prebacuje u novi red.

Sledeći program ispisuje dve celobrojne vrednosti razdvojene

tabulatorom:

To se postiže korišćenjem specijalnog znaka \t

#include <stdio.h>

main()

{

int sum, value;

sum = 10;

value = 15;

printf("%d\t%d\n", sum, value);

}

Ispis programa

10 15

Znakovi koji se nalaze iza \ znaka u printf() naredbi, imaju sledeće

značenje:

Modifikator Značenje

\b pomak za jedno mjesto u nazad

(backspace)

\f nova stranica (form feed)

\n novi red (new line)

\r povratak na početak linije (carriage

return)

19

\t horizontalni tabulator (horizontal tab)

\v vertikalni tabulator (vertical tab)

\\ obrnuta kosa crta (backslash)

\" navodnici (double quote)

\' literal (single quote)

\<enter> sledeća linija (line continuation)

\nnn nnn = oktalna vrednost znaka

\0xnn nn = heksadecimalna vrednost (samo

neki kompajleri)

Specifikatori formata za ispis varijabli:

%d decimalni cjelobrojni (integer)

%c znak (character)

%s string ili niz znakova (character array)

%f realni brojevi s pokretnim zarezom

(float)

%e realni brojevi s pokretnim zarezom

dvostruke tačnosti (double)

20

3.2 Funkcije printf i scanf

Funkcija scanf služi za učitavanje podataka sa standardnog ulaza.

Opšta forma funkcije je:

scanf(kontrolni_string, arg_1, arg_2, ... ,arg_n)

gde je kontrolni string konstantni niz znakova koji sadrži informacije o

vrednostima koje se učitavaju u argumente arg 1,. . . ,arg n.

Kontrolni niz znakova (string) je konstantan niz znakova koji se sastoji

od individualnih grupa znakova konverzije pri čemu je svakom

argumentu pridružena jedna grupa. Svaka grupa znakova konverzije

započinje znakom % kojeg sledi znak konverzije koji upućuje na tip

podatka koji se učitava. Npr. %c ili %d itd.

Najčešće korišćeni znakovi konverzije navedeni su u sledećoj tablici:

znak konverzije tip podatka koji se učitava

%c

%d

%e,%f,%g

%h

%i

%o

%u

%x

%s

%p

jedan znak (char)

decimalni cijeli broj (int)

broj s pokretnim zarezom (float)

kratak cijeli broj (short)

decimalni, heksadecimalni ili oktalni cijeli

broj (int)

oktalni cijeli broj (int)

cijeli broj bez predznaka (unsigned int)

heksadecimalni cijeli broj (int)

string (char *)

pokazivač (void *)

Funkcija printf služi za ispis podataka na standardnom izlazu. Opšta

forma funkcije je:

printf(kontrolni_string, arg_1, arg_2, ... ,arg_n)

21

gde je kontrolni string konstantan niz znakova koji sadrži informaciju o

formatiranju ispisa argumenata arg 1,. . . ,arg n.

printf("%d\t%d\n", broj1, broj2);

uvek je prvi argument izmedju " "

%d ceo broj

\t tab izmedju

\n novi red

Svaka % konstrukcija je u paru sa argumentom koji sledi.

Primer 1. Prikazuje unos celog broja koristeći scanf("%d", &x)

Primer 2. Prikazuje zaokruživanje realnog broja prilikom ispisa

(%.2f)

22

Primer 3. Program sabira dva uneta cela broja

Primer 4. Ilustracija štampanja karaktera - format %c

23

Primer 5. Ilustruje ispis karaktera i niza karaktera (%c i %s) kao i

ascii vrednosti karaktera (%d)

24

4 OPERATORI I IZRAZI

4.1 Aritmetički operatori

Operator Značenje

+

-

*

/

%

sabiranje

oduzimanje

množenje

deljenje

moduo - izdvaja ostatak pri deljenju celih brojeva

Asocijativnost sleva na desno, prioritet kao u matematici.

Primer 1. Program ilustruje neke od aritmetičkih operacija

25

4.2 Relacioni operatori

Četiri relaciona operatora su:

Operator Značenje

< manje

<= manje ili jednako

> veće

>= veće ili jednako

Oni imaju isti prioritet, niži od prioriteta aritmetičkih operatora, a

asocijativnost im je sleva na desno.

Operatori jednakosti su:

Operator Značenje

== jednako

!= različito

Oni spadaju u zasebnu prioritetnu grupu s manjim prioritetom od

relacionih operatora i asocijativnost im je sleva na desno.

Primer: a < 5 != 1 <=> (a < 5)!=1

Rezultat izvršavanja operacija je 1 ako je uslov ispunjen i 0 u

suprotnom.

4.3 Logički operatori

U jeziku C postoje tri logičke operacije:

! unarna negacija (najviši prioritet)

&& logičko i (konjukcija) (viši prioritet od ili)

|| logičko ili (disjunkcija)

izračunavaju se sleva na desno!

Operacija ! (negacije) je unarna i daje rezultat 1 ako je operand jednak

0, i daje rezultat 0 ako je operand 1.

26

Operacija && (konjukcije) je binarna i daje 1 ako su oba operanda

različita od nule, i 0 u suprotnom. Pri izvršavanju ove operacije desni

operand se ignoriše ako je levi operand jednak 0.

Operacija || (disjunkcije) je binarna i daje 1 ako je bar jedan od operanda

različit od nule, i 0 u suprotnom. ovde se izvršavanje realizuje s leva na

desno i desni operand se ignoriše ako je levi operand jednak 0.

Primer 2. Ilustracija logičkih i relacijskih operatora

4.4 Operatori i izrazi dodeljivanja vrednosti

Osnovni operator dodeljivanja je =. Naredba dodeljivanja je oblika:

promenljiva = izraz;

i izvršava se tako da se vrednost desnog operanda (izraz) dodeljuje

levom operandu (promenljiva) koji predstavlja vrednost izraza sa

operacijom dodeljivanja.

Na primer:

i=2;

a=3.17;

c=’m’;

27

Operacije dodeljivanja se izvšavaju s desna na levo i nižeg su prioriteta

od aritmetičkih operacija, relacionih operacija i logičkih operacija.

Višestruko dodeljivanje:

promenljiva1 = promenljiva2 = promenljiva3 = ... = izraz;

Niz dodeljivanja ide zdesna na levo. To znači da se izraz jednom

izračuna i zatim se redom dodeljiuje promenljivima ... promenljiva3,

promenljiva2, promenljiva1.

Na primer:

x = y = cos(3.22);

je ekvivalentno s

x = (y = cos(3.22));

odnosno

y = cos(3.22);

x=y;

Složeni operatori dodeljivanja su:

+= -= *= /= %=

Opšti izraz oblika:

izraz1 op= izraz2;

gde je op jedna od operacija +, -, *, /, %, ekvivalentan je s

izraz1 = izraz1 op izraz2;

Ovi operatori spadaju u istu prioritetnu grupu s operatorom = i

izračunavaju se zdesna na levo. Prioritet im je manji od prioriteta

aritmetičkih i logičkih operatora.

Primeri:

Izraz Ekvivalentan izraz

i +=5 i=i+5

i -=j i=i-j

i *=j+1 i=i*(j+1)

28

i /=4 i=i/4

i %=2 i=i%2

4.5 Inkrementacija i dekrementacija

Operator inkrementiranja ++ povećava promenljivu za jedan. Tako je

izraz:

x++;

ekvivalentan izrazu:

x=x+1;

Operator dekrementiranja -- smanjuje vrednost promenljive za 1,

odnosno

x--;

je ekvivalentno izrazu:

x=x-1;

Izraz x++ i x-- mogu se pojaviti kao elementi složenijih izraza i zbog toga

imaju dve forme. Možemo pisati x++ ili ++x i isto tako x-- ili --x. U oba

slučaja promenljiva x se povećava (umanjuje) za 1. Razlika između

prefiks i postfiks notacije pojavljuje se u složenim izrazima.

U prefiks notaciji (++x, --x) promenljiva će biti promenjena pre nego što

će njena vrednost biti iskorišćena u složenom izrazu;

U postfiks notaciji (x++, x--) promenljiva će biti promenjena nakon što će

njena vrednost biti iskorišćena u složenom izrazu.

Na primer, ako je x=3, onda izraz

y=++x;

daje y=4, x=4, a izraz

y=x++;

daje y=3, x=4.

29

Primer 3. Ilustracija prefiksnog i postfiksnog operatora ++

30

5 PROGRAMSKE UPRAVLJAČKE STRUKTURE

5.1 Kontrola toka - if

if (izraz)

naredba1

else

naredba2

Ona funkcioniše na ovaj način: prvo se testira izraz i ako je zadovoljen

izvršava se naredba1, a ako nije izvršava se naredba2.

Primer 1. Program ilustruje kontrolu toka - if

Else se odnosi na prvi neuparen if, voditi o tome računa, ako želimo

drugačije moramo da navedemo vitičaste zagrade.

if (izraz)

if (izraz1) naredba1

else naredba

ovo else se odnosi na drugo if a ne na prvo if!

if (izraz)

{

if (izraz1) naredba1

}

else naredba

31

tek sada se else odnosi na prvo if!!!

5.2 Kontrola toka - else-if

if (izraz1)

naredba1

else if (izraz2)

naredba2

else if (izraz3)

naredba3

else if (izraz4)

naredba4

else naredba

npr if (a<5)

printf("A je manje od 5\n");

else if (a=5)

printf("A je jednako 5\n");

else if (a>10)

printf("A je vece od 10\n");

else if (a=10)

printf("A je jednako 10\n");

else printf("A je vece od pet i manje od 10\n");

32

Primer 1. Program ilustruje if-else konstrukciju i ispituje znak broja

5.3 Organizacija ciklusa while, do - while, for

5.3.1 while

Operator ciklusa sa preduslovom while omogućava organizovanje

ciklusa sa nepoznatim brojem ponavljanja, koji zavisi od izračunavanja u

telu ciklusa. Operator koji obrazuje telo ciklusa može biti prost ili složen.

Opšti oblik operatora while je:

while(izraz)

operator

Uslov u zagradi se testira i ako je ispunjen telo petlje se izvršava. Zatim

se uslov ponovo testira i ako je ispunjen ponovo se izvršava telo petlje.

tako sve dok uslov ne bude ispunjen. Tada se izlazi iz petlje i nastavlja

sa prvom sledećom naredbom u programu. Ukoliko iza while sledi samo

jedna naredba nema potrebe za zagradama.

33

Primer 2. Program ilustruje petlju - while

5.3.1 do - while

Operator ciklusa sa postuslovom do - while

do

operator

while (izraz)

Operator koji čini telo ciklusa se izvršava bar jedanput, pošto se provera

uslova vrši na kraju ciklusa. Ako je vrednost izraza ispunjena (tačna),

operator tela ciklusa se ponavlja, i ovaj postupak traje, dok izraz ne

dobije vrednost netačno. Operator koji obrazuje telo ciklusa može biti

prost ili složen.

34

Primer 3. Program ilustruje petlju do - while

5.3.1 for

Operator ciklusa for omogućava kompaktniji zapis ciklusa while.

Pogodan je u slučajevima kada je unapred poznato koliko puta treba

izvršiti telo ciklusa.

Operator ciklusa for ima sledeći oblik:

for (inicijalizacija; provera_uslova; korekcija)

operator

Predstavlja skraćeni zapis ciklusa while oblika:

inicijalizacija;

while (provera_uslova)

{

operator

korekcija

}

35

U operatoru for se navode tri izraza koji upravljaju izvršavanjem ciklusa i

razdvajaju se ; . zraz za inicijalizaciju se kao što se može videti iz while

ekvivalenta izračunava samo jedanput i to pre provere uslova za izlazak

iz ciklusa. Ako provera_uslova daje tačno (ili opštije ako je vrednost

izraza različita od nule) telo ciklusa se izvršava jedanput.

Zatim se izračunava vrednost izraza korekcije i ponovo izračunava

vrednost izraza za proveru uslova. Iz ciklusa se izlazi kada vrednost

izraza za proveru uslova postane netačno (ili opštije ako je vrednost

izraza jednaka nuli). Operator koji obrazuje telo ciklusa može biti prost ili

složen.

Primer 4. Program ilustruje petlju for

5.4 Uslovni operator: ?

Skraćeni zapis operatora if – else realizuje se pomoću “uslovnog izraza”

koji koristi operaciju: ?:

Ova operacija ima dva dela i sadrži tri operanda - sva tri su izrazi.

(izraz1) ? (izraz2) : (izraz3)

Ako je izraz1 različit od nule (tačno) to je vrednost celog uslovnog izraza

vrednost od izraz2; ako je izraz1 jednak nuli (netačno), tada je vrednost

celog izraza vrednost od izraz3. Od prvog operanda zavisi koji će od

sledeća dva operanda biti vrednost izraza.

Uslovni izrazi su kompaktniji i obično doprinose formiranju kompaktnijeg

mašinskog koda.

36

Npr. izraz:

(6>2) ? 1:2 ima vrednost 1;

(6<2) ? 1:2 ima vrednost 2;

Primer 5. Program ilustruje uslovni operator: ?

37

5.5 Operator višestrukog izbora - Switch

Operator višestrukog izbora switch omogućava organizaciju grananja u

programu izborom jednog između više operatora.

Može se realizovati sa više if operatora, međutim programiranje

korišćenjem switch operatora je često prostije i jasnije.

ma sledeći oblik:

switch (izraz)

{

case konstanta1:

operator1

...

break;

case konstanta2:

operator2

...

break;

...

case konstantaN:

operatorN

...

break;

default:

operatorO

...

break;

}

za rezervisane reči switch navodi se izraz čija je vrednost celobrojna (ili

znakovna, jer se automatski konvertuje u celobrojnu), koji se naziva

selektor.

Ispred svake grupe operatora se ispisuju celobrojne konstante ili

celobrojni konstantni izrazi, koji predstavljaju njihovo obeležje.

Operatorom višestrukog izbora se izvršava ona grupa operatora ispred

koje se nalazi konstanta (ili konstantni izraz) koja je jednaka vrednosti

selektora.

Ako vrednost selektora nije jednaka ni jednoj od konstanti koje

predstavljaju obeležja grupa operatora, izvršiće se grupa operatora koja

se nalazi iza default alternative;

38

Ako se izostavi default neće se izvršiti ni jedna od alternativa operatora

switch.

sta konstanta se ne sme pojaviti kao obeležje za dve grupe operatora.

Break operator se koristi da bi se obezbedio izlaz neposredno iza njega.

Ukoliko se iza neke grupe operatora u switch ispusti break operator

tada će se u slučaju izbora te grupe izvršavati i sve prostale alternative

do pojave break ili kraja switch operatora.

Dozvoljeno je jednoj grupi operatora dodeliti više konstanti koje čine

njihovo obeležje.

switch (i)

{

case 1:case 5:case 6:x=x+2; break;

case 2:case 3:case 4:x=x-2; break;

case 7:x=x+1; break;

default: printf(“Nekorektan broj\n”);

}

Primer 6. Program ilustruje upotrebu switch-a

39

Primer 7. Ilustracija switch konstrukcije

5.6 Break i Continue

Break može da se koristi unutar switch naredbe, ali i unutar petlje

(uključujući sve tri vrste petlje).

Kada se koristi unutar petlje, break prouzrokuje nasilan izlazak iz petlje.

Continue se ređe koristi, on prouzrokuje da se pređe na sledeću

iteraciju u petlji.

5.7 Operator sizeof()

Sizeof operator izračunava veličinu tipa odnosno promenjive.

Sizeof operator vraća veličinu svog operanda u bajtovima. U C-u se

jedan bajt definše kao broj bitova potreban za pamćenje podatka tipa

char. Na računarima je to osam bitova.

40

Primer 8. Demonstracija sizeof operatora

41

6 FUNKCIJE

6.1 Definicija funkcije

Funkcije se dele na dve kategorije:

Funkcije koje vraćaju vrednost (rezultat) i

Funkcije koje ne vraćaju vrednost pozivajućoj funkciji (main ili

neka druga)

Funkcije ima sledeći oblik:

tip_rezultata ime_funkcije (formalni parametri)

opis formalnih parametara

{

definicije i deklaracije

operator1

...

operatorN

}

Kod funkcija koje ne vraćaju vrednost kao tip rezultata navodi se void.

Ako je izostavljen tip_rezultata podrazumeva se int.

Navođenje formalnih parametara nije obavezno

ANSI standard C-a dozvoljava da se formalni parametri deklarišu unutar

zagrada u zaglavlju funkcije, ali se tada za svaki parametar posebno

opisuje tip:

tip ime_funkcije (tip param1, tip param2,..., tip paramN)

Među operatorima u telu funkcije se može naći operator povratka u

pozivajuću funkciju return.

Ako se on ne navede funkcija se završava izvršenjem poslednjeg

operatora u telu funkcije.

Ako se navede samo

return;

42

funkcija u kojoj se on nalazi prekida izvršavanje i prelazi se na

izvršavanje sledećeg operatora pozivajuće funkcije.

Ako se navede:

return izraz;

tada funkcija predaje vrednost pozivajućoj funkciji.

Poziv funkcije koja daje rezultat realizuje se navođenjem:

ime_funkcije (spisak stvarnih parametara)

u slučaju da funkcija ne daje rezultat dopisuje se još i ; čime ona postaje

operator:

ime_funkcije (spisak stvarnih parametara);

Ako se iz jedne funkcije poziva druga čiji tip nije int (ili char) onda se

funkcija koja se poziva mora deklarisati u funkciji iz koje se poziva:

tip ime_funkcije()

gde je tip – tip vrednosti koju funkcija vraća.

Pored imena funkcije koja se poziva mora se staviti () da bi se znalo da

se radi o funkciji.

Ova deklaracija se može izostaviti u slučaju da je definicija funkcije koja

se poziva data pre funkcije iz koje se poziva.

Ako tip vrednosti koju vraća funkcija nije int njen tip treba deklarisati

tamo gde se definiše i tamo gde se koristi.

Među funkcijama u C-u nema nikakvih prioriteta, sem što se funkcija

main() prva izvršava.

43

Primer 1. main funkcija ilustruje koričćenje funkcije suma_kvadrata

Primer 2. Program ilustruje koričćenje funkcije sum koja sabira dva

broja

44

Primer 3. Deklaracija funkcije može da stoji nezavisno od definicije

funkcije. Deklaracija je neophodna u situacijama kada se definicija

funkcije navodi nakon upotrebe date funkcije u kodu.

45

Primer 4. Program koji na standardnom ulazu prima četiri

celobrojne vrednosti i vraća najmanju unetu vrednost pozivajući

funkciju koja uzima dve celobrojne vrednosti, poredi ih i vraća

vrednost manje

46

6.2 Pokazivači

Pokazivač je promenljiva koja sadrži adresu promenljive.

Pokazivač se deklariše na ovaj način:

int *iPok; // pokazivač na tip int

double *dPok; // pokazivač na tip double

float *fPok; // pokazivač na tip float

char *cPok; // pokazivač na tip char

Primer 5. Program ilustruje osnovne pojmove o pokazivačima

Pošto pokazivač sadrži adresu možemo zaključiti da bez obzira na koji

tip pokazuju, svi pokazivači su istog formata, tj. veličina memorija svih

pokazivača je ista (ako su adrese 32 bita, onda će svaki pokazivač

zauzimati 32 bita).

47

Primer 6. Napisati program koji će primenom operatora sizeof

odrediti veličinu memorije u bitima koja je potrebna za smeštanje

podataka tipa: char, int, double, char*, int* i double*

Kada kažemo da neki pokazivač ≪pokazuje≫ na neku promenljivu, to

zapravo znači da je adresa te promenljive sadržaj pokazivača.

Unarni operator & vraća memorijsku adresu nekog podatka (na primer,

&x).

Primenom unarnog operatora * može se posredno pristupiti nekom

podatku pomoću memorijske adrese (na primer, *p).

48

Primer 7. Program ilustruje korišćenje unarnog operatora & i

unarnog operatora *

6.3 Veza između funkcija korišćenjem pokazivača

Predaja vrednosnih parametara funkciji je pogodna kada funkcija vraća

vrednost bez promene svojih stvarnih parametara.

Kada je potrebno da funkcija menja vrednost svojih stvarnih parametara,

ili ukoliko je potrebno da funkcija vraća više izlaznih vrednosti, mora se

koristiti druga tehnika predaje parametara, kao što je prenos adrese

stvarnih parametara.

49

Primer 8. Program ilustruje korišćenje funkcije koja izračunava zbir

kvadrata i zbir kubova celih brojeva od m do n - primer kada se

koriste vrednosni, a kada adresni parametri

50

6.4 Nizovi

Niz je ograničen skup promenljivih istog tipa, koje se nazivaju

komponente.

Tip komponenti se naziva bazni tip.

Vrednostima pojedinih komponenti može se pristupiti pomoću indeksa,

koji ukazuje koju komponentu treba obrađivati.

Pri definisanju nizova treba voditi računa o dve stvari:

Treba ukazati na broj komponenti i način referisanja na

komponente

Treba ukazati na tip vrednosti koje se u njima čuvaju

Niz se opisuje kao i ostali podaci, samo što se dodaju kvadratne

zagrade [ ] iza imena niza.

Unutar zagrada se navodi broj koji pokazuje broj elemenata u nizu.

Npr. linearni niz od 1000 celih brojeva sa imenom broj se deklariše na

sledeći način:

int broj[1000];

Ovim se uvodi niz broj koji se sastoji od 1000 celobrojnih promenljivih sa

imenima broj[0], broj[1],…, broj[999].

Indeksiranje elemenata niza je od 0, a ne od 1.

Za njih kompajler rezerviše potrebne memorijske lokacije u kojim se u

toku izvršavanja programa čuvaju vrednosti promenljivih. Svaka

promenljiva pošto je celobrojna zauzima dva bajta.

17 broj[0] (sadrži prvi broj, npr. 17)

14 broj[1] (sadrži drugi broj, npr. 14)

6 broj[2] (sadrži treći broj, npr. 6)

... ...

... ...

7 broj[999] (sadrži hiljaditi broj, npr. 7)

51

Obraćanje komponentama niza ostvaruje se navođenjem imena niza, za

kojim se između kvadratnih zagrada nalazi izraz, koji definiše indeks

odgovarajućeg elementa niza.

Vrednost izraza koji definiše indeks mora biti celobrojna.

Ako je indeks niza manji od nule ili veći ili jednak od broja elemenata

niza neće se pristupiti elementu niza.

Da bi dodelili 1 drugom (numeracija od 0) elementu niza broj pisaćemo:

broj[2]=1;

Sledećim deklaracijama su definisani nizovi:

int a[22];

char b[30];

long c[100];

Niz ili elementi niza se mogu predavati kao parametri funkcije.

Primer 9. Program ilustruje korišćenje statičkih nizova

52

Primer 10. Program pronalazi maksimum brojeva sa ulaza - verzija

sa nizom

53

Primer 11. Program sortira uneti niz po rastućem redosledu, zatim

ga ispisuje

54

55

Primer 12. Program koji iz unetog niza od n članova ispisuje samo

parne brojeve

56

Primer 13. Program za izračunavanje skalararnog proizvoda dva

vektora pomoću nizova. Rešenje preko funkcija

57

Primer 14. Program za unos elemenata matrice 3x3 i izračunavanje

zbira elemenata na glavnoj dijagonali

58

Primer 15. Napisati program koji od unetog niza A (maksimalne

dužine 30 elemenata) generiše kvadratnu matricu M čiji su elementi

reda vrednosti iz niza A pomnoženi brojem kolone. Ispisati matricu

u tabelarnom formatu

59

Primer 16. Napisati program za rotiranje članova niza. Niz i broj

mesta za rotiranje unose se sa tastature

60

Primer 17. Program za ispis Fibonacijevih brojeva. Rešenje preko

rekurzije.

61

Primer 18. Strukture se u funkcije prenose po vrednosti. Moguće je

koristiti pokazivače na strukture

62

6.5 Znakovni nizovi

U C programskom jeziku ne postoji tip string, nego se koristi niz

znakova(niz čiji je osnovni tip char).

U znakovni tip podataka (tip char) spadaju:

-velika i mala slova abecede

-Cifre

-Upravljački znakovi –način predstavljanja u programima

('\f','\v','\n','\t')

-Specijalni znaci (*,/,?,!,+...)

Celobrojni tip char, predviđen je za predstavljanje pojedinačnih znakova

i veličine je 1B.

Da bi se znaci razlikovali od simboličkih naziva promenjivih obično se

stavljaju između apostrofa.

Primer: slovo A predstavlja simbolički naziv promenjive, dok ’A’

predstavlja binarno kodiranje slova A.

Niz znakova na jeziku C koji na svom kraju ima specijalni karakter ’\0’ se

naziva string.

-Karakter’\0’ se naziva terminalni simbol i on označava kraj

stringa

-na taj način sve funkcije koje rade sa stringovima mogu da

odrede kraj stringa bez eksplicitnog podatka o njegovoj dužini.

-zadatak programera je da prilikom manipulacije stringovima

obezbedi ispravno postavljanje završnog znaka.

-prilikom čitanja stringa koristi se konverzija %s

Za obradu stringova koriste se bibliotečke funkcije iz standarnog

zaglavlja

<string.h> kao što su :

-strlen(s)-vraća dužinu stringa s

primer za strlen():

char rec1[10] = "abc";

63

printf("%d", strlen(rec1)); rezultat: 3

-strcpy(t,s)-kopira string s u string t i prepisuje završni znak

primer za strcpy():

char bafer[6];

char rec[ ] = "abc";

strcpy(bafer, rec);

puts(bafer); rezultat:abc

- strncpy()- za kopiranje dela jednog stringa u drugi, od početka

drugog

primer za strncpy():

char rec1[ ] = "abcde";

char rec2[ ] = "fgh";

strncpy(rec1, rec2,2);

puts(rec1); rezultat: fgcde

-strcat(t,s)-nadovezuje string s na kraj stringa t

primer za strcat():

char rec1[6] = "ab";

char rec2[ ] = "cde";

strcat(rec1, rec2);

puts(rec1); rezultat: abcde

- strncat()- za kopiranje dela jednog stinga u drugi, u produžetku

sadržaja drugog

primer za strncat():

char rec1[6] = "ab";

char rec2[ ] = "cde";

64

strncat(rec1, rec2, 1);

puts(rec1); rezultat: abc

Za konverziju stringova koriste se funkcije iz standardnog zaglavlja

<stdlib.h>

kao što su:

atoi()-služi za konverziju stringa u ceo broj

Primer:

char niz[]=125.13

printf(„\n ceo broj je :%d“, atoi(niz));

rezultat: 125

primer za atoi():

char tekst1[ ] = " 5";

char tekst2[ ] = "0010";

char tekst3[ ] = "20 i neki tekst";

char tekst4[ ] = "30.15";

char tekst5[ ] = "neki tekst 40";

printf("\nceo broj: %d", atoi(tekst1)); rezultat:5

printf("\nceo broj: %d", atoi(tekst2)); rezultat:10

printf("\nceo broj: %d", atoi(tekst3)); rezultat:20

printf("\nceo broj: %d", atoi(tekst4)); rezultat:30

printf("\nceo broj: %d", atoi(tekst5)); rezultat: 0

atof() –služi za konverziju u realan broj

Primer:

char niz[]=125.13

printf(„\n ceo broj je :%f“, atof(niz));

65

rezultat: 125.1300 /* u memoriji se rezerviše 8 mest, rezultat

zauzima 7 mesta a osmo mesto je ’\0’*/

Deklaracija i inicijalizacija stringova

-postoji više načina inicijalizacije znakovnih nizova:

char niz[8]=“zdravo“- u ovom slučaju maksimalna dužina niza je

8 računajući i oznaku kraja stringa ’\0’.

char niz[]=“zdravo“- predstavlja niz od 8 znakova: ’z’ ’d’ ’r’ ’a’ ’v’

’o’ ’\0’. Tj. kompajler sam prebrojava koliko ima znakova računajući i ’\0’.

char niz[]={’z’ ’d’ ’r’ ’a’ ’v’ ’o’ ’\0’}- i ovaj način inicijalizacije

znakovnog niza je istovetan sa prethodnim.

Kreiranje stringova i praktična primena

#include<stdio.h>

#include<ctype.h>

main(){

char s1[80+1], s2 [40+1],s3[80+1][10]; /*definisanje dužine stringa*/

int i, duzina, brojacc=0,brojacs=0,brojacz=0,Max=0,imax;

/*formiranje stringa*/

printf(„\nunesite string“)

gets (s1);

/*brojanje slova, cifara i ostalih znakova*/

for(i=0;i<strlen(s1);i++)

{ if(isdigit(s1[i])

brojacc++,

else if(isalpha(s1[i]))

brojacs++;

else brojacz++;

66

printf(„\ncifara ima:%d, slova ima:%d, ostalih znakova ima:%d“,

brojacc,brojacs,brojacz);

/*određivanje najduže rečenice od zadatih 10*/

imax=0;

for (i=1;i<10;i++)

if (strlen(s3[i]>strlen (s3[imax]))

Imax=i;

printf(„\nmaksimalna dužina stringa je: %d i to je

rečenic:%s“,s3[imax],s3[imax]);

/*poređenje dužine i sadržaja stringova*/

x=strcmp(s1,s2);

if (x==0)

puts („sadržaji stringova su isti“);

else if (x>0)

puts („prvi string je veći“);

else

puts(„drugi string je veći“);

67

Primer 19. strlen() - za određivanje dužine stringa bez znaka null na

kraju

Primer 20. strcmp()-za poređenje kompletnih sadržaja dva stringa

68

Primer 21. strncmp()-za poređenje delova sadržaja dva stringa

Primer 22. strcpy()-za kopiranje jednog stringa u drugi, od početka

drugog

69

Primer 23. strncpy()-za kopiranje jednog dela stringa u drugi, od

početka drugog

Primer 24. strcat()-za kopiranje jednog stringa u drugi, u

produžetku sadržaja drugog

Primer 25. strncat()-za kopiranje jednog dela stringa u drugi, u

produžetku sadržaja drugog

70

Primer 26. atoi()-za konverziju stringa u ceo broj

Primer 27. atof()-za konverziju stringa u realan broj

71

Primer 28. određivanje broja velikih slova, malih slova i cifara u

tekstu

Primer 29. određivanje broja velikih slova, malih slova i cifara u

tekstu - drugo rešenje

72

Primer 30. to_upper, to_lower - funkcije konverzije u velika,

odnosno mala slova

73

Primer 31. strlen, strcpy, strcat, strcmp, strchr, strstr - manipulacija

nizovima karaktera

74

75

76

Primer 32. string_reverse - obrće niz karaktera

77

Primer 33. Program za sortiranje u alfabetskom redosledu učitanog

niza stringova. Određivanje dužine sortiranih stringova

78

79

7 DATOTEKE

Vrste datoteka:

- binarne

sadržaj čine podaci predstavljeni u binarnom obliku

proizvoljan tip sadržaja

- tekstualne

sadržaj čine podaci koji odgovaraju karakterima nekog kodnog sistema:

ASCII, EBCDIC, UTF-8, UTF-16

plain-text

Radnje nad datotekama:

otvaranje i zatvaranje

pristup

čitanje, pisanje, pozicioniranje

provera statusa

kreiranje i brisanje

Datotečki tip podatka

tip podatka koji predstavlja datoteku u programu:

FILE*

pokazivač na tip F LE

FILE je u osnovi struktura

deklarisana u zaglavlju stdio.h

primer deklaracije pokazivača datoteke:

80

FILE *f;

svaki ulaz i izlaz C programa se posmatra kao datoteka

tri ugrađene datoteke:

stdin - standardni ulaz

podrazumevano učitavanje vrednosti sa tastature

stdout - standardni izlaz

podrazumevano prikazivanje vrednosti na ekranu

stderr - standardni izlaz za poruke

poruke o greškama, prikazuje na ekranu

infrastruktura za rad sa datotekama:

<stdio.h>

Otvaranje datoteke

funkcija:

FILE *fopen (const char *naziv, const char *rezim);

naziv - naziv datoteke koja treba da bude otvorena

u skladu sa pravilima operativnog sistema

rezim - oznaka načina korišćenja datoteke

povratna vrednost

pokazivač na otvorenu datoteku ili

NULL vrednost ako otvaranje nije uspešno izvršeno

obavljati proveru povratne vrednosti

81

mogući režimi rada - tekstualne datoteke

"r"

čitanje postojeće datoteke

"w"

pisanje u već postojećoj datoteci

prethodni sadržaj biva uništen

pisanje u novoj datoteci

automatski se kreira nova datoteka ako ne postoji neka sa datim

nazivom

"a"

append

dodavanja sadržaja na kraj postojeće datoteke

ako datoteka sa datim nazivom ne postoji, biće kreirana

"r+" - čitanje i pisanje u postojećoj datoteci

"w+" - čitanje i pisanje

u postojećoj datoteci

prethodni sadržaj biva uništen

u novoj datoteci

automatski se kreira nova datoteka ako ne postoji neka

sa datim nazivom

"a+"

čitanje i dodavanja sadržaja na kraj postojeće datoteke

ako datoteka sa datim nazivom ne postoji, biće kreirana

82

primer:

FILE *f = fopen("sadrzaj.txt","r+");

mogući režimi rada - binarne datoteke

dodavanje slova b u opis režima

logika ostaje ista kao kod tekstualnih datoteka

moguće kombinacije "rb", "wb", "ab"

"r+b", "w+b", "a+b" "rb+", "wb+", "ab+" (identično kao prethodna tri)

primer: FILE *f = fopen("sadrzaj.bin","r+b");

Zatvaranje datoteke

funkcija

int fclose(FILE *f); f - pokazivač na prethodno otvorenu datoteku koja

treba da bude zatvorena

povratna vrednost 0 ako je zatvaranje uspešno

konstanta EOF ako je došlo do greške

automatsko zatvaranje

pri završetku izvršavanja programa

kraj main funkcije

sve otvorene datoteke bivaju zatvorene

ne oslanjati se na to

eksplicitno zatvoriti svaku otvorenu datoteku

83

Primer 1. Program demonstrira otvaranje datoteka ("r" - read i "w" -

write mod) i osnovne tehnike rada sa datotekama

84

Primer 2. Program demonstrira "a" - append mod datoteka -

nadovezivanje

85

Primer 3. Program demonstrira telefonski imenik sa unosom

adrese i telefona kao i pretragom po tri prva slova sličnosti u imenu

i prezimenu

86

87

Primer 4. Program demonstrira upis zadatog niza brojeva u binarnu

datoteku i čitanje sadržaja iste datoteke

88

Primer 5. Program demonstrira čitanje sadržaja određenog dela

binarne datoteke u koju je prethodno upisan zadati niz

89

Primer 6. Program demonstrira upis zadatog niza brojeva u

tekstualnu datoteku i čitanje sadržaja datoteke iz iste funkcije

90

Primer 7. Napisati program koji učitava n strukturnih promenljivih

učenik (ime, adresa, razred, odeljenje) i zapisuje podatke u

datoteku UCENIK.TXT. Podaci jednog učenika su u jednom redu.

91

8 SINTAKSA I ISKAZI JAVASCRIPTA

8.1 Osnove JavaScript-a

JavaScript je skript jezik koji je razvila kompanija Netscape

Communications radi povećanja interaktivnosti Web strana. Java Script

je kompaktan i objektno zasnovan skriptni jezik namenjen za razvoj

klijent Internet aplikacija.

Programski kôd upisuje se direktno na HTML stranicu. Web browser-i

koji podržavaju JavaScript interpretiraju kôd i obezbeđuju širok raspon

interaktivnosti i efekata na Web stranama.

JavaScript dodaje interaktivnost Web prezentaciji na strani klijenta.

U nastavku se nalaze rešeni primeri koje možete pokrenuti u web

browser-ima (Google Chome, Firefox,...), a kôd možete pogledati iz bilo

kog editora (Sublime Text, Notepad++, Atom, Brackests).

Pri kreiranju JavaScript kôda može se koristiti ma koji ASC editor.

Polazni naziv JavaScript jezika bilo je LiveScript, ali u saradnji

Netscape-a i Sun-a, ime je izmenjeno u JavaScript, zbog namene da

Java i JavaScript budu jezici Internet-a i internet programiranja.

Poređenje JavaScript-a i Jave

Java je objektno orijentisani programski jezik, namenjen razvoju

aplikacija za sisteme na računarskim mrežama.

Aplikacija napisana u Javi prenosiva je između različitih platformi, što

Javu i čini specifičnom.

U Javu su ugrađeni brojni sigurnosni mehanizmi:

memorija nije dostupna niti jednom Java programu;

svi bajt kôdovi preneseni mrežom se proveravaju u cilju

pronalaženja neželjenih izmena na putu od servera do klijenta;

onemogućeno je da program-uljez kloniranjem klasa unese

destruktivni kôd u program; itd.

Pojavom Jave došlo je do znatnog unapređenja komunikacije u nternet

svetu.

92

Osim što su se otvorile mogućnosti interaktivne komunikacije, i web

stranice poprimile su dinamičniji oblik...

JavaScript je kompaktan i objektno zasnovan skriptni jezik namenjen za

razvoj klijent Internet aplikacija.

Programski kôd upisuje se direktno na HTML stranicu. WEB

BROWSER- KOJ PODRŽAVAJU JavaScript interpretiraju kôd i

obezvedjuju širok raspon interaktivnosti i efekata na Web stranama.

JavaScript poseduje relativno mali broj tipova podataka: numeričke,

boolean i string vrednosti. Takođe, podržava funkcije, ali bez posebnih

zahteva za deklarisanjem.

JavaScript Java

Ne kompajilira se, već samo

interpretira kod klijenta.

Kompajlira se na serveru pre izvršenja

kod klijenta.

Objektno zasnovan. Koristi postojeće

objekte, bez klasa ili nasleđa.

Objektno orjentisan. Appleti sadrže

objekte sastavljene od klasa sa

nasleđem.

Kôd je integrisan u HTML. Applet je izdvojen iz HTML-a.

Tip promenljive se ne deklariše. Tip promenljive mora biti deklarisan.

Dinamička povezanost. Objektne

reference proveravaju se u run-time.

Statička povezanost. Objektne

reference moraju postojati u vreme

kompajliranja.

Zaštićen. Ne može zapisivati na hard

disk.

Zaštićen. Ne može zapisivati na hard

disk.

Načini uključivanja JavaScript-a unutar HTML dokumenta

1. u sekciji <BODY>... </BODY> unutar oznaka <SCRIPT

language="JavaScript" type="text/javascript"> ... </SCRIPT>

2. u sekciji <HEAD>... </HEAD> unutar oznaka <SCRIPT>...</SCRIPT>

93

3. u sekciji <BODY>... </BODY> ili <FORM>... </FORM> unutar HTML

elementa. Tada se ne moraju koristiti oznake <SCRIPT>...</SCRIPT>

4. u posebnim datotekama sa ekstenzijom .js, a da bi se koristila

zasebna datoteka, mora se u tekućem HTML dokumentu uključiti unutar

oznaka, na primer primer.js:

<SCRIPT language="JavaScript" type="text/javascript" src="primer.js">

</SCRIPT>

Načini izvršenja skripta unutar taga <SCRIPT>...</SCRIPT>

- ako je skript uključen u zaglavlju, ignorisan je do poziva

- ako je skript uključen u telu, rezultat se prikazuje na Web strani

- ako je skript rukovalac događaja, skript će se izvršiti kad se desi

događaj

Primer 1. Uvod u JavaScript

Primer 2. Uvod u JavaScript

94

9 RAD SA PROMENLJIVAMA I TIPOVIMA

PODATAKA

Kod naziva promeljivih voditi računa o sledećem:

- prvi znak mora biti slovo engleske abecede ili podvlaka ("_")

- mogu sadržati brojeve i slova engleske abecede

- velika i mala slova se razlikuju, ali, uobičajeno je da se pišu malim

slovima!

- ključne reči (for, if, else, class, byte, int...) ne mogu se koristiti u nazivu

identifikatora

Tipovi podataka

• numerički (npr: 3.14159 ...)

• logički (Boolean) - (true / false)

• stringovi (npr: "Zdravo, svete!")

• null (specijalne ključne reči s null vrednošću)

Specijalni karakteri

U stringovima je dozvoljeno koristiti sledeće specijalne karaktere:

• \b = pomeraj za jedno mesto ulevo (backspace)

• \f = pomeraj jedan red dole (form feed)

• \n = na početak novog reda (new line character)

• \r = return (carriage return)

• \t = tabulator (tab)

Konverzija podataka

JavaScript nije strogo tipiziran i ne zahteva posebno deklarisanje tipa

podataka, te će se konverzija obaviti automatski.

Osnovni način za deklarisanje promenljivih:

var broj1 = 35

95

var tekst = "Zdravo, svete!"

ali i:

broj1 = 35

tekst = "Zdravo, svete!"

Generalno, u kombinaciji broja i stringa, JavaScript konvertuje broj u

string. Na primer:

x = "Upisali ste broj " + 75

y = 75 + " je odgovor na Vas unos."

Za konverziju stringa u broj, koriste se funkcije:

• EVAL - ocenjuje string i ako je moguće pretvara ga u broj;

• parseINT - konvertuje string u integer, ako je moguće;

• parseFLOAT - konvertuje string u floating-point broj, ako je

moguće.

Primer 1. Promenljive u JavaScript-u

96

Primer 2. Promenljive u JavaScript-u

Primer 3. Stringovi u JavaScript-u

97

Primer 4. Tipovi podataka u JavaScript-u

98

10 UPOTREBA OPERATORA I IZRAZA

Aritmetički operatori

Operacija Objašnjenje

X + Y

X - Y

X * Y

X / Y

X % Y

X++

++X

X--

--X

- sabiranje

- oduzimanje

- množenje

- deljenje

- ostatak deljenja X sa Y (modul)

- postfiksno uvećanje za 1

- prefiksno uvećanje za 1

- postfiksno umanjenje za 1

- prefiksno umanjenje za 1

Relacioni operatori

Operacija Objašnjenje

X > Y

X < Y

X >= Y

X <= Y

X == Y

X != Y

- X veće od Y

- X manje od Y

- X veće ili jednako Y

- X manje ili jednako Y

- X jednako Y

- X nije jednako Y

Logički operatori

Operacija Objašnjenje

X && Y

X || Y

!X

- konjukcija (logičko "I")

- disjunkcija (logičko "ILI")

- negacija (logičko "NE")

Operatori dodeljivanja vrednosti

Operacija Objašnjenje

X = Y

X += Y

X -= Y

X *= Y

X /= Y

X %= Y

- promenljivoj X pridružuje se vrednost Y

X = X + Y

X = X - Y

X = X * Y

X = X / Y

X = X % Y (ostatak pri celobrojnom deljenju)

99

Primer 1. Operatori u JavaScript-u

100

Uslovni izrazi

Uslovnim izrazom možemo prihvatiti jednu od dve vrednosti navedene u

uslovu. Evo sintakse i primera:

(uslov) ? izraz1 : izraz2

status = (godina >= 12) ? "placaju" : "besplatno"

Ako je uslov istinit (true), izraz ima vrednost izraz1, u suprotnom ima

vrednost izraz2.

101

11 KONTROLISANJE TOKA POMOĆU USLOVNIH

ISKAZA I PETLJI

if...else struktura:

if (izraz1){

...iskazi...

}

else if (izraz2) {

...iskazi...

}

else {

...iskazi...

}

Primer s if... strukturom:

<SCRIPT LANGUAGE="JavaScript"> /* oznaka početka JavaScripta */

<!-- /* sve unutar ovog taga je nedostupno browserima koji ne

podržavaju Java Script */

var datum = new Date(); /* promenljivoj datum pridružuje tekući datum

*/

var sat = datum.getHours(); /* u promenljivu sat prihvata tekući čas */

if (sat > 5 && sat < 13){ /* logička provera */

document.write('<BODY BGCOLOR="blue">Dobro jutro!') /* BODY i

ispis poruke */

}

if (sat > 12 && sat < 19){ /* ako je čas veći od 12 i manji od 19 */

document.write('<BODY BGCOLOR="green">Dobar dan!')

}

102

if (sat > 18 || sat < 6){ /* ako je čas veći od 18 ili manji od 6 */

document.write('<BODY BGCOLOR="silver">Dobro veče!')

}

-->

</SCRIPT> /* oznaka kraja Java Scripta */

Navedeni primer postavlja odgovarajuću pozadinu i ispisuje poruku u

HTML dokumentu u zavisnosti od tekućeg sata.

Unutar zagrada naredbe document.write(...) može se postaviti bilo koji

HTML tag, tekst ili sve to kombinovati s vrednostima svojih promenljivih

ili već postojećih funkcija u JavaScriptu.

for... ciklus:

<SCRIPT LANGUAGE="JavaScript">

<!--

for (var i = 1; i <= 10; i++){ /* i=1; ciklus traje sve dok je i<=10; i=i+1

*/

document.write('Vrednost i = ' + i); /* u HTML ispisuje: Vrednost i =

... */

}

-->

</SCRIPT>

Navedeni primer će u HTML dokumentu, na poziciji gde je postavljen,

ispisati:

Vrednost i = 1 Vrednost i = 2 ... Vrednost i = 10

for...in ciklus:

for (promenljiva in objekt) {

... iskazi...

103

}

while... petlja:

while (izraz){

...iskazi...;

}

do... while... petlja:

do {

...iskazi...;

} while (izraz);

with... iskaz:

with (objekt) {

...iskazi...

}

Na primer, matematičkim funkcijama mora prethoditi objekat Math.

Sledeći primer podrazumeva Math ispred P , COS() i S N():

with (Math) {

a = PI / 2;

x = cos(a);

y = sin(a);

}

break i continue iskaz:

U neke konstrukcije petlje skript ulazi samo kada se ispuni određeni

uslov, pa više nemaju potrebu da nastave kruženje kroz ostatak

vrednosti u opsegu brojača petlje. Za izlazak iz petlje koristi se naredba

break. Ona govori JavaScript-u da izađe iz petlje for a izvršavanje

104

skripta se nastavlja odmah iza te petlje, (dakle iza vitičaste zagrade koja

zatvara telo petlje).

Primer:

for (var i=0; i< array.length; i++) {

if (array[i]. property == wantedValue) {

naredbe;

break

}

}

Petlja for omogućava i da se preskoči izvršavanje naredbi unutar nje

zbog samo jednog uslova. Može da postoji neka vrednost brojača za

koju nije poželjno da se naredbe izvrše. Naredba continue primorava

skript da, ako je uslov ispunjen, pređe na sledeći korak tj. poveća

vrednost brojača i nastavi petlju od te vrednosti.

for(var i=1; i <=20; i++){

if (i==13) {

continue;

naredbe

...

U slučaju ugnežđenih for petlji, naredba continue utiče na petlju for u čiji

trenutni opseg spada i konstrukcija if.

function i return iskaz:

primer funkcije koja izračunava kvadrat broja:

function kvadratBroja( x ) {

return x * x

}

---

x = kvadratBroja(5) /* poziv funkcije */

document.write("Kvadrat od 5 je " + x)

105

---

Kvadrat od 5 je 25

new iskaz:

definiše novi objekt na bazi postojećeg.

Donji primer promenljivoj datum pridružuje tekući datum:

var datum = new Date();

this iskaz:

referenca na tekući objekt.

Donji primer definiše da se klikom na objekt poziva funkcija

slucajniBroj(), a kao parametar prenosi se naziv tekuće forme

(this.form):

onClick="slucajniBroj(this.form)"

VAR iskaz:

definisanje promenljivih (opcionalno).

var broj1 = 0, tekst1="proba"

Primer 1. JavaScript - if iskaz

106

Primer 2. JavaScript - if iskaz

Primer 3. JavaScript - if iskaz

107

Primer 4. JavaScript - ugnežđeni if iskaz

Primer 5. JavaScript - složeni iskazi

108

Primer 6. JavaScript - složeni iskazi

Primer 7. JavaScript - switch iskaz

109

Primer 8. JavaScript - switch iskaz

Primer 9. JavaScript - while petlja

110

Primer 10. JavaScript - do while petlja

Primer 11. JavaScript - for petlja

111

12 RAD SA FUNKCIJAMA

Ono što se u drugim programskim jezicima naziva procedura ili

potprogram, JavaScript naziva funkcijom. Funkcije možemo definisati

kao blokove koda koji se mogu izvršavati više puta, a pokrenuti nekom

akcijom ili pozivom funkcije koji može biti bilo gde na stranici.

<html>

<head>

<script type="text/javascript">

function imeFunkcije (parametri) {

naredbe

}

</script>

</head>

Parametri su vrednosti koje funkcija prima od naredbe koja je poziva.

Ako funkcija nema parametre, pišu se samo zagrade. Funkcija je u

stanju da vrati vrednost naredbi koja je pozvala, ali ne obavezno.

Naredba return se koristi upravo u tom slučaju, dakle kada je potrebno

odrediti vrednost koju funkcija vraća; i sve funkcije koje vraćaju neku

vrednost moraju imati return naredbu.

function sum(a,b) {

x=a+b

return x

}

Kada funkcija primi vrednost parametara od naredbe koja ju je pozvala,

te vrednosti se dodeljuju svojstvu arguments objekta function. Ovo

svojstvo je niz vrednosti, gde je svaka vrednost parametar dodeljena

članu niza čiji indeksi počinju nulom.

Ugnežđivanjem je moguće staviti jednu funkciju unutar druge.

Ugnežđenoj funkciji, međutim, može pristupiti samo funkcija koja je

112

obuhvata. Takođe, sve promenljive definisane u spoljnoj funkciji,

dostupne su unutrašnjoj, ali obrnuto ne važi.

Primer 1. JavaScript - Funkcije

Primer 2. JavaScript - Funkcije sa parametrima

113

Primer 3. JavaScript - Funkcije sa više parametara

Primer 4. JavaScript - globalne i lokalne varijable

114

Primer 5. JavaScript - globalne i lokalne varijable

Nizovi

Nizovi u JavaScript-u su jedna od najkorisnijih struktura podataka.

Elementi niza su numerisani, počevši od nule, i redni broj predstavlja

indeks datog elementa. Da bi se pristupilo nekom elementu niza,

potrebno je znati njegovo ime i indeks. Pošto vrednosti indeksa počinju

nulom, broj elementata niza (što je određeno svojstvom niza length),

uvek je za jedan veći od najvećeg indeksa niza. Elementi u nizovima

JavaScript-a mogu da pripadaju bilo kom tipu podataka, uključujući i

objekte.

Niz je smešten u promenljivoj tako da kada se pravi niz, promenljivoj se

dodaje novi objekat niza. Posebna ključna reč- new- prethodi pozivu

funkcije za generisanje niza u JavaScript-u, koja u memoriji obezbeđuje

prostor za niz. Međutim, u JavaScript-u veličinu niza moguće je

promeniti bilo kad.

new mojNiz = new Array(duzina)

115

Primer 6. JavaScript - nizovi

Primer 7. JavaScript - nizovi

Primer 8. JavaScript - nizovi

116

Primer 9. JavaScript - nizovi

Primer 10. JavaScript - nizovi

117

13 OBJEKTI U JAVASCRIPTU

Skriptabilni browser je odgovoran za stvaranje programskih objekata,

koji generalno predstavljaju vidljive elemente HTML stranice u prozoru

browser-a. U vidljive objekte spadaju slike i elementi obrazaca. Da bi se

pomoglo skriptovima da kontrolišu ove objekte, ali i autorima da pronađu

neki sistem u mnoštvu objekata na stranici, definisan je model objektata

dokumenta (Document Object Model, DOM). Model je nešto poput plana

organizacije objekata na stranici.

Svaki objekat je na neki način jedinstven.

Tri najvažnije odlike objekta definišu šta je on:

- kako izgleda,

- kako se ponaša i

- kako ga skript kontroliše.

To su svojstva (properties), metodi i procedure za obradu događaja

(event handlers).

Svaki fizički objekat ima skup karakteristika koji ga definiše: oblik, boju,

težinu, i još mnogo drugih koje ga razlikuju od ostalih objekata. Svaka

od ovih osobina naziva se svojstvo, i svako od svojstava ima neku vrstu

vrednosti koja mu je dodeljena. Svojstva HTML objekta najčešće se

podešavaju atributima HTML oznaka. Prisustvo JavaScript-a često

dodaje opcione atribute čija se inicijalna vrednost može modifikovati

kada se dokument učita.

Svaka web stranica poseduje objekte:

• window: top-level objekt; sadrži svojstva primenjiva na

celokupan prozor,

• location: sadrži svojstva tekuće URL lokacije

• history: sadrži svojstva prethodno posećenih URL

• document: sadrži svojstva sadržaja tekućeg dokumenta, kao

što su naziv (title), boja pozadine (bgcolor),forme

Primer svojstava:

• location.href = "http://www.tfzr.uns.ac.rs/" //lokacija dokumenta

• document.title = "Probni dokument" //naziv dokumenta (title)

118

• document.fgColor = #000000 //boja slova

• document.bgColor = #FFFFFF //boja podloge

• history.length = 7 //koliko poslednjih dokumenta da "pamti" u

history

Primer 1. JavaScript - objekti, svojstva i metode

Primer 2. JavaScript - objekti, svojstva i metode

119

14 JAVASCRIPT DOGAĐAJI I PRETRAŽIVAČ

Mnogi objekti imaju metode koje emuliraju događaje.

Npr, button objekt ima click metodu koja emulira klik miša na tasteru...

Event

(događaj) Nastaje kada korisnik... Event Handler

blur izađe iz fokusa elementa forme onBlur

click klikne na elementu forme ili link onClick

change podesi/promeni vrednost "text", "textarea" ili izabranog

elementa onChange

focus uđe u fokus nekog elementa forme onFocus

load učita stranicu u browser onLoad

mouseover pomera pokazivač miša preko linka ili "anchora" onMouseOver

select izabere "input" polje elementa forme onSelect

submit izvrši "submit" (slanje) forme onSubmit

unload "napusti" stranicu onUnload

Obrada događaja

JavaScript programi mogu prekinuti sekvencijalno izvršavanje

otkrivanjem događaja i reakcijom na njega. Događaj predstavlja akciju

koja se desila unutar navigatora kao što je, na primer, klik korisnika ili

pritisnuta dirka na tastaturi ili učitavanje slike...

Jedna od najmoćnijih karakteristika JavaScript-a jeste detektovanje i

odziv na događaj (event handler) i to daje statičnom HTML dokumentu

izvesnu interaktivnost.

Događaj se može desiti na više mesta, ali svaki događaj je u vezi sa

nekim objektom i svaki događaj ima svoje ime. Događaj onMouseOver

nastaje prelaskom pokazivača miša preko objekta na web strani i tada

se poziva (ako postoji) onMouseOver obrada događaja.

120

Primer 1. JavaScript - događaji

Primer 2. JavaScript - događaji

121

Ako se žele saznati podaci o posetiocu web strane, onda se, na primer,

mogu iskoristiti informacije o objektu navigator:

Navigator objekat - informacije o browser-u koji se koristi

Korišcenje

navigator

Svojstva

appCodeName Kôd browser-a

appName Ime browser-a

appVersion Verzija browser-a

mimeTypes[] Niz objekata MimeType koji opisuje koje Mime tipove

prepoznaje i podržava browser.

mimeTypes.length Broj stavki u nizu mimeTypes[].

plugins[] Niz objekata Plugin koji opisuje instalirane priključke.

plugins[].length Broj stavki u nizu plugins[].

userAgent Niska koju browser- prosleđuje u zaglavlju HTTP

zahteva.

Metode

JavaEnabled() Testira da li browser podržava i da li je omogućio Javu.

plugins.refresh Proverava novouključene priključke, ubacuje ih u niz

plugins[], i po potrebi ponovo puni dokument koristeći te nove priključke.

122

Primer 3. Podaci o browseru

Primer 4. Podaci o dokumentu

123

15 RAD SA SLIKAMA U JAVASCRIPTU

Objekat image

Objekat JavaScript-a koji doprinosi razvoju interaktivnosti web stranica

sa velikim vizuelnim efektom je image.

Objekat slike je jedan od objekata koji se sadrže u dokumentu. Kako

dokument može imati više od jedne slike, reference objekata slika

uskladištene su kao niz u modelu objekta. Prema tome, slika se može

povezati pomoću indeksa niza ili pomoću imena:

document. images[n]

document. imeSlike

Svakom od atributa oznake img može se pristupiti kao svojstvu objekta

slike. Ako želimo od slike da napravimo element koji reaguje na pritisak

tasterom miša, okružujemo ga vezom ili joj pridružujemo slikovnu mapu.

Kombinacijom veze i slike pravi se dugme slike koje reaguje na pritisak

tasterom miša.

Kada objekat slike postoji u memoriji, svojstvu src tog objekta moguće je

dodeliti ime datoteke ili URL:

mojaSlika.src= "slika. jpg"

Kada JavaScript naiđe na naredbu koja svojstvu src dodeljuje URL,

naređuje browser-u da počne sa učitavanjem date slike. Dok se

procedura onLoad= ne aktivira, sve slike generisane ovako čuvaju se u

kešu za slike. Tada se svojstvo keširanih slika src ili aktuelni URL slike,

može pridružiti svojstvu src slike dokumenta koje je definisano oznakom

img:

document. images[0].src= "mojaSlika.src"

document. images[0].src= "slika.jpg"

Promena slike je trenutna.

Najpopularnija tehnika za "oživljavanje" Web stranice je promena slike

koje se ponašaju kao dugmad kada korisnik stane kursorom miša na

njih.

124

Primer 1. JavaScript - promena slika

Primer 2. JavaScript - promena slika

Primer 3. JavaScript - promena slika

125

Primer 4. JavaScript - promena slika pomoću tajmera

Primer 5. JavaScript - promena slika pomoću tajmera

126

Primer 6. JavaScript - promena slika pomoću tajmera

127

16 UPOTREBA JAVASCRIPTA U VEB OBRASCIMA

nterakcija između Web stranice i korisnika odvija se uglavnom unutar

obrasca čiji elementi predstavljaju dvosmerne kanale informacija između

skriptova i korisnika. Elementi obrasca su jedini način da korisnik unosi

tekstualne podatke ili bira između ponuđenih opcija prikazanih kao polja

za potvrdu, uzajamno isključiva radio dugmad ili stavke u listi.

Složen HTML dokument može imati više obrazaca, gde svaki par

oznaka <form> i </form> definiše po jedan.

Na objekat obrasca može da se ukaže na osnovu njegovog položaja u

nizu obrasca koji sadrži dokument, ili na osnovu imena (ukoliko je

imenovan unutar oznaka form). Čak iako postoji samo jedan obrazac, on

pripada nizu obrasca od jednog elementa, a njegova referenca je

sledeća:

document.forms[0]

Ako je obrascu dodeljeno ime, u referencu se, umesto forms[0] uključuje

to ime.

Dugmad

Dugme ili button, je jedan od najjednostavnijih objekata za skriptovanje.

Ono ima samo nekoliko svojstava kojima se retko pristupa ili se retko

modifikuju. Vizuelni efekat dugmeta ne proizvodi HTML ili skript, već

operativni sistem ili browser koje koristi posetilac stranice. Najkorisnija

procedura za obradu događaja objekta button je onClick=. Ona se

aktivira, kako i ime kaže, svaki put kad korisnik tasterom miša pritisne

dugme.

Checkbox tj. polje za potvrdu je takođe jednostavan objekat obrasca.

Svojstvo value checkbox-a je tekst koji želite da povežete sa tim

objektom. Ovaj tekst se ne pojavljuje na stranici u bilo kom obliku, ali

ovo svojstvo može biti važno skriptu koji želi da zna više o checkbox-u.

Ključno svojstvo checkbox-a jeste da li je ono povrđeno ili nije. Svojstvo

checked je logička vrednost: true ako je polje potvrđeno, false ako nije.

Što se tiče objekata tipa radio dugme tj. radio, situacija je malo

drugačija. Naime, da bi se browser-u omogućilo da upravlja

osvetljavanjem i zatamnjivanjem odgovarajuće grupe dugmadi, potrebno

je svakom dugmetu u grupi dodeliti isto ime. Moguće je imati više grupa

u obrascu, ali svaki član jedne grupe mora imati isto ime. Dakle, browser

128

upravlja nizom objekata sa istim imenom, pa ime dodeljeno grupi

postaje ime niza. Neka svojstva se primenjuju na grupu kao celinu,

druga svojstva se primenjuju na pojedinu dugmad u grupi i moraju se

adresirati pomoću indeksa niza. Na primer, broj dugmadi u grupi govori

svojstvo length:

document. forms[0].imeGrupe.length

Ako je, na primer, potrebno proveriti da li je određeno dugme trenutno

izabrano, mora se individualno pristupiti tom dugmetu i očitati svojstvo

checked:

document. forms[0]. imeGrupe[0]. checked

Primer 1. JavaScript - obrazci

Primer 2. JavaScript - obrazci

129

Primer 3. JavaScript - podnošenje obrazaca

Primer 4. JavaScript - podnošenje obrazaca

130

Primer 5. JavaScript - podnošenje obrazaca

Primer 6. JavaScript - podnošenje obrazaca

131

Primer 7. JavaScript - podnošenje obrazaca

Primer 8. JavaScript - dugmad

132

Primer 9. JavaScript - dugmad

Primer 10. JavaScript - ALERT, CONFIRM i PROMPT dijalog

133

Primer 11. JavaScript - CONFIRM dijalog

Primer 12. JavaScript - Časovnik

134

LITERATURA

1. Brian W. Kernighan, Dennis M. Ritchie, C Programming Language, 2nd

Edition, Prentice Hall, 1988.

2. David Griffiths, Dawn Griffiths, Head First C: A Brain-Friendly Guide,

O'Reilly Media, Inc., 2012.

3. Zed A. Shaw, Learn C the Hard Way, Addison-Wesley, 2016.

4. Peter Prinz, Tony Crawford, C in a Nutshell, O'Reilly Media, Inc.,2005.

5. Steve Oualline, Practical C Programming, 3rd Edition O'Reilly Media,

Inc.,1997.

6. Greg Perry, Dean Miller, C Programming Absolute Beginner's Guide,

Third Edition, QUE, 2014.

7. K. N. King, C Programming: A Modern Approach, W. W. Norton &

Company, Inc., 2008.

8. Reema Thareja, Computer Fundamentals & Programming in C, Oxford

University Press, 2012.

9. Ben Klemens, 21st Century C: C Tips from the New School, O'Reilly

Media, Inc., 2012.

10. David Griffiths, Paul Barry, Head First Programming, O'Reilly Media,

Inc., 2009.

11. Steve Suehring, JavaScript Korak po korak, Prevod trećeg izdanja,

CET Computer Equipment and Trade, Računarski fakultet, 2014.

12. Eric Freeman, Elisabeth Robson, Head First JavaScript Programming:

A Brain-Friendly Guide, O'Reilly Media, Inc., 2014.

13. Ben Frain, HTML5 i CSS3 Prilagođiv web dizajn, Kompjuter biblioteka,

2014.

14. Ethan Watrall, Jeff Siarto, Head First Web Design, O'Reilly Media, Inc.,

2008.

15. Mark Myers, A Smarter Way to Learn JavaScript, CreateSpace

Independent Publishing Platform, 2014.

16. Marjin Haverbeke, Eloquent JavaScript: A Modern Introduction to

Programming, 3rd Edition, No Starch Press, 2018.

17. Jon Duckett, Javascript & jQuery: Interactive Front-End Web

Development, Wiley, 2014.

18. Douglas Crockford, JavaScript: The Good Parts, O'Reilly Media, Inc.,

2008.

135

19. Robert C. Martin, Clean Code: A Handbook of Agile Software

Craftsmanship, Prentice Hall, 2008.

20. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford

Stein, Introduction to Algorithms, MIT Press, 1989.

21. David Thomas, Andrew Hunt, The Pragmatic Programmer: Your

Journey To Mastery, 20th Anniversary Edition, 2nd Edition, Addison

Wesley, 2019.