Као што је познато, формални параметри су аргументи које пишемо у заградама иза имена функције. Међутим, формални параметри немају конкретну вредност, они нам само указују на то ког типа треба да буду вредности које ће се налазити унутар заграда приликом позива функције, као и колико ће аргумената функција имати. Позивање методе пишемо у следећој форми:
ime_metoda (lista_argumenata);
Позив метода се врши навођењем имена метода и навођењем евентуалне листе параметара унутар заграда иза имена метода. У заградама се наводе само аргументи, без њиховог типа и међусобно се одвајају зарезима. Уколико повратна вредност постоји, можемо је доделити одређеној променљивој.
|
*У случају да се анимација не приказује, притиснути дугме Прикажи слику
Аргументи који се наводе у заградама уместо формалних параметара приликом позива метода јесу стварни параметри. Они представљају конкретне вредности које ће функција коју позивамо обрадити на одређен начин. Стварни параметри морају одговарати формалним параметрима по броју, редоследу и типу параметара.
Аргументи се методу могу пренети:
Пренос преко вредности: Вредносни параметар се наводи тако што се наведе име типа иза кога следи име променљиве. Када вршимо пренос по вредности метода прави копију референце, тада две референце (оригинал и копија) референцирају на исти објекат. Оригинална референца се не може променити. Унутар методе може се променити вредност параметара, а да то не утиче на променљиву изван методе.
Пренос преко референце: Референтни параметар представља референцу на меморијску локацију. Када вршимо пренос преко референце метода не прави копију референце, већ се ради са оригиналном референцом. Оригинална референца се не може променити. Референтни параметри се декларишу навођењем кључне речи ref испред типа. Кључна реч ref односи се само на параметар испред кога је наведена, а не на целу листу параметара. Приликом позива методе такође се мора навести кључна реч ref.
Код преноса преко вредности подаци се могу пренети методу, али се не могу пренети из ње, а код преноса преко референце подаци се могу пренети у методу и из методе. |
Уколико метод нема параметре, обавезне су празне заграде приликом позива метода, као и приликом њеног дефинисања.
Пример 1.
Написати програм који рачуна број комбинација од n елемената k-те класе користећи функцију факторијел.
Решење:
Број комбинација од n елемената k-те класе једнак је:
Правимо форму облика: | |||
|
|||
Слика 9.7.Изглед форме пре преименовања у примеру 1 |
Двокликом на дугме Broj kombinacija отвара нам се прозор у коме пишемо код за наш програм. Унутар класе Form1 пишемо код за функцију факторијел, а унутар button1_Click пишемо код програма у коме ћемо више пута позивати функцију факторијел. | |||
Слика 9.8. Изглед форме након преименовања у примеру 1 |
Приликом рачунања броја комбинација, броја n над k, морамо водити рачуна да су бројеви n и k већи од 0, пошто факторијел није дефинисан за негативне бројеве. Такође, мора важити и да је n веће од k, пошто нам је потребан и факторијел броја n - k. Поред овога, морамо водити рачуна и о томе да у оба textBox - а буде уписан некакав број. Све ово морамо укључити у услове задатка.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Funkcija faktorijel koju ćemo koristiti u programu, nalazi se unutar klase Form1
int faktorijel(int n)
{
//Početna vrednost za faktorijel je 1
int fakt = 1;
//Prolazimo kroz for petlju, moramo proći sve brojeve od 1 do n
for (int i = 1; i <= n; i++)
//Množimo prethodni broj sa sledećim
fakt = fakt * i;
//Vraćamo fakt, vrednost faktorijela broja n
return fakt;
}
//Sada akciju koju program treba da obavi vezujemo za pritisak na dugme
private void button1_Click(object sender, EventArgs e)
{
//Deklaracija promenljivih
int n, k;
int komb;
//Ukoliko textBox-ovi nisu prazni onda ćemo da učitamo vrednosti iz njih
if (textBox1.Text != "" && textBox2.Text != "")
{
//Učitavamo vrednost iz textBox1 i textBox2
//Prebacujemo stringovnu reprezentaciju broja u int
n = int.Parse(textBox1.Text);
k = int.Parse(textBox2.Text);
//Ukoliko je neka od učitanih vrednosti 0
//Ili je n manje od k ne možemo izračunati faktorijel
if (n < 0 || k < 0 || n < k)
{
//Ispisujemo korisniku poruku kakve brojeve sme da unese
MessageBox.Show("Unesite prirodan broj za n i k i vodite racuna da je n > k!");
//Praznimo textBox1 i textBox2
textBox1.Text = "";
textBox2.Text = "";
//Praznimo labelu
label3.Text = "";
}
//Ukoliko su učitane vrednosti ispravne i može se izračunati njihov faktorijel
else
{
//Računamo broj kombinacija po formuli.
//Pozivamo funkciju faktorijel, u zagradama su stvarni parametri
komb = faktorijel(n) / (faktorijel(k) * faktorijel(n - k));
//Ispisujemo rezultat u labeli
label3.Text = "Broj n kombinacija k-te klase je " + komb;
}
}
//Ukoliko su textBox1 ili textBox2 prazni
else
//U labeli ispisujemo poruku
label3.Text = "Unesite brojeve!";
}
}
Покренимо сада програм да видимо резултате. Уколико изоставимо попуњавање једног или два поља, као резултат добијамо поруку на слици 9.6, а уколико унесемо неодговарајуће вредности за бројеве n и k, резултат ће бити порука на слици 9.7.Слика 9.9. Резултат рада програма када нису попуњена сва поља | Слика 9.10. Резултат рада програма када је неисправан унос |
Пример 2.
Написати програм који рачуна збир n - тих степена првих m природних бројева користећи функцију која рачуна степен.
Решење:
За израчунавање овог збира потребно нам је да знамо n - ти степен било ког природног броја. За то ће нам бити потребна функција која рачуна степен. Овде ћемо посматрати само оне експоненте n који су цели бројеви. Дакле, број n може бити позитиван и негативан. Да бисмо израчунали вредност израза
Правимо форму облика: | |||
|
|||
Слика 9.12. Изглед форме пре преименовања у примеру 2 |
Двокликом на дугме Izracunaj отвара нам се прозор у коме пишемо код за наш програм. Унутар класе Form1 пишемо код за функцију степен, а унутар button1_Click пишемо код програма у коме ћемо позивати функцију степен. Како експонент може бити негативан, решења ће бити реални бројеви. | |||
Слика 9.13. Изглед форме након преименовања у примеру 2 |
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Pišemo funkciju. Prvi argument je osnova, a drugi je eksponent
double stepen(int m, int n)
{
//Početna vrednost za rezultat je 1
double rezultat = 1;
//Prvi slučaj je kada je eksponent negativan
if (n < 0)
{
//Menjamo vrednost eksponenta u pozitivnu
n = -n;
//Prolazimo kroz for petlju n puta
for (int i = 1; i <= n; i++)
//Postojeći rezultat množimo sa m, pošto nam treba stepen broja m
rezultat = rezultat * m;
//Vraćamo recipročnu vrednost rezutata pošto je eksponent negativan
return 1/rezultat;
}
//Ukoliko eksponent nije negativan
else
{
//Prolazimo kroz for petlju n puta, jer nam treba n - ti stepen
for (int i = 1; i <= n; i++)
//Postojeći rezultat množimo sa m, pošto nam treba stepen broja m
rezultat = rezultat * m;
//Vraćamo rezultat jer je eksponent pozitivan
return rezultat;
}
}
//Kod programa koji se izvršava pritiskom na dugme Izracunaj
private void button1_Click(object sender, EventArgs e)
{
//Ako textBox1 i textBox2 nisu prazni, učitavamo vrednosti
if (textBox1.Text != "" && textBox2.Text != "")
{
//Inicijalizacija promanljivih
int n, m;
//Početna vrednost za zbir je 0
double zbir = 0;
//Učitavamo vrednost za n iz textBox1 kao ceo broj
n = int.Parse(textBox1.Text);
//Učitavamo vrednost m iz textBox2 kao ceo broj
m = int.Parse(textBox2.Text);
//Ako je m veće od 0 računamo stepen
if (m > 0)
{
//Prolazimo kroz for petlju da bi svi prirodni brojevi od 1 do m ušli u zbir
for (int i = 1; i <= m; i++)
//Postojećoj vrednosti zbira dodajemo n - ti stepen broja
zbir = zbir + stepen(i, n);
//Ispisujemo rezultat u labeli
label3.Text = "Zbir " + n + ". stepena prvih " + m + " prirodnih brojeva je ";
label3.Text = label3.Text + zbir;
}
//Ako je m manje od 0 ispisujemo poruku
else
label3.Text = "Unesite prirodan broj za m!";
}
//Ako su textBox1 ili textBox2 prazni
else
//Ispisujemo poruku u labeli
label3.Text = "Unesite vrednosti za n i m.";
}
}
Слика 9.14. Резултат рада програма када нису попуњена сва поља | Слика 9.15. Резултат рада програма када је неисправан унос |
Слика 9.16. Резултат рада програма када је експонент позитиван | Слика 9.17. Резултат рада програма када је експонент негативан |