U programiranju često želimo da definišemo sopstvene tipove podataka, koji bolje opisuju pojmove iz realnog sveta.
U C jeziku to smo radili pomoću enum i struct, a isto postoji i u C# jeziku, ali sa određenim razlikama.

Ovi tipovi su osnova prelaska sa proceduralnog programiranja (C) na objektno (C#), jer predstavljaju naše sopstvene strukture podataka koje se ponašaju kao prave „mini klase“.


1. čas – Nabrojivi tip (enum)

Nabrojivi tip (enumeracija) koristi se kada promenljiva može imati samo nekoliko diskretnih vrednosti,  koje unapred znamo.

Na primer, ako imamo dane u nedelji, ne želimo da ih predstavljamo brojevima 1–7, već imenima.


Enum u C jeziku

U C jeziku definiše se ovako:

enum Dani { Ponedeljak, Utorak, Sreda, Cetvrtak, Petak, Subota, Nedelja };

Promenljiva tog tipa:

enum Dani danas;
danas = Sreda;

U C-u, svaka vrednost u enum zapravo je celobrojna konstanta, počev od 0 (može se ručno promeniti):

enum Dani { Ponedeljak = 1, Utorak, Sreda };

Enum u C# jeziku

U C# sintaksa je slična:

enum Dani { Ponedeljak, Utorak, Sreda, Cetvrtak, Petak, Subota, Nedelja }

Koristi se ovako:

Dani danas = Dani.Sreda;
Console.WriteLine(danas);

Rezultat:

Sreda

U C#, svaka vrednost enum tipa takođe ima celobrojnu vrednost (od 0 naviše),
ali možemo je eksplicitno zadati:

enum Dani { Ponedeljak = 1, Utorak, Sreda, Cetvrtak, Petak, Subota, Nedelja }

Možemo čak i pretvarati između tipa int i enum:

int broj = (int)Dani.Petak;     // broj = 5
Dani dan = (Dani)3;             // dan = Cetvrtak

Prednost u odnosu na obične brojeve

Umesto da pišemo:

int dan = 3; // nije jasno koji dan

pišemo:

Dani dan = Dani.Sreda;

Ovo čini kod čitljivijim i bezbednijim.


Zadatak 1 

Napisati program koji koristi nabrojivi tip Boje sa vrednostima
Crvena, Zelena, Plava, Zuta, Ljubicasta.
Korisnik unosi broj od 0 do 4, a program ispisuje naziv boje.

using System;

enum Boje { Crvena, Zelena, Plava, Zuta, Ljubicasta }

class Program
{
    static void Main()
    {
        Console.Write("Unesite broj boje (0-4): ");
        int n = int.Parse(Console.ReadLine());

        Boje boja = (Boje)n;
        Console.WriteLine("Izabrali ste boju: " + boja);
    }
}

Primer izlaza:

Unesite broj boje (0-4): 2
Izabrali ste boju: Plava

2. čas – Strukturni tip (struct)

Struktura (struct) je tip podataka koji definiše korisnik i koji u sebi sadrži više različitih promenljivih – kao što su ime, prezime, ocena itd.

U C jeziku i C# strukture izgledaju slično, ali C# strukture imaju objektne osobine – mogu imati metode, konstruktore i svojstva.


Struktura u C jeziku

struct Student {
    char ime[20];
    int godina;
    float prosek;
};

struct Student s1 = { "Ana", 3, 8.5 };

Pristup elementima:

printf("%s ima prosek %.2f", s1.ime, s1.prosek);

Struktura u C# jeziku

U C# izgleda slično, ali koristi se objektni zapis:

struct Student
{
    public string Ime;
    public int Godina;
    public double Prosek;
}

Korišćenje:

Student s1;
s1.Ime = "Ana";
s1.Godina = 3;
s1.Prosek = 8.5;

Console.WriteLine(s1.Ime + " ima prosek " + s1.Prosek);

Struktura sa konstruktorom

U C# možemo dodati konstruktor da pojednostavimo stvaranje objekta:

struct Student
{
    public string Ime;
    public int Godina;
    public double Prosek;

    public Student(string ime, int godina, double prosek)
    {
        Ime = ime;
        Godina = godina;
        Prosek = prosek;
    }
}

class Program
{
    static void Main()
    {
        Student s1 = new Student("Marko", 4, 9.2);
        Console.WriteLine(s1.Ime + " ima prosek " + s1.Prosek);
    }
}

Zadatak 2 

Napisati program koji definiše strukturu Film sa poljima:

  • Naslov (string)

  • Godina (int)

  • Ocena (double)

Korisnik unosi podatke za jedan film i program ih zatim ispisuje.


using System;

struct Film
{
    public string Naslov;
    public int Godina;
    public double Ocena;
}

class Program
{
    static void Main()
    {
        Film f1;

        Console.Write("Unesite naslov filma: ");
        f1.Naslov = Console.ReadLine();

        Console.Write("Unesite godinu: ");
        f1.Godina = int.Parse(Console.ReadLine());

        Console.Write("Unesite ocenu (1-10): ");
        f1.Ocena = double.Parse(Console.ReadLine());

        Console.WriteLine("\nFilm: " + f1.Naslov);
        Console.WriteLine("Godina: " + f1.Godina);
        Console.WriteLine("Ocena: " + f1.Ocena);
    }
}

Uporedni pregled (C i C#)

Koncept C C#
Definisanje enum enum Dani { Ponedeljak, Utorak } isto
Definisanje struct struct Osoba { char ime[20]; int godina; } struct Osoba { public string Ime; public int Godina; }
Metode u struct nije moguće moguće
Konstruktor u struct nije moguće moguće
Ispis enum vrednosti brojčano tekstualno (Console.WriteLine(Dani.Ponedeljak) daje “Ponedeljak”)
OOP osobine nema delimično (struct je vrednosni tip ali ima osobine objekta)

Zadatak za samostalni rad

Kreirati strukturu Ucenik sa poljima Ime, Razred, Prosek i Pol.
Koristiti i enum tip za Pol (Muski, Zenski).
Program treba da unese podatke o učeniku i ispiše ih u formatu:

Učenik: Ana, IV razred, prosek 4.80, pol: Zenski

Rešenje zadatka - postavlja se posle časa


Zaključak
Tip Svrha Osobine
enum Predstavlja fiksni skup imenovanih vrednosti Čitljiviji kod, sprečava greške pri unosu
struct Kombinuje više polja u jedinstven tip Omogućava logičko grupisanje podataka
C vs C# U C su obične strukture podataka, u C# imaju i objektne osobine U C# mogu imati metode i konstruktore

🧩 Za kraj časa

Diskusiono pitanje:

Ako struktura u C# može imati metode i konstruktor, u čemu se onda razlikuje od klase?

(Odgovor za razmišljanje: struktura je „vrednosni tip“, a klasa je „referentni tip“ – strukture se kopiraju po vrednosti, klase po referenci.)


Last modified: Friday, 10 October 2025, 6:18 PM