Denník N

Programovanie pre amatérov (časť 7)

Zdroj: Pixabay
Zdroj: Pixabay

Krásny slnečný deň prajem, vitejte pri siedmej časti programovania pre amatérov. Dúfam, že tento kurz vám v tomto koronačase aspoň trošku pomôže zorientovať sa v programátorskej problematike.

Nadviažeme na šiestu časť, kde som vám ukázal while cyklus, pretypovanie a metódu ReadLine. Domácu úlohu, dúfam, máte vypracovanú. Tu je moje riešenie, môžete si porovnať:
Console.WriteLine("Napis prve cislo:");
int firstNumber = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Napis druhe cislo:");
int secondNumber = Convert.ToInt32(Console.ReadLine());
Console.Write("Sucet: ");
Console.WriteLine(firstNumber + secondNumber);
Console.Write("Rozdiel: ");
Console.WriteLine(firstNumber - secondNumber);

A rovno skočíme na nové učivo. Minule sme spomenuli nekonečný cyklus. K tomu by sme potrebovali príkaz, ktorý nám pomôže vyskočiť z cyklu. Príkaz break robí presne to – ukončí celý cyklus a program pokračuje na riadku za cyklom. Napríklad toto je program, ktorý rieši rovnaký problém, ako sme mali v poslednej časti – od užívateľa dokoliečka pýta číslo, až pokým nebude väčšie ako 10.
while(true)
{
Console.WriteLine("Napis cislo vacsie ako 10:");
int number = Convert.ToInt32(Console.ReadLine());
if (number > 10)
{
break;
}
}

Podobným príkazom je continue. Tento príkaz je rozdielny v tom, že namiesto ukončenia skočí na začiatok cyklu. Najlepšie je ukázať si to na príklade. Toto je program, ktorý vypíše párne čísla od 1 do 20:
for (int i = 1; i <= 20; i++)
{
if (i % 2 == 1)
{
continue;
}
Console.WriteLine(i);
}

Nasleduje jednoduchý test. Čo vypíše nasledujúci program (skúste si program najprv iba pozrieť a bez spustenia povedať, čo vypíše)?
for (int i = 1; i < 10; i++)
{
if (i == 3)
{
continue;
}
if (i == 7)
{
break;
}
Console.WriteLine(i);
}

Na odľahčenie vám teraz ukážem tri vychytávky, ktoré vám programovanie trošičku uľahčia. Prvou je kľúčové slovo var. Predstavuje implicitne pomenovaný typ premennej, dá sa použiť iba vtedy, keď hodnotu do premennej priradíte hneď pri vytvorení a jej typ je jednoznačný. Na funkcionalite programu sa nič nemení, akurát vy sa nemusíte zapodievať typom premennej a premýšľať ako sa presne ktorý typ volá. Napríklad takto:
var number = 14;
var name = "John";
var input = Console.ReadLine();

Ďalšou chuťovkou sú kučeravé zátvorky. Už viete, že označujú blok kódu. Ja som vám ich vždy písal pri všetkých cykloch, podmienkach a podobne, ale nie vždy sú potrebné. Napríklad pri podmienke ich nemusíte dať, ak je príkaz jednoriadkový. V podstate sa to dá povedať takto: ak je podmienka pravdivá, vykoná sa ďalší príkaz. Príkaz môže byť buď na jeden riadok, alebo tých príkazov môže byť viac zoskupených v jednom bloku (kučeravých zátvorkách). Tento program vypíše „Fico je mafian“ a aj „Kotleba je fasista“:
if (1 < 2)
Console.WriteLine("Fico je mafian");
Console.WriteLine("Kotleba je fasista");

Tento program vypíše iba „Kotleba je fasista“:
if (1 > 2)
Console.WriteLine("Fico je mafian");
Console.WriteLine("Kotleba je fasista");

Toto isté platí aj pre cyklus. Obvykle je ale zaužívané tam tie zátvorky dávať, aby nevzniklo nedorozumenie. S nimi je to predsa len ľahšie čitateľné.

Poslednú vychytávku, ktorú vám predstavím, je debugovanie, najdôležitejšia vec pri programovaní, pri ktorej strávite pravdepodobne väčšinu programátorského času. V preklade je to čosi ako hľadanie chýb – bug je chyba v programe. Visual Studio je skvelý nástroj, môžete si to vyskúšať rovno vo vašom programe. Skúste si spustiť program toho jednoduchého testu hore. Vľavo, vedľa čísla riadku, máte takú šedú vertikálnu lištu. Keď na nu niekde vedľa programu kliknete, zobrazí sa tam taký červený krúžok. Skúste si to kliknúť tak, ako to vidíte na tomto obrázku:

Teraz. keď si spustíte program stlačením klávesy F5, exekúcia programu sa zastaví na tom mieste, kde máte červený krúžok. Teraz si môžete program odkrokovať – prejsť príkaz po príkaze. Stlačením F10 prejdete na nasledujúci príkaz, stlačením F5 spustíte program do ďalšej červenej guličky alebo do samého konca. Keď si myškou prejdete na nejakú premennú, ukáže sa vám jej aktuálna hodnota. Takto napríklad pekne uvidíte ako prejde celý cyklus a ako sa mení hodnota premennej i.

Keď niekedy napíšete svoj program a budete v ňom mať chybu, pomocou debugovania ju máte veľku šancu odhaliť. Už v prvej časti som písal, že väčšinu programátorského času zaberie hľadanie chýb. Zvyknite si na to.

Dnes vám ešte predstavím jednu vec – polia, po anglicky array. Pole je dátová štruktúra, v ktorej je uchovaná kolekcia elementov rovnakého dátové typu. Aha, aký pekný príklad sa nám tu ukázal:
int[] numbers = { 1, 2, 3, 4};
string[] cars = { "Volvo", "Ferrari", "Skoda" };

Na prístup k jednotlivým položkám poľa sa používajú hranaté zátvorky []. Dôležitá informácia: indexovanie v poli začína od 0, takže prvý element poľa je array[0]. Napríklad tento program vypíše číslo 2:
int[] numbers = { 1, 2, 3, 4};
Console.WriteLine(numbers[1]);

Prejsť cez všetky prvky poľa môžeme dvomi spôsobmi. Buď pomocou for cyklu a vlastnosti poľa Lenght – tá vráti počet prvkov v poli:
int[] numbers = { 1, 2, 3, 4};
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}

Alebo pomocou foreach cyklu. Ten sa používa práve na prejdenie všetkých prvkov v poli. Takto sa to zapisuje:
int[] numbers = { 1, 2, 3, 4};
foreach (int number in numbers)
{
Console.WriteLine(number)
}

A skutočne už posledná vec – hodnoty v poli cez index môžeme aj meniť. Jednoducho takto:
int[] numbers = { 1, 2, 3, 4};
numbers[1] = 7;
Console.WriteLine(numbers[1]) // vypise 7

Domáca úloha na dnes: napíšte program, ktorý vypíše najväčšie číslo z poľa 8 čísel. A nech funguje na akokoľvek zoradené pole, takže aj na int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8}; a aj na int[] numbers = { 7, 2, 8, 4, 11, 22, 0, 3};.

Toť na dnes všetko, verím, že je toho viac než dosť. V prípade otázok ma neváhajte kontaktovať cez komentáre k článku. Dovidenia.

P.S. Dnes si ukážeme fajn nápad na najbližšiu kostýmovú párty: človek v búrke:

Odpoveď na testovú otázku: program vypíše čísla 1, 2, 4, 5, 6. Príkaz continue donúti cyklus skočiť na začiatok, príkaz break ho ukončí, aj keď je podmienka cyklu stále splnená. Logicky.

Teraz najčítanejšie

Tomáš Paulďuro

Som nahnevaný občan Slovenskej republiky, pretože aj keď som sa zúčastnil protestov Za slušné Slovensko, do dnešného dňa mi neprišli od Sorosa žiadne peniaze. Okrem iného som spoluzakladateľ občianskeho združenia Vivat Vero, ktoré sa snaží spraviť zo Slovenska lepšie miesto. Naším prvým projektom je Antivýtrus, rozšírenie do webového prehliadača, ktoré užívateľa chráni pred konšpiračným a zavádzajúcim obsahom.