PRO1 15a. Stavek switch, zanka foreach

Download Report

Transcript PRO1 15a. Stavek switch, zanka foreach

Stavek

switch

, zanka

foreach

Srečo Uranič 1

Stavek

switch

 Stavek switch uporabimo ko želimo program razvejiti na več vej. Sintaksa:   switch (spremenljivka) // POZOR: spremenljivka ne more biti poljubnega tipa { case vrednost1: stavek1; break; case vrednost2: stavek2; break; . . .

case vrednostN: stavekN; break; default: stavki; } Stavek break v vsaki veji je obvezen - za razliko od switch stavka v C++, v C# ni dovoljen impliciten prehod iz ene case veje v drugo, razen če je veja prazna. Stavki, ki so zapisani v veji default se izvedejo le v primeru, da ni bil izveden noben case stavek. 2

Stavek

switch

 Vrednost, ki jo testiramo v switch stavku mora biti tipa bool, char, string, int (števni tipi): dovoljeni so še

nekateri drugi tipi, ki pa jih zaenkrat še ne poznamo!

Posamezne veje se ne smejo ponavljati: short stevilo = 0; switch (stevilo) { case 0: case 0: //NAPAKA Console.WriteLine("NIČ"); break; . . .

}

Stavek switch

 Vsaka veja switch stavka se mora zaključiti z enim od stavkov break, continue ali pa return short stevilo = 0; switch (stevilo) { case 0: Console.WriteLine("NIČ"); return; case 1: Console.WriteLine("ENA"); return; }

Switch stavek: primer

 S pomočjo switch stavka ugotovimo, koliko je v prebranem stavku pik, vejic in dvopičij!

Console.Write("Stavek: "); int pike = 0, vejice = 0, dvopicje = 0; string stavek = Console.ReadLine(); for (int i = 0; i < stavek.Length; i++) { switch (stavek[i]) { case '.': pike++;break; case ',': vejice++; break; case ':': dvopicje++; break; } } Console.WriteLine("Število pik: " + pike + "\nvejice: " + vejice + "\ndvopičja: " + dvopicje); Console.ReadKey();

Switch stavek – gnezdenje

 Switch stavke lahko tudi gnezdimo: int[] tabela = { 14, 10, 4 }; switch (tabela[0]) { case 4: Console.WriteLine(4); break; case 14: Console.WriteLine(14);

// uporaba gnezdenega switch stavka

switch (tabela[1]) { case 10: Console.WriteLine(10); break; } break; } 6

Switch stavek - vaja

 S switch stavkom lahko testiramo tudi niz string value = "tenis"; // uporaba switch stavka pri nizu switch (value) { case "tenis": Console.WriteLine("TENIS"); break; case "squash": Console.WriteLine("SQUASH"); break; case "badminton": Console.WriteLine("BADMINTON"); break; } 7

Switch - vaja

 Naslednje zaporedje stavkov spremeni tako, da namesto if stavka uporabiš switch stavek Console.Write("Poljubna cifra: "); int cifra = Convert.ToInt16(Console.ReadLine()); if (cifra == 3) Console.WriteLine("cifra = 3"); else if (cifra>5 && cifra<10) Console.WriteLine ("cifra je med 5 in 10"); else Console.WriteLine("Nisi vnesel cifre!");

//REŠITEV:

switch (cifra) { case 3: Console.WriteLine("cifra = 3");break; case 5: case 6: case 7: case 8: case 9: Console.WriteLine ("cifra je med 5 in 10"); break; default: Console.WriteLine("Nisi vnesel cifre!"); break; } Console.ReadKey();

Switch - vaja

 Z uporabo switch stavka oblikujte izpis: ocena 1 do 5 pomeni nezadostno, ocena 6 pomeni zadostno, ocena 7 pomeni dobro, ocena 8 pomeni prav dobro, cena 9 ali 10 pomeni odlično!

Random naklj = new Random(); int ocena = naklj.Next(5, 11); switch (ocena) { case 1: case 2: case 3: case 4: case 5: Console.Write("nezadostno"); break; case 6: Console.Write("zadostno"); break; case 7: Console.Write("dobro"); break; case 8: Console.Write("prav dobro"); break; case 9: case 10: Console.Write("odlično"); break; } Console.ReadKey();

Stavek

switch –

primer: avtomat za kavo

 V switch stavku lahko uporabimo tudi stavek goto Console.WriteLine("Vrsta kave: 1=Mala 2=Srednja 3=Velika"); Console.Write("Vnesi ustrezno številko: "); string s = Console.ReadLine(); int n = Convert.ToInt16(s), cost = 0; switch (n) { case 1: cost += 50; break; case 2: cost += 25; goto case 1; case 3: cost += 50; goto case 1; default: Console.WriteLine("Napačen vnos. Izberi 1, 2, al 3."); break; } if (cost != 0) { Console.WriteLine("Vstavite prosim {0} centov.", cost); } Console.WriteLine("Hvala!");

Zanka

foreach

     foreach je zanka, v kateri se ponavlja množica stavkov za vsak element neke tabele ali množice objektov. V zanki NE uporabljamo indeksov, elementi si sledijo PO VRSTI Zanke ne moremo uporabiti za spremembo elementov tabele, po kateri se sprehajamo, oz. za spremembo objektov. Na začetku foreach zanke je ustvarjena spremenljivka poljubnega tipa, ki avtomatično pridobi vrednost posameznega elementa neke tabele, zaradi česar ima ta oblika zanke prednost pred klasičnim for stavkom za obdelavo neke tabele. Uporabimo jo lahko le za obdelavo cele tabele, ne pa tudi za obdelavo le njenega dela. Iteracija poteka vedno od indeksa 0 do indeksa Length -1, iteracija v obratni smeri pa NI možna. Splošna oblika foreach zanke:

foreach ( tip spremenljivka in tabela) { ..stavki.. //poljuben stavek ali več stavkov }

11

Foreach - primer

 Uporaba zanke foreach na tabeli nizov: string[] domačeŽivali = {"pes", "mačka", "papagaj" };

// iteracija s pomočjo zanke foreach

foreach (string žival in domačeŽivali) { } Console.WriteLine(žival); 12

Foreach - primer

 Primer obdelave tabele s pomočjo zanke foreach: int[] vrednosti = { 1, 2, 3 }; int rezultat = 0; foreach (int vrednost in vrednosti) { rezultat += vrednost; } Console.WriteLine("Rezultat: " + rezultat); 13

Foreach: obdelava niza

 Za vsakim znakom v nizu dodajmo po en presledek: string znaki = "abcdefg"; //foreach zanka za dostop do vseh znakov v stringu string znakiSPresledki = ""; foreach (char znak in znaki) znakiSPresledki += znak + " "; //znakiSPresledki dobi vrednost "a b c d e f g " 14

Foreach: uporaba

 Zanko foreach uporabljamo za obdelavo tabel (iteracijo skozi tabelo) in nizov, ter za obdelavo kakršnihkoli zbirk podatkov.

15

Foreach - vaje

 Ustvarimo enodimenzionalno tabelo 10 decimalnih števil in jo napolnimo z naključnimi decimalnimi števili med 0 in 1, zaokroženimi na 3 decimalke. Vsebino tabele nato izpišimo s pomočjo zanke foreach!

decimal[] stevila = new decimal[10]; string stringstevilo = ""; Random naklj = new Random(); for (int i = 0; i < 10; i++) { //generiranje realnega števila med 0 in 1, zaokroženega na 3 decimalke stevila[i] = Math.Round((decimal)naklj.NextDouble(), 3); } Console.WriteLine("Tabela 10 naklj. realnih števil. Za izpis uporabimo foreach zanko)\n\n"); foreach (decimal stevilo in stevila) { stringstevilo += stevilo.ToString() + " "; } Console.WriteLine("Vsebina tabele:\n" + stringstevilo); 16