osnove programiranja osnove...ove knjige, kao i onima koji su omogućili njeno publikovanje....
Post on 22-Mar-2021
6 Views
Preview:
TRANSCRIPT
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.
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.
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
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
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
77
Primer 33. Program za sortiranje u alfabetskom redosledu učitanog
niza stringova. Određivanje dužine sortiranih stringova
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
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
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
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)
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
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)
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.
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.
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
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
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.
top related