Пример 1. Написати програм који рачуна максимум четири задата броја.
Анимација 9.14. Илустрација примера 1
Правимо форму облика:
label1 - преименоваћемо у а, label2 - преименоваћемо у b, label3 - преименоваћемо у c, label4 - преименоваћемо у d
textBox1 - у ово поље корисник уноси реалан број
textBox2 - у ово поље корисник уноси реалан број
textBox3 - у ово поље корисник уноси реалан број
textBox4 - у ово поље корисник уноси реалан број
label5 - овде ћемо исписати резултат рада програма
button1 - преименујемо дугме у Maksimum
Слика 9.40. Изглед форме пре преименовања у примеру 1
Двокликом на дугме Maksimum отвара нам се прозор у коме пишемо код за наш програм. Унутар класе Form1 пишемо код за функцију која рачуна максимум, а унутар button1_Click пишемо код програма у коме ћемо више пута позивати функцију. Да бисмо израчунали максимум четири броја позваћемо функцију три пута. Прво ћемо израчунати максимум прва два броја, потом максимум друга два броја и на крају ћемо утврдити који од нађена два максимума је већи.
Слика 9.41. Изглед форме након преименовања у примеру 1
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Definišemo funkciju maksimum koja računa maksimum dva broja
double maksimum(double a, double b)
{
//Inicijalizujemo vrednost promenljive max na a
double max = a;
//Ako je max manje od b
if (max < b)
//Tada je max jednako b
max = b;
//U protivnom, ako je max veće od b
else
//Tada je max jednako a
max = a;
//Vraćamo max kao maksimalnu vrednost
return max;
}
//Klikom na dugme računamo maksimum četiri broja
private void button1_Click(object sender, EventArgs e)
{
//Ako nijedan textBox nije prazan računamo maksimum četiri broja
if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "" && textBox4.Text != "")
{
//Deklaracija promenljivih
double a, b, c, d;
//Deklaracija promenljive koja označava maksimum četiri broja
double max;
//Učitavamo vrednosti iz textBox-ova
//Prebacujemo ih iz formata string u format double - realan broj
a = double.Parse(textBox1.Text);
b = double.Parse(textBox2.Text);
c = double.Parse(textBox3.Text);
d = double.Parse(textBox4.Text);
//Promenljivoj max dodeljujemo vrednost - pozivamo funkciju maksimum tri puta
max = maksimum(maksimum(a, b), maksimum(c, d));
//Ispisujemo rezultat u labeli
label5.Text = "Maksimum uneta cetiri broja je " + max;
}
//Ako je neki od textBox-ova prazan
else
{
//Ispisujemo poruku u labeli
label5.Text = "Unesite vrednosti za a, b, c i d!";
}
}
}
Сада покренимо програм. На првој слици приказан је резултат рада програма уколико изоставимо попуњавање једног или више поља, а на друге две слике приказан је резултат рада програма ако су уноси исправни.
Слика 9.42. Резултат рада програма када нису сва поља попуњена
Слика 9.43. Резултат рада програма за исправан унос
Пример 2. Написати програм који у себи садржи функцију која рачуна број n цифара унетог броја. Притиском на контролно дугме програм у једној лабели треба да испише највећи n - тоцифрени број, а у другој лабели треба да испише најмањи n - тоцифрени број.
Анимација 9.15. Илустрација примера 2
Правимо форму облика:
label1 - преименоваћемо лабелу у Broj a
textBox1 - у ово поље корисник уноси природан број
label2 - овде се исписује број цифара броја а
label3 - овде се исписује највећи број чији је број цифара једнак броју цифара броја а
label4 - овде се исписује најмањи број чији је број цифара једнак броју цифара броја а
button1 - преименујемо дугме у Izracunaj
Слика 9.44. Изглед форме пре преименовања у примеру 2
Двокликом на дугме Izracunaj отвара нам се прозор у коме пишемо код за наш програм. Унутар класе Form1 пишемо код за функцију која рачуна број цифара, а унутар button1_Click пишемо код програма у коме ћемо позивати ову функцију. Ако је број цифара једнак један, најмањи природан број је 1, а највећи је 9. Ако је број цифара 3, најмањи природан број је 100, а највећи је 999. Због тога, почетне вредности за највећи број биће 9, а за најмањи број биће 1. Одвојићемо случај када је број цифара једнак један и када је број цифара већи од један.
Слика 9.45. Изглед форме након преименовања у примеру 2
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Definišemo funkciju za broj cifara nekog prirodnog broja
int brojCifara(int a)
{
//Početna vrednost za broj cifara je 0
int broj = 0;
//Sve dok je a pozitivan broj brojimo cifre
while (a > 0)
{
//Delimo a brojem 10 bez ostatka. Broj a sada ima jednu cifru manje
a = a / 10;
//Povećavamo broj cifara za jedan
broj = broj + 1;
}
//Vraćamo broj cifara
return broj;
}
//Klikom na dugme ispisujemo traženi rezultat
private void button1_Click(object sender, EventArgs e)
{
//Deklaracija promenljive a - broja koji učitavamo sa unosa
int a;
//Deklaracija broja n - broja cifara
int n;
//Inicijalizujemo vrednost najvećeg prirodnog broja sa n cifara na 9
int najveci = 9;
//Inicijalizujemo vrednost najmanjeg prirodnog broja na 1
int najmanji = 1;
//Ako textBox1 nije prazan pišemo kod funkcije
if (textBox1.Text != "")
{
//Učitavamo vrednost broja a iz polja za unos
a = int.Parse(textBox1.Text);
//Promenljivoj n dodeljujemo broj cifara broja a
n = brojCifara(a);
//Ukoliko je broj cifara jednak 1
if (n == 1)
{
//Najmanjem i najvećem prirodnom broju dodeljujemo odgovarajuće vrednosti
najmanji = 1;
najveci = 9;
}
//Ako je broj cifara veći od 1
else
{
//Ulazimo u for petlju, brojač kreće od 2, jer je broj cifara veći od 1
for (int i = 2; i <= n; i++)
{
//Najmanji prirodan broj množimo sa 10
najmanji = najmanji * 10;
//Najveći prirodan broj množimo sa 10 i dodajemo mu 9
najveci = najveci * 10 + 9;
}
}
//Ispisujemo broj cifara broja a
label2.Text = "Broj cifara broja " + a + " je " + n;
//Ispisujemo najveći prirodan broj čiji je broj cifara n
label3.Text = "Najveci broj ciji je broj cifara " + n + " je " + najveci;
//Ispisujemo najmanji prirodan broj čiji je broj cifara n
label4.Text = "Najmanji broj ciji je broj cifara " + n + " je " + najmanji;
}
//Ako je textBox1 prazan
else
{
//Praznimo sve labele
label2.Text = "";
label3.Text = "";
label4.Text = "";
//Ispisujemo poruku korisniku da unese prirodan broj
MessageBox.Show("Unesite broj!");
}
}
}
Сада покренимо програм. На слици 9.46. приказан је резултат рада програма уколико изоставимо попуњавање поља за унос, а на слици 9.47. приказан је резултат рада програма ако су уноси исправни.
Слика 9.46. Резултат рада програма када нису попуњена сва поља
Слика 9.47. Резултат рада програма за исправан унос
У наредним задацима подразумеваћемо да свако поље треба да буде попуњено, односно, да у сваком textBox - у постоји одговарајући унос. Према томе, нећемо испитивати да ли су поља за унос празна или нису.
Пример 3. Написати програм који за три унета броја исписује највећу цифру која се у тим бројевима појављује.
Анимација 9.16. Илустрација примера 3
Правимо форму облика:
label1 - преименоваћемо у a, label2 - преименоваћемо у b, label3 - преименоваћемо у c
textBox1 - у ово поље корисник уноси природан број
textBox2 - у ово поље корисник уноси природан број
textBox3 - у ово поље корисник уноси природан број
label4 - овде се исписује највећа цифра која се појављује у ова три броја
button1 - преименујемо дугме у Najveca cifra
Слика 9.48. Изглед форме пре преименовања у примеру 3
Двокликом на дугме Najveca cifra отвара нам се прозор у коме пишемо код за наш програм. Унутар класе Form1 пишемо код за функцију која рачуна највећу цифру, а унутар button1_Click пишемо код програма у коме ћемо позивати ову функцију. Ако је неки од унетих бројева негативан исписујемо поруку у лабели да треба унети природан број. Испитујемо која цифра је највећа за сваки од унетих бројева, а потом поредимо максималне цифре.
Слика 9.49. Изглед форме након преименовања у примеру 3
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Definišemo funkciju koja vraća najveću cifru
int najveca(int a)
{
//Početna vrednost maksimuma cifara je 0
int max = 0;
//Dok je a veće od 0 poredimo cifre
while (a > 0)
{
//Promenljiva c je poslednja cifra, dobijamo je kao ostatak pri deljenju broja a sa 10
int c = a % 10;
//Potom delimo bez ostatka broj a sa 10, da bismo broj a zapisali bez poslednje cifre
a = a / 10;
//Ako je c veće od najveće cifre
if (c > max)
//Promenljivoj max dodeljujemo vrednost c
max = c;
}
//Vraćamo max kao vrednost funkcije
return max;
}
//Sada ćemo ispitati koja cifra je najveća među uneta tri broja
private void button1_Click(object sender, EventArgs e)
{
//Deklaracija promenljivih
int a, b, c;
//Učitavamo vrednosti promenljivih iz polja za unos
a = int.Parse(textBox1.Text);
b = int.Parse(textBox2.Text);
c = int.Parse(textBox3.Text);
//Ako su svi učitani brojevi veći od 0 ispitujemo koja cifra je najveća
if (a > 0 && b > 0 && c > 0)
{
//Deklaracija promenljive u koju smeštamo najveću cifru
int max;
//Deklaracija promenljivih u koje smeštamo najveću cifru svakog broja ponaosob
int max_a, max_b, max_c;
//Dodeljujemo promenljivoj maksimalnu cifru broja a
max_a = najveca(a);
//Dodeljujemo promenljivoj maksimalnu cifru broja b
max_b = najveca(b);
//Dodeljujemo promenljivoj maksimalnu cifru broja c
max_c = najveca(c);
//Promenljivoj max dodeljujemo početnu vrednost max_a
max = max_a;
//Ako je max manje od max_b ili max_c
if (max < max_b || max < max_c)
{
//Tada stavljamo da je početna vrednost za max jednaka max_b
max = max_b;
//Ispitujemo da li je max manje od max_c
if (max < max_c)
//Ako jeste max je max_c
max = max_c;
//Ako nije
else
//Promenljiva max dobija vrednost max_b
max = max_b;
}
//Ako max nije manje ni od max_b, ni od max_c
else
//Tada je max jednako max_a
max = max_a;
//Ispisujemo u labeli najveću cifru za ova tri broja
label4.Text = "Najveca cifra je " + max;
}
//Ako smo uneli negativne vrednosti u polja za unos
else
//Ispisujemo poruku
label4.Text = "Unesite prirodne brojeve!";
}
}
Сада покренимо програм. На првој слици приказан је резултат рада програма уколико унесемо негативан број, а на другој слици је приказан резултат рада програма ако су уноси исправни.
Слика 9.50. Резултат рада програма за неисправан унос
Слика 9.51. Резултат рада програма за исправан унос
Пример 4. Написати програм који за два унета броја испитује који од њих има већи збир цифара и исписује тај број.
Анимација 9.17. Илустрација примера 4
Правимо форму облика:
label1 - преименоваћемо у a, label2 - преименоваћемо у b
textBox1 - у ово поље корисник уноси природан број
textBox2 - у ово поље корисник уноси природан број
label3 - овде се исписује збир цифара првог и другог броја
label4 - овде се исписује број који има већи збир цифара
button1 - преименујемо дугме у Zbir cifara
Слика 9.52. Изглед форме пре преименовања у примеру 4
Двокликом на дугме Zbir cifara отвара нам се прозор у коме пишемо код за наш програм. Унутар класе Form1 пишемо код за функцију која рачуна збир цифара неког броја, а унутар button1_Click пишемо код програма у коме ћемо позивати ову функцију. Ако је неки од унетих бројева негативан исписујемо поруку да треба унети природан број.
Слика 9.53. Изглед форме након преименовања у примеру 4
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Definicija funkcije koja računa zbir cifara nekog broja
int zbir_cifara(int a)
{
//Početna vrednost za zbir je 0
int zbir = 0;
//Dok je a veće od 0 sabiramo cifre
while (a > 0)
{
//Poslednja cifra broja a, dobijamo je tako što tražimo ostatak pri deljenju sa 10
int c = a % 10;
//Sabiramo poslednju cifru sa zbirom
zbir = zbir + c;
//Novi broj a - delimo broj a bez ostatka sa 10
a = a / 10;
}
//Vraćamo vrednost zbira
return zbir;
}
//Klikom na dugme ispisujemo broj sa većim brojem cifara
private void button1_Click(object sender, EventArgs e)
{
//Deklaracija promenljivih koje predstavljaju brojeve kojima računamo zbir cifara
int a, b;
//Deklaracija promenljivih koje predstavljaju zbir cifara jednog i drugog broja
int zbir1, zbir2;
//Deklaracija promenljivih koje predstavljaju zbir cifara i broj koji ima veći zbir cifara
int maxzbir, maxbroj;
//Učitavamo vrednosti brojeva koje ispitujemo
a = int.Parse(textBox1.Text);
b = int.Parse(textBox2.Text);
//Ako su brojevi pozitivni
if (a > 0 && b > 0)
{
//Poruke koje će se ispisivati u labelama
label3.Text = "Zbir cifara broja ";
label4.Text = "Broj koji ima veci zbir cifara je ";
//Zbir cifara broja a
zbir1 = zbir_cifara(a);
//Zbir cifara broja b
zbir2 = zbir_cifara(b);
//Veći zbir je zbir cifara broja a
maxzbir = zbir1;
//Ako je zbir cifara broja b veći od maxzbir
if (maxzbir < zbir2)
{
//Promenljiva maxzbir dobija vrednost zbira cifara broja b
maxzbir = zbir2;
//Broj koji ima veći zbir cifara je b
maxbroj = b;
}
//Ako ne važi da je zbir cifara broja b veći od maxzbir
else
{
//Promenljiva maxzbir dobija vrednost zbira cifara broja a
maxzbir = zbir1;
//Broj sa većim zbirom cifara je a
maxbroj = a;
}
//Ispisujemo za svaki broj koliki mu je zbir cifara
label3.Text = label3.Text + a + " je " + zbir1 + ". " + label3.Text + b + " je " + zbir2;
//Ispisujemo koji broj ima veći zbir cifara i koji je to broj
label4.Text = label4.Text + maxbroj + " i njegov zbir cifara je " + maxzbir;
}
//Ako brojevi nisu pozitivni
else
{
//Praznimo labele
label3.Text = "";
label4.Text = "";
//Ispisujemo poruku
MessageBox.Show("Unesite prirodne brojeve!");
}
}
}
Сада покренимо програм. На слици 9.54. приказан је резултат рада програма уколико унесемо негативан број, а на слици 9.55. је приказан резултат рада програма ако су уноси исправни.
Слика 9.54. Резултат рада програма за неисправан унос
Слика 9.55. Резултат рада програма за исправан унос
Пример 5. Написати програм који рачуна обим и површину троугла, ако су унете вредности страница користећи функцију која проверава да ли наведене три странице чине троугао.
Анимација 9.18. Троугао и формуле за површину и обим
Правимо форму облика:
label1 - преименоваћемо у a, label2 - преименоваћемо у b, label3 - преименоваћемо у c
textBox1 - у ово поље корисник уноси позитиван реалан број
textBox2 - у ово поље корисник уноси позитиван реалан број
textBox3 - у ово поље корисник уноси позитиван реалан број
label4 - овде се исписује површина троугла
label5 - овде се исписује обим троугла
button1 - преименујемо дугме у Obim i povrsina trougla
Слика 9.56. Изглед форме пре преименовања у примеру 5
Двокликом на дугме Obim i povrsina trougla отвара нам се прозор у коме пишемо код за наш програм. Унутар класе Form1 пишемо код за функцију која испитује да ли унете три странице чине троугао, а унутар button1_Click пишемо код програма у коме ћемо позивати ову функцију. Ако је неки од унетих бројева негативан исписујемо поруку да треба унети позитиван реалан број.
Слика 9.57. Изглед форме након преименовања у примеру 5
Како испитујемо да ли унете вредности могу бити странице троугла? За сваки троугао мора да важи да је збир сваке две странице већи од треће. То ће бити услов који се мора испунити и наша функција ће испитивати да ли он важи. Ако услов важи, онда можемо рачунати површину. Површину рачунамо преко Хероновог обрасца.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Funkcija koja ispituje da li neke tri stranice mogu da čine trougao
bool trougao(double a, double b, double c)
{
//Ako je zbir svake dve stranice veći od treće
if (a + b > c && a + c > b && b + c > a)
//Vraćamo true, može biti trougao
return true;
//U protivnom, ako ne važi uslov
else
//Vraćamo false, ne može biti trougao
return false;
}
//Klikom na dugme računamo površinu i obim trougla ako on postoji
private void button1_Click(object sender, EventArgs e)
{
//Deklaracija promenljivih
double a, b, c;
//Učitavamo vrednosti za promenljive a, b i c iz odgovarajućih textBox-ova
a = double.Parse(textBox1.Text);
b = double.Parse(textBox2.Text);
c = double.Parse(textBox3.Text);
//Ako stranice sa učitanim vrednostima čine trougao
if (trougao(a, b, c))
{
//Deklaracija promenljivih za površinu i obim
double povrsina, obim;
//Deklaracija promenljive za poluobim
double s;
//Izračunavamo obim trougla
obim = a + b + c;
//Izračunavamo poluobim trougla
s = obim / 2;
//Računamo površinu preko Heronovog obrasca.
//Koristimo funkciju sqrt iz klase Math da bismo izračunali koren broja
povrsina = Math.Sqrt(s * (s - a) * (s - b) * (s - c));
//Ispisujemo površinu u labeli
label4.Text = "Povrsina trougla je " + povrsina;
//Ispisujemo obim u labeli
label5.Text = "Obim trougla je " + obim;
}
//Ako stranice ne mogu da čine trougao
else
{
//Praznimo labele
label4.Text = "";
label5.Text = "";
//Ispisujemo odgovarajuću poruku
MessageBox.Show("a, b i c nisu stranice trougla!");
}
}
}
Сада покренимо програм. На слици 9.58. приказан је резултат рада програма уколико унесемо негативан број, на слици 9.59. је приказан резултат рада програма ако унете вредности за странице не могу да граде троугао, а на слици 9.60. су приказани резултати програма ако наведене странице граде троугао.
Слика 9.58. Резултат рада програма када је неисправан унос
Слика 9.59. Резултат рада програма када унете вредности не чине троугао
Слика 9.60. Резултат рада програма када унете вредности чине троугао
Пример 6. Написати програм који рачуна површину и запремину ваљка и купе, користећи функције обим и површина круга.
Правимо форму облика:
Извршићемо преименовање:
Слика 9.61. Изглед форме пре преименовања у примеру 6
Слика 9.62. Изглед форме након преименовања у примеру 6
label1 - преименоваћемо у r, label2 - преименоваћемо у H
textBox1 - у ово поље корисник уноси позитиван реалан број
textBox2 - у ово поље корисник уноси позитиван реалан број
label3 - овде се исписује површина ваљка
label4 - овде се исписује запремина ваљка
button1 - преименујемо дугме у Povrsina i zapremina valjka
label5 - преименоваћемо у s - изводница купе
textBox3 - у ово поље корисник уноси позитиван реалан број
label6 - овде се исписује површина купе
label7 - овде се исписује запремина купе
button2 - преименујемо дугме у Povrsina i zapremina kupe
У овом програму имаћемо две функције - прва ће рачунати обим круга, а друга површину круга. Ове две функције користићемо у главном програму у коме рачунамо површину и запремину ваљка и купе. Овај пример ћемо урадити детаљно, узимајући у обзир и податак да ли су одговарајућа поља за унос текста празна.
За израчунавање запремине ваљка користимо формулу , где је , а за израчунавање површине ваљка користимо формулу , где је .
Слика 9.63. Ваљак
Слика 9.64. Омотач ваљка
За израчунавање запремине купе користимо формулу , а површина базе се рачуна на исти начин као код ваљка. Да бисмо израчунали површину купе морамо сабрати површину базе коју чини круг и површину омотача, који када се развије чини кружни исечак. Дакле, површину купе рачунамо по формули , где је ѕ дужина изводнице купе.
Купа:
Омотач купе:
Слика 9.65. Купа
Слика 9.66. Омотач купе
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Funkcija koja računa obim kruga
double obim(double r)
{
//Iz klase Math dodeljujemo promenljivoj vrednost broja pi
double pi = Math.PI;
//Funkcija vraća obim kruga
return 2 * r * pi;
}
//Funkcija koja računa površinu kruga
double povrsina(double r)
{
//Iz klase Math promenljivoj dodeljujemo vrednost broja pi
double pi = Math.PI;
//Funkcija vraća površinu kruga
return r * r * pi;
}
//Pritiskom na prvo dugme treba da izračunamo površinu i zapreminu valjka
private void button1_Click(object sender, EventArgs e)
{
//Deklaracija poluprečnika i visine valjka
double r, H;
//Deklaracija površine i zapremine valjka
double P, V;
//Učitavamo vrednosti za r i H iz odgovarajućih textBox-ova
r = double.Parse(textBox1.Text);
H = double.Parse(textBox2.Text);
//Ako su poluprečnik i visina veći od nule računamo
if (r > 0 && H > 0)
{
//U labelama naznačavamo koja vrednost će se u njima ispisati
label3.Text = "Povrsina valjka je: ";
label4.Text = "Zapremina valjka je: ";
//Promenljivoj P dodeljujemo vrednost površine valjka
P = 2 * povrsina(r) + obim(r) * H;
//Promenljivoj V dodeljujemo vrednost zapremine valjka
V = povrsina(r) * H;
//U odgovarajućim labelama ispisujemo rezultat
label3.Text = label3.Text + P;
label4.Text = label4.Text + V;
}
//Ukoliko su poluprečnik ili visina manji ili jednaki sa 0
else
{
//Praznimo sve labele u kojima treba da stoje rezultati
label3.Text = "";
label4.Text = "";
label6.Text = "";
label7.Text = "";
//Ispisujemo poruku
MessageBox.Show("Unesite pozitivne realne vrednosti za r i H!");
}
}
//Pritiskom na drugo dugme treba da izračunamo površinu i zapreminu kupe
private void button2_Click(object sender, EventArgs e)
{
//Deklaracija poluprečnika, visine i izvodnice kupe
double r, H, s;
//Deklaracija površine i zapremine kupe
double P, V;
//U labelama naznačavamo koja vrednost će se u njima ispisati
label6.Text = "Povrsina kupe je: ";
label7.Text = "Zapremina kupe je: ";
//Učitavamo vrednosti za r, H i s iz odgovarajućih textBox-ova
r = double.Parse(textBox1.Text);
H = double.Parse(textBox2.Text);
s = double.Parse(textBox3.Text);
//Ako su poluprečnik, visina i izvodnica veći od nule računamo
if (r > 0 && H > 0 && s > 0)
{
//Promenljivoj P dodeljujemo vrednost površine kupe
P = povrsina(r) + s * r * Math.PI;
//Promenljivoj V dodeljujemo vrednost zapremine kupe
V = povrsina(r) * H / 3;
//Ispisujemo rezultat u odgovarajućim labelama
label6.Text = label6.Text + P;
label7.Text = label7.Text + V;
}
//Ukoliko su poluprečnik, visina ili izvodnica manji ili jednaki sa 0
else
{
//Praznimo sve labele u kojima treba da stoje rezultati
label3.Text = "";
label4.Text = "";
label6.Text = "";
label7.Text = "";
//Ispisujemo poruku
MessageBox.Show("Unesite pozitivne realne vrednosti za r, s i H!");
}
}
}
Сада покренимо програм да видимо резултате.
Слика 9.67. Резултат рада програма ако је неки од уноса негативан
Слика 9.68. Резултат рада програма ако смо коректно унели све вредности
Самостално урадити исти задатак само са испитивањем попуњености поља за унос. Шта се дешава ако изоставимо да попунимо поље у коме треба да упишемо вредност изводнице купе? Шта је тада могуће израчунати, а шта не? Обухватити све услове.
Пример 7. Написати програм који рачуна запремину правилне тростране и правилне шестостране призме и пирамиде.
Анимација 9.19. Тространа пирамида и призма
*У случају да се анимација не приказује, притиснути дугме Прикажи слику
Правимо форму облика:
Извршићемо преименовање:
Слика 9.69. Изглед форме пре преименовања у примеру 7
Слика 9.70. Изглед форме након преименовања у примеру 7
Запремина правилне тростране призме и правилне шестостране призме једнака је , док је запремина правилне тростране и шестостране пирамиде истих димензија основице и висине једнака трећини ове запремине. Правилна тространа призма и пирамида имају у основи једнакостраничан троугао. Правилна шестострана призма и пирамида имају у основи правилан шестоугао који се састоји из шест једнакостраничних троуглова. Према томе, можемо написати функцију која рачуна површину једнакостраничног троугла за дату страницу. Површина једнакостраничног троугла је:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Funkcija koja računa površinu trougla
double povrsina_trougla(double a)
{
//Deklaracija promenljive
double povrsina;
//Dodeljujemo površini vrednost. Iz klase Math koristimo funkciju za koren
povrsina = a * a * Math.Sqrt(3) / 4;
//Vraćamo površinu
return povrsina;
}
//Pritiskom na dugme računamo zapreminu prizme i piramide
private void button1_Click(object sender, EventArgs e)
{
//Deklaracija promenljivih za dužinu osnovice i visinu
double a, H;
//Deklaracija promenljivih za zapreminu
double V3, V6, piramida3, piramida6;
//Učitavamo vrednost osnovice
a = double.Parse(textBox1.Text);
//Učitavamo vrednost visine
H = double.Parse(textBox2.Text);
//Računamo zapreminu pravilne trostrane prizme
V3 = povrsina_trougla(a) * H;
//Računamo zapreminu pravilne šestostrane prizme
V6 = 6 * povrsina_trougla(a) * H;
//Računamo zapreminu pravilne trostrane piramide
piramida3 = V3 / 3;
//Računamo zapreminu pravilne šestostrane piramide
piramida6 = V6 / 3;
//Upisujemo rezulate u odgovarajuće labele
label3.Text = "Zapremina pravilne trostrane prizme je " + V3; ;
label4.Text = "Zapremina pravilne sestostrane prizme je " + V6;
label5.Text = "Zapremina pravilne trostrane piramide je " + piramida3;
label6.Text = "Zapremina pravilne sestostrane piramide je " + piramida6;
}
}
Резултат рада програма је следећи:
Слика 9.71. Резултат рада програма ако смо коректно унели све вредности
Самостално урадити исти задатак и обухватити случајеве када нису сва поља за унос попуњена, као и случај када је унос негативан број. Водити рачуна о свим условима. Такође, самостално израчунати и површину правилне тростране и шестостране призме и при том сматрати да је као податак дата и висина бочне стране.
Пример 8. Написати програм који рачуна збир два разломка и исписује резултат у облику разломка користећи својство скраћивања разломака највећим заједничким делиоцем.
Правимо форму облика:
label1 - преименоваћемо у brojilac1, label2 - преименоваћемо у imenilac1
label3 - преименоваћемо у brojilac2, label4 - преименоваћемо у imenilac2
textBox1 - у ово поље корисник уноси цео број, textBox2 - у ово поље корисник уноси цео број
textBox3 - у ово поље корисник уноси цео број, textBox4 - у ово поље корисник уноси цео број
label5 - овде се исписује збир у облику разломка
button1 - преименујемо дугме у Saberi razlomke
Слика 9.72. Изглед форме пре преименовања у примеру 8
Двокликом на дугме Saberi razlomke отвара нам се прозор у коме пишемо код за наш програм. Унутар класе Form1 пишемо код за функцију која рачуна највећи заједнички делилац, а унутар button1_Click пишемо код програма у коме ћемо позивати ову функцију. Илуструјмо на примеру како овај програм ради. Желимо да саберемо два разломка. Тада је њихов збир једнак:  .
Слика 9.73. Изглед форме након преименовања у примеру 8
Међутим, можда ће разломак који добијемо моћи да се скрати. Разломке скраћујемо највећим заједничким делиоцем бројиоца и имениоца. Због тога нам је потребна функција која рачуна НЗД. Највећи заједнички делилац два броја представља највећи број којим су и један и други број дељиви.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Funkcija koja računa najveći zajednički delilac
int NZD(int a, int b)
{
//Početna vrednost za nzd je 1
int nzd = 1;
//Radi efikasnosti programa for petlja kreće od a
//Na ovaj način će nam se odmah vratiti najveći broj koji deli a i b
for (int i = a; i >= 2; i--)
{
//Ispitujemo da li su i a i b deljivi sa i
if (a % i == 0 && b % i == 0)
{
//Promenljiva nzd dobija vrednost broja i
nzd = i;
//Prekidamo rad programa kada nađemo nzd
break;
}
}
//Vraćamo vrednost funkcije
return nzd;
}
//Pritiskom na dugme sabiramo dva razlomka
private void button1_Click(object sender, EventArgs e)
{
//Deklaracija promenljivih
int a, b, c, d;
//Deklaracija brojioca i imenioca u koje ćemo upisati rezultat
int brojilac, imenilac;
//Deklaracija promenljive u koju ćemo upisati vrednost nzd
int x;
//Iz odgovarajućih textBox-ova učitavamo vrednosti
a = int.Parse(textBox1.Text);
b = int.Parse(textBox2.Text);
c = int.Parse(textBox3.Text);
d = int.Parse(textBox4.Text);
//U labeli ispisujemo koje razlomke sabiramo
label5.Text = a + "/" + b + "+" + c + "/" + d + "=";
//Računamo brojilac po gore navedenoj formuli
brojilac = a * d + b * c;
//Računamo imenilac po gore navedenoj formuli
imenilac = b * d;
//Računamo najveći zajednički delilac za brojilac i imenilac
x = NZD(brojilac, imenilac);
//Skraćujemo razlomak. Brojilac delimo sa nzd
brojilac = brojilac / x;
//Imenilac delimo sa nzd
imenilac = imenilac / x;
//U odgovarajuću labelu upisujemo rešenje u obliku razlomka
label5.Text = label5.Text + brojilac + "/" + imenilac;
}
}
Сада покренимо програм. Испитаћемо исправност рада програма на следећем примеру:
Покренимо програм да видимо резултате.
Слика 9.74. Резултат рада програма
Овај резултат је и требало добити.
Пример 9. Написати програм који рачуна која од две дужи задате крајњим координатама тачака има већу дужину.
Правимо форму облика:
Извршићемо преименовање:
Слика 9.75. Изглед форме пре преименовања у примеру 9
Слика 9.76. Изглед форме након преименовања у примеру 9
Растојање између тачака уколико су дате реалне координате рачунамо на следећи начин:
Прво ћемо написати функцију која рачуна растојање између тачака, а потом ћемо поредити дужине две дужи дате координатама.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Funkcija koja računa rastojanje između dve tačke
double rastojanje(double x1, double y1, double x2, double y2)
{
//Deklaracija promenljive
double d;
//Promenljivoj dodeljujemo rastojanje
d = Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
//Vraćamo vrednost rastojanja između dve tačke
return d;
}
//Pritiskom na dugme treba da nam se ispiše koja duž je veća
private void button1_Click(object sender, EventArgs e)
{
//Inicijalizacija promenljivih koje predstavljaju koordinate tačaka
double xA, yA, xB, yB, xC, yC, xD, yD;
//Deklaracija promenljivih koje predstavljaju dužine duži
double AB, CD;
//Učitavamo koordinate tačaka iz odgovarajućih polja za unos
xA = double.Parse(textBox1.Text);
yA = double.Parse(textBox2.Text);
xB = double.Parse(textBox3.Text);
yB = double.Parse(textBox4.Text);
xC = double.Parse(textBox5.Text);
yC = double.Parse(textBox6.Text);
xD = double.Parse(textBox7.Text);
yD = double.Parse(textBox8.Text);
//Računamo dužinu duži AB
AB = rastojanje(xA, yA, xB, yB);
//Računamo dužinu duži CD
CD = rastojanje(xC, yC, xD, yD);
//Ako je AB veće od CD
if (AB > CD)
//Ispisujemo u labeli odgovarajuću poruku
label11.Text = "Duz AB je duza od duzi CD.";
//Ako je CD veće od AB
else if (CD > AB)
//Ispisujemo u labeli odgovarajuću poruku
label11.Text = "Duz CD je duza od duzi AB.";
//Ako su AB i CD jednake
else
//Ispisujemo odgovarajuću poruku
label11.Text = "Duz AB jednaka je duzi CD.";
}
}
Резултат рада програма је следећи:
Слика 9.77. Резултат рада програма када је једна дуж већа од друге
Слика 9.78. Резултат рада програма када су дужи једнаке
Сада ћемо погледати пар сложенијих примера. У наредним примерима обрађено је креирање класа и рад са класама.
Пример 10. Написати програм који ће за унети број кликом на контролно дугме бити уписан у одговарајућу листу у зависности од тога да ли је број прост или није. У трећу листу ће се исписивати сви делиоци датог броја, а прозор са поруком ће обавестити корисника колики је збир свих делиоца датог броја. Задатак урадити преко класа, креирањем класе Brojevi, која ће имати једну класну променљиву broj, целобројног типа.
Решење:
Направити класу Brojevi, која ће имати једну класну променљиву број, типа int. Класа Brojevi треба да има следеће фукције:
а) int Prost();
која ће да провери да ли је дати број, у интервалу од 1 до 100, прост, ако јесте враћа 1, ако није враћа 0, или ако није у интервалу од 1 до 100 враћа -1
б) string Deljiv();
која враћа све бројеве који су дељиви са датим бројем
в) int Zbir(int b);
која враћа збир свих бројева који су дељиви са датим бројем.
Направити форму Form1(Слика 9.79.).
label1 - у овој лабели ћемо написати Unesite broj < =100:
textBox1 - у ово поље корисник уноси број од 1 до 100
button1 - ово је наше контролно дугме и на њему ћемо написати Izvrsi
label2 - у овој лабели ћемо написати Prosti brojevi:
listbox1 - у овај листбокс ћемо исписивати резултат нашег задатка (само просте бројеве)
label2 - у овој лабели ћемо написати Brojevi koji nisu prosti:
listbox2 - у овај листбокс ћемо исписивати резултат нашег задатка (само бројеве који нису прости)
label3 - у овој лабели ћемо написати Brojevi sa kojima je deljiv dati broj:
listbox3 - у овај листбокс ћемо исписивати резултат нашег задатка (бројеве који су дељиви са унетим бројем)
Слика 9.79. Изглед форме у примеру 10
Најпре у textBox1 унети број који је мањи од 100, кликом на дугме "Izvrsi" обезбедити да унети број у зависности од тога да ли
је прост или не упише, ако је прост у listBox1, ако није прост број у listBox2, и за тај број да се у listBox3 испишу бројеви са којима је дељив унети број.
Ако број није у интервалу < 100 онда обезбедити одговарајућу поруку.
Обезбедити и то да кликом на било који број из listBox1 или listBox2, отвори нови прозор са поруком колики је збир бројева који су дељиви са изабраним бројем.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Kreiramo listu brojeva, u koju cemo smestati brojeve koji su prosti
ArrayList brojeviP = new ArrayList();
//Kreiramo listu brojeva, u koju cemo smestati brojeve koji nisu prosti
ArrayList brojeviNP = new ArrayList();
/*Funkcija koja se poziva kada se klikne na dugme "Izvrsi"*/
private void button1_Click(object sender, EventArgs e)
{
//Citamo uneti broj i konvertujemo ga u int
int broj = int.Parse(textBox1.Text);
//Ako je uneti broj veci od 100
if (broj > 100)
//Vracamo sledecu poruku
MessageBox.Show("Treba da unesete broj koji je manji ili jednak broju 100!!!");
else
{
//Inace kreiramo objekat klase Brojevi
Brojevi b = new Brojevi(broj);
//Pomocu objekta b pozivamo funkciju Prost
if (b.Prost() == 1)
{
//Ako je broj prost, dodajemo broj u vec kreiranu listu
brojeviP.Add(b);
//Zatim dodajemo broj u listBox1
listBox1.Items.Add(broj);
//Pozivamo fuknciju Deljiv, klase Brojevi, i u listBox3 dodajemo sve brojeve sa
//kojima je uneti broj deljiv
listBox3.Items.Add(broj + ": " + b.Deljiv());
}
else
{
//Inace, ako broj nije prost, dodajemo ga u listu brojeva koji nisu prosti
brojeviNP.Add(b);
//A zatim i u listBox2
listBox2.Items.Add(broj);
//Pozivamo fuknciju Deljiv, klase Brojevi, i u listBox3 dodajemo sve brojeve
//sa kojima je uneti broj deljiv
listBox3.Items.Add(broj + ": " + b.Deljiv());
}
}
//Postavljamo polje textBox1 na prazno,i omogucavamo unos novog broja
textBox1.Text = "";
}
/*Funkcija koja se poziva kada se klikne na neki od brojeva u listBox1(lista prostih brojeva)*/
private void listBox1_Click(object sender, EventArgs e)
{
//Konvertujemo broj, koji je selektovan, u tip int
int z = Convert.ToInt32(listBox1.SelectedItem);
//Kreiramo objekat klase Brojevi
Brojevi b = new Brojevi();
//Pozivamo funkciju Zbir klase Brojevi,i vracamo sledecu poruku
MessageBox.Show("Zbir brojeva koji su deljivi sa brojem " + z + " jednak je " + b.Zbir(z));
}
/*Funkcija koja se poziva kada se klikne na neki od brojeva u listBox2
(lista brojeva koji nisu prosti)*/
private void listBox2_Click(object sender, EventArgs e)
{
//Konvertujemo broj, koji je selektovan, u tip int
int z = Convert.ToInt32(listBox2.SelectedItem);
//Kreiramo objekat klase Brojevi
Brojevi b = new Brojevi();
//Pozivamo funkciju Zbir klase Brojevi,i vracamo sledecu poruku
MessageBox.Show("Zbir brojeva koji su deljivi sa brojem " + z + " jednak je " + b.Zbir(z));
}
}
public class Brojevi
{
//Klasna promenljiva tipa int
public int broj;
//Podrazumevani konstruktor klase Brojevi
public Brojevi()
{ }
//Konstruktor klase Brojevi
public Brojevi(int broj)
{
this.broj = broj;
}
//Funkcija koja proverava da li je uneti broj prost, ako jeste vraca 1, ako nije vraca 0
public int Prost()
{
//Postavljamo rezultat na -1
int rez = -1;
//Proveravamo da li je uneti broj u intervalu od 1 do 100, ukljucujuci i 1 i 100
if (broj >= 1 && broj <= 100)
{
//Ako je rezultat -1
if (rez == -1)
{
//Postavimo rezultat na 1, tj. broj je prost
rez = 1;
//Ukoliko je broj veci od 2 i pritom ostatak 0 pri deljenju broja sa 2
if (broj > 2 && broj % 2 == 0)
//Rezultat ce biti 0, tj. broj nije prost
rez = 0;
else
//U suprotnom proveravamo neparne brojeve, pocevsi od broja 3
for (int i = 3; i * i <= broj; i = i + 2)
//Ukoliko je neki od tih brojeva deljiv sa neparnim brojem 3,
// tj. ostatak pri deljenju je 0
if (broj % i == 0)
{
//Rezultat je 0, prekida petlju
rez = 0;
break;
}
}
}
//Vracamo dobijeni rezultat
return rez;
}
//Funkcija koja vraca sve brojeve sa kojima je deljiv dati broj
public string Deljiv()
{
//Promenljiva tipa String u koju cemo smestiti brojeve koji su deljivi sa datim brojem
string rez = "";
//Petlja koja proverava sve brojeve od 1 do datog broja
for (int i = 1; i <= broj; i++)
//Ako je ostatak pri deljenju broja sa brojem i = 0
if (broj % i == 0)
//Dodajemo broj u rezultat
rez = rez + i + ", ";
//Vracamo dobijeni rezultat
return rez;
}
//Funkcija koja racuna zbir svih brojeva koji su deljivi sa datim brojem
public int Zbir(int b)
{
//Rezultatu dodelimo vrednost 0
int r = 0;
//Petlja koja proverava sve brojeve od 1 do datog broja
for (int i = 1; i <= b; i++)
//Ukoliko su brojevi deljivi
if (b % i == 0)
//Na rezultat dodajemo broj i
r = r + i;
//Vracamo dobijeni rezultat
return r;
}
}
Када покренемо апликацију из радног окружења помоћу тастера F5 отвара нам се форма. Унесемо број који је мањи или једнак броју 100.
Слика 9.80. Покрећемо програм и уносимо вредност
Двоструким кликом на дугме Izvrsi у listBox1
ће се додати унети број уколико је прост иначе ће се додати у listBox2, у listBox3 ће се додати бројеви са којима је дељив унети број.
Слика 9.81. Испис бројева који са којима је дељив дати број
Кликом на неки број из listBox1 или listBox2 отвара се нови прозор са поруком у којој ће писати колики је збир бројева који су дељиви са унетим бројем.
Слика 9.82. Збир бројева са којима је дељив дати број
Напомена: У примеру 11 су коришћени низови. Уколико не владате том облашћу, предлажемо вам да пре овог задатка погледате област Тип низа.
Пример 11. Написати програм који ће за унету реч кликом на одговарајуће контролно дугме извршавати операцију која одговара одабраном радио дугмету. Операције које треба да постоје су: реч обрнута датој речи, прелазак свих слова у велика слова, прелазак свих слова у мала слова, прелазак сваког другог слова у велико. Такође, омогућити да постоји још један простор за унос, где ће за унето слово и одабиром одговарајућег радио дугмета програм исписати поруку колики је број појављивања датог слова у речи која је унета. Омогућити и да се одабиром одговарајућег радио дугмета унета реч замени неком од речи из низа који ћемо креирати у програму. Задатак урадити преко класа, креирањем класе Reci.
Решење:
Направити класу Reci, која ће имати следеће функције:
а) string Obrni(string rec);
враћа string који садржи обрнут редослед слова датог string - a
б) int BrSlova(string rec, string a);
враћа број појављивања датог string а ( чија је дужина = 1) у string rec
в) string Velika(string rec) i string Mala(string rec);
враћа дати string - a записан са свим великим, односно свим малим словима
г) string ParNepar(string rec);
враћа string код кога је свако слово које је на парном или непарном месту, у зависности од дужине датог string - a, замењено великим словом
д)string Zameni(string rec);
дати string rec мења случајно изабраном речи из низа датог у функцији, нека тај низ речи садржи речи бресква, банана, крушка, јабука, шљива
Направити форму Form1(Слика 9.83.).
label1 - у овој лабели ћемо написати Unesite rec:
textBox1 - у ово поље корисник уноси неку реч
label2 - у овој лабели ћемо написати Unesite slovo:
textBox2 - у ово поље корисник уноси неко слово
button1 - ово је наше контролно дугме и на њему ћемо написати Izvrsi
radioButton1 - на ово дугме ћемо написати obrni
radioButton2 - на ово дугме ћемо написати broj pojavljivanja datog slova
radioButton3 - на ово дугме ћемо написати sva u mala
radioButton4 - на ово дугме ћемо написати sva u velika
radioButton5 - на ово дугме ћемо написати Par Nepar
radioButton6 - на ово дугме ћемо написати Zameni rec
Слика 9.83. Изглед форме у примеру 11
Најпре у textBox1 унесите неку реч, уколико нисте унели неки string отвориће се прозор са одговарајућом поруком.
Затим у зависности од тога који radioButton сте изабрали позовите одговарајућу функцију
из класе Reci, тако да се кликом на дугме "Izvrsi" спроведе одговарајућа акција и у richTextBox испише резултат.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
//Funkcija koja se poziva klikom na dugme "Izvrsi"
private void button1_Click(object sender, EventArgs e)
{
//Kreiranje objekta klase Reci
Reci r = new Reci();
//Uzimamo string unet u textBox1 i dodeljujemo ga stringu rec
string rec = textBox1.Text;
//Uzimamo string unet u textBox2 i dodeljujemo ga stringu slovo
string slovo = textBox2.Text;
//Ako je cekiran radioButton1
if (radioButton1.Checked)
//U richTextBox1 ispisujemo ono sto vraca funkcija Obrni klase Reci
richTextBox1.Text = r.Obrni(rec);
//Ako je cekiran radioButton2
else if (radioButton2.Checked)
{
//Pozivamo funkciju BrSlova klase Reci, ako je broj pojavljivanja slova veci od 0
if (r.BrSlova(rec, slovo) > 0)
//U richTextBox1 ispisujemo koliki je broj pojavljivanja datog slova
richTextBox1.Text = "Broj pojavljivanja slova "+slovo+" je "+ r.BrSlova(rec, slovo);
//Inace
else
//Vracamo sledecu poruku
MessageBox.Show("Niste uneli odgovarajuci format slova,pokusajte ponovo!");
}
//Ako je cekiran radioButton3
else if (radioButton3.Checked)
//U richTextBox3 ispisujemo ono sto vraca funkcija Velika klase Reci
richTextBox1.Text = r.Mala(rec);
//Ako je cekiran radioButton4
else if (radioButton4.Checked)
//U richTextBox4 ispisujemo ono sto vraca funkcija Mala klase Reci
richTextBox1.Text = r.Velika(rec);
//Ako je cekiran radioButton5
else if (radioButton5.Checked)
//U richTextBox5 ispisujemo ono sto vraca funkcija ParNepar klase Reci
richTextBox1.Text = r.ParNepar(rec);
//Ako je cekiran radioButton6
else if (radioButton6.Checked)
//U textBox1 ispisujemo ono sto vraca funkcija Zameni klase Reci
textBox1.Text = r.Zameni(rec);
}
}
public class Reci
{
//Podrazumevani konstruktor klase Reci
public Reci()
{
}
//Funkcija koja ce da obrne dati string
public string Obrni(string rec)
{
//Promenljiva pom definisana kao niz tipa char
char[] pom = new char[rec.Length];
//Niz karaktera datog stringa rec
char[] recn = rec.ToCharArray();
//Promenljiva u koju ćemo smestiti nas rezultat
string rez = "";
//Petlja koja prolazi kroz dati string rec
for (int i = 0; i < rec.Length / 2; i++)
{
//Promenljivoj pom na i - to mesto dodeljujemo karakter iz niza recn
// koji se nalazi na i-tom mestu
pom[i] = recn[i];
//Promenljivoj recn na i - to mesto dodeljujemo karakter iz niza recn
// koji se nalazi na rec.Length-1-i -tom mestu
recn[i] = recn[rec.Length - 1 - i];
//Promenljivoj recn na rec.Length-1-i -tom mestu dodeljujemo karakter iz niza pom
//koji se nalazi na i - tom mestu
recn[rec.Length - 1 - i] = pom[i];
}
//Petlja koja prolazi kroz niz karaktera recn
for (int i = 0; i < recn.Length; i++)
//Dodeljujemo promenljivoj rez karaktere niza recn
rez += recn[i];
//Vracamo rezultat funkcije
return rez;
}
//Funkcija koja broji pojavljivanje stringa a u stringu rec
public int BrSlova(string rec,string a)
{
//Promenljive tipa int kojima je pocetna vrednost jednaka 0
int k = 0, count = 0;
//Ako je duzina stringa a veća od 1 ili jednaka 0
if (a.Length > 1 || a.Length == 0)
{
//Vracamo vrednost -1
return -1;
}
//Petlja koja prolazi kroz string rec
for (int i = 0; i < rec.Length; i++)
{
//Koristeci funkciju Substring, klase String, izdvajamo jedno slovo na mestu k
//iz stringa rec i poredimo ga sa prvim slovom stringa a
if (rec.Substring(k, 1) == a.Substring(0, 1))
{
//Ukoliko su ista slova,uvećavamo brojac count za 1
count++;
}
//Uvecavamo brojac k za 1
k++;
}
//Vracamo vrednost brojaca count
return count;
}
//Funkcija koja sva slova datog stringa pretvara u velika, koristeci funkciju ToUpper,
//klase String
public string Velika(string rec)
{
return rec.ToUpper();
}
//Funkcija koja sva slova datog stringa pretvara u mala, koristeci funkciju ToLower,
//klase String
public string Mala(string rec)
{
return rec.ToLower();
}
//Funkcija koja svako drugo slovo datog stringa rec pretvara u veliko
public string ParNepar(string rec)
{
//Niz karaktera datog stringa rec
char[] recn = rec.ToCharArray();
//Koristeci funkciju ToUpper pretvaramo sva slova stringa rec u velika
string recv = rec.ToUpper();
//Niz karaktera stringa recv
char[] recvn = recv.ToCharArray();
//Promenljiva u koju cemo smestiti nas rezultat
string rez = "";
//Ukoliko je duzina datog stringa deljiva sa 2
if (rec.Length % 2 == 0)
{
//Petlja koja prolazi kroz svako drugo slovo stringa rec, pocevsi od prvog slova
for (int i = 0; i < rec.Length; i = i + 2)
//I menja ga velikim slovom
recn[i] = recvn[i];
}
else
{
//Inace, petlja koja prolazi kroz svako drugo slovo stringa rec, pocevsi od drugog slova
for (int i = 1; i < rec.Length; i = i + 2)
//I menja ga velikim slovom
recn[i] = recvn[i];
}
//Petlja koja prolazi kroz niz recn
for (int i = 0; i < recn.Length; i++)
//Karakter sa i-tog mesta smesta u rez
rez += recn[i];
//Vracamo rezultat funkcije
return rez;
}
//Funkcija koja menja dati string rec sa nekom od reci iz stringa koji je dat u funkciji
public string Zameni(string rec)
{
//Niz reci tipa string
string[] niz = { "breskva", "banana", "kruska", "jabuka", "sljiva" };
//Promenljiva u koju cemo smestiti nas rezultat
string rez = "";
//Kreiranje objekta klase Random
Random r = new Random();
//Slucajan broj od 0 do niz.Length
int index = r.Next(niz.Length);
//Koriscenjem funkcije Replace, klase String,
//zamenicemo rec sa rečju iz niza koja je na mestu index
rez = rec.Replace(rec,niz[index]);
//Vracamo rezultat funkcije
return rez;
}
}
Када покренемо апликацију из радног окружења помоћу тастера F5 отвара нам се форма. Унесемо неку реч и бирамо једно од понуђених радио дугмади.
Слика 9.84. Покрећемо програм и уносимо вредност
Двоструким кликом на дугме Izvrsi у richTextBox1
ће се додати унета реч са обрнутим редоследом слова.
Слика 9.85. Резултат рада програма ако је одабрано радио дугме obrni
Уколико изаберете радио дугме broj pojavljivanja datog slova, програм ће тражити да унесете слово за које желите да проверите да ли се појављује у вашој речи.
Слика 9.86. Резултат рада програма ако је одабрано радио дугме broj pojavljivanja datog slova, а није начињен никакав унос
Пример 12. Написати програм који ће за унет датум (дан, месец и година се посебно уносе у сваком пољу за унос) притиском на контролно дугме исписивати датум у одговарајућем формату (дан.месец.година.) и у RichTextBox - у ће се исписивати да ли је унета година преступна и колико дана има унети месец. Притиском на друго контролно дугме омогућити да се сви исписани подаци избришу. Задатак урадити преко класа, креирањем класе Datum, која ће имати три класне променљиве, dan, mesec, godina, целобројног типа.
Решење:
Направити класу Datum, која ће имати класне променљиве dan, mesec, godina, све типа int, као и следеће функције:
а) int Prestupna(int godina);
враћа 1 ако је година преступна, а 0 иначе
б) int DaniUmesecu(int mesec, int godina);
враћа број дана у датом mesecu
в) Boolean Validan(int g, int m, int d);
враћа true ако је датум валидан, тј. уколико су у одговарајућем опсегу dan,mesec,godina (godina > 1900)
г) string VratiString();
враћа датум типа string у формату хх.хх.хххх.
Направити форму Form1(Слика 9.87.).
label1 - у овој лабели ћемо написати Dan
textBox1 - у ово поље корисник уноси редни број дана
label2 - у овој лабели ћемо написати Mesec
textBox2 - у ово поље корисник уноси редни број месеца
label2 - у овој лабели ћемо написати Godina
textBox3 - у ово поље корисник уноси годину, као број
button1 - ово је наше контролно дугме и на њему ћемо написати Datum
button2 - ово је наше контролно дугме и на њему ћемо написати Obrisi
textBox4 - у ово поље ће се након клика на дугме Datum исписати датум у формату хх.хх.хххх.
richTextBox1 - у ово поље ће се након клика на дугме исписати резултат нашег задатка
Слика 9.87. Изглед форме у примеру 12
Анимација 9.20. Преступне године
Најпре у textBox1, textBox2 и textBox3 унесите дан, месец и годину, уколико нисте попунили сва поља кликом на дугме
"Datum" отвориће се прозор са одговарајућом поруком. Иначе, кликом на дугме "Datum" уколико су унети дан, месец и година валидни, у textBox4 испишите
датум у
одговарајућем формату ( dan.mesec.godina. ), а затим и у richTextBox додајте реченицу у којој ће писати да ли је унета година преступна и колико
дана има у датом месецу.
Кликом на дугме "Obrisi" брише се све из textBox4 и richTextBox.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Funkcija koja se poziva klikom na dugme "Datum"
private void button1_Click(object sender, EventArgs e)
{
//Ako u neko od polja nije uneta odgovarajuca vrednost
if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "")
//Vratiti sledecu poruku
MessageBox.Show("Najpre unesite dan,mesec i godinu!");
else
{
//Inace, konvertovati unete vrednosti u tip int
int dan = int.Parse(textBox1.Text);
int mesec = int.Parse(textBox2.Text);
int godina = int.Parse(textBox3.Text);
//Omoguciti da se u textBox4 ne moze nesto uneti
textBox4.Enabled = false;
//Kreiranje objekta klase Datum
Datum datum = new Datum(dan, mesec, godina);
//Pozivamo funkciju Validan, klase Datum, ukoliko vraca false
if (datum.Validan(godina, dan, mesec) == false)
//Obezbediti odgovarajucu poruku
MessageBox.Show("Niste uneli validan datum!");
else
{
//Inace, pozivamo funkciju Prestupna za datu godinu
int p = datum.Prestupna(godina);
//I funkciju DaniUmesecu za dati mesec i godinu
int d = datum.DaniUmesecu(mesec, godina);
//Ako je godina prestupna
if (p == 1)
{
//Ako je mesec februar
if(mesec == 2)
//Povecavamo broj dana za 1
d = d + 1;
//U textBox4 ispisujemo datum koristeci funkciju VratiString
textBox4.Text = datum.VratiString();
//U richTextBox1 dodajemo sledecu recenicu
richTextBox1.AppendText("Godina " + godina + " je prestupna\n" +
"Mesec " + mesec + " ima " + d + " dan-a\n\n");
}
else
{
//Ako godina nije prestupna
//U textBox4 ispisujemo datum koristeći funkciju VratiString
textBox4.Text = datum.VratiString();
//U richTextBox1 dodajemo sledecu recenicu
richTextBox1.AppendText("Godina " + godina + " nije prestupna\n" +
"Mesec " + mesec + " ima " + d + " dan-a\n\n");
}
}
}
//Postavljamo sledeca polja na prazno,i omogucavamo unos drugog datuma
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
}
//Funkcija koja se poziva klikom na dugme "Obrisi"
private void button2_Click(object sender, EventArgs e)
{
//Brisemo sve iz textBox4 i richTextBox1
textBox4.Clear();
richTextBox1.Clear();
}
}
public class Datum
{
//Klasne promenljive tipa int
private int dan;
private int mesec;
private int godina;
//Podrazumevani konstruktor
public Datum(int dan, int mesec, int godina)
{
this.dan = dan;
this.mesec = mesec;
this.godina = godina;
}
//Funkcija vraća 1 ako je godina prestupna, a 0 inace
public int Prestupna(int godina)
{
//Ako je ostatak pri deljenju godina sa 400, ili 4 jednak 0 i
//ostatak pri deljenju godina sa 100 razlicit od 0
if(godina%400 == 0 || godina%4 == 0 && godina%100 != 0)
//Vraca 1
return 1;
//Inace, vraca 0
return 0;
}
//Funkcija koja vraca broj dana u datom mesecu
public int DaniUmesecu(int mesec, int godina)
{
switch(mesec){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return 28;
default:
return 0;
}
}
//Funkcija koja vraća true ukoliko je datum validan,ili false ukoliko datum nije validan
public Boolean Validan(int g, int d, int m)
{
return g > 1900 && (m >= 1 && m <= 12) &&
(d >= 1 && d <= DaniUmesecu(m, g));
}
//Funkcija koja vraca datum u fomratu xx.xx.xxxx.
public string VratiString()
{
//Promenljiva danS kojoj dodeljujemo vrednost dan, ukoliko je dan manji od 10
//dodajemo 0 ispred vrednosti dan
string danS = (dan < 10)? "0" + dan : "" + dan;
//Promenljiva mesecS kojoj dodeljujemo vrednost mesec, ukoliko je mesec manji od 10
//dodajemo 0 ispred vrednosti mesec
string mesecS = (mesec < 10) ? "0" + mesec : "" + mesec;
//Vracamo rezultat funkcije
return danS + "." + mesecS + "." + godina+".";
}
}
Када покренемо апликацију из радног окружења помоћу тастера F5 отвара нам се форма. Унесемо дан, месец и годину.
Двоструким кликом на дугме Datum, уколико нисмо попунили сва поља ( дан, месец, година) отвара се прозор са поруком.
Слика 9.88. Резултат рада програма у примеру 12 када нису сва поља попуњена
Двоструким кликом на дугме Datum, уколико смо попунили сва поља ( дан, месец, година) у textbox4 се уписује датум у формату хх.хх.хххх. и у richTextBox1
се исписује резултат нашег задатка.
Слика 9.89. Резултат рада програма у примеру 12 када је унос исправан
Кликом на дугме Obrisi, брише се све из textBox4 и richTextbox1.
Слика 9.90. Резултат рада програма у примеру 12 када притиснемо дугме Obrisi
Пример 13. Написати програм који ће за унето име и унет датум рођења особе и данашњи датум рачунати нумеролошки број те особе, као и број метаболизма особе. Кликом на контролно дугме у RichTextBox - у ће се исписати име и датум рођења особе, као и нумеролошки број и број метаболизма, као и то да ли је година у којој је особа рођена била преступна. Задатак урадити преко класа, креирањем класе Osoba, која ће имати класне променљиве ime и datum, обе типа стринг.
Решење:
Направити класу Osoba, која ће имати класне променљиве ime и datum, обе типа string.
Као и следеће функције:
а) int NumeroloskiBroj();
која треба да израчуна и врати нумеролошки број особе. Нумеролошки број се рачуна на следећи начин: саберу се све цифре које се јављају у датуму рођења.
Ако тако добијени број није једноцифрен, саберу се његове цифре. Поступак се понавља све док се не добије једноцифрен број.
б) string Metabolizam(string datum1);
која треба да врати string који се добија на следећи начин: из датума рођења и задатог датума обришу се тачке и оно што преостане посматра се као неозначен
цео број. Тако добијена два броја се саберу, а оно што функција треба да врати је string репрезентација резултата.
в) string VratiString();
враћа име и датум рођења особе.
Користити класу Datum, за проверу да ли је унети датум валидан (година треба да буде већа од 1900), и да ли је дата година преступна.
Направити форму Form1(Слика 9.91.).
label1 - у овој лабели ћемо написати Ime
textBox1 - у ово поље корисник уноси име
label2 - у овој лабели ћемо написати Datum uneti u formatu xx.xx.xxxx.
label3 - у овој лабели ћемо написати Danasnji datum
textBox1 - у ово поље корисник уноси данашњи датум
label3 - у овој лабели ћемо написати Datum rodjenja
textBox1 - у ово поље корисник уноси датум рођења
button1 - ово је наше контролно дугме и на њему ћемо написати Osoba
richTextBox1 - у ово поље ће се након клика на дугме исписати резултат нашег задатка
Слика 9.91. Изглед форме у примеру 13
Анимација 9.21. Бројеви
Најпре у textBox1, textBox2 и textBox3 унесите име, датум рођења и данашњи датум, уколико нисте попунили сва поља
кликом на дугме
"Osoba" отвориће се прозор са одговарајућом поруком, или ако нисте унели датуме у задатом формату хх.хх.хххх. отвориће се прозор који ће вас упозорити на то.
Иначе, кликом на дугме "Osoba" у richTextBox ће се додати string репрезентација, нумеролошки број, метаболизам особе, проверите и то да ли је година
у којој је рођена особа била преступна.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Funkcija koja se poziva klikom na dugme "Osoba"
private void button1_Click(object sender, EventArgs e)
{
//Dodeljujemo promenljivoj ime ono što je uneto u textBox1
string ime = textBox1.Text;
//Dodeljujemo promenljivoj datum ono što je uneto u textBox2
string datum = textBox2.Text;
//Dodeljujemo promenljivoj datum1 ono što je uneto u textBox3
string datum1 = textBox3.Text;
//Kreiramo objekat klase Osoba
Osoba o = new Osoba(ime, datum1);
//Kreiramo objekat ugnjezdene klase Datum
Osoba.Datum od = new Osoba.Datum();
//Ako nije unet string u neko od ponudjenih polja
if (ime == " " || datum == " " || datum1 == " ")
//Vraca se sledeca poruka
MessageBox.Show("Morate najpre uneti Vase ime,datum rodjenja i danasnji datum!");
else
{
if (datum.Length == 11 || datum1.Length == 11)
{
//Inace
//proveravamo da li je datum validan,
//koristeci funkciju Validan ugnjezdene klase Datum
if (od.Validan(int.Parse(datum.Substring(0, 2)), int.Parse(datum.Substring(3, 2)),
int.Parse(datum.Substring(6, 4))) && od.Validan(int.Parse(datum1.Substring(0, 2)),
int.Parse(datum1.Substring(3, 2)), int.Parse(datum1.Substring(6, 4))))
{
//Ako jeste, u richTextBox dodajemo ono što vrate funkcije VratiString
//i NumeroloskiBroj, klase Osoba
richTextBox1.AppendText(o.VratiString()+"\n"+"Numeroloski broj: "
+o.NumeroloskiBroj()+"\n");
//I posle toga u isti richTextBox dodamo i vrednost funkcije Metabolizam,
//klase Osoba
richTextBox1.AppendText("Metablizam: "+ o.Metabolizam(datum) + "\n");
//Proveravamo da li je godina prestupna, koristeci funkciju Prestupna,
//ugnjezdene klase Datum
if (od.Prestupna(int.Parse(datum.Substring(6, 4))) == 1)
//Ako jeste, u richTextBox dodajemo ime osobe i da je rođena
//u prestupnoj godini
richTextBox1.AppendText(ime + " je rodjen/a u prestupnoj godini!");
else
//Ako nije, vracamo recenicu u kojoj ce pisati da osoba sa imenom ime nije
//rodjena u prestupnoj godini
richTextBox1.AppendText("Godina u kojoj je rodjen/a "+ime+
" nije bila prestupna godina!");
}
else
//Ako datum nije validan, vracamo sledecu poruku
MessageBox.Show("Niste uneli validan datum!");
}
else
MessageBox.Show("Niste uneli datum u odgovarajucem formatu!");
}
//Postavljamo textBox na prazno, i omogućavamo unos druge osobe
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
}
}
public class Osoba
{
//Promenljive ime i datum, obe tipa string
string ime;
string datum;
//Podrazumevani konstruktor klase Osoba
public Osoba(string ime, string datum)
{
this.ime = ime;
this.datum = datum;
}
//Funkcija koja za dati datum vraca koji je dan u mesecu
int VratiDan(string datumDan)
{
//Koristeci funkciju Substring izdvajamo prva dva karatera, i konvertujemo u tip int
int dan = int.Parse(datumDan.Substring(0, 2));
//Vracamo dobijenu vrednost
return dan;
}
//Funkcija koja za dati datum vraca koji je mesec u godini
int VratiMesec(string datumDan)
{
//Koristeci funkciju Substring izdvajamo dva, pocevsi od treceg karaktera,
//i konvertujemo u tip int
int mesec = int.Parse(datumDan.Substring(3, 2));
//Vracamo dobijenu vrednost
return mesec;
}
//Funkcija koja za dati datum vraca koja je godina
int VratiGod(string datumDan)
{
//Koristeci funkciju Substring izdvajamo cetiri pocevsi od 6 karaktera,
//i konvertujemo u tip int
int god = int.Parse(datumDan.Substring(6, 4));
//Vracamo dobijenu vrednost
return god;
}
//Funkcija koja racuna zbir cifara datog broja
public int Zbircifara(int broj)
{
//Postavljamo rezultat suma na 0
int suma = 0;
//Radi ovo
do
{
//Na suma dodajemo ostatak dobijen deljenjem broja sa 10
suma += broj % 10;
//Promenljivoj broj dodeljujemo vrednost dobijenu celobrojnim deljenjem sa 10
broj /= 10;
}//Sve dok je broj razlicit od 0
while (broj != 0);
//Vracamo dobijeni rezultat
return suma;
}
//Funkcija vraca numeroloski broj osobe, tipa int
public int NumeroloskiBroj()
{
//Koristeci funkcije VratiDan,VratiMesec,VratiGod
//dobijamo brojeve na kojima primenjujemo funkciju ZbirCifara
int suma = Zbircifara(VratiDan(datum))
+ Zbircifara(VratiMesec(datum))
+ Zbircifara(VratiGod(datum));
//Sve dok je suma veca od 10, tj. nije jednocifren broj
while (suma > 10)
//Primenjujemo funkciju ZbirCifara na suma
suma = Zbircifara(suma);
//Vracamo vrednost suma koju smo izracunali
return suma;
}
//Funkcija koja racuna metabolizam osobe,
//tako sto sabere datum rodjenja i danasnji datum, vraca string
public string Metabolizam(string datum1){
//Koristeci funkciju VratiDan, izdvajamo iz datum - a dan
int danR = VratiDan(datum);
//Koristeci funkciju VratiDan, izdvajamo iz datum - a mesec
int mesecR = VratiMesec(datum);
//Koristeci funkciju VratiDan, izdvajamo iz datum1 - a dan
int dan = VratiDan(datum1);
//Koristeci funkciju VratiDan, izdvajamo iz datum1-a mesec
int mesec = VratiMesec(datum1);
string mesecRS = (mesecR < 10)? "0" + mesecR: "" + mesecR;
string mesecS = (mesec < 10)? "0" + mesec: "" + mesec;
//Povezujemo danR, mesecRS, i godinu, i dodeljujemo dobijeni string datumRS
string datumRS = danR + mesecRS + VratiGod(datum);
//Povezujemo dan, mesecS, i godinu, i dodeljujemo dobijeni string dS
string dS = dan + mesecS + VratiGod(datum1);
//Konvertujemo u int prethodna dva stringa i saberemo ih
int r = int.Parse(datumRS) + int.Parse(dS);
//Dobijenu vrednost dodeljujemo promenljivoj rez, tipa string
string rez = ""+r;
//Vracamo dobijeni rezultat rez
return rez;
}
//Funkcija, tipa string, koja vraća sledecu recenicu
public string VratiString()
{
return ime + ", rodjen-a " + datum;
}
public class Datum
{
//Podrazumevani konstruktor
public Datum()
{
}
//Funkcija vraca 1 ako je godina prestupna, a 0 inace */
public int Prestupna(int godina)
{
//Ako je ostatak pri deljenju godina sa 400, ili 4 jednak 0 i
//ostatak pri deljenju godina sa 100 razlicit od 0
if (godina % 400 == 0 || godina % 4 == 0 && godina % 100 != 0)
//Vraca 1
return 1;
//Inace, vraca 0
return 0;
}
//Funkcija koja vraca broj dana u datom mesecu
public int DaniUmesecu(int mesec, int godina)
{
switch (mesec)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return 28;
default:
return 0;
}
}
//Funkcija koja vraca true ukoliko je datum validan, ili false ukoliko datum nije validan
public Boolean Validan(int d, int m, int g)
{
return g > 1900 && (m >= 1 && m <= 12) &&
(d >= 1 && d <= DaniUmesecu(m, g));
}
}
}
Када покренемо апликацију из радног окружења помоћу тастера F5 отвара нам се форма. Унесемо име, данашњи датум и датум
рођења.
Слика 9.92. Извршили смо унос у тражена поља
Двоструким кликом на дугме Osoba, уколико нисмо попунили сва поља ( име, данашњи датум и датум рођења ), или нисмо унели датум у одговарајућем
формату ( хх.хх.хххх. ) отвара се прозор са поруком.
Слика 9.93. Порука која се приказује када датум није унет у одговарајућем формату
Двоструким кликом на дугме Osoba, уколико смо попунили сва поља ( име, данашњи датум и датум рођења ), и унели датум у одговарајућем
формату ( хх.хх.хххх. ) у richTextBox1 се исписује резултат нашег задатка.
Слика 9.94. Резултат рада програма када је датум унет у одговарајућем формату
Пример 14. Написати програм који ће за унето име особе, адресу становања и установу у којој особа ради притиском на контролно дугме, у зависности који од три checkBox - а је означен, исписивати у RichTextBox - у име особе, адресу становања и установу у којој ради. Такође, исписаће и занимање особе (ђак, студент или запослен) и коју маркицу за превоз особа поседује у складу са тим. Задатак урадити преко класа, креирањем класе Osoba, која ће имати две класне променљиве, ime и adresa, обе типа стринг.
Решење:
Направити класу Osoba, која ће имати класне променљиве ime и adresa, обе типа string.
Обезбедити да се полиморфно извршавају функције
а) string Markica();
који треба да испише боју маркице која одговара објектима класе у којој је метод имплементиран и то: "плава маркица" за ђаке, "зелена маркица" за
студенте и "црвена маркица" за запослене
б) string VratiString();
који треба да испише име, адресу особе, установу којој особа припада и занимање особе у зависности од тога да ли ђак, студент , или запослен
Направити форму Form1(Слика 9.95.).
label1 - у овој лабели ћемо написати Ime
textBox1 - у ово поље корисник уноси своје име
label2 - у овој лабели ћемо написати Adresa stanovanja
textBox2 - у ово поље корисник уноси адресу становања
label3 - у овој лабели ћемо написати Ustanova
textBox3 - у ово поље корисник уноси име установе у којој се налази
button1 - ово је наше контролно дугме и на њему ћемо написати Osoba
checkBox1 - овај чекБокс ћемо назвати Zaposlen
checkBox2 - овај чекБокс ћемо назвати Student
checkBox3 - овај чекБокс ћемо назвати Djak
richTextBox1 - у ово поље ће се након клика на дугме исписати резултат нашег задатка
Слика 9.95. Изглед форме у примеру 14
Најпре у textBox1, textBox2 и textBox3 унесите име, адресу и установу, уколико нисте попунили сва поља кликом на дугме
"Osoba" отвориће се прозор са одговарајућом поруком. Иначе, у зависности од тога који сте објекат изабрали запослен, студент, ђак,
кликом на дугме "Osoba" додаће се у richTextBox подаци особе, string репрезентацију сваког
од креираних објеката и боју маркице карактеристичну за објекат тог типа.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Funkcija koja se poziva klikom na dugme Osoba
private void button1_Click(object sender, EventArgs e)
{
//String koji je unesen dodeljujemo promenljivoj ime tipa string
string ime = textBox1.Text;
//String koji je unesen dodeljujemo promenljivoj adresa tipa string
string adresa = textBox2.Text;
//String koji je unesen dodeljujemo promenljivoj ustanova tipa string
string ustanova = textBox2.Text;
//Ako nije uneto ime ili adresa
if (ime == "" || adresa == "" || ustanova == "")
//Vraca odgovarajucu poruku
MessageBox.Show("Unesite podatke o Vasoj osobi!");
else
{
//Inace
//ako je cekiran checkBox1
if (checkBox1.Checked)
{
//Kreiramo objekat klase Zaposlen
Zaposlen osoba1 = new Zaposlen(ime, adresa,ustanova);
//U richTextBox1 dodajemo sledecu recenicu
//pozivajuci funkcije VratiString i Markica klase Zaposlen
richTextBox1.AppendText(osoba1.VratiString() + "\nPoseduje " + osoba1.Markica()+
"\n\n");
}
else if (checkBox2.Checked)
{
//Ako je cekiran checkBox2
//kreiramo objekat klase Student
Student osoba2 = new Student(ime, adresa, ustanova);
//U richTextBox1 dodajemo sledecu recenicu
//pozivajuci funkcije VratiString i Markica klase Student
richTextBox1.AppendText(osoba2.VratiString() + "\nPoseduje " + osoba2.Markica()+
"\n\n");
}
else if (checkBox3.Checked)
{
//Ako je cekiran checkBox3
//kreiramo objekat klase Djak
Djak osoba3 = new Djak(ime, adresa,ustanova);
//U richTextBox1 dodajemo sledecu recenicu
//pozivajuci funkcije VratiString i Markica klase Student
richTextBox1.AppendText(osoba3.VratiString() + "\nPoseduje " + osoba3.Markica()+
"\n\n");
}
else
//Inace, vraca odgovarajucu poruku
MessageBox.Show("Najpre izaberite zanimanje osobe!");
}
//Omogucavamo ponovo cekiranje checkBox-ova
checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;
//Omogucavamo ponovo unos drugog imena i adrese
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
}
}
public class Osoba
{
//Klasne promenljive tipa string
private string ime;
private string adresa;
//Podrazumevani konstruktor
public Osoba(string ime,string adresa)
{
this.ime = ime;
this.adresa = adresa;
}
//Deklarisanje virtualne metode
public virtual string Markica()
{
return "";
}
//Funkcija koja vraca ime i adresu stanovanja date osobe
public virtual string VratiString()
{
return "Osoba " + ime + ", stanuje u " + adresa;
}
}
//Klasa Zaposlen koja je nasledjena od klase Osoba
public class Zaposlen: Osoba
{
string firma;
//Podrazumevani konstruktor klase Zaposlen,
//preko kljucne reci base pozivamo konstruktor klase Osoba
public Zaposlen(string ime, string adresa, string firma): base(ime, adresa)
{
this.firma = firma;
}
//Predefinisanje virtualnog metoda, funkcija koja vraca koju markicu poseduje zaposleni
public override string Markica()
{
//Vracamo boju markice koji koristi Zaposlen
return "crvenu markicu";
}
//Predefinisanje virtualnog metoda
public override string VratiString()
{
//Pozivamo funkciju VratiString, klase Osoba, i na to dodajemo zanimanje osobe
return base.VratiString() + ", radi u " + firma + "\nZanimanje: Zaposlen";
}
}
//Klasa Student koja je nasledjena od klase Osoba
public class Student: Osoba
{
string fakultet;
//Podrazumevani konstruktor klase Student,
//preko kljucne reči base pozivamo konstruktor klase Osoba
public Student(string ime, string adresa, string fakultet): base(ime, adresa)
{
this.fakultet = fakultet;
}
//Predefinisanje virtualnog metoda, funkcija koja vraca koju markicu poseduje student
public override string Markica()
{
//Vracamo boju markice koji koristi Student
return "plavu markicu";
}
//Predefinisanje virtualnog metoda
public override string VratiString()
{
//Pozivamo funkciju VratiString, klase Osoba, i na to dodajemo zanimanje osobe
return base.VratiString() + ", student je " + fakultet + "\nZanimanje: Student";
}
}
//Klasa Djak koja je nasledjena od klase Osoba
public class Djak: Osoba
{
string skola;
//Podrazumevani konstruktor klase Djak,
//preko kljucne reci base pozivamo konstruktor klase Osoba
public Djak(string ime, string adresa, string skola): base(ime, adresa)
{
this.skola = skola;
}
//Predefinisanje virtualnog metoda, funkcija koja vraca koju markicu poseduje djak
public override string Markica()
{
//Vracamo boju markice koju koristi Djak
return "zelenu markicu";
}
//Predefinisanje virtualnog metoda
public override string VratiString()
{
//Pozivamo funkciju VratiString, klase Osoba, i na to dodajemo zanimanje osobe
return base.VratiString() + ", ide u skolu " + skola + "\nZanimanje: Djak";
}
}
Када покренемо апликацију из радног окружења помоћу тастера F5 отвара нам се форма. Унесемо име, адресу и установу
у којој је особа активна, и означимо да ли је у питању запослен, студент или ђак.
Слика 9.96. Изглед форме приликом покретања програма у примеру 14
Двоструким кликом на дугме Osoba, уколико нисмо попунили сва поља ( име, адреса, установа ) или нисмо означили занимање особе ( запослен,
студент, ђак ) отвара се прозор са поруком.
Слика 9.97. Резултат рада програма ако нису сва поља попуњена
Двоструким кликом на дугме Osoba, уколико смо попунили сва поља ( име, адреса, установа ) и означили занимање особе у
richTextBox1 се исписује резултат нашег задатка.
Слика 9.98. Резултат рада програма када су уноси исправни
Пример 15. Написати програм који ће за унет број жиро рачуна и износ притиском на одговарајуће контролно дугме (направити два контролна дугмета - за уплату и исплату) у RichTextBox - у исписивати да ли је извршена уплата на рачун или исплата са рачуна за наведени износ, као и податке о рачуну након уплате, односно, исплате. Задатак урадити преко класа, креирањем класе Racun са класним променљивим stanje, реалног типа, и brojRacuna, типа стринг.
Решење:
Направити апстрактну класу Racun, која ће имати класне променљиве stanje, типа double и brojRacuna, типа string.
Класа садржи следеће функције:
а) abstract double ProvizijaNaUplatu(double iznos);
б) abstract double ProvizijaNaIsplatu(double iznos);
рачунају провизију за дати износ, провизије се разликују у зависности од тога да ли је у питању девизни или текући рачун
в) double VratiStanje();
враћа стање на рачуну
г) void UplatiNaRacun(double iznos);
врши уплату на рачун за дати износ, и умањује стање на рачуну за одговарајућу провизију
д) void IsplatiSaRacuna(double iznos);
врши исплату са рачуна за дати износ, и на стање рачуна додаје одговарајућу провизију
ђ) string VratiPodatkeORacunu();
враћа број рачуна и износ на рачуну
Класа DevizniRacun рачуна провизију на уплату и исплату, каде је у питању девизни рачун провизија је иста, и то 100+(износ*5/100). Стринг репрезентација враћа
податке о рачуну и који је тип рачуна.
Класа TekuciRacun рачуна провизију на уплату и исплату, када је у питању текући рачун провизија на уплату је 0 а за испату се рачуна на следећи
начин 100+(износ*3/100). Стринг репрезентација враћа податке о рачуну и који је тип рачуна.
Направити форму Form1(Слика 9.99.).
label1 - у овој лабели ћемо написати Broj racuna
textBox2 - у ово поље корисник уноси број рачуна
label2 - у овој лабели ћемо написати Iznos
textBox1 - у ово поље корисник уноси износ у динарима, који уплаћује или исплаћује са свог рачуна
label3 - у овој лабели ћемо написати Podaci o racunu
button1 - ово је наше контролно дугме и на њему ћемо написати Uplata
button2 - ово је наше контролно дугме и на њему ћемо написати Isplata
richTextBox1 - у ово поље ће се након клика на дугме исписати резултат нашег задатка
Слика 9.99. Изглед форме у примеру 15
Најпре у textBox1, и textBox2 унесите број рачуна и износ за који желите да повећате или умањите износ на вашем рачуну.
Кликом на дугме "Uplata" извршиће се уплата на рачун, кликом на дугме "Isplata" извршиће се исплата са рачуна,
у richTextBox ће се исписати подаци рачуна, string репрезентација.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/*Funkcija koja se poziva klikom na dugme Uplata*/
private void button1_Click(object sender, EventArgs e)
{
//Dodeljujemo iznos-u string iz textBox2
string iznos = textBox2.Text;
//Dodeljujemo brRacuna string iz textBox1
string brRacuna = textBox1.Text;
if (iznos == "" || brRacuna == "")
MessageBox.Show("Najpre unesite broj racuna i iznos!");
else
{
//Konvertujemo u int ono sto je uneto u textBox1 i dodeljujemo iznos - u
int iznos1 = int.Parse(iznos);
//Kreiramo objekat klase TekuciRacun
TekuciRacun racuni0 = new TekuciRacun(brRacuna, 0);
//Kreiramo objekat klase DevizniRacun
DevizniRacun racuni1 = new DevizniRacun(brRacuna, 0);
//Postavljamo richTextBox na prazno
richTextBox1.Text = "";
//Dodajemo u richTextBox koliki iznos uplacujemo na TekuciRacun
richTextBox1.AppendText("Uplata na racun " + brRacuna + " u iznosu od " + iznos1 +
" din.\n");
//Pozivamo funkciju UplatiNaRacun
racuni0.UplatiNaRacun(iznos1);
//Pa u richTextBox dodamo i podatke o računu nakon uplate
richTextBox1.AppendText("Podaci o racunu posle uplate: \n"+
racuni0.VratiPodatkeORacunu());
//Dodajemo u richTextBox koliki iznos uplacujemo na DevizniRacun
richTextBox1.AppendText("Uplata na racun "+brRacuna+" u iznosu od "+ iznos1+
" din.\n");
//Pozivamo funkciju UplatiNaRacun
racuni1.UplatiNaRacun(iznos1);
//Pa u richTextBox dodamo i podatke o racunu nakon uplate
richTextBox1.AppendText("Podaci o racunu posle uplate: \n"+
racuni1.VratiPodatkeORacunu());
}
}
/*Funkcija koja se poziva klikom na dugme Isplata*/
private void button2_Click(object sender, EventArgs e)
{
//Dodeljujemo iznos-u string iz textBox2
string iznos = textBox2.Text;
//Dodeljujemo brRacuna string iz textBox1
string brRacuna = textBox1.Text;
if (iznos == "" || brRacuna == "")
MessageBox.Show("Najpre unesite broj racuna i iznos!");
else
{
//Konvertujemo u double ono što je uneto u textBox1 i dodeljujemo iznos-u
double iznos1 = double.Parse(iznos1);
//Kreiramo objekat klase TekuciRacun
TekuciRacun racuni0 = new TekuciRacun(brRacuna, 0);
//Kreiramo objekat klase DevizniRacun
DevizniRacun racuni1 = new DevizniRacun(brRacuna, 0);
//Postavljamo richTextBox na prazno
richTextBox1.Text = "";
//Dodajemo u richTextBox koliki iznos isplacujemo sa Tekuciracun
richTextBox1.AppendText("Isplata sa racuna "+brRacuna+" u iznosu od " + iznos +
" din.\n");
//Pozivamo funkciju IsplatiSaRacuna
racuni0.IsplatiSaRacuna(iznos);
//Pa u richTextBox dodamo i podatke o racunu nakon isplate
richTextBox1.AppendText("Podaci o racunu posle isplate: \n" +
racuni0.VratiPodatkeORacunu());
//Dodajemo u richTextBox koliki iznos isplacujemo sa Devizniracun
richTextBox1.AppendText("Isplata sa racuna " + brRacuna + " u iznosu od " + iznos +
" din.\n");
//Pozivamo funkciju IsplatiSaRacuna
racuni1.IsplatiSaRacuna(iznos);
//Pa u richTextBox dodamo i podatke o racunu nakon isplate
richTextBox1.AppendText("Podaci o racunu posle isplate: \n" +
racuni1.VratiPodatkeORacunu());
}
}
}
/*Kreiranje abstraktne klase Racun*/
public abstract class Racun
{
//Promenljiva stanje, tipa double
private double stanje;
//Promenljiva brojRacuna, tipa string
private string brojRacuna;
//Abstraktne funkcije klase Racun
protected abstract double ProvizijaNaUplatu(double iznos);
protected abstract double ProvizijaNaIsplatu(double iznos);
/*Podrazumevani konstruktor klase Racun, koji ima jedan parametar*/
public Racun(string brojRacuna) : this(brojRacuna, 0) { }
/*Podrazumevani konstruktor klase Racun, koji ima dva parametra*/
public Racun(string brojRacuna, double pocetnoStanje)
{
this.stanje = pocetnoStanje;
this.brojRacuna = brojRacuna;
}
/*Funkcija koja vraca stanje na racunu*/
public double VratiStanje()
{
return stanje;
}
/*Funkcija koja vrsi uplatu na racun za dati iznos*/
public void UplatiNaRacun(double iznos)
{
//Na stanje dodajemo iznos i oduzimamo proviziju na uplatu za dati iznos
//Koristeci abstraktnu funkciju
stanje += iznos - ProvizijaNaUplatu(iznos);
}
/*Funkcija koja vrsi isplatu sa racuna za dati iznos*/
public void IsplatiSaRacuna(double iznos)
{
//Sa stanja oduzimamo iznos i dodajemo proviziju na isplatu za dati iznos
//koristeci abstraktnu funkciju
stanje -= iznos + ProvizijaNaIsplatu(iznos);
}
/*String reprezentacja koja vraca broj racuna i stanje*/
public virtual string VratiPodatkeORacunu()
{
string podaci = "Racun broj: " + brojRacuna + "\nIznos na racunu: " + stanje;
return podaci;
}
}
/*Kreiranje nasledjene klase TekuciRacun*/
public class TekuciRacun: Racun
{
//Kreiranje konstruktora, pozivajuci i konstruktor bazne klase Racun, koji ima jedan parametar
public TekuciRacun(string brojRacuna) : base(brojRacuna)
{ }
//Kreiranje konstruktora, pozivajuci i konstruktor bazne klase Racun, koji ima dva parametara
public TekuciRacun(string brojRacuna, double pocetnoStanje) : base(brojRacuna, pocetnoStanje)
{ }
//Racunanje Provizije na uplatu za dati iznos
//Koristimo kljucnu rec override
protected override double ProvizijaNaUplatu(double iznos)
{
//Vracamo 0
return 0;
}
//Racunanje Provizije na isplatu za dati iznos
//Koristimo kljucnu rec override
protected override double ProvizijaNaIsplatu(double iznos)
{
//Proviziju racunamo na sledeci nacin
double obracunataProvizija = 100 + (iznos * 3 / 100);
//Vracamo obracunataProvizija
return obracunataProvizija;
}
//Funkcija koja vraća podatke o racunu
public override string VratiPodatkeORacunu()
{
//Pozivamo funkciju klase Racun i na njen rezulat dodajemo da je u pitanju tekuci racun
return base.VratiPodatkeORacunu() + "\nTip racuna: TEKUCI\n\n";
}
}
/*Kreiranje nasledjene klase DevizniRacun*/
public class DevizniRacun : Racun
{
//Kreiranje konstruktora, pozivajuci i konstruktor bazne klase Racun, koji ima jedan parametar
public DevizniRacun(string brojRacuna) : base(brojRacuna)
{ }
//Kreiranje konstruktora, pozivajuci i konstruktor bazne klase Racun, koji ima dva parametara
public DevizniRacun(string brojRacuna, double pocetnoStanje) : base(brojRacuna, pocetnoStanje)
{ }
//Racunanje Provizije na uplatu za dati iznos
//Koristimo kljucnu rec override
protected override double ProvizijaNaUplatu(double iznos)
{
//Proviziju racunamo na sledeci nacin
double obracunataProvizija = 100 + (iznos * 5 / 100);
//Vracamo obracunataProviziju
return obracunataProvizija;
}
//Racunanje Provizije na isplatu za dati iznos
//Koristimo kljucnu reč override
protected override double ProvizijaNaIsplatu(double iznos)
{
//Proviziju racunamo na sledeci način
double obracunataProvizija = 100 + (iznos * 5 / 100);
//Vracamo obracunataProviziju
return obracunataProvizija;
}
//Funkcija koja vraca podatke o racunu
public override string VratiPodatkeORacunu()
{
//Pozivamo funkciju klase Racun i na njen rezulat dodajemo da je u pitanju devizni racun
return base.VratiPodatkeORacunu() + "\nTipRacuna: DEVIZNI\n\n";
}
}
Када покренемо апликацију из радног окружења помоћу тастера F5 отвара нам се форма. Унесемо број рачуна и износ који уплаћујемо
или исплаћујемо.
Слика 9.100. Извршили смо унос у тражена поља
Двоструким кликом на дугме Uplata, уколико смо попунили оба поља ( број рачуна и износ ) у
richTextBox1 се исписује резултат нашег задатка ( уплата на текући и девизни рачун ).
Слика 9.101. Резултат рада програма ако притиснемо дугме Uplata
Двоструким кликом на дугме Isplata, уколико смо попунили оба поља ( број рачуна и износ ) у
richTextBox1 се исписује резултат нашег задатка ( исплата са текућог и девизног рачуна ).
Слика 9.102. Резултат рада програма ако притиснемо дугме Isplata