Professional Documents
Culture Documents
SADRŽAJ VEŽBI
I C# JEZIK
1. UVOD U C# (MICROSOFT VISUAL C# 2010 EXPRESS)
2. TIPOVI PODATAKA, PROMENLJIVE, OPERATORI
3. KONTROLA TOKA PROGRAMA (GRANANJE I CIKLUSI)
4. FUNKCIJE
5. NIZOVI I STRUKTURE
6. KLASE, METODE I OBJEKTI
7. NASLEĐIVANJE, POLIMORFIZAM
8. DODATNE TEHNIKE OOP
II WINDOWS PROGRAMIRANJE
9. OSNOVNO WINDOWS PROGRAMIRANJE (DUGMIĆI, LABELE, TEXTBOX, ...)
10. NAPREDNE WINDOWS FORME (MENIJI, TOOOLBAR, KREIRANJE
APLIKACIJA I KONTROLA)
1
Nastanak C#
Objekat je primerak (instanca) klase. Klasa predstavlja skup podataka i instrukcija koje se
izvode na nekim podacima. Klasa je skup pravila koji određuju kako će se formirati neki
objekat. Svaka klasa ima svoje članove i to su podaci i kod. Podaci koji se definišu u klasi
obično se nazivaju polja (fields). Ovde se koriste termini kao što su funkcija (metoda) koja
predstavlja kod programa koji se izvršava nad podacima. Metodi su ustvari podprogrami i oni
mogu imati svojstva, događaje i konstruktore. Metodi se izvršavaju nad poljima koja su
definisana u klasi.
Ključne reči u C#
2
Kreiranje konzolnih aplikacija u Microsoft Visual C# 2010 Express
Pri kreiranju konzolne aplikacije izabere se opcija sa padajućeg menija File→New Project.
Zatim se u okviru panela Templates izabere Console Application. Potom se dobija sledeće:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
}
}
3
}
Da bi aplikacija bilo šta radila potrebno je dodati bar jednu liniju koda ispod glavne funkcije
static void Main(string[] args).
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Prva aplikacija kod C# proogramiranja!");
Console.ReadKey();/*traži se pritiskanje nekog tastera za prekid rada
programa*/
}
}
}
namespace predstavlja .NET način da se kod i njegov sadržaj jedinstveno identifikuju. Takođe
se koristi za kategorizaciju elemenata u .NET Framework. namespace je deklarisan za kod
aplikacije koja se u ovom slučaju naziva ConsoleApplication1.
using System;-predstavlja korišćenje System namespace (odnosi se na biblioteku klasa .NET
Framework, čiju biblioteku koristi C#). Za veće projekte može se kreirati sopstveni
namespaces.
class Primer{ -definicija klase Primer. Početak klase počinje sa otvorenom vitičastom
zagradom {, a završava se sa }.
static void Main()-počinje glavni metod, gde se izvršava program. Ovaj metod počinje sa
static, što znači da je statički i void - ne vraća vrednost.
Console.WriteLine("Jednostavan C# program."); -WriteLine() je funkcija koji kao rezultat
vraća string koji mu je prosleđen. Console- podržava konzolni I/O. U kombinaciji se
kompajleru govori da je WriteLine() članica Console klase.
Izrazi u C# se zvršavaju sa tačka-zarezom (;).
Console.ReadKey(); - funkcija za unos nekog znaka sa tastature (za prekid rada programa)
Ovaj program se unosi izborom opcije New Project, pa se bira u okviru Online Template
opcija Empty Project. Na padajućem meniju se izabere opcija Build →Build Solution (F6), a
potom sa padajućeg menija Debug → Start Without Debugging. (Ukoliko je u padajućem
meniju ne postoje ove opcije treba izabrati opciju Tools → Settings → Expert Settings).
Ukoliko se fajl ne snimi pod nekim imenom, dodeljuje mu se automatski ime CodeFile1.cs.
Naravno, postoji mogućnost preimenovanja.
Pri izvršavanju aplikacije pojaviće se u komand propmptu tekstualna poruka:
Jednostavan C# program.
4
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int prvi, drugi, rezultat;
string string1, string2;
Console.WriteLine("Uneti prvi broj ");
string1 = Console.ReadLine();
prvi = int.Parse(string1);
Console.WriteLine("Uneti drugi broj ");
string2 = Console.ReadLine();
drugi = int.Parse(string2);
rezultat = prvi + drugi;
Console.WriteLine("Rezultat sabiranja je: ");
Console.WriteLine(prvi + " + " + drugi + " = " + rezultat);
Console.ReadKey();
}
}
}
Komentari
Komentari se koriste da bi aplikaciju razumeli oni koji ne znaju šta taj program radi. Može se
odnositi na više linija koda ili na jednu liniju. Zbog toga se koriste komentari za blokove ili
linijski komentari. Komentari za blok instrukcija se pišu tako što počinju sa "/*" nakon čega
sledi tekst komentara, a završavaju se sa"*/". Ovakvi komentari se obično pišu u više redova.
Ukoliko se komenar piše u jednom redu, on počinje sa "//" a završava se sa enterom. Osnovna
njihova namena je da objasne deo koda koji se nalazi u toj liniji, pa se zato nazivaju linijski
komentari. Komentari u C# su obično obojeni zeleno.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double prviBroj, drugiBroj;//realne promenljive
string korisnickoIme;//string koji se unosi
Console.WriteLine("Unesi svoje ime:");
korisnickoIme = Console.ReadLine();/* sa metodom ReadLine() se unosi prvi
string koji ne stoji kao argument*/
Console.WriteLine("Zdravo {0}!", korisnickoIme);/* {0} oznacava mesto gde
ce se stampati sadržaj promenljive korisnickoIme*/
Console.WriteLine("Unesi prvi broj:");
prviBroj = Convert.ToDouble(Console.ReadLine());/*konvertuje string u
double tip */
Console.WriteLine("Unesi drugi broj");
drugiBroj = Convert.ToDouble(Console.ReadLine());
5
Console.WriteLine("Zbir broja {0} i {1} je {2}.", prviBroj,
drugiBroj, prviBroj + drugiBroj);/*sa {0}, {1} i {2} su predstavljena
mesta za tri promenljive*/
Console.WriteLine("Razlika {0} i {1} je {2}.",
drugiBroj, prviBroj, prviBroj - drugiBroj);
Console.WriteLine("Proizvod {0} i {1} je {2}.", prviBroj,
drugiBroj, prviBroj * drugiBroj);
Console.WriteLine("Kolicnik {0} i {1} je {2}.",
prviBroj, drugiBroj, prviBroj / drugiBroj);
Console.WriteLine("Ostatak deljenja {0} i {1} je {2}.",
prviBroj, drugiBroj, prviBroj % drugiBroj);
Console.ReadKey();
}
}
}
Konvertovanje promenljivih
6
sbyte short, int, long, float, double ili decimal
byte short, ushort, int, uint, long, ulong, float, double ili decimal
short int, long, float, double ili decimal
ushort int, uint, long, ulong, float, double ili decimal
int long, float, double ili decimal
uint long, ulong, float, double ili decimal
long float, double ili decimal
char ushort, int, uint, long, ulong, float, double ili decimal
float double
ulong float, double ili decimal
7
Tabela 4. Funkcije u C# za eksplicitnu konverziju
Funkcija Objašnjenje
Convert.ToBoolean(argument) argument konvertuje u bool
Convert.ToByte(argument) argument konvertuje u byte
Convert.ToChar(argument) argument konvertuje u char
Convert.ToDecimal(argument) argument konvertuje u decimal
Convert.ToDouble(argument) argument konvertuje u double
Convert.ToInt16(argument) argument konvertuje u short
Convert.ToInt32(argument) argument konvertuje u int
Convert.ToInt64(argument) argument konvertuje u long
Convert.ToSByte(argument) argument konvertuje u sbyte
Convert.ToSingle(argument) argument konvertuje u float
Convert.ToString(argument) argument konvertuje u string
Convert.ToUInt16(argument) argument konvertuje u ushort
Convert.ToUInt32(argument) argument konvertuje u uint
Convert.ToUInt64(argument) argument konvertuje u ulong
goto
goto izraz se koristi kada je neophodno da se preskoči neki deo koda ili da se vrati na
prethodni. Programska linija se na neki način obeleži (slovima ili brojevima) i navede goto
slovo/broj. On ima svoje prednosti i nedostatke. Prednost je u jednostavnom prelasku sa
jednog dela koda na drugi, a nedostatak što se može dobiti kod koji je teško razumljiv.
8
}
}
}
switch izraz
switch (operand)
{
case operand1:
kod za izvrsavanje;
break;
case operand2:
kod za izvrsavanje;
break;
. . .
case operandN:
kod za izvrsavanje;
break;
default:
kod za izvrsavanje ako ni jedan uslov nije ispunjen;
break;
}
Ciklusi
for ciklus
namespace ConsoleApplication1
{
class MainClass
{
public static void Main()
{
int n, sum = 0;
int fact = 1;
Console.WriteLine("Uneti broj do koga se vrsi sabiranje (odredjuje
faktorijel) ");
n = Convert.ToInt32(Console.ReadLine());
for (int i = 1; i <= n; i++)
{
sum += i; // i je pomocna primenljiva
fact *= i;
}
9
Console.WriteLine("Suma brojeva od 1 do {0} je {1} ",n, sum);
Console.WriteLine("Faktorijel je " + fact);
}
}
}
while ciklus
Ovaj ciklus se koristi u slučaju kada je nepoznat broj iteracija (ponavljanja) ciklusa. Opšti
oblik while ciklusa je:
while(uslov) izraz;
Primer 5. Napisati konzolnu aplikaciju za unos nekog celog broja i ispisivanje stepena od 1
do n zadatog broja.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class MainClass
{
public static void Main()
{
int i, e, n, broj;
int rezultat;
Console.WriteLine("Uneti broj ciji se stepen trazi ");
broj = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Uneti stepen koji se trazi ");
n = Convert.ToInt32(Console.ReadLine());
for (i = 0; i < n; i++)
{
rezultat = 1;
e = i;
while (e > 0)
{
rezultat *= broj;
e--;
}
do while ciklus
do-while ciklus se mora izvršiti bar jednom. Opšti oblik ovog ciklusa je:
do {
izrazi;
} while(uslov);
10
Primer 6. Napisati konzolnu aplikaciju na primeru proračuna broja godina do koje treba
određeni ulog banke da naraste.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double ulog, kamatnaStopa, krajnjiUlog;
Console.WriteLine("Koliki je vas ulog u banci?");
ulog = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Kolika je kamatna stopa (u %)?");
kamatnaStopa = 1 + Convert.ToDouble(Console.ReadLine()) / 100.0;
Console.WriteLine("Do koje vrednosti uloga zelite da dodjete?");
krajnjiUlog = Convert.ToDouble(Console.ReadLine());
int ukupnoGodina = 0;
do
{
ulog *= kamatnaStopa;
++ukupnoGodina;
}
while (ulog < krajnjiUlog);
Console.WriteLine("Za {0} god. ulog ce dostici {1}.",ukupnoGodina, ulog);
Console.ReadKey();
}
}
}
Primer 7. Napisati konzolnu aplikaciju za unos celog broja i ispisivanje tog broja u
inverznom poretku.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class MainClass
{
public static void Main()
{
int broj;
int sledecibroj;
Console.WriteLine("Uneti broj");
broj = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Uneti broj je: " + broj);
Console.Write("Broj u inverznom poretku je: ");
do
{
sledecibroj = broj % 10;
Console.Write(sledecibroj);
broj = broj / 10;
11
} while (broj > 0);
Console.WriteLine();
}
}
}
foreach ciklus
foreach ciklus se koristi za adresiranje svakog elemena u nizu koristeći sledeću sintaksu:
foreach (<osnovni tip> <ime> in <niz>)
{
može se koristi <ime> za svaki element
}
Ovaj ciklus ide kroz svaku promenljivu i postavlja je u promenljivu <ime>. Ne mora se voditi
računa koliko je elemenata u nizu npr.:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ciklusi
{
class Program
{
static void Main(string[] args)
{
string[] imenaGlumaca = { "Matthew McConaughey", "Brus Willis", "Al
Pacino"};
Console.WriteLine("Ovo su {0} moja omiljena glumca:",
imenaGlumaca.Length);
foreach (string imeGlumca in imenaGlumaca)
{
Console.WriteLine(imeGlumca);
}
Console.ReadKey();
}
}
}
Funkcije
Kada je reč o funkcijama prvo treba objasniti funkciju Main(). Ova funkcija kao rezultat vraća
void ili int, a može se uključiti string[] args parametar, pa su moguće sledeće verzije ove
funkcije:
static void Main()
static void Main(string[] args)
static int Main()
static int Main(string[] args)
Opcionalni parametar args u Main() funkciji obezbeđuje način za dobijanje informacija izvan
aplikacije.
12
Funkcije u C# predstavljaju blokove koda koji se mogu izvršavati u bilo kom delu aplikacije.
Kod OOP funkcije se nazivaju metode, ali taj termin će se kasnije koristiti kod klasa. Tako na
primer, ako se u traži ispis nekog teksta, može se pozvati funkcija u bilo kom delu aplikacije,
a dovoljno je samo jednom da se napiše. Funkcije utiču na čitljivost koda.
Funkcije se mogu smestiti ili pre ili posle glavne funkcije Main(), a mogu biti sa ili bez
argumenata. Argumenti funkcije se navode u zaglavlju funkcije, iza čega se dalje piše telo
funkcije (ono što funkcija treba da uradi). Funkcija se poziva u glavnom programu
navođenjem imena funkcije i eventualno prosleđivanjem parametara.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FunkcijaZaIspisTeksta
{
class Program
{
//Definicija funkcije Pisi()
static void Pisi()
{
Console.WriteLine("Ovo je tekst");
}
static void Main(string[] args)
{
Pisi();//poziv funkcije Pisi()
Console.ReadKey();
}
}
}
namespace Funkcija
{
class Program
{
static void Main(string[] args)
{
Osoba("Ana");
Osoba("Marija", "Marko", "Nikola");
Console.ReadKey();
}
13
foreach (string ime in imena)
Console.WriteLine("Hello, " + ime);
}
}
}
14