Predavanja iz C++2009

Embed Size (px)

Citation preview

  • 8/19/2019 Predavanja iz C++2009

    1/152

    UNIVERZITET CRNE GORE

    ELEKTROTEHNÎ KI FAKULTET

    VI[A RA^UNARSKA [KOLA

    dr Milutin Ostoji}

    mr Boris Markovi}

  • 8/19/2019 Predavanja iz C++2009

    2/152

    2

    1. Integrisano okru`enje Borland Builder v. 3.0

    Forma nakoju se"postavljaju"komponente

    Editor ukojem se pi{ekod vezan zadoga|aje kojise de{avajunad objektima.

    Palete saraspolo`ivimkomponentama

    Objekt

    inspektor ukojem sepode{avajuosobinekomponenti ipomo}u kojegse generi{e

    kod potrebanza povezivanjekomponenti sadoga|ajima

    ^estokori{}enefunkcije menija

    Padaju}i meniji

    Start aplikacije

    Integrisano okru`enje generi{e kod aplikacije neophodanza povezivanje sa operativnim sistemom itd.

  • 8/19/2019 Predavanja iz C++2009

    3/152

    3

    2. Kreiranje aplikacije

    2.1. Postavljanje komponenti na formu i pode{avanje osobina komponenti

    U objekt inspektoruse pode{avajuosobine trenutnoodabrane(selektovane)komponente.

    Osobine koje semogu pode{avatisamo u dobakreiranja aplikacijenazivaju se stati~keosobine.

    Osobine koje semogu mjenjati i utoku izvr{avanjaaplikacije nazivaju sedinami~ke osobine.

    Postavljanjekomponentena formu

  • 8/19/2019 Predavanja iz C++2009

    4/152

    4

    2..2. Programiranje doga|aja, pode{avanje osobina i pozivanje metoda komponenti

    U objekt inspektoruse odabiraju doga|ajina koje treba da"reaguje" selektovanakomponenta.

    C++ kod kojidopisujeprogramer

    Definicija funkcije za podrazumjevani doga|aj nad komponentomse mo`e generisati i dvoklikom nad komponentom.

    Dvoklikom nadpraznim poljemdesno od opisamogu}eg doga|ajanad komponentom,integrisano okru`enjegeneri{e praznufunkciju povezanu samogu}im doga|ajemnad objektom

    Funkcija koja }e seizvr{iti kad se desidoga|aj nadkom onentom

  • 8/19/2019 Predavanja iz C++2009

    5/152

    5

    Programiranje doga|aja:

    Na prethodnoj slici je prikazano kreiranje aplikacije u kojoj je doga|aj "klik" mi{em (Click) na

    komponentu taster (Button1), koji se nalazi na formi (Form1), povezan sa funkcijom koju jegenerisalo integrisano okru`enje:

    U prazno tijelo funkcije TForm::Button1Click(TObject *Sender) programer upisuje svoj kodkoji }e se izvr{iti svaki put kad se desi doga|aj "klik" (Click) nad objektom taster (Button1):

    //-------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){ }//-------------------------------------------------------------

    //-------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){  Edit1->Text="Test program"; // promjena teksta u komponenti Edit1  ListBox1->Clear(); // brisanje sadrzaja u ListBox1

    ListBox1->Items->Add(Edit1->Text); // upisivanje u ListBox1 teksta iz Edit1}//-------------------------------------------------------------

  • 8/19/2019 Predavanja iz C++2009

    6/152

    6

    Pode{avanje osobina:

    Komponente imaju stati~ke i dinami~ke osobine. Stati~ke osobine se pode{avaju samo u objekt inspektoru za vrijeme kreiranja aplikacije. Dinami~ke osobine se pode{avaju i u objekt inspektoru za vrijeme kreiranja aplikacije i

    pozivanjem odgovaraju}ih naredbi za dodjelu vrijednosti dinami~kim osobinama u tokuizvr{avanja aplikacije.

    Primjer pode{avanja dinami~ke osobine komponente Edit1 je promjena teksta upisanog u tuosobinu za vrijeme izvr{avanja aplikacije:

    Edit1->Text="Test program"; // promjena teksta u komponenti Edit1

    Pozivanje metoda:

    Funkcije koje su ugra|ene u komponente i koje pri pozivanju izvr{e neku akciju nadkomponentom, nazivaju se metodama.

    Primjer pozivanja metoda koje rade nad objektom ListBox1 i koje bri{u sadr`aj te komponente idopisuju novi sadr`aj u nju:

    ListBox1->Clear(); // brisanje sadrzaja u ListBox1ListBox1->Items->Add(Edit1->Text); // upisivanje u ListBox1 teksta iz Edit1

  • 8/19/2019 Predavanja iz C++2009

    7/152

    7

    2.3. Brisanje komponente i koda pridru`enog komponenti

    Komponenta se bri{e tako {to se selektuje, a zatim se odradi akcija Cut ili Delete iz menijaEdit, ili tako {to se selektuje komponenta a zatim pritisne taster Ctrl+Del ili samo taster Del.

    Kod koji je programer upisao u funkciju koju je generisalo integrisano okru`enje za obrisanukomponentu, treba obrisati.NE SMIJE se brisati kod koji programer nije sam napisao Taj kod }e integrisano okru`enjesamo obrisati. U protivnom, integrisano okru`enje }e prijaviti gre{ke...

    2.4. Startovanje aplikacije

    Aplikacija se startuje klikom na ikonicu Run, pritiskom na taster F9 ili odabirom opcije Run izRun padaju}eg menija.

    Startovanjem projekta koji je do sada opisivan, dobija se sljede}a aplikacija:

  • 8/19/2019 Predavanja iz C++2009

    8/152

    8

    2.5. Kreiranje izvr{ne aplikacije

    Snimanjem projekta na disk i njegovim startovanjem, na disku }e se kreirati izvr{na aplikacija(tipa EXE) u istom direktorijumu u kojem je snimljen projekat i sa imenom koje je dato projektu.

    2.6. Otkrivanje i ispravljanje gre{aka

    Spisak gre{aka kojeeventualno postoje ukodu aplikacije sedobija pri njenom

    startovanju.

    Ukoliko gre{kepostoje, aplikacijane}e biti startovana,ve} }e integrisanookru`enje generisatilistu gre{aka na dnu

    prozora u kojem senalazi kod aplikacije.

    Pronala`enje gre{keu kodu se radi tako{to se dvaput kliknena opis gre{ke u listi.

  • 8/19/2019 Predavanja iz C++2009

    9/152

    9

    3. Slu`bene rije~i programskog jezika "C++" (Borland C++ Builder)

    Va`i za verziju programskog jezika "C++" koja se koristi u okviru prevodioca Borland C++ Builder.

    SLU@BENE RIJE^I PROGRAMMSKOG JEZIKA "C++" (Borland C++ Builder)

    __asm _asm asm auto __automated break bool case

    catch __cdecl _cdecl cdecl char class __classid __closure

    const const_cast continue __declspec default delete __dispid do

    double dynamic_cast else enum __except explicit _export __export

    extern false __fastcall _fastcall __finally float for friend

    goto if __import _import inline int __int8 __int16

    __int32 __int64 long mutable namespace new operator __pascal

    _pascal pascal private protected __property public __published register

    reinterpret_cast return __rtti short signed sizeof static static_cast

    __stdcall _stdcall struct switch template this __thread throwtrue __try try typedef typename typeid union using

    unsigned virtual void volatile wchar_t while

  • 8/19/2019 Predavanja iz C++2009

    10/152

    10

    4. Komentari

    U jeziku C komentari se stavljaju izme|u znakova /* i */

    Komentarom u jeziku C++ se smatra sve {to se nalazi iza znakova // i kraja reda. Tako|e jezadr`an i na~in obilje`avanja komentara iz jezika C.

    int i; // ovo je C++ komentar  // C++ komentar je tekst koji se nalazi izme|u znakova // i kraja reda

    void fun(void) /* ovo je nacin obiljezavanja komentara koriscen u jeziku C*/

    {  /* C komentar pocinje

    znacima /* izavrsava znacima */

    }

  • 8/19/2019 Predavanja iz C++2009

    11/152

    11

    5. Identifikatori

    Identifikatori su imena koja se mogu koristiti u okviru programskog jezika "C++" za imenovanje: objekata, promjenjivih, funkcija...

    Za identifikatore va`i sljede}e: ne smiju se koristiti slu`bene rije~i, ne smiju po~injati sa brojem,

    ne smiju sadr`ati razmake ili specijalne znakove osim znaka "_",Specijalni znakovi su: ~`!@#$%^&*(){}[];:'"\|?/., moraju po~eti slovom ili znakom "_", mala i velika slova u identifikatorima se me|usobno razlikuju,

    Primjeri regularnih identifikatora:

    i _ime i1 xmax yMin x_sred _1_2 _XxXx Mirko Janko7

    Primjeri neregularnih identifikatora:

    i me f*name 5xyz ime() void static pascal Janko# 90_x x_y+z

  • 8/19/2019 Predavanja iz C++2009

    12/152

    12

    6. Tipovi promjenjivih

    Osnovni tipovi su:

    char –cjelobrojni (znakovni) tip podatka int –cjelobrojni tip podatka float –realni tip podatka jednostruke ta~nosti double –realni tip podatka dvostruke ta~nosti

    Primjenom modifikatora signed (ozna~en), unsigned (neozna~en), short (kratak) i long (dug) naosnovne tipove, dobijaju se novi tipovi podataka.

    OZNAKA TIPA

    SKRA]ENA

    OZNAKA

    OPIS Bajtova OPSEG

    unsigned char   neozna~eni znak 1 0 -- 255signed char char ozna~eni znak 1 -128 -- 127unsigned short int unsigned short neozna~eni kratki cijeli broj 2 0 -- 65535signed short int short ozna~eni kratki cijeli broj 2 -32768 -- 32767unsigned int   neozna~eni cijeli broj 4 0 -- 4294967295signed int int ozna~eni cijeli broj 4 -2147483648 -- 2147483647

    unsigned long int unsigned long neozna~eni dugi cijeli broj 4 0 -- 4294967295signed long int long ozna~eni dugi cijeli broj 4 -2147483648 -- 2147483647float   realni broj 4 3.4E-38 -- 3.4E+38

    double   realni broj dvostruke ta~nosti 8 1.7E-308 -- 1.7E+308long double   dugi realni broj dvostruke ta~nosti 10 3.4E-4932 -- 1.1E+4932

  • 8/19/2019 Predavanja iz C++2009

    13/152

    13

    7. Operatori

    Prvo su navedeni operatori programskog jezika C, a zatim operatori koji su dodati u programskom

     jeziku C++. Operatori su pore|ani po redosljedu kojim }e se u~iti.Sa "p" }e se ozna~avati pointer (pokaziva~), tj. promjenjiva koja sadr`i memorisku adresu nekepromjenjive odgovaraju}eg tipa.

    Slijede operatori programskog jezika C:TIP OPERATOR OPIS PRIMJER / OBJA[NJENJE

    za funkcije

    ()Navodi se pri pozivu funkcije i uokviru njega se predaju argumenti

    float x=StrToFloat("10.123");

    aritmeti~ki

    * Mnozenje x=y*z;/ Dijeljenje x=r/t;% Moduo (ostatak) x=z%y;+ Sabiranje i=j+k;- Oduzimanje i=j-k;+ Unarni plus i=+5;- Unarni minus i=-5;

    za dodjelu

    = Dodjela vrijednosti a=3; b=15;

    aritmeti~ki i

    dodjela vrijednosti

    += Sabiranje i dodjela i+=4; // i=i+4;-= Oduzimanje i dodjela i-=3;  // i=i-3;*= Mno`enje i dodjela i*=5;  // i=i*5;/= Djeljenje i dodjela i/=9;  // i=i/9;%= Djeljenje sa ostatkom i dodjela i%=2;  // i=i%2;

    ++ Inkrementiranjei++; // i=i+1;++i; // i=i+1;

    -- Dekrementiranjei--; // i=i-1;--i; // i=i-1;

  • 8/19/2019 Predavanja iz C++2009

    14/152

    14

    TIP OPERATOR OPIS PRIMJER / OBJA[NJENJE

    logi~ki

     < Manje od if ( i < 3 ) j=6;

     Add(IntToStr(niz[i]));

    >  Vece od while(i>3){...}>= Vece od ili jednako do {...} while(i>=10);== Jednako if(i==j){...}!= Razlicito if(i!=j){...}&& Logicko I if( (ix; // z=str.x;

    za veli~inu

    sizeof Velicina tipa i=sizeof(float); // i==4 (4B)

  • 8/19/2019 Predavanja iz C++2009

    15/152

    15

    TIP OPERATOR OPIS PRIMJER / OBJA[NJENJE

    bitski

    (nad bitovima)

    0j=i>>3; // j=i/2/2/2; ako je i>0

    ~ Komplement nad bitovima(00010110)=~(11101001)0x16 =~ 0xE9;

    & I nad bitovima(00001010)=(10101010)&(00001111)0x0A = 0xAA & 0x0F;

    ^ Iskljucivo ILI(10100101)=(10101010)^(00001111)0xA5 = 0xAA ^ 0x0F;

    | ILI nad bitovima(10101111)=(10101010)|(00001111)0xAF = 0xAA | 0x0F;

    bitski i dodjela

    vrijednosti

    &= I nad bitovima i dodjela i&=0x0F;  // i=i&0x0F|= ILI nad bitovima i dodjela i|=0xA0;  // i=i|0xA0^= Iskljucivo ILI i dodjela i^=0x56;  // i=i^0x562

    uslovni

    ?: Uslovni operator  (i>3) ? {j++;} : {j--;a=c;}// if(i>3) {j++;} else {j--;a=c;}

  • 8/19/2019 Predavanja iz C++2009

    16/152

    16

    Slijede operatori dodati u programskom jeziku C++:

    TIP OPERATOR OPIS PRIMJER / OBJA[NJENJE

    odre|enje dosega

    :: razrje{enje dosega

    int x=1; // globalno x

    void fun(){int x=2; // lokalno x  ::x=x; // globalno x (::x) dobija} // vrijednost lokalnog x

    rad sa

    memorijom

    new dodjela memorije dinaki~kom objektuint *p = new int;*p=55;

    deleteosloba|anje memorije dodjeljenedinami~kom objektu

    int *p = new int;*p=55;delete p;

    za pristup

    elementima

    objekata,

    struktura i unija

    .*pristup ~lanu objekta pomo}upokaziva~a

    class Tklasa { ... public: int x; ... };

    Tklasa a,*pk; // deklaracija objekta a  // i pokazivaca pk na

    // objekat tipa Tklasa

    int Tklasa::*pi; // deklaracija pokazivaca  // na "int" element klase  // Tklasa

    pk=&a; //pi=&Tklasa::x;

    a.*pk=100; // isto kao a.x=100;

    pk->*pi=200; // isto kao a.x=200;

    ->*pristup pokazivanom ~lanu objekta

    pomo}u pokaziva~a

  • 8/19/2019 Predavanja iz C++2009

    17/152

    17

    8. Kodiranje doga|aja –tipi~na struktura funkcije ~ije je izvr{avanje povezano sa doga|ajem...

    Algoritam

    funkcije

    Start

    Stop

    Obrada podataka

    Prihvatanje vrijednosti promjenjivih

    Ispisivanje rezultata prora~una

    // Ovo je komentar

    void __fastcall TForm1::Button1Click(TObject *Sender){

    /*deklaracija lokalnih promjenjivih*/

    /*ucitavanje vrijednosti za promjenjive*/

    /*obrada podataka*/

    /*ispisivanje rezultata rada funkcije*/

    }

    Funkcja koja }e se izvr{itikad se desi doga|aj "Click"nad objektom "Button1"

    Pseudo-kod

    funkcije

    Deklaracija rezervisanjemjesta u memoriji zapromjenjive koje se koriste

    Objekat "Button1" nad kojim}e se desiti doga|aj "Click"(mi{em)

  • 8/19/2019 Predavanja iz C++2009

    18/152

    18

    9. Deklaracija lokalnih promjenjivih i dodjeljivanje vrijednosti

    Pod deklaracijom promjenjivih (varijabli) podrazumjeva se navo|enje naredbi kojima se u memorijira~unara rezervi{e prostor u kojem }e se smje{tati njihove vrijednosti.

    Blok naredbi se defini{e postavljanjem zagrada "{" na po~etku i zagrade "}" na kraju blokanaredbi.

    Deklarisanje lokalnih promjenjivih se radi bilo gdje u bloku naredbi prije prvog kori{}enjapromjenjive.

    Deklaracija promjenjivih se radi tako {to se navede tip jedne ili vi{e promjenjivih koje trebadeklarisati a zatim imena promjenjivih razdvojena zarezima.

    U okviru naredbi deklaracije mo`e se izvr{iti inicijalno dodjeljivanje vrijednosti promjenjivim.

    {int x;int y,z,k=45,j=0;

    float a,b,c=11.22;/* ... naredbe ... */

    unsigned long int t=k+j;

    /* ... naredbe ... */}

    Lokalne promjenjive su vidljive samounutar bloka naredbi u kojem su

    deklarisane (od mjesta deklaracije dokraja bloka) i postoje samo dok seizvr{avaju naredbe iz tog bloka naredbi.Nemaju inicijalnu vrijednost.

  • 8/19/2019 Predavanja iz C++2009

    19/152

  • 8/19/2019 Predavanja iz C++2009

    20/152

    20

    10.1. U~itavanje i ispisivanje String-a (AnsiString-a):

    Doga|aj "Click" nad objektom "Button1"

    je iskodiran sljede}om funkcijom:

    //---------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)

    {Label1->Caption = Edit1->Text;

    }//---------------------------------------------------

    Poslije "klika" na taster, rezultat je sljede}i:

    Objekat tipa Form:

    Name = "Form1"Form1->Caption = "I/O"

    Objekat tipa Edit:

    Name = "Edit1"Edit1->Text == "Edit1"

    Objekat tipa Label:

    Name = "Label1"Label1->Caption = "Label1"

    Objekat tipa Button:

    Name = "Button1"Button1->Caption = "Ucitaj i Ispisi"

  • 8/19/2019 Predavanja iz C++2009

    21/152

    21

    10.2. U~itavanje / ispisivanje vrijednosti tipa String, cijeli broj i realni broj:

    Kod koji u~itava i ispisuje

    String:

    //----------------------------void __fastcallTForm1::Button1Click(TObject *Sender)

    {String s;s=Edit1->Text;Label1->Caption=  "String: " + s;}//----------------------------

    Kod koji u~itava i ispisuje

    cijeli broj:

    //----------------------------void __fastcallTForm1::Button1Click(TObject *Sender)

    {int i;i=StrToInt(Edit1->Text);Label1->Caption=  "i: "+IntToStr(i);}//----------------------------

    Kod koji u~itava i ispisuje

    realni broj:

    //----------------------------void __fastcallTForm1::Button1Click(TObject *Sender)

    {double f;f=StrToFloat(Edit1->Text);Label1->Caption=

      "f: "+FloatToStr(f);}//----------------------------

  • 8/19/2019 Predavanja iz C++2009

    22/152

    22

    10.3. Upisivanje vi{e vrijednosti tipa String u listu:

    Doga|aj "Click" nad objektom "Button1"

    je iskodiran sljede}om funkcijom:

    //--------------------------------------void __fastcallTForm1::Button1Click(TObject *Sender){  ListBox1->Items->Add(Edit1->Text);}//--------------------------------------

    Doga|aj "Click" nad objektom "Button2"

    je iskodiran sljede}om funkcijom:

    //--------------------------------------void __fastcallTForm1::Button2Click(TObject *Sender){  ListBox1->Clear();}//--------------------------------------

    Objekat tipa ListBox:

    Name = "ListBox1"

  • 8/19/2019 Predavanja iz C++2009

    23/152

  • 8/19/2019 Predavanja iz C++2009

    24/152

    24

    Primjer upisivanja formatiranog teksta u promjenjivu tipa String:

    Po{to je Caption osobina komponente Label1 tipa String, prethodni primjer se mo`e uraditi i nasljede}i na~in:

    #include // zbog funkcije sprintf()

    void __fastcall TForm1::Button1Click(TObject *Sender){ float X=12.3456789, Y=98.7654321;  char temp[100];  String poruka;

      sprintf(temp,"X=%6.2f Y=%6.2f",X,Y);  poruka=temp;

      Label1->Caption=poruka;

    }

    #include // zbog funkcije sprintf()void __fastcall TForm1::Button1Click(TObject *Sender){ float X=12.3456789, Y=98.7654321;  char temp[100];

      sprintf(temp,"X=%6.2f Y=%6.2f",X,Y);

      Label1->Caption=temp;}

  • 8/19/2019 Predavanja iz C++2009

    25/152

    25

    Znakovni niz se iz promjenjive tipa String (AnsiString) mo`e dobiti kori{}enjem funkcije (metoda)c_str() koji se koristi kao u sljede}em primjeru:

    #include void __fastcall TForm1::Button1Click(TObject *Sender){ String poruka;  char zniz[100];

      poruka=Edit1->Text;  strcpy(zniz, poruka.c_str()); // kopiranje sadrzaja Stringa u znakovni niz

      Label1->Caption=zniz;

  • 8/19/2019 Predavanja iz C++2009

    26/152

    26

    11. Jednostavna aplikacija

    Prakti~an primjer: Kreirati program koji ra~una sumu dva cijela broja.

    Algoritam

    funkcije

    Start

    Stop

    z=x+y

    x, y

    z

    Izvorni kod

    funkcije

    Doga|aj "Click" nad objektom "Button1"

    je iskodiran sljede}om funkcijom:

    //--------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){int x,y,z;

    x=StrToInt(Edit1->Text);y=StrToInt(Edit2->Text);

      z=x+y;

    Label3->Caption=IntToStr(z); // umjasto z moze x+y}//--------------------------------------------------

    Deklaracija (rezervisanje mjesta umemoriji ra~unara) za promjenjivekoje }e se koristiti

    Panel1Label3

  • 8/19/2019 Predavanja iz C++2009

    27/152

    27

    12. Grupisanje naredbi u blokove

    Blok naredbi se defini{e postavljanjem zagrada "{" na po~etku i zagrade "}" na kraju bloka

    naredbi. Blokovi naredbi mogu biti ugnje`deni, tj. jedan blok naredbi mo`e u sebi sadr`ati vi{e"podblokova naredbi". Mogu}e je vi{estruko ugnje`davanje blokova naredbi.

    {  ########

    {

    ########}  ########

      ########{

      ########{

    ########}

      ########}

      ########}

    Blokovi naredbi

    ########

  • 8/19/2019 Predavanja iz C++2009

    28/152

    28

    13. Tok izvr{avanja naredbi unutar funkcija

    Naredbe u funkcijama se izv{avaju redno (pravolinijski) –tj. jedna za dugom onim redosljedom

    kojim su navedene u funkciji.

    Redno izvr{avanje naredbi funkcije se primjenjuje uglavnom za rje{avanje najjednostavnijihzadataka.

    Za rje{avanje slo`enijih zadataka ~esto je neophodno ostvarivati izvr{avanje naredbi koje nijeredno, tj. omogu}iti da se poslije izvr{avanje jedne naredbe izvr{i neka koja se u kodu nalazi vi{emjesta ispred ili vi{e mjesta iza upravo izvr{ene.

    Naredbe koje "remete" redni tok izvr{avanja naredbi u funkcijama djele se na: Naredbe koje vr{e grananje unaprijed u zavisnosti od vrijednosti upravlja~kog izraza. Nazivaju

    se naredbama izbora (dono{enja odluke). Naredbe koje izazivaju grananje unazad u zavisnosti od vrijednosti upravlja~kog izraza.

    Nazivaju se naredbama ponavljanja (petlje). Naredbe koje navode da izvr{avanje programa naglo (bezuslovno) sko~i na neku precizno

    odre|enu naredbu koja nije napisana sljede}a po redu. Nazivaju se naredbe skoka.

    Naredbe izbora i naredbe ponavljanja svoje izvr{avanje odre|uju logi~kom ta~no{}u upravlja~kogizraza.

    Za izraze u "C++" programskom jeziku jo{ va`i da je 1 == TA^NO i 0 == NETA^NO.Tako|e va`i da se sve vrijednosti razli~ite od 0 podrazumjevaju kao ta~ne.

  • 8/19/2019 Predavanja iz C++2009

    29/152

    29

    14. Naredbe izbora

    Naredba izbora bira jednu od dvije ili vi{e mogu}ih putanja izvr{avanja programa. Koriste se kao

    naredbe za dono{enje odluka.

    Osnovna naredba izbora u jeziku "C++" je naredba " if".

    Prakti~an primjer: Kreirati program koji u~itava dva realna broja (djeljenik i djelilac) i {tampa

    rezultat njihovog djeljenja ukoliko je djelilac razli~it od nule.

    izraz

    naredba iliblok naredbiif (izraz)

    naredba iliblok naredbi

    DANE

    void __fastcallTForm1::Button1Click(TObject *Sender){  float a=StrToFloat(Edit1->Text);  float b=StrToFloat(Edit2->Text);

    if(b==0)  Label1->Caption="Djeljenje sa nulom!");

    if(b!=0)  { float c=a/b;  Label1->Caption=FloatToStr(c);  }}

    stop

    a,b

    b == 0

    b != 0

    c=a/b

    Djeljenje sa nulom!!!

    a/b=c

    start

    DA

    DANE

    NE

  • 8/19/2019 Predavanja iz C++2009

    30/152

    30

    Naredba "if" ima mogu}nost kori{}enja ~lana "else" koji pru`a ve}u fleksibilnost potrebnu zarealizaciju logike dono{enja odluke.

    Prakti~an primjer: Kreirati program koji u~itava dva realna broja (djeljenik i djelilac) i {tampa

    rezultat njihovog djeljenja ukoliko je djelilac razli~it od nule.

    if (izraz)naredba1 iliblok naredbi1

    elsenaredba2 iliblok naredbi2

    izraz

    naredba2 iliblok naredbi2

    NE

    naredba1 iliblok naredbi1

    DA

    void __fastcallTForm1::Button1Click(TObject *Sender){  float a=StrToFloat(Edit1->Text);  float b=StrToFloat(Edit2->Text);

    if(b==0)  Label1->Caption="Djeljenje sa nulom!");

    else  { float c=a/b;  Label1->Caption=FloatToStr(c);  }} stop

    a,b

    b == 0c=a/b

    Djeljenje sa nulom!!!

    a/b=c

    start

    DA NE

  • 8/19/2019 Predavanja iz C++2009

    31/152

    31

    U jeziku "C++" omogu}eno je i vi{esmjerno grananje kori{}enjem ugnj`dene (uklopljene) uslovnenaredbe "if" odnosno naredbe "switch"

    if(izraz==slucaj1)naredba1 ili blok naredbi1;

    else if (izraz==slucaj2)naredba2 ili blok naredbi2;

    else if (izraz==slucaj3)naredba3 ili blok naredbi3;

      .............................else

    naredbaN ili blok naredbiN;

    switch (izraz)  { case slucaj1 :

    naredba1 ili blok naredbi1;break;case slucaj2 :

    naredba2 ili blok naredbi2;break;case slucaj3 :

    naredba3 ili blok naredbi3;break;  ......................................

    default :naredbaN ili blok naredbiN;

      }

    naredbaN iliblok naredbiN

    izraz==slu~a1NE naredba1 ili

    blok naredbi1

    DA

    izraz==slu~a2NE naredba2 ili

    blok naredbi2

    DA

    izraz==slu~a3NE naredba3 iliblok naredbi3DA

    ................

  • 8/19/2019 Predavanja iz C++2009

    32/152

    32

    Prakti~an primjer: Kreirati program koji u~itava broja x i ispisuje "x==1" ukoliko je x jednako 1,"x==2" ukoliko je x jednako 2, "x==3" ukoliko je x jednako 3 odnosno "x 3" ukoliko je x manje od 1 ili ve}e od 3.

    void __fastcallTForm1::Button1Click(TObject *Sender){int x;

    x=StrToInt(Edit1->Text);

    if(x==1) Label1->Caption="x==1";else if(x==2) Label1->Caption="x==2";else if(x==3) Label1->Caption="x==3";else Label1->Caption="x3";

    }

    void __fastcallTForm1::Button1Click(TObject *Sender){int x;

    x=StrToInt(Edit1->Text);

    switch (x)  {

      case 1 : Label1->Caption="x==1";break;  case 2 : Label1->Caption="x==2";break;  case 3 : Label1->Caption="x==3";break;  default: Label1->Caption="x3";  }}

    stop

    x

    start

    x == 1

    "x==1"

    DANE

    x == 2

    "x==2"

    DANE

    x == 3

    "x==3"

    DANE

    "x < 1 ili x > 3"

  • 8/19/2019 Predavanja iz C++2009

    33/152

    33

    Napomene za naredbu switch:

    Poslije svakog "slu~aja" ("case") unutar naredbe "switch" potrebno je navesti naredbu"break" koja omogu}ava prekid daljeg izvr{avanja naredbe "switch". Ukoliko se izostavi

    "break" iz nekog od "slu~aja", dolazi do pojave "propadanja", tj. izvr{avaju se bezuslovnosve naredbe do prve pojave naredbe "break" (ili ukoliko u naredbi "switch" nema "break",do kraja naredbe "switch").

    Iza naredbe ili bloka naredbi koji prati "slu~aj" "default" ne treba stavljati "break" naredbu.

    switch (izraz)  { case slucaj1 :

    naredba1 ili blok naredbi1;break;case slucaj2 :

    naredba2 ili blok naredbi2;case slucaj3 :

    naredba3 ili blok naredbi3;break;  ......................................

    default :

    naredbaN ili blok naredbiN;  }

    naredbaN iliblok naredbiN

    izraz==slu~a1NE

    naredba1 iliblok naredbi1

    DA

    izraz==slu~a2NE naredba2 ili

    blok naredbi2

    DA

    izraz==slu~a3NE naredba3 ili

    blok naredbi3

    DA

    ................

    "propadanje"hvali "break" na kraju "slu~aja"

  • 8/19/2019 Predavanja iz C++2009

    34/152

    34

    15. Naredbe ponavljanja (petlje tj. cikli~ne naredbe)

    15.1. Petlja "while"

    Namjena naredbe (petlje) "while" je da obezbjedi izvr{avanje tijela naredbe sve dok upravlja~kiizraz ima vrijednost ta~no (tj. razli~ito od nule).

    Prakti~an primjer:Kreirati program koji u ListBox upisuje cijelebrojeve od 0 do 9.

    while (izraz)naredba ili blok naredbi;

    izraz

    naredba iliblok naredbi

    DA

    NE

    void __fastcallTForm1::Button1Click(TObject *Sender){int i=0,granica=10;

     while(iItems->Add(IntToStr(i));  i++;  }}

    stop

    i< ranica

    i++

    i

    start

    DANE

    i=0,granica=10

  • 8/19/2019 Predavanja iz C++2009

    35/152

    35

    15.2. Petlja "do"

    Namjena naredbe (petlje) "do" je da obezbjedi izvr{avanje tijela naredbe barem jedanput, a zatim

    da ponavlja izvr{avanje sve dok upravlja~ki izraz ima vrijednost ta~no (tj. razli~ito od nule).

    Prakti~an primjer:

    Kreirati program koji u ListBox upisujecijele brojeve od 0 do 9.

    donaredba iliblok naredbi;

    while (izraz);

    void __fastcallTForm1::Button1Click(TObject *Sender){int i=0,granica=10; do

    {

      ListBox1->Items->Add(IntToStr(i));  i++;  }while(i

  • 8/19/2019 Predavanja iz C++2009

    36/152

    36

    15.3. Petlja "for"

    "for" petlja za razliku od "while" i "do" petlji na svom po~etku smje{ta upravlja~ke informacije.

    Prakti~an primjer

    : Kreirati program koji u ListBoxupisuje cijele brojeve od 0 do 9.

    void __fastcallTForm1::Button1Click(TObject *Sender){int i,granica=10; 

    for(i=0; iItems->Add(IntToStr(i));  }}

    stop

    i< ranica

    i++

    i

    start

    DANE

    granica=10

    i=0

    for(izraz1; izraz2; izraz3)naredba ili blok naredbi;

    izraz2

    naredba iliblok naredbi

    DA

    NE

    izraz3

    izraz1

  • 8/19/2019 Predavanja iz C++2009

    37/152

    37

    16. Naredba za zapo~injanje sljede}eg ciklusa petlje prije normalnog zavr{etka prethodnog ciklusa i

    naredba za prinudno napu{tanje izvr{avanja ciklusa petlje:

    Naredba "continue" unutar petlje primorava petlju da zapo~ne svoje sljede}e ponavljanje. Svenaredbe u tijelu petlje iza naredbe "continue" se preska~u. Naredba "break" unutar tijela petlje prekida rad petlje i sljede}a naredba koja se izvr{ava

    poslije poziva naredbe "break" je prva naredba iza petlje.

    Napomene za petlje:

    Pod ciklusom petlje podrazumjevamo izvr{avanje naredbi sadr`anih u tijelu petlje.

    Petlje "for", "while" i "do" su me|usobno kompatibilne po pitanju posla koji se sa njima mo`eodraditi. Petlja "for" je predvi|ena za slu~ajeve gdje imamo precizno zadat broj ponavljanja. Petlje "while" i "do" koristimo u slu~ajevima gdje je potrebno ponavljati odre|eni kod sve dok je uslov koji se u njima ispituje zadovoljen.

    Razlika izme|u petlji while i do je u tome {to }e se kod iz tijela petlje "do" izvr{iti barem jednom bez obzira da li je uslov ispunjen, dok kod petlje "while" to nije slu~aj. Ovo jeposljedica razli~itih mjesta na kojem se ispituje uslov kod petlji "while" i "do".

    Unutar pojednih izraza u "for" petlji, naredbe se razdvajaju zarezima:  for(i=0,j=0; i

  • 8/19/2019 Predavanja iz C++2009

    38/152

    38

    17. Naredba skoka "goto"

    Naredba skoka "goto" je bezuslovna. Naredba ska~e na mjesto u kodu koje je obilje`eno sa

    odgovaraju}om labelom. Labela predstavlja mjesto u kodu programa koje ima svoje ime.

    Napomene u vezi naredbe "goto":

    Skakanje sa jednog mjesta u kodu programa na drugo kori{}enjem naredbe "goto" dozvoljeno je samo u okviru jednog bloka naredbi. U protivnom program ne}e raditi ispravno!!!

    Ime labele mo`e biti bilo koji regularni "C++" identifikator. Upotrebu naredbe "goto" treba izbjegavati {to je vi{e mogu}e iz razloga ~itljivosti ipreglednosti programa.

    naredbe1;

    goto labela1;

    naredbe2;labela1:

    naredbe3;

    naredbe1

    naredbe2

    naredbe3

  • 8/19/2019 Predavanja iz C++2009

    39/152

    39

    18. Funkcije –osnovni pojmovi

    Svaka funkcija predstavlja blok naredbi koji ima svoje ime i koji se mo`e se izvr{iti pozivom

    funkcije po imenu.

    Koriste se radi optimizacije veli~ine koda programa u slu~ajevima kada je isti blok naredbi potrebnoponoviti vi{e puta u okviru programa (~esto i nad razli~itim podacima).

    Od grupa srodnih funkcija mogu se praviti biblioteke funkcija koje omogu}avaju pozivanje tihfunkcija i u drugim programima.

    fun(){

    /* blok naredbi koji cini funkciju fun() */}

    void __fastcall TForm1::Button1Click(TObject *Sender)

    {  /* grupa naredbi 1 */

    fun(); /* poziv bloka naredbi koji cini funkciju fun() */

      /* grupa naredbi 2 */}

  • 8/19/2019 Predavanja iz C++2009

    40/152

    40

    18.1. Funkcije sa argumentima predatim po vrijednosti

    Svaka funkcija preko svog imena mo`e vratiti vrijednost ~iji je oblik specificiran tipom funkcije.

    Vrijednost koju funkcija vra}a preko svog imena zadaje se naredbom "return" koja se ujedno mo`ekoristiti i kao prisilni zavr{etak izvr{avanja bloka naredbi unutar funkcije. Ukoliko nije potrebno dafunkcija vrati vrijednost preko svog imena, funkcija se defini{e tako da joj je tip "void".

    Vrijednosti argumenata se funkciji predaju unutar zagrada pri pozivu same funkcije.Funkcija prihvata predate vrijednosti i eventualno ih obra|uje.

    U ovakvom slu~aju funkcija ne mo`e izmjeniti vrijednosti njoj predatih argumenata unutar

    pozivaju}e funkcije.tip fun(tip argument_1, tip argument_2, ....){/* blok naredbi koji cini funkciju fun() */

    return neka_vrijednost; /* dodjeljivanje vrijednosti imenu funkcije */}

    void fun0(){tip argument1;tip argument2;

    ............../* grupa naredbi 1 */

      x = fun(argument1, argument2, ....); /* poziv funkcije fun() */

    /* grupa naredbi 2 */}

  • 8/19/2019 Predavanja iz C++2009

    41/152

    41

    18.2. Primjeri kori{}enja funkcija sa argumentima predatim po vrijednosti

    Prakti~an primjer: Kreirati program na programskom jeziku "C" koji za dva cijela broja kori{}enjem

    funkcije prora~unava njihov zbir i {tampa rezultat.

    int suma(int a, int b){int c;  c=a+b;

    return c;}

    void fun0()

    {int a=2, b=5,c;c=suma(a,b);

    Form1->Label1->Caption=  IntToStr(c);}

    int suma(int x, int y){int z;  z=x+y;return z;

    }

    void fun0()

    {int a=2, b=5,c;c=suma(a,b);

    Form1->Label1->Caption=  IntToStr(c);}

    int suma(int x, int y){return x+y;

    }

    void fun0(){int a=2, b=5;

    Form1->Label1->Caption=  IntToStr(suma(a,b));}

    Ove dvije promjenjive su potpuno nezavisne.Jedino {to im je zajedni~ko je vrijednost koja se pri pozivu

    funkcije (suma()) prekopira iz promjenjive vidljive upozivaju}oj funkciji (fun0()) u promjenjivu koja je vidljivasamo u pozvanoj funkciji (suma()).

    void suma(int x, int y)

    {Form1->Label1->Caption=  IntToStr(x+y);}

    void fun0(){int a=2, b=5;suma(a,b);}

  • 8/19/2019 Predavanja iz C++2009

    42/152

    42

    18.3. Funkcije sa argumentima predatim po referenci

    Funkcija mo`e da izmjeni vrijednost predatog argumenta, ukoliko je taj argument predat pozvanoj

    funkciji po referenci.

    Ukoliko je argument predat po referenci, isti memorijski prostor koji koristi argument u pozivaju}ojfunkciji bi}e dodjeljen odgovaraju}oj promjenjivoj u pozvanoj funkciji i na taj na~in je omogu}eno dapozvana funkcija promjeni vrijednost argumenta u pozivaju}oj funkciji.

    U ovakvom slu~aju funkcija mo`e izmjeniti vrijednosti njoj predatih argumenata unutar pozivaju}efunkcije. tip fun(tip &argument_1, tip &argument_2, ....)

    {/* blok naredbi koji cini funkciju fun() */

    return neka_vrijednost; /* dodjeljivanje vrijednosti imenu funkcije */}

    void fun0(){tip argument1;tip argument2;..............

    /* grupa naredbi 1 */

      x = fun(argument1, argument2, ....); /* poziv funkcije fun() */

    /* grupa naredbi 2 */}

    argument_1 i argument_2 su reference na promjenjiveargument1 i argument2, tj djele isti memorijski prostor (samo{to se u razli~itim blokovima naredbi druga~ije nazivaju)

  • 8/19/2019 Predavanja iz C++2009

    43/152

    43

    18.4. Primjeri kori{}enja funkcija sa argumentima predatim po referenci

    Prakti~an primjer: Kreirati program na programskom jeziku "C" koji za dva cijela broja kori{}enjem

    funkcije prora~unava njihov zbir i {tampa rezultat.void suma(int &x, int y){x+=y;

    }

    void fun0(){int a=2, b=5;

    suma(a,b);

    Form1->Label1->Caption=  IntToStr(a);}

    void suma(int a,int b,int &c){  c=a+b;  return;}

    void fun0(){int a=2, b=5,c;suma(a,b,c);

      Form1->Label1->Caption=  IntToStr(c);}

    void suma(int x,int y,int &z){  z=x+y;return;

    }

    void fun0(){int a=2, b=5,c;suma(a,b,c);

      Form1->Label1->Caption=  IntToStr(c);}

    Ove dvije promjenjive imaju isti memorijski prostor, iizmjena reference u pozvanoj funkciji }e promjeniti

    vrijednost predatog argumenta u pozivaju}oj funkciji.

  • 8/19/2019 Predavanja iz C++2009

    44/152

    44

    18.5. Neposredno ugra|ivanje naredbi iz tijela funkcije u kod programa

    Ukoliko se ispred definicije funkcije navede slu`bena rije~ inline, prevodilac }e poku{ati (ukoliko jemogu}e) da sve naredbe iz tijela funkcije umetne direktno na mjesto poziva funkcije. Na ovaj na~inse ubrzava izvr{avanje programa (nema gubljenja vremena pri pozivu funkcija) ali se veli~inaprograma naj~e{}e zna~ajno uve}ava.

    18.6. Podrazumjevane vrijednosti argumenata funkcija

    Ukoliko se argumentima pri definisanju funkcije daju podrazumjevane vrijednosti, onda ih pri pozivunije potrebno navoditi osim ukoliko se `eli promjeniti podrazumjevana vrijednost argumenata.

    Argumenti sa podrazumjevanim vrijednostima se navode poslije ostalih argumenata u definicijifunkcije.void fun(int i,int j=2, int k=3){}//---------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){int a=100,b=200,c=300;

      fun(a,b,c); // kao da je pozvana funkcija fun(100,200,300)

      fun(a,b); // kao da je pozvana funkcija fun(100,200, 3)

      fun(a); // kao da je pozvana funkcija fun(100, 2, 3)

    // fun(); // javlja gresku jer argument i nema podrazumjevanu vrijednost}

  • 8/19/2019 Predavanja iz C++2009

    45/152

    45

    18.7. Preklapanje imena funkcija

    Programski jezik C++ omogu}ava definisanje vi{e funkcija koje imaju isto ime, ali razli~iti broj i/ili

    tip argumenata. Koja }e se funkcija konkretno pozvati, zavisi od broja i tipa predatih argumenata.// Primjer preklapanja imena funkcija

    void fun(float a,float b){}

    void fun(int i,int j){}

    void fun(int i)

    {}

    void fun(){}

    //--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){int i=1,j=2;float x=3.0,y=4.0;

      fun();

      fun(i);

      fun(i,j);

      fun(x,y);}

  • 8/19/2019 Predavanja iz C++2009

    46/152

    46

    18.8. Prototipovi funkcija

    U programima napisanim na programskom jeziku "C++" mogu}e je definiciju neke funkcija smjestiti

    prije ili poslije njihovog poziva.

    Ukoliko se definicija funkcije smje{ta poslije njenog poziva, potrebno je "C++" prevodiocu prijeprvog poziva prototipom funkcije sao{titi tip funkcije i tip argumenata koji joj se predaju.Prethodno je neophodno da bi kompajler na ispravan na~in interpretirao poziv funkcija.

    Prototip funkcije je isti kao i zaglavlje funkcije, sa tim {to nije neophodno navoditi imenaargumenata, ve} samo njihove tipove.

    int suma(int,int); // prototip funkcije suma()

    void fun(){int x,y,z;

    z=suma(x,y); // poziv funkcije suma()}

    int suma(int a,int b) // defincija funkcije suma()

    int c;  c=a+b;return c;

    }

  • 8/19/2019 Predavanja iz C++2009

    47/152

    47

    19. Globalne i lokalne promjenjive (opseg va`enja)

    Karakteristike promjenjivih:

    Svaka promjenjiva ima dvije karakteristike: opseg (vidljivost) trajanje

    Opseg ili vidljivost defini{e koji dio koda programa ima priustup promjenjivoj.

    Trajanje specificira koliko dugo se promjenjiva zadr`ava u memoriji u toku izvr{avanja programa.

    Globalne i lokalne promjenjive:

    Promjenjive se mogu deklarisati (i inicijalizovati) prije bilo koje funkcije, ili u bloku naredbi prijenjihovog prvog pozivanja. Sa tog aspekta promjenjive dijelimo na globalne i lokalne.

    Globalne promjenjive se deklari{u prije koda funkcija i vidljive su od mjesta deklarisanja dokraja koda programa. Postoje sve dok traje izvr{avanje programa. Imaju inicijalnu vrijednost 0ukoliko se druga~ije ne inicijalizuju.

    Lokalne promjenjive su vidljive samo unutar bloka naredbi u kojem su deklarisane i to odmjesta deklaracije do kraja bloka. Postoje samo dok se izvr{avaju naredbe iz tog blokanaredbi. Nemaju inicijalnu vrijednost.

  • 8/19/2019 Predavanja iz C++2009

    48/152

    48

    int x=0; // globalna promjenjiva x je vidljiva u cijelom programu od// ovog mjesta pa do kraja programa

    void fun(int z){  int y=1; // u funkciji fun() vidljive su globalna promjenjiva} // x (x==0) i lokalne promjenjive y (y==1) (od mjesta

    // deklaracije do kraja bloka naredbi f-je fun()) i// z (z==2 zbog prenosa vrijednost 0+2 (x+y) iz// funkcije fun0())

    void fun0(){int y=2; // u funkciji fun0() vidljive su globalna promjenjiva

    // x (x==0) i lokalna promjenjiva y (y==2) (od mjesta  // deklaracije do kraja bloka naredbi f-je fun0())

    {int z=3; // u ovom "ugnjezdenom" bloku naredbi vidljive su// globalna promjenjiva x (x==0) i lokalne

    } // promjenjive y (y==2) i z (z==3)

    // poslije "ugnjezdenog" bloka naredbi unutar funkcijefun(x+y); // fun0() vidljive su globalna promjenjiva x (x==0)

    // i lokalna promjenjiva y (y==2)}

  • 8/19/2019 Predavanja iz C++2009

    49/152

    49

    19.1. Zasjenjivanje globalih i lokalnih promjenjivih

    Globalne i lokalne promjenjive mogu biti zasjenjene (redeklarisane) unutar nekog bloka naredbi

    ukoliko se u tom bloku naredbi izvr{i deklaracija nove promjenjive sa istim imenom kao {to je imeve} postoje}e (vidljive) promjenjive.

    U slu~aju redeklaracije neke promjenjive, nova promjenjiva sa istim imenom postoji dok seizvr{avaju naredbe iz bloka u kojem je deklarisana, a po zavr{etku rada sa tim blokom naredbi,nova promjenjiva nestaje i rad se mo`e nastaviti sa starom promjenjivom (i njenom neizmjenjenomvrijedno{}u).

    int x=0; // globalna promjenjiva x (x==0) je vidljiva u cijelom programu// osim u blokovima naredbi u kojima je zasjenjena

    void fun(int x) // lokalna promjenjiva x (x==3) zasjenjuje globalnu{ // promjenjivu x (x==0) unutar bloka naredbi funkcije fun()}

    void fun0(){int x=1; // lokalna promjenjiva x (x==1) zasjenjuje globalnu promjenjivu

    // x (x==0) unutar bloka naredbi funkcije fun0()

    {int x=2; // lokalna promjenjiva x (x==2) u ugnjezdenom bloku naredbi// zasjenjuje lokalnu promjenjivu x (x==1) iz bloka naredbi

    } // funkcije fun0()fun(3);}

  • 8/19/2019 Predavanja iz C++2009

    50/152

    50

    19.2. Pristup globalnoj zasjenjenoj promjenjivoj

    Zasjenjenoj globalnoj promjenjivoj se mo`e pristupiti kori{}enjem operatora :: za razrje{enjedosega.

    Primjer:

    int x = 101; // globalno x

    void fun()

    {int x=202; // lokalno x  int a,b;

      a = x; // a==202

    b = ::x; // b==101}

  • 8/19/2019 Predavanja iz C++2009

    51/152

    51

    20. Stati~ke i dinami~ke lokalne promjenjive

    20.1. Dinami~ke (automatske) promjenjive:

    Dinami~ke promjenjive su lokalne promjenjive koje nastaju u operativnoj memoriji izvr{avanjemnaredbe za nihovu deklaraciju.

    Dinami~ke promjenjive nestaju zavr{etkom bloka naredbi u kojem su deklarisane. Inicijalna vrijednost dinami~kih promjenjivih je neodre|ena (zavisi od prethodnog sadr`aja

    memorije koja im je dodjeljena za ~uvanje vrijednosti). Sve lokalne promjenjive su dinami~ke ukoliko se pri deklaraciji slu`benom rije~ju st ti ne

    proglase stati~kim.

    20.2. Stati~ke promjenjive:

    Sve globalne promjenjive su stati~ke. Lokalne promjenjive koje ispred naredbe za deklaraciju imaju slu`benu rije~ st ti su stati~ke. Stati~ke promjenjive pri prvom deklarisanju imaju inicijalnu vrijednost jednaku nuli. Lokalne stati~ke promjenjive pri ponovnom deklarisanju u okviru nekog bloka naredbi (koji se

    izvr{ava vi{e puta) zadr`avaju vrijednost koju su imale prilikom prethodnog zavr{etka togbloka.

  • 8/19/2019 Predavanja iz C++2009

    52/152

    52

    // primjer koriscenja statickih promjenjivih

    void semafor(void)

    {static int brojac=100,s=0; // nepotrebno je zadavati inicijalnu vrijednost 0

    Form1->ListBox1->Items->Add( IntToStr(s%2) + " " + IntToStr(brojac) );  s++;brojac++;}

    void fun(){int i;  for(i=0;iListBox1->Items->Add( IntToStr(s%2) + " " + IntToStr(brojac) );

      s++; brojac++;}

    void fun(){int i;  for(i=0;i

  • 8/19/2019 Predavanja iz C++2009

    53/152

    53

    21. Konverzija vrijednosti razli~itih tipova promjenjivih

    Postoje dvije vrste konverzije vrijednosti razli~itih tipova promjenjivih:

    eksplicitna konverzija implicitna konverzija

    21.1. Eksplicitna konverzija

    Eksplicitna konverzija se radi kori{}enjem operatora eksplicitne konverzije kao {to je prikazano usljede}em primjeru:

    // Primjer demonstrira eksplicitnu konverziju

    void fun(){float x=123.456, y=234.567;int i;

      i=(int)x; // poslije ove naredbe i ima vrijednost 123

    Form1->Label1->Caption=IntToStr((int)y); // ovom naredbom ce se u Label1  // ispisati cijeli broj 234

    }

    Operatori eksplicitne konverzijeU ovom slu~aju vr{e konverzijurealnih vrijednosti u cjelobrojne.

  • 8/19/2019 Predavanja iz C++2009

    54/152

    54

    21.2. Implicitna (automatska) konverzija:

    Implicitnu konverziju vr{i programski jezik "C++" automatski ukoliko je mogu}e po utvr|enimpravilima. Na primjer, pri dodjeljivanju neke vrijednosti jednog tipa promjenjivoj drugog tipa, ukoliko

     je mogu}e, vr{i se konvertovanje te vrijednosti u tip promjenjive kojoj se ta vrijednost dodjeljuje.

    Primjer implicitne konverzije dat je u sljede}em primjeru:

    // Primjer demonstrira implicitnu konverziju

    void fun(){float x=123.456, y;

    int i;

      i=x; // poslije ove naredbe i ima vrijednost 123y=i; // poslije ove naredbe y ima vrijednost 123.000000

    }

  • 8/19/2019 Predavanja iz C++2009

    55/152

    55

    Konverzija vrijednosti promjenjivih pri aritmeti~kim operacijama

    C++ kompajler pri aritmeti~kim operacijama automatski konvertuje vrijednosti sljede}ih promjenjivih: Sve vrijednosti promjenjivih tipa char, unsigned char, signed char i short int pretvaraju se u

    int. Vrijednosti promjenjivih unsigned short pretvaraju se u unsigned int. C++ jezik (kompajler) uvjek manji tip podatka pretvara u ve}i.

    Primjer: Pri sabiranju promjenjive tipa int i promjenjive tipa float, vrijednost promjenjive tipa int sekonvertuje u vrijednost tipa float.

    // primjer logicke greske pri djeljenju koja je posljedica nevrsenja konverzijevoid fun(){int i=5;float x;

      x=i/2; // posto su sve vrijednosti u aritmetickom dijelu naredbe// cjelobrojne, prvo se vrsi aritmeticki dio naredbe (cjelobrojno// djeljenje) pa tek poslije toga konverzija rezultata u float// zbog dodjeljivanja

    Form1->Label1->Caption=FloatToStr(x); // ovom naredbom u Label1 ce se  // upisati vrijednost 2.000000}

  • 8/19/2019 Predavanja iz C++2009

    56/152

    56

    // primjer djeljenja bez logicke greskevoid fun()

    {int i=5;float x;  x=i/2.0; // prije aritmetickog dijela naredbe vrsi se konverzija prvog

    // opranda u float, (drugi – 2.0 je vec zapisan u float formatu)// pa tek onda djeljenje dvije float vrijednosti

    Form1->Label1->Caption=FloatToStr(x); // ovom naredbom u Label1 ce se  // upisati vrijednost 2.500000}

    // primjer djeljenja bez logicke greskevoid fun(){int i=5;float x;  x=(float)i/2; // prije aritmetickog dijela naredbe vrsi se eksplicitna

    // konverzija prvog opranda u float, (drugi – 2 je zapisan// u int formatu), zatim, implicitna konverzija vrijednoti// drugog operanda u float (2-->2.0) pa tek onda djeljenje

    // dvije float vrijednosti

    Form1->Label1->Caption=FloatToStr(x); // ovom naredbom u Label1 ce se  // upisati vrijednost 2.500000}

  • 8/19/2019 Predavanja iz C++2009

    57/152

    57

    22. Definisanje sopstvenih tipova podataka

    Definisanje sopstvenih tipova podataka se radi naredbom typedef.

    23. Simboli~ke konstante - modifikator tipa podataka "const"

    U programskom jeziku C++ dodavanjem kvalifikatora const na po~etku naredbi za definisanje(deklaraciju + inicijalizaciju) promjenjivih dobijaju se prave konstante, za razliku od programskog

     jezika C u kojem su se dobijale promjenjive ~ije vrijednosti ne mogu da se promjene.

    typedef int cijeli_broj;

    void fun(){cijeli_broj i=55; // i je tipa "cijeli_broj" odnosno "int"}

    // Primjer kori{}enja simboli~kih konstanti

    const int DIM = 50;double niz[DIM];

  • 8/19/2019 Predavanja iz C++2009

    58/152

    58

    24. Tip podataka "void"

    Funkcija koja ne treba da vrati vrijednost preko svog imena je tipa void. Ukoliko se izostavi tip

    funkcije, podrazumjeva se tip int.

    Funkciji koja nema argumente, u zagradama iza njenog imena se stavlja slu`bena rije~ void,mada to nije obavezno.

    Neke funkcije vra}aju vrijednost tipa void koju je potrebno eksplicitno konvertovati u odgovaraju}i

    tip podataka. Primjeri }e biti odra|eni kad se bude obra|ivalo dinami~ko alociranje memorije.

    void fun(void) /* kod funkcije fun() */{Form1->Label1->Caption="Pozdrav!!!";

    }

    void fun0(void){fun(); /* poziv funkcije fun() */

    }

  • 8/19/2019 Predavanja iz C++2009

    59/152

    59

    25. Pointeri (pokaziva~i)

    25.1. Definicija pointera

    Pointer je promjenjiva u koju se mo`e upisati adresa neke promjenjive (memorijskog objekta).Koriste se za indirektno pristupanje memoriji ra~unara, odnosno, za indirektno pristupanjememorijskim objektima.

    25.2. Deklaracija pointera:

    Pointer se deklari{e naredbom: tip_podatka * ime_pointera; Na primjer:

    25.3. Dodjeljivanje vrijednosti pointerima:

    NAPOMENA: Pointer treba da bude istog tipa kao i promjenjiva ~ijoj }e se vrijednosti indirektnopristupati pomo}u tog pointera. Druga~ije re~eno: pointer treba da bude istog tipa kao i promjenjiva~iju adresu taj pointer sadr`i –(tj. na koju taj pointer pokazuje).

    void fun(){int i=15,*p;p=&i; // p "pokazuje" na i, tj. sadrzi adresu od iForm1->Lebel1->Caption=IntToStr(*p); // ispis onoga sto se nalazi na adresi

    // upisanoj u p, a to je vrijednost// varijable i

    *p=1155; // u memorijsku lokaciju cija se adresa sadrzi u promjenjivoj p,} // (tj., u promjenjivu i) upisuje se vrijednost 1155

    int *p; // u promjenjivu p se moze upisati adresa neke int promjenjivefloat *p_float, *fptr;

  • 8/19/2019 Predavanja iz C++2009

    60/152

    60

    25.4. Primjer demonstrira direktan pristup vrijednosti upisanoj u promjenjivu preko imena

    promjenjive i indirektan pristup vrijednosti promjenjive preko pointera koji sadr`i adresu promjenjive:

    int i=55, *p, j;void fun(){p=&i;j=i;j=*p;

    }

      55 100

      i pAdresa memorijskelokacije "i" je 100

    "p" je promjenjiva (pointer)u koju je upisana adresapromjenjive "i"

    U promjenjivu "p" je upisana adresa promjenjive "i"

    "*p" predstavlja sadr`aj memorijske lokacije ~iji je adresaupisana u promjenjivu "p", a to je sadr`aj promjenjive "i"

  • 8/19/2019 Predavanja iz C++2009

    61/152

    61

    26. Funkcije sa pointerima kao argumentima, Simuliranje predaje argumenata po referenci

    U programskom jeziku "C++" predaja argumenata funkcijama se vr{i po vrijednosti i po referenci.

    Simulacija predaje argumenata po referenci se mo`e ostvariti kori{}enjem pointera, odnosnopredajom adresa memorijskih objekata ~ije vrijednosti funkcije eventualno mogu mjenjati.

    // program racuna sumu dva broja koriscenjem funkcije// kojoj se neki od argumenata predaju kao pointeri

    void funkcija(int a,int b,int *p_suma) // funkcija preko imena

    { // ne vraca vrijednost

    *p_suma=a+b; // na adresu memorijske lokacije upisanu u// pointer p_suma upisuje se vrijednost (a+b)

    return;}

    void fun(){int x=12, y=15, z;

    // z je promjenjiva ciju vrijednost funkcija

    // treba da promjeni. Zbog toga se funkcijifunkcija(x, y, &z); // predaje adresa promjenjive z kako bi

    // funkcija indirektno koriscenjem pointera// (u koji ce biti upisana adresa promjenjive z)// mogla izmjeniti sadrzaj promjenjive z.

    Form1->Label1->Caption=IntToStr(z);}

  • 8/19/2019 Predavanja iz C++2009

    62/152

    62

    27. Reference (upu}iva~i)

    Referenca u jeziku C++ je alternativno ime za neki memorijski objekat. Reference se pri definisanju

    moraju inicijalizovati nekim objektom jer same nisu memorijski objekti, ve} samo "drugo" ime zaneki ve} postoje}i objekat.

    Glavna primjena referenci je prenos argumenata u funkcije "po referenci" (tj. po adresi) iomogu}avanje mijenjanja vrijednosti tih argumenata.

    NAPOMENA: U prethodnom primjeru se javlja preklapanje funkcija (imaju isto ime, ali razli~iteargumente).

    void inkrement(int &a) {a++;} // predaja argumenta po referenci

    void inkrement(int *a) {(*a)++;} // simuliranje predaje argumenta po  // referenci koriscenjem pointeravoid fun(){ int x=1;  int &r=x; // definisanje reference

      r=101; // isto kao i x=101;

      inkrement(&x); // x==102

      inkrement(x); // x==103

    }

  • 8/19/2019 Predavanja iz C++2009

    63/152

    63

    28. Nizovi promjenjivih (jednodimenzioni, dvodimenzioni . . . )

    28.1. Jednodimenzioni nizovi podataka:

    Deklarisanje jednodimenzionih nizova podataka:int niz[10];float f_niz[5];

    Pristupanje pojedinim elementima jednodimenzionalnog niza se radi preko indeksa:niz[5]=255;f_niz[3]=123.456;

    Deklaracija i inicijalizacija jednodimenzionih nizova podataka:int niz[10]={9,8,7,6,5,4,3,2,1,0};float f_niz[5]={123.456, 234.567, 345.678, 456.789, 567.890};

    28.2. Dvodimenzioni nizovi podataka:

    Deklarisanje dvodimenzionalnog niza podataka:int niz[3][4];

    Pristupanje pojedinim elementima dvodimenzionalnog niza se radi preko indeksa:niz[2][1]=255;

    Deklaracija i inicijalizacija dvodimenzionih nizova podataka:int niz[3][4]={{11, 10, 9, 8},{ 7, 6, 5, 4},{ 3, 2, 1, 0}};

  • 8/19/2019 Predavanja iz C++2009

    64/152

    64

    NAPOMENA: Indeks niza koji ima n elemenata u programskom jeziku C ima opseg od 0 do n-1.

    // primjer generisanja niza slucajnih brojeva, njegovog sortiranja i ispisivanja

    const int MAX=10; // simboli~ka konstanta MAX ima vrijednost 10int niz[MAX]; // deklaracija niza cijelih brojeva kao globalne promjenjive

    void fun(){int i,j,t;  randomize(); // inicijalizacija generatora slucajnih brojeva  for(i=0;i0;i--) // sortiranje nizafor(j=0;jAdd(IntToStr(niz[i]));}

    GENERISANO ListBox1:0192837465

    9876543210

  • 8/19/2019 Predavanja iz C++2009

    65/152

    65

    29. Jednodimenzioni nizovi i pointeri:

    Za nizove va`i da je ime niza jednako adresi prvog elementa niza.

    Ukoliko se izvr{i deklaracija i naredba dodjeljivanja vrijednosti pointeru:

    Va`i da je:

    Gdje su:  niz[i] - i-ti element niza (i je indeks koji ide od 0 do n-1 gdje je n broj elemenata niza)*(niz+i) - vrijednost koja se nalazi na memorijskoj lokaciji ~ija je adresa jednaka adresi po~etnog

    elementa niza uve}anoj za veli~inu i elemenata niza

    *(ptr+i) - vrijednost koja se nalazi na memorijskoj lokaciji ~ija je adresa jednaka adresi po~etnogelementa niza uve}anoj za veli~inu i elemenata niza  ptr[i] - ukoliko je ime niza "niz" jednako adresi prvog elementa niza, po analogiji se mo`e

    iskoristiti pointer ptr (~ija je vrijednost jednaka adresi prvog elementa niza) koji saindeksom i u srednjim zagradama iza imena pointera dohvata vrijednost i-tog elementaniza.

    int niz[10];int *ptr;

    ptr=niz; /* Ova naredba je identicna sa : ptr=&niz[0] jer je (niz == &niz[0]) */

    niz[i] == *(niz+i) == *(ptr+i) == ptr[i]

  • 8/19/2019 Predavanja iz C++2009

    66/152

    66

    Prakti~na demonstracija upotrebe pointera u radu sa nizovima je data u primjeru:

    void fun(){int niz[2]={10,11};

    int *ptr;

      ptr=niz;

    // slijedi ispisivanje istog niza na cetiri razlicita nacina  Form1->ListBox1->Items->Add(IntToStr( niz[0])+" "+IntToStr( niz[1]) );  Form1->ListBox1->Items->Add(IntToStr(*(niz+0))+" "+IntToStr(*(niz+1)) );  Form1->ListBox1->Items->Add(IntToStr(*(ptr+0))+" "+IntToStr(*(ptr+1)) );  Form1->ListBox1->Items->Add(IntToStr( ptr[0])+" "+IntToStr( ptr[1]) );

    }

    UPISANO U ListBox1:10 11

    10 1110 1110 11

  • 8/19/2019 Predavanja iz C++2009

    67/152

    67

    30. Strukture podataka

    30.1. Definicija strukture

    Strukture predstavljaju slo`ene tipove promjenjivih (memorijske objekte) sastavljene od jednostavnijih tipova promjenjivih.

    Definicija strukture, inicijalizacija i dodjela vrijednosti elementima struktura se radi kao u primjeru:

    struct str  // DEFINICIJA tipa strukture nazvanog "str"{ char c;

      int i;  };

    str s1,s2={'A',123}; // DEKLARACIJA dvije strukture (s1 i s2) tipa "str"  // i inicijalizacija strukture s2

    void fun(){

    s1.c='A';s1.i=s2.i+321; // DODJELA VRIJEDNOSTI pojednim elementima struktura

    }

  • 8/19/2019 Predavanja iz C++2009

    68/152

    68

    30.2. Pristupanje elementima strukture kori{}enjem pointera na strukturu se radi kao u primjeru:

    30.3. Pristupanje elemntima pojedinih struktura koje sa~injavaju niz struktura se radi kao u

    primjeru:

    struct str // Deklaracija strukture s i pointera na strukturu sp

    { char c; // tipa "str"int i;  } s, *sp;void fun(){char cc,ii;

    s.c='A'; s.i=1;  cc=s.c; ii=s.i; // direktan pristup elementima strukture

      sp=&s;   // u pointer sp upisuje se adresa strukture s

      cc=sp->c; ii=sp->i); // posredan pristup elementima strukture } // preko pointera na strukturu

    struct str // Deklaracija niza struktura niz_s tipa "str"

    { char c;  int i;  } niz_s[2];void fun(){

    niz_s[0].c='A'; niz_s[0].i=1;  niz_s[1].c='B'; niz_s[1].i=2;} 

  • 8/19/2019 Predavanja iz C++2009

    69/152

  • 8/19/2019 Predavanja iz C++2009

    70/152

    70

    32. Fizi~ki prikaz deklarisanih promjenjivih u memoriji

    short i, j;float x=12.3, *p_float;struct S3D  {

    char c;  short i;  float x;  } s, *s_ptr;

    i j x p_float s.c s.i s.x s_ptr

    short n [10], *p;

    n[0] n[1] n[2] n[3] n[4] n[5] n[6] n[7] n[8] n[9] p

  • 8/19/2019 Predavanja iz C++2009

    71/152

    71

    33. Datoteke

    33.1. Pointer na datoteku

    Ponter na datoteku predstavlja promjenjivu kojoj se mo`e dodjeliti fizi~ka datoteka na disku. Poslijedodjeljivanja datoteke pointeru, sva dalja manipulacija sa datotekom se odvija kori{}enjem pointera.

    Deklaracija pointera na datoteke se radi naredbom:FILE *fp, *file, *datoteka, *fpinput, *fpoutput, *fpappend, ... ;

    33.2. Funkcije za otvaranje / kreiranje datoteka

    Otvaranje / kreiranje datoteke i dodjela datoteke pointeru na datoteku se radi naredbom:fp=fopen(ime_datoteke,mod);

    "ime_datoteke" je string koji sadr`i fizi~ku adresu datoteke (na pr.: " C:\\TEMP\\TEST.DAT ")"mod" je string koji se sastoji od sljede}ih znakova:

    - r Otvaranje za ~itanje- w Kreiranje za upis- a Dopisivanje na kraj datoteke- + Simbol dodavanja koji omogu}ava pristup za ~itanje i upis- b Otvaranje u binarnom modu- t Otvaranje u tekst modu

    Ukoliko je vrijednost pointera "fp" razli~ita od vrijednosti NULL, datoteka je otvorena / kreirana.

  • 8/19/2019 Predavanja iz C++2009

    72/152

    72

    33.3. Funkcije za upisivanje u datoteku:

    fputc(c,fp) Upisuje znak "c" u datoteku kojoj je pridru`en pointer "fp".

    fprintf(fp,format,argumenti) Vr{i formatirani upis u datoteku kojoj je pridru`en pointer"fp". Sadr`aj datoteke je sli~an sadr`aju ekrana poslijeispisa funkcijom printf().

    33.4. Funkcije za ~itanje iz datoteke:

    fgetc(fp) Preko svog imena vra}a teku}i znak iz datoteke kojoj jepridru`en pointer "fp".

    fscanf(fp,format,adrese_argumenata) ^ita vrijednosti iz datoteke kojoj je pridru`enpointer "fp" i dodjeljuje ih argumentima u skladusa stringom "format". Radi sli~no funkcijiscanf().

    33.5. Funkcije za zatvaranje datoteka:

    fclose(fp) Zatvara datoteku kojoj je pridru`en pointer "fp"

    fcloseall() Zatvara sve otvorene datoteke

  • 8/19/2019 Predavanja iz C++2009

    73/152

    73

    33.6. NAPOMENE za rad sa datotekama:

    Preporu~je se upotreba sljede}ih funkcija u parovima:

    fputc() i fgetc()

    fprintf() i fscanf()

    ...

    Prethodno zna~i da ukoliko je u datoteku vr{en upis kori{}enjem fprintf, najlak{e je is~itatifunkcijom fscanf itd.

    Ukoliko je datoteka otvorena za ~itanje ili upisivanje, teku}a pozicija u datoteci se nalazi napo~etku datoteke, a ukoliko je otvorena za dopisivanje, teku}a pozicija se nalazi na kraju datoteke.

    Upis i ~itanje iz datoteke se vr{i po~ev{i od teku}e pozicije u datoteci.

    Svakim upisivanjem ili ~itanjem datoteke vr{i se pomjeranje teku}e pozicije iza upisanog ilipro~itanog sadr`aja.

    Teku}a pozicija se mo`e mjenjati funkcijama kao {to su: rewind(), fseek() itd...

    Zadnji znak datoteke je EOF (End of File).

  • 8/19/2019 Predavanja iz C++2009

    74/152

    74

    33.7. Formatirani upis u datoteke i formatirano ~itanje iz datoteka

    fprintf() - Formatirani upis u datoteku Navodi se u sljedecem obliku:

      fprintf (fp, " format ", argument1, argument2, ..... );

    fp je pokaziva~ na strukturu FILE, tj. na datoteku

    " format " je niz znakova koji }e biti upisan u datoteku sa tim {to }e svi specijalni znaci u njemubiti zamjenjeni ili svojim zna~enjem ili vrijednostima odgovaraju}ih argumenta navedenih poredosljedu u listi argumenata iza " format " niza znakova.

    Argument je promjenjiva (njena vrijednost) koja se predaje funkciji.

    Neki od specijalnih znakova su na primjer: Specijalni znaci za formatiranje teksta:

    \n - prelazak u novi red\t - preskakanje 8 mjesta (znak TAB).....

    Specijalni znaci za ispis odgovarajucih argumenata:  %c - za ispis jednog slova (znaka - karaktera)  %s - za ispis niza znakova (terminirani niz char-ova)

      %d - za ispis cijelih brojeva  %f - za ispis realnih brojeva  %10.3f - za formatirani ispis realnih brojeva (za prikaz cijelog realnog broja je rezervisano

    ukupno 10 mjesta ra~unaju}i i decimalnu ta~ku. Za decimalni dio je rezervisano 3 mjesta)  %e - za eksponencijalni ispis realnih brojeva  %g - za ispis realnih brojeva

  • 8/19/2019 Predavanja iz C++2009

    75/152

    75

      %x - za ispis heksadecimalnih brojeva  %o - za ispis oktalnih brojeva  %p - za ispis adresa memoriskih lokacija (tj. za pointere)  .....

    PRIMJERI KORI[]ENJA NAREDBE "fprintf()" UPISANO U DATOTEKU:

    fprintf(fp,"Pozdrav studentima ETF-a"); Pozdrav studentima ETF-a

    fprintf(fp," Pozdrav \n studentima \n ETF-a");PozdravstudentimaETF-a

    fprintf(fp,"%d",101); 101

    fprintf(fp,"Vrijednost broja iznosi %d",101); Vrijednost broja iznosi 101

    int x=101;fprintf(fp,"Vrijednost broja x iznosi %d",x);

    Vrijednost broja x iznosi 101

    int x=101,y=23;fprintf(fp,"x=%d y=%d z=%d",x,y,123);

    x=101 y=23 z=123

    fprintf(fp,"Ime=%s broj=%d \n pol=%c koef=%f",

    "Janko", 55, 'M', 5.5 );

    Ime=Janko broj=55

    pol=M koef=5.500000

    fprintf(fp,"X=%f \n", 123.456789);fprintf(fp,"X=%.0f", 123.456789);

    X=123.456789X=123

    fprintf(fp,"X=%10.2f \n", 123.456789);fprintf(fp,"I=%10d", 123);

    X= 123.45I= 123

  • 8/19/2019 Predavanja iz C++2009

    76/152

    76

    fscanf() - Formatirano u~itavanje iz datoteke

      Navodi se u sljedecem obliku:

      fscanf ( fp, " format ", & argument1, & argument2, ..... );

    fp je pokaziva~ na strukturu FILE, tj. na datoteku

    " format " je niz znakova koji je isti kao i " format " kori{}en pri upisu u naredbi "fprintf()".

    Funkciji "fscanf()" se ne predaju argumenti, ve} njihove adrese u radnoj memoriji ra~unara. To seostvaruje operatorom "&".

    "&argument" je adresa promjenjive kojoj }e funkcija "fscanf()" dodjeliti une{enu vrijednost.Neki od specijalnih znakova koji se koriste u formatu funkcije "fscanf()" su na primjer:

    %c - za u~itavanje jednog slova (znaka - karaktera)  %s - za u~itavanje niza znakova (terminirani niz char-ova)  %d - za u~itavanje vrijednosti cijelog broja  %f - za u~itavanje vrijednosti realnog broja

    "fscanf()" u~itava vrijednosti iz datoteke, konvertuje ih u oblik naveden specijalnim znakom unutarformata i dodjeljuje ih argumentima ~ije su adrese navedene iza formata po redosljedu.

    Funkcija "fscanf()" o~ekuje da dobije vrijednosti ba{ kao {to je to definisano formatom. Ukoliko seunesu neo~ekivani podaci, program mo`e po~eti da se "~udno" pona{a!!!

  • 8/19/2019 Predavanja iz C++2009

    77/152

    77

    PRIMJERI KORI[]ENJA NAREDBE

    "fscanf()"

    SADR@AJ DATOTEKE

    KOJI SE UPRAVO ^ITA

    REZULTAT IZVR[AVANJA

    NAREDBE

    int i;

    fscanf(fp,"%d", &i);

    10 i ima vrijednost 10

    int i,j;fscanf(fp,"%d %d", &i, &j);

    1020

    i ima vrijednost 10 j ima vrijednost 20

    int i,j;fscanf(fp,"%d %d", &i, &j);

    10 20i ima vrijednost 10

     j ima vrijednost 20

    char znak;fscanf(fp,"%c",&znak);

    M znak ima vrijednost 'M'

    float x;fscanf(fp,"%d", &x);

    123.456 x ima vrijednost 123.456000

  • 8/19/2019 Predavanja iz C++2009

    78/152

    78

    33.8. Primjer kreiranja datoteke za upis

    void fun(){FILE *fp; // deklarisanje pokazivaca na datoteku

    fp=fopen("C:\\TEMP\\OUTPUT.DAT"," w");// kreiranje (otvaranje) datoteke// "C:\TEMP\OUTPUT.DAT" za upis

    if(fp== NULL) // provjera ispravnosti kreiranja datoteke{

      Label1->Caption="Nemoguce kreiranje datoteke";  return;  }

      fprintf(fp,"Probna datoteka\n"); /*upis u datoteku */  fprintf(fp,"Zdravo !!!\n");  fprintf(fp,"%d + %d = %d\n",123,234,123+234);  fputc('A',fp);  fprintf(fp,"\nKraj upisa u datoteku...");

    fclose(fp); /*zatvaranje datoteke */}

    SADRZAJ DATOTEKE

    C:\TEMP\OUTPUT.DAT:Probna datotekaZdravo !!!123 + 234 = 357AKraj upisa u datoteku...

  • 8/19/2019 Predavanja iz C++2009

    79/152

    79

    33.9. Primjer ~itanja iz postoje}e datoteke

    void fun(){int i;float x;char niz[31],znak;FILE *fp;  // deklarisanje pokazivaca na datpteku

    fp=fopen("C:\\TEMP\\INPUT.DAT","r"); // otvaranje postojece datoteke// "C:\TEMP\INPUT.DAT" za citanje

    if(fp== NULL) // provjera ispravnosti otvaranja datoteke{

      Label1->Caption="Nemoguce otvaranje datoteke";  return;  }

      fscanf(fp,"%d %f\n",&i,&x); // citanje iz datotekeznak=fgetc(fp);

    fclose(fp); // zatvaranje datoteke}

    SADRZAJ DATOTEKE

    C:\TEMP\INPUT.DAT:123 123.456A

    PROMJENJIVA VRIJEDNOSTi 123x 123.456znak 'A'

  • 8/19/2019 Predavanja iz C++2009

    80/152

  • 8/19/2019 Predavanja iz C++2009

    81/152

  • 8/19/2019 Predavanja iz C++2009

    82/152

    82

    34. Dinami~ko alociranje (zauzimanje) i dealociranje (osloba|anje) memorije

    Alokacija memorije predstavlja obezbje|ivanje potrebnih memorijskih lokacija u koje se mogu

    upisivati podaci.Dianmi~ko alociranje memorije se radi u toku izvr{avanja programa tako {to program odoperativnog sistema tra`i i ukoliko je mogu}e dobija zahtijevanu koli~inu memorije. Po zavr{etkukori{}enja dinami~ki alocirane memorije, ona biva dealocirana tj. vra}ena operativnom sistemu.

    Dinami~ko alociranje memorije u "C++" programskom jeziku se mo`e uraditi na dva na~ina: implicitno – deklarisanjem lokalnih (i privremenih) promjenjivih.

    eksplicitno – tra`enjem memorije od operativnog sistema kori{}enjem operatora new ilifunkcije malloc().

    Dealokacija (osloba|anje) dinami~ki alocirane memorije se mo`e uraditi na dva na~ina –uzavisnosti od na~ina kako je alocirana:

    implicitno – ukoliko je memorija alocirana deklarisanjem lokalnih promjenjivih, ona }e bitidealocirana zavr{etkom bloka u kojem su promjenjive deklarisane.

    eksplicitno – ukoliko je memorija alocirana kori{}enjem operatora new dealocira seoperatorom delete a ukoliko je memorija alocirana funkcijom malloc() dealocirase funkcijom free().

  • 8/19/2019 Predavanja iz C++2009

    83/152

    83

    U C++ programskom jeziku se za dinami~ko alociranje memorije preporu~uje upotreba operatoranew i delete, mada se i dalje mogu koristiti funkcije malloc() i free().

    NAPOMENA: Memorija alocirana sa operatorom new ne smije se dealocirati funkcijom free(), kao{to se ni memorija alocirana funkcijom malloc() ne smije dealocirati operatorom delete. Uprotivnom, mo`e do}i do "neo~ekivanog" pona{anja programa i/ili operativnog sistema.

    // Primjer implicitne alokacije memorije// koriscenjem deklaracije lokalnih promjenjivih

    main(){char buffer[1000]; // deklaracija lokalnih promjenjivihint niz[500]; // koje "nastaju" deklaracijom i

    // "nestaju" zavrsetkom bloka naredbibuffer[321]='A'; // u kojem su deklarisaneniz[123]=505;}

  • 8/19/2019 Predavanja iz C++2009

    84/152

    84

    34.1. Funkcije za dinami~ku alokaciju/dealokaciju memorije (malloc() i free())

    Funkcija malloc() dinami~ki alocira koli~inu memorije ~ija se veli~ina u Bajtima predaje funkciji kaoargument, a funkcija vra}a pointer na alociranu memoriju tipa void* koju treba eksplicitno

    konvertovati u potreban tip memorije.Ukoliko funkcija malloc() preko svog imena vrati vrijednost NULL, to zna~i da ne postoji raspolo`ivakoli~ina memorije koju je mogu}e alocirati.

    // Primjer eksplicitne alokacije memorije koriscenjem funkcija malloc() i free()void fun(){char *buffer; int *niz;

      buffer=(char *)malloc(1000*sizeof(char)); // dinamicka alokacija memorije

    if (buffer==NULL) // provjera dali je memorija alocirana{ Label1->Caption="Nemoguca alokacija memorije";

    return;}

      niz = (int *)malloc( 500*sizeof(int) ); // dinamicka alokacija memorijeif (niz==NULL) // provjera dali je memorija alocirana

    { free(buffer); // dealokacija prethodno alocirane memorijeLabel1->Caption="Nemoguca alokacija memorije";return;

      }  buffer[321]='A';  niz[123]=505;free(buffer); // dealokacija (osloba|anje) dinamickifree(niz); // alocirane memorije}

    85

  • 8/19/2019 Predavanja iz C++2009

    85/152

    85

    34.2. Operatori za dinami~ku alokaciju/dealokaciju memorije (new i delete)

    Operator new i delete imaju zna~ajne prednosti nad funkcijama malloc() i free():

    veli~ina dodjeljenog prostora kod kori{}enja operatora new se automatski odre|uje na osnovuveli~ine objekta koji se formira (kod funkcije malloc() veli~ina mora da se navede...)

    tip vrijednosti operatora new je uvjek pokaziva~ na upravo formirani objekat (kod funkcijamalloc() povratni tip je void* koji se zatim eksplicitno konvertuje)

    operatorom new mogu}e je postaviti po~etne vrijednosti formiranim objektima po `elji (funkcijamalloc() ne mo`e da inicijalizuje novoformirani memorijski objekat)

    operatorom new mogu}e je formirati i nizove objekata, ali ih nije mogu}e inicijalizovati. ukoliko poku{aj alokacije memorije ne uspije (tj. operator new pointeru dodjeli vrijednost

    NULL), dealokacija operatorom delete primjenjena nad pointerom (==NULL) je "bezopasna" (zaprogram i operativni sistem).

    86

  • 8/19/2019 Predavanja iz C++2009

    86/152

    86

    // Primjer eksplicitne alokacije memorije koriscenjem operatora new i delete

    void fun(){ int *broj = new int (123); // dinamicka alokacija memorije

    // sa inicijalizacijom za// memorijski objekat tipa int (*broj==123)

      char *buffer = new char[1000]; // dinamicka alokacija memorije za znakovni niz  // inicijalizacija je nemoguca za nizove

      int *niz = new int[500]; // dinamicka alokacija memorije za cjelobrojni niz

      if (broj==NULL || buffer==NULL || niz==NULL) // provjera dali je memorija{ // alocirana

      Label1->Caption="Nemoguca alokacija memorije";delete broj; // dealokacija "eventualno" alocirane

      delete [] buffer; // memorije. Ukoliko neki od pointera  delete [] niz; // ima vrijednost NULL, pokusaj dealokacije  return; // nece izazvati nikakvu "stetu"

    }

      buffer[321]='A'; // "koriscenje" dinamicki alocirane memorije  niz[123]=*broj; //

    delete broj; // dealokacija memorije za pojedine (proste ili slozene)// dinamicki alocirane podatke

    delete [] buffer; // dealokacija (oslobadjanje) dinamickidelete [] niz; // alocirane memorije za nizove podataka}

    87

  • 8/19/2019 Predavanja iz C++2009

    87/152

    87

    NAPREDNI ULAZ / IZLAZ

    Pregled ~esto kori{}enih komponenti (kontrola)

    88

  • 8/19/2019 Predavanja iz C++2009

    88/152

    88

    1. Palete komponenti (kontrola)

    Komponente su grupisane u paletama:

    Standard Additional Win32 System Internet

    Data Accsee Data Controls Decision Cube QReport Dialogs

    Win 3.1 Samples ActiveX

    Komponenta se postavlja na formu tako {to se: selektuje mi{em u paleti, a zatim se na povr{ini

    forme pritiskom na lijevi taster mi{a i povla~enjem pritisnutog mi{a defini{e povr{ina koju }epostavljena komponenta zauzimati na formi.

    Borland Builder Help za komponentu se dobija selektovanjem `eljene komponente i pritiskom nataster 'F1'.

    Pojmovi: komponenta i kontrola

    Sve kontrole su komponente, ali sve komponente nisu kontrole. Kontrole u odnosu na komponente imaju neke dodatne mogu}nosti kao {to su na pr.

    prikazivanje podataka (Edit, Label, ListBox...).

    Primjer komponente koja nije kontrola je Timer komponenta iz sistemske palete.

    89

  • 8/19/2019 Predavanja iz C++2009

    89/152

    89

    2. "Standard" paleta komponenti:

    Opis Standard komponenti:

    1. MainMenu Kreira glavni meni bar za formu i njegove padaju}e (DropDown) menije

    2. PopupMenu Kreira PopUp meni za komponente koje ga mogu pozvati3. Label Ispisuje tekst na formu

    4. Edit Jednostavni linijski editor teksta

    5. Memo Jednostavni vi{elinijski editor teksta

    6. Button Taster kontrola

    7. CheckBox Omogu}ava odabir ili odbacivanje neke opcije

    8. RadioButton Omogu}ava odabir samo jedne od ponu|enih opcija

    9. ListBox Lista zapisa u kojoj je mogu}e selektovati, dodavati i brisati zapise i kretati se kroz nju skrolovanjem

    10. ComboBox Komponenta nastala kombinovanjem Edit komponente i padaju}e ListBox komponente.

    11. ScrollBar Pomjeranjem kliza~a omogu}ava linearni odabir vrijednosti u zadatom opsegu

    12. GroupBox Grupisanje logi~ki povezanih komponenti iscrtavanjem okvira sa porukom oko njih

    13. RadioGroup Grupisanje radio tastera (samo jedan mo`e biti aktivan) iscrtavanjem okvira sa porukom oko njih

    14. Panel Grupisanje logi~ki povezanih komponenti iscrtavanjem okvira oko njih

    1 2 3 4 5 11 12 137 8 9 10 14

    90

  • 8/19/2019 Predavanja iz C++2009

    90/152

    90

    2.1. MainMenu komponenta (Standard paleta)

    MainMenu komponenta kreira glavni meni bar i njegove padaju}e (DropDown) menije za formu.

    Pojedina polja glavnog injegovih padaju}ih menija seimenuju u osobini Items.

    Povezivanje izbora iz menija safunkcijom se radi dvoklikom naizbor menija u prozoru povezanimsa osobinom Items ili u formi.

    91

  • 8/19/2019 Predavanja iz C++2009

    91/152

    91

    2.2. PopupMenu komponenta (Standard paleta)

    PopupMenu komponenta kreira PopUp meni za komponente koje ga mogu pozvati.

    Pojedina polja PopUp menija (PopupMenu1) seimenuju u okviru osobine Items.Povezivanje izbora iz menija sa funkcijom se radisli~no kao i kod MainMenu konponente..

    Desnom kliku mi{em nad

    formom Form1 pridru`uje sePopUp meni PopupMenu1

    92

  • 8/19/2019 Predavanja iz C++2009

    92/152

    92

    2.3. Label komponenta (Standard paleta)

    Label komponenta se koristi za ispisivanje teksta na formu.

    Pode{avanje sadr`aja ispisa se radi dinami~kom osobinom Caption:

    void fun(void){ // "Form1->" je potrebno dodati u skoro

    // svim funkcijama koje je kreiraoForm1->Label1->Caption = "TEST"; // korisnik da bi se moglo ispravno

    // pristupiti Label1 komponenti// koja se nalazi na Form1 formi

    }

    93

  • 8/19/2019 Predavanja iz C++2009

    93/152

    93

    2.4. Edit komponenta (Standard paleta)

    Edit komponenta se koristi kao jednostavni linijski editor teksta.

    Osobina Text ove komponente sadr`i tekstualni niz znakova tipa String (AnsiString).

    U ovu komponentu se mo`e vr{iti i upis tako|e kori{}enjem osobine Text.

    Onemogu}avanje mjenjanja sadr`aja upisanog u Edit komponentu se posti`e upisivanjem vrijednostiFalse u osobinu Enabled.

    void fun(){String poruka[30] = Form1->Edit1->Text;

    }

    94

  • 8/19/2019 Predavanja iz C++2009

    94/152

    94

    2.5. Memo komponenta (Standard paleta)

    Memo komponenta se koristi kao jednostavni vi{elinijski editor teksta

    Izmjena sadr`aja Memo komponente se najlak{e ostvaruje kori{}enjem metoda (funkcije) SelectAll()i osobina SelStart, SelLength i SelText.

    Osobina Lines se koristi za zadavanjeinicijalnog sadr`aja Memo komponente.

    void fun(void) // funkcija prepisuje u promjenjivu poruka sadrzaj Memo komponente{String poruka; // deklarisanje promjenjive tipa String (znakovni niz)Form1->Memo1->SelectAll(); // SelectAll() selektuje cijeli sadrzaj Memo komponenteporuka=Form1->Memo1->SelText;// upisivanje selektovanog teksta u promjenjivu poruka}

    95

  • 8/19/2019 Predavanja iz C++2009

    95/152

    Tekst u Memo komponenti se mo`e selektovati: kori{}enjem mi{a, kori{}enjem metoda (funkcije) SelectAll() (selektuje cijeli sadr`aj Memo komponente),

    kori{}enjem osobina SelStart (od kojeg znaka po~inje selekcija) i SelLength (kolika je du`inaselekcije).

    Selektovani tekst se mo`e dobiti kori{}enjem osobine SelText.

    Selektovani tekst se mo`e zamjeniti novim tekstom ukoliko se osobini SelText dodjeli neki znakovniniz.

    Dopisivanje na mjestu kursora u Memo kontroli se radi

    dodjeljivanjem osobini SelText nekog znakovnog niza.

    Brisanje sadr`aja Memo komponente se ostvaruje metodom Clear().

    NAPOMENA za Edit komponentu:

    Metode: SelectAll() i Clear() i osobine: SelStart, SelLength i SelText obja{njene za Memokomponentu postoje i za Edit komponentu.

    void fun(void) // funkcija cita sadrzaj od 10-og// do 20-og znaka iz Memo komponente

    {String poruka; // deklarisanje promjenjive tipa String (znakovni niz)Form1->Memo1->SelStart=10; // pocetak selekcije (prvi znak je na nultoj poziciji)Form1->Memo1->SelLength=10; // selekcija je dugacka 10 znakova (od 10-og do 20-og)poruka=Form1->Memo1->SelText; // poruka dobija vrijednost selektovanog teksta

    poruka

    96

  • 8/19/2019 Predavanja iz C++2009

    96/152

    Upisivanje redova teksta u Memo komponentu se ostvaruje metodom Lines— >Add() kao usljede}em primjeru:

    U~itavanje sadr`aja datoteke u Memo komponentu se ostvaruje metodomLines— >LoadFromFile():

    void fun(void){String poruka="Pozdrav studentima VRS";

      Form1->Memo1->Lines->Add (poruka); // upis teksta poruke u prvu liniju  Form1->Memo1->Lines->Add (""); // upis "prazne" linije  Form1->Memo1->Lines->Add ("0123456789");// upis niza znakova}

    void fun(void){ // ucitavanje datoteke u Memo komponentu  Form1->Memo1->Lines->LoadFromFile("C:\\AUTOEXEC.BAT");}

    97

  • 8/19/2019 Predavanja iz C++2009

    97/152

    Upisivanje sadr`aja Memo komponente u datoteku se ostvaruje metodomLines— >SaveToFile():

    void fun(void){ // upisivanje sadrzaja Memo komponente u datoteku  Form1->Memo1->Lines->SaveToFile("C:\\TEMP\\TEST.TXT");}

    OVAJ TEKST CE BITI UPISAN U DATOTEKUC:\TEMP\TEST.TXT.

    01234567890123456789001234567890

    Sadr̀ a datoteke C:\TEMP\TEST.TXT:

    98

  • 8/19/2019 Predavanja iz C++2009

    98/152

    2.6. Button komponenta (Standard paleta)

    Button komponenta je naj~e{}e kori{}ena komponenta za koju se vezuju u Windows okru`enjukorisni~ke aktivnosti. Naj~e{}i doga|aj za na koji se odaziva ova komponenta je "Click" mi{em.

    Dvoklik na taster generi{e sljede}i kod (u kojem se mo`e smjestiti korisni~ki kod):

    //---------------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender)

    {// mjesto za korisnicki kod...

    Button4->Caption="OK"; // ...// ...

    }//---------------------------------------------------------------------------

    Pode{avanje tipa ikarakteristika font-aza tekst upisan uCaption osobinu.

    99

  • 8/19/2019 Predavanja iz C++2009

    99/152

    2.7. CheckBox komponenta (Standard paleta)

    Komponenta CheckBox omogu}ava odabir ili odbacivanje neke opcije.

    void __fastcall TForm1::Button1Click(TObject *Sender){  if(CheckBox1->Checked==True) // ako je CheckBox cekiran  Button1->Caption="CheckBox == Checked";  else // inace (CheckBox necekiran)  Button1->Caption="CheckBox == UnChecked";}

    100

  • 8/19/2019 Predavanja iz C++2009

    100/152

    2.8. RadioButton komponenta (Standard paleta)

    RadioButton komponenta omogu}ava odabir samo jedne od ponu|enih RadioButton opcija.

    void __fastcall TForm1::Button1Click(TObject *Sender){  if(RadioButton1->Checked==True)Button1->Caption="RadioButton 1";  if(RadioButton2->Checked==True)Button1->Caption="RadioButton 2";  if(RadioButton3->Checked==True)Button1->Caption="RadioButton 3";}

    101

  • 8/19/2019 Predavanja iz C++2009

    101/152

    2.9. ListBox komponenta (Standard paleta)

    ListBox komponenta mo`e da sadr`i listu zapisa u kojoj je mogu}e selektovati, dodavati i brisatizapise i kretati se kroz nju skrolovanjem

    Kori{}enjem osobine Items mogu}e je zadati inicijalni sadr`aj liste.

    102

  • 8/19/2019 Predavanja iz C++2009

    102/152

    Metode (funkcije): Items->Add() - koristi se za dodavanje novog zapisa u ListBox. Items->Delete(i) - koristi se za brisanje i-tog novog zapisa iz ListBox-a. Prvi zapis i=0

    Clear() - slu ì za brisanje sadr`aja ListBox-a.Osobina: ItemIndex - ima vrijednost pozicije selektovanog zapisa u listi. Sorted - omogu}ava da sadr`aj ListBox-a bude sortiran prema Engleskoj

    abecedi.

    void __fastcall TForm1::Button1Click(TObject *Sender)  {

    ListBox1->Clear(); // brisanje sadrzaja liste

      ListBox1->Items->Add("  c) zapis_c "); // upis u listu  ListBox1->Items->Add("  b) zapis_b "); //  ListBox1->Items->Add("  a) zapis_a "); //  }

    void __fastcall TForm1::Button2Click(TObject *Sender){  ListBox1->Sorted=True; //sortiranje liste po abecedi}

    103

  • 8/19/2019 Predavanja iz C++2009

    103/152

    Primjer kori{}enja ItemIndex:

    void __fastcall TForm1::OnFormCreate(TObject *Sender){  ListBox1->MultiSelect = false;  Button1->Caption = "Selektuj stavku i pomjeri je napocetak";  for (int i = 1; i Items->Add("Item " + IntToStr(i));}void __fastcall TForm1::Button1Click(TObject *Sender)

    {  ListBox1->Items->Move(ListBox1->ItemIndex, 0);}

    104

  • 8/19/2019 Predavanja iz C++2009

    104/152

    2.10. ComboBox komponenta (Standard paleta)

    ComboBox komponenta je nastala kombinovanjem Edit komponente (u koju se ne mo`e upisivati) ipadaju}e ListBox komponente.

    Omogu}ava da se iz padaju}e ListBox komponente odabere jedan od zapisa koji biva smje{ten uEdit komponentu.

    Inicijalno zadavanje zapisa u Edit komponenti koja pripadaComboBox komponenti se posti`e upisom zapisa u osobinu Text.

    Inicijalno zadavanje sadr`ajapadaju}e ListBox komponente kojapripada ComboBox komponenti seposti`e pomo}u osobine Items.

    105

  • 8/19/2019 Predavanja iz C++2009

    105/152

    Izabrana vrijednost (tipa String) u ComboBox komponenti se nalazi zapisana u Edit komponenti(koja pripada ComboBox komponenti) i dobija se iz osobine Text.

    Dodavanje novog zapisa u padaju}u ListBox komponentu ComboBox komponente se ostvarujekori{}enjem metoda Items->Add().

    Brisanje sadr`aja Edit komponente i padaju}e ListBox komponente koje pripadaju ComboBoxkomponenti se ostvaruje kori{}enjem metoda Clear().

    void fun(void){  String poruka=Form1->ComboBox1->Text;}

    106

  • 8/19/2019 Predavanja iz C++2009

    106/152

    2.11. ScrollBar komponenta (Standard paleta)

    ScrollBar komponenta pomjeranjem kliza~a omogu}ava linearni odabir vrijednosti u zadatomopsegu.

    Donja granica, gornja granica i teku}a pozicija ScrollBar kliza~a se zadaju pomo}u osobina Min iMax i Position

    .

    Donja i gornja granica ScrollBar kliza~ase zadaju pomo}u osobina Min i Max.

    Teku}a pozicija ScrollBar kliza~a sezadaje pomo}u osobine Position.

    107

  • 8/19/2019 Predavanja iz C++2009

    107/152

    void __fastcall TForm1::ScrollBar1Change(TObject *Sender)

    {  Label2->Caption=ScrollBar1->Position;}

    Dvoklikom na ScrollBar komponentu,Borland Builder generi{e funkciju koja}e biti pozvana prilikom svekepromjene vrijednosti ScrollBar kliza~a.

    108

  • 8/19/2019 Predavanja iz C++2009

    108/152

    2.12. GroupBox komponenta (Standard paleta)

    GroupBox komponenta omogu}ava grupisanje logi~ki povezanih komponenti iscrtavanjem okvira saporukom oko njih.

    GroupBox komponenta omogu}ava formiranje vi{e razli~itih me|usobno nezavisnih grupa radiotastera na jednoj formi. Prethodno je bitno jer u okviru jedne grupe radio tastera samo jedan radiotaster mo`e biti "uklju~en".

    GroupBox komponenta ima uglavnom estetsku ulogu...

    109

  • 8/19/2019 Predavanja iz C++2009

    109/152

    2.13. RadioGroup komponenta (Standard paleta)

    RadioGroup komponenta omogu}ava grupisanje radio tastera (samo jedan mo`e biti aktivan)iscrtavanjem okvira sa porukom oko njih

    Informacija o aktiviranom radio tasteru u RadioGroup komponenti se dobija ItemIndex osobinom.

    Sadr`aj RadioGroup komponentese pode{ava osobinom Items.

    110

  • 8/19/2019 Predavanja iz C++2009

    110/152

    void __fastcall TForm1::Button1Click(TObject *Sender){  Button1->Caption=RadioGroup1->ItemIndex;}

    111

  • 8/19/2019 Predavanja iz C++2009

    111/152

    2.14. Panel komponenta (Standard paleta)

    Panel komponenta omogu}ava grupisanje logi~ki povezanih komponenti iscrtavanjem panela ispodnjih. Funkcija Panel komponente je sli~na funkciji GroupBox komponente.

    Panel komponenta (kao i GroupBox komponenta) mo`e da grupi{e RadioButton komponente.Grupe radio tastera koje su grupisane u razli~itim Panel komponentama i na formi, pona{aju seme|usobno nezavisno.

    Panel komponenta ima uglavnom estetsku ulogu...

    112

  • 8/19/2019 Predavanja iz C++2009

    112/152

    3. "Additional" paleta komponenti:

    Opis Additional komponenti:

    1. BitBtn Taster kontrola (komponenta) koja mo`e sadr`ati sliku na svojoj povr{ini

    2. Image Komponenta koja mo`e prikazati grafi~ku sliku na svojoj povr{ini

    1 2

    113

  • 8/19/2019 Predavanja iz C++2009

    113/152

    3.1. BitBtn komponenta (Additional paleta)

    BitBtn je taster kontrola (komponenta) koja mo`e sadr`ati bitmapiranu (BMP) sliku na svojojpovr{ini

    Po svim ostalim osobinama, identi~na je sa Button komponentom.

    Inicijalno zadavanje slike nakomponenti (tasteru) BitBtn se

    radi osobinom Gluph

    114

  • 8/19/2019 Predavanja iz C++2009

    114/152

    void __fastcall TForm1::BitBtn1Click(TObject *Sender){

      BitBtn1->Glyph->LoadFromFile("C:\\Windows\\Black Thatch.bmp");}

    115

  • 8/19/2019 Predavanja iz C++2009

    115/152

    3.2. Image komponenta (Additional paleta)

    Komponenta Image se koristi za prikazivanje slika tipa BMP, ICO, EMF, WMF...

    void __fastcall TForm1::Button1Click(TObject *Sender){Image1->Stretch = true; //za smjestanje cijele slike na povrs Image-a

    //ucitavanje s