Čas 1 – Uvod i definisanje nizova


1. Kratka pitanja za ponavljanje gradiva:
  • Šta znači da je C proceduralni, a C# objektni jezik?
  • Kako se u C# razlikuje tip bool od C jezika?
  • Od kog broja kreću indeksi u nizu?

 


Kada se porede programski jezici C i C#, kroz prizmu nizova, višedimenzionalnih nizova i matrica, uočavaju se i sličnosti i razlike koje proizlaze iz njihove prirode i filozofije dizajna.

Osnovna sličnost je u tome što oba jezika omogućavaju rad sa nizovima, pri čemu se elementi niza čuvaju uzastopno u memoriji i pristup im se vrši preko indeksa koji uvek počinje od nule. I u C-u i u C#-u moguće je deklarisati višedimenzionalne nizove, a elementima se pristupa navođenjem više indeksa. Takođe, u oba jezika nizovi predstavljaju kolekcije elemenata istog tipa podataka, što omogućava njihovu efikasnu obradu.

Međutim, razlike između jezika postaju očigledne čim se razmotri način na koji se nizovi kreiraju i koriste. U jeziku C nizovi su statički, što znači da njihova veličina mora biti poznata u trenutku kompajliranja programa, osim ako se ne koriste posebne funkcije za dinamičku alokaciju memorije. U C# jeziku nizovi se tretiraju kao objekti, kreiraju se u toku izvršavanja programa i smeštaju na tzv. heap memoriju, što im daje veću fleksibilnost.

Bezbednost je još jedna značajna razlika. C ne vrši proveru granica niza, pa pristup elementima van zadatih granica može dovesti do oštećenja memorije i nepredvidivog ponašanja programa. Nasuprot tome, C# ima ugrađene mehanizme za proveru granica i u slučaju neispravnog pristupa automatski prekida izvršavanje, prijavljujući grešku kroz izuzetak.

Kada se govori o višedimenzionalnim nizovima i matricama, u jeziku C oni su zapravo organizovani kao nizovi nizova, pri čemu se struktura mora jasno definisati i ostaje nepromenljiva. C# nudi dve mogućnosti: korišćenje pravih višedimenzionalnih nizova, gde svi redovi imaju isti broj kolona, ili korišćenje tzv. nazubljenih (jagged) nizova, gde svaki red može imati različitu dužinu. Ovakav pristup daje veću slobodu programeru i prilagođava se raznovrsnijim problemima.

Što se tiče matrica, ni jedan od jezika nema poseban ugrađeni tip podatka za rad sa njima, ali je pristup različit. U C-u se matrice realizuju kroz dvodimenzionalne nizove, a sve operacije se implementiraju ručno. U C# jeziku, zahvaljujući objektnoj orijentaciji i bogatstvu biblioteka, lako se kreiraju posebne klase ili koriste gotovi moduli koji omogućavaju rad sa matricama na višem nivou apstrakcije.

Kao zaključak može se istaći da C daje jednostavan i brz, ali pristup na niskom nivou, gde je odgovornost u potpunosti na programeru. C# s druge strane nudi viši nivo bezbednosti, fleksibilnosti i podrške kroz objekte i biblioteke, čime se rad sa nizovima i matricama čini preglednijim i pouzdanijim.



2. Poređenje sa C

U C jeziku niz je jednostavno „deo memorije“ u kojem čuvamo podatke istog tipa. Deklaracija izgleda ovako:

int niz[5];

Ovo znači da imamo niz od 5 mesta, i svako mesto je tipa int. Prvi element niza ima indeks 0, drugi indeks 1, itd (indeksi uvek idu od nule do velicina - 1).

Tu smo na nivou proceduralnog razmišljanja – programer mora sam da vodi računa o veličini, indeksima, pa čak i da se pazi da ne pređe granice niza. Na početku programa mora da bude definisana maksimalna dužina niza i od toga može da se koristi manji broj elemenata, ali ne može da se naknadno poveća veličina niza, niti da bude veća od početno definisane.

U C# takođe postoje nizovi, ali ih posmatramo više objektno – svaki niz je zapravo objekat klase System.Array.

To znači:

  • niz ima svojstva (npr. Length),

  • niz ima metode (npr. Sort, Reverse),

  • niz nije samo „deo memorije“ već objekat sa mogućnostima.

Deklaracija:

int[] niz = new int[5];

Dakle, sintaksa je drugačija, ali logika je ista: niz čuva više vrednosti istog tipa.


3. Primer
using System;

class Program
{
    static void Main()
    {
        int[] brojevi = { 2, 4, 6, 8, 10 };

        Console.WriteLine("Prvi element: " + brojevi[0]);
        Console.WriteLine("Treći element: " + brojevi[2]);
    }
}

Diskusija: „Kako bi ovo izgledalo u C jeziku?“

C: 

int brojevi[5] = {2,4,6,8,10};

printf("%d", brojevi[0]);

– slično, ali u C# niz je objekat i nudi više mogućnosti.


4. Vežba (15 min)

Zadatak 1: Napraviti niz od 3 imena svojih drugova i ispisati ih na ekranu.

Rešenje:

string[] imena = { "Ana", "Marko", "Petar" };

foreach (string el in imena)
    Console.WriteLine(el);

Čas 2 – Sistemske metode za rad sa nizovima

Jedna od prednosti C# jezika je to što nudi gotove metode za rad sa nizovima. To znači da ne moramo sve da pišemo sami – mnoge stvari su već pripremljene. Drugim rečima, pošto je niz u jeeziku C# objekat, on ima metode i svojstva, od kojih ćemo najčešće koristiti sledeće:

  • Length –  dužina niza  (broj elemenata niza) - ovo je svojstvo, a ispod su neke metode:

  • Array.Sort(niz) – sortira niz u rastući redosled

  • Array.Reverse(niz) – obrće redosled elemenata niza

  • Array.IndexOf(niz, vrednost) – vraća indeks na kojem se nalazi određena vrednost

NAPOMENA:  U C jeziku ovoga nema – tamo moramo sve sami da pišemo (sopstvene funkcije za sortiranje, za traženje itd.).


2. Primer

int[] brojevi = { 42, 5, 17, 9 };

Console.WriteLine("Dužina niza: " + brojevi.Length);

Array.Sort(brojevi);
Console.WriteLine("Sortirani niz:");
foreach (int x in brojevi)
    Console.WriteLine(x);

Array.Reverse(brojevi);
Console.WriteLine("Obrnuti niz:");
foreach (int x in brojevi)
    Console.WriteLine(x);

int indeks = Array.IndexOf(brojevi, 17);
Console.WriteLine("Broj 17 se nalazi na poziciji: " + indeks);

3. Vežbe (20 min)

Zadatak 2: Napraviti niz od 6 brojeva, ispisati ga, zatim ga sortirati i ponovo ispisati.

Rešenje:

int[] niz = { 33, 12, 7, 98, 50, 1 };

Console.WriteLine("Originalni niz:");
foreach (int x in niz)
    Console.WriteLine(x);

Array.Sort(niz);

Console.WriteLine("Sortirani niz:");
foreach (int x in niz)
    Console.WriteLine(x);

Zadatak 3: Napraviti niz stringova (imena predmeta u školi). Koristiti Array.Reverse da se prikažu unazad.


** Diskusija: C vs. C#
  • Slično: oba jezika imaju nizove, indeksi kreću od nule.

  • Različito: u C jeziku niz je „sirovi blok memorije“, a u C# niz je objekat sa metodama i svojstvima.

  • Prednost C#: manje „ručne“ logike, više sigurnosti, pregledniji kod.


 ** Kompleksniji primer (zajednički rad)

Zadatak: Napisati program koji traži od korisnika da unese 5 brojeva, smešta ih u niz, a zatim:

  1. ispisuje sve brojeve,

  2. ispisuje najveći i najmanji broj,

  3. ispisuje niz obrnutim redosledom.

Rešenje:

using System;

class Program
{
    static void Main()
    {
        int[] niz = new int[5];

        Console.WriteLine("Unesite 5 brojeva:");
        for (int i = 0; i < niz.Length; i++)
            niz[i] = int.Parse(Console.ReadLine());

        Console.WriteLine("Uneti brojevi:");
        foreach (int x in niz)
            Console.WriteLine(x);

        int max = niz[0], min = niz[0];
        foreach (int x in niz)
        {
            if (x > max) max = x;
            if (x < min) min = x;
        }
        Console.WriteLine("Najveći broj: " + max);
        Console.WriteLine("Najmanji broj: " + min);

        Array.Reverse(niz);
        Console.WriteLine("Obrnuti niz:");
        foreach (int x in niz)
            Console.WriteLine(x);
    }
}

3. Mini test (10 min)

-- biće postavljeno naknadno

-----


Last modified: Wednesday, 1 October 2025, 4:02 PM