Programski jezik C#

Povijest .NET-a i C#-a

.NET Framework je razvijen od strane Microsofta i prvi put je predstavljen javnosti u veljači 2002. Cilj mu je bio omogućiti jednostavno stvaranje i izvođenje aplikacija na Windows platformi. Jedan od ključnih aspekata .NET-a je njegova jezična neovisnost, što znači da programeri mogu koristiti različite programerske jezike, kao što su C#, VB.NET, i F#, za izradu aplikacija koje se izvode na .NET okruženju.

C# je dizajniran kao dio Microsoftove inicijative .NET, a njegov glavni dizajner bio je Anders Hejlsberg. Jezik je formalno predstavljen 2000. godine kao moderan, objektno orijentiran jezik s jakim tipiziranjem. C# je razvijen kako bi se programerima omogućilo iskorištavanje svih mogućnosti .NET Frameworka, uz istovremeno zadržavanje snažne strukture i sintakse koja omogućava jasnoću i održivost koda.

Kroz godine, .NET i C# su doživjeli brojne verzije, svaka donoseći nove značajke i poboljšanja. Na primjer, .NET Framework 2.0 je uveo generičke, dok je .NET Framework 3.0 predstavio Windows Communication Foundation (WCF), Windows Presentation Foundation (WPF), i Windows Workflow Foundation (WF). Uvođenjem .NET Core, otvorene verzije .NET-a, Microsoft je omogućio cross-platform razvoj, što je značajno proširilo dostupnost i primjenu .NET aplikacija.

C# je također evoluirao, dodavajući nove značajke poput LINQ (Language Integrated Query), async/await za asinkrono programiranje, i napredne mogućnosti za rad s podacima i kolekcijama. Najnovije verzije C# nastavljaju dodavati nove sintaktičke šećere, poboljšanja u performansama, i alate za moderni razvoj softvera, čineći jezik sve snažnijim i prilagodljivijim.

Danas, .NET ekosustav uključuje .NET Core (sada samo .NET 5 i novije verzije), što omogućava razvoj aplikacija na više platformi, uključujući Windows, macOS, i Linux. C# se kontinuirano razvija i ostaje jedan od glavnih jezika za razvoj na .NET platformi, koristeći se u širokom spektru aplikacija, od web i mobilnih aplikacija do igara i IoT rješenja.

Uvod u C# i .NET

C# je moderni, objektno orijentirani programski jezik razvijen od strane Microsofta. Kao dio .NET okruženja, C# je osmišljen da bude snažan, ali jednostavan za učenje i korištenje. Jezik uključuje koncepte iz nekoliko prethodnih jezika, poput C++ i Java, ali donosi i vlastite inovacije koje omogućuju brz i učinkovit razvoj softvera.

.NET je platforma koja pruža sveobuhvatnu podršku za razvoj i izvođenje aplikacija različitih tipova, od web i mobilnih aplikacija do velikih distribuiranih sustava i igara. Platforma uključuje veliku standardnu biblioteku, CLR (Common Language Runtime) koji upravlja izvođenjem programa, i jedinstvenu podršku za više programskih jezika.

Jedna od ključnih prednosti C# je njegova integracija s .NET Frameworkom, što omogućava razvoj aplikacija koje su učinkovite, sigurne i lako održive. C# koristi koncepte kao što su enkapsulacija, nasljeđivanje i polimorfizam, omogućavajući programerima da stvaraju fleksibilne i modularne aplikacije.

.NET platforma omogućava razvoj aplikacija na više platformi, zahvaljujući .NET Core, koji je cross-platform verzija .NET-a. To znači da aplikacije razvijene na .NET platformi mogu raditi na različitim operacijskim sustavima, uključujući Windows, Linux i macOS, bez potrebe za izmjenama koda.

Uz snažnu podršku za asinkrono programiranje, rukovanje iznimkama, rad s bazama podataka, i web razvoj, C# i .NET pružaju programerima moćne alate za brz i efikasan razvoj. Bilo da razvijate jednostavne konzolne aplikacije, složene web servise ili interaktivne GUI aplikacije, C# i .NET okruženje nude sve potrebne komponente za razvoj visokokvalitetnih rješenja.

Osnovni program u C#

Svaki C# program započinje s jednim ili više "using" direktivama, koje omogućavaju korištenje različitih imenskih prostora unutar programa. Nakon toga, definira se klasa koja sadrži metodu 'Main', točku ulaza svakog C# programa. Metoda 'Main' je mjesto gdje izvršavanje programa započinje.

Osnovni C# program obično uključuje sljedeće komponente:

Primjer jednostavnog C# programa:

    
using System;

class HelloWorld
{
    static void Main()
    {
        Console.WriteLine("Hello, World!");
    }
}
    
  

U ovom primjeru, program koristi imenski prostor System kako bi mogao koristiti klasu Console. Unutar klase HelloWorld, definirana je statička metoda Main, koja kada se izvrši, ispisuje poruku "Hello, World!" u konzolu.

Ovaj primjer ilustrira najosnovniji C# program koji prikazuje poruku u konzoli. Struktura i sintaksa ovog programa pružaju temelje za razumijevanje kako C# kod se organizira i izvršava.

Deklaracija varijabli u C#

U C#-u, deklaracija varijable omogućuje programu da alocira odgovarajuću količinu memorije za pohranu podataka i definira naziv koji će se koristiti za pristup tim podacima. Deklaracija varijable obuhvaća tip podatka, identifikator (ime varijable), i opcionalno, inicijalizaciju varijable vrijednošću.

Pravila imenovanja varijabli

Imena varijabli u C# moraju započeti slovom ili donjom crtom (_) i mogu uključivati slova, brojeve, i donje crte. Imena varijabli su osjetljiva na velika i mala slova (case-sensitive).

Primjeri valjanih imena varijabli:

Primjeri nevaljanih imena varijabli:

Vrste tipova podataka

C# nudi različite tipove podataka, koji se mogu klasificirati kao:

Deklaracija i inicijalizacija varijabli

Deklaracija varijable bez inicijalizacije:

int broj;

Deklaracija s inicijalizacijom:

int broj = 10;

Inicijalizacija varijable može se obaviti odmah prilikom deklaracije ili naknadno u kodu.

Implicitna i eksplicitna konverzija

Implicitna konverzija omogućuje automatsko pretvaranje tipova bez dodatnog koda (npr., pretvaranje int u double). Eksplicitna konverzija (cast) zahtijeva specifičnu sintaksu za pretvaranje tipova (npr., pretvaranje double u int).

Primjer implicitne konverzije:

int i = 10; double d = i;

Primjer eksplicitne konverzije:

double d = 10.5; int i = (int)d;

Konstante

Konstante su varijable čije vrijednosti ne mogu biti promijenjene nakon inicijalizacije. Koristi se ključna riječ const za njihovu deklaraciju.

Primjer deklaracije konstante:

const double PI = 3.14159;

Opseg varijabli

Opseg varijable određuje gdje je varijabla dostupna za upotrebu unutar koda. Lokalne varijable deklarirane unutar metoda su dostupne samo unutar tih metoda, dok su globalne varijable ili članske varijable klase dostupne unutar cijele klase.

Korištenje Console.WriteLine u C#

Metoda Console.WriteLine koristi se za ispisivanje poruka ili vrijednosti varijabli u konzolu. Ova metoda dodaje novu liniju nakon ispisa, prelazeći na sljedeći red.

Primjer 1: Ispis teksta

Console.WriteLine("Hello, World!");

Ovaj kod će ispisati tekst "Hello, World!" na konzolu.

Primjer 2: Ispis vrijednosti varijabli


string ime = "Ana";
Console.WriteLine(ime);
    

Ovaj kod ispisuje vrijednost varijable ime na konzolu.

Primjer 3: Ispis s formatiranjem


int godine = 30;
Console.WriteLine("Imam {0} godina.", godine);
    

Koristi se formatiranje unutar teksta gdje {0} predstavlja mjesto zamjene i zamjenjuje se s vrijednošću varijable godine.

Primjer 4: Ispis više varijabli


string ime = "Ana";
int godine = 30;
Console.WriteLine("Zovem se {0} i imam {1} godina.", ime, godine);
    

Ispisuje kombinaciju tekstualnih i varijabilnih vrijednosti unutar jednog reda.

Primjer 5: Ispis višestrukih linija


Console.WriteLine("Prva linija.\nDruga linija.");
    

Korištenje specijalnog znaka \n za novu liniju unutar istog ispisa.

Operatori u C#

C# nudi različite vrste operatora koji se mogu koristiti u raznim kontekstima, kao što su aritmetičke operacije, usporedbe, logičke operacije, itd.

Aritmetički operatori

Aritmetički operatori se koriste za izvođenje osnovnih matematičkih operacija kao što su zbrajanje, oduzimanje, množenje, dijeljenje, itd.

  • + (zbrajanje)
  • - (oduzimanje)
  • * (množenje)
  • / (dijeljenje)
  • % (moduo)

Usporedni operatori

Usporedni operatori se koriste za usporedbu dviju vrijednosti ili izraza.

  • == (jednakost)
  • != (ne jednakost)
  • > (veće od)
  • < (manje od)
  • >= (veće ili jednako)
  • <= (manje ili jednako)

Logički operatori

Logički operatori se koriste za kombiniranje ili negiranje boolovskih vrijednosti.

  • && (logički AND)
  • || (logički OR)
  • ! (logički NOT)

Bitovni operatori

Bitovni operatori se koriste za manipulaciju pojedinačnim bitovima u cijelim brojevima.

  • & (bitovni AND)
  • | (bitovni OR)
  • ^ (bitovni XOR)
  • ~ (bitovni NOT)
  • << (lijevo pomak)
  • >> (desno pomak)

Operatori pridruživanja

Operatori pridruživanja se koriste za dodjeljivanje vrijednosti varijablama.

  • = (pridruživanje)
  • += (zbrajanje s pridruživanjem)
  • -= (oduzimanje s pridruživanjem)
  • *= (množenje s pridruživanjem)
  • /= (dijeljenje s pridruživanjem)
  • %= (moduo s pridruživanjem)

Ostali operatori

Postoje i drugi operatori kao što su operatori pristupa članu, operatori za upravljanje tipovima, itd.

  • . (operator pristupa članu)
  • ? i : (ternarni operator)
  • ?? (null-coalescing operator)
  • is (operator provjere tipa)
  • as (operator sigurne pretvorbe tipa)

Primjeri korištenja operatora

U nastavku su prikazani primjeri kako se različiti operatori mogu koristiti u C# programima.

Primjeri aritmetičkih operatora


// Zbrajanje
int sum = 10 + 5;  // sum će biti 15

// Oduzimanje
int difference = 10 - 5;  // difference će biti 5

// Množenje
int product = 10 * 5;  // product će biti 50

// Dijeljenje
int quotient = 10 / 5;  // quotient će biti 2

// Modulo
int remainder = 10 % 3;  // remainder će biti 1
    

Primjeri usporednih operatora


bool isEqual = (5 == 5);  // isEqual će biti true
bool isNotEqual = (5 != 10);  // isNotEqual će biti true
bool isGreaterThan = (5 > 3);  // isGreaterThan će biti true
bool isLessThan = (5 < 10);  // isLessThan će biti true
bool isGreaterThanOrEqual = (5 >= 5);  // isGreaterThanOrEqual će biti true
bool isLessThanOrEqual = (5 <= 10);  // isLessThanOrEqual će biti true
    

Primjeri logičkih operatora


bool andResult = (true && false);  // andResult će biti false
bool orResult = (true || false);  // orResult će biti true
bool notResult = !(true);  // notResult će biti false
    

Primjeri bitovnih operatora


int andResult = (12 & 5);  // andResult će biti 4
int orResult = (12 | 5);  // orResult će biti 13
int xorResult = (12 ^ 5);  // xorResult će biti 9
int complement = (~12);  // complement će biti -13
int leftShift = (12 << 2);  // leftShift će biti 48
int rightShift = (12 >> 2);  // rightShift će biti 3
    

Primjeri operatora pridruživanja


int x = 10;
x += 5;  // x će sada biti 15
x -= 3;  // x će sada biti 12
x *= 2;  // x će sada biti 24
x /= 4;  // x će sada biti 6
x %= 5;  // x će sada biti 1
    

Primjeri ostalih operatora


// Operator pristupa članu
Console.WriteLine("Hello, World!");

// Ternarni operator
int a = 10, b = 5;
int max = (a > b) ? a : b;  // max će biti 10

// Null-coalescing operator
string name = null;
string userName = name ?? "Guest";  // userName će biti "Guest"

// Operator provjere tipa
bool isString = "Hello" is string;  // isString će biti true

// Operator sigurne pretvorbe tipa
object obj = "Hello";
string str = obj as string;  // str će biti "Hello"
    

Naredbe grananja i ponavljanja u C#

Naredbe grananja

Naredbe grananja omogućuju programu da odabere različite puteve izvršavanja na temelju zadanih uvjeta.

if naredba

if naredba provjerava uvjet i izvršava određeni blok koda ako je uvjet istinit.

if (uvjet) {
    // blok koda koji se izvršava ako je uvjet istinit
}

else i else if naredbe

else naredba se izvršava ako uvjet u if naredbi nije istinit. else if omogućava provjeru dodatnih uvjeta.

if (uvjet1) {
    // blok koda koji se izvršava ako je uvjet1 istinit
} else if (uvjet2) {
    // blok koda koji se izvršava ako je uvjet2 istinit
} else {
    // blok koda koji se izvršava ako niti jedan uvjet nije istinit
}

switch naredba

switch naredba omogućava provjeru više mogućih vrijednosti za izražaj i izvršava različite blokove koda ovisno o tome.

switch (izraz) {
  case vrijednost1:
    // blok koda za vrijednost1
    break;
  case vrijednost2:
    // blok koda za vrijednost2
    break;
  default:
    // blok koda koji se izvršava ako nijedan slučaj nije zadovoljen
    break;
}

Ternarni operator

Ternarni operator je kraći način za pisanje jednostavnih if-else naredbi. Sintaksa je uvjet ? izraz1 : izraz2.

int rezultat = uvjet ? vrijednost1 : vrijednost2;

Naredbe ponavljanja

Naredbe ponavljanja omogućuju izvršavanje bloka koda više puta.

for petlja

for petlja omogućava izvršavanje koda određen broj puta. Sastoji se od inicijalizatora, uvjeta, i inkrementa.

for (inicijalizacija; uvjet; inkrement) {
    // blok koda koji se ponavlja
}

foreach petlja

foreach petlja prolazi kroz svaki element u nizu ili kolekciji.

foreach (tip elementa imeVarijable in kolekcija) {
    // blok koda koji koristi imeVarijable
}

while petlja

while petlja ponavlja blok koda dok je njezin uvjet istinit.

while (uvjet) {
    // blok koda koji se ponavlja
}

do-while petlja

do-while petlja slična je while petlji, ali provjerava svoj uvjet na kraju iteracije, osiguravajući da se blok koda izvrši barem jednom.

do {
    // blok koda koji se ponavlja
} while (uvjet);

Detaljni primjeri grananja i ponavljanja

Detaljni primjeri grananja

Ovdje ćemo pokazati kako se naredbe grananja mogu koristiti u različitim programskim scenarijima.

Detaljan primjer if-else

Razmotrimo situaciju gdje trebamo odrediti je li broj pozitivan ili negativan:

int broj = 10;
if (broj > 0) {
    Console.WriteLine("Broj je pozitivan.");
} else {
    Console.WriteLine("Broj je negativan ili nula.");
}

Detaljan primjer switch-case

Koristimo switch-case za ispis dana u tjednu na temelju broja:

int dan = 3;
switch (dan) {
    case 1:
        Console.WriteLine("Ponedjeljak");
        break;
    case 2:
        Console.WriteLine("Utorak");
        break;
    case 3:
        Console.WriteLine("Srijeda");
        break;
    // Dodajte dodatne case-ove za ostale dane
    default:
        Console.WriteLine("Nevažeći unos");
        break;
}

Detaljni primjeri ponavljanja

Prikazat ćemo kako se različite petlje koriste za iteraciju i obradu podataka.

Detaljan primjer for petlje

Ispisujemo brojeve od 1 do 5 koristeći for petlju:

for (int i = 1; i <= 5; i++) {
    Console.WriteLine(i);
}

Detaljan primjer foreach petlje

Iteriramo kroz niz imena koristeći foreach petlju:

string[] imena = {"Ana", "Marko", "Ivana"};
foreach (string ime in imena) {
    Console.WriteLine(ime);
}

Detaljan primjer while petlje

Brojimo unatrag od 5 do 1 koristeći while petlju:

int brojac = 5;
while (brojac > 0) {
    Console.WriteLine(brojac);
    brojac--;
}

Detaljan primjer do-while petlje

Ovaj primjer pokazuje kako do-while petlja osigurava da se blok koda izvrši barem jednom:

int broj = 0;
do {
    Console.WriteLine("Ovo se izvršava barem jednom.");
    broj++;
} while (broj < 1);

Zadaci iz grananja s rješenjima

Zadatak 1: Par ili Nepar

Provjerite je li uneseni broj par ili nepar.

Rješenje:

int broj = 4; // Primjer broja, promijenite za testiranje
if (broj % 2 == 0) {
    Console.WriteLine("Broj je par.");
} else {
    Console.WriteLine("Broj je nepar.");
}

Zadatak 2: Najveći broj

Dani su tri broja. Odredite koji je od njih najveći.

Rješenje:

int a = 4, b = 7, c = 2;
if (a > b && a > c) {
    Console.WriteLine("a je najveći.");
} else if (b > a && b > c) {
    Console.WriteLine("b je najveći.");
} else {
    Console.WriteLine("c je najveći.");
}

Zadatak 3: Ocjene

Na osnovu unesene ocjene (1-5), ispišite prolaznost (1-2: "Neprolazno", 3-5: "Prolazno").

Rješenje:

int ocjena = 3; // Primjer ocjene, promijenite za testiranje
if (ocjena >= 1 && ocjena <= 2) {
    Console.WriteLine("Neprolazno");
} else if (ocjena >= 3 && ocjena <= 5) {
    Console.WriteLine("Prolazno");
} else {
    Console.WriteLine("Nevažeća ocjena");
}

Zadatak 4: Godišnja doba

Na osnovu unesenog broja mjeseca (1-12), ispišite kojem godišnjem dobu pripada.

Rješenje:

int mjesec = 6; // Primjer mjeseca, promijenite za testiranje
switch (mjesec) {
    case 12:
    case 1:
    case 2:
        Console.WriteLine("Zima");
        break;
    case 3:
    case 4:
    case 5:
        Console.WriteLine("Proljeće");
        break;
    case 6:
    case 7:
    case 8:
        Console.WriteLine("Ljeto");
        break;
    case 9:
    case 10:
    case 11:
        Console.WriteLine("Jesen");
        break;
    default:
        Console.WriteLine("Nevažeći broj mjeseca");
        break;
}

Zadatak 5: Djeljivost s 3 i 5

Provjerite je li uneseni broj djeljiv s 3, s 5, s oba, ili ni s jednim.

Rješenje:

int broj = 15; // Primjer broja, promijenite za testiranje
if (broj % 3 == 0 && broj % 5 == 0) {
    Console.WriteLine("Broj je djeljiv s oba, 3 i 5.");
} else if (broj % 3 == 0) {
    Console.WriteLine("Broj je djeljiv s 3.");
} else if (broj % 5 == 0) {
    Console.WriteLine("Broj je djeljiv s 5.");
} else {
    Console.WriteLine("Broj nije djeljiv ni s 3 ni s 5.");
}

Funkcije u C#

Funkcije (ili metode u kontekstu C#) su blokovi koda koji obavljaju određenu zadaću i mogu se pozivati s različitih mjesta u programu. One su osnovni gradivni blokovi u svakom C# programu i omogućuju ponovno korištenje koda, bolju čitljivost i lakše održavanje.

Deklaracija funkcije

Deklaracija funkcije u C# uključuje tip povratne vrijednosti, ime funkcije, i parametre. Funkcija može primati nula ili više parametara i može vratiti vrijednost.

int Zbroji(int a, int b) {
    return a + b;
}

Pozivanje funkcije

Funkcija se poziva korištenjem njenog imena nakon čega slijedi lista argumenata unutar zagrada.

int rezultat = Zbroji(10, 20);
Console.WriteLine(rezultat);

Tipovi funkcija

Funkcije se mogu klasificirati kao void (ne vraćaju vrijednost) ili kao one koje vraćaju vrijednost (npr., int, string, double).

void IspisiPoruku(string poruka) {
    Console.WriteLine(poruka);
}

Parametri i argumenti funkcija

Funkcije mogu primati parametre koji utječu na njihovo izvođenje. Parametri se navode u definiciji funkcije, a argumenti su stvarne vrijednosti koje se predaju funkciji prilikom njenog poziva.

void IspisiIme(string ime) {
    Console.WriteLine("Ime je: " + ime);
}
IspisiIme("Ana");

Povratne vrijednosti

Funkcije mogu vraćati vrijednosti koje se zatim mogu koristiti u daljnjem kodu. Tip povratne vrijednosti mora biti naveden u deklaraciji funkcije.

double Podijeli(double a, double b) {
    return a / b;
}

Preopterećenje funkcija

U C#, možete imati više funkcija s istim imenom ali s različitim parametrima. To se zove preopterećenje funkcija.

int Zbroji(int a, int b) {
    return a + b;
}
double Zbroji(double a, double b) {
    return a + b;
}

Rekurzivne funkcije

Funkcija koja poziva samu sebe naziva se rekurzivna funkcija. Rekurzija može biti moćan alat, ali mora imati uvjet zaustavljanja kako ne bi došlo do beskonačne rekurzije.

int Faktorijel(int broj) {
    if (broj == 0) {
        return 1;
    } else {
        return broj * Faktorijel(broj - 1);
    }
}

Primjeri funkcija u C#

Ovaj odjeljak pruža raznovrsne primjere funkcija u C# kako bi korisnici mogli bolje razumjeti i primijeniti koncepte funkcija u svojim programima.

Osnovna funkcija

Primjer jednostavne funkcije koja zbraja dva broja:

int Zbroji(int a, int b) {
    return a + b;
}
Console.WriteLine(Zbroji(5, 3));  // Ispisuje 8

Funkcija s više parametara

Funkcija koja prima više parametara i izračunava aritmetičku sredinu:

double AritmetickaSredina(double a, double b, double c) {
    return (a + b + c) / 3;
}
Console.WriteLine(AritmetickaSredina(10, 20, 30));  // Ispisuje 20

Funkcija bez povratne vrijednosti

Void funkcija koja samo ispisuje poruku:

void IspisiPoruku(string poruka) {
    Console.WriteLine(poruka);
}
IspisiPoruku("Hello, World!");

Preopterećenje funkcija

Funkcije sa istim imenom ali različitim parametrima:

int Kvadrat(int broj) {
    return broj * broj;
}
double Kvadrat(double broj) {
    return broj * broj;
}
Console.WriteLine(Kvadrat(5));    // Ispisuje 25
Console.WriteLine(Kvadrat(5.5));  // Ispisuje 30.25

Rekurzivna funkcija

Primjer rekurzivne funkcije koja računa faktorijel broja:

int Faktorijel(int broj) {
    if (broj <= 1) {
        return 1;
    } else {
        return broj * Faktorijel(broj - 1);
    }
}
Console.WriteLine(Faktorijel(5));  // Ispisuje 120

Anonimne funkcije

Primjer anonimne funkcije koja se koristi za izračunavanje kvadrata broja:

Func kvadrat = x => x * x;
Console.WriteLine(kvadrat(4));  // Ispisuje 16

Zadaci iz funkcija za početnike

Ovi zadaci omogućuju početnicima da vježbaju osnove funkcija u C# bez potrebe za prethodnim znanjem o poljima ili složenijim strukturama.

Zadatak 1: Pozdrav

Napišite funkciju koja ispisuje "Hello, World!"

Rješenje:

void Pozdrav() {
    Console.WriteLine("Hello, World!");
}
Pozdrav();

Zadatak 2: Zbrajanje

Napišite funkciju koja zbraja dva broja i vraća rezultat.

Rješenje:

int Zbroji(int a, int b) {
    return a + b;
}
Console.WriteLine(Zbroji(5, 3));

Zadatak 3: Oduzimanje

Napišite funkciju koja oduzima drugi broj od prvog i vraća rezultat.

Rješenje:

int Oduzmi(int a, int b) {
    return a - b;
}
Console.WriteLine(Oduzmi(10, 5));

Zadatak 4: Množenje

Napišite funkciju koja množi dva broja i vraća rezultat.

Rješenje:

int Pomnozi(int a, int b) {
    return a * b;
}
Console.WriteLine(Pomnozi(4, 3));

Zadatak 5: Dijeljenje

Napišite funkciju koja dijeli prvi broj s drugim i vraća rezultat kao decimalni broj.

Rješenje:

double Podijeli(double a, double b) {
    return a / b;
}
Console.WriteLine(Podijeli(10, 4));

Zadatak 6: Modul

Napišite funkciju koja vraća ostatak dijeljenja prvog broja s drugim.

Rješenje:

int Modul(int a, int b) {
    return a % b;
}
Console.WriteLine(Modul(10, 3));

Zadatak 7: Kvadrat broja

Napišite funkciju koja računa i vraća kvadrat broja.

Rješenje:

int Kvadrat(int broj) {
    return broj * broj;
}
Console.WriteLine(Kvadrat(5));

Zadatak 8: Veći broj

Napišite funkciju koja prima dva broja i vraća veći od njih.

Rješenje:

int VeciBroj(int a, int b) {
    return a > b ? a : b;
}
Console.WriteLine(VeciBroj(5, 10));

Zadatak 9: Absolutna vrijednost

Napišite funkciju koja vraća absolutnu vrijednost broja.

Rješenje:

int AbsolutnaVrijednost(int broj) {
    return broj < 0 ? -broj : broj;
}
Console.WriteLine(AbsolutnaVrijednost(-5));

Zadatak 10: Faktorijel

Napišite funkciju koja računa faktorijel broja (n!).

Rješenje:

int Faktorijel(int broj) {
    if (broj <= 1) return 1;
    return broj * Faktorijel(broj - 1);
}
Console.WriteLine(Faktorijel(5));

Zadatak 10: Prosječna vrijednost

Napišite funkciju koja prima dva broja i vraća njihovu prosječnu vrijednost.

Rješenje:

double ProsjecnaVrijednost(double a, double b) {
    return (a + b) / 2;
}
Console.WriteLine(ProsjecnaVrijednost(10, 20));

Zadatak 11: Pozitivan ili negativan

Napišite funkciju koja određuje je li broj pozitivan, negativan ili nula.

Rješenje:

string PozitivanNegativanNula(int broj) {
    if (broj > 0) return "Pozitivan";
    else if (broj < 0) return "Negativan";
    return "Nula";
}
Console.WriteLine(PozitivanNegativanNula(-5));
Console.WriteLine(PozitivanNegativanNula(5));
Console.WriteLine(PozitivanNegativanNula(0));

Zadatak 12: Godine u dane

Napišite funkciju koja pretvara godine u dane. Zanemarite prijestupne godine.

Rješenje:

int GodineUDane(int godine) {
    return godine * 365;
}
Console.WriteLine(GodineUDane(1));

Zadatak 13: Sat u sekunde

Napišite funkciju koja pretvara sate u sekunde.

Rješenje:

int SatiUSekunde(int sati) {
    return sati * 3600;
}
Console.WriteLine(SatiUSekunde(1));

Zadatak 14: Maksimum tri broja

Napišite funkciju koja prima tri broja i vraća najveći među njima.

Rješenje:

int MaksimumTriBroja(int a, int b, int c) {
    return Math.Max(a, Math.Max(b, c));
}
Console.WriteLine(MaksimumTriBroja(1, 5, 3));

Zadatak 15: Je li broj paran?

Napišite funkciju koja provjerava je li broj paran.

Rješenje:

bool JeLiParan(int broj) {
    return broj % 2 == 0;
}
Console.WriteLine(JeLiParan(4));
Console.WriteLine(JeLiParan(5));

Polja

Polje u C# je struktura koja omogućuje pohranjivanje više vrijednosti istog tipa. Deklarira se navođenjem tipa podatka elemenata, nakon čega slijedi par uglatih zagrada.

Deklaracija i inicijalizacija polja

Polje se može deklarirati bez odmah definiranih vrijednosti, a zatim inicijalizirati kasnije, ili se može deklarirati i inicijalizirati u istom koraku.


int[] brojevi;
brojevi = new int[5]; // Deklaracija s pet elemenata

int[] brojevi = new int[5] {1, 2, 3, 4, 5}; // Deklaracija i inicijalizacija
  

Pristup elementima

Elementima polja pristupa se koristeći indekse, koji počinju od nule.


int prviBroj = brojevi[0]; // Pristup prvom elementu
brojevi[1] = 10; // Postavljanje vrijednosti drugog elementa
  

Petlje i polja

Iteriranje kroz polje može se obaviti koristeći for ili foreach petlju.


for (int i = 0; i < brojevi.Length; i++) {
    Console.WriteLine(brojevi[i]);
}

foreach (int broj in brojevi) {
    Console.WriteLine(broj);
}
  

Višedimenzionalna polja

C# podržava višedimenzionalna polja, koja se mogu deklarirati s više setova uglatih zagrada.


int[,] matrica = new int[2, 3]; // Dvodimenzionalno polje
  

Metode i svojstva polja

Koristeći svojstvo Length možete dobiti broj elemenata u polju.


int duljina = brojevi.Length; // Dohvaća broj elemenata
  

Ovaj odjeljak pruža temelje za razumijevanje i korištenje polja u C#. Polja su ključna za pohranu kolekcija podataka istog tipa i neizostavna su u mnogim programskim paradigama unutar C#.

Primjeri korištenja polja

Ovdje su prikazani različiti primjeri koji ilustriraju praktičnu primjenu polja u C#.

Primjer 1: Deklaracija i inicijalizacija polja


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

Primjer 2: Pristup elementima polja


Console.WriteLine(brojevi[0]); // Ispisuje 1
    

Primjer 3: Promjena vrijednosti elementa


brojevi[1] = 20;
Console.WriteLine(brojevi[1]); // Ispisuje 20
    

Primjer 4: Iteracija kroz polje pomoću for petlje


int[] brojevi = {1, 2, 3, 4, 5};
for (int i = 0; i < brojevi.Length; i++) {
    Console.WriteLine(brojevi[i]);
}
  

Primjer 5: Iteracija kroz polje pomoću foreach petlje


foreach (int broj in brojevi) {
    Console.WriteLine(broj);
}
  

Primjer 6: Pretraživanje elementa u polju


int trazeniIndex = Array.IndexOf(brojevi, 4); // Vraća 3
Console.WriteLine($"Index elementa 4 je: {trazeniIndex}");
  

Primjer 7: Reverziranje polja


Array.Reverse(brojevi);
// brojevi je sada {5, 4, 3, 2, 1}
  

Primjer 8: Sortiranje polja


Array.Sort(brojevi);
// brojevi je sada {1, 2, 3, 4, 5}
  

Primjer 9: Višedimenzionalna polja


int[,] matrica = {
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 9}
};
Console.WriteLine(matrica[1, 1]); // Ispisuje 5
  

Primjer 10: Polje polja (jagged array)


int[][] stepenastoPolje = new int[][] {
  new int[] {1, 2},
  new int[] {3, 4, 5},
  new int[] {6, 7, 8, 9}
};
Console.WriteLine(stepenastoPolje[1][2]); // Ispisuje 5
  

Primjer 11: Kopiranje polja


int[] original = {1, 2, 3, 4, 5};
int[] kopija = new int[original.Length];
Array.Copy(original, kopija, original.Length);
// kopija sada sadrži {1, 2, 3, 4, 5}
  

Primjer 12: Usporedba polja


int[] poljeA = {1, 2, 3};
int[] poljeB = {1, 2, 3};
Console.WriteLine(poljeA.SequenceEqual(poljeB)); // Ispisuje "True"
  

Primjer 13: Pronalaženje maksimalnog i minimalnog elementa


int maksimum = brojevi.Max();
int minimum = brojevi.Min();
Console.WriteLine($"Maksimum: {maksimum}, Minimum: {minimum}");
  

Primjer 14: Agregatne funkcije na poljima


int zbroj = brojevi.Sum();
double prosjek = brojevi.Average();
Console.WriteLine($"Zbroj: {zbroj}, Prosjek: {prosjek}");
  

Primjer 15: Kopiranje polja


int[] original = {1, 2, 3, 4, 5};
int[] kopija = new int[original.Length];
Array.Copy(original, kopija, original.Length);
    

Zadaci s poljima

Zadatak 1: Ispis elemenata polja

Napišite program koji deklarira polje brojeva i ispisuje sve njegove elemente.

Rješenje:


int[] brojevi = {1, 2, 3, 4, 5};
foreach (int broj in brojevi) {
    Console.WriteLine(broj);
}
    

Zadatak 2: Zbroj elemenata polja

Napišite program koji računa zbroj svih elemenata u polju.

Rješenje:


int[] brojevi = {1, 2, 3, 4, 5};
int zbroj = 0;
foreach (int broj in brojevi) {
    zbroj += broj;
}
Console.WriteLine($"Zbroj: {zbroj}");
    

Zadatak 3: Pronađite najveći element

Napišite program koji pronalazi najveći element u polju cijelih brojeva.

Rješenje:


int[] brojevi = {2, 8, 4, 6, 7};
int maksimum = brojevi[0];
foreach (int broj in brojevi) {
    if (broj > maksimum) {
        maksimum = broj;
    }
}
Console.WriteLine($"Najveći broj: {maksimum}");
    

Zadatak 4: Obrnuti redoslijed elemenata

Napišite program koji obrće redoslijed elemenata u polju.

Rješenje:


int[] brojevi = {1, 2, 3, 4, 5};
Array.Reverse(brojevi);
foreach (int broj in brojevi) {
    Console.WriteLine(broj);
}
    

Zadatak 5: Sadrži li polje određeni element?

Napišite program koji provjerava nalazi li se određeni broj u polju.

Rješenje:


int[] brojevi = {1, 2, 3, 4, 5};
int trazeniBroj = 3;
bool sadrzi = false;
foreach (int broj in brojevi) {
    if (broj == trazeniBroj) {
        sadrzi = true;
        break;
    }
}
Console.WriteLine($"Polje sadrži broj {trazeniBroj}: {sadrzi}");
    

Napredniji zadaci s poljima

Zadatak 1: Pomnoži elemente polja

Napišite program koji množi sve elemente u polju cijelih brojeva.

Rješenje:


int[] brojevi = {1, 2, 3, 4};
int produkt = 1;
foreach (int broj in brojevi) {
    produkt *= broj;
}
Console.WriteLine($"Produkt elemenata: {produkt}");
    

Zadatak 2: Pronađi indeks elementa

Napišite program koji pronalazi indeks zadanog elementa u polju. Ako element ne postoji u polju, vratite -1.

Rješenje:


int[] brojevi = {1, 2, 3, 4, 5};
int trazeniBroj = 3;
int indeks = -1;
for (int i = 0; i < brojevi.Length; i++) {
    if (brojevi[i] == trazeniBroj) {
        indeks = i;
        break;
    }
}
Console.WriteLine($"Indeks broja {trazeniBroj}: {indeks}");
    

Zadatak 3: Provjeri jesu li dva polja jednaka

Napišite program koji provjerava jesu li dva polja cijelih brojeva jednaka (imaju iste elemente u istom poretku).

Rješenje:


int[] prvoPolje = {1, 2, 3, 4};
int[] drugoPolje = {1, 2, 3, 4};
bool jesuJednaki = true;
if (prvoPolje.Length == drugoPolje.Length) {
    for (int i = 0; i < prvoPolje.Length; i++) {
        if (prvoPolje[i] != drugoPolje[i]) {
            jesuJednaki = false;
            break;
        }
    }
} else {
    jesuJednaki = false;
}
Console.WriteLine($"Polja su jednaka: {jesuJednaki}");
    

Zadatak 4: Spoji dva polja

Napišite program koji spaja dva polja cijelih brojeva u jedno veće polje.

Rješenje:


int[] prvoPolje = {1, 2, 3};
int[] drugoPolje = {4, 5, 6};
int[] spojenoPolje = new int[prvoPolje.Length + drugoPolje.Length];
prvoPolje.CopyTo(spojenoPolje, 0);
drugoPolje.CopyTo(spojenoPolje, prvoPolje.Length);
Console.WriteLine("Spojeno polje: " + String.Join(", ", spojenoPolje));
    

Zadatak 5: Rotiraj elemente polja

Napišite program koji rotira elemente u polju cijelih brojeva za zadani broj pozicija.

Rješenje:


int[] brojevi = {1, 2, 3, 4, 5};
int brojRotacija = 2;
int[] rotiranoPolje = new int[brojevi.Length];
for (int i = 0; i < brojevi.Length; i++) {
    rotiranoPolje[(i + brojRotacija) % brojevi.Length] = brojevi[i];
}
Console.WriteLine("Rotirano polje: " + String.Join(", ", rotiranoPolje));