FMFI

Stránka Júlie Pálkovej



Kontakt: arinwende@yahoo.com
Dátum poslednej aktualizácie ... 15.septembra 2005

Valid HTML 4.0!

Prednaska

Premenné v C++

Premenná je vyhradené miesto v pamäti, do ktorého sa počas behu programu zapisujú rozličné údaje. Slúži na zapamätanie údajov, s ktorými pracuje program.

Deklarácia premennej je príkaz, ktorý definuje meno a typ premennej, prípadne nastavuje aj jej počiatočnú hodnotu.

Niektoré typy premenných v C++:

celé číslo:int
desatinné číslo:float
presnejšie desatinné číslo:double
text:AnsiString
znak:char
farba:TColor
obrázok:TImage
tlačidlo:TButton
grafická plocha:TCanvas


Pravidlá pre pomenovávanie v C++:

  • skladá sa z písmen (A, B, ... Z, a, b, ... z), číslic (0, 1, ..., 9) alebo znakou _ (podčiarkovník)
  • nesmie začínať číslicou
  • musí byť jednoznačné v rámci tela funkcie
  • nesmie byť zhodné s kľúčovými slovami
Príklady správnych mien premenných:
  • Percento, Neznama
  • i, j
  • a1, a2
  • _nieco

Príklady nesprávnych mien premenných:
  • %mnozstva, neznama?
  • int, void
  • 1a, 2a, 123
  • _niečo
  • aaaa, aaaaa, aaaaaa - zle čitateľné
Príklady správnych deklarácií:
  • int X;
  • int CeleCislo, Suma, Priemer;
  • int a, b, c, d;
  • AnsiString Text;
  • TColor Farba;
Príklady nesprávnych deklarácií:
  • int x, y, x;
  • int cena!;
  • int 333;
  • int void;

Miesto deklarácie: premennú deklarujeme pred jej použitím. Deklarácia nemá pevne stanovene miesto, kvôli prehľadnosti je ale lepšie zvyknúť si premenné deklarovať na začiatku procedúry.

Príkaz priradenia: priraďuje do premennej jej hodnotu. Najskôr vyhodnotí výraz na pravej strane a jeho hodnotu priradí ľavej strane.
Operátor priradenia v C++: jednoduché =
Výrazom môže byť nie len matematický výpočet, ale aj napríklad vlastnosť komponenty:
x = a * ( b + 5 );
x = Image1->Width/2;

Príklady správnych priradení hodnoty premennej:
  • a = 5;
  • b = 10;
    a = b + 1;
  • TCanvas *g;
    g=Image1->Canvas;
  • TCanvas *g=Image1->Canvas;
Príklady nesprávnych priradení hodnoty premennej:
  • a = int;
  • 2+a=5;
  • a = b + 1; //ak premenná b nebola deklarovaná

Aritmetické operácie v C++

  • + (súčet)
  • - (rozdiel)
  • * (násobenie)
  • / (delenie)
  • % (modulo)
  • Výrazy možno zátvorkovať - mení sa priorita operátorov
    V zásade má ale násobenie a delenie vyššiu prioritu ako sčítanie a odčítanie

Príklady skrátených zápisov aritmetických operácií v C++:

  • i + + … Inkrementácia premennej i = i + 1
  • i - - … Dekrementácia premennej i = i - 1
  • x + = 10 … x = x + 10
  • x - = 10, x / = 10, x * = 10, x % = 10

Pri inkrementácii a dekrementácii rozlišujeme ešte Pre- a Post- inkrementáciu (dekrementáciu).
Postinkrementácia: x = i + +; najprv priradí hodnotu i do x, potom zvýši i o 1
Preinkrementácia: x = + + i; najprv zvýši hodnotu i o 1, potom túto hodnotu priradí do x

Automatická konverzia je schopnosť kompilátora automaticky zmeniť typ premennej na tú, ktorá je potrebná.
V C++ automatická konverzia existuje pri prevádzaní čísla na text - ak premenná (alebo vlastnosť komponenty) vracia číslo, ktoré chceme napríklad vypísať do komponenty Label, ktorá požaduje text, C++ automaticky zmení číslo na text.
Konverzia textu na číslo nie je automatická - nie je možné do číselnej premennej (alebo vlastnosti komponenty) priradiť text, ani keby tento obsahoval len čísla - napríklad '12345'. Musíme ju zabezpečiť napríklad použitím funkcie StrToInt - funkcia, ktorá robí konverziu textu na celé číslo: a = StrToInt ( Edit1 -> Text );

Vieme, že všetky komponenty majú svoje vlastnosti. Tieto môžeme meniť v okne Inšpektora aj za behu programu. Napríklad keď máme vo formulári tlačidlo a za behu programu mu chceme zmeniť nadpis, môžeme to urobiť jednoduchým príkazom: Button1->Caption="nadpis tlačidla";
Jeho šírku a výšku určujú vlastnosti Button1->Width, Button1->Height; jeho polohu vo formulári určujú vlastnosti Button1->Left, Button1->Top;
Šírku a výšku vnútornej časti formulára určujú ClientWidth a ClientHeight;
Preskúmajte si vlastnosti ostatných komponent, mnohé budete často používať.

Príklady:

Do formulára vložíme Image, dva EditBoxy a tlačidlá (pre každú úlohu samostatné tlačidlo). Všímajte si hlavne použitie premenných.
Ak by sme zadeklarovali premennú g globálne, priradenie g=Image1->Canvas; by sme mohli napísať do konštruktora formulára a nemuseli by sme deklarovať a inicializovať túto premennú v každej procedúrke ButtonXClick.

  • Jednoduchý príklad použitia premenných.
    			 
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      TCanvas *g=Image1->Canvas;
      //aby sme skrátili zápis, priradili sme do premennej g typu TCanvas Image1->Canvas
      int X, Cislo, Sucet;
      X=15; //priradili sme celé číslo
      Cislo=(2+3)*2; //priradili sme výraz
      Sucet=X+Cislo; //priradili sme výraz zložený z dvoch premenných
      g->TextOut(0, 0, Sucet);
    }


  • Na slačenie tlačidla sa vykreslí obdĺžnik.
    			 
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      TCanvas *g=Image1->Canvas;
      int StredX, StredY;       
      StredX=Image1->Width/2; //do premennej StredX priradíme hodnotu polovice šírky Image1   
      StredY=Image1->Height/2;  
      g->Rectangle(StredX-25, StredY-25, StredX+25, StredY+25); //nakreslí obdĺžnik
    }


  • Táto procedúrka na stlačenie tlačidla nakreslí osový kríž.
    			 
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
      TCanvas *g=Image1->Canvas;
      int StredX,StredY;       
      StredX=Image1->Width/2;   
      StredY=Image1->Height/2;  
      g->MoveTo(StredX,0); //MoveTo presunie zdvihnuté pero na danú pozíciu (x,y)
      g->LineTo(StredX,Image1->Height); //LineTo presunie položené pero - zároveň kreslí čiaru
      g->MoveTo(0,StredY);
      g->LineTo(Image1->Width,StredY);
    }


  • Po stlačení tlačidla vypíše do Image text zadaný v EditBoxe.
    			 
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
      TCanvas *g=Image1->Canvas;
      g->TextOut(30, 0, Edit1->Text);
    }


  • Nakreslí elipsu podľa velkostí zadaných v EditBoxoch.
    			 
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
      TCanvas *g=Image1->Canvas;
      int a,b;
      a=StrToInt(Edit1->Text);   
      b=StrToInt(Edit2->Text); 
      g->Ellipse(0, 0, a, b); //alebo výraz, napríklad aj g->Ellipse(a+10,b+10,a*5,b*5);
    }


  • Napíšte procedúrku, ktorá po zatlačení tlačidla nakreslí do Image obdĺžnik (parametre zadávajte cez EditBoxy) a k nemu štvorec a kruh s takým istým obvodom, ako má zadaný obdĺžnik.


  • Napíšte procedúrku, ktorá po zatlačení tlačidla nakreslí do Image domcek. Steny nech sú štvorec, strecha rovnostranný trojuholník (dĺžku strany zadávajte cez EditBox). Vyskúšajte si aj zmeniť hrúbku pera a jeho farbu cez vlastnosti Image1->Canvas->Pen->Width a Image1->Canvas->Pen->Color.



Referencie
Pri príprave na prednášanie a písaní projektu som čerpala z poznámok pána RNDr. Ľubomíra Salanciho zo stránky http://www.edi.fmph.uniba.sk/salanci/C/02/index.html.