91
I. УВОД У ПРОГРАМСКИ ЈЕЗИК C# 1.1 NET FRAMEWORK C# је један од млађих програмских језика. Настао је 2002.године као саставни део MS .NET Framework-а 1.0. C# је објективно оријентисан програмски језик као и већина модерних виших језика (C++, Java и тд), и намењен је изради апликација за .NET Framework платформу. NET Framework је нова и револуционарна платформа креирана од стране Microsoft-а за развој апликација. NET Framework је постављен да ради на оперативном систему Windows, али су ускоро пронађене алтернативне верзије које ће радити и на другим системима. Један пример овога је моно, отворена - изворна верзија NET Framework-а која укључује и C# компајлер, који ради на неколико оперативних система, укључујући различите врсте Linux-а и Mac OS. NET Framework омогућава креирање Windows апликација, Web апликација, и Web сервиса. Овај језик је први компонентно објектно оријентисани језик у породици C/C++ који подржава: -високу продуктивност VB-а; · снагу C++ -а; · идеје из VB-а, C/C++-а и Jave; · компонентно оријентисање; · својства, методе, догађајe; · верзирање (versioning); · атрибуте; · XML документацију; · израду ASP страница; · интероперабилност односно подршку за XML, SOAP, COM, DLL, .NET. NET Framework jе дизајниран тако да се може користити из било ког језика, укључујући C#, C++, Visual Basic, JScript, па чак и старије језике као што је COBOL. Да би се ово

Materijal za prvi kolokvijum

Embed Size (px)

Citation preview

Page 1: Materijal za prvi kolokvijum

I. УВОД У ПРОГРАМСКИ ЈЕЗИК C#

1.1 NET FRAMEWORK

C# је један од млађих програмских језика. Настао је 2002.године као саставни део MS .NET Framework-а 1.0. C# је објективно оријентисан програмски језик као и већина модерних виших језика (C++, Java  и тд), и намењен је изради апликација за .NET Framework платформу. NET Framework је нова и револуционарна платформа креирана од стране Microsoft-а за развој апликација. NET Framework је постављен да ради на оперативном систему Windows, али су ускоро пронађене алтернативне верзије које ће радити и на другим системима. Један пример овога је моно, отворена - изворна верзија NET Framework-а која укључује и C# компајлер, који ради на неколико оперативних система, укључујући различите врсте Linux-а и Mac OS. NET Framework омогућава креирање Windows апликација, Web апликација, и Web сервиса.

Овај језик је први компонентно објектно оријентисани језик у породици C/C++ који подржава:

-високу продуктивност VB-а;· снагу C++ -а;· идеје из VB-а, C/C++-а и Jave;· компонентно оријентисање;· својства, методе, догађајe;· верзирање (versioning);· атрибуте;· XML документацију;· израду ASP страница;· интероперабилност односно подршку за XML, SOAP, COM, DLL, .NET.

NET Framework jе дизајниран тако да се може користити из било ког језика, укључујући C#, C++, Visual Basic, JScript, па чак и старије језике као што је COBOL. Да би се ово обавило, појавиле су се посебне верзије ових језика. Не само да сви они имају приступ NET Framework-у, већ такође могу да комуницирају једни са другима. Програмери који раде у C# језику, могу да искористе код написан за Visual Basic програмере, и обрнуто.

Преко клијентског софтвера као што је C#, користе се велике библиотеке кодова од којих се састоји NET Framework, користећи технике објектно-оријентисаног програмирања (OOP). Ова библиотека је категоризована кроз различите модуле који се могу користити у деловима, у зависности од резултата који се желе постићи. Један блок садржи градивне блокове за Windows апликације, други за мрежно програмирање, а наредни за развој Web-а. Намера је да различити оперативни системи подрже неке или све ове

Page 2: Materijal za prvi kolokvijum

модуле, у зависности од својих карактеристика. Део NET библиотеке дефинише неке основне врсте. Врста или тип је представљање података који битно олакшавају сарадњу између језика користећи NET Framework. Наслеђивање класа, откривање и обрада изузетака и полиморфизам између различитих језика, се постиже помоћу система заједничких типова или Common Type System (CTS) . Као што снабдева ову библиотеку, NET. укључује NET заједнички језик. Common Language Runtime (CLR). Писање апликације користећи NET Framework значи писање кода користећи библиотеку кодова (користећи било који од језика који подржавају Framework).

Распон технологија које обухвата .NET је велики и укључује скуп језика кога чине C# и VB, две генерације сервера .NET, као и подршка која није само за PC рачунаре него и за друге уређаје.

NET Framework садржи унифициране, објектно-оријентисане, хијерархијске и прошириве скупове класа (API) које користе сви језици .NET-a. Класе се могу користити у развоју апликација од традиционалних апликација које користе командну линију, или апликација које користе графичко окружење (GUI), преко апликација које користе Web форме и XML Web сервисе. Званичних пет језика који се користе су: C#, VB, Visual C++, Visual Java# i JScript.NET.

ASP.NET користи класе из .NET Framework-a и тако омогућава на лак начин, уз коришћење познатих скупова контрола и инфраструктуру градњу Web апликација. Под именом библиотека класа Framework-a (FCL) обједињене су бројне сродне библиотеке класа.Најчешће коришћени типови апликација су :

Windows applications- ове апликације, као што је Microsoft Office, имају препознатљив и близак изглед, а дизајниране су коришћењем Windows Forms модула који представља библиотеку контрола (као што су дугмад, тулбарови, менији и тако даље) које се користе да се направи Windows-ов кориснички интерфејс (UI);

Web applications- ово су Web странице које се виде било којим Web browser-ом, односно претраживачем. NET Framework обухвата моћан систем за генерисање динамичких Web садржаја, што омогућава персонализацију, сигурност и још много тога. Овај систем се зове ASP.NET (Active Server Pages.NET), и користи C#, за креирање апликација које користе Web форме;

Web services- коришћењем Web услуга могуће је размењивати виртуелно било који податак преко интернета, користећи исте једноставне синтаксе без обзира на језик који се користио за креирање Web сервиса или система на коме је заснован. Неки од ових типова може такође захтевати неки облик приступа бази података, што се може постићи коришћењем ADO.NET (Active Data

Page 3: Materijal za prvi kolokvijum

Objects .NET) делу NET Framework-а или кроз нови LINQ (Language Integrated Query) могућности C#. Многи други ресурси могу да буду нацртани, као што су алатке за стварање мреже компонената, штампања графике, обављања сложених математичких задатака, и тако даље.

1.2 ПРОГРАМСКИ СКЛОП

Примарну јединицу .NET апликација чини програмски склоп (assembly). Он представља колекцију кода, метаподатака и ресурса. Манифест програмског кода садржи информације о томе шта се у њему налази, као што су име и верзија, листа типова и других неопходних програмских склопова, листа сигурносних инструкција која укључује приступна овлашћења и коме су та овлашћења ускраћена.

За сваки програмски склоп може да постоји само један манифест који садржи описне информације које су садржане у посебном фајлу или модулу програмског склопа.

Када се компајлира .NET апликација, тада се врши конвертовање из језика у коме је написана, у програмске склопове које садрже инструкције на Microsoft-овом међујезику (Microsoft Intermediate Language) које заједничко извршно окружење (CLR) преводи на машински код и извршава. Један или више програмских склопова садрже извршне фајлове и DLL фајлове.

Приликом почетка извршавања програма, први програмски склоп се учитава у меморију и заједничко извршно окружење (CLR) испитује манифест програмског кода и одређује захтеве за извршење програма. Уколико апликација прође сигурносне захтеве тада долази до извршавања кода, и до компајлирања у природном бинарном коду.

Процес креирања апликације се одвија у неколико корака:

а) полази се кода који је написан у C# као што је дато на слици 1.1;

Слика 1.1: Приказ кода написаног у програму C#

б) код се затим компајлира на Microsoft-овом међујезику (Microsoft Intermediate Language) како је дато на слици 1.2;

Page 4: Materijal za prvi kolokvijum

Слика 1.2: Компајлирање у Microsoft-овом међујезику

в) када се програм покрене он се поново преводи али овог пута помоћу правовременог преводиоца (Just In Time или JIT ), што је дато на следећој слици:

Слика 1.3: Компајлирање помоћу правовременог преводиоца (Just In Time или JIT )

г) резултат превођења је машински код кога извршава процесор рачунара.

Page 5: Materijal za prvi kolokvijum

1.3 ОСНОВНЕ БИБЛИОТЕКЕ КЛАСА .NET FRAMEWORK-A

Основне библиотеке класа .NET Framework-a, обезбеђују велики број објеката и сервиса који су неопходни приликом писања апликација. Библиотеке класа су организоване у именске просторе (namespaces), који представљају логичке групе типова који обављају одређене задатке. Именски простори су организовани хијерархијски, а корен .NET Framework-a чини System именски простор, док се осталим именским просторима приступа преко тачке као оператора. Типични именски простори укључују: System, System.Data, System.Data.SqlClient.

Репрезентативни именски простори су дати у доле приказаној табели:

SystemОво представља основни именски простор за примитивне типове података, као и за остале именске просторе у .NET основној библиотеци класа.

System.CollectionsОвај именски простор садржи различите типове као што су ArrayList, SortedList, Queue, and Stack.

System.ComponentModelОбухвата класе које су укључене у креирање компонената као што су атрибути, конвертори типова и други.

System.DataОвај именски простор обухвата класе које су потребне за приступ базама података, као и додатне именске просторе који се користе за приступ бази.

System.Data.CommonОвај именски простор садржи скуп класа које се деле од стране .NET управљаних провајдера података.

System.Data.OleDbОвај именски простор садржи класе које су неопходне за управљање подацима и OLE DB приступ подацима.

System.Data.SQLClientОвај именски простор садржи класе које су оптимизиране за међусобно дејство са Microsoft SQL Server-ом.

System.DrawingОвај именски простор обезбеђује GDI+ функционалност и класе које су неопходне за графичко рендеровање.

System.IO Садржи типове за управљање системом фајлова I/O.

System.MathОвај именски простор садржи класе неопходне за решавање математичких проблема укључујући и тригонометрију.

System.ReflectionОвај именски простор обезбеђује подршку за добијање информација и динамичко креирање типова у тренутку извршавања.

System.SecurityОвај простор обезбеђује подршку за добијање дозвола, криптографију, и сигурност за приступ коду.

System.Threading Овај именски простор садржи класе неопходне за

Page 6: Materijal za prvi kolokvijum

примену вишенитних апликација.

System.Windows.FormsОвај именски простор садржи типове који су укључени у креирање стандардни Windows апликација.

ТЕСТ 1

1. Које су основне карактеристике C# програмског језика?.

2. Шта је то .NET Framework?

3. Које све врсте апликације се користе и опишите њихове особине?

4. Шта представља програмски склоп и из чега се састоји?

5. Описати процес креирања апликације.

6. Објаснити појам именског простора.

7. Који су типични именски простори?.

Page 7: Materijal za prvi kolokvijum

II. ПОЧЕТАК РАДА У C# ПРОГРАМУ

2.1 Креирање конзолне апликације и први програм

1. Отворити Visual Studio NET.

2. Кликнути на File > New > Project.

3. Унети име пројекта (обавезно заједно), и место на диску.

Слика 2.1: Отварање првог програма

4. У класи Program.cs пронаћи метод Main који представља улаз у програм, и унети код који служи за приказивање поруке на конзоли. Важно је знати да сви методи морају бити дефинисани у некој класи.

Метода представља функцију која припада класи. Уобичајено је да методе носе имена акције које врше, као например WriteLine(), ReadLine(), UradiZadatо(), док метода Main() показује да је прва или главна метода дате класе. Заједничко извршно окружење за извршавање кода објеката у NET Framework-у односно CLR, позива методу Main() на почетку програма и представља улазну тачку у програм.

Испред улазне методе Main стоји резервисана реч static која у доњем примеру значи да није претходно потребно направити објекат Program, док реч void означава да метода нема повратну вредност односно када се заврши

Page 8: Materijal za prvi kolokvijum

извршење методе Main() тада се и програм прекида. Метод Main() може бити без параметара или опционо корисник може унети параметре у случају када стоји Main(string[] args).

Код за исписивање имена на конзоли је представњен у доњем примеру:

Пример 2.1

using System

namespace PrviProgram

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Zdravo, moje ime je Petar Petrovic");

}

}

}

У примеру 2.1 написан је једноставан конзолни програм, који нема графичко окружење, а текст се чита преко командног прозора или DOS прозора на PC рачунару. Објекат Console користи методу WriteLine() чији је аргумент скуп знакова који се исписују на стандардној конзоли, односно у конкретном примеру то је порука "Zdravo, moje ime je Petar Petrovic". Оператор тачка се користи за приступ методи

Испред дефиниције класе Program стоји наредба using System, а Visual Studio.NET у сваки конзолни програм ставља три наредбе System, System.Collections.Generic и System.Text. Објекат типа Console је један од многобројних типова из библиотеке класа Framework-а. Да не би дошло до давања имена која су већ заузета користе се именски простори (namespaces) који ограничавају област важења имена само унутар дефинисаног именског простора.

У C# треба водити рачуна о малим и великим словима, тако да уколико се напише име неке методе или објекта почетним малим словом може се направити грешка коју је касније тешко открити.

Page 9: Materijal za prvi kolokvijum

Написани програм треба превести и извршити избором опције Build a затим Build Solution или притиском на Ctrl-Shift-B. За програме који се приказују на конзоли, заобилази се програм за откривање грешака.

5. Кликнути на Debug > Start Without Debugging или Ctrl+F5, и извршити програм:

Слика 1.2: Исписивање имена на конзоли

Излазне секвенце које се користе у језику C# су:

\’- полунаводник;

\”- наводник;

\\- обрнута коса цртач

\ f- прелазак на следећу страну;

\ b- брисање уназад;

\ n- нови ред;

\ r- прелазак на почетак новог реда;

\ t- хоризонтални табулатор;

\v- вертикални табулатор.

Приликом форматирања излаза у C#, {0} значи да се уноси први параметар у формату стринга односно знаковног низа.

Форматирање излазних порука је дато у следећем примеру:

Пример 2.2

static readonly double e =2.71828;

static public void Main()

{

Console.WriteLine ("Celobrojna valuta: {0,0:C}", 10);

Console.WriteLine ("Valuta u pokretnom zarezu: {0,0:C}", 8.24);

Console.WriteLine ("Ceo broj: {0,0:D5}", 2003);

Page 10: Materijal za prvi kolokvijum

Console.WriteLine ("Ceo broj: {0,0:N5}", 239876);

Console.WriteLine ("Ceo broj : {0,0:N}", 5648);

Console.WriteLine ("Ceo broj : {0,0:N5}", 3897690);

Console.WriteLine ("Ceo broj : {0, 0:X}", 1290367);

Console.WriteLine( "Realan broj e: {0, 0:F3}", e);

Console.WriteLine ("Realan broj e: {0, -8:F5}", e);

Console.WriteLine("Realan broj e: {0, -8:E2}", e);

Console.WriteLine("Realan broj e: {0, -8:E}", e);

}

У примеру 2.3, као и у наредним примерима, на конзоли се уносе информације које се затим читају преко метода ReadLine, а онда додељују променљивама. Када се врши претварање из једне јединице у другу, тада је потребно дефинисати однос између променљивих и резултат приказати на конзоли.

Добра програмерска пракса укључује писање коментара пре линије кода у програму, који објашњавају шта се ради у коду, које акције је потребно извести и који су неопходни као софтверска документација за програмере који настављају рад на пројекту. Коментар почиње двоструком косом цртом као што је дато са:

// Unos korisnickog imena sa konzole

Унос улазних параметара са конзоле

Пример 2.3

static void Main(string[] args)

{

// Unos korisnickog imena sa konzole

Console.WriteLine("Unesite vase ime i prezime:");

// Procitati uneto ime

string sName = Console.ReadLine();

// Prikazati ime na konzoli

Console.WriteLine("Moje ime je, " + sName);

Console.WriteLine("Pritisnite Enter da prekinete program…”);

Console.Read();

}

Page 11: Materijal za prvi kolokvijum

Пример 2.4

static void Main(string[] args)

{

double StopaVis, StopaDuz, Visina, Duzina;

Console.WriteLine("Unesite vrednost visine Sfinge u stopama:");

StopaVis = double.Parse(Console.ReadLine());

Console.WriteLine("Unesite vrednost duzine Sfinge u stopama:");

StopaDuz = double.Parse(Console.ReadLine());

Visina = 0.3018 * StopaVis;

Duzina = 0.3018 * StopaDuz;

Console.WriteLine("Velika sfinga u Gizi je visoka " + Visina + " i dugacka " + Duzina + " metara ");

}

Пример 2.5

static void Main(string[] args)

{

double Kilometri, Milje;

Console.WriteLine("Unesite vrednost rastojanja u kilometrima K:");

Kilometri = double.Parse(Console.ReadLine());

Milje = Kilometri / 1.6;

Console.WriteLine("Rastojanje iznosi " + Milje + " milja ");

}

Page 12: Materijal za prvi kolokvijum

Пример 2.6

static void Main(string[] args)

{

double Duzina, Sirina, Visina, ZapKvadra;

Console.WriteLine("Unesite duzinu D(m):");

Console.WriteLine("Unesite sirinu S(m):");

Console.WriteLine("Unesite visinu V(m):");

Duzina = double.Parse(Console.ReadLine());

Sirina = double.Parse(Console.ReadLine());

Visina = double.Parse(Console.ReadLine());

ZapKvadra = 2 * Duzina * Sirina + 2 * Duzina * Visina + 2 * Sirina * Visina;

Console.WriteLine("Zapremina iznosi " + ZapKvadra + " kubnih metara ");

}

Пример 2.7

static void Main(string[] args)

{

double Metri, Milimetri;

Console.WriteLine ( “ Unesite vrednost u milimetrima M:”);

Milimetri = double.Parse (Console.ReadLine());

Metri = Milimetri / 1000;

Console.WriteLine ( “ Rastojanje iznosi “ + Metri + “ metara ”);

}

Пример 2.8

static void Main(string[] args)

{

// Izracunavanje povrsine pravougaonika

Double Duzina, Sirina, PovPravougaonika;

Console.WriteLine(“Unesite duzina D(m):”);

Page 13: Materijal za prvi kolokvijum

Console.WriteLine(“Unesite sirinu S(m):“);

Duzina = double.Parse(Console.ReadLine());

Sirina = double.Parse(Console.ReadLine());

PovPravougaonika = Duzina * Sirina;

Console.WriteLine(“Povrsiva iznosi”+ PovPravougaonika + “kvadratnih metara”);

}

Пример 2.9

static void Main(string[] args)

{

double a, b, O;

Console.WriteLine("Unesite starnicu a (mm):");

Console.WriteLine("unesite Stranicu b (mm):");

a = double.Parse(Console.ReadLine());

b = double.Parse(Console.ReadLine());

O = a + 2 * b;

Console.WriteLine("Obim jednakokrakog trugla iznosi" + O + "mm");

}

У следећем примеру је представљено израчунавање масе шупљег цилиндра.

Програм ће обављати следеће функције:

- уношење одговарјућих вредности од стране корисника;

- израчунавање запремине тела;

- израчунавање масе тела

- израчунавање и приказ масе у грамима

- конверзија масе у грамима у масу у килограмима.

Page 14: Materijal za prvi kolokvijum

Пример 2.10

static void Main(string[] args)

{

double R, r, Visina, Gustina, ZapCilindra, MasaCilindraGr, MasaCilindraKg;

Console.WriteLine("Unesite veci poluprecnik cilindra R(cm):");

R = double.Parse(Console.ReadLine());

Console.WriteLine("Unesite manji poluprecnik cilindra r(cm):");

r = double.Parse(Console.ReadLine());

Console.WriteLine("Unesite visinu V(cm):");

Visina = double.Parse(Console.ReadLine());

Console.WriteLine("Unesite gustinu G(g/cm3):");

Gustina = double.Parse(Console.ReadLine());

ZapCilindra = ((R + r) * (R - r)) * 3.14 * Visina;

Console.WriteLine("Racunam masu u gramima...");

MasaCilindraGr = ZapCilindra * Gustina;

Console.WriteLine("Masa supljeg cilindra iznosi " + MasaCilindraGr + " grama");

Console.WriteLine("Racunam masu u kilogramima...");

MasaCilindraKg = MasaCilindraGr / 1000;

Console.WriteLine("Masa supljeg cilindra iznosi " + MasaCilindraKg + " kilograma");

Console.WriteLine("Za prekid pritisnite taster Enter.");

}

Page 15: Materijal za prvi kolokvijum

ТЕСТ 2

1. Који су неопходни кораци за креирање конзолне апликације?

2. На конзоли унети вредност у центриметрима, а на излаѕу приказати вредност у инчима узимајући у обзир да је 1” = 2.54 cm. Написати код а затим га извршити.

3. Написати програм за израчунавање површине квадрата и правоугаоника.

4. Шта представља Main() метод?

5. Које су излазне секвенце које се користе у C# програмском језику?.

6. Који је разлог писања коментара у коду?.

7. Написати код за израчунавање површине зарубљене пирамиде..

8. Изабрати неколико геометријских тела а затим написати програм за израчунавање њихове запремине у зависности од улазних параметара.

Page 16: Materijal za prvi kolokvijum

III. ТИПОВИ ПОДАТАКА

У .NET окружењу користи се велики број типова који омогућавају чување, преношење и манипулацију вредности између чланова апликације. Преводиоцу је неопходна информација о величини и могућностима објекта, а управо ту информацију добија од типа објекта. У коду је неопходно декларисати тип сваког новог објекта, а они могу бити уграђени (built-in) у сам језик, и кориснички типови (user defined types) које креира сам корисник. Осим ове поделе постоји и подела типова на вреgносне и референтне у зависности од тога како се вредност смешта у меморију.

Променљиве дефинишу места за чување вредности у меморији. Декларација променљивих представља дефинисање коју ће вредност променљива чувати. У C# се користе целобројни типови, типови са покретним зарезом, Boolean типови и типови карактера.

Приликом избора типа податaка требало би узети у обзир чињеницу да се брже ради са целобројним типовима него са неким мањим типом података, а у зависности од највеће вредности коју је потребно сачувати треба се определити за целобројне типове података (long, short, int). Ако би променљивој brojucenika доделили тип податка int, тада би то приказали са:

int brojucenika;

После декларисања променљиве потребно јој је доделити вредност:

brojucenika = 27;

Када се додели вредност тада се променљива може користити у коду:

Code.WriteLine(brojucenika);

У табели 1 приказан је распон коришћења за тип података byte:

byte 0 до 255 8-bit integer System.Byte

Табела 3.1: Тип података bool

Да би променљивој под именом MojaPromenljiva доделили вредност 255, користи се следећа синтакса:byte MojaPromenljiva = 255;

За разлику од целобројних типова података, типови података float, decimal и double се користe за бројеве који се могу представити у виду разломака. Тип податка float се користи за већи број малих рационалних бројева код којих није потребна велика прецизност, већ је обезбеђено 7 значајних цифара прецизности. Када је потребна већа прецизност тада се користи тип података

Page 17: Materijal za prvi kolokvijum

double, а за финансијске прорачуне где је потребна велика прецизност у виду 28 значајних цифара користи се тип података decimal

Уколико желимо да се литерал третира као decimal, требало би користити суфикс m или M, као што је дато са:

decimal mojNovac = 292.52m;

Преводилац претпоставља да је сваки број са децималном тачком типа double, стога је за типове податaка float потребно додати префикс f.

У табели 3.2 за тип података double дат је распон, и број значајних цифара.

double ±5.0 × 10−324 to ±1.7 × 10308

15-16 значајних цифара

System.Double

Табела 3.2: Тип податка double

Поред нумеричких типова података, постоје и ненумерички типови података. У C# језику тип bool се користи за декларисање и чување Boolean променљивих true и false, као што је приказано са:

bool Uslov = (a > 20 && c < 56);

System.Char тип податка представља појединачну појаву или инстанцу 16-битног Unicode карактера, и у Visual C# се зове Char. Додељивање литерала карактера некој променљивој се може остварити како је дато доле:

char primkar;

primkar = 'A';

У следећем примеру уноси се карактер са тастатуре, а програм проверава да ли се ради о словном карактеру. Унети знак са тастатуре се претвара у тип char и смешта у променљиву c. Затим се проверава да ли је унети знак карактер или не. Уколико се ради о карактеру тада се врши провера да ли се ради о великом или малом слову, и у зависности од тога се исписује порука на конзоли. У случају када знак није карактер на конзоли се исписује одговарајућа порука.

Page 18: Materijal za prvi kolokvijum

Пример 3.1

static void Main(string[] args)

{

Console.Write("Enter a character: ");

char c = (char)Console.Read();

if (Char.IsLetter(c))

if (Char.IsLower(c))

Console.WriteLine("The character is lowercase.");

else

Console.WriteLine("The character is uppercase.");

else

Console.WriteLine("The character is not an alphabetic character.");

}

Константе типа char, могу се писати као литерали, хексадецималне секвенце, или Unicode преѕентације.

char MojKarakter = 'Y'; // Литерал карактера

char MojKarakter = '\y0053'; // Хексадецимал

char MojKarakter = (char)92; // Интегрални тип

char MojKarakter = '\u0058'; // Уникод

System.String типови представљају низ Char типова података, као на пример:

string primstring;

primstring = "Ovo je primer stringa";

String чине низови знакова, величине 16 битова по знаку.

Object тип је супер тип од свих типова у Microsoft.NET окружењу. Сваки тип без обзира да ли је вредносни или референцни тип изводи се из System.Object типа податка, као што је дато са:

object mojobjekt;

mojobjekt = 100;

mojobjekt = new System.Windows.Forms.Form();

Када се користи нека непроменљива вредност коју у коду позивамо, тада користимо константе које дефинишемо преко кључне речи const:

Page 19: Materijal za prvi kolokvijum

public const double Pi = 3.14159265;

Као и променљиве, константе могу бити било ког приступног нивоа. Уколико желимо да константе буду доступне свим корисницима апликације тада је потребно декларисати их са public кључном речи, ако се константа користи унутар класе, онда употребљавамо private кључну реч. Friend кључна реч одређује assembly ниво приступа, док Protected кључну реч дозвољава приступ наслеђивањем типова.

Небројиви тип се може декларисати коришћењем кључне речи enum чије вредности су ограничене на скуп симболичких имена. Овај тип података омогућава да радимо са скупом константи које су у међусобној вези, и да тим скуповима придружимо асоцијативна имена преко којих се релација између њих лако може успоставити.

У следећем коду је приказана декларација небројивог типа:

public enum Meseci

{

Januar = 1,

Februar = 2,

Mart = 3,

April= 4,

Maj = 5,

Jun = 6,

Juli = 7,

Avgust = 8,

Septembar = 9,

Oktobar = 10,

Novembar = 11,

Decembar = 12

}

Приликом декларисања небројивог типа, литералима се додељује вредност типа int, али се небројиви тип може заснивати и на неком другом целобројном типу. Уколико се не унесу вредности за чланове небројивог типа податка, тада је текућа вредност за први члан 0, за други 1, трећи 2 и тако даље.

У примеру 3.2 је приказан небројиви тип.

Page 20: Materijal za prvi kolokvijum

Пример 3.2

using System;

public class EnumTest

{

enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };

enum BoilingPoints { Celcius = 100, Fahrenheit = 212 };

[FlagsAttribute]

enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };

public static void Main() {

Type weekdays = typeof(Days);

Type boiling = typeof(BoilingPoints);

Console.WriteLine("The days of the week, and their corresponding values in the Days Enum are:");

foreach ( string s in Enum.GetNames(weekdays) )

Console.WriteLine( "{0,-11}= {1}", s, Enum.Format( weekdays, Enum.Parse(weekdays, s), "d"));

Console.WriteLine();

Console.WriteLine("Enums can also be created which have values that represent some meaningful amount.");

Console.WriteLine("The BoilingPoints Enum defines the following items, and corresponding values:");

foreach ( string s in Enum.GetNames(boiling) )

Console.WriteLine( "{0,-11}= {1}", s, Enum.Format(boiling, Enum.Parse(boiling, s), "d"));

Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow;

Console.WriteLine();

Console.WriteLine("myColors holds a combination of colors. Namely: {0}", myColors);

}

}

3.1 Конверзија типова података

Page 21: Materijal za prvi kolokvijum

Временом се указује потреба за претварањем једног типа података у други тип података. Податке можемо конвертовати аутоматски односно имплицитно, и експлицитно што значи да се мора специфично питати за конверзију која ће бити извршена.

Имплицитна конверзија се примењује када не постоји бојазан од губитка података, као што је дато са:

int ceobroj = 80;

long Dugacki;

// Tip podatka long se moze dodeliti bilo kojoj vrednosti celobrojnog // podatka bez opasnosti od gubitka podataka

Dugacki = ceobroj;

Када се конверзија не може извршити имплицитно, онда се она остварује експлицитно која у неким случајевима може бити опасна уколико тип податка не може да чува задату вредност. У следећем примеру до грешке неће доћи, јер оба типа података и long и int, могу да чувају дати податак:

long Dugacki = 800;

int ceobroj; 

ceobroj = (int) Dugacki;

Пример експлицитног претварања једног типа у други је могућ и на следећи начин:

byte x = 10, y = 20; онда је byte z =

(byte)(x + y); // експлицитна конверѕија

Сви типови података имају уграђену функционалност, и подржавају 4 метода: Equals, GetHashCode, GetType, ToString.

Вредносни типови користе Parse метод који служи за креирање нумеричких вредности од стринга. Уобичајено је да се користи текст поље за унос података, а унети подаци су типа string. За добијање бројних врености тада се примењује Parse метод:

int ceobroj;

string tipstring;

tipstring = "892";

Page 22: Materijal za prvi kolokvijum

// Broj 892 je sacuvan u promenljivoj tipa string.

// Primenom Parse metoda dobija se numericka vrednost stringa

ceobroj = int.Parse(tipstring);

Најчешће коришћене функције су доле приказане:

String.InsertУноси специфичан стринг у текућу инстанцу.

String.PadLeft, String.PadRightДодаје карактере са леве и десне стране.

String.RemoveБрише одређени број карактера почев од специфичног карактера.

String.ReplaceМења све појаве карактера са неким другим.

String.SplitВраћа низ подстрингова који су подељени одређеним карактером

String.SubstringВраћа подстринг од специфичне инстанце.

String.ToCharArrayВраћа низ карактера који граде стринг.

String.ToLower, String.ToUpperВраћа стринг који је претворен у мала слова и велика слова респективно.

String.TrimEnd, String.TrimStart, String.Trim

Уклонити из стринга све специјалне знаке.

Када желимо да спојимо вредности из неколико променљивих који су типа string, тада користимо спајање низа знакова или конкатенацију, као што је представљено у наредном примеру:

Page 23: Materijal za prvi kolokvijum

Пример 3.3

static void Main()

{

String drugarec;

drugarec = "ime";

String prvarec = "Moje";

String trecarec = "je Petar";

drugarec += trecarec;

Console.WriteLine(prvarec += drugarec);

}

ТЕСТ 3

1. Шта омогућавају типови података?

2. Које типове података користи C# програмски језик?

3. Написати пример за тип података карактер?

4. Како се врши конверзија података и које врсте конверзија постоје?

5. На који начин се декларишу константе?

6. Шта су то небројиви типови?

7. Чему служи Parse метод?

8. Које су најчешће коришћене String функције?

Page 24: Materijal za prvi kolokvijum

IV. ОПЕРАТОРИ И ИСКАЗИ

Оператор представља симбол који доводи до неке акције, а основни типови језика подржавају операторе доделе (=), основне аритметичке операторе (+, -, *, /), и остатак целобројног дељења (%).

Уколико желимо променљивој да повећамо вредност за десет можемо написати:

broj = broj + 10

У C# су уобичајени оператори за самододелу који комбинују сабирање, одузимање, множење, дељење и модуо, при чему ће нова вредност променљиве бити увећана, умањена, помножена и подељена са 10, што је приказано са:

broj += 10

broj -=10

broj *=10

broj /=10

Уколико желимо да повећамо вредност променљиве за 1, можемо писати:

broj ++;

Ако треба да смањимо вредност променљиве за 1, тада пишемо:

broj-- ;

Оператори увећања и смањења могу се ставити испред и иза променљиве, и зову се префиксна и постфиксна увећања. Разлика између њих је у томе што префиксно увећање ++ broj даје вредност променљиве после увећања, а broj ++ представља вредност променљиве пре увећања, као што је дато са:

int y;

y = 36;

Console.WriteLine(y++); // вреgност променљиве је 37 а на конзоли се исписује 36

y = 36;

Console.WriteLine(++y); // вреgност променљиве је 37 а на конзоли се исписује 37

У примеру 4.1 приказани су оператори доделе.

Пример 4.1:

Page 25: Materijal za prvi kolokvijum

static void Main()

{

int sabiranje;

int oduzimanje ;

int mnozenje ;

int deljenje ;

double ostatak;

//Operator dodele

sabiranje = 2 + 48 + 88;

Console.WriteLine(" Rezultat sabiranje je " + sabiranje);

oduzimanje = 98 - 67 - 21;

Console.WriteLine(" Rezultat oduzimanja je " + oduzimanje);

mnozenje = 4 * 6 * 8;

Console.WriteLine(" Rezultat mnozenja je " + mnozenje);

deljenje = 68 / 3;

Console.WriteLine(" Rezultat deljenja je " + deljenje);

ostatak = 48 % 7;

Console.WriteLine(" Ostatak je " + ostatak);

}

Оператори поређења се користе за поређење две вредности а резултат тога је логичка вредност, као што је дато у табели 4.1:

Име Оператор

Једнако = =

Није једнако ! =

Веће од >

Веће или једнако >=

Maње од <

Page 26: Materijal za prvi kolokvijum

Мање или једнако <=

Табела 4.1: Оператори поређења

Логички оператори који се користе у језику C# су:

- оператор коњункције && (and) који проверава да ли су оба израза тачна;

- оператор дисјункције || (or) проверава да ли је макар један израз тачан;

- оператор негације ! (not) има истиниту вредност само када је израз нетачан.

Осим горе изложених оператора, у неким случајевима се користи и термални оператор на следећи начин:

условни израз ? израз1 : израз2.

Ако је условни израз тачан тада ће се извршити први израз, ако је нетачан тада ће се извршити други израз.

4.1 Искази

Наредба представља целовиту програмску инструкцију у C# језику. Низ наредби чини програм и преводилац их извршава по реду. Уколико преводилац наиђе на име метода, престаје да извршава текући метод и прелази на извршавање позване методе, што представља безусловни скок у програму.

До условног скока долази у случају када је вредност условног израза true, и он се остварује коришћењем кључних речи if-else или switch.

4.1.1 Исказ if-else

Исказ if се изврашава у зависности од Boolean- овог израза, и има следећу форму:

if (израз)

нареgба1

[else]

нареgбаt2

У случају када је логички израз у загради true- тачно, тада се извршава наредба 1, а наредба else не мора обавезно да се извршава, она ако постоји у коду, извршава се када је вредност логичког израза false- нетачно.

У следећем примеру је презентован програм који ће обављати следеће функције: - уношење одговарајућег податка од стране корисника1;

Page 27: Materijal za prvi kolokvijum

- уношење потврде тачности унетог податка од стране корисника;- обраду и прихватање захтева на основу унетог податка ако одговара

задатој вредности;- обраду и одбијање захтева на основу унетог податка ако одговара

задатој вредности;

Пример 4.2:

static void Main(string[] args)

{

Console.WriteLine("Unesite broj Vaseg nivoa pristupa:");

int Nivo = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Potvrdjujete vrednost nivoa pristupa?(True)");

bool VrNivoa = Convert.ToBoolean(Console.ReadLine());

{

if ((Nivo >= 5) && (VrNivoa = true))

Console.WriteLine("Ulaz Vam je dopusten. Dobrodosli i prijatan rad! ");

else

{

Console.WriteLine("PRISTUP ODBIJEN! Imate neodgovarajuci nivo pristupa");

Console.WriteLine("Pritisnite taster Enter da napustite program");

}

Одређивање најмање и највеће цифре од три унесене цифре је представљено следећим примером.

Page 28: Materijal za prvi kolokvijum

Пример 4.3:

static void Main(string[] args)

{

int cifra1, cifra2, cifra3;

int maxValue, minValue;

Console.WriteLine("Ukucajte tri razlicite cifre i svaku potvrdite sa <ENTER>:\n ");

cifra1 = int.Parse(Console.ReadLine());

cifra2 = int.Parse(Console.ReadLine());

cifra3 = int.Parse(Console.ReadLine());

maxValue = cifra1;

minValue = cifra1;

if (maxValue < cifra2)

maxValue = cifra2;

// ostaje minValue = cifra1

else

minValue = cifra2;

if (maxValue < cifra3)

maxValue = cifra3;

else if (minValue > cifra3)

minValue = cifra3;

Console.Write("Najvecu vrednost ima cifra:{0} ", maxValue);

Console.Write("Najmanju vrednost ima cifra:{0} ", minValue);

}

Да би имплементирали сложене услове користе се угњеждене наредбе if, као што је дато у примеру 4.4.

Пример 4.4

static void Main()

{

Page 29: Materijal za prvi kolokvijum

int broj = 200;

if (broj <= 200)

{

Console.WriteLine("Prva opomena!");

if (broj == 200)

{

Console.WriteLine(

"Druga opomena");

}

Else

{

Console.WriteLine("Treca opomena", broj);

}

}

}

4.1.2 Исказ switch(case)

У случајевима када је потребно користити комплексније могућности избора и краће време одзива, користи се исказ switch(case). Овај контролни исказ регулише вишеструку селекцију, пребацивањем контроле до једног од case исказа унутар тела исказа.

Switch(case) исказ се јавља у следећој форми:

switch (израз){case константан-израз:

нареgба

нареgба скока

[default:

нареgба

нареgба скока]

Page 30: Materijal za prvi kolokvijum

}

Када је вредност case израза одговарајућа тада се извршавају специфичне наредбе, а затим следе наредбе скока break или goto. Илустрацију ове наредбе би представили са:

switch(slucaj)

{

case 0:

// . . .slucaj 1 . .

break;

case 1:

// . . .slucaj 2 . . .

break;

case 2:

// . . .slucaj 3 . . .

break;

case 3:

// . . .slucaj 3 . . .

break;

case 4:

// . . .slucaj 4 . . .

break;

default:

// slucaj default;

break;

}

За switch исказ аргумент може бити типа string, као што је приказано на следећи начин:

string s = “Marketing”;

switch(s)

{

Page 31: Materijal za prvi kolokvijum

case “Manager”:

// . . .obavlja Managerske aktivnosti . . .

break;

case “Accountant”:

// . . .obavlja knjigovodstvene aktivnosti . . .

break;

case “Engineering”:

// . . .obavlja inženjerske aktivnosti . . .

break;

case “Programers”:

// . . .obavlja programerske aktivnosti . . .

break;

default:

// default vrednost

break;

}

У следећем примеру је представљен програм који обавља следеће функције:

- избор између више опција;- уношење одговарјућих вредности од стране корисника;- израчунавање запремине тела;- израчунавање масе тела;- израчунавање и приказ масе у грамима;- конверзија масе у грамима у масу у килограмима.

Пример 4.5

static void Main( )

{

short izbor;

double ppcilindra, prvstrkvadra, drstrkvadra, vppsupcilindra, mppsupcilindra, Visina, ZapKvadra, ZapCilindra, ZapSuCilindra, MasaDela, Gustina, MasaDelaKg;

Console.WriteLine("Oblik tela je: (1) Kvadar (2) Cilindar (3) Suplji cilindar");

Page 32: Materijal za prvi kolokvijum

izbor = short.Parse(Console.ReadLine());

switch (izbor)

{

case 1:

Console.WriteLine("Unesite prvu stranicu osnove kvadra(cm):");

prvstrkvadra = double.Parse(Console.ReadLine());

Console.WriteLine("Unesite drugu stranicu osnove kvadra(cm):");

drstrkvadra = double.Parse(Console.ReadLine());

Console.WriteLine("Unesite visinu kvadra(cm):");

Visina = double.Parse(Console.ReadLine());

Console.WriteLine("1-Racunam zapreminu...molim sacekajte...");

ZapKvadra = prvstrkvadra * drstrkvadra * Visina;

Console.WriteLine("Zapremina izracunata...Unesite gustinu materijala (gr/cm3):");

Gustina = double.Parse(Console.ReadLine());

Console.WriteLine("2-Racunam masu...molim sacekajte...");

MasaDela = ZapKvadra * Gustina;

Console.WriteLine("3-Konvertujem izracunatu masu u kilograme...");

MasaDelaKg = MasaDela / 1000;

Console.WriteLine("--Masa Kvadra iznosi " + MasaDelaKg + " kilograma--");

Console.WriteLine("Pritisnite taster Enter za kraj.");

break;

case 2:

Console.WriteLine("Unesite poluprecnik cilindra (cm):");

ppcilindra = double.Parse(Console.ReadLine());

Console.WriteLine("Unesite visinu cilindra (cm):");

Visina = double.Parse(Console.ReadLine());

Console.WriteLine("1-Racunam zapreminu...molim sacekajte...");

ZapCilindra = (ppcilindra * ppcilindra) * 3.14 * Visina;

Console.WriteLine("Zapremina izracunata...Unesite gustinu materijala (gr/cm3):");

Page 33: Materijal za prvi kolokvijum

Gustina = double.Parse(Console.ReadLine());

Console.WriteLine("2-Racunam masu...molim sacekajte...");

MasaDela = ZapCilindra * Gustina;

Console.WriteLine("3-Konvertujem izracunatu masu u kilograme...");

MasaDelaKg = MasaDela / 1000;

Console.WriteLine("--Masa Cilindra iznosi " + MasaDelaKg + " kilograma--");

Console.WriteLine("Pritisnite taster Enter za kraj.");

break;

case 3:

Console.WriteLine("Unesite veci poluprecnik valjka (cm):");

vppsupcilindra = double.Parse(Console.ReadLine());

Console.WriteLine("Unesite manji poluprecnik valjka (cm):");

mppsupcilindra = double.Parse(Console.ReadLine());

Console.WriteLine("Unesite visinu valjka (cm):");

Visina = double.Parse(Console.ReadLine());

Console.WriteLine("1-Racunam zapreminu...molim sacekajte...");

ZapSuCilindra = ((vppsupcilindra + mppsupcilindra) * (vppsupcilindra - mppsupcilindra)) * 3.14 * Visina;

Console.WriteLine("Zapremina izracunata...Unesite gustinu materijala (gr/cm3):");

Gustina = double.Parse(Console.ReadLine());

Console.WriteLine("2-Racunam masu...molim sacekajte...");

MasaDela = ZapSuCilindra * Gustina;

Console.WriteLine("3-Konvertujem izracunatu masu u kilograme...");

MasaDelaKg = MasaDela / 1000;

Console.WriteLine("--Masa supljeg Cilindra iznosi " + MasaDelaKg + " kilograma--");

Console.WriteLine("Pritisnite taster Enter za kraj.");

break;

default:

Console.WriteLine("Izvrsite izbor odgovarajuce opcije: (1)-(2)-(3)!");

Page 34: Materijal za prvi kolokvijum

break;

}

}

У наредним примерима је презентовано коришћење исказа switch.

Пример 4.6:

static void Main()

{

Console.WriteLine("Izaberite pice: 1=Caj 2=Fanta 3=Sprite 4=Kola");

Console.Write("Molim vas napravite izbor: ");

string s = Console.ReadLine();

int n = int.Parse(s);

int cost = 0;

switch (n)

{

case 1:

cost += 15;

break;

case 2:

cost += 20;

break;

case 3:

cost += 25;

break;

case 4:

cost += 48;

break;

default:

Console.WriteLine("Niste napravili dobar izbor. Molim Vas izaberite 1, 2, 3 ili 4.");

Page 35: Materijal za prvi kolokvijum

break;

}

if (cost != 0)

Console.WriteLine("Molim Vas da unesete {0} dinara.", cost);

Console.WriteLine("Hvala i dodjite ponovo.");

}

Пример 4.7:

static void Main(string[] args)

{

short izbor;

int strkocke, duzkvadr, sirkvadra, viskvadra;

Console.WriteLine("(1)Kocka, (2)Kvadar");

izbor = short.Parse(Console.ReadLine());

switch (izbor)

{

case 1:

Console.WriteLine("Unesite stranicu kocke");

strkocke = int.Parse(Console.ReadLine());

Console.WriteLine("Povrsina kocke je {0}", 6 * (strkocke * strkocke));

break;

case 2:

Console.WriteLine("Unesite duzinu kvadra");

duzkvadr = int.Parse(Console.ReadLine());

Console.WriteLine("Unesite sirinu kvadra");

sirkvadra = int.Parse(Console.ReadLine());

Console.WriteLine("Unesite visinu kvadra");

viskvadra = int.Parse(Console.ReadLine());

Console.WriteLine("Povrsina kvadra je {0}", 2 * (duzkvadr * sirkvadra + duzkvadr * viskvadra + sirkvadra * viskvadra));

Page 36: Materijal za prvi kolokvijum

break;

default:

Console.WriteLine("Potrebno je izabrati 1-2!");

break;

}

Пример 4.8:

static void Main()

{

short izbor;

int strkvadrata, duzpravougaonika, sirpravougaonika;

Console.WriteLine("(1)Kvadrat (2)Pravougaonik: ");

izbor=short.Parse(Console.ReadLine());

switch (izbor)

{

case 1:

Console.Write("Unesite stranicu kvadrata: ");

strkvadrata=int.Parse(Console.ReadLine());

Console.WriteLine("Obim kvadrata je

{0}",4*strkvadrata);

break;

case 2:

Console.Write("Unesite duzinu pravougaonika: ");

duzpravougaonika=int.Parse(Console.ReadLine());

Console.Write("Unesite sirinu pravougaonika: ");

sirpravougaonika=int.Parse(Console.ReadLine());

Console.WriteLine("Obim pravougaonika je

{0}",2*duzpravougaonika + 2*sirpravougaonika);

break;

default:

Page 37: Materijal za prvi kolokvijum

Console.WriteLine("Potrebno je izabrati 1-2!");

break;

}

Console.ReadLine();}

Пример 4.9:

static void Main(string[] args)

Console.WriteLine("Unesite naziv meseca (na pr. januar, februar itd.)\n");

string s = Console.ReadLine();

switch (s)

{

case "januar":

case "mart":

case "maj":

case "juli":

case "avgust":

case "oktobar":

case "decembar":

Console.WriteLine("31 dan\n");

break;

case "april":

case "juni":

case "septembar":

case "novembar":

Console.WriteLine("30 dan\n");

break;

case "februar":

Console.WriteLine("Da li je godina prestupna?\n");

char yesORno = (char)Console.Read();

if ((yesORno == 'D') || (yesORno == 'd'))

Page 38: Materijal za prvi kolokvijum

Console.WriteLine("29 dana\n");

else

Console.WriteLine("28 dana\n");

break;

default:

Console.WriteLine("Pogresan naziv meseca.");

break;

4.1.3 Исказ while

Овај исказ се изврашава све до тренутка када је Булов израз тачан. Наредба или блок наредаба се извршава све док контролни израз има логичку вредност, као што је дато са:

while (bulov izraz)

Iskaz

У доле изложеном примеру на конзоли ће бити приказани бројеви, све док је испуњен услов да су они мањи од 20, у примерима 1.24 и 1.24 је дато сумирање бројева, док је у примеру 1.26 представљена комбинација while и if исказа.

Пример 4.10:

static void Main()

{

int k = 0;

while (k != 20)

{

Console.WriteLine(k);

k++;

}

}

Пример 4.11:

Приказ суме бројева

Page 39: Materijal za prvi kolokvijum

static void Main()

{

int x =1;

int suma = 0;

while (x<14)

{

x += 1;

suma = suma + x;

Console.WriteLine(suma);

}

}

Пример 4.12:

static void Main()

{

int suma = 0;

while (suma < 50)

{

suma += 5;

Console.WriteLine(suma);

}

}

Пример 4.13:

static void Main(string[] args)

{

string signal = "Zeleno";

while (signal != "Crveno")

{

Console.Write("Koji je signal: ");

signal = Console.ReadLine();

Console.WriteLine("Primljeno: {0}", signal);

Page 40: Materijal za prvi kolokvijum

if (signal == "Belo")

{

Console.WriteLine("Greska! izadji\n");

break;

}

if (signal == "Zeleno")

{

Console.WriteLine("All is well");

continue;

}

}

}

}

Наредни пример приказује како се коришћењем исказа while, може израчунати обим, површина и запремина геометријских тела.

Пример 4.14:

namespace ObimPovrsinaZapremina

{

class Program

{

static bool flag = false;

static void Main(string[] args)

{

//while naredba koja nam sluzi da ponavlja korisnicki menu sve dok korisnik ne pritisne taster 5

while (!flag)

{

//promenljiva i ime promenljive

short izbor;

Page 41: Materijal za prvi kolokvijum

double strkvadrata, duzpravougaonika, sirpravougaonika;

//poruka

Console.WriteLine(" 1. O.Kvadrata: ");

Console.WriteLine(" 2. O.Pravougaonika:");

Console.WriteLine(" 3. V kvadra:");

Console.WriteLine(" 4. P. i V. Valjka:");

Console.WriteLine(" 5. Izlazak iz programa:");

//za upisivanje izbpor

izbor = short.Parse(Console.ReadLine());

switch (izbor)

{

case 1: // metod koji cita

Console.Write("unesite stranicu kvadrata: ");

strkvadrata = double.Parse(Console.ReadLine());

Console.WriteLine("Obim kvadrata je {0}", 4 * strkvadrata);

break;

case 2:

Console.Write("Unesite duzinu pravougaonika: ");

duzpravougaonika = double.Parse(Console.ReadLine());

Console.Write("Unesite sirinu pravougaonika: ");

sirpravougaonika = double.Parse(Console.ReadLine());

Console.WriteLine("Obim pravougaonika je {0}",

2 * duzpravougaonika + 2 * sirpravougaonika);

break;

case 3:

double Duzina, Sirina, Visina, ZapKvadra;

Console.WriteLine("Unesite duzinu D(m):");

Console.WriteLine("Unesite sirinun S(m):");

Console.WriteLine("Unesite visinu V(m):");

Page 42: Materijal za prvi kolokvijum

Duzina = double.Parse(Console.ReadLine());

Sirina = double.Parse(Console.ReadLine());

Visina = double.Parse(Console.ReadLine());

ZapKvadra = 2 * Duzina * Sirina + 2 * Duzina * Visina +

2 * Sirina * Visina;

Console.WriteLine("Zapremina iznosi " + ZapKvadra +

" kubnih metara");

break;

case 4:

double PoluPrecnik, PovrsinaValjka, ZapreminaValjka;

Console.WriteLine("Unesite Visinu Valjka :");

Visina = double.Parse(Console.ReadLine());

Console.WriteLine("Unesite Polu Precnik Valjka :");

PoluPrecnik = double.Parse(Console.ReadLine());

PovrsinaValjka = 2 * PoluPrecnik * 3.14 * (PoluPrecnik + Visina);

ZapreminaValjka = PoluPrecnik * PoluPrecnik * 3.14 * Visina;

Console.WriteLine("Povrsina Valjka P=2*r*Pi*(r+h) je: "

+ PovrsinaValjka + "m2 A Zapremina Valjka V=r*r*Pi*h je: "

+ ZapreminaValjka + " m3");

break;

//case 5 ima za zadatak da promeni nasu boolean vrednost i tako prekine switch naredbu

case 5: flag = true; break;

default: Console.WriteLine("Nije unesena ni jedna moguca vrednost?!!!");

break;

}

Console.ReadLine();

}

}

}

Page 43: Materijal za prvi kolokvijum

}

Приликом покретања програма корисник се опредељује за геометријско тело чији обим, површину и запремину жели израчунати, као што је дато на слици 4.1:

Слика 4.1: Избор геометријског тела на почетку програма

Уколико корисник изабере опцију израчунавања површине и запремине ваљка или квадра, тада ће у зависности од унете вредности на конзоли бити приказани могући екрани:

Слика 4.2: Израчунавање површине и запремине ваљка

Page 44: Materijal za prvi kolokvijum

Слика 4.3: Израчунавање површине и запремине квадра

После извршења сваког упита поново се појављује кориснички мени о избору нове операције, као што је дато на слици 4.4:

Слика 4.4: Поновна појава корисничког менија

4.1.4 Исказ do

Уколико је потребно да се тело петље изврши барем једанпут, користи се do исказ у следећем облику:

do

iskaz

while (bulov izraz)

Наредни примери приказују коришћење исказа dо. У примеру 4.15 дата је иницијална вредност променљиве, затим се вредност променљиве повећава за 1 и она се приказује на конзоли. Тело петље се извршава све док важи услов да је вредност променљиве мања од 12.

Пример 4.15:

static void Main()

{

int i = 1;

do

{

Console.WriteLine(i);

Page 45: Materijal za prvi kolokvijum

i++;

}

while (i < 12);

}

Наредни програм штампа све степене двојке до границе која се задаје са тастатуре.

Пример 4.16:

static void Main(string[] args)

{

int stepen = 2;

Console.WriteLine("Unesite granicnu vrednost za stepen dvojke:\n");

int granica = int.Parse(Console.ReadLine());

do

{

Console.Write(stepen + "\t");

stepen *= 2;

}

while (stepen <= granica);

Console.WriteLine();

}

4.1.5 Исказ for

Исказ for се може представити на следећи начин:

for ([иницијација]; [булов израз]; [итерација]) исказ

Примена исказа for је представљена у наредним примерима.

Пример 4.17:

Пример оgређивања бројева gељивих са 6

static void Main(string[] args)

{

for (int k = 0; k < 150; к++)

Page 46: Materijal za prvi kolokvijum

{

if (к % 6 == 0)

{

Console.WriteLine("\t{0}", к);

}

}

У случају када желимо да прикажемо интервал онда се приказују границе интервала, променљива се увећава за 3, што се може приказати следећим кодом:

Пример 4.18:

class Program

{

static void Main(string[] args)

{

for (int i = 0; i < 90; i+=3)

{

Console.WriteLine("\t{0}", i);

}

}

}

Коришћење исказа for у добијању суме дата је у коду који је доле приказан:

Пример 4.19:

static void Main()

{

int sum = 0;

for (int z = 1; z < 17; ++z)

{

sum = sum + z;

}

Page 47: Materijal za prvi kolokvijum

Console.WriteLine("Suma brojeva je " + sum);

}

Пример 4.20:

Сумирање непарних бројева

static public void Main()

{

int sum = 0;

for (int y = 1; y < 12; ++y)

{

if (y%2 != 0)

sum = sum + y;

}

Console.WriteLine("Suma neparnih brojeva je " + sum);

}

Пример 4.21:

Сумирање парних бројева

static public void Main()

{

int sum = 0;

for (int y = 1; y < 12; ++y)

{

if (y%2 == 0)

sum = sum + y;

}

Console.WriteLine("Suma parnih brojeva je " + sum);

}

4.1.6 Исказ break и continue

Page 48: Materijal za prvi kolokvijum

Исказ continue се користи када програмери желе да се врате на почетак петље, при чему се избегава извршавање преосталих наредби петље а исказ break омогућава прекидање петље, као што је илустровано следећим примерима.

Пример 4.22:

static void Main()

{

for (int broj = 1; broj <= 12; broj++)

{

if (broj >= 6)

break; //ako je zadovoljen uslov

//izaci iz petlje

Console.WriteLine(broj);

}

Console.Read();

}

Page 49: Materijal za prvi kolokvijum

Пример 4.23:

static void Main()

{

for (int y = 1; y < 12; ++y)

{

Console.WriteLine(y);

if (y != 6)

continue;

else

break;

}

}

ТЕСТ 4

1. Шта су то префиксна и постфиксна увећања?

2. Који су све оператори поређења?

3. Написати пример програма за if else исказ.

4. Приказати исказ за while и do. Користити сопствене примере.

5. Сумирати све парне бројеве мање од 32. Написати и извршити програм.

6. Сумирати све непарне бројеве мање од 24. Написати и извршити програм.

7. Представити исказ for.

8. Написати програм за одређивање површине коцке и квадра.

9. Написати исказ за switch case исказ.

10. Написати произвољни програм коришћењем switch исказа

11. Написати исказ за break, continue.

Page 50: Materijal za prvi kolokvijum

V. НИЗОВИ

Када желимо да оперишемо са скупом одређених ставки, тада се појављује потреба за коришћењем низа. Основна карактеристика низа је да су сви његови елементи истог типа, као што су целобројни бројеви, карактери или неки други тип елемента, за разлику од поља у класи или структури који могу бити различитог типа.

5.1 Једнодимензиони низови

Низови се могу декларисати на следећи начин:

type[] array-name; односно int Mojniz.

Кључна реч type означава тип елемента низа, затим пар угластих заграда показује да се ради о низу података, а затим следи име низа.

Иницијализовање низа, односно стварање новог примерка низа се остварује коришћењем кључне речи new:

mojniz = new int[5];.

Низови су референцни типови као и класе, тако да приликом њиховог декларисања не долази до стварања новог примерка низа.

У следећем примеру је иницијализован низ од шест елемената, при чему су сви елементи целобројног типа. Почетни елемент овог низа је 1 а индекс овог елемента је 0, крајњи елемент низа је 6 док је његов припадајући индекс 5.

Пример 5.1:

static void Main()

{

int[] arr = new int[6] { 1, 2, 3, 4, 5, 6 };

Console.WriteLine(arr[3]);

}

Враћен је елемент са индексом 3, а пошто је почетни индекс 0, на конзоли се приказује број 4.

Приликом копирања низовне променљиве, добијају се две референце истог примерка низа, јер су низови референцни а не вредносни типови.

Page 51: Materijal za prvi kolokvijum

Копирање примерка низа коришћењем метода примерка Clone класе System.Array, је приказано у следећем примеру Низ kopija представља копију низа arr. На излазу је приказан четврти члан низа 20, што је и дато доле приказаним кодом:

Пример 5.2:

static void Main()

{

int[] arr = {2, 8, 16, 20 };

int[] kopija = (int[])arr.Clone();

Console.WriteLine(kopija[3]);

}

За обављање итерације кроз све чланове низа користи се исказ foreach, који декларише променљиву итерације, а то би у случају доњег примера била int clan. Исказ foreach пролази увек кроз цео низ и то од индекса 0 па до индекса који је једнак укупној дужини низа мање 1.

Пример 5.3:

static void Main()

{

int[] arr = new int[4]{2, 8, 16, 20 };

foreach (int clan in arr)

{

Console.WriteLine(clan);

}

}

Коришћењем статичког метода Copy класе System.Array, вредности елемената низа се могу лако ископирати и приказати на конзоли, као што је дато у доњем примеру.

Page 52: Materijal za prvi kolokvijum

Пример 5.4:

static void Main(string[] args)

{

int[] arr = { 2, 8, 16, 20 };

int[] kopija_niza = new int[4];

Array.Copy(arr, kopija_niza, 4);

foreach ( int clan in kopija_niza)

{

Console.WriteLine(clan);

}

}

У следећем примеру је употребљена foreach петља, за израчунавање збира елемената матрице.

Пример 5.5:

static void Main(string[] args)

{

//napraviti C# program koji za dvodimenzionalnu matricu reda 3

//izracunava zbir svih elemenata matrice

//matrica je unapred definisana

//elementi matrice

int[,] matrica = { { 1, 2, 3 },

{ 41, 42, 43 },

{ 100, 200, 300 } };

//suma elemenata

int intSuma = 0;

Console.WriteLine("Matrica:");

//izracunavanje zbira elemenata i prikaz elemenata matrice

foreach (int broj in matrica)

{

Page 53: Materijal za prvi kolokvijum

intSuma += broj;

Console.Write("{0} ", broj);

}

//end foreach

Console.WriteLine () ;

//prikaz sume elemenata

Console.WriteLine("Suma elemenata matrice je: {0}",intSuma);

//sacekaj da korisnik pritisne neki taster

Console.WriteLine(" \n Pritisnite neki taster za kraj….");

Console.ReadKey ();

}

Итерација се обавља коришћењем foreach петље.

Foreach (int element in elements);

Овај исказ пролази кроз цео низ и то од индекса нула до индекса Length-1.

За приказивање свих чланова низа на конзоли, користи се и исказ for, који има предности у односу на foreach петљу у случајевима када је потребно осим вредности елемената приказати и вредност њиховог индекса, или приликом измене елемената низа, јер се исказ foreach може користити само за читање, као у случају коришћења итерације уназад.

У наредном примеру су приказани сви елементи низа коришћењем for петље. Полази се од индекса 0, а завршава се са индексом arr.Length.

Пример 5.6:

static void Main(string[] args)

{

int[] arr = { 2, 8, 16, 20 };

for (int index = 0; index != arr.Length; index ++)

{

int clan = arr[index];

Console.WriteLine(clan);

Page 54: Materijal za prvi kolokvijum

}

}

Примена foreach петље у приказивању броја оних елемената низа који су већи од 5, и оних који су мањи од 5, је дата примером доле. После почетне иницијације низа, пролази се кроз све елементе низа, и у променљивама се памти њихова вредност, а затим се на конзоли приказује резултат.

Пример 5.7:

static void Main()

{

int[] niz={0,1,3,4,8,10,11,16};

int veciodpet = 0;

int ostali = 0;

foreach (int i in niz)

{

if (i > 5)

veciodpet++;

else

ostali++;

}

Console.WriteLine("Ima " + veciodpet + " broja vecih od 5 i " + ostali + " broja manjih od 5.");

Console.ReadLine();

}

5.2 Вишедимензиони низови

У примеру представљања вишедимензионог низа је коришћена итерација кроз низ, односно кроз све елементе низа. На конзоли су приказани индекси елемената од 0 до 4, као и сви елементи који припадају низу. Једну врсту низа чине елементи чије вредности су индекси низа почев од почетног елемента 0, па до крајњег елемента чији је индекс 4, што се постиже for петљом, док другу врсту чине елементи датог низа.

Коришћењем својства низа Length, може се одредити дужина низа.

Пример 5.8:

Page 55: Materijal za prvi kolokvijum

static void Main()

{

int[] niz = new int[5] {1, 6, 9, 12, 26};

for (int i = 0; i != niz.Length; i++)

{

Console.Write(i + " ");

int konniz = niz[i];

Console.WriteLine(konniz);

}

}

Поред константних вредности елемената низа, оне могу бити и произвољне, као што је дато са:

Proizvoljniniz p = new Random();

Int[] niz = new int[10]

Затим се на конзоли могу приказати вредности елемената низа, као што је објашњено у претходним примерима.

Употребом for петље у променљивој Suma, памти се вредност суме свих елемената низа, а затим се одређује просечна вредност.

Пример 5.9:

static void Main(string[] args)

{

double[] niz = new double[5] {1, 6, 9, 12, 26};

// Skladistenje vrednosti niza

// u promenljivoj Suma

double Suma = 0;

for (int i = 0; i != niz.Length; i++)

{

Suma = Suma + niz[i];

}

// izracunavanje prosecne vrednosti

Page 56: Materijal za prvi kolokvijum

double Prosek = Suma / 5;

Console.WriteLine(Prosek);

Console.WriteLine("Press Enter to terminate...");

Console.Read();

}

Пример 5.10:

static void Main(string[] args)

{

// Deklaracija i inicijalizacija niza:

string[] Meseci = new string[] { "Januar", "Februar", "Mart", "April", "Maj", "Jun", "Juli", "August", "Sptembar", "Oktobar", "Novembar", "Decembar" };

// Prenosenje niza kao parametra:

StampajNiz(Meseci);

}

static void StampajNiz(string[] w)

{

for (int i = 0; i < w.Length; i++)

Console.Write(w[i] + "{0}", i < w.Length - 1 ? " " : "");

Console.WriteLine();

}

Page 57: Materijal za prvi kolokvijum

Пример 5.11:

Иницијализација дводимензионалног низа се може представити као:

static void Main()

{

int[,] visniz = new int[,] { { 1, 2 }, { 3, 4 },

{ 5, 6 }, { 7, 8 } };

Console.WriteLine(visniz[2,1]);

}

На овај начин се добија вредност 6.

Пример 5.12:

static void StampaniNiz(int[,] l)

{

// Prikazati elemente niza:

for (int k = 0; k < 4; k++)

for (int m = 0; m < 2; m++)

Console.WriteLine("Element({0},{1})={2}", k, m, l[k, m]);

}

static void Main()

{

StampaniNiz(new int[,] { { 14, 15 }, { 16, 17 }, { 18, 19 }, { 20, 21 } });

}

Може се дефинисати и низ чији су елементи такође низови. Елементи таквог низа могу бити различитих димензија и величине, као на пример:

int[][] mojNiz = new int [][]

{

new int[] {4,7,9,14,16},

new int[] {18,22,42,63,72},

new int[] {24,26, 29} };

или:

Page 58: Materijal za prvi kolokvijum

int[][] myJaggedArray =

{

new int[] {4,7,9,14,16},

new int[] {18,22,42,63,72},

new int[] {24,26, 29}

};

Приказ низа чији су елементи такође низови је дат у коду доле:

Пример 5.13:

// Deklarisati niz:

int[][] niz = new int[2][];

// Initialize the elements:

niz[0] = new int[4] { 2, 7, 12, 18};

niz[1] = new int[3] { 9, 11, 17 };

// Prikazati elemente niza:

for (int i = 0; i < niz.Length; i++)

{

System.Console.Write("Element({0}): ", i);

for (int j = 0; j < niz[i].Length; j++)

{

System.Console.Write("{0}{1}", niz[i][j], j == (niz[i].Length - 1) ? "" : " ");

}

System.Console.WriteLine();

}

// Zadrzati konzolni prozor otvoren u Debug modu.

System.Console.WriteLine("Press any key to exit.");

System.Console.ReadKey();

Пример креирања програма који израчунава збир свих елемената матрице реда 3x3, дата је у доле приказаном коду:

Пример 5.14:

Page 59: Materijal za prvi kolokvijum

static void Main()

{

//napraviti C# program koji za dvodimenzionalnu matricu reda 3 //izracunava zbir svih elemenata matric//matrica je unapred definisana

//elementi matrice

int[,] matrica = { { 1, 2, 3 },

{ 41, 42, 43 },

{ 100, 200, 300 } };

//suma elemenata

int intSuma = 0;

Console.WriteLine("Matrica:");

//izracunavanje zbira elemenata i prikaz elemenata matrice

foreach (int broj in matrica)

{

intSuma += broj ;

Console.Write("{0} ", broj);

} //end foreach

Console.WriteLine();

//prikaz sume elemenata

Console.WriteLine("suma elemenata matrice je: {0}",intSuma);

//sacekaj da korisnik pritisne neki taster

Console.WriteLine("\n Pritisnite neki taster za kraj….");

Console.ReadKey ();

}

Приказ елемената матрице из претходног примера изложен је у следећем коду:

Page 60: Materijal za prvi kolokvijum

Пример 5.15:

static void Main()

{

const int redovi = 3;

const int kolone =3;

//C# program koji za dvodimenzionalnu matricu reda 3 //prikazuje elemente matrice

int[,] matrica = { { 1, 2, 3 },

{ 41, 42, 43 },

{ 100, 200, 300 } };

for (int i = 0; i < redovi; i++)

{

for (int j = 0; j < kolone; j++)

{

Console.WriteLine("Matrica[{0}, {1}] = {2}", i, j, matrica[i, j]);

}

}

}

Израчунавање просечне вредности елемената низа је приказано следећим кодом:

Пример 5.16:

static void Main()

{

double [ ] niz = new double [13 ] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};

double sum = 0;

for ( int i = 0 ; i != niz.Length; i++)

{

sum = sum + niz [ i ];

}

Double Prosek = sum /13;

Page 61: Materijal za prvi kolokvijum

Console.WriteLine (Prosek) ;

Console.WriteLine( "Pritisnite Enter da zavrsite program…");

Console.Read();

}

У следећем примеру је су приказани елементи низа коришћењем подпрограма:

Пример 5.17:

static void PunjenjeNiza(out int[] arr)

{

// Inicijalizovanje niza:

arr = new int[4] { 1, 8, 16, 64};

}

static void Main()

{

int[] niz; // Inicijalizacija nije neophodna

PunjenjeNiza(out niz);

// Prikaz elemenata niza:

System.Console.WriteLine("Elementi niza su:");

for (int i = 0; i < niz.Length; i++)

{

System.Console.Write(niz[i] + " ");

}

// Zadrzati otvoren konzolni prozor u Debug modu.

System.Console.WriteLine("Press any key to exit.");

}

5.3 Класе колекција

Класа која се користи за додавање или уклањање елемената из низа је ArrayList.

Ако желимо да додамо нови елемент у низ користи се метод Add. Креира се нови низ коришћењем команде:

ArrayList niz = new ArrayList();

Page 62: Materijal za prvi kolokvijum

а затим се попуњава низ типа ArrayList као што је дато са:

foreach (int element in new int[10] { 12, 10, 8, 6, 5, 4, 3, 2, 1, 0}).

Додавање новог елемента у низ се остварује употребом метода Add, као што је дато:

niz.Add(14).

Уколико треба да уклонимо елемент из низа користи се метод Remove, као што је приказано:

//уклонити четврти елемент, инgекс 3

Niz.RemoveAt(3).

Класе Queue користи колекцију први ушао последњи изашао, тако да се елемент реду за чекање додаје на крају (Enqueue) а напушта га када се дође на почетак (Dequeue).

Изабрани елемент напушта ред за чекање када дође на почетак (Dequeue), а додаје се реду за чекање када је на почетку (Enqueue).

У наредном примеру је приказана класа Queue, при чему посебну пажњу треба обратити на референцу, using System.Collections;

Пример 5.18:

using System;

using System.Collections;

......

public static void Main()

{

// Kreira i inicijalizuje novu klasu

Queue mojQ = new Queue();

// Prikazuje niz

Console.Write("Elementi niza su:");

StampajVrednosti(mojQ);

}

public static void StampajVrednosti(IEnumerable myCollection)

{

foreach (int broj in new int[6] { 11, 16, 18, 22, 26, 29 })

Page 63: Materijal za prvi kolokvijum

Console.Write(" {0}", broj);

Console.WriteLine();

}

Конекција први ушао, први изашао спроводи класа Stack. Са врха стека се уклања прва ставка, али се та ставка и прва уклања, како је приказано у следећем примеру:

Пример 5.19:

using System;

using System.Collections;

..................

public static void Main() { Stack numbers = new Stack(); numbers.Push(1); numbers.Push(2); numbers.Push(3); numbers.Push(4); numbers.Push(6);

foreach (int number in numbers) { Console.WriteLine(number + " je stavljen na stek"); }

}

Page 64: Materijal za prvi kolokvijum

Приликом писања кода обавезно би требало користити референцу using System.Collections. Променљива numbers је типа класе Stack, а коришћењем методе Push() умеће се објекат на врх стека.

5.4 Знаковни низови

Према знаковном низу програм C# се односи као према класи, односно као према објектном типу. Декларација класе String је представљена на следећи начин:

Public sealed class String:

Icomparable<T>, Icloneable, Iconvertible, Ienumerable<T>

Уобичајени поступак за добијање знаковног низа је додељивање променљивој типа string, низ знакова под наводницима, или коришћење литерала знаковног низа који почињу симболом @, или коришћењем методе ToString().

Декларисање и иницијализација стринга је дата са:

// Deklaracija bez inicijalizacije.

string poruka1;

// Inicijalizacija na nulu.

string poruka2 = null;

// Inicijalizacija na prazan string.

string poruka3 = System.String.Empty;

//Inicijalizacija sa regularnim string literalima.

string staraPutanja = "c:\\Program Files\\Microsoft Visual Studio 8.0";

// Inicijalizacija sa raznovrsnim string literalima.

string novaPutanja = @"c:\Program Files\Microsoft Visual Studio 9.0";

// Umesto klase String moze se koristiti i System.String .

System.String pozdrav= "Dobar dan!";

// Koriscenje kod lokalnih promenljivih

var privremena = "System.String!";

Page 65: Materijal za prvi kolokvijum

У доле приказаном примеру су дате операције са знаковним низовима.

Пример 5.20:

static void Main()

{

string prviniz = "Prvom nizu";

string druginiz = " Dodajemo drugi niz";

//nadovezivanje dva niza

string zbir = string.Concat(prviniz, druginiz);

Console.WriteLine("Primer nadovezivanja nizova: {0} ", zbir);

//odredjivanje duzine niza

Console.WriteLine("Duzina niza iznosi {0} karaktera", zbir.Length);

//odredjivanje mesta karaktera u nizu

Console.WriteLine("Na 9-tom mestu u nizu se nalazi karakter {0} ", zbir[8]);

}

Надовезивање низова је презентовано следећим примером:

Пример 5.21:

static void Main()

{

string s1 = "Prvi niz ";

string s2 = "nadovezan je na drugi niz,";

string s3 = "i nadovezan na treci niz.";

// Knkatenacija odnosno nadovezivanje nizovas s1, s2 i s3

s1 += s2;

s2 += s3;

System.Console.WriteLine(s2);

}

Page 66: Materijal za prvi kolokvijum

Ако се креира референца за стринг а затим се промени оригинални стринг, референца ће и даље показивати на оригинални стринг, како је илустровано на следећи начин:

Пример 5.22:

static void Main()

{

string s1 = "Prva rec ";

string s2 = s1;

s1 += "Druga rec";

System.Console.WriteLine(s2);

}

Низови знакова под наводницима могу да садрже такозване излазне секвенце које почињу обрнутом косом цртом, и које представљају прелазак у нови ред, као што је представљено наредним примером:

Пример 5.23:

static void Main()

{

string kolone = "Kolona 1\tKolona 2\tKolona 3\tKolona4";

//Izlaz: Kolona 1 Kolona 2 Kolona 3 Kolona 4

Console.WriteLine("Izlazni rezultati: {0}", kolone);

string redovi = "Red1\r\nRed 2\r\nRed 3\r\nRed 4";

/* Izlaz:

Red 1

Red 2

Red 3

Red 4

*/

Console.WriteLine("Izlazni rezultati: {0}", redovi);

string naslov = "\"Ov\u0041kav je pravi naslov\", knjige";

Console.WriteLine("Izlazni rezultati: {0}", naslov);

}

Page 67: Materijal za prvi kolokvijum

Уколико знаковни низ треба тумачити дословно без обзира на његову дужину, тада се користе литерали знаковног низа који почињу симболом @, као што је презентовано следећим примером:

Пример 5.24:

static void Main()

{

string putanja = @"C:\MyDocuments\Proba\";

//Izlaz: C:\MyDocuments\Proba\

Console.WriteLine("Izlazni rezultati: {0}", putanja);

string text = @"Ovo je poruka u vise redova ! ovo je prvi red.

Ovo je drugi red.

ovo je treci red,...";

/* Izlaz:

Ovo je poruka u vise redova ! ovo je prvi red.

Ovo je drugi red.

Ovo je treci red,...

*/

Console.WriteLine("Izlazni rezultati: {0}", text);

string upit = @"Njihovo prezime je ""Jovanovici.""";

//Izlaz: Njihovo prezime je "Jovanovici."

Console.WriteLine("Izlazni rezultati: {0}", upit);

}

Приказивање карактера уназад је приказано следећим примером:

Пример 5.25:

static void Main()

{

string stampanje_unazad = "Stampanje karaktera unazad";

for (int i = 0; i < stampanje_unazad.Length; i++)

{ System.Console.Write(stampanje_unazad[stampanje_unazad.Length - i - 1]);}}

Page 68: Materijal za prvi kolokvijum

Табела излазних секвенци је дата у доле приказаној табели:

Излазна секвенца

Име карактера Unicode енкодовање

\' Једноструки наводник 0x0027

\" Двоструки наводник 0x0022

\\ Двострука коса црта 0x005C

\0 Нула 0x0000

\a Опомена 0x0007

\b Брисање карактера уназад 0x0008

\f Параметар везан за подешавање

штампања

0x000C

\n Нова линија 0x000A

\r Притисак на тастер enter 0x000D

\t Хоризонтални табулатор 0x0009

\U Unicode излазна секвенца за такозване

“сурогат парове”

\Unnnnnnnn

\u Unicode излазна секвенца \u0041 = "A"

\v Вертикални табулатор 0x000B

\x Unicode излазна секвенца слична "\u" али

промељиве дужине.

\x0041 = "A"

Табела 5.1

Нулти стринг садржи нула карактера и често се користи да представи празно текст поље. У примеру 5.26 је презентовано коришћење празног стринга.

Page 69: Materijal za prvi kolokvijum

Пример 5.26:

static void Main()

{

string pocstr = "pozdrav";

string nullStr = null;

string prazanStr = String.Empty;

string privremeniStr = pocstr + nullStr;

// Sledeca linija koda prikazuje poruku "pozdrav."

Console.WriteLine(privremeniStr);

bool b = (prazanStr == nullStr);

// Sledeca linija koda prikazuje False.

Console.WriteLine(b);

// Sledeca linija koda gradi novi string.

string newStr = prazanStr + nullStr;

// Null string i prazan string se ponasaju razlicito.

Console.WriteLine(prazanStr.Length);

Console.WriteLine(newStr.Length);

// Karakter null moze da se predstavi i izracuna .

string s1 = "\x0" + "prvi string";

string s2 = "prvi string" + "\x0";

// Sledeca linija prikazuje string "* prvi string*".

Console.WriteLine("*" + s1 + "*");

// Sledeca linija prikazuje "prvi string *".

Console.WriteLine("*" + s2 + "*");

// Sledeca linija prikazuje 12.

Console.WriteLine(s2.Length);

}

Page 70: Materijal za prvi kolokvijum

StringBuilder класа креира локацију за складиштење стрингова (buffer) која обезбеђује боље извођење, као у случају великог броја манипулација са стринговима, како је дато следећим кодом:

Пример 5.27:

static void Main()

{

System.Text.StringBuilder sb = new System.Text.StringBuilder("*zlaz: prikazana poruka");

sb[0] = 'I';

System.Console.WriteLine(sb.ToString());

System.Console.ReadLine();

//Izlaz: prikazana poruka

}

У наредном примеру је илустровано на који начин се StringBuilder објекат користи за креирање стринга од нумеричких типова.

Пример 5.28:

static void Main()

{

System.Text.StringBuilder sb = new System.Text.StringBuilder();

// Kreira string sastavljen od brojeva 1 - 16

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

{

sb.Append(i.ToString());

}

System.Console.WriteLine(sb); // prikaz brojeva

// Kopira jedan karakter stringa

sb[0] = sb[4];

System.Console.WriteLine(sb); // prikaz brojeva

}

Page 71: Materijal za prvi kolokvijum

ТЕСТ 5

1. Изабрати произвољни низ и приказати га на конзоли.

2. Израчунати суму произвољног низа од 6 чланова и израчунати њихову просечну вредност.

3. Израчунати просечну вредност збира чланова низа.

4. Приказати на конзоли произвољни дводимензионални низ.

5. Шта су класе колекција?

6. Како се додају и уклањају елементи из низа?

7. Коришћењем foreach додати елементе низа и приказати их на конзоли.

8. Приказати пример коришћењем Queue класе.

9. Приказати пример коришћења Stack класе.

10. Шта су то знаковни низови?

11. Како се два или више низa може надовезати?

12. Саставити знаковни низ а затим одредити његову дужину и одредити четврти елемент низа.