84
C# LJILJA STOJANOVIC 1

C#€¦ · Web viewljilja stojanovic. C# je moderno strukturiran, objektno orijentisan jezik, zasnovan na C++ jeziku i zvanično prihvaćen kao standard od strane organizacija ECMA

  • Upload
    buiphuc

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

C#

LJILJA STOJANOVIC

1

C#

C# je moderno strukturiran, objektno orijentisan jezik, zasnovan na C++ jeziku i zvanično prihvaćen kao standard od strane organizacija ECMA (European Computer Manufacturers Association) i ISO (International Organization for Standardization).

C# je jednostavan , razvijen od strane Microsofta u okviru njihove .NET inicijative koju je predvodio Anders Hejlsberg. C# je jezik visokog nivoa baziran na C i C++ programskim jezicima.

.Net Framework je revolucionarna platforma koja omogućava rad u sledećim vrstama aplikacija:

Web aplikacije Windows aplikacije Web servisi

Kreiranje Hello World programa 

Podrazumevano je da se program izvšava liniju po liniju u redosledu u kome je on  napisan u fajlu  sa kodom odnosno od njegovg vrha pa do dna. Često se javlja potreba da se linije koda izvršavaju u drugačijem redosledu ili pak da se neke linije koda izvršavaju više puta. Ovaj način izvršavanja se ostvaraje pomoću odgovarajućih upravljačkih struktura. U savremenim programskim jezicima se, po mogućnostima koje nude, skupovi upravljačkih funkcija veoma malo među sobom razlikuju. Često su čak i sintakse slične ili se pak poklapaju.  Poznavanje sintakse upravljačkih struktura predstavlja osnovu u proučavanju jednog programskog jezika.  

Pre nego što naučimo kako se prave blokovi u C# programskom jeziku, hajde da pogledamo najjednostavniju programsku strukturu.

C# program čine sledeći delovi:

Namespace declaration A class Class methods Class attributes A Main method Statements and Expressions Comments

2

C#

Pogledaćemo jednostavan kod koji štampa reči: Hello World

using System;namespace HelloWorldApplication{ class HelloWorld { static void Main(string[] args) { /* my first program in C# */ Console.WriteLine("Hello World"); Console.ReadKey(); } }}

Kada je ovja kod kompajliran i izvršen dobijamo sledeći rezultat:

Hello World

Delove ovog programa čine:

Prva linija programa  using System; - using je ključna reč upotrebljena da uključi   include System namespace u program. Program generalno ima različite using objave.

Sledeća linija je namespace  deklaracija. Namespace je kolekcija klasa . HelloWorldApplication namespace sadrži klasu HelloWorld.

Sledeća linija je deklaracija klase.   class HelloWorld sadrži podatke i metode definisane da ih program koristi. Klase generalno sadrže različite metode. Metode definišu ponašanje klase. HelloWorld class ima samo method Main.

Sledeća linija definiše  Main method, koji je polazna tačka za sve C# programe. The Main method objavljuje šta klasa radi kada je izvršena.

Liniju /*...*/ ignoriše kmpajler, a predstavlja komentare u programu.

Main method specifiše ponašanje sa izjavomt Console.WriteLine("Hello World");

3

C#

WriteLine je metoda Console class definisane u  System namespace. Ova izjava omogućava da na ekranu bude ispisano "Hello, World!" .Linija Console.ReadKey(); je za VS.NET korisike. Program čeka da korisnik pritisne bilo koji taster da bi nastavio sa radom tj nama omogućava da vidimo rezultate programa koji će biti zatvoren nakon toga.

Obratite pažnju: C# razlikuje velika i mala slova.

Sve objave i izrazi završavaju sa (;).

Program se izvršava startovanjem Main metode.

Za razliku od Jave, ime klase može biti drugačije od imena datoteka.Kompajliranje i izvrašavanje programa

Kompajliranje je prevođenje izvornog koda, nekog programskog jezika(npr. C#), u izvršni(mašinski) kod. Pokretanje programa vrši se pmoću taster F5.

Start SharpDevelop.

Izaberite File -> New -> Project.(New Solution)

Izaberi Windows Applikation

Izaberi Console Application.

Unesi ime projekta i klikni dugme Create.

Kreiramo projekat u Solution Explorer.4

C#

Pišemo kod u Code Editor.

Pritisni Run button ili pritisni F5 taster da izvršiš program. A Command Prompt će prikazati Hello World tekst.

TIPOVI PODATAKA I OPERATORI U C#

Računaru se mora dati informacija koja vrsta podtaka će biti korišćena pomoću tipa podataka. Tipom podataka definisani su: način registrovanja u memoriji, skup mogućih vrednosti tih podataka, skup mogućih akcija nad tim podacima.

          C# podržava sledeće osnovne tipove podataka: 

         numeričke         znakovne         logičke

 Numerički tipovi se koristi za predstavljane celih i realnih brojeva. Za opisivanje celih brojeva koristi se više tipova datih u tabeli.

 

Tip Opseg vrednosti Zauzeće memorije u bajtovima

sbyte -128 do 127 1byte 0 do 255 1

short -32768 do 32767 2usho

rt0 do 65535 2

int -2 147 483 648 do 2 147 483 647 4uint 0 do 4 294 967 295 4long -9 223 372 036 854 775 808 do 9 223

372 036 854 775 8078

ulong 0 do 18 446 744 073 709 551 615 8 Za realne brojeve podržani su sledeći tipovi: 

         float         double         decimal

 

5

C#

Tip Opseg vrednosti

float ±1.5×10-45  d-do ±3.4×1038

double

±5.0×10-324 do ±1.7×10308

decimal

±1.0×10-28 do ±7.9×1028

 Znakovni tip je char i predstavlja dozvoljene vrednosti sa UNICODE znakom odnosno celim brojem u intervalu 0 do 65536 što zauzima dva bajta. Konstante tipa char se pišu unutar navodnika npr. ‘a’,’C’… Logički tip je bool I može da ima samo dve vrednosti: true(tačno) i false(netačno) I zauzima jedan bajt. 

 Aritmetički operatori su:+ (sabiranje)- (oduzimanje)* (množenje)/ (deljenje)% (ostatak celobrojnog deljenja - moduo) Logički operatori su:! - negacija|| - logičko “ili” (OR)&& - logičko „I“ (AND) Relacijski operatori su:== - ekvivalencija tj jednakost!= - neekvivalencija tj različito< - manje> - veće<= - manje ili jednako>= - veće ili jednako Operatori za rad sa bitovima su:~ – negacija na nivou bita& - I na nivou bita| - Ili na nivou bita^ - ekskluzivno ili na nivou bita<< - pomeranje u levo>> - pomeranje u desno

 

6

C#

Pored prethodno definisanih operatore postoje i drugi kao što su operatori dodele, operatori za inkrementiranje i dekrementiranje, ternarni i sl. Osnovni operator dodele je znak jednakosti (=) i koristi se na sledeći način;

promenljiva = izraz Prvo se izračunava vrednost izraza i tako dobijena vrednost dodeli

promenljivoj na levoj strani.  Postoje takođe i složeni operatori dodele koji imaju oblik:

 operator= gde operator može biti bilo koji aritmetički operator. Primer: a+=b   je isto ako da smo napisali:a=a+b   

Operatori inkrementiranja u oznaci ++ i dekrementiranja u oznaci -- mogu biti prefiksni i postfiksni. Operator inkrementiranja povećava  vrednost operanda za jedan a operator dekrementiranja smanjuje vrednost operand za jedan i to bez obzira da li su prefiksni ili postfiksni. Razlika se uočava jednino kada su ovi operatori deo nekog složenijeg izraza.

Ilustrujmo to sledećim primerom koji predstavlja deo nekog koda.

 Primerint i = 5;int y = 10;int x = 0;

 i++;   // vrednost i se povećava za jedan tj i ima vrednost 6;++i;   // vrednost i se povećava za jedan tj i ima vrednost 7;i--;     // vrednost i se smanjuje za jedan tj i ima vrednost 6;--i;     // vrednost i se smanjuje za jedan tj i ima vrednost 5;

 x = y + ++i;          // x=16 jer se vrednost i poveća za jedan pa

se sabere sa yx = y + i++;          // x=15 jer se vrednost i sabere sa y i dodeli x

a zatim se i poveća za jedan7

C#

x = y + --i; // x=14 jer se vrednost i smanji za jedan pa se sabere sa y

x = y + i--;  // x=15 jer se vrednost i sabere sa y i dodeli x a zatim se i smanji za jedan

 Operatori imaju svoj prioritet. Kompajler izvršava neki izraz u kome

postoji više operatora u redosledu koji se odredjuje na osnovu prioriteta operatora i mesta njihovog pojavljivanja u izrazu. Prioritet operatora prema kategorijama je sledeći (od najvišeg ka najnižem):

          osnovni operatori (pristup polju, poziv metode, pristup indeksu, postinkrementiranje, postekrementiranje, new, typeof, sizeof, )         unarni operatori (i predekrementiranje i preinkrementiranje)         aritmetički (množenje, deljenje, ostatak pri deljenju)         sabiranje i oduzimanje         pomeranje na nivou bita (pomeranje u levo i pomeranje u desno)         relacioni operatori         jednakost (jednako i različito)         I na nivou bita         ekskluzivno ILI na nivou bita         ILI na nivou bita         logičko I         logičko ILI         ternarni operator         operatori dodeljivanja

Konverzije podataka u C#

Broj u string:

Sledeći primer pokazuje kako se podatak tipa int može konvertovati u string.

Kada napišemo string s, deklarisali smo promenljivu tipa string čije ime je s.

Znak jednakosti znači da promenljiva s uzima vrednost izraza na desnoj strani znaka jednakosti. Promenljiva i koja je int, se na dva načina može konvertovati u string:

string s = i.ToString();

string s = Convert.ToString(i);8

C#

String u broj:

Kada napišemo double a deklarisali smo promenljivu koja je realan broj.

double a = 0.000006;

string s = a.toString();

U drugom redu promenljiva s, koja je string uzima vrednost konvertovanog broja a.

Obavezno dobro uvezbati:

Kreirati aplikaciju, dati joj ime, napraviti folder gde ce biti sacuvana, sacuvati, zatvoriti aplikaciju, otvoriti je opet. (Osnovne manipulacije). Naci exe file koji pokrece aplikaciju u folderu bin\Debug . Pokrenuti aplikaciju bez okruzenja.

Objektno programiranje

Za razliku od tradicionalnog proceduralnog programiranja koje se sastoji od niza funkcija i njihovih poziva, objektno programiranje bolje i skladnije oslikava realni svet i omogućava logičnije projektovanje programskih zahteva. Problem se može rešiti pomoću tradicionalnog i objektnog programiranja. Ono što nam donosi objektno programiranje je skladniji programski model i još neke lepe stvari kao što je ponovna upotrebljivost i nasleđivanje objekata.

Jedan objekat je uvek predstavljen jednom klasom. Klasu treba posmatrati kao nacrt ili plan za izgradnju objekta. Na primer, plan za izgradnju kuće predstavlja klasu, a kuća napravljena po tom planu predstavlja objekat zasnovan na klasi. Sama klasa za sebe nije objekat, već predstavlja samo opis po kome će objekat biti napravljen. Kada napravimo (kaže se „instanciramo“) objekat na osnovu klase, on se kreira u memoriji računara i tek tada se moţe koristiti. Na osnovu jedne klase može se napraviti neograničeni broj objekata, odnosno broj koji je tehnički ograni- čen memorijom računara.

Svojstva, metode i događaji 9

C#

Uzmimo učenika kao primer. Ako bismo hteli da ga predstavimo u objektnom svetu, šta bi klasa koja ga opisuje trebalo da sadrži? Moţemo početi od fizičkih karakteristika. Ime učenika, pol, godina rođenja, boja očiju i kose, razred i slično. Sve pomenuto predstavlja svojstva (eng. properties) klase. Kada instanciramo objekat na osnovu klase „Učenik“, postavićemo ova svojstva da odgovaraju konkretnom učeniku. Očigledno, na osnovu dobro kreirane klase „učenik“ moţemo tačno opisati sve učenike svoje škole. Međutim, ovo nije dovoljno. Učenik obavlja veliki broj školskih aktivnosti koje takođe treba opisati. To je ono što učenik radi u školi i kod kuće, na primer, radi pismeni i domaći zadatak, prisustvuje određenom času, dobija ocenu i slično. Ove radnje koje učenik izvršava i koje se odnose na njega nazivaju se metodima (eng. methods) klase.

Učenik takođe na određeni način reaguje na dešavanja u školskom okruţenju. Reakcija na dobru ili lošu ocenu, izostanak u slučaju bolesti i slično predstavljaju događaje (eng. events) klase. Sada, posle detaljne analize svih osobina, radnji i reakcija učenika moguće je kreirati klasu koja verno i detaljno moţe da opiše učenika sa svim potrebnim karakteristikama.

Fizička implementacija klase

Svojstva klase su predstavljena različitim varijablama koje su javno vidljive van klase. Korisnik klase će po kreiranju objekta na osnovu klase uspostaviti odgovaraju- će vrednosti varijabli i time definisati objekat. Metode klase su predstavljene funkcijama u klasi. Na primer, funkcija „UradiDomaćiZadatak“ koja bi kao ulazne parametre verovatno trebalo da sadrţi opis doma- ćeg zadatka, predmet, vreme kada je zadat i rok izvršavanja. Metod klase moţe imati i povratnu vrednost koja se obično koristi kao status izvršavanja metoda, odnosno funkcije. Nepisano pravilo jeste da povratna vrednost nula znači uspešno izvršenu radnju, a vrednost različita od nule označava problem definisan tim brojem. Da bismo mogli da napravimo prvi primer za demonstraciju jednostavne klase, neophodno je da se upoznamo sa načinom deklaracije varijabli i funkcija u C# jeziku.

Deklaracija varijabli i funkcija

10

C#

Sve varijable u programskom jeziku C# moraju se deklarisati pre upotrebe. Deklaracija varijable podrazumeva da definišemo naziv, tip, vidljivost i opcionalno njenu početnu vrednost. Sintaksa je sledeća:

Vidljivost tip varijable naziv = početna vrednost Na primer:

public string ImeUcenika;

private int Razred = 1;

U prvom primeru je deklarisana varijabla pod nazivom „ImeUcenika“ koja pripada tipu „niska“ (eng. string), što znači da moţe da sadrţi bilo koji niz znakova i njena vidljivost je javna (public). Vidljivost definiše odakle se varijabli moţe pristupiti. Ključna reč „public“ znači da je varijabla javna u celom opsegu u kome je deklarisana – na primer, u celoj klasi i da je takođe vidljiva korisnicima te klase. U drugom slučaju deklarisali smo varijablu pod nazivom „Razred“ koja pripada tipu „int“ (pozitivni i negativni celi brojevi u određenom opsegu) sa privatnom vidljivošću – dostupna je samo u okviru dela u kome je deklarisana, ali ne i korisnicima klase. Inicijalnu vrednost varijable takođe smo postavili na 1. Osim javnih (eng. public) i privatnih (eng. private) tipova vidljivosti postoji još nekoliko varijanti o kojima će biti govora kasnije. Za početak je dovoljno znati da privatne varijable nisu vidljive van klase, a javne jesu. Deklaracija funkcija je slična. Takođe se definiše vidljivost, ime funkcije, tip (koji u slučaju funkcije znači tip vrednosti koju vraća funkcija) uz dodatak deklaracije ulaznih argumenata funkcije ako postoje.

Primer funkcije koja vraća zbir dva broja:

public double Zbir (double a, double b)

{ return a + b; }

Funkcija Zbir je javna (dostupna korisnicima klase) i kao rezultat vraća tip „double“ (broj sa decimalnom tač- kom). Postoje dva ulazna parametra a i b koji su takođe tipa „double“. Telo funkcije je određeno otvorenom i zatvorenom vitičastom zagradom. Naredba return označava bezuslovni završetak rada funkcije i povratnu vrednost funkcije. U našem primeru funkcije postoji samo naredba return koja vraća zbir dva broja. U sloţenijim klasama moţe postojati puno funkcija koje implementiraju različite metode

11

C#

klase. Neke od njih će imati povratnu vrednost, a neke ne. Funkcije koje nemaju povratnu vrednost deklarišu se kao tip void. Na primer:

public void PokreniProgram (string LokacijaPrograma)

{

// kôd koji pokreće program... return;

}

U tom slučaju se navodi samo ključna reč return bez parametra. U primeru je takođe prikazan način za upisivanje komentara u programskom jeziku C#. Dve kose crte // označavaju komentar sve do kraja reda. Ovaj komentar se zanemaruje prilikom prevođenja, a dobra praksa je pisati komentare uvek kada je to potrebno radi boljeg razumevanja koda. Osim ove jednolinijske varijante komentara postoji i višelinijski komentar koji počinje parom znakova /* i zavr- šava sa */. Sve linije između smatraju se komentarom i ne izvršavaju se.

Primer klase

Sada znamo dovoljno da bismo mogli da kreiramo jednostavnu klasu kao primer. Sama deklaracija klase je jednostavna:

Class NazivKlase {

/* telo klase sa svim potrebnim svojstvima, metodima i događajima */

}

Kao i u prethodnom nastavku primer ćemo zasnovati na konzolnoj aplikaciji. Pokrenite C# Express, kliknite na vezu Kreiraj projekat… (eng. Create project…), izaberite tip projekta Konzolna aplikacija (eng. Console Application) i kliknite na dugme U redu (eng. OK).

Zadatak je napraviti klasu „Matematika“ koja će znati da sabere i oduzme dva broja. Klasa će sadrţati dva metoda (funkcije) – „Zbir“ i „Razlika“. Obe funkcije imaju po dva ulazna parametra i brojeve koji se sabiraju, odnosno oduzimaju. Svi ulazni parametri i obe funkcije su tipa „double“.

12

C#

U kodu koji vidite na ekranu prvo treba deklarisati klasu „Matematika“. Deklaracija se upisuje posle deklaracije klase „Program“ kao što je prikazano:

class Program

{

static void Main(string[] args)

{

}

}

class Matematika

{

}

Sada, u okviru klase „Matematika“ treba napisati funkcije „Zbir“ i „Razlika“:

class Matematika

{

public double Zbir(double A, double B)

{

return A + B;

}

public double Razlika(double A, double B)

{

return A - B;

} }

Obe funkcije su javne kako bi bile vidljive korisnicima klase, imaju po dva ulazna parametra tipa „double“ i vraćaju zbir, odnosno razliku. Terminološki, klasa „Matematika“ implementira interfejs sa dva metoda čiji su potpisi:

public double Zbir (double, double) i

13

C#

public double Razlika (double, double)

Klasa je za sada gotova, prelazimo na njeno korišćenje. Kao što je rečeno, klasa sama za sebe ne može da se koristi, već je neophodno napraviti objekat na osnovu nje.

Tehnički gledano, pravljenje objekta se svodi na kreiranje mini-programa u memoriji računara koji sadrži kompletan kôd iz klase. Instanca klase se jednostavno pravi.

NazivKlase NazivVarijable = new NazivKlase();

U našem primeru klasu pravimo u delu static void Main kao što je prikazano:

static void Main(string[] args)

{

Matematika M = new Matematika();

}

Naredba new Matematika() pravi instancu klase „Matematika“ - objekat u memoriji računara. Varijabla M je pokazivač na memorijsku lokaciju na kojoj se nalazi objekat, a pomoću nje se upućuje na sva svojstva i metode u njemu. Sintaksa upućivanja je jednostavna:

NazivVarijable.NazivMetode (ulazni argumenti).

Sada treba testirati obe metode i ispisati njihov povratni rezultat. Za ovo ćemo, kao i u prošlom nastavku koristiti metod „WriteLine“ ugrađenog objekta „Console“. Brojevi koje prosleđujemo kao ulazne parametre izabrani su potpuno proizvoljno. Dopunite kôd sledećim redovima:

static void Main(string[] args)

{

Matematika M = new Matematika();

Console.WriteLine ( M.Zbir (3, 4) );

Console.WriteLine ( M.Razlika (8, 2) );

Console.ReadKey();14

C#

}

M.Zbir (3, 4) poziva funkciju „Zbir“ u objektu na koji pokazuje varijabla M i prosleđuje joj vrednosti parametara. Funkcija „Zbir“ kao povratnu vrednost vraća zbir ova dva broja (return 3 + 4). Ovu povratnu vrednost zatim koristimo za ispis u konzolni prozor. Isti princip vaţi za pozive funkcije „Razlika“. Red Console.ReadKey(); sluţi samo kao veštačka pauza kako se konzolni prozor ne bi odmah zatvorio.

Klase – nastavak

Vreme je da naučimo više o svojstvima klase. U prošlom nastavku smo se upoznali sa funkcijama i na koji način se pomoću njih implementiraju metode klase. Svojstva klase, prenesena u realni svet bi mogla da se poistovete sa osobinom objekta ili osobe u prirodi. Na primer, svaki učenik ima niz osobina (svojstava) koje ga opisuju. Ime, godina rođenja, adresa stanovanja, telefon, boja kose i očiju, u kom je razredu, koji smer i tome slično. U programiranju, kao što smo rekli ranije, klasa predstavlja šablon za objekat. Pošto definišemo svojstva u klasi i na osnovu nje napravimo (instanciramo) više objekata, tipično će svaki od njih imati svoj skup svojstava, baš kao što svaki učenik ima samo svoje osobine.

Programski jezik C# nudi dva osnovna načina za implementaciju svojstava klase.

Implementacija svojstava klase- javne varijable

Najjednostavniji način, od koga ćemo i početi se zasniva na deklaraciji javne (public) varijable unutar klase. Sve što je u klasi definisano kao public, je vidljivo korisnicima ove klase i mogu bez ograničenja postavljati i čitati vrednost ovih varijabli. Kao i do sada, radićemo sa projektom tipa "konzolna aplikacija" (eng. Console Application). Dakle pokrenite C# Express (CharpDevelop) i izaberite link za novi projekt ovog tipa. Kao i do sada, na ekranu se po šablonu prikazuje početni kod sa ulaznom funkcijom static void Main. Zadatak je da napravimo klasu Ucenik sa (za sada) svojstvima Prezime i Ime. Kao i u prošlom nastavku deklaraciju klase treba uraditi posle funkcije static void Main.

class Program { static void Main(string[] args)15

C#

{

}

}

class Ucenik

{

}

Zatim u okviru klase Ucenik, treba uraditi deklaraciju svojstava, odnosno javnih (public) varijabli, obe tipa string:

class Ucenik

{

public string Prezime;

public string Ime;

}

Za sada, veoma jednostavno i očigledno. Kako se koriste ova svojstva na strani korisnika ove klase? U okviru Main funkcije treba prvo deklarisati varijablu koja pokazuje na objekat zasnovan na klasi Ucenik, kao što smo radili ranije. Ime varijable – cu, je proizvoljno izabrano. Postavićemo svojstva Prezime i Ime na proizvoljne vrednosti i potom ispisati sadržaj:

class Program { static void Main(string[] args)

{ Ucenik cu = new Ucenik();

cu.Prezime = "Perić";

cu.Ime = "Petar";

Console.WriteLine(cu.Prezime);

Console.WriteLine(cu.Ime);

Console.ReadKey();

}

}

16

C#

Zaštićena svojstva

Oba svojstva u primeru, korisnik klase moţe da postavi na bilo koju vrednost. U ovom slučaju to ne predstavlja problem. Ali ako ţelimo da u klasu Ucenik dodamo svojstvo Razred, pod predpostavkom da je u pitanju učenik osnovne škole, validne vrednosti mogu biti samo brojevi od 1 do 8. Ako svojstvo Razred napravimo kao javnu (public) varijablu, nemamo načina da kontrolišemo i proverimo vrednost koja je upisana u nju i da zabranimo pogrešne vrednosti. Da bi ovo ostvarili, moramo posedovati neki mehanizam koji proverava vrednost pre nego što se dodeli varijabli. Ovo se postiţe pomoću specijalnih set i get funkcija. Tehnika je sledeća: umesto da se pravi javna (public) varijabla Razred, treba napraviti privatnu (private) varijablu i radi bolje čitljivosti joj dati slično ime – na primer prRazred (pr od private). U ovom momentu još uvek nemamo svojstvo Razred, ali ga dodajemo pomoću set i get funkcija. Sintaksa je jednostavna, navodi se tip i naziv svojstva koje je sada javno (public) i u okviru njega upišu set i get funkcije. Izmenićemo postojeći kod kako bi bilo jasnije:

class Ucenik

{

public string Ime;

public string Prezime;

private int prRazred;

public int Razred

{

Get

{

return prRazred;

}

Set

{

prRazred = value;

17

C#

} } }

Privatna varijabla prRazred nije vidljiva van klase, i korisnici klase ne mogu niti da postavljaju niti da čitaju njenu vrednost. Ipak, ova varijabla je ona koja je nama bitna i sa kojom radimo unutar svoje klase. Korisnik može da postavlja vrednost ove varijable, ali na posredan način pomoću public svojstva deklarisanog u liniji public int Razred. Svojstvo Razred se sastoji od dva dela: get deo koji se automatski poziva kada korisnik čita vrednost svojstva Razred i set deo koji se automatski poziva kada korisnik postavlja vrednost svojstva Razred.U get delu, se korisniku zapravo vraća vrednost privatne varijable prRazred: return prRazred; U set delu se dodeljuje vrednost privatnoj varijabli prRazred. prRazred = value; Promenjiva value je specijalna C# varijabla i predstavlja vrednost koju je korisnik upotrebio prilikom dodele vrednosti svojstvu. I ovde se nalazi ključ za proveru vrednosti pre dodele varijabli prRazred. Pre linije prRazred = value treba proveriti da li je sadrţaj varijable value ispravan. Ako jeste dodeljuemo tu vrednost varijabli prRazred, u suprotnom najčešće generišemo gre- šku sa odgovarajućom porukom.

Obrada grešaka

Da bi sve funkcionisalo ispravno, korisnik klase ne treba da dozvoli da bilo koja greška nasilno završi njegovu aplikaciju. Ovo se odnosi na sve moguće greške koje mogu nastati u radu programa, a ne samo na naš primer. Greške moţemo podeliti na tri grupe: 1. Sintaksne greške (eng. syntax errors) – rezultat pogre- šno napisane naredbe, nedeklarisane varijable i slično. Ove greške najčešće nisu problematične jer program koji ih sadrţi ni ne moţe da se kompajlira. 2. Greške u vreme izvršavanja (eng. runtime errors) – kao u našem primeru, greške koje se mogu ali i ne moraju dogoditi za vreme izvršavanja programa. Najčešće su rezultat neproverenih vrednosti varijabli i pogrešnog unosa korisnika. Relativno se lako pronalaze i ispravljaju.

Zanimljivost:

Opšte prihvaćen termin za grešku u programiranju je "buba" (eng. bug). Otud i termin otklanjanje buba u programu (eng. debugging program). Odakle ovaj termin? Prvi kompjuteri, pre pronalaska tranzistora su se zasnivali na vakumskim cevima - kao stari radio aparati i televizori. One su se u toku rada naravno grejale i pri tome emitovale spektar svetlosti veoma privlačan za

18

C#

raznorazne insekte. Jedna od duţnosti osoba koji su tada odrţavali računare je bilo redovno čišćenje vakumskih cevi od insekata koji su se na njih zalepili i time im ometali hlađenje. Otud i potiče ovaj termin.

Sledeći zadaci su konzolne aplikacije:

Console objekt predstavlja prozor komandne linijeZad1: Sastaviti algoritam kojim se unose sa tastature 3 broja, a zatim pronalazi njihov prosek.

Algoritam

      using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace ConsoleApplication1{    class Program    {

19

C#

        static void Main(string[] args)        {            float a, b, c, x;            string prvi, drugi, treci, prosek;            Console.WriteLine("Unesite 3 broja, pa da izracunam njihov prosek:");            prvi = Console.ReadLine(); //čita sa konzole prvi broj koji c# shvata kao string pa ga moramo konvertovati             drugi = Console.ReadLine();            treci = Console.ReadLine();            a = Convert.ToInt32(prvi); // konverzija stringa u 32-bitni broj             b = Convert.ToInt32(drugi);            c = Convert.ToInt32(treci);            x = (a + b + c) / 3;            prosek = Convert.ToString(x);            Console.WriteLine("Prosek iznosi:" +prosek);            Console.ReadKey(); //pisemo samo da bi se napravila pauza        }    }}

Zad2. Sastaviti algoritam kojim se sa tastature unose 2 broja, a zatim stampaju uredjeni po velicini.

           using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace ConsoleApplication1

20

C#

{    class Program    {        static void Main(string[] args)        {            int a, b;            string prvi, drugi;            Console.WriteLine(“Unesite 2 broja, pa da ih uredim po velicini:”);            prvi = Console.ReadLine();            drugi = Console.ReadLine();            a = Convert.ToInt32(prvi);            b = Convert.ToInt32(drugi);            if (a > b)            {                Console.WriteLine(prvi + “, “ + drugi);                Console.ReadKey();            }            else            {                Console.WriteLine(drugi + “, “ + prvi);                Console.ReadKey();            }        }    }}

Zad3.Sastaviti algoritam kojim se unose 2 broja i stampa veci od njih.        

          using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace ConsoleApplication1{

21

C#

    class Program    {        static void Main(string[] args)        {            int a, b;            string prvi, drugi;            Console.WriteLine("Unesite 2 broja, pa da ih uredim po velicini:");            prvi = Console.ReadLine();            drugi = Console.ReadLine();            a = Convert.ToInt32(prvi);            b = Convert.ToInt32(drugi);            if (a > b)            {                Console.WriteLine("Veci je: " + prvi);                Console.ReadKey();            }            else            {                Console.WriteLine("Veci je: " + drugi);                Console.ReadKey();            }        }Zad4: Sastaviti konzolnu aplikaciju, gde se unose dva broja a stampa njihov zbir i razlika: Napraviti klasu matematika, i u okviru nje dve funkcije. Za sabiranje i oduzimanje.

class Program{static void Main(string[] args) //ovo je polazna tacka za sve akcije…..{ Matematika M = new Matematika(); // instanca klase matematika string prvi=Console.ReadLine(); //unosimo sa konzole prvi broj string drugi=Console.ReadLine(); //unosimo drugi broj double x=Convert.ToDouble(prvi); // pretvorimo stringove u realne brojeve double y=Convert.ToDouble(drugi); // pretvorimo stringove u realne brojeve

22

C#

Console.WriteLine ( "zbir je"+M.Zbir (x, y) ); //ovde pozivamo funkciju da nadje zbirConsole.WriteLine ("razlika je"+ M.Razlika (x, y) ); //ovde pozivamo funkciju da nadje razlikuConsole.ReadKey();

}}class Matematika //definisali smo klasu matematika{ public double Zbir(double A, double B) // u okviru klase ovo je funkcija koja nalazi zbir{return A + B; //funkcija vraca vrednost}public double Razlika(double A, double B) // ova funkcija izracunava razliku{return A - B;}

}

Zad5: Uneti tri broja. Ispisati ih u rastucem poretku (zamena vrednosti dve promenljive)

if naredba Kao i svi ostali programski jezici i C# poseduje ovu osnovnu naredbu za proveru uslova. Sintaksa je jednostavna: if (uslov) { // deo koji se izvršava ako je uslov tačan } else { // deo koji se izvršava ako uslov nije tačan }

23

C#

using System;

namespace zad2{ class Program{static void Main(string[] args){ string prvi=Console.ReadLine(); string drugi=Console.ReadLine(); string treci=Console.ReadLine(); int x=Convert.ToInt32(prvi); int y=Convert.ToInt32(drugi); int z=Convert.ToInt32(treci); if (x>y ) { int p; p=x; x=y; y=p; } if (x>z) { int p; p=x; x=z; z=p;} if (y>z) {int p; p=y;

24

C#

y=z; z=p; } prvi=Convert.ToString(x); drugi=Convert.ToString(y); treci=Convert.ToString(z); Console.WriteLine( prvi+" "+drugi+" "+treci );

Console.ReadKey();

}}

}

Zad6: Kreirati program kojim se unosi poluprecnik lopte a ispisuje njegova povrsina i zapremina koristeci klase i metode

using System;

namespace sfera{ class Program { public static void Main(string[] args) {

25

C#

string poluprecnik=Console.ReadLine(); double r, p, v; r=Convert.ToDouble(poluprecnik);

Sfera loptica = new Sfera(r);

p = loptica.povrsina(r); v = loptica.zapremina(r);

Console.WriteLine("povrsina je"+Convert.ToString(p)); Console.WriteLine("zapremina je"+Convert.ToString(v));

Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } class Sfera { public double poluprecnik; // atribut klase Sfera double pi = Math.PI;

public Sfera(double poluprecnik) //konstruktor { this.poluprecnik = poluprecnik; }

public double povrsina(double poluprecnik) // metod klase Sfera { return 4 * poluprecnik * poluprecnik * pi; }

public double zapremina(double poluprecnik) // metod klase Sfera { return (4 / 3) * Math.Pow(poluprecnik, 3) * pi; } }

}Zad7: Napisati algoritam i program za izračunavanje izraza:

n!k !(n−k )!

26

C#

Koristimo funkciju za računanje vrednosti faktorijela.

Upravo treba izracunati koliko se razlicitih podskupova od k elemenata moze napraviti od skupa koji ima n elemenata ili broj kmbinacija od n elemenata k-te klase

using System;

namespace fakt{ class Program { public static void Main(string[] args) { Console.WriteLine(" unesite n i k da bi izarunao broj kombinacija od n elemenata k te klase"); int n, k;

long rez;

Faktorijel faktor = new Faktorijel();

n = Convert.ToInt32(Console.ReadLine());

k =Convert.ToInt32(Console.ReadLine());

rez = faktor.faktoriel(n) / (faktor.faktoriel(k) * faktor.faktoriel(n - k));

Console.WriteLine("trazeni rezultat je"+ Convert.ToString(rez));

27

C#

Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } class Faktorijel { public long faktoriel(int broj) {

long f = 1;

//for (int i = broj; i >= 2; i--) for(int i=1; i<=broj; i++) {

f = f * i;

}

return f;

} }

class Stepenovanje { public double stepen(double x, int n)

{

double st = 1;

for (int i = 1; i <= n; i++)

{

st = st * x;

}

return st;

}

}

}

28

C#

Zad8: Napisati algoritam i program za izračunavanje izraza:

f=

min ( x , y , z )+max ( x , y , z )

√max2 (x,y,z )+min2( x,y,z)

koristeći funkcije za izračunavanje minimuma i maksimuma 2 broja

using System;

namespace makxmin{ class Program { public static void Main(string[] args) { Console.WriteLine("unesite tri razlicita broja"); int x,y,z; x=Convert.ToInt32(Console.ReadLine()); y=Convert.ToInt32(Console.ReadLine()); z=Convert.ToInt32(Console.ReadLine()); Maximum max = new Maximum(); Minimum min = new Minimum();

double f = (min.minimum(x, y, z) + max.maksimum(x, y, z)) /

29

C#

(Math.Sqrt(Math.Pow(max.maksimum(x, y, z), 2) + Math.Pow(min.minimum(x, y, z), 2))); string s=Convert.ToString(f); Console.WriteLine(s);

Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } class Minimum { public double minimum(double x, double y, double z) {

double min = x;

if (y < min) min = y;

if (z < min) min = z;

return min;

} }class Maximum { public double maksimum(double x, double y, double z) {

double max = x;

if (y > max) max = y;

if (z > max) max = z;

return max;

}

}}

Zad9. Uneti tri razlicita cela broja. Poredjati ih po velicini(koristeći procedure za zamenu vrednosti, tako da se procedura poziva više puta):

using System;

30

C#

namespace zamenavrednosti { class Program { static void zamena(ref int num1, ref int num2) //proceduraa u kojoj se vrši zamena vrednosti{ int p = num1; num1 = num2; num2 = p;} public static void Main() { Console.WriteLine("unesi tri broja"); int x=Convert.ToInt32(Console.ReadLine()); int y=Convert.ToInt32(Console.ReadLine()); int z=Convert.ToInt32(Console.ReadLine()); if (x>y) { zamena(ref x, ref y); } if(x>z) { zamena(ref x, ref z); } if(y>z) { zamena(ref y, ref z); } Console.WriteLine(x+","+y+","+z);

31

C#

Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } }}

Kreiranje Windows aplikacija

32

C#

Komandno dugme (eng. command button)

Komandno dugme (ili samo dugme), predstavlja najočigledniju i verovatno najjednostavniju kontrolu. Omogućava korisniku da klikom na njega pokrene odgovaraju- ću akciju – segment programskog koda. K l j u č n o svojstvo dugmeta je svojstvo Text kojim se postavlja natpis na njemu. Generalno, svaka kontrola koja na sebi poseduje neki natpis ima svojstvo Text. Ovo svojstvo ima još jednu mogućnost: ako postavite znak & ispred bilo kog karaktera u Text svojstvu, taj karakter je podvučen i predstavlja skraćenicu sa tastature za klik akciju dugmeta. Na primer, kada svojstvo Text dugmeta postavimo na Lista &učenika, prikazuje se Lista učenika a skraćenica sa tastature je Alt+U. Jasno, na jednoj formi je potrebno imati jedinstvene skraćenice kako bi sve funkcionisalo kako treba.

Labela (eng. Label)

Labela daje mogućnost prikaza teksta na formularu koji moţe biti samostalan, ali se obično vezuje za neku drugu kontrolu i na taj način opisuje njeno značenje. Najčešće se postavlja uz TextBox kontrolu koja je opisana sledeća. Ključno svojstvo kontrole je Text koje takođe poseduje mogućnost dodele skraćenice sa tastature kao što smo radili na dugmetu.

Linija za unos teksta (eng. TextBox)

Kontrola koja omogućava korisniku da unese podatke koji se dalje koriste u aplikaciji. Relativno sloţena kontrola koja se veoma često koristi prilikom građenja korisni- čkog okruţenja. Omogućava unos teksta u jednoj ili više linija. Moţemo ograničiti mogući broj unetih karaktera, postaviti font koji se koristi i odrediti druge grafičke elemente. Ključno svojstvo ove kontrole je takođe svojstvo Text koje se moţe postavljati i čitati za vreme izvršavanja aplikacije i na taj način se vrši obrada unosa korisnika. Svojstvo Multiline označava da li je moguća jedna (False) ili više linija teksta (True). Ako je svojstvo Multiline postavljeno na True, obično se postavlja i svojstvo ScrollBars koje ovakvom višelinijskom tekstu dodaje mogućnost pomeranja po vertikali i horizontali. Svojstvo MaxLength definiše maksimalni broj karaktera koji korisnik moţe uneti. Inicijalno je postavljen na 32767, što je u praksi obično previše – uvek će biti znatno manje. Od događaja se najčešće koristi TextChanged. Ovaj događaj se

33

C#

automatski pokreće svaki put kada korisnik unese ili obriše karakter u kontroli. Moţe se iskoristiti za proveru unetog sadrţaja, on line pretragu i tome slično.

Na formu postaviti tri dugmeta. Klikom na dugmad redom obojiti formu u azurno plavo, zuto ili zeleno. Obezbediti da s e u toku ucitavanja forme sva dugmad oboje u plavo , a boja teksta na njima u belo.(dogadjaj MainFormLoad). Nakon klika na dugme tekst na njemu treba da ostane crven. Jedno dugme treba da zatvara formu(Close).

void Button1Click(object sender, EventArgs e) { this.button1.ForeColor=System.Drawing.Color.Red; this.BackColor=System.Drawing.Color.Azure; } void Button2Click(object sender, EventArgs e) { this.button2.ForeColor=System.Drawing.Color.Red; this.BackColor=System.Drawing.Color.Yellow;

34

C#

} void Button3Click(object sender, EventArgs e) { this.button3.ForeColor=System.Drawing.Color.Red; this.BackColor=System.Drawing.Color.Green; } void MainFormLoad(object sender, EventArgs e) { this.button1.BackColor=System.Drawing.Color.Blue; this.button1.ForeColor=System.Drawing.Color.White; this.button2.BackColor=System.Drawing.Color.Blue; this.button2.ForeColor=System.Drawing.Color.White; this.button3.BackColor=System.Drawing.Color.Blue; this.button3.ForeColor=System.Drawing.Color.White; this.button4.BackColor=System.Drawing.Color.Blue; this.button4.ForeColor=System.Drawing.Color.White; } void Button4Click(object sender, EventArgs e) { Close(); }

Drugi nacin:

(  II nacin:       this.BackColor = Color.FromName(„green“);https://www.dotnetperls.com/color             – tabela boja

)

35

C#

Na formu staviti dugme koje treba da promeni boju forme ali na slucajno izabran nacin

Kod:

void Button1Click(object sender, EventArgs e) { Random boja = new Random();Color slucajnaboja = Color.FromArgb(boja.Next(255), boja.Next(255),boja.Next(255));this.BackColor=slucajnaboja; }

36

C#

Postaviti na formu Timer i obezbediti da prikazuje tacan datum i vreme u jednoj Label komp....

void MainFormLoad(object sender, EventArgs e) { timer1.Start(); label2.Text=DateTime.Now.ToString(); } }

37

C#

Napisati aplikaciju u C#, kojom se od korisni

ka traži da najpre unese ime i prezime u dva textboxa ovojeno a zatim ispisuje pozdrav toj osobi....

void Button1Click(object sender, EventArgs e) { string ime=textBox1.Text; string prezime=textBox2.Text; MessageBox.Show(ime+" "+prezime+",pozdrav i prijatan dan"); // drugi nacin je da ne deklarisemo promenljive vec da odmah ispisemo sadrzaj texboxa // MessageBox.Show(textBox1.Text+" "+textBox2.Text+",pozdrav i prijatan dan"); } }

38

C#

Napraviti Windows aplikaciju, koja će imati jednu label kontrolu i jedan Button. Prilikom pritiska na dugme, otvara se message box u kojem je ispisana poruka korisniku. Izgled prozora treba da bude kao na slici ispod.

} void Button1Click(object sender, EventArgs e) { MessageBox.Show(" Upalite svetlo u svom srcu da biste videli put kojim idete"); } }}

39

C#

Napraviti windows aplikaciju, koja ima jedan combo box i dva text box-a. U combo box uneti nekoliko stavki. Kada korisnik unese svoje ime, izabere neku stavku iz combo box-a, potrebno je da se automatski u text box-u ispiše poruka o tome koju je stavku korisnik izabrao.

Resenje: Za dodavanje combo box-a na formu, koristi se toolbox. Potrebno je obratiti pažnju na način dodavanja stavki u combo box. Klikom na strelicu u gornjem desnom uglu combo box-a u design modu, otvara se meni 'ComboBox Tasks'. Tu treba izabrati opciju 'Edit Items'. Otvoriće se prozor 'String Collection Editor', u kojem se mogu dodavati, menjati ili brisati stavke combo box-a. 

40

C#

void ComboBox1SelectedIndexChanged(object sender, EventArgs e) { string ime=textBox1.Text; string selektovano=comboBox1.SelectedItem.ToString(); textBox2.Text="ucenik "+ Environment.NewLine+ ime+Environment.NewLine+ "izabrao je smer: "+selektovano+":-)"; } }

Napraviti windows aplikaciju koja ce omoguciti izbor prevoza selektovanjem u combobox-u kaona slici:

41

C#

void Button1Click(object sender, EventArgs e) { string ime=textBox1.Text; string selektovano=comboBox1.SelectedItem.ToString(); textBox2.Text=ime+ Environment.NewLine+"je izabrao sledeci prevoz:"+Environment.NewLine+selektovano; }

Napraviti windows aplikaciju, koja ima jednu osnovnu formu sa dve labele, dva text box-a i jednim dugmetom. U text box-ove korisnik treba da unese dva broja tipa 'double', a klikom na dugme otvara se message box u kojem je ispisan zbir unetih brojeva.

42

C#

void Button1Click(object sender, EventArgs e) { double x=Convert.ToDouble(textBox1.Text); double y=Convert.ToDouble(textBox2.Text); double z=x+y; z=Math.Round(z,1); //zaokruzuje na jednu decimalu MessageBox.Show("zbir je:"+ z); textBox1.Clear(); // brise sadzaj texboxa textBox2.Clear(); }

Napisati algoritam i program za izračunavanje celobrojnog dela i ostatka deljenja dva broja.

43

C#

void Button1Click(object sender, EventArgs e) { int a=int.Parse(textBox1.Text); int b=int.Parse(textBox2.Text); int kolicnik=a/b; int ostatak=a%b; label3.Text="kolicnik je:"+ kolicnik; label4.Text="ostatak"+ ostatak; }

10. Zadatak : Napisati algoritam i program za razmenu vrednosti dve promenljive.

44

C#

void Button1Click(object sender, EventArgs e) { int a=int.Parse(textBox1.Text); int b=int.Parse(textBox2.Text); int c=a; a=b; b=c; textBox3.Text=Convert.ToString(a); textBox4.Text=Convert.ToString(b); } II NACIN

void Button1Click(object sender, EventArgs e) { int a=Convert.ToInt16(textBox1.Text); int b=Convert.ToInt16(textBox2.Text); int c=a; a=b; b=c; textBox3.Text=Convert.ToString(a); textBox4.Text=Convert.ToString(b); } }

Napisati algoritam i program za izračunavanje rastojanja između dveju tačaka. Dugme IZLAZ zatvara aplikaciju.

45

C#

private void button1_Click(object sender, EventArgs e)

{

double x1, y1, x2, y2, d;

x1 = double.Parse(textBox1.Text);

y1 = double.Parse(textBox2.Text);

x2 = double.Parse(textBox3.Text);

y2 = double.Parse(textBox4.Text);

d = Math.Sqrt(Math.Pow(x1 - x2, 2) + Math.Pow(y1 - y2, 2));

label5.Text = "Rastojanje između tačaka iznosi " + d;

}

private void button2_Click(object sender, EventArgs e)

{

Close();

}

a)Za data dva broja odrediti razliku njihovih kvadrata.

46

C#

b) Za data dva broja odrediti kvadrat razlike.

Kod za prvi deo zadatka:

void Button1Click(object sender, EventArgs e) { int x=int.Parse(textBox1.Text); int y=int.Parse(textBox2.Text); int rkv=x*x-y*y; textBox3.Text=rkv.ToString(); }

Kreirati aplikaciju za sabiranje dva cela broja, rezultat prikzati u Textbox objektu. Dugme “kraj rada” zatvara apilkaciju.

47

C#

Ceo kod:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;

namespace sabiranje_dva_broja{ public partial class Form1 : Form { public Form1() { InitializeComponent(); }

private void button1_Click(object sender, EventArgs e) { int x = int.Parse(textBox1.Text); //ovde pisemo …… int y = int.Parse(textBox2.Text); double s = x + y; // ovde mozemo staviti I int, jer je zbir dv cela broja ceo broj…..

textBox3.Text = s.ToString(); }

private void button2_Click(object sender, EventArgs e) { Close(); //zatvara aplikaciju; } }}

Kreirati aplikaciju za sabiranje dva realna broja, rezultat prikzati u label komponenti na dve decimale zaokruzeno. Dugme “kraj”, zatvara aplikaciju.

48

C#

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;

namespace sabiranje_rezultat_u_lb_i_zaokruzivanje{ public partial class Form1 : Form { public Form1() { InitializeComponent(); }

private void button2_Click(object sender, EventArgs e) { Close(); }

private void button1_Click(object sender, EventArgs e) { double x = double.Parse(textBox1.Text); double y = double.Parse(textBox2.Text); double s = x + y; s = Math.Round(s, 2); string r = Convert.ToString(s);

label2.Text = "rezultat je" + r; } }}

Napisati algoritam i program za izračunavanje površine i zapremine lopte poluprečnika r.

49

C#

private void button1_Click(object sender, EventArgs e)

{

int r;

double p, v;

r = int.Parse(textBox1.Text);

p = 4 * Math.Pow(r, 2) * Math.PI;

v = 4 / 3 * Math.Pow(r, 3) * Math.PI;

textBox2.Text = Math.Round(p, 2).ToString();

textBox3.Text = Math.Round(v, 2).ToString();

}

private void button2_Click(object sender, EventArgs e)

{

textBox1.Text = " ";

textBox2.Text = " ";

50

C#

textBox3.Text = " ";

}

private void button3_Click(object sender, EventArgs e)

{

Close();

}

51

C#

Zadaci z vezbu -linijska struktura

1.NAIP koji će učitati ceo broj i ispisati njegov kvadrat i koren na 3 decimale.

2.NAIP koji će učitati dva realna broja i ispisati rezultate svih računskih operacija.

3.Učitati realan broj i ispisati odvojeno ceo i razlomljeni deo tog broja.

4.Unose se dva cela broja x i y. Ispisati ostatak pri deljenju broja x sa brojem y.

5.Dati su broj sati, cena sata i porez u procentima. NAIP koji izračunava bruto i neto zaradu. (Bruto zarada se dobija kada se pomnoži broj sati i cena sata a neto kada se od bruto zarade oduzme iznos poreza)

6.Date su koordinate dve tačke u ravni. NAIP koji izračunava rastojanje između njih.

7.Data je površina jednakostraničnog trougla. NAIP koji će izračunati obim kruga opisanog oko trougla.

8.NAIP kojim se vrši pretvaranje galona u litre ako se zna da je 1 galon=4,54 litara.

9.Kreirati aplikaciju kojom se izracunava O и P правоугаоника, ako su mu date stranice.

10.Kreirati aplikaciju kojom se izracunava O и P круга, ako mu je dat poluprecnik.

11.Kreirati aplikaciju kojom se izracunava P и V лопте, ako je dat poluprecnik.

12.Kreirati aplikaciju kojom se izracunava dijagonala pravougaonika ako su date stranice a i b.

13.Kreirati aplikaciju koja ce uneti iznos u evrima pretvoriti u dinare(srednji kurs evra 115din).

14.Kreirati aplikaciju kojom se izracunava duzina puta u miljama akoje data duzina u kilometrima(1 milja=1,825km)

15.Kreirati aplikaciju kojom se izracunava geometrijska sredina dva broja.

52

C#

16.Kreirati aplikaciju kojom se izracunava brzina kojom se kretao automobil ako su dati predjeni put(km) i vreme(sati).

17.Kreirati aplikaciju kojom se izracunava O i P pravouglog trougla ako su mu date katete.

18.Kreirati aplikaciju kojom se izracunava O i P nejednakostarnicnog trougla akosu mu date stranice:a, b,c

19.Kreirati aplikaciju kojom se izracunava O i P jednakostranicnog trougla ako mu je data stranica a.

20.Kreirati aplikaciju kojom se izracunava zbir cifara unetog dvocifrenog broja.

21. Kreirati aplikaciju koja ispisuje trocifreni broj u inverznom poretku.

22.Kreirato aplikaciju koja iz datog trocifrenog broja izbacuje srednju cifru.

53

C#

Razgranate programske strukture:

If naredba(naredba uslovnog prelaska )

Sintaksa if naredbe:if(boolean_expression){ /* statement(s) will execute if the boolean expression is true */}else{ /* statement(s) will execute if the boolean expression is false */}

Primer: bool condition = true;

if (condition) { Console.WriteLine("The variable is set to true.");

54

C#

} else { Console.WriteLine("The variable is set to false."); }

1.Napisati algoritam i program za nalaženje većeg od dva data broja.

2.Napisati algoritam i program za nalaženje najvećeg od tri data broja.

private void button2_Click(object sender, EventArgs e)

{ Close(); }

private void button1_Click(object sender, EventArgs e)

{ double a, b, c, max; max = 0.0;

a = double.Parse(textBox1.Text); b = double.Parse(textBox2.Text); c = double.Parse(textBox3.Text);

max = a; if (b > max) max = b; if (c > max) max = c;

textBox4.Text = max.ToString();

3.Napisati algoritam i program za izračunavanje vrednosti funkcije koja je data:

w(p) = { p , p≤−3p2,−3< p<3p , p≥3

Rešenje:

private void button2_Click(object sender, EventArgs e) {

55

C#

Close(); }

private void button1_Click(object sender, EventArgs e) { double p, f;

f = 0; p = double.Parse(textBox1.Text);

if (p <= -3) f = p; if (p > -3 && p < 3) f = Math.Pow(p, 2); if (p >= 3) f = p + 1;

textBox2.Text = f.ToString();}

4. Napraviti aplikaciju za izračunavanje cenovnika usluga operatera kablovske televizije. Usluga se deli u 4 paketa: osnovni 600din, sportski 400din, edukacioni 500din i filmski 300din. Moguće su sve kombinacije paketa.

56

C#

private void button2_Click(object sender, EventArgs e) { Close(); }

private void button1_Click(object sender, EventArgs e) { int cena =0, cenaosn=600, cenasport=400, cenaedu=500, cenafilm=300;

if (checkBox7.Checked) cena = cena + cenaosn;

if (checkBox8.Checked)

cena = cena + cenasport;

if (checkBox9.Checked) cena = cena + cenaedu;

if (checkBox4.Checked)

cena = cena + cenafilm;

textBox1.Text = "Vase mesecno zaduzenje iznosi: " + cena.ToString(); }

5.Napisati algoritam i program koji će na osnovu izabranog rednog broja planete od sunca iz liste štampati njen naziv.

private void button1_Click(object sender, EventArgs e) { //Promenljiva koju koristimo int broj; broj = int.Parse(textBox1.Text);

switch (broj) {

case 1: label3.Text = "MERKUR"; break; case 2: label3.Text = "VENERA"; break; case 3: label3.Text = "ZEMLJA"; break; case 4: label3.Text = "MARS"; break; case 5: label3.Text = "JUPITER"; break; case 6: label3.Text = "SATURN"; break; case 7: label3.Text = "URAN"; break; case 8: label3.Text = "NEPTUN"; break; case 9: label3.Text = "PLUTON"; break; default: label3.Text = "Uneti redni broj nije broj planeta sunčevog sistema!"; break; } }

57

C#

6. : Napisati algoritam i program koji će u zavisnosti od izabrane kubikaže vozila (zapremine motora u cm3), odrediti visinu takse koju vlasnik vozila mora da plati prilikom registracije vozila na osnovu date tabele. Koristiti komponentu RadioGroup.

Zapremina (cm3) Taksa (din)do 1000 20001001-1400 30001401-1800 5000preko 1800 8000

private void button2_Click(object sender, EventArgs e) { Close(); }

private void button1_Click(object sender, EventArgs e) { int kubikaza, kubikaza1000, kubikaza1400, kubikaza1800, kubikazavise1800, cena; cena = 0;

if (radioButton1.Checked) cena = cena + 2000;

if (radioButton2.Checked) cena = cena + 3000;

if (radioButton3.Checked)

cena = cena + 5000;

if (radioButton4.Checked)

cena = cena + 8000;

label2.Text = "Vasa taksa iznosi: " + cena.ToString(); }

Naredba višestrukog grananja SWITCH

58

C#

Sintaksa:

switch(expression) { case constant-expression : statement(s); break; /* optional */ case constant-expression : statement(s); break; /* optional */ /* you can have any number of case statements */ default : /* Optional */ statement(s);}

5.Napisati algoritam i program koji će na osnovu izabranog rednog broja planete od sunca iz liste štampati njen naziv.

private void button1_Click(object sender, EventArgs e) { //Promenljiva koju koristimo int broj; broj = int.Parse(textBox1.Text);

switch (broj) { case 1: label3.Text = "MERKUR"; break; case 2: label3.Text = "VENERA"; break;

59

C#

case 3: label3.Text = "ZEMLJA"; break; case 4: label3.Text = "MARS"; break; case 5: label3.Text = "JUPITER"; break; case 6: label3.Text = "SATURN"; break; case 7: label3.Text = "URAN"; break; case 8: label3.Text = "NEPTUN"; break; case 9: label3.Text = "PLUTON"; break; default: label3.Text = "Uneti redni broj nije broj planeta sunčevog sistema!"; break; } }

Zadataci za vežbu:

1. Kreiraj aplikaciju koja testira da li je unet broj paran2. Kreiraj aplikaciju koja testira da li je unet broj deljiv sa 53. Kreiraj aplikaciju koja testira da li je unet broj negativan.4. Dat je trocifren broj.Odrediti najveću cifru.5. Napisati program u kome treba uneti dva cela broja, u RadioGroup komonenti izabrati operaciju(+,-,*,/),6. Napiši program koji će za uneto a i b računati c = a*b pod uslovom da su a,brazliciti od 0.7. Napisati program na C# za štampanje imena meseci u godini počev od tekućeg.8. Napisati program na C# za štampanje broja dana tekućeg meseca, ako unosimo broj meseca.

9. N. p. koji za uneti redni broj dana ispisuje ime dana.10.  N. p. koji ispituje u kom se kvadrantu nalazi trougao koga obrazuju prava y=ax+b i koordinatne ose (b¹0).11.  N. p. koji prikazuje površinu figure zadate brojem: 1- pravougaonik, 2 – kvadrat, 3 – krug, 4 – trougao, uz proveru ulaznih podataka.12. Za unetu numeričku ocenu učenika (od 1 do 5), ispisati njeno značenje (5 - "Odličan", 4 - "Vrlo dobar", 3 - "Dobar", 2 - "Dovoljan" i 1 - "Nedovoljan").13. Unosi se redni broj dana u nedelji. Proveriti da li je u pitanju radni dan ili vikend14. Korisnik unosi broj poena koji je osvojio ucenik. Program prikazuje ocenu po kriterijumu (koristi if):

85-100  5

70-84  4

55-69  3

40-54  2

60

C#

0 -39  1

npr.UlazUnesi broj poena ucenika:60Ocena ucenika: 3

15. Korisnik unosi ocenu koju je dobio ucenik. Program prikazuje opseg poena koje je ucenik osvojio po prethodnom kriterijumu (koristi switch-case).npr.Ulaz:Unesi ocenu ucenika:3Ucenik je osvojio između 55 i 69 poena

16.  Korisnik unosi četiri broja u opsegu 0-100 koji predstavljaju granice za ocene 1-5, a zatim broj osvojenih poena za nekog ucenika. Program prikazuje ocenu učenika prema unetom kriterijumu.

npr. Ulaz:Unesi granicne poene40557085Unesi broj poena koje je ucenik osvojio60Ucenik dobija ocenu: 3

17..Unose se tri broja A, B i C. Izračunati zbir onih koji su veći od nule

18. Uslovi za zaposlenje u preduzeću "Mlade snage" su da kandidat bude stariji od 60 godina ili da ima radno iskustvo od bar 20 godina. U suprotnom će biti zaposlen samo ako ima prosečnu ocenu sa fakulteta veću od 8.5. Na početku se unose starost i iskustvo, a tek ako zatreba, prosečna ocena. Računar treba da napiše poruku "ZAPOSLITI" ili "ODBITI".

61

C#

19.Na pijaci se treba odlučiti za određeni proizvod. Ako je cena 500g mesa veća od cene 20 komada jaja, a sir jeftiniji od 30 dinara, uzećemo 15 jaja i 800g sira. Inače, uzećemo samo 400g mesa. Unose se cene mesa i sira po kilogramu i jaja po komadu, a računar treba da napiše koliko ćemo ukupno platiti.

20.Kompjuter u svemirskom brodu treba da odluči da li da otme određeno ljudsko biće. Ako je u pitanju žensko - onda mora da bude viša od 160cm i starija od 20 godina. Ako je u pitanju muškarac, on mora da bude mlađi od 40 godina i da je težak najviše 80kg. Napraviti program koji na početku pita da kog je pola ljudsko biće (unosi se 'M' za muško i 'Z' za žensko), onda postavlja odgovarajuća pitanja i na kraju ispisuje rezultat - da li osobu treba oteti ili ne

21.Vozač automobila treba da se odluči za levi ili desni put. Odlučiće se za onaj na kome se nalazi više restorana, bez obzira na njegovu dužinu, osim u slučaju da nema dovoljno goriva, kada se odlučuje za put za koji ima goriva ili se odlučuje da sačeka pomoć ako nema goriva ni za jedan od dva puta. Unosi se broj restorana na svakom putu, dužine puteva u kilometrima i koliko kilometara može vozač da prevali sa postojećim gorivom. Računar izdaje poruku "LEVO", "DESNO" ili "OSTANI".

62

C#

Naredbe ciklusa: WHILE, DO, FOR

while petlja While petlja je najjednostavnija. While petlja izvršava blok naredbi sve dok je uslov tačan.Uslov se ispituje na početku. Na primer:

using System;

namespace ConsoleApplication1{ class Program { static void Main(string[] args) { int number = 0;

while(number < 5) { Console.WriteLine(number); number = number + 1; }

Console.ReadLine(); } }}Kada izvršimo kod videčemo listu od 0 do 4.

Zadaci:1.Nacrtaj algoritam i napiši program koji de ispisati sve brojeve deljive sa 5, a manje od 2000 (naredba WHILE).2.

do petlja

63

C#

Možemo koristiti i drugačiji oblik, kada se uslov ispituje na kraju. Ovakav blok naredbi se izvrši bar jedan put.do{ Console.WriteLine(number); number = number + 1;} while(number < 5);

Primer:1.Nacrtaj algoritam i napiši program koji de računati S=102+92+82+…+12 (naredba DO)

for petlja se koristi kada unapred znamo broj iteracija, tj kada znamo unapred broj ponavljanja ciklusa.

Primer:

using System;

namespace ConsoleApplication1{ class Program { static void Main(string[] args) { int number = 5;

for(int i = 0; i < number; i++) Console.WriteLine(i);

Console.ReadLine(); } }}

1. Sastavi aplikaciju koja računa proizvod prvih n prirodnih brojeva.

2. Sastavi aplikaciju koja će izračunati zbir recipročnih vrednosti brojeva u intervalu od m do n.

3. Sastavi aplikaciju koja će ispisati sve parne brojeve u intervalu od 1 do n

4. Sastavi aplikaciju koja će prebrojati koliko ima brojeva deljivih sa 3 u intervalu od 1 do n

5. Napisati program za izračunavanje zbira brojeva u intervalu od n do m.

64

C#

6. Napisati program za izračunavanje sume parnih brojeva u intervalu od n do m.

7. Napisati program za izračunavanje sume (zbira) kvadrata brojeva od 1 do m.

8. Napisati program za izračunavanje sume korena brojeva od n do m.

9. Napisati program za izračunavanje faktorijela unetog broja n (n!).

Nizovi

U rešavanju raznih problema javlja se potreba za postojanjem većeg broja podataka istog tipa koje predstavljaju jednu celinu. Zbog toga se u programskim jezicima uvodi pojam niza ili u opštem slučaju pojam polja. Ovo možemo predstaviti slikom.

Elementi niza numerisani su sa 0,1,2,…,N-1 Ovi brojevi se nazivaju indeksima elemenata niza. Broj elemenata u nizu predstavlja njegovu dužinu. Nizovi mogu biti različitih dimenzija. Najčešće se koriste jednodimenzionlani nizovi ili vektori I dvodimenzionalni nizovi ili matrice.

Deklarisanje nizova 

Nizovi se u C#-u deklarišu na sledeći način:             int[] mojNiz;U primeru promenljiva mojNiz je niz koji je tipa (int []),  odnosno niz celih brojeva. U  C#-u kreiranje niza odnosno alokacija memorije vrši pomoću reči new.      int[] mojNiz = new int[6];

65

C#

U primeru se kreira niz od 6 elemenata koji su celi brojevi. Pre nego što počnemo koristiti elemente niza njima je potrebno dodeliti neku vrednost. Kreriranjem niza te vrednosti biće jednaka nuli. Početne vrednosti elemenata možemo dodeliti na različite načine. Evo jednog.      int[] mojNiz = { 1, 2, 3, 4, 5, 6 };U ovom primeru kreiranje i inicijalizacija niza je izvršena istovremeno, pa je tako: mojNiz[0]=1,mojNiz[2]=3 …Moguće je izvršiti i direktnu dodelu vrednostima članova niza.

mojNiz[0]=1;mojNiz[1]=2;    .    .

   U ove vrednosti mogli smo pridružiti i primeno for ciklusa.int[] mojNiz = new int[6];for (int i = 0; i < mojNiz.Length; i++){     mojNiz[i] = i;}   

Članove niza možemo uneti i sa tastaure koa u primeru.        static void Main(string[] args)        {            int[] mojNiz = new int[6];             Console.WriteLine("Unesi vrednosti clanova niza:");             for (int i = 0; i < 6; i++)            {                mojNiz[i] = int.Parse(Console.ReadLine());            }

     }Dakle, Jednodimenzionalan niz: tip [ ] naziv_niza; 

Dvodimenzionalni niz: tip [ , ] naziv_niza; 

Višedimenzionalan niz: tip [ , , … ] naziv_niza; 

66

C#

Ortogonalni niz: tip [ ] [ ] naziv_niza: 

Rad sa jednodimenzionalnim nizom 

Za inicijalizovanje niza konkretnih dimenzija koristi se ključna reč new i dimenzionisanje. Ključna reč new prilikom inicijalizacije se koristiti jer je niz u C# programskom jeziku objekat. Npr. ovako se inicijalizuje jednodimenzionalni niz od 5 elemenata.

int[] array = new int[5];

            array[0] = 1;

            array[1] = 2;

            array[2] = 3;

            array[3] = 4;

            array[4] = 5;

Ali navedeni kod se može napisati i jednostavnije:

int[] array = { 1, 2, 3, 4, 5 };

Ali najbolje da pogledate kod celog programa koji koristi jednodimenzionalan niz.

Kao što možete i po kodu pretpostaviti, vi prvo pitate korisnika koliko imena hoće da unese u jednodimenzionalan niz. To je neophodno jer nedefinisan niz u C# programskom jeziku ne dozvoljava da naknadno unosite elemenat po elemenat od korisnika. Ukoliko ne želite da korisnik definiše koliko će uneti elemenata u niz, onda možete da koristite liste o kojima će biti pisano u narednim postovima. Međutim vi možete da dimenzionišete niz promenjivom. Kad znamo koliko će niz imati elemenata onda za unos elemenata možemo koristiti i for petlju. Takođe obratite pažnju kako se sortira niz kroz metodu Array.Sort koju možete koristiti zahvaljujući uključenom imenskom prostoru System. Zatim kroz foreach petlju prikazujemo sortirana imena koja je korisnik uneo. Ovu metodu ne možete koristi

67

C#

za višedimenzionalne nizove ili ako jednodimenzionalan niz nije dimenzioniran. Kad izvršite navedeni program, rezultat će biti sortirana imena koja ste uneli. 

68