02.10. vežbe (2) - ENUM
NABROJIVI TIP PODATAKA (ENUM)
Kako bismo u programu predstavili podatak koji može imati samo jednu od nekoliko unapred poznatih vrednosti? Kao na primer za: dan u nedelji, godišnje doba, boja semafora, ...
Već znamo da se za tekstualne vrednosti može koristiti string, a za celobrojne vrednosti int.
Na primer, možemo da postavimo:
string dan = "Ponedeljak";
Međutim, ovde postoji mogućnost da korisnik unese i "Ponedeljak", "ponedeljak", "PON" ili neku potpuno pogrešnu vrednost.
Zato uvodimo novi tip podataka – enum.
Teorija: Šta je nabrojivi tip podataka?
Nabrojivi tip podataka (
enum) predstavlja korisnički definisan tip podataka čije su moguće vrednosti unapred nabrojane.Koristi se kada promenljiva može imati jednu od ograničenog broja poznatih vrednosti.
Na primer, ako definišemo dane u nedelji, promenljiva tog tipa može predstavljati ponedeljak, utorak, sredu i ostale dane.
Osnovni oblik definisanja:
enum NazivTipa { Vrednost1, Vrednost2, Vrednost3 }Vrednosti nabrojivog tipa podrazumevano su povezane sa celobrojnim vrednostima. Prva vrednost ima broj 0, druga 1, treća 2 itd.
Primer 1 – Dani u nedelji
Kreirati konzolnu aplikaciju u kojoj se koristi enumeracija za dane u nedelji. U glavnom programu kreirati promenljivu dan - neka bude ponedeljak. Ispisati je na ekranu. Nakon toga ispisati i njenu numeričku vrednost takođe.
Rešenje
using System;
enum DanUNedelji
{
Ponedeljak,
Utorak,
Sreda,
Cetvrtak,
Petak,
Subota,
Nedelja
}
class Program
{
static void Main()
{
DanUNedelji dan;
dan = DanUNedelji.Ponedeljak;
Console.WriteLine(dan);
Console.WriteLine((int)dan);
Console.ReadKey();
}
}
Očekivani rezultat:
Ponedeljak
0
Objašnjenje:
-
DanUNedeljije novi tip podataka. -
danje promenljiva tog tipa. -
DanUNedelji.Ponedeljakpredstavlja jednu od dozvoljenih vrednosti. -
(int)danpretvara nabrojivu vrednost u celobrojnu vrednost.
Teorija: Pristupanje vrednostima enum tipa
Vrednostima nabrojivog tipa pristupa se pomoću naziva tipa, tačke i naziva vrednosti.
Na primer:
DanUNedelji dan = DanUNedelji.Petak;Za pretvaranje enum vrednosti u ceo broj koristi se eksplicitna konverzija:
int broj = (int)dan;Obrnuta konverzija može se izvršiti:
DanUNedelji dan = (DanUNedelji)2;U ovom primeru promenljiva dobija vrednost
Sreda.
Primer 2 – Korišćenje enum u switch naredbi: U konzolnoj aplikaciji napraviti enumeraciju za svetla na semaforu. Postaviti jednu promenljivu u glavnom programu. Korišćenjem switch naredbe ispisati poruku, u zavisnosti od vrednosti koja je dodeljena.
using System;
enum BojaSemafora
{
Crvena,
Zuta,
Zelena
}
class Program
{
static void Main()
{
BojaSemafora boja = BojaSemafora.Crvena;
switch (boja)
{
case BojaSemafora.Crvena:
Console.WriteLine("Stani!");
break;
case BojaSemafora.Zuta:
Console.WriteLine("Pripremi se!");
break;
case BojaSemafora.Zelena:
Console.WriteLine("Kreni!");
break;
}
Console.ReadKey();
}
}
Dodatni zadaci za vežbu
Zadatak 1 – Godišnja doba – Definisati nabrojivi tip GodisnjeDoba koji sadrži četiri godišnja doba. Kreirati promenljivu i dodeliti joj vrednost Leto.
Ispisati: naziv godišnjeg doba i njegovu numeričku vrednost.
enum GodisnjeDoba
{
Prolece,
Leto,
Jesen,
Zima
}
class Program
{
static void Main()
{
GodisnjeDoba doba = GodisnjeDoba.Leto;
Console.WriteLine(doba);
Console.WriteLine((int)doba);
Console.ReadKey();
}
}
Zadatak 2 – Vrsta proizvoda (za vežbu kod kuće) – Definisati nabrojivi tip VrstaProizvoda sa vrednostima: Hrana, Pice, Odeca, Elektronika
Kreirati promenljivu, dodeliti joj vrednost Elektronika i pomoću switch naredbe ispisati odgovarajuću poruku.
Zadatak 3 – Ocena učenika (za vežbu kod kuće) – Definisati enum Ocena sa vrednostima: Nedovoljan, Dovoljan, Dobar, VrloDobar, Odlican.
Dodeliti promenljivoj vrednost Odlican i ispisati tekstualnu i numeričku vrednost.
...