Denník N

Programovanie pre amatérov (časť 6)

Zdroj: Pixabay
Zdroj: Pixabay

Ahoj ahoj, je tu šiesta časť programovania pre amatérov. Opäť nadviažeme na predchádzajúcu časť, takže si zapnite Visual Studio a pohodlne sa usaďte v kresle.

piatej časti som vám (okrem iného) ukázal for cyklus. Mali ste domácu úlohu, a začiatku vám teda ponúkam jedno z mnohých riešení. Zapamätajte si totiž, že v programovaní exisuje viacero spôsobov, ako vyriešiť nejaký problém. Niektoré sú lepšie a vhodnejšie ako iné, no dôležitý je výsledok. Ak máte domácu úlohu naprogramovanú inak ako ja, no dáva vám správny výsledok, je to správne riešenie.

Domáca úloha 1: vytvorte si premennú, ktorej priradíte číslo medzi 1 až 10. Následne vypíšte čísla od 10 do 1 okrem toho čísla, ktoré je priradené v premennej. V tomto riešení som použil operátor, ktorý ste ešte asi nevideli, !=. Je to nerovná sa, čiže opak od ==:
int number = 6;
for (int i = 10; i > 0; i--)
{
if (i != number)
{
Console.WriteLine(i);
}
}

Domáca úloha 2: vypíšte párne čísla od 1 do 20:
for (int i = 1; i <= 20; i++)
{
if (i % 2 == 0)
{
Console.WriteLine(i);
}
}

Uvedomte si ešte, že aj riešenie, kde nepoužijete cyklus a 10-krát za sebou napíšete príkaz Console.WriteLine je správne. Problémom však je, že zadanie sa vám môže zmeniť, odrazu niekto povie, že chce vypísať párne čísla od 54 do 77. Alebo že ich chce milión. Preto pri riešení problémov je dobré premýšľať aj nad udržateľnosťou kódu. Aby sme pri zmene zadania alebo podmienok mali čo najmenšiu robotu pri úprave.

Ale poďme sa radšej naučiť niečo nové. Keď už poznáte for cyklus, na rade je while cyklus. Je v podstate veľmi podobný, každý for cyklus sa dá napísať cez while a naopak. Je len na vás, ktorý preferujete. Zvyčajne sa for používa vtedy, keď potrebujete premennú i alebo keď je počet opakovaní časom nemenný.

Ukážme si teda prvú domácu úlohu vyriešenú cez while cyklus:
int number = 6;
int loop = 10;
while (loop > 0)
{
if (loop != number)
{
Console.WriteLine(loop);
}
loop--;
}

Syntax: Za kľúčovým slovom while je podmienka (zase v zátvorke). Ak je splnená, vykoná sa cyklus. Tentokrát tu nie je žiadna inicializácia premenných ani príkaz, ktorý sa vykoná po cykle. Inak je všetko po starom, cyklus sa točí, až pokiaľ ja nesplnená podmienka. Treba tu dať pozor, aby ste nezabudli upraviť cyklus tak, aby nešiel do nekonečna.

Otázka: prečo som premennú number definoval ešte pred cyklom a nie v ňom?
Odpoveď: lebo by sa pri každom cykle vytvorila odznovu a nikdy by sa cyklus neskončil.

Už som tak trošku naznačil, že existuje aj nekonečný cyklus. O tom vám rozpoviem trošku viac o chvíľku, najprv si ukážeme pretypovanie. Pretypovanie je presne to, čo si pomyslíte, keď si poviete slovo „pretypovanie“. Zmeníte typ premennej, aby ste ju mohli priradiť do inej premennej. Je viacero druhov pretypovania:

  • implicitné – deje sa automaticky, napríklad pri pretypovaní z typu integer na long, teda keď potrebujete pre premennú viac pamäte
  • explicitné – používa sa operátor zátvorky () pred hodnotou, tu uvediete na aký typ premennej pretypovávate, v tomto prípade môže nastať strata dát, napríklad int number = (int)6.8;
  • pomocou statickej triedy Convert – slúži na pretypovanie medzi nekompatibilnými typmi, napríklad intstring int number = Convert.ToInt32("5");, nezadbudnite v tomto prípade pridať using System;, pretože trieda Convert sa nachádza v namespace System

Teraz, keď vieme pretypovať, môžeme si ukázať ako získať dáta od užívateľa, teda user input. Použijeme metódu ReadLine z triedy Console:
string input = Console.ReadLine();

A ak to chcete všetko pekne zabaliť, skúste si spustiť tento program:
Console.WriteLine("Napis nieco:");
string input = Console.ReadLine();
Console.WriteLine("Napisal si: " + input);

Takto si môžeme vyskúšať nekonečný cyklus. Máme úlohu: napíšte program, ktorý od užívateľa dokoliečka pýta číslo, až pokým nebude väčšie ako 10. Jednoduchá úloha, keď už viete to, čo ste sa naučili dnes:
bool doCycle = true;
while(doCycle)
{
Console.WriteLine("Napis cislo:");
string input = Console.ReadLine();
int number = Convert.ToInt32(input);
if(number > 10)
{
doCycle = false;
}
}

S ničím ďalším vás už dnes otravovať nebudem. Namiesto toho si môžete vypracovať jednoduchú domácu úlohu: Napíšte program, ktorý si od užívateľa vypýta 2 čísla a následne vypíše ich súčet a rozdiel. A ďalšiu časť si otvoríte tu.

P.S. na odľahčenie od programovania si dnes pozrite video ukazujúce výraz dieťaťa, ktoré prvý krát skúsilo maté:
https://www.youtube.com/watch?v=ssBFgDOlhM8

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.