Целобројни тип

Већ смо у математици рекли да једначина x + a = b нема увек решење у скупу N (прецизно: када је a ≥ b). Скуп N се зато проширује у скуп целих бројева Z = {... , -2, -1,0,1,2,3, ...}. Он је неограничен здесна и слева јер не постоји ни број од којега су сви цели бројеви мањи, ни број од којега су сви цели бројеви већи. Као и природни бројеви, скуп Z је затворен за операције сабирања и множења. То значи да је збир и производ било која два цела броја опет цео број. Међутим, за разлику од природних бројева, скуп целих бројева је затворен и за одузимање. Ово не важи и за дељење, јер количник два цела броја не мора да буде цео број (на пример, 1 подељено са 2).
Као и у математици, и у C# целобројни тип ће имати нека ограничења. Постоји осам целобројних типиво које можемо користити да бисмо представили целе бројеве. У Табели 1 приказани су ови целебројни типови. У њој су приказани C# типови, број бајтова и опсег вредности које се могу меморисати за тај тип.


Напомена: Постарајте се да изаберете одговарајући тип зависно од тога да ли је ваша целобројна вредност означена или неозначена и у зависности од опсега који треба да меморишете.

Са операторима смо се упознали у посебном одељку, али ево још неких конкретних примера везаних за целобројни тип.

Што се тиче оператора додељивања показали смо како се некој нашој промељивој додељује вредност коришћењем оператора додељивања = :

//Navodimo tip i ime promenljivih koje hocemo da koristimo 
int a;  
int b; 
//Nasoj promenljivoj a dodeljujemo vrednost 5, a promenljivoj b vrednost 13                          
a = 5;
b = 13;

Вредности са десне стране оператора додељивања може и сама бити израз. На пример:

//Navodimo tip i ime promenljive koje hocemo da koristimo
short mој_broj;       
//Ovom naredbom promenljivoj мој_broj je dodeljena vrednost 4                           
mој_broj = 1+5-2; 
  
Упознали смо се и са аритметичким операторима. У следећим изразима приказали смо и употрбу оператора сабирања(+), одузимања(-), множења(*) и дељења (/), респективно :

1 + 2
3 - 2
2 * 5
10 / 3
     
Када се са аритметичким операторима користе цели бројеви, враћа се цео број и након дељења одбацује се сваки остатак. У примеру 10/3, цео број 10 је подељен са 3 а вредност овог израза је 3 са остатком 1 који ес одбацује. Ако желимо да добијемо остатак при дељењу онда користимо оператор остатка при дељењу (%); У следећем примеру, након целобројног дељења враћа се остатак 1 :

//Navodimo tip i ime promenljivih koje hocemo da koristimo 
int a;  
int b; 
int ostatak; 
//Nasoj promenljivoj ostatak dodeljujemo vrednost izraza a % b  
//Time nasa promenljiva ostatak dobija vrednost 1                         
ostatak = a % b;

За операторе поређења рекли смо да упоређују однос између вредности и враћају Boolean вредност ( true ili false ). Наравно, са операторима поређења могу се користити и променљиве :

//Navodimo tip i ime promenljivih koje hocemo da koristimo 
//Imamo 3 promenljive,  od toga su dve tipa int i jedna tipa bool 
int a;  
int b;
bool rezultat; 
    //Promenljivoj a dodeljujemo vrednost 10, a promenljivoj b dodeljujemo 1 
    а = 10;
    b = 1;
//Kao i malopre, nasa promenljiva rezultat ce imati vrednost true ili false 
//Njenu vrednost dobijamo ako odgovorimo na pitanje, da li je 10 razlicito od 1 ?
//Kako je tacno, nasa promenljiva dobija vrednost true
rezultat = a != b;	

Сада када смо видели како вршимо доделу вредности нашој променљивој, које аритметичке операције смемо да над њом вршимо и који оператори поређења постоје и које су протитета покушаћемо да направимо прве сложеније програмчиће.

Пример 1. Написати програм који сабира два цела броја и њихов збир исписује у лабели.

Решење :

Нека наша два броја a и b (променљиве) буду типа int . Треба да креирамо и трећу променљиву ( rezultat ) у којој ћемо да смештамо збир та два броја.
Изглед форме пре покретања програма је :

Слика 4.1. Изглед форме пре покретања програма

private void button1_Click(object sender,  EventArgs e)
{   
    //Promenljive koje koristimo
    int a, b; 
    //Promenljiva u koju cemo smestiti rezultat
    int rezultat;  
    a = 10;  
    b = -18;
    rezultat = a + b;                                         
    label3.Text = "Zbir je : "  + rezultat; 
}
Изглед форме након покретања програма је :

Слика 4.2. Изглед форме након покретања програма

Пример 2. Написати програм који сабира два цела броја која се уносе преко textBox-ова и чији се збир исписује у labele-и.

Решење :

Нека наша два броја a и b (променљиве) буду типа int . Треба да креирамо и трећу променљиву ( rezultat ) у којој ћемо да смештамо збир та два броја.

Правимо форму облика:
Преименујемо label-e и button1
Слика 4.3. Почетни изглед форме

Слика 4.4. Изглед форме након преименовања компоненти


private void button1_Click(object sender,  EventArgs e)
{   
    //Promenljive koje koristimo
    int a, b; 
    //Promenljiva u koju cemo smestiti rezultat
    int rezultat;  
    a = int.Parse(textBox1.Text);  
    b = int.Parse(textBox2.Text);
    rezultat = a + b;                                         
    label4.Text = "Zbir je : "  + rezultat; 
}

Покренемо програм и проверимо (за конкретне вредности бројева) :
Слика 4.5. Изглед форме након покретања програма

Пример 3. Написати програм који сабира два броја из сегмента [-128,127] која корисник унесе преко textBox-ова.

Решење :
Направићемо две променљиве (a,b) у које ћемо да смештамо оно што корисник унесе преко textBox-ова. Као и у претходном примеру направићемо и трећу променљиву (rezultat) у коју ћемо сместити њихов збир. Ради боље читљивости програма за имена променљибих треба користити осмишљена имена, односно имена која асоцирају на врсту информације која се у њима чува. Поред овога треба променљивој увек додељивати најпогоднији тип. Пошто се овде ради о бројевима који припадају одговарајућем сегменту, типови наших променљивих a и b ће бити sbyte . Остало је још да видимо којег ће типа бити променљива rezultat . Пошто се ради о збиру два броја као резултат ће се добити број који не мора бити из сегмента датог сегмента, зато ћемо за њен тип узети int.

Изглед форме пре покретања програма је :

Слика 4.6. Изглед форме пре покретања програма

private void button1_Click(object sender,  EventArgs e)
{   
    //Promenljivoj a dodeljujemo tip sbyte kao i promeljivoj b
    sbyte a;  
    sbyte b;  
    //Pravimo i trecu promenljivu rezultat u koju cemo da smestimo zbir prve dve i
    //na osnovu prethodnog teksta dodeljujemo joj tip int
    int rezultat;                         
    //Vrednost koju je korisnik uneo preko textBox-a u promenljivu a,    
    a = sbyte.Parse(textBoz1.Text);
    //Isti postupak primenimo za promenljivu b 	
    b = sbyte.Parse(textBox2.Text);
    //U promenljivoj rezultat unosimo vrednost zbira a i b  
    rezultat = a + b ;
    //Ispisujemo rezultat u labelu  
    label3.Text = "Zbir je : "  + rezultat;	
}
Изглед форме након покретања програма :

Слика 4.7. Изглед форме након покретања програма

Поставља се питање шта би се десило да смо за неку променљиву изабрали вредност који излази из опсега који одговара типу sbyte а то је [-128,127] ? Нека је то нпр. вредност 154. У том случају наш програм би се побунио и избацио нам грешку ( види слику ) која нам управо говори да је унесена вредност за нашу промељиву изван одговарајућег интервала за тип byte.

Слика 4.8. Изглед прозора који се појављује када настане грешка

Као што смо на почетку рекли треба се постарати да изаберемо одговарајући тип зависно од тога да ли је наша целобројна вредност означена или неозначена и у зависности од опсега који треба да меморишемо .

Пример 4. Саставити програм који одређује количник и остатак при целобројном дељењу два цела броја унета преко textBox-ова.

Решење :
За решавање овог задатке биће нам потребне четири лабеле, два textBox-a и једно дугме. У променљиве а и b смештамо оно што корисник унесе у textBox1 и у textBox2, али тај унос конвертујемо у одговарајући тип што је у нашем случају int. Креирамо још две променљиве kolicnik и ostatak. Корситећи знак % добићемо остатак при целобројном дељењу а знаком / добићемо количник.


Правимо форму облика:
Преименујемо label-e и button1
Слика 4.9. Почетни изглед форме
Слика 4.10. Изглед форме након преименовања компоненти

private void button1_Click(object sender, EventArgs e)
{
    //Uzimamo vrednost za promenljivu a koju je korisnik uneo
    int a = int.Parse(textBox1.Text);
    //Uzimamo vrednost za promenljivu b koju je korisnik uneo
    int b = int.Parse(textBox2.Text);
    //Deklarisemo promenljivu ostatak
    int ostatak;
    //Racuna ostatak
    ostatak = a % b;
    //Deklarisemo promenljivu kolicnik
    int kolicnik;  
    //Racuna kolicnik
    kolicnik = a / b;
    //Ispisuje resenje
    label3.Text = "a / b = " + kolicnik +  ", a ostatak je" + ostatak; 
}


 
Покренемо програм и проверимо (за конкретне вредности бројева) :
Слика 4.11. Изглед форме након покретања програма

Пример 5. Саставити програм који за унета два броја преко textBox-ова, рачуна збир, разлику, производ или количник, у зависности од тога коју операцију корисник одабере кликом на дугме (за сваку операцију је одговарајуће дугме).

Решење :

За решавање овог задатка биће нам потребне четири лабеле, четири дугмета и два textBox-a. Креираћемо две променљиве a и b у које ћемо користећи конвертовање сместити оно што корисник унесе у textBox1 и textBox2. Креирацемо прменљиву rezultat у коју ћемо у зависноти од тога на које смо дугме кликнули смештати збир,разлику, призвод или количних унетих бројева.


Правимо форму облика:
Преименујемо label-e и button-ове
Слика 4.12. Почетни изглед форме
Слика 4.13. Изглед форме након преименовања компоненти

private void button1_Click(object sender,  EventArgs e)
{   
    //Promenljive koje koristimo
    int a, b; 
    //Promenljiva u koju cemo smestiti rezultat
    int rezultat;  
    a = int.Parse(textBox1.Text);  
    b = int.Parse(textBox2.Text);
    rezultat = a + b;                                         
    label4.Text = "Zbir je : "  + rezultat; 
}

private void button1_Click(object sender,  EventArgs e)
{   
    //Promenljive koje koristimo
    int a, b; 
    //Promenljiva u koju cemo smestiti rezultat
    int rezultat;  
    a = int.Parse(textBox1.Text);  
    b = int.Parse(textBox2.Text);
    rezultat = a - b;                                         
    label4.Text = "Razlika je : "  + rezultat; 
}

private void button1_Click(object sender,  EventArgs e)
{   
    //Promenljive koje koristimo
    int a, b; 
    //Promenljiva u koju cemo smestiti rezultat
    int rezultat;  
    a = int.Parse(textBox1.Text);  
    b = int.Parse(textBox2.Text);
    rezultat = a * b;                                         
    label4.Text = "Proizvod je : "  + rezultat; 
}

private void button1_Click(object sender,  EventArgs e)
{   
    //Promenljive koje koristimo
    int a, b; 
    //Promenljiva u koju cemo smestiti rezultat
    int rezultat;  
    a = int.Parse(textBox1.Text);  
    b = int.Parse(textBox2.Text);
    rezultat = a / b;                                         
    label4.Text = "Kolicnik je : "  + rezultat; 
}

Покренемо програм и проверимо (за конкретне вредности бројева) :
Слика 4.14. Изглед форме након покретања програма

Пример 6. Написати програм који сабира два разломка и исписује њихов збир.


Решење:






private void button1_Click(object sender, EventArgs e)
{        
    int a, b, c, d, imenilac, brojilac;
    a = int.Parse(textBox1.Text);
    b = int.Parse(textBox2.Text);
    c = int.Parse(textBox3.Text);
    d = int.Parse(textBox4.Text);
    //Kako jos nismo naucili if i for petlju, ovaj razlomak sada necemo skracivati
    brojilac = (a * d + b * c);
    imenilac = b * d;
    //Ispisujemo rezultat
    label5.Text = a + "/" + b + " + " + c + "/" + d + " = " + brojilac + "/" + imenilac; 
}