Image
9.6.2016 0 Comments

C++ / Príkazy – dokončenie / 8. časť

Späť na úvod >> Späť na programovanie >> Späť na seriál

Predovšetkým by som sa rád poďakoval všetkým, ktorí si dali námahu a reagovali na moju výzvu v júlovom čísle PC REVUE. Bol som milo prekvapený, že väčšina vašich reakcií bola pozitívna, s tým (a to ste sa celkom zhodli), že by ste uvítali väčší rozsah jednotlivých častí seriálu. Asi ste boli sklamaní poslednou časťou, ktorá bola opäť kratšia, v tom prípade sa vám ospravedlňujem. Bohužiaľ, v čase uzávierok sa na mňa niekde nalepila chrípka a verte, ťažko sa píše, keď vám podchvíľou tečie z nosa a monitor vám na stole vibruje vďaka neustálym záchvatom kašľa. Našťastie je to už za mnou, v každom prípade sa budem snažiť, aby boli jednotlivé časti seriálu diely rozsiahlejšie (táto časť bude mať, ak dovolíte, ešte bežný rozsah, chystám sa totiž práve na dovolenku… Mimochodom, je to zvláštne – keď som písal, aké je vonku krásne jarné počasie, v skutočnosti mrzlo a teraz, keď by som mal spomínať nastupujúcu jeseň, ledva dýcham a pri slovách ako dážď alebo vietor mierim k najbližšiemu zdroju vody v postoji nápadne pripomínajúcom zombiho).

Toľko krátky pokus o trochu živší úvod a teraz sa opäť poďme venovať programovaniu. V predošlej časti sme začali rozprávanie o príkazoch jazyka C++, opísali sme výrazové, deklaračné, zložené príkazy a príkazy výberu (vetvenia). Ako som sľúbil, dnes si opis doplníme ešte príkazmi cyklu a skokovými príkazmi.

Príkazy cyklu

Príkazy cyklu (iteration statements) slúžia na vyjadrenie opakovania vykonávania určitej časti programu. Sú tri: príkaz while, príkaz do a príkaz for.

Príkaz while

Syntax tohto príkazu je nasledujúca:

 

while (podmienka)

    príkaz

 

Podmienkou je podobne ako v príkazoch výberu ľubovoľný výraz aritmetického typu alebo typu ukazovateľ. Tento výraz sa vyhodnotí; ak je jeho hodnota nenulová, vykoná sa príkaz. Opäť sa vyhodnotí výraz, ak je nenulový, opäť sa vykoná príkaz a celý cyklus sa opakuje, až kým sa nestane, že bude hodnota podmienkového výrazu nulová. Vtedy sa cyklus ukončí a pokračuje sa nasledujúcim príkazom za príkazom while. Výkonný príkaz príkazu while môže byť, samozrejme, zložený.

Tento druh cyklu predstavuje klasickú konštrukciu, známu z teórie štruktúrovaného programovania, s testom ukončovacej podmienky pred vykonaním výkonného príkazu. To znamená, že v prípade, ak je hodnota podmienkového výrazu rovná nule, príkaz sa vôbec nevykoná. Ako príklad si uvedieme jeden z možných spôsobov výpisu čísel od 1 do 10 spolu s ich druhými mocninami:

 

int i = 0;

while (++i <= 10)

    printf("%2i - %3i\n", i, i * i);

 

S formátovacím reťazcom uvedeným ako prvý argument funkcie printf si zatiaľ príliš hlavu nelámte, čísla, ktoré sú v ňom „navyše“, slúžia v podstate na zarovnanie vypisovaných čísel.

Všimnite si na tomto príklade, že na začiatku inicializujeme hodnotu premennej i nulou a v priebehu cyklu ju postupne inkrementujeme v rámci podmienkového výrazu. Po prvom vyhodnotení tohto výrazu bude i mať hodnotu 1, t. j. počiatočnú hodnotu, ktorú potrebujeme, môžeme ju teda vypísať spolu s jej druhou mocninou. Po každom ďalšom teste bude i o jednotku väčšie. Po vypísaní príslušného riadka pre i = 10 sa opäť vyhodnotí podmienkový výraz. Keďže je použitá prefixová verzia operátora ++, premenná i sa najprv inkrementuje na hodnotu 11 a až potom sa porovná s hraničnou hodnotou nášho cyklu, čo je 10. Podmienka, samozrejme, už nebude splnená a celý cyklus sa teda skončí. Náš príklad je možné napísať aj iným spôsobom (a nielen jedným), napríklad s použitím postfixovej verzie (nie príliš výhodné, na ďalšom riadku bude treba všade namiesto i písať i – 1) alebo sa premenná i inicializuje na jednotku, v teste sa zmení operátor <= na < (ale bude treba použiť postfixový ++, a teda platí predchádzajúca poznámka) atď. Kto má chuť, môže vymýšľať ďalej (prípadne chvíľu počká, kým si uvedieme aj príkaz do; s ním sa možnosti ešte znásobia).

(Poznámka: Podľa súčasného návrhu normy ANSI C++ je možné namiesto podmienkového výrazu uviesť aj deklaračný príkaz s tým, že deklarovaná premenná má rozsah platnosti obmedzený na príkaz while. Keďže však mnoho dnes dostupných prekladačov túto a rôzne iné nové vlastnosti neimplementuje, nebudeme si o nich zatiaľ hovoriť, hádam niekedy na konci celého seriálu. Situácia okolo kodifikácie C++ normou ANSI/ISO je pomerne zložitá a ja sám v nej nemám momentálne úplne jasno.)

Príkaz do

Tento príkaz je veľmi podobný prechádzajúcemu, dokonca  majú spoločné jedno kľúčové slovo. Tu je jeho syntax:

 

do

    príkaz

while (podmienka);

 

Sémantika príkazu do je prakticky zhodná so sémantikou príkazu while, s tým rozdielom, že teraz sa podmienkový výraz vyhodnocuje až po prvom vykonaní príkazu, môžeme si byť teda istí, že sa príkaz vykoná aspoň raz. Cyklus sa ukončí vtedy, keď bude hodnota podmienky nulová. Pozor na podobnosť so sémanticky takmer zhodnou konštrukciou – cyklom repeat-until z jazyka Pascal, ten sa ukončí v okamihu, keď podmienka bude splnená (čo v C++ znamená nenulová)!

Možno vás napadlo, prečo v opise syntaxe príkazu do je na konci bodkočiarka a pri príkaze while nie. V podstate sme si dôvod povedali minule, ale pre istotu to ešte raz objasním. Výkonným príkazom príkazu while je ľubovoľný príkaz. Ak je to zložený príkaz, začína a končí sa krútenými zátvorkami a nenasleduje za ním bodkočiarka. Za ostatnými typmi príkazov bodkočiarku píšeme (celá situácia je trochu komplikovanejšia, zapamätajte si jednoducho, že bodkočiarku treba písať všade okrem miesta za pravou krútenou zátvorkou; ak by sa vám pri striktnom dodržiavaní syntaxe stalo, že dostanete dve či viac bodkočiarok za sebou, stačí, prirodzene, len jedna). Zápis príkazu while sa končí zápisom jeho výkonného príkazu (bez bodkočiarky). Ak je zložený, bodkočiarka sa nenapíše ani za ním. Príklad:

 

while (n != 255)

{

    s += n;

    n++;

}

 

Ak je výkonný príkaz napríklad výrazovým príkladom, bodkočiarka sa zaň píše (pozri odsek o príkaze while). Naproti tomu zápis príkazu do obsahuje výkonný príkaz akoby „v sebe“ a končí sa riadkom s testovaným výrazom. Keďže tento riadok nie je samostatným príkazom, na jeho konci dáme vždy bodkočiarku, ktorou ukončíme celý príkaz do. Tak, a je to. Prejdite si to pokojne viackrát, je to dosť komplikované. Najlepšie je pozrieť si presnú syntax jednotlivých príkazov a potom ich skladať metódou Cut & Replace.

Uvedieme si ešte príklad použitia príkazu do. Vo všeobecnosti je tento príkaz vhodný tam, kde potrebujeme pred vyhodnotením podmienky vykonať aspoň jednu iteráciu, napríklad preto, že podmienkový výraz závisí od výsledku vykonania tela cyklu. Predstavme si situáciu, keď chceme postupne spracovať reťazec znakov, ktorý predstavuje jednotlivé riadky textu, oddelené znakom \n. Postupne prechádzame reťazcom a každý znak nejakým spôsobom spracujeme. Chceme, aby sa prechádzanie ukončilo pri nájdení prvého znaku \n, ale súčasne chceme, aby tento znak tiež podliehal spracovaniu. Takýto prípad je ako stvorený na použitie príkazu do:

 

char msg[] =

    "First line\n"

    "Second line\n"

    "Third line\n";

int i = 0;

do {

    printf("%c", toupper(msg[i]));

}

while (msg[i++] != '\n');

 

Ak si chcete tento príklad vyskúšať, musíte na začiatok programu pridať direktívu #include <ctype.h>, ktorá umožní používanie funkcie toupper() (v skutočnosti je to makro). Táto funkcia prevedie svoj argument typu char na príslušné veľké písmeno (samozrejme, len ak sa to dá, inak ho ponechá bezo zmeny).

V príklade máme pole znakov msg[], ktoré predstavuje tri riadky textu, oddelené znakom nového riadka. V cykle sa posúvame po jednotlivých znakoch poľa pomocou indexovej premennej i. Každý znak poľa prevedieme na veľké písmeno a vypíšeme. Potom otestujeme, či sme už náhodou neprečítali znak '\n', súčasne inkrementujeme premennú i. Cyklus sa zrejme končí načítaním a vypísaním znaku '\n'. Po prebehnutí dostaneme na konzole výstup – prvý riadok textu z poľa msg[], navyše prevedený na veľké písmená. Na príklade tiež vidno jeden z možných spôsobov formátovania zdrojového textu obsahujúceho príkaz do – ľavá krútená zátvorka je tu na rovnakom riadku ako kľúčové slovo do (pre jeho malú dĺžku).

Príkaz for

Predchádzajúce dva príkazy umožňovali jednoduchý zápis opakovania bloku príkazov s definovanou ukončovacou podmienkou. Nič viac a nič menej. Jazyk C++ sa však  radí medzi vyššie programovacie jazyky, a preto by mal poskytovať predsa len o niečo väčší komfort pri zápise cyklov. Preto máme k dispozícii ešte tretí príkaz cyklu, ktorým je príkaz for. Tento príkaz existuje v mnohých bežných jazykoch, no v C++ patrí jeho sémantika k jednej z najlepších a najmocnejších. Jeho syntax je o niečo zložitejšia:

 

for (init-príkaz výraz1; výraz2)

    príkaz

 

V zápise príkazu for nachádzame štyri „úseky“: inicializačný príkaz, výraz1, výraz2 a samotný výkonný príkaz. Realizácia celého cyklu vyzerá takto: Najprv sa vykoná inicializačný príkaz. Tento príkaz nemôže byť hocaký, povolený je len výrazový alebo deklaračný príkaz. Následne sa testuje výraz1, ktorý predstavuje ukončovaciu podmienku celého cyklu. Požiadavky naň sú zhodné s požiadavkami na podmienkové výrazy v príkazoch while a do. V prípade, že hodnota výrazu1 je nenulová, vykoná sa výkonný príkaz a hneď za ním sa vyhodnotí výraz2 (jeho hodnota sa  nikde nepoužije). Opätovne sa vyhodnotí výraz1 a celý cyklus sa opakuje až do chvíle, keď hodnota výrazu1 bude nulová. Celý príkaz for možno opísať pomocou doteraz prebraných príkazov takto:

 

init-príkaz

while (výraz1)

{

    príkaz

    výraz2;

}

 

Inicializačný príkaz slúži obyčajne na inicializáciu premenných, ktoré sa budú v cykle používať. V prípade, že ním je deklaračný príkaz, slúži výhradne na deklaráciu premenných (prípadne spojenú s ich inicializáciou). Tieto premenné však môžeme používať nielen v samotnom príkaze for, ale aj v nasledujúcich príkazoch. (Podľa normy ANSI je platnosť takto deklarovaných premenných obmedzená na príkaz for.) V prípade, že inicializačným príkazom je výrazový príkaz, ten slúži len na modifikáciu existujúcich premenných. Nie je možné kombinovať deklaráciu premenných s priraďovacím výrazom, teda príkaz

 

int i = 0, j = 0;

 

deklaruje dve nové celočíselné premenné i a j a inicializuje ich hodnotou 0. V prípade, že premenná j už existuje (teda bola deklarovaná), prekladač ohlási chybu. Naproti tomu príkaz

 

x = 999, y = 1;

 

nastavuje hodnoty premenných x a y, ktoré museli byť už predtým niekde deklarované. V prvom prípade je čiarka oddeľovačom jednotlivých deklarovaných identifikátorov, v druhom príklade je operátorom (hľa, jedno z jeho použití). Samozrejme, je potrebné inicializačný príkaz ukončiť bodkočiarkou (vždy, lebo nikdy nejde o zložený príkaz).

Výraz2 je výrazom, ktorý sa vyhodnotí po každej iterácii cyklu. Obyčajne preto slúži na nejaký „posun“ riadiacich premenných cyklu. Uveďme si príklad. Najobyčajnejší cyklus, v ktorom budeme meniť hodnotu premennej a od 1 do 100, zapíšeme takto:

 

for (int a = 1; a <= 100; a++)

{

    ...

}

 

Pred spustením cyklu sa deklaruje premenná a, jej hodnota sa nastaví na 1 a následne sa začnú vykonávať jednotlivé iterácie. Po prebehnutí každej z nich sa vyhodnotí výraz a++, ktorý spôsobí inkrementáciu premennej a. Cyklus sa ukončí po 100. iterácii, keď sa premenná a inkrementuje na hodnotu 101 a následný test a <= 100 vráti nulovú hodnotu.

Výraz2 môže byť, samozrejme, aj zložitejší. Napríklad majme pole celých čísel, ktorým chceme súčasne prechádzať z oboch koncov smerom k stredu. Použijeme dva indexy i a j, z ktorých jeden budeme inkrementovať a druhý dekrementovať. Cyklus ukončíme vtedy, keď sa oba indexy „stretnú“. Predpokladajme, že pole čísel je už nejakým spôsobom naplnené:

 

int num[50];

for (int i = 0, j = 49; i <= j; i++, j--)

{

    ...

}

 

V prípade, že by bol počet prvkov poľa nepárny, budú v poslednej iterácii oba indexy rovnaké a podľa toho, akú operáciu nad poľom vykonávame, budeme musieť doplniť potrebný test (príkaz if). Je možné zmeniť aj priamo podmienkový výraz príkazu for. Lenže čo v prípade, ak rozmer poľa vopred nevieme (dostaneme ho napríklad ako argument funkcie)? Vtedy musíme použiť v tele cyklu príkaz if.

Oba výrazy zo zápisu príkazu for môžeme aj vynechať. Vynechaním výrazu2 sa na prvý pohľad pripravujeme o možnosť zmeny stavu riadiacich premenných cyklu, ale uvedomte si, že táto zmena sa v určitých prípadoch dá úspešne realizovať v rámci výrazu1 či priamo v rámci výkonného príkazu. Ak vynecháme výraz1, dostaneme cyklus, ktorého ukončovacia podmienka bude vždy splnená, čiže nekonečný cyklus. Ako z takého cyklu vyskočiť, dozviete sa o chvíľu. Existujú dva spôsoby zápisu (takmer) nekonečného cyklu:

 

while (1)

{ ... }

 

a

 

for (;;)

{ ... }

 

Oba sú úplne ekvivalentné a je len na vás, ktorý si zvolíte.

Výhodou takto definovaného príkazu for je možnosť realizácie aj iných druhov cyklov ako bežných lineárnych, pri ktorých sa niektorá premenná (alebo premenné) inkrementuje či dekrementuje. Napríklad chceme v priebehu cyklu vygenerovať všetky čísla 2i, 0 ≤ i ≤ 7 (ako nejaké binárne masky, s práve jedným nastaveným bitom). Vo väčšine jazykov si musíme pomôcť prídavnou premennou i, ktorá sa bude meniť od 0 po 7 a v rámci cyklu budeme vypočítavanú hodnotu vždy zdvojnásobovať. V C++ je možné ako riadiacu premennú cyklu použiť priamo počítanú masku:
 

for (int m = 1; m <= 128; m *= 2)

{

    ...

}

 

Počas vykonávania cyklu nadobudne premenná m postupne hodnoty 1, 2, 4, 8, 16, 32, 64 a 128, čo sú práve požadované mocniny dvojky.

Skokové príkazy

Poslednou skupinou príkazov jazyka C++ sú skokové príkazy. Ich názov napovedá, čo bude ich náplňou. Pod skokom rozumieme okamžitú nepodmienenú zmenu postupnosti vykonávaných príkazov programu. Aj príkazy výberu a príkazy cyklu zahŕňajú zmenu toku programu, ale viac-menej podmienenú a akosi skrytú, takže pod skokovými príkazmi budeme rozumieť len tie, ktorými explicitne meníme lineárny beh programu.

Skokové príkazy sú v C++ štyri: break, continue, return a goto. Postupne si teraz opíšeme každý z nich.

Príkaz break

O tomto príkaze sme si už hovorili – bolo to v súvislosti s príkazom switch, kde príkaz break slúžil na opustenie bloku, tvoriaceho výkonný príkaz príkazu switch. Okrem toho break môžeme použiť aj v tele ľubovoľného príkazu cyklu. V oboch prípadoch je jeho účinok rovnaký, teda ukončenie daného príkazu, inak povedané, vyskočenie z jeho výkonného bloku. Pravda, treba vziať do úvahy fakt, že toto vyskočenie sa týka najbližšieho bloku smerom zvnútra von (trochu krkolomný opis, najlepšie celú situáciu opisuje anglický termín smallest enclosing block). Lepší bude príklad:

 

for (i = 0; i < 10; i++)

{

    for (j = 0; j < 10; j++)

    {

        if (j == 8)

            break;

    }

    if (i == 5)

        break;

}

 

V tomto jednoduchom ad-hoc príklade máme dva do seba vnorené cykly. Vnútorný cyklus vo svojom tele neustále testuje, či jeho riadiaca premenná j nenadobudla hodnotu 8. Keď k takej situácii dôjde, vykoná sa príkaz break, vnútorný cyklus sa ukončí, ale pokračuje sa ďalším príkazom tela vonkajšieho cyklu, čo je príkaz if, ktorý testuje pre zmenu zhodu riadiacej premennej i tohto cyklu s hodnotou 5. Opäť, keď zhoda nastane, aktivuje sa druhý príkaz break a ten ukončí aj vonkajší cyklus. Je dobré celý príklad odkrokovať alebo doplniť o výpis premenných i a j, aby ste sa uistili o okamihoch, v ktorých dochádza k ukončeniu každého z cyklov.

Príkaz break, ako ste sa hádam dovtípili, slúži aj na ukončenie spomínaného nekonečného cyklu. Obyčajne sa ukončenie viaže na nejakú podmienku a takáto konštrukcia je vhodná, ak potrebujeme cyklus, ktorého ukončovacia podmienka sa nevyhodnocuje ani na začiatku cyklu (ako pri while), ani na konci (ako pri do), ale niekde v prostriedku. Potom taký cyklus zapíšeme napríklad takto:

 

while (1)

{

    ...

    if (podmienka)

        break;

    ...

}

 

Spôsobov zápisu jedného cyklu je veľa a je len na vás, ktorý si vyberiete z hľadiska efektivity výsledného kódu.

Príkaz continue

Tento príkaz má podobnú oblasť použitia ako príkaz break, na rozdiel od neho však je možné príkaz continue použiť iba v príkazoch cyklu. Jeho funkcia je jednoduchá – spôsobí okamžité ukončenie práve prebiehajúcej iterácie a pokračovanie opäť od začiatku daného cyklu. Podobne ako break aj continue sa vzťahuje na najbližší obklopujúci blok cyklu. Pri použití v rámci príkazu for sa predtým, než sa riadenie vráti späť na začiatok cyklu, vyhodnotí výraz2, rovnako ako po každej dokončenej iterácii. V príklade, ktorý nasleduje, postupne vypisujeme všetky čísla od 1 do 100, ktoré nie sú násobkom čísla 13. Tie, ktoré násobkom sú, jednoducho preskočíme.

 

for (int x = 1; x <= 100; x++)

{

    if (!(x % 13))

        continue;

    printf("%4i", x);

}

 

Všimnite si, ako testujeme čísla, ktoré sú násobkom čísla 13. Také čísla po vydelení trinástkou dajú zvyšok 0. Použijeme preto operátor modulo (%). Keďže podmienkový výraz v príkaze if má byť nenulový, ak chceme dané číslo preskočiť (príkazom continue), použijeme operátor logickej negácie !. Zátvorky sú nevyhnutné, operátor ! má vyššiu prioritu ako %.

Príkaz return

Tento príkaz sa používa na ukončenie behu práve vykonávanej funkcie a návrat do funkcie volajúcej, s prípadným odovzdaním návratovej hodnoty. Jeho syntax je nasledujúca:

 

return výraz;

return;

 

Výraz predstavuje návratovú hodnotu a je povolený iba vtedy, ak je funkcia deklarovaná s návratovým typom iným ako void (inými slovami, ak vôbec niečo vracia). Vo funkciách typu void je povolený iba druhý tvar, bez výrazu. Prirodzené ukončenie funkcie, keď sa dospeje k pravej krútenej zátvorke, ukončujúcej zápis funkcie, je ekvivalentné príkazu return bez výrazu. O funkciách sme si zatiaľ veľa nepovedali, takže len malý príklad. Funkcia, ktorá vracia výsledok výrazu f(x) = x2 + 3x – 6:

 

double f(double x)

{

    return x*x + 3*x - 6;

}

 

a jej použitie:

 

printf("f(4) = %lg\n", f(4));

 

Príkaz goto

Posledným zo skokových príkazov, často zatracovaným, ale predsa existujúcim a v podstate najviac oprávneným nosiť názov príkaz skoku, je príkaz goto. Jeho syntax je jednoduchá:

 

goto návestie;

 

kde návestie sa môže vyskytovať pred ľubovoľným príkazom vo funkcii a má tvar identifikátora ukončeného dvojbodkou:

 

    ...

návestie:

    príkaz;

    príkaz;

    ...

 

S trochu inými návestiami sme sa už stretli pri opise príkazu switch, ale tie nemôžeme použiť spolu s príkazom goto. A čo sa stane, keď program narazí na príkaz goto? Jednoducho skočí na prvý príkaz nasledujúci za daným návestím. V prípade, že chceme skočiť na koniec nejakého bloku a za návestím by už teda nebol nijaký príkaz, iba pravá krútená zátvorka, musíme tam nejaký príkaz pridať, a to najčastejšie prázdny príkaz, t. j. bodkočiarku:

 

while (...)

{

    ...

    goto end;

    ...

end:

    ;

}

 

Otázkou zostáva, či je použitie príkazu goto opodstatnené a či je vôbec z hľadiska programátorského štýlu vhodné ho používať. Moja odpoveď znie – áno, existujú prípady, keď by sa  rovnaký efekt dosiahol  len zavedením komplikovaných konštrukcií a značným znížením efektivity kódu. Obyčajne sa tento príkaz používa vtedy, ak chceme vyskočiť zvnútra viacerých vnorených cyklov, keď by normálne bolo treba na každej úrovni testovať, či náhodou nechceme celú hierarchiu cyklov ukončiť. Jazyk Java má pre tento príklad zavedené určité rozšírenie príkazu break, hádam preto ani v Jave príkaz goto nenájdeme. Takže smiete používať príkaz goto, ale s mierou, a pokiaľ možno vždy v smere dopredu, nikdy nie na skok naspäť!

Záver

Prebrali sme všetky príkazy jazyka C++ a s využitím doterajších vedomostí  by ste už mali byť schopní písať krátke a jednoduchšie programy sami. Odporúčam vám, pokúste sa o to, i keď to budú úplne zbytočné a účelové programy, ktoré vzápätí vymažete. Dobre programovať sa človek naučí okrem iného tak, že programuje veľa, popritom si všíma chyby, ktoré robí, snaží sa pochopiť, čo sa naozaj deje pri behu jeho program, čím sa neustále zdokonaľuje. Je výhodné, keď poznáte jazyk, v ktorom programujete, od A po Z, pretože ste potom pripravení na všetky prekvapenia, ktoré vám vývoj programov prichystá. Aj  tak budete často prekvapení, keď objavíte nejakú „novinku“.

C++

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

Tipy a triky: Ako na snímku obrazovky na akomkoľvek počítači s Windows?

02.12.2016 00:13

Ak snímky obrazovky robíte často apotrebujete napríklad funkcie na posun stránok alebo snímanie zobrazenia pri vyššom rozlíšení displeja, zrejme používate nejakú špecializovanú aplikáciu. Väčšina použ ...

Ako na to 1

Tipy a triky: Ako aplikácii prednastaviť spúšťanie s administrátorskými právami?

30.11.2016 00:10

Väčšina aspoň trochu skúsenejších používateľov vie, že aj keď máte na operačnom systéme Windows vytvorený administrátorský účet, aplikácie pre bezpečnosť nefungujú vždy splnými administrátorskými práv ...

Ako na to 2

Tipy a triky: Ako vypnúť uzamykaciu obrazovku vo Windows 10?

29.11.2016 00:10

Rozčuľuje vás, že pred každým prihlásením doúčtu vášho počítača musíte prejsť uzamykacou obrazovkou? Windows 10 na tejto obrazovke ukazuje čas,dátum anejakú zaujímavú fotografiu zrôznych kútov sveta. ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá