You are on page 1of 71

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-а. Намера је да различити оперативни системи подрже неке или све ове
модуле, у зависности од својих карактеристика. Део 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
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;
Слика 1.2: Компајлирање у Microsoft-овом међујезику
в) када се програм покрене он се поново преводи али овог пута помоћу
правовременог преводиоца (Just In Time или JIT ), што је дато на следећој
слици:

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


Time или JIT )
г) резултат превођења је машински код кога извршава процесор рачунара.
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-ом.
Овај именски простор обезбеђује GDI+
System.Drawing функционалност и класе које су неопходне за
графичко рендеровање.
System.IO Садржи типове за управљање системом фајлова I/O.
Овај именски простор садржи класе неопходне за
System.Math решавање математичких проблема укључујући и
тригонометрију.
Овај именски простор обезбеђује подршку за добијање
System.Reflection информација и динамичко креирање типова у
тренутку извршавања.
Овај простор обезбеђује подршку за добијање дозвола,
System.Security
криптографију, и сигурност за приступ коду.
System.Threading Овај именски простор садржи класе неопходне за
примену вишенитних апликација.
Овај именски простор садржи типове који су
System.Windows.Forms укључени у креирање стандардни Windows
апликација.

ТЕСТ 1

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

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


3. Које све врсте апликације се користе и опишите њихове особине?
4. Шта представља програмски склоп и из чега се састоји?
5. Описати процес креирања апликације.
6. Објаснити појам именског простора.
7. Који су типични именски простори?.
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 означава да метода нема повратну вредност односно када се заврши
извршење методе 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# треба водити рачуна о малим и великим словима, тако да уколико се
напише име неке методе или објекта почетним малим словом може се
направити грешка коју је касније тешко открити.
Написани програм треба превести и извршити избором опције 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);
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();
}
Пример 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 ");
}
Пример 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):”);
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");
}
У следећем примеру је представљено израчунавање масе шупљег цилиндра.
Програм ће обављати следеће функције:
- уношење одговарјућих вредности од стране корисника;
- израчунавање запремине тела;
- израчунавање масе тела
- израчунавање и приказ масе у грамима
- конверзија масе у грамима у масу у килограмима.
Пример 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.");
}
ТЕСТ 2

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


2. На конзоли унети вредност у центриметрима, а на излаѕу приказати
вредност у инчима узимајући у обзир да је 1” = 2.54 cm. Написати код а
затим га извршити.
3. Написати програм за израчунавање површине квадрата и правоугаоника.
4. Шта представља Main() метод?
5. Које су излазне секвенце које се користе у C# програмском језику?.
6. Који је разлог писања коментара у коду?.
7. Написати код за израчунавање површине зарубљене пирамиде..
8. Изабрати неколико геометријских тела а затим написати програм за
израчунавање њихове запремине у зависности од улазних параметара.
III. ТИПОВИ ПОДАТАКА
У .NET окружењу користи се велики број типова који омогућавају чување,
преношење и манипулацију вредности између чланова апликације.
Преводиоцу је неопходна информација о величини и могућностима објекта, а
управо ту информацију добија од типа објекта. У коду је неопходно
декларисати тип сваког новог објекта, а они могу бити уграђени (built-in) у
сам језик, и кориснички типови (user defined types) које креира сам корисник.
Осим ове поделе постоји и подела типова на вредносне и референтне у
зависности од тога како се вредност смешта у меморију.
Променљиве дефинишу места за чување вредности у меморији. Декларација
променљивих представља дефинисање коју ће вредност променљива чувати.
У 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 значајних цифара
прецизности. Када је потребна већа прецизност тада се користи тип података
double, а за финансијске прорачуне где је потребна велика прецизност у виду
28 значајних цифара користи се тип података decimal
Уколико желимо да се литерал третира као decimal, требало би користити
суфикс m или M, као што је дато са:
decimal mojNovac = 292.52m;
Преводилац претпоставља да је сваки број са децималном тачком типа double,
стога је за типове податaка float потребно додати префикс f.
У табели 3.2 за тип података double дат је распон, и број значајних цифара.

double ±5.0 × 10−324 to 15-16 значајних System.Double


±1.7 × 10308 цифара

Табела 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. Затим се проверава да ли је унети знак
карактер или не. Уколико се ради о карактеру тада се врши провера да ли се
ради о великом или малом слову, и у зависности од тога се исписује порука на
конзоли. У случају када знак није карактер на конзоли се исписује
одговарајућа порука.
Пример 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:
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 је приказан небројиви тип.
Пример 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 Конверзија типова података


Временом се указује потреба за претварањем једног типа података у други тип
података. Податке можемо конвертовати аутоматски односно имплицитно, и
експлицитно што значи да се мора специфично питати за конверзију која ће
бити извршена.
Имплицитна конверзија се примењује када не постоји бојазан од губитка
података, као што је дато са:
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";
// 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, тада користимо спајање низа знакова или конкатенацију, као што је
представљено у наредном примеру:
Пример 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 функције?
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++); // вредност променљиве је 37 а на конзоли се исписује
36
y = 36;
Console.WriteLine(++y); // вредност променљиве је 37 а на конзоли се исписује
37
У примеру 4.1 приказани су оператори доделе.

Пример 4.1:
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ње од <

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


Табела 4.1: Оператори поређења
Логички оператори који се користе у језику C# су:
- оператор коњункције && (and) који проверава да ли су оба израза тачна;
- оператор дисјункције || (or) проверава да ли је макар један израз тачан;
- оператор негације ! (not) има истиниту вредност само када је израз нетачан.
Осим горе изложених оператора, у неким случајевима се користи и термални
оператор на следећи начин:
условни израз ? израз1 : израз2.
Ако је условни израз тачан тада ће се извршити први израз, ако је нетачан тада
ће се извршити други израз.

4.1 Искази
Наредба представља целовиту програмску инструкцију у C# језику. Низ
наредби чини програм и преводилац их извршава по реду. Уколико
преводилац наиђе на име метода, престаје да извршава текући метод и прелази
на извршавање позване методе, што представља безусловни скок у програму.
До условног скока долази у случају када је вредност условног израза true, и он
се остварује коришћењем кључних речи if-else или switch.
4.1.1 Исказ if-else

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


следећу форму:
if (израз)
наредба1
[else]
наредбаt2
У случају када је логички израз у загради true- тачно, тада се извршава
наредба 1, а наредба else не мора обавезно да се извршава, она ако постоји у
коду, извршава се када је вредност логичког израза false- нетачно.
У следећем примеру је презентован програм који ће обављати следеће
функције:
- уношење одговарајућег податка од стране корисника1;
- уношење потврде тачности унетог податка од стране корисника;
- обраду и прихватање захтева на основу унетог податка ако одговара
задатој вредности;
- обраду и одбијање захтева на основу унетог податка ако одговара
задатој вредности;

Пример 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");
}
Одређивање најмање и највеће цифре од три унесене цифре је представљено
следећим примером.
Пример 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()
{
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 константан-израз:
наредба
наредба скока
[default:
наредба
наредба скока]
}
Када је вредност 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)
{
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");
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):");
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)!");
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.");
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));
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:
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'))
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:

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


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);
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;
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):");
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();
}
}
}
}
Приликом покретања програма корисник се опредељује за геометријско тело
чији обим, површину и запремину жели израчунати, као што је дато на слици
4.1:

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

Уколико корисник изабере опцију израчунавања површине и запремине ваљка


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

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


Слика 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);
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:
Пример одређивања бројева дељивих са 6
static void Main(string[] args)
{
for (int k = 0; k < 150; к++)
{
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;
}
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


Исказ 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();
}
Пример 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.
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.
Приликом копирања низовне променљиве, добијају се две референце истог
примерка низа, јер су низови референцни а не вредносни типови.
Копирање примерка низа коришћењем метода примерка 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, вредности елемената


низа се могу лако ископирати и приказати на конзоли, као што је дато у доњем
примеру.
Пример 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)
{
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);
}
}
Примена 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:
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
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();
}
Пример 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} };
или:
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:
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 ();
}
Приказ елемената матрице из претходног примера изложен је у следећем
коду:
Пример 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;
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();
а затим се попуњава низ типа ArrayList као што је дато са:
foreach (int element in new int[10] { 12, 10, 8, 6, 5, 4, 3, 2, 1, 0}).
Додавање новог елемента у низ се остварује употребом метода Add, као што је
дато:
niz.Add(14).
Уколико треба да уклонимо елемент из низа користи се метод Remove, као
што је приказано:
//уклонити четврти елемент, индекс 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 })
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");

}
Приликом писања кода обавезно би требало користити референцу 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!";
У доле приказаном примеру су дате операције са знаковним низовима.

Пример 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);
}
Ако се креира референца за стринг а затим се промени оригинални стринг,
референца ће и даље показивати на оригинални стринг, како је илустровано на
следећи начин:
Пример 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);
}
Уколико знаковни низ треба тумачити дословно без обзира на његову дужину,
тада се користе литерали знаковног низа који почињу симболом @, као што је
презентовано следећим примером:
Пример 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]);}}
Табела излазних секвенци је дата у доле приказаној табели:

Излазна Име карактера 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 је презентовано коришћење празног стринга.
Пример 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);
}
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
}
ТЕСТ 5
1. Изабрати произвољни низ и приказати га на конзоли.
2. Израчунати суму произвољног низа од 6 чланова и израчунати њихову
просечну вредност.
3. Израчунати просечну вредност збира чланова низа.
4. Приказати на конзоли произвољни дводимензионални низ.
5. Шта су класе колекција?
6. Како се додају и уклањају елементи из низа?
7. Коришћењем foreach додати елементе низа и приказати их на конзоли.
8. Приказати пример коришћењем Queue класе.
9. Приказати пример коришћења Stack класе.
10. Шта су то знаковни низови?
11. Како се два или више низa може надовезати?
12. Саставити знаковни низ а затим одредити његову дужину и одредити
четврти елемент низа.

You might also like