C# 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) III PRISTUP PODACIMA 11. RAD SA FAJLOVIMA 12. LINQ

1

god. Pošto je naslednik C i C++ jezika. Npr. kod napisan u C# se može kombinovati sa kodom iz Visual Basica.orijentisano programiranje (Klase. objekti i metode) Objekat je primerak (instanca) klase. Metodi se izvršavaju nad poljima koja su definisana u klasi. čak i ranije verzije Cobol. Prva verzija (C# 1.. Ova biblioteka se sastoji od različitih modula. Tako npr. Web aplikacije. Metodi su ustvari podprogrami i oni mogu imati svojstva. dobio je ime sharp po inspiraciji muzičke notacije i znači da se napisana nota izvodi za pola koraka više.0 koja je završena 12. C# je naprednija verzija C++ (C++++). Ključne reči u C# abstract break char continue do event finally foreach in internal namespace operator params readonly as byte checked decimal double explicit fixed goto in (generic modifier) is new out private ref base case class default else extern float if int lock null out (generic modifier) protected return bool catch const delegate enum false for implicit interface long object override public sbyte 2 . neki moduli sadrže blokove za kreiranje windows aplikacija. pa su se ubrzo pojavljivale nove verzije ovog programskog jezika. Neki moduli su podeljeni u neke specifičnije pod module. Takođe je moguće da se kombinuju pojedini delovi koda iz različitih programskih jezika. Objektno . Poslednja verzija C# je 4. NET Framework sadrži veliku biblioteku koda koji može da koristi klijentski jezik (kao što je C#) koristeći tehnike objektno-orijentisanog programiranja.NET Framework? NET Framework je revulucionarna platofrma koju je kreirao Microsoft za razvoj aplikacija. Web servisi. događaje i konstruktore. drugi deo za mrežno programiranje. pri čemu je moguće koristiti pojedine delove u zavisnosti od potrebe. Ovde se koriste termini kao što su funkcija (metoda) koja predstavlja kod programa koji se izvršava nad podacima. Klasa predstavlja skup podataka i instrukcija koje se izvode na nekim podacima. Aprila 2010. Svaka klasa ima svoje članove i to su podaci i kod. Šta je . Razvio ga je Microsof tim koji je vodio Andres Hejlsberg. a neki drui za Web razvoj.godine. Klasa je skup pravila koji određuju kako će se formirati neki objekat. NET Framework je dizajniran tako da može koristiti bilo koji programski jezik kao što su C++. Fajlovi pisani u ovom jeziku imaju ekstenziju cs.). Jscript.0) se pojavila 2001. To je takva platforma na kojoj mogu raditi različite vrste aplikacija (Windows aplikacije.Nastanak C# C# je jednostavan objektno-orijentisan programski jezik opšte namene. Podaci koji se definišu u klasi obično se nazivaju polja (fields). Visual Basic..

Generic.Linq. Potom se dobija sledeće: using using using using System. System.sealed static this typeof unsafe void short string throw uint ushort volatile sizeof struct true ulong using while stackalloc switch try unchecked virtual Kreiranje konzolnih aplikacija u Microsoft Visual C# 2010 Express Na slici 1 je prikazana startna strana. System. Slika 1. System. Zatim se u okviru panela Templates izabere Console Application. Izgled startnog prozora Microsoft Visual C# 2010 Express Pri kreiranju konzolne aplikacije izabere se opcija sa padajućeg menija File→New Project.Text. namespace ConsoleApplication1 { class Program { static void Main(string[] args) { } } } 3 . na kojoj se mogu odabrati ponuđene mogućnosti za formiranje novog projekta izborom opcije New Project ili otvaranje već postojećeg projekta izborom opcije Open Project.Collections.

a završava se sa }.WriteLine("Jednostavan C# program.). System.podržava konzolni I/O. gde se izvršava program.Da bi aplikacija bilo šta radila potrebno je dodati bar jednu liniju koda ispod glavne funkcije static void Main(string[] args). System. -WriteLine() je funkcija koji kao rezultat vraća string koji mu je prosleđen.ne vraća vrednost.ReadKey(). Takođe se koristi za kategorizaciju elemenata u . Pri izvršavanju aplikacije pojaviće se u komand propmptu tekstualna poruka: Jednostavan C# program. .Text.Generic. Ukoliko se fajl ne snimi pod nekim imenom. Primer 1.ReadKey(). Ispisati tekst na ekranu.Generic.NET Framework. Na padajućem meniju se izabere opcija Build →Build Solution (F6).-predstavlja korišćenje System namespace (odnosi se na biblioteku klasa . Početak klase počinje sa otvorenom vitičastom zagradom {. System.Text. Primer 2.funkcija za unos nekog znaka sa tastature (za prekid rada programa) namespace Ovaj program se unosi izborom opcije New Project. a potom sa padajućeg menija Debug → Start Without Debugging."). 4 . Napisati konzolnu aplikaciju za unos i sabiranje dva cela broja. pa se bira u okviru Online Template opcija Empty Project.NET način da se kod i njegov sadržaj jedinstveno identifikuju. namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console. using using using using System. Naravno. System. Console. što znači da je statički i void . dodeljuje mu se automatski ime CodeFile1. U kombinaciji se kompajleru govori da je WriteLine() članica Console klase. namespace je deklarisan za kod aplikacije koja se u ovom slučaju naziva ConsoleApplication1.Collections. (Ukoliko je u padajućem meniju ne postoje ove opcije treba izabrati opciju Tools → Settings → Expert Settings). postoji mogućnost preimenovanja.WriteLine("Prva aplikacija kod C# proogramiranja!"). class Primer{ -definicija klase Primer. Console.cs. Console.Linq. Izrazi u C# se zvršavaju sa tačka-zarezom (. System.NET Framework. Console.Linq. using using using using System. System. Za veće projekte može se kreirati sopstveni namespaces.Collections. Ovaj metod počinje sa static./*traži se pritiskanje nekog tastera za prekid rada programa*/ } } } predstavlja . using System. static void Main()-počinje glavni metod. čiju biblioteku koristi C#).

Primer 3. Zbog toga se koriste komentari za blokove ili linijski komentari.Parse(string2). prviBroj.WriteLine("Unesi prvi broj:").ReadLine()). {1} i {2} su predstavljena mesta za tri promenljive*/ Console./*sa {0}./*konvertuje string u double tip */ Console. drugiBroj. 5 . Komentari u C# su obično obojeni zeleno. korisnickoIme).ReadLine().WriteLine("Razlika {0} i {1} je {2}. string2 = Console. korisnickoIme = Console.Parse(string1). drugiBroj = Convert.WriteLine("Uneti prvi broj "). on počinje sa "//" a završava se sa enterom.".WriteLine("Zdravo {0}!".WriteLine("Unesi drugi broj"). string1 = Console.ReadKey().". prviBroj = Convert.//realne promenljive string korisnickoIme. a završavaju se sa"*/".namespace ConsoleApplication2 { class Program { static void Main(string[] args) { int prvi./* sa metodom ReadLine() se unosi prvi string koji ne stoji kao argument*/ Console. rezultat.Generic.WriteLine("Unesi svoje ime:").ToDouble(Console. drugi. prvi = int. Console.WriteLine("Uneti drugi broj "). System. Ovakvi komentari se obično pišu u više redova.WriteLine(prvi + " + " + drugi + " = " + rezultat).ReadLine(). string string1. Može se odnositi na više linija koda ili na jednu liniju. namespace ConsoleApplication1 { class Program { static void Main(string[] args) { double prviBroj. Ukoliko se komenar piše u jednom redu. Komentari za blok instrukcija se pišu tako što počinju sa "/*" nakon čega sledi tekst komentara.ToDouble(Console./* {0} oznacava mesto gde ce se stampati sadržaj promenljive korisnickoIme*/ Console.WriteLine("Zbir broja {0} i {1} je {2}. string2. drugiBroj. rezultat = prvi + drugi.Collections. System. } } } Komentari Komentari se koriste da bi aplikaciju razumeli oni koji ne znaju šta taj program radi. Console. Console. drugi = int.Text. using using using using System.Linq. Console. Console.//string koji se unosi Console. Osnovna njihova namena je da objasne deo koda koji se nalazi u toj liniji. System. Primena komentara u konzolnoj aplikciji.WriteLine("Rezultat sabiranja je: "). prviBroj + drugiBroj). pa se zato nazivaju linijski komentari. Console.ReadLine()).ReadLine().

prviBroj. Tipovi podataka u C# Tip Značenje bool Predstavlja true/false vrednosti byte 8-bitni pozitivna celobrojna vrednost char Znakovne vrednosti decimal Numerički tip vrednosti za finansijske obračune double Realne vrednosti dvostruke preciznosti float Realne vrednosti int Celobrojne vrednosti (32 bitne) long Celobrojne vrednosti većeg opsega (64 bitne) sbyte 8-bitna celobrojna označena (+ i -) vrednost short 16-bitna celobrojna vrednost uint Neoznačena celobrojna vrednost ulong Neoznačena celobrojna vrednost većeg opsega ushort Neoznačena celobrojna vrednost manjeg opsega Operatori mogu biti: unarni .". prviBroj. drugiBroj.WriteLine("Kolicnik {0} i {1} je {2}. Console. Console. ulong. double ili decimal short int. float. Tabela 2. prviBroj % drugiBroj).izvršavaju se na jednom operandu (promenljivoj) binarni . float. float. Console.drugiBroj.WriteLine("Proizvod {0} i {1} je {2}. prviBroj. prviBroj. prviBroj .drugiBroj). long.". drugiBroj.koriste se u kombinaciji sa dva operanda tenarni .koristi se u kombinaciji sa tri operanda (kondicionalni operator a:b?c) Konvertovanje promenljivih Tipovi konverzije promenljivih mogu biti: Implicitna konverzija-konverzija iz tipa I u tip II je moguća u svim slučajevima.ReadKey(). prviBroj / drugiBroj). int. Implicitna konverzija tipova u C# Tip Konverzija sbyte short. long. Eksplicitna konverzija-konverzija iz tipa I u tip II je moguća samo u određenim slučajevima ili su pravila za konverziju prilično komplikovana.WriteLine("Ostatak deljenja {0} i {1} je {2}. Tipovi podataka u C# su dati u tabeli 1. drugiBroj. int. ushort. Console. long. double ili decimal 6 . i pravila izvođenja konverzije su jednostavna. uint. Tabela 1.". double ili decimal byte short. prviBroj * drugiBroj). } } } Promenljive i tipovi podataka Promenljive se moraju na početku deklarisati pre upotreba.

ulong ili char sbyte. char. byte. uint. ulong. int. short. short. ushort. ulong ili char sbyte. uint. long. long ili char sbyte. double ili decimal ushort. int.ushort int uint long char float ulong int. byte ili short sbyte. byte. byte. float ili double 7 . ulong ili char sbyte. uint. ushort. byte. uint. int. ushort. int ili char sbyte. short. double ili decimal long. uint. int. float. double ili decimal float. float ili decimal sbyte. double ili decimal Tabela 3. ulong ili char sbyte ili char sbyte. long. uint. uint. short. int. char. ulong. byte. ulong. ushort. ulong. ushort. byte. byte. ushort. double ili decimal long. uint. ushort. short ili char sbyte. int. long. ulong. float. ushort. long. uint. ulong. Eksplicitna konverzija tipova u C# Tip Konverzija sbyte byte short ushort int uint long ulong char float double decimal byte. ushort. double ili decimal double float. byte. char ili decimal sbyte. short. float. byte. short. short. uint. long. float.

Tabela 4.ToUInt64(argument) argument konvertuje u ulong Kontrola toka programa goto goto izraz se koristi kada je neophodno da se preskoči neki deo koda ili da se vrati na prethodni. Uslovi (grananje) u programu Kao kod C programskog jezika. Programska linija se na neki način obeleži (slovima ili brojevima) i navede goto slovo/broj.ToByte(argument) argument konvertuje u byte Convert.ToUInt32(argument) argument konvertuje u uint Convert.ToUInt16(argument) argument konvertuje u ushort Convert.ToInt16(argument) argument konvertuje u short Convert. a nedostatak što se može dobiti kod koji je teško razumljiv. Funkcije u C# za eksplicitnu konverziju Funkcija Objašnjenje Convert.ToChar(argument) argument konvertuje u char Convert.ToSingle(argument) argument konvertuje u float Convert. može se koristiti jednostruko grananje if (uslov) { // Nesto se radi } ili višestruko if (uslov1) { // Radi nešto } else { if (uslov2) { // Radi nešto drugo } else { if (uslov3) { // Radi nešto drugo } else { // Radi nešto drugo 8 .ToBoolean(argument) argument konvertuje u bool Convert. On ima svoje prednosti i nedostatke.ToDecimal(argument) argument konvertuje u decimal Convert.ToDouble(argument) argument konvertuje u double Convert.ToInt64(argument) argument konvertuje u long Convert.ToInt32(argument) argument konvertuje u int Convert.ToSByte(argument) argument konvertuje u sbyte Convert.ToString(argument) argument konvertuje u string Convert. Prednost je u jednostavnom prelasku sa jednog dela koda na drugi.

. namespace ConsoleApplication1 { class MainClass { public static void Main() { int n. sum = 0. // i je pomocna primenljiva fact *= i.ReadLine()). Opšti oblik for ciklusa koji ima oblik izraza koji treba da se izvrše: for(inicijalizacija. int fact = 1.Linq. break. for (int i = 1.Generic. System. case operandN: kod za izvrsavanje.. System. uslov. break. break. default: kod za izvrsavanje ako ni jedan uslov nije ispunjen. } 9 . case operand2: kod za izvrsavanje. } Ciklusi for ciklus Opšti oblik for ciklusa je: for(inicijalizacija..} } } switch izraz switch (operand) { case operand1: kod za izvrsavanje. break. iteracija) izraz. Console. } Primer 4.ToInt32(Console. i++) { sum += i. Napisati konzolnu aplikaciju za unos broja i određivanje sume brojeva od 1 do unetog broja i faktorijela tog broja. iteracija) { niz izraza.Text. using using using using System. uslov. i <= n.Collections. System.WriteLine("Uneti broj do koga se vrsi sabiranje (odredjuje faktorijel) "). n = Convert.

int rezultat. System. while ciklus Ovaj ciklus se koristi u slučaju kada je nepoznat broj iteracija (ponavljanja) ciklusa. e--.ToInt32(Console. Console. do while ciklus do-while ciklus se mora izvršiti bar jednom.WriteLine(broj + " na " + i + " je " + rezultat).Linq.n. for (i = 0.Generic. System.Text. namespace ConsoleApplication1 { class MainClass { public static void Main() { int i.} } } Console. Opšti oblik ovog ciklusa je: do { izrazi. broj = Convert. 10 .Collections.WriteLine("Faktorijel je " + fact). Napisati konzolnu aplikaciju za unos nekog celog broja i ispisivanje stepena od 1 do n zadatog broja. i < n. while (e > 0) { rezultat *= broj. broj. } while(uslov). n = Convert.WriteLine("Uneti broj ciji se stepen trazi "). Opšti oblik while ciklusa je: while(uslov) izraz. Primer 5. i++) { rezultat = 1.ToInt32(Console. sum). n. Console.ReadLine()). } } } } } Console.WriteLine("Suma brojeva od 1 do {0} je {1} ". System.WriteLine("Uneti stepen koji se trazi "). e. e = i.ReadLine()). using using using using System. Console.

WriteLine("Uneti broj").ReadLine()). namespace ConsoleApplication1 { class MainClass { public static void Main() { int broj.Linq.ToDouble(Console.Linq.WriteLine("Koliki je vas ulog u banci?"). using using using using System. ++ukupnoGodina. System. System. Console.Collections.0. kamatnaStopa = 1 + Convert. Console. int ukupnoGodina = 0.Collections. broj = broj / 10. Console.Primer 6. ulog = Convert.Text. System.ReadLine()) / 100. System. broj = Convert. Console. System.ukupnoGodina.ToDouble(Console. } while (broj > 0). ulog).WriteLine("Kolika je kamatna stopa (u %)?"). do { sledecibroj = broj % 10. Console.ReadLine()).Text. do { ulog *= kamatnaStopa. Console. kamatnaStopa. 11 . int sledecibroj.WriteLine("Za {0} god. krajnjiUlog. ulog ce dostici {1}. Console.".WriteLine("Do koje vrednosti uloga zelite da dodjete?"). Napisati konzolnu aplikaciju na primeru proračuna broja godina do koje treba određeni ulog banke da naraste.ToInt32(Console. namespace ConsoleApplication1 { class Program { static void Main(string[] args) { double ulog. Napisati konzolnu aplikaciju za unos celog broja i ispisivanje tog broja u inverznom poretku. using using using using System. } } } Primer 7.Generic.Write("Broj u inverznom poretku je: "). krajnjiUlog = Convert.ReadKey(). } while (ulog < krajnjiUlog). Console. Console.ToDouble(Console.WriteLine("Uneti broj je: " + broj).Write(sledecibroj).Generic. System.ReadLine()).

a može se uključiti string[] args parametar.Linq. imenaGlumaca. Console. foreach (string imeGlumca in imenaGlumaca) { Console. pa su moguće sledeće verzije ove funkcije: static static static static void Main() void Main(string[] args) int Main() int Main(string[] args) Opcionalni parametar args u Main() funkciji obezbeđuje način za dobijanje informacija izvan aplikacije. System. Ne mora se voditi računa koliko je elemenata u nizu npr. Ova funkcija kao rezultat vraća void ili int.Collections. System.WriteLine("Ovo su {0} moja omiljena glumca:".Text. } } } 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>.. } } } Funkcije Kada je reč o funkcijama prvo treba objasniti funkciju Main().Generic. "Al Pacino"}. Funkcije u C# predstavljaju blokove koda koji se mogu izvršavati u bilo kom delu aplikacije. namespace Ciklusi { class Program { static void Main(string[] args) { string[] imenaGlumaca = { "Matthew McConaughey".WriteLine(). Kod OOP funkcije se nazivaju metode.Length). using using using using System. ali taj termin će se kasnije koristiti kod klasa. "Brus Willis". } Console.Console.: Primer 8. System.ReadKey(). Tako na 12 .WriteLine(imeGlumca). Napisati konzolnu aplikaciju za primenu foreach ciklusa.

a dovoljno je samo jednom da se napiše. System. Napisati konzolnu aplikaciju za formiranje funkcije Pisi() i pozivanje funkcije u glavnom programu.Generic.Collections. System. System. using using using using System. using using using using System. ako se u traži ispis nekog teksta. " + ime). Argumenti funkcije se navode u zaglavlju funkcije.Generic. Osoba("Marija". } 13 .WriteLine("Hello. } static void Main(string[] args) { Pisi(). System.Collections. "Nikola").ReadKey().WriteLine("Ovo je tekst"). namespace Funkcija { class Program { static void Main(string[] args) { Osoba("Ana"). Primer 9. } } } Primer 10.Linq.ReadKey(). } static void Osoba(params string[] imena) { foreach (string ime in imena) Console.primer. Console. Definicija i poziv funkcije Funkcije se mogu smestiti ili pre ili posle glavne funkcije Main().//poziv funkcije Pisi() Console. Napisati konzolnu aplikaciju za formiranje funkcije Osoba(imena) i pozivanje funkcije u glavnom programu.Text. namespace FunkcijaZaIspisTeksta { class Program { //Definicija funkcije Pisi() static void Pisi() { Console. Funkcije utiču na čitljivost koda. "Marko". a mogu biti sa ili bez argumenata. može se pozvati funkcija u bilo kom delu aplikacije. Funkcija se poziva u glavnom programu navođenjem imena funkcije i eventualno prosleđivanjem parametara. iza čega se dalje piše telo funkcije (ono što funkcija treba da uradi).Linq. System. System.Text.

} } 14 .

Sign up to vote on this title
UsefulNot useful