11. Efektivita algoritmov

• Aké druhy efektivity rozlišujeme?

• Ako hodnotíme efektivitu algoritmov? Na konkrétnom algoritme ukážte spôsob hodnotenia efektivity.

• Uveďte príklad, ktorý je možné riešiť pomocou pažravej metódy a uveďte riešenie.

• Aké druhy efektivity rozlišujeme?

 

       Ak chceme, aby naše programy bežali rýchlo , či dokonca , aby sme sa dožili ich úspešného ukončenia, mali by sme dbať o ich efektivitu. Tá sa dá merať časovou a pamäťovou zložitosťou.

Príklad: Na vyučovaní matematiky dostali asi 10-roční žiaci úlohu spočítať prvých 100 prirodzených čísiel. (Učiteľ’ si chcel v kľude prečítať noviny, a keby nestihol, zvýši počet.) Žiaci postupovali väčšinou podľa jeho predpokladov: sčítali postupne 1+2+3+4+5+… a trvalo im to úmerne ich “sčítacím” schopnostiam. Našiel sa však žiak, nazvyme ho malý Gauss, ktorý prevrátil plány učiteľa naruby. Nekonal hneď, ale rozmýšľal: 1+100=101,2+99=101, 3+88=101,… a takýchto dvojíc je polovica z počtu čísiel, teda 50. Vynásobenie 50×101 = 5 050 bolo otázkou okamihu.

 Neefektívnym algoritmom  bolo postupné sčítavanie:          1+2+…+99+100 = 5050.

ü  Omnoho efektívnejším spôsobom  bol výpočet:                    (1+100)*50 = 5050.

Prichádza hneď do úvahy zovšeobecnenie riešenia tak, aby bol postup hromadný, teda riešil problém pre ľubovoľný počet prvých prirodzených čísel N. Tu je:

SÚČET = N/2 x (N+1)

      Jeho efektívnosť je optimálna – nech je počet prirodzených čísiel ľubovoľne veľký, pre zistenie súčtu stačí jedno sčítanie, jedno násobenie a jedno delenie.

Každý správny programátor by mal poznať nielen programovací jazyk, ale aj zásady pre tvorbu algoritmu. Tie by mali spĺňať šesť základných vlastností:

  • · elementárnosť – jednoduchosť a zrozumiteľnosť jednotlivých krokov,
  • · determinovanosť – jednoznačne definovaný nasledujúci krok,
  • · rezultatívnosť – pre rovnaké vstupy tie isté výsledky,
  • · konečnosť – algoritmus skončí po vykonaní konečného počtu krokov,
  • · hromadnosť algoritmus platí pre čo najväčší rozsah rozdielnych vstupných hodnôt,
  • · efektívnosť.

Efektívny algoritmus je taký algoritmus, ktorého vykonávanie je čo najrýchlejšie a nároky na operačnú pamäť sú minimálne. V praxi je veľmi ťažké zladiť dohromady obidve kritéria. Väčšinou je algoritmus buď veľmi rýchly, ale využíva pomerne veľa premenných – je časovo efektívny, alebo nie je čo najrýchlejší, ale zato všetky jeho premenné zaberajú minimálnu veľkosť operačnej pamäte – je pamäťovo efektívny. Ak porovnávame dva algoritmy, ktoré riešia správne tú istú úlohu, potom je časovo efektívnejší ten, ktorého vykonávanie pre rovnaké vstupné údaje trvá kratšie. Pamäťovo efektívnejší bude zasa ten, ktorého všetky premenné zaberajú menšiu operačnú pamäť. Úprava algoritmu na efektívnejší tvar sa nazýva optimalizáciou.

• Ako hodnotíme efektivitu algoritmov? Na konkrétnom algoritme ukážte spôsob hodnotenia efektivity.

 

Kritériá, ktoré sa obyčajne používajú pri hodnotení efektivity algoritmov, sa nazývajú

časová a pamäťová zložitosť algoritmov.

Pamäťovú zložitosť definujeme ako závislosť pamäťových nárokov algoritmu na veľkosti riešeného problému alebo vstupných údajov. Meriame ju spravidla v jednotkách veľkosti pamäti, teda v bitoch alebo bytoch.. Je to funkcia, ktorá každej hodnote vstupných údajov priraďuje počet pamäťových miest potrebných na uskutočnenie výpočtu.

Časovú  zložitosť určujeme počtom elementárnych operácií, ktoré budú uskutočnené pri výpočte programu so vstupnými údajmi. Je to  funkcia, ktorá každej hodnote N udávajúcej veľkosť konkrétneho problému priraďuje počet operácií vykonaných pri výpočte daného algoritmu. Táto funkcia je spravidla rastúca. Výborným  nástrojom pri  analýze časovej zložitosti algoritmov sú úlohy typu „koľko hviezdičiek program vypíše“.  Vhodné vloženie riadku vypisujúceho hviezdičky do programu umožňuje zistiť potrebný počet výpisov hviezdičiek, teda počet krokov algoritmu.

Napr.  Koľko hviezdičiek vypíše nasledujúca časť programu, ak premenná N obsahuje hodnotu 20?

   for i := 1 to N do

       for j := i + 1 to N do

write(‘*’);

Ľahkou simuláciou programu dostaneme , že počet výpisov riadkov je 190, teda aj taký počet hviezdičiek. Náš program obsahuje dva vnorené for-cykly, pričom rozsah každého z nich je nanajvýš  N . Dokopy teda tento algoritmus vykoná nanajvýš  N2  iterácií, a teda je jeho časová zložitosť nanajvýš  kvadratická od N . Toto môžeme matematicky zapísať: „tento algoritmus má časovú zložitosť O(N2).

Iste všetci z matematiky poznáme pojem najväčší spoločný deliteľ. Algoritmus výpočtu NSD pre dve zadané hodnoty,

Riešenie 1:

V tele cyklu sa robí jediný príkaz, znižovanie premennej NSD o 1.  Pre dvojicu čísel 24 a 42 by sme vykonali telo cyklu 18-krát.

 

Riešenie 2:

 Využime pre hľadanie NSD vylepšený Euklidov algoritmus. Jeho podstata je veľmi jednoduchá a matematicky by sme ju mohli zapísať takto:

             pre a<b je NSD(a,b-a)

NDS(a,b) =  pre a=b je a

            pre a>b je NSD(a-b,b)

 Ukážme si to na príklade čísel 24 a 42.

   a=24, b=42,         keďže 24<42, tak

   a=24, b=42 – 24 =18     keďže 24>18, tak

   a=24 – 18 =6, b=18      keďže 18>6, tak

   a=6, b=18 – 6=12       keďže 18>12, tak

   a=18 – 12=6, b=12        keďže 12>6, tak

   a=6, b=12 -6 =6        keďže 6=6, tak NSD(24,42)=6

 

       Program Euklidovho algoritmu pre výpočet NSD vyzerá takto:

       Pre dvojicu čísel 24 a 42 by sme vykonali telo cyklu 4-krát. Toto riešenie je oproti predošlému nielen časovo efektívnejšie, ale aj pamäťovo efektívne, lebo sme ušetrili jednu premennú.

Časová a pamäťová zložitosť algoritmu sa nedá nikdy presne určiť, vždy sa odhaduje iba približne. Napr. ak potrebujeme vykonať cyklus N-krát, potom jeho časová zložitosť O je N.t, kde t je konštanta, ktorá predstavuje čas vykonania tela cyklu. Veľakrát sa konštanta t zanedbáva a preto časová zložitosť takéhoto algoritmu je O(N) – ide o  funkciu tA takú,  že hodnota tA (N)  je najmenší počet krokov, ktoré  algoritmu stačia na spracovanie ľubovoľného vstupu veľkosti  N. Pri stanovení zložitosti algoritmov je  podstatná  rýchlosť rastu príslušnej funkcie. Napr. o algoritme, ktorého časovú zložitosť charakterizuje predpis 2N2 +3N + 1 stačí zistiť, že s rastúcim N sú jeho časové nároky úmerné N2 , čiže príslušná funkcia časovej zložitosti je kvadratická, čo zapisujeme v tvare O(N2).

V praxi používané algoritmy majú väčšinou niektorú z nasledujúcich zložitostí:

  • O(log N) – logaritmická
  • O(N) – lineárna
  • O(N log N) – lineárnologaritmická
  • O(N2) – kvadratická
  • O(N 3) – kubická
  • všeobecne O(NX) – polynomiálna
  • všeobecne O(XN) – exponenciálna.

Uvedené typické zložitosti algoritmov sú usporiadané vzostupne podľa rýchlosti rastu. Algoritmy, ktorých funkciu časovej zložitosti môžeme zhora obmedziť polynómom v N nazývame polynomiálne. Algoritmy s väčšou časovou zložitosťou nazývame exponenciálne. Ich typická časová zložitosť je  O(2N).

Aj keď majú dva algoritmy približne rovnakú časovú zložitosť je lepšie vybrať lepší, najmä ak pracujeme s veľkým počtom údajov. Typickým príkladom je triedenie údajov. Jednoduchšie triedenia majú časovú zložitosť O(N2), kým tie lepšie O(N.log N).,čiže prvý z nich urobí pri utriedení N čísel N2 operácií porovnania a druhý N. log N porovnaní . Pokiaľ by na istom počítači trvalo jedno porovnanie 0,1 ms, potom pri utriedení 100 čísel pomocou prvého algoritmu by trvalo  1 sekundu a pomocou druhého algoritmu 0,07 s.  Toto nie je veľký rozdiel, avšak ak by sme potrebovali utriediť 100 000 čísel rozdiel medzi oboma algoritmami bude zásadný: program s kvadratickou zložitosťou by počítal viac ako 11 dní, zatiaľ čo druhý algoritmus urobí prácu za necelé tri minúty.

Skúsme si teraz položiť otázku opačne: ak vieme, akú má náš program časovú zložitosť a vieme, ako dlho ho sme ochotní nechať bežať, aký najväčší vstup ešte stihne spracovať? V nasledujúcej tabuľke uvádzame názorný prehľad odpovedí na túto otázku pre niekoľko zaujímavých časových zložitostí.

Uvedieme ešte jeden príklad na výpočet časovej zložitosti konkrétneho algoritmu

Napr.: Danica vlani dostala od šéfa za úlohu zistiť, či nemajú v databáze zákazníkov nejakého zákazníka omylom viackrát. Túto úlohu vyriešila tak, že napísala program, ktorý porovnal každú dvojicu zákazníkov. Keď ho spustila, program necelé dve minúty bežal a na záver vypísal, že žiadne duplikáty nenašiel. Dnes má firma trikrát toľko zákazníkov ako pred rokom. Ak by dnes Danica spustila svoj program (na tom istom počítači ako vlani), ako dlho by čakala, kým program dobehne?

Riešenie : O Danicinom programe opäť môžeme rozumne predpokladať len jediné: že jeho časová zložitosť je kvadratickou funkciou od počtu zákazníkov. Teraz už len stačí, keď si uvedomíme, že nič viac ani vedieť nepotrebujeme. Ak si počet zákazníkov označíme  N, tak pre dostatočne veľké N,   bude časová zložitosť Danicinho programu takmer presne priamo úmerná N2. Stačí si uvedomiť, že počet krokov, ktoré program vykoná pre 3N zákazníkov, musí byť s rovnakým koeficientom priamo úmerný číslu (3N)2. A keďže (3N)2 = 9N2,  bude to programu trvať 9-krát dlhšie ako v prvom prípade — čiže približne štvrť hodiny.

Uveďte príklad, ktorý je možné riešiť pomocou pažravej metódy a uveďte riešenie

 

Niektoré typy algoritmických príkladov môžeme riešiť pažravou metódou. Ak riešime úlohu pažravo, znamená to, že v každej situácii sa snažíme nájsť najlepšie možné riešenie a dúfame, že výsledné riešenie bude tiež najlepšie možné.

Príklad 1 : Úloha o zlate

Skúste si napríklad ručne vyriešiť nasledovný prípad: Máme v hotovosti 300eur. Dnešná cena zlata je 34eur za gram. V nasledujúcich  dňoch sa táto cena bude meniť nasledovne: zajtra 32eur/g, pozajtra 30eur/g, v ďalších dňoch to bude postupne 35, 33 , 32 ,  38,  40 a 37 eur/g. Viete mať na konci posledného dňa 400eur? A dá sa dosiahnuť ešte viac?

Optimálne riešenie: Počkáme, kým cena  klesne na 30 eur za gram. Vtedy nakúpime za všetky peniaze 10 gramov zlata. Na druhý deň ho zase všetko  predáme, takže budeme mať 350 eur. Znova počkáme, kým cena klesne na 32 eur/g. Vtedy nakúpime zlato, budeme ho mať zhruba10,9  gramu. Počkáme si na cenu 40 eur/g a všetko zlato predáme, čím dostaneme výslednú sumu 437,5 eura.

Všimnime si, že v našej stratégii na riešenie úlohy sa striedajú dva kroky: počkáme  na lacné zlato a nakúpime; počkáme na drahé zlato a predáme. Ako ale exaktne definovať, čo je „lacné zlato , a teda kedy nakupovať a kedy predávať? Vo všeobecnosti sa algoritmus na nájdenie optimálneho zárobku dá sformulovať až prekvapujúco jednoducho. Všimnime si, že každú noc sa akosi zmení cena zlata. Ak narastie, chceme tú noc vlastniť zlato, aby sme rastom ceny zarobili. Ak klesne, chceme tú noc vlastniť peniaze, aby sme neprerobili.

Takto sa teda každý večer môžeme pažravo rozhodnúť, či chceme zlato alebo peniaze, a podľa toho nakúpiť alebo predať. V tejto jednoduchej úlohe sme sa teda stretli so situáciou, kedy sme globálne optimálne riešenie zostrojili tak, že sme postupne urobili niekoľko lokálne optimálnych rozhodnutí. (K najvyššiemu záverečnému kapitálu sme sa dopracovali  tak, že sme každý deň zodpovedali otázku: „Čo spraviť, aby som mal zajtra čo najviac peňazí? )

Veštica Teodora, ktorá sa nikdy nemýli, nám predpovedala, ako sa bude vyvíjať cena zlata v nasledujúcich dňoch. Ako s ním obchodovať, aby sme si čo najviac zarobili?

 

Príklad 2 : Dláždenie mesta

Bolo raz jedno mesto a to malo cesty nevydláždené. Akonáhle sa strhla búrka, všetky cesty boli zablatené.

Magistrát mesta sa rozhodol s touto situáciou niečo spraviť– vydláždiť niektoré cesty. Peňazí však nikdy nie je nazvyš, a tak chcú použiť čo najmenej dlaždíc. Na papieri dostanete obrázok mesta a cesty medzi domčekmi. Pre každú cestu z obrázka vidíte, koľko dlaždíc treba na jej vydláždenie. Vyfarbite cesty, ktoré chcete vydláždiť. Tieto cesty vyberte tak, aby sa po nich dalo dostať z každého domčeka do každého. Pokúste sa položiť čo najmenej dlaždíc.

Jedno možné riešenie :

Začneme z ľubovoľného domčeka. K nemu pripojíme jeho najbližšieho suseda (t. j. toho, ku ktorému vedie cesta s najmenej dlaždicami). Teraz nájdeme spomedzi zvyšných domčekov ten, ktorý vieme najlacnejšie pripojiť k jednému z prvých dvoch, a pripojíme ho k nim. Postup opakujeme, až kým k vznikajúcej cestnej sieti postupne nepripojíme všetky domčeky.

Príklad 3 : Navrhnite nejakú sadu nominálnych hodnôt mincí, pre ktorú pažravý algoritmus nefunguje – teda existuje suma, ktorá sa dá zaplatiť menej mincami ako povie pažravý algoritmus.

Riešenie : Takouto sadou  mincí môže byť napríklad  sada obsahujúca hodnoty 6 korún, 4 koruny a 1 koruna. Ak by sme chceli zaplatiť sumu 8 korún, pažravý algoritmus by nám poradil zaplatiť troma mincami: 6, 1, 1. Lepšie by však bolo zaplatiť dvoma mincami, 4 a 4.

 

Čo to teda sú tie pažravé algoritmy?

Ak riešime úlohu pažravo, znamená to, že v každej situácii sa snažíme nájsť najlepšie možné riešenie a dúfame, že výsledné riešenie bude tiež najlepšie možné. V úlohe o zlate to znamenalo, že v každej situácii sme nakupovali na poslednú chvíľu, kým ešte cena klesala a predávali na poslednú chvíľu, kým cena stúpala.

V úlohe o dláždení mesta sme dláždili tie cesty, na ktoré stačilo použiť najmenej dlaždíc.

Takýto postup je prirodzený, lebo väčšina ľudí sa správa pažravo „od prírody―, či už pre uspokojenie svojich potrieb alebo potrieb rodiny. Ak však chceme nachádzať optimálne riešenia, musíme si dávať pozor na to, či pažravá stratégia dáva naozaj optimálne riešenie pre konkrétnu úlohu.

 

Reklamy

13. Programátorské jazyky a prostredia

• Porovnajte jazyky Pascal a Logo z hľadiska programátora ako aj ich vhodnosti pre vyučovanie programovania.

• Aký vplyv má výber programátorského prostredia na vyučovanie?

• Navrhnite a zdôvodnite poradie tém výučby programovania na vybranom stupni školy.

 

 

Na vyučovanie programovania detí základných škôl treba používať „špeciálne“ pedagogické postupy a „metodické pomôcky“. Tieto metodické pomôcky sa nazývajú malé programovacie jazyky (alebo detské) a sú špeciálne tým, že spôsob výučby programovania je prispôsobený deťom. Nevýhodou voľby takéhoto jazyka je, že v ďalších stupňoch výučby treba prechádzať na iný jazyk,  zväčša Pascal. Žiak sa opäť musí naučiť, ako vyzerajú jazykové konštrukcie, ktoré sa už raz učil a až potom môže pokračovať v ďalšom vzdelávaní.

Malé jazyky sú vizuálne intuitívne, jednoduché a silné nástroje na uvedenie žiakov do sveta programovacích jazykov. Sú dobrým základom pre všeobecné počítačové učenie, poskytujú nahliadnutie do programovania pre žiaka a učia algoritmickému mysleniu.

Ideou mini-jazykov je vypracovať malý a jednoduchý jazyk pre vstup do programátorského sveta. Vo väčšine malých jazykov žiak pomocou jednoduchých príkazov ovláda nejaký objekt (korytnačku, robota alebo inú “živú bytosť”) v jej mikrosvete. Žiak priamo na obrazovke pozoruje správanie objektu a sleduje, ako sa vykonávajú jeho príkazy. Objekt môžeme ovládať zadávaním jednoduchých príkazov do príkazového riadku, alebo písaním zložitejších programov. Malý jazyk v zásade obsahuje príkazy a operácie na riadenie objektu. Väčšina mini-jazykov obsahuje základné riadiace štruktúry (podmienené vykonávanie, cyklus, rekurziu, atď.) a mechanizmus na vytváranie nových inštrukcií (príkazov, podprogramov). Termínom malé jazyky označujeme kombináciu objektu a jazyka, ktorým tento objekt ovládame. V existujúcich malých jazykoch sa žiaci učia ovládať viditeľný objekt, ktorým môže byť napríklad korytnačka . Objekt dokáže vykonávať niekoľko jednoduchých príkazov a reagovať na základné príkazy vracajúce hodnotu
Existuje viacero dôvodov, prečo vyučovať malé jazyky. Predovšetkým poskytujú dobrý základ pre učenie vyšších jazykov, ako Pascal, C a iné. Otvárajú cestu k novej vzdelávacej príležitosti. Malé jazyky tiež poskytujú pevný základ pre systematické riešenie problému aj pre ľudí, ktorí budú “programovať” len na úrovni tabuľkových procesorov, databázových systémov, alebo iných aplikačných programov.

Ďalšou dôležitou výhodou malých jazykov je, že tvorca jazyka nie je viazaný na syntax a sémantiku “veľkých” programovacích jazykov, ktoré nie sú vhodné pre začiatočníkov. Jazyk je vytvorený pre presne určený vzdelávací cieľ, pre presne definovanú skupinu žiakov. Môže používať prirodzený jazyk žiakov. Jeho prostredie je veľmi atraktívne.

 

Logo

Programovací jazyk Logo vznikol v roku 1967 (Wally Feurzeig, Seymour Papert). Autori ho pôvodne navrhli pre účely hravého vyučovania matematiky, práce so slovami a vetami. Syntax jazyka Logo vychádza z funkcionálneho jazyka LISP. S jazykom Logo je spojená korytnačia grafika. Tá sa stala súčasťou jazyka Logo až neskôr, keď vznikla snaha riadiť reálny (korytnačí) robot. Postupne sa Logo stalo jazykom – prostredím, ktoré sprístupnilo počítače a programovanie deťom. Logo zažilo svoj vzostup najmä v 80. rokoch, keď sa osobné počítače stali dostupnejšie.

Ukážka programu v jazyku Logo:

repeat 10 [print “Ahoj]

Tento jazyk sa v súčasnosti úspešne používa pri vyučovaní programovania. Z pohľadu didaktiky je nesmierne cenná najmä jednoduchosť a interaktívnosť programovacieho prostredia. Znamená to napríklad, že príkaz dopredu 100, ktorý zadáme do príkazového riadku, sa okamžite vykoná a na obrazovke vidíme výsledok – kresbu.

Pokým nepotrebujeme vytvárať príliš zložité projekty, má programovací jazyk pre začiatočníka jednoduchú syntax, jednoduché pravidlá, ktoré sa dajú vysvetliť priamo alebo prostredníctvom prístupných metafor (napríklad, korytnačka ako metafora pre grafické pero). Cenné sú aj zmysluplné chybové hlásenia. Nevýhodou jazyka Logo je, že už v mierne zložitejších situáciách si musíme dávať pozor na vyhodnocovanie výrazov. Napríklad, pokým výrazy neumiestnime do zátvoriek, vyhodnocujú sa inak, ako by hovorila intuícia: zoznam 1 alebo zoznam 1 2 3 sú zlé zápisy, správne sú (zoznam 1) alebo (zoznam 1 2 3).

 

PASCAL

Programovací jazyk Pascal vznikal v rokoch 1968–9 a verejnosti bol sprístupnený v roku 1970 (Niklaus Wirth). Jazyk bol od počiatku navrhovaný ako malý, ale pritom silný a efektívny programovací jazyk, ktorý by bol vhodný predovšetkým (avšak nie iba) pre vyučovanie programovania, pre získanie dobrých programátorských návykov a získavaní skúseností pri práci s údajovými štruktúrami.

Ukážka programu v jazyku Pascal:

var i: integer;

begin

for i:=1 to 10 do

writeln(‘Ahoj’);

end.

Objekty boli do jazyka Pascal zavedené až v roku 1986, čím vznikol jazyk Object Pascal. V tomto období boli mnohé vlastnosti objektovo orientovaného programovania dostatočne preskúmané. Preto sú určité vlastnosti objektovo orientovaného programovania implementované v jazyku Pascal premyslenejšie ako v jazyku C++. Firma Borland stála za vývojom obľúbeného prostredia Turbo Pascal. V 80. a 90. rokoch sa tieto prostredia označovali skratkou IDE (Integrated Development Environment = integrované vývojové prostredie). IDE prostredie v sebe obsahovalo editor programu, kompilátor a nástroje na trasovanie a ladenie programov. V 90. rokoch, s nástupom prostredia Delphi, sa pre vývojové prostredie používalo označenie RAD (Rapid Application Development = rýchly vývoj aplikácie). To preto, lebo pomocou komponentov mohli programátori rýchlo zostaviť vzhľad aplikácie.

 

V priebehu 90. rokov nastáva éra Windows, mení sa spôsob práce s počítačom a jeho aplikáciami. Doposiaľ bežala väčšina aplikácií v textovom režime. Nové aplikácie však ponúkajú grafické používateľské rozhranie. Preto aj tvorcovia oknových aplikácií musia využiť iné stratégie programovania. V roku 1995 vzniká prostredie Delphi, ktoré pomocou komponentov umožnilo elegantne vytvárať plnohodnotné oknové aplikácie. Z didaktického hľadiska ostáva jazyk Pascal stále vhodným kandidátom na vyučovanie programovania. Existuje k nemu veľa metodických materiálov a postupov, nezaťažuje žiakov–začiatočníkov mnohými technickými podrobnosťami ani komplikovanými syntaktickými pravidlami. Pre začiatočníkov môžu byť problémom súčasné prostredia Delphi alebo Lazarus, ktoré, pokým ich vhodne nenakonfigurujeme, vyzerajú pomerne zložito. Niektorí pokročilí žiaci jazyk Pascal nemajú radi. Zdá sa im príliš rozvláčny a nie až tak trendový, ako „céčkové“ programovacie jazyky.

 

V jazyku Pascal musíme na začiatku programu vymenovať aké premenné v programe používame (deklarácia premenných). Deklaračnú časť si môžeme predstaviť ako titulky k filmu, kde sa uvádzajú mená hercov (premenné), ktorí hrajú v hlavnom deji (programe medzi slovami BEGIN a END). Komentáre sú uzatvorené do zložených zátvoriek. Žiak po odladení syntaktických chýb začína hľadať logické chyby. Hľadanie logických chýb uľahčuje krokovanie programu. Je to postupné spúšťanie príkazov v programe. Výhodou krokovania je, že žiak môže priebežne prezerať obsahy jednotlivých premenných a podľa nich zistiť pokiaľ je beh programu v poriadku a kde asi nastala chyba.

Na vyučovanie programovania na ZŠ sa odporúča používať detský programovací jazyk.

Odporúčaná učebnica programovania je Tvorivá informatika: 1. zošit z programovania, ktorá používa jazyk Imagine Logo.

Z prvého stupňa základnej školy by mali žiaci vedieť používať klávesnicu a editovať krátke texty.

Programujeme interaktívne, príkazy zadávame do príkazového riadka spočiatku po jednom. Po zadaní sa príkaz okamžite vykoná.

Vyučovanie programovania v Imagine Logu začíname programovaním kreslenia v korytnačej grafike. Súčasne s procedurálnym programovaním zoznamujeme žiakov s princípmi objektovo -orientovaného a udalosťami riadeného programovania. Volíme vyučovacie postupy, ktoré podporujú konštruktívny poznávací proces. Navrhujeme zmysluplné aktivity. Nové pojmy demonštrujeme na jednoduchých príkladoch. Uzavreté úlohy striedame s tvorivými zadaniami. Podporujeme experimentovanie a hry s malými didaktickými aplikáciami. V programovaní využívame väzby na ostatné tematické okruhy informatiky a medzipredmetové vzťahy.

 

 

Na prvom stupni základnej školy sa žiaci na hodinách informatickej výchovy stretli s ikonickým programovaním. Vedia zostavovať krátke postupnosti ikonických príkazov. Ikonické programovanie je pre deti mladšieho školského veku vhodné najmä preto, lebo eliminuje problémy s editovaním príkazov (malá zručnosť v práci s klávesnicou, preklepy, syntaktické chyby). Ikonické príkazy sa vyberajú z ponuky a zoraďujú sa do postupnosti väčšinou ťahaním alebo klikaním myšou.

 

ŠVP nepredpisuje používanie žiadneho konkrétneho programovacieho prostredia. Učiteľ si môže vybrať sám. Kritériom výberu je dostupnosť prostredia a metodickej podpory (učebnica, komunita používateľov), vlastnosti a možnosti prostredia.

 

ISCED1 – 1. stupeň ZŠ: Informatická výchova

Pojmy:

  • · postup, návod, recept,
  • · riadenie robota, obrázková stavebnica, postupnosť krokov,
  • · detský programovací jazyk, elementárne príkazy, program,
  • · robotická stavebnica.

Vlastnosti a vzťahy, postupy a metódy:

  • · skladanie podľa návodov (stavebnice, hlavolamy, origami),
  • · zápis/vytvorenie postupu, receptu, návodu a práca podľa návodu,
  • · v počítačovom prostredí riešenie úloh pomocou robota, skladanie obrázkov

z menších obrazcov, okamžité vykonávanie príkazov, vykonanie pripravenej

postupnosti príkazov,

  • · riešenie jednoduchých algoritmov v detskom programovacom prostredí

(kreslenie obrázkov, pohyb animovaných obrázkov).

Obsahový štandard:

  • · získanie základov algoritmického myslenia.

Výkonový štandard:

  • · získať základy algoritmického myslenia – príkazy v priamom režime,
  • · riešiť jednoduché algoritmy v detskom programovacom prostredí.

Komentár

Na prvom stupni hrá veľmi dôležitú úlohu vhodné prostredie, akými sú napríklad prostredia Cirkus šaša Tomáša, Baltík, Karel, Panák, EasyLogo alebo Živý obraz. Tiež sa predpokladá, že pre riešenie rôznych hlavolamov, bludísk alebo úloh, v ktorých je potrebné hľadať závislosti alebo dodržiavať stanovené pravidlá, vzniknú vhodné prostredia.

ISCED2 – 2. stupeň ZŠ: Informatika

Pojmy:

  • · postup riešenia, etapy riešenia problémov,
  • · programovací jazyk, elementárny príkaz, postupnosť, procedúra, cyklus,
  • · zložitosť riešenia problému.

Vlastnosti a vzťahy, postupy a metódy:

  • · v detskom programovacom prostredí riešenie úloh s opakovaním nejakých

činností, zoskupovanie častí riešenia do procedúr,

  • · porovnanie času trvania rôznych riešení problému.

Obsahový štandard:

  • · postup riešenia, formálny zápis riešenia, etapy riešenia problémov,
  • · programovací jazyk, elementárny príkaz, postupnosť, cyklus, procedúra,

parametre, premenná, hodnota, priradenie,

  • · zložitosť riešenia problému.

Výkonový štandard:

  • · žiak dokáže zapisovať a interpretovať postupy (napríklad zápis

matematických algoritmov, algoritmus na jednoduché zašifrovanie textu),

  • · žiak demonštruje v detskom programovacom prostredí riešenie úloh s opakovaním nejakých činností, zapamätávanie výpočtov do premenných, zoskupovanie častí riešenia do procedúr,
  • · žiak dokáže porovnať čas trvania rôznych riešení problému.

Komentár

Aj na druhom stupni základnej školy bude potrebné venovať pozornosť programovaciemu prostrediu a programovaciemu jazyku. Odporúčané prostredia sú Imagine, Scratch, Karel, Baltík, prípadne detské verzie jazykov (napríklad detská verzia jazyka Pascal).

Ak vyžadujeme formálne (textové) zápisy programov, je výhodné používať interpretovaný jazyky v prostredí, ktoré umožňuje grafický výstup (Imagine–Logo). Žiaci potom získavajú prvé skúsenosti priamym zadávaním jednoduchých príkazov, ktoré čosi kreslia.

 

Témy v Logu:

1.     Korytnačí pohyb, kreslenie, hrúbky, farby

2.    Opakovanie príkazov

Námety na jednoduché vzory s opakovaním:

  • · prerušovaná čiara, bodkovaná čiara, bodkočiarkovaná čiara a iné „pásové“

vzory,

  • · štvorec, trojuholník, hviezdy, oblúky a iné „kruhové“ vzory.

3.    Tlačidlá

4.     Príkazy s podmienkou

5.    Vlastné príkazy, tvar korytnačky

Námety tém na písanie vlastných príkazov:

  • · ovocný sad: jablko, hruška, čerešňa, iné,
  • · park: listnatý, ihličnatý strom, lavička, kvet, lampa,
    • Vianoce: prskavka, hviezda, snehuliak, zvonček, iné ozdoby,
    • · mapa pokladu: topografické značky.

    6.    Príkazy so vstupmi

7.    Objekty a udalosti priKliknutí a priŤahaní

S objektmi a udalosťami sa žiaci prvýkrát stretnú pri používaní tlačidiel. Tlačidlo si vytvoria na uľahčenie písania príkazov do príkazového riadka pri kreslení obrázkov.

8.    Animované tvary a procesy

 

 

 

ISCED3 – stredná škola: Informatika

Pojmy:

  • · algoritmus, program, programovanie, etapy riešenia problému,
  • · príkazy (priradenie, vstup, výstup),
  • · riadiace štruktúry (podmienené príkazy, cykly),
  • · premenné, typy, množina operácií.

Obsahový štandard:

  • · problém, algoritmus, algoritmy z bežného života, spôsoby zápisu algoritmov,
  • · etapy riešenia problému – rozbor problému, algoritmus, program, ladenie,
  • · programovací jazyk – syntax, spustenie programu, logické chyby, chyby počas behu programu.

Výkonový štandard:

  • · analyzovať problém, navrhnúť algoritmus riešenia problému, zapísať algoritmus v zrozumiteľnej formálnej podobe, overiť správnosť algoritmu,
  • · riešiť problémy pomocou algoritmov, vedieť ich zapísať do programovacieho jazyka, hľadať a opravovať chyby, rozumieť hotovým programom, určiť vlastnosti vstupov, výstupov a vzťahy medzi nimi, vedieť ich testovať a modifikovať,
  • · riešiť úlohy pomocou príkazov s rôznymi obmedzeniami použitia príkazov, premenných, typov a operácií,
  • · používať základné typy údajov v používanom programovacom jazyku,
  • · rozpoznať a odstrániť syntaktické chyby, opraviť chyby vzniknuté počas behu programu, identifikovať miesta programu, na ktorých môže dôjsť k chybám počas behu programu.

Komentár

Tematické plány môžu byť pre školy rôzne. Napríklad, v jednom návrhu tematických plánov sa programovaniu venuje takéto množstvo hodín:

  • · v 1. ročníku 0 hodín z 32,
  • · v 2. ročníku 8 hodín z 32,
  • · v 3. ročníku 16 hodín z 30.

Téme Postupy, riešenie problémov, algoritmické myslenie sa venuje približne štvrtina celkového počtu hodín Informatiky. Napríklad, v inom návrhu pre školy so zameraním na informatiku má programovanie:

  • · v 1. ročníku 16 hodín (problém, algoritmus, etapy riešenia problému,

programovací jazyk),

  • · v 2. ročníku 16 hodín (príkaz priradenia, vstup, výstup, riadiace podmienené

príkazy, cykly, premenné, typy, množina operácií),

  • · v 3. ročníku 0 hodín.

Programovanie spočiatku tvorí malú časť informatiky. Postupne však jeho význam narastá. Predpokladá sa, že maturant si vyberie voliteľný predmet tak, aby maturitu z informatiky úspešne zvládol. Pre maturity je programovanie veľmi dôležité. Ako sme mohli vidieť, programátorské úlohy na maturitách tvoria až 50% všetkých úloh. Chceli by sme dať do pozornosti aj to, že vzdelávací program nepredpisuje žiadne programovacie jazyky ani prostredia. Vzhľadom na dobré skúsenosti a dostupnosť pedagogických materiálov by sme však odporučili používať Imagine, Pascal, Delphi prípadne Lazarus. Pripomeňme ešte, že maturitným jazykom je Pascal.

 

4. Algoritmy s poľom (v programovacom jazyku Pascal) (2.verzia)

• Prečo a v akých situáciách používame polia? Uveďte motivačné príklady, ktoré vedú k použitiu polí.
• Vysvetlite princíp práce s prvkami poľa (index, prechádzanie prvkov poľa pomocou cyklu).
• Ilustrujte použitie poľa na konkrétnom algoritme.

Pri riešení úloh, v ktorých sa pracuje s malým množstvom údajov, si vystačíme s jednoduchými premennými, ktorým dávame názvy podľa ich použitia (meno = identifikátor) – MIN, MAX, A, B, POMOC, atď. Jednoduché premenné môžu byť rôznych typov:

  • celočíselné – INTEGER
  • reálne – REAL
  • logické – BOOLEAN
  • znakové – CHAR
  • znakové reťazce – STRING

Každá jednoduchá premenná môže v danom čase obsahovať len jeden údaj svojho typu, ktorý zmeníme priraďovacím príkazom.

Úlohy, v ktorých potrebujeme pracovať s väčšou skupinou premenných si vyžadujú špeciálnu premennú, tzv. štruktúrovaný typ pole.

Polia môžu byť :

  • jednorozmerné – tie si môžeme predstaviť ako tabuľku s políčkami s poradovým číslom tzv. indexom, pričom každé políčko si pamätá jeden údaj daného typu:

prvky poľa majú rovnaké názvy, líšia sa svojím indexom = poradím v poli, napr. A[1], A[2], ……..A[100]…..

  • dvojrozmerné – tie si môžeme predstaviť ako tabuľku s riadkami a stĺpcami, znovu si každé políčko pamätá jeden údaj daného typu:

Prvky poľa sa označujú napr. B[1,1], B[1,2],……B[1,100], B[2,1], B[2,2],……B[2,100],………B[100,1], B[100,2],……B[100,100]

  • viacrozmerné

 

Indexom prvku poľa môže byť konštanta, premenná alebo aj aritmetický výraz.

Dávame pozor, aby index poľa nepresiahol deklarovaný rozsah poľa.

Príklad č. 1:  Vypíšte prvých 40 členov Fibonacciho postupnosti.

Riešenie: Pokiaľ by sme potrebovali len čisto vypísať prvých 40 členov F. postupnosti, tak by sme si poradili aj s jednoduchými premennými – A). Úloha by sa však skomplikovala, keby sme po výpise 40 členov potrebovali kedykoľvek zistiť napr. 35.člen. Znovu by sme museli počítať od začiatku. Ak použijeme pole a hodnoty jednotlivých členov si ukladáme podľa poradia – B), kedykoľvek po určení 40 členov môžeme pracovať aj s členmi s nižším poradovým číslom.

A)                    var

F1:=1; F2:=1;

for I:= 3 to 40 do

begin

F3:=F1+F2;

F1:=F2;

F2:=F3;

end;

Image1.Canvas.TextOut(20,20 ‘F(40)=‘ +IntToStr(F(40)));

B)                     var

F: array [1..40] of Integer;

F[1]:=1;F[2]:=1;

for I:=3 to 40 do

begin

F[I]:=F[I-2]+F[I-1];

end;

Image1.Canvas.TextOut(20,20 ‘F(40)=‘ +IntToStr(F(40)));

Príklad č. 2: Vytvorte program, ktorý vytvorí 200 – prvkové pole počtov obyvateľov nejakej obce. Pole sa zaplní náhodnými hodnotami (počty obyvateľov domov) a vypíše sa celkový počet obyvateľov.

Riešenie: deklarujeme pole Dom s 200 prvkami a naplníme pole náhodnými hodnotami:

var

Dom: array [1..200] of Integer;

I, SUCET: Integer;

begin

for I:= 1 to 200 do

Dom[I] := Random(9);

potom urobíme súčet prvkov poľa:

SUCET:= 0;

for I:= 1 to 200 do

SUCET:= SUCET + Dom[I];

Image1.Canvas.TextOut(20,20 ‘Počet obyvateľov obce=‘ +IntToStr(SUCET));

end;

Zadanie: Napíšte program, ktorý bude zaznačovať u žiakov v triede, koľkokrát sa medzi nimi vyskytli ktoré záujmy. Program najprv vypíše legendu:

1 = známky, 2 = modelár, 3 = hudba, 4 = tanec, 5 = šport, 6 = kniha, 7 = domáce zviera

a očakáva zadávanie čísel od 1 po 7. Pritom si eviduje počet výskytov týchto čísel. Na záver program vypíše, ktorý koníček bol najčastejší a ktorý najzriedkavejší.

Algoritmus:

  • na začiatku si zistíme počet žiakov, uložíme do premennej POCET – bude to znamenať počet zadaných hodnôt od 1 – 7
  • na zaznamenávanie počtu výskytov použijeme pole VYSKYT so 7 prvkami, index prvku poľa bude znamenať konkrétny koníček, hodnota prvkov bude predstavovať počet žiakov s daným koníčkom
  • načítanie poľa dávame do cyklu od 1 po POCET
  • ak zadáme 1, potom prvok VYSKYT[1] zväčšíme o 1
  • ak zadáme 2, potom prvok VYSKYT[2] zväčšíme o 1
  • ……
  • ak zadáme 7, potom prvok VYSKYT[7] zväčšíme o 1
  • ak zadáme iné číslo ako 1 až 7, tak by sa načítanie malo zopakovať (ošetrenie programu)
  • po ukončení cyklu zistíme maximum MAX (+index prvku) a minimum MIN (+index prvku) hodnôt poľa VYSKYT
  • vypíšeme index prvku s maximálnou hodnotou (najčastejší koníček) a index prvku s minimálnou hodnotou (najzriedkavejší koníček)

4. Algoritmy s poľom (v programovacom jazyku Pascal)

Prečo a v akých situáciách používame polia?

V programovacom jazyku Pascal v prostredí TurboDelphi sa tak ako v iných programovacích jazykoch pred použitím premenných musia tieto najprv na začiatku zadeklarovať. V samotnom programe sa potom s takto zadefinovanou premennou pracuje samostatne. Pri malom počte premenných je takýto postup bežný. Existuje však veľa úloh, kde potrebujeme pracovať s veľkým množstvom premenných, takže by sme ich museli najprv všetky zadefinovať a v programe by sa niektoré časti museli zapisovať opakovane pre všetky tieto premenné. To je  z programátorského hľadiska veľmi neefektívne.

Preto sa v prostredí TurboDelphi definuje nová premenná pole, ktorá v sebe môže obsahovať  veľké množstvo iných premenných. Podmienka ale je, aby všetky premenné v poli boli jednakého typu. Takému typu premennej hovoríme štruktúrovaný typ.

Uveďte motivačné príklady, ktoré vedú k použitiu polí.

V praxi sa stretávame s rôznymi úlohami, v ktorých sa ako vstupné údaje používajú rôzne matematické alebo fyzikálne veličiny rovnakého typu. Napríklad pravidelné meranie nočných alebo denných teplôt, sledovanie vyťažiteľnosti vlakových alebo autobusových spojov, tvorba úväzkov učiteľov, tvorba rozvrhu alebo teraz aktuálne sčítanie ľudu, zisťovanie počtu osôb v domácnostiach a podobne. Všetky tieto a im podobné úlohy by asi väčšina programátorov riešila s využitím premennej typu pole.

Vysvetlite princíp práce s prvkami poľa (index, prechádzanie prvkov poľa pomocou cyklu).

Keďže pole obsahuje spravidla veľké množstvo iných premenných, hovoríme mu štruktúrovaný typ premennej. Kreslíme ho ako jeden riadok tabuľky, kde v každom políčku je jedna premenná. Každé políčko má svoje číslo, ktorému hovoríme INDEX. Index slúži na to, aby sme vedeli jednoznačne určiť, s ktorou premennou poľa budeme pracovať. Každej premennej v poli hovoríme aj prvok poľa. Prvky sú teda zoradené vedľa seba, každý prvok má svoj jednoznačný identifikátor (číslo), ktorým je index poľa. Pri premennej napr. Teplota s indexom 2 to zapíšeme takto: Teplota[2]. Index teda píšeme do hranatých zátvoriek

1 2 3 4 5 6 7

8

Takto napríklad vyzerá pole, ktoré má 8 prvkov (premenných) s indexmi 1 až 8. Do prázdnych políčok sa načítajú hodnoty jednotlivých premenných.

  • Pri naprogramovaní nejakej úlohy s využitím poľa najskôr zadeklarujeme premennú, napríklad:

 

var

  Teplota: array [1..7] of Real;

 

Čo znamená, že naša premenná s názvom Teplota je typu pole, obsahuje 7 prvkov s indexami 1 až 7 a prvky poľa sú reálne čísla.

  • Keď chceme nejakému prvku poľa priradiť hodnotu, zapíšeme to napríklad takto:

Teplota[3] : = 15.8;

 

Čo znamená, že tretí prvok v tabuľke má nastavenú hodnotu 15,8.

Nastavenie hodnoty jednotlivým prvkom tabuľky je možné urobiť osobitne pre každý prvok, použiť funkciu Random v nejakom rozsahu, pomocou for-cyklu s nejakým predpisom a podobne.

  • Použitie for-cyklu:

Veľkou výhodou použitia polí je to, že k jednotlivým prvkom v poli môžeme pristupovať použitím for-cyklu. For-cyklus tu funguje tak, že ak je počet prvkov poľa napr. 7, počítadlo cyklu postupne mení hodnoty od 1 do 7. Premenná pre počítadlo cyklu nech je písmeno J. V programe to napíšeme takto:

var

  Teplota: array [1..7] of Real;

  J: Integer;

begin

  for J : = 1 to 7 do

    Teplota[J] : = 25.4;

Tu prechádzame prvkami poľa pomocou for-cyklu a každému prvku priradíme jednakú hodnotu 25,4 stupňov.

Ak premenná pre počítadlo for-cyklu je na začiatku zadeklarovaná napr. písmenom J, potom túto premennú môžeme využiť ako index poľa a  každému prvku poľa môžeme vo for-cykle priradiť nejakú hodnotu, dokonca môžeme s každým prvkom poľa vykonávať nejaké operácie. Napríklad:

var

  Teplota: array [1..7] of Real;

  J: Integer;

begin

  for J : = 1 to 7 do

    Teplota[J] : = 19 + Random(10);

Tu prechádzame prvkami poľa pomocou for-cyklu a každému prvku priradíme hodnotu operáciou súčtu čísla 19 a náhodne zvoleného čísla od 0 do 9. V tomto príklade je teda teplota generovaná náhodne od 19 do 28 stupňov.

Ilustrujte použitie poľa na konkrétnom algoritme.

Podobným využitím poľa môže byť vytvorenie 100-prvkového poľa počtu obyvateľov domácnosti nejakej obce, vykreslenie domov do plochy ako nejakých štvorcov vo vnútri ktorých je počet ľudí v domácnosti. Pre zjednodušenie pole naplníme náhodnými údajmi z rozsahu 0 až 10. Nakoniec vypočítame súčet obyvateľov obce.

Algoritmus riešenia popisujú nasledujúce kroky:

  • definovanie premenných: Dom – ako pole v rozsahu 1 až 200, J – ako písmeno počítadla for-cyklu, X,Y – ako súradnice kreslených štvorcov, Sucet – ako celočíselná premenná na vyjadrenie súčtu ľudí v obci
  • začiatok programu – for-cyklus od 1 do 100, v ktorom náhodne vygenerujeme počet obyvateľov v jednotlivých domácnostiach a ešte premennej Sucet priradíme počiatočnú hodnotu 0
  • vnorený cyklus, v ktorom vykreslíme do plochy štvorce do riadkov a stĺpcov s počiatočnými hodnotami súradníc X a Y. V tom istom cykle pomocou TexOut vpíšeme do štvorcov vygenerované hodnoty pre premennú Dom a premennej Sucet priradíme hodnotu Sucet + Dom [J]
  • koniec vnoreného cyklu
  • nakoniec vypíšeme do plochy hodnotu Sucet vyjadrujúci súčet všetkých obyvateľov v obci
  • koniec programu

11. Efektivita algoritmov

  • Aké druhy efektivity rozlišujeme ?

Algoritmus – s algoritmami sa bežne stretávame v každodennom živote. V podstate je algoritmus presný návod na zvládnutie určitej činnosti. Počítačom musíme preložiť postup do ich reči, do série príkazov. Algoritmus v informatike charakterizujeme ako postup, ktorým získame zo vstupných údajov v konečnom počte krokov, a teda v určitom čase odpovedajúce (správne) výstupne údaje (výsledky).

Ak chceme, aby naše programy bežali rýchlo, či dokonca, aby sme sa dožili ich úspešného ukončenia, mali by sme dbať o ich efektivitu. Tá sa dá merať časovou a pamäťovou zložitosťou.

 

Časovú zložitosť algoritmu môžeme definovať ako závislosť časových nárokov algoritmu na veľkosti konkrétneho riešeného problému alebo konkrétnych vstupných údajov. Neudávame ju však v žiadnych bežných časových jednotkách, pretože skutočná doba výpočtu programu realizujúceho navrhnutý algoritmus závisí tiež na množstve čisto technických parametrov, ako je napríklad rýchlosť procesora použitého počítača, zatiaľ čo my chceme charakterizovať rýchlosť práce algoritmu samého. Budeme preto časovú zložitosť vyjadrovať počtom elementárnych operácií (aritmetických, logických, porovnaní apod.), ktoré budú vykonané pri výpočte algoritmu nad zvolenými vstupnými údajmi. Časová zložitosť algoritmu A je teda funkcia tA, ktorá každej hodnote N, charakterizujúcej veľkosť spracovávaných údajov, priraďuje hodnotu tA(N), čo je počet operácií, ktoré algoritmus A vykoná pri spracovaní údajov veľkosti N.

Je potrebné rozlišovať časovú zložitosť algoritmu v najhoršom prípade a časovú zložitosť v priemernom prípade. Časová zložitosť v najhoršom prípade je funkcia udávajúca pre každú hodnotu N ako najdlhšie môže trvať výpočet algoritmu s ľubovoľnými údajmi veľkosti N. Naproti tomu časová zložitosť v priemernom prípade nám hovorí, ako dlho bude algoritmu v priemere trvať spracovanie vstupných údajov veľkosti N. Nie je to teda už horný odhad, ale priemerná očakávaná doba výpočtu pre údaje veľkosti N, získaná na základe úvah o všetkých možných konkrétnych hodnotách vstupných údajov veľkosti N.

Pamäťovú zložitosť algoritmu definujeme obdobne ako závislosť pamäťových nárokov algoritmu na veľkosti riešeného problému. Vyjadrujeme ju ako počet premenných, resp. pamäťových miest, ktoré algoritmus pri výpočte so zvolenými vstupnými údajmi potrebuje. Pamäťová zložitosť algoritmu A je teda opäť istou funkciou mA, ktorá veľkosti vstupných údajov veľkosti N priraďuje potrebný počet pamäťových miest mA(N), ktoré bude algoritmus A pri výpočte s týmito údajmi využívať.

I keď sa obmedzíme iba na časovú a pamäťovú zložitosť algoritmov pri hľadaní toho najlepšieho, môžeme sa dostať do ťažkej situácie, pretože tieto dve kritériá často stoja proti sebe. Stáva sa totiž, že k zrýchleniu výpočtu musíme použiť nejakú pomocnú dátovú štruktúru slúžiacu k uchovávaniu vopred spočítaných a pripravených hodnôt. Najrýchlejší možný algoritmus riešiaci úlohu potom nie je optimálny z hľadiska pamäťových nárokov a naopak algoritmus s najmenšou pamäťovou zložitosťou zase nemusí byť najrýchlejší.

V súčasnej dobe sa obyčajne dáva prednosť časovému hľadisku a hľadajú sa čo najrýchlejšie algoritmy, a to i za cenu potreby dodatočnej pamäte.

  • Ako hodnotíme efektivitu algoritmov? Na konkrétnom príklade ukážte spôsob hodnotenia efektivity.

 

Každý správny programátor programátor by mal poznať nielen programovací jazyk, ale aj zásady pre tvorbu algoritmov. Tie by mali spĺňať šesť základných vlastností: elementárnosť, determinovanosť, rezultatívnosť, konečnosť, hromadnosť, efektívnosť.

Efektívnosť algoritmu

-určuje sa najmä vzhľadom na potrebný výpočtový čas a požadovanú kapacitu pamäti,

-efektívny algoritmus je taká postupnosť krokov, ktorá daný problém rieši s minimálnym počtom použitých prostriedkov v čo najkratšom čase.

Pri zložitých problémoch je efektívnosť algoritmu druhoradá – cieľom je zvyčajne vytvoriť akýkoľvek algoritmus, otestovať ho a až potom prípadne zvýšiť jeho efektivitu.

Aj algoritmus, ktorý nie je efektívny môže fungovať správne. Efektívnosť je preto skôr rozširujúcou vlastnosťou, ako podmienkou pre nevyhnutne správny postup. Efektívny algoritmus je taký, ktorý s použitím minimálneho počtu prostriedkov v čo najkratšom čase vyrieši daný problém.

Príklad: Vypočítajte súčet čísel od 1 do 100. Neefektívnym algoritmom by bolo postupné sčítavanie 1+2+…+99+100. Omnoho efektívnejším spôsobom by bol výpočet (1+100)*50.

  • Uveďte príklad, ktorý je možno riešiť pomocou pažravej metódy a uveďte riešenie.

 

Čo to  teda sú tie pažravé algoritmy?(Greedy algorithms) Ak riešime úlohu pažravo, znamená to, že v každej situácii sa snažíme nájsť najlepšie možné riešenie a dúfame, že výsledné riešenie bude tiež najlepšie možné. Takýto postup je prirodzený, lebo väčšina ľudí sa správa pažravo „od prírody“, či už pre uspokojenie svojich potrieb alebo potrieb rodiny. Ak však chceme nachádzať optimálne riešenia, musíme si dávať pozor na to, či pažravá stratégia dáva naozaj optimálne riešenie pre konkrétnu úlohu.

Príklad:

Greedy algoritmus – Vyplatenie mincí v banke.  (V úlohe o minciach vždy použijeme najväčšiu možnú mincu.)

Potrebujem vyplatiť 49 Sk pomocou čo najmenšieho počtu bankoviek a mincí.

  1. Zoberiem lokálne maximum (v našom prípade 20 Sk, pretože je to najväčšia použiteľná bankovka), čiže 49 – 20 = 29, použité = [dvadsať korún]
  2. 29 – 20 = 9, použité = [dvadsať korún, dvadsať korún]
  3. 9 – 5 = 4, použité = [dvadsať korún, dvadsať korún, päť korún]
  4. 4 – 2 = 2, použité = [dvadsať korún, dvadsať korún, päť korún, dve koruny]
  5. 2 – 2 = 0, použité = [dvadsať korún, dvadsať korún, päť korún, dve koruny, dve koruny]

Pomocou greedy algoritmu som na základe lokálne najoptimalnejšieho riešenia našiel riešenie celkového problému. 49 Sk vyplatím použitím bankoviek a mincí [dvadsať korún, dvadsať korún, päť korún, dve koruny, dve koruny], pričom je to najmenší možný počet.

Kontrapríklad:

Predstavme si situáciu, kde máme iba mince 1, 4, 5 a chcem rozmeniť 8 korún na najmenej mincí (modelová situácia). Greedy algorimus v prvom kroku zoberie najväčšiu použiteľnú mincu, t.j. 5. V ďalšom kroku mu ostáva použiť uz iba mincu 1. Čiže výsledne riešenie pomocou greedy algoritmu bude v tvare [päť korún, jedna koruna, jedna koruna, jedna koruna]. Toto riešenie ale nieje optimálne. Optimálne riešenie je [štyri koruny, štyri koruny].

20. Digitálne technológie menia vzdelávací proces

• Charakterizujte moderný edukačný softvér, didaktickú techniku a učebné materiály.

• Navrhnite scenár vyučovacej hodiny s využitím moderného edukačného softvéru,  didaktickej techniky a učebných materiálov.

• Porovnajte vyučovanie bez, resp. s využitím moderného edukačného softvéru, didaktickej techniky a učebných materiálov.

Charakterizujte moderný edukačný softvér, didaktickú techniku a učebné materiály.

IKT nerovná sa DT

IKT – označujeme široký súbor prostriedkov, postupov a znalostí používaných na spracúvanie a komunikáciu informácií, zdôrazňuje informačnú stránku týchto procesov.

DT – vo vzdelávacom procese rozpoznávame informačné aspekty a konštrukčné aspekty. Informačné aspekty sú zamerané na získavanie informácií. Konštrukčné aspekty – sú zamerané na tvorbu, objavovanie, konštruovanie.(pomáhajú tvoriť, skúmať, objavovať, vyjadrovať, rásť…).

Digitálne technológie DT – okrem počítača zahŕňajú širokú škálu zariadení a prostredí napr.:

DT – prinášajú žiakom pocit samostatnosti, vlastnej kontroly, nárast sebadôvery, sebaúcty, motivácie, majú pozitívny a motivujúci dopad na učenie sa žiakov, lepšiu koncentráciu.

–          sú ťažiskové pre deti so špeciálnymi vzdelávacími potrebami, ktoré vyžadujú iný spôsob

komunikácie, interakcie, učenie sa, fyzické, mentálne postihnutie. Napr. zrakovo postihnutí –lupa, čítač obrazovky, braillov riadok; sluchovo postihnutí –písacie telefóny, zariadenia simulujúce odpozerania úst; telesné postihnutie – trackball, alternatívna klávesnica, špeciálna palička do úst.

Moderný edukačný softvér – považujeme taký softvérový prostriedok, ktorý

sa  cieľavedome používa na podporu učenia a učenia sa.

Takýto softvér by mal:

  • mať primerané používateľské prostredie – primerané veku adresáta a účelu používania, t.j. dodržiavať  princíp primeranosti ,
  • produktívne využívať možnosti vizualizácie – používať vizuálne manipulovateľné objekty, vizualizáciu údajov, vizualizáciu stavu práce a pod.,
  • byť interaktívny – čiže reagovať na naše požiadavky a riadenie, spolupracovať s používateľom,
  • byť otvorený – t.j. nie zamknutý voči novým aktivitám, inej grafike, vlastným zadaniam a pod.,
  • podporovať náš didaktický zámer (napr. poskytovať spätnú väzbu),
  • podporovať rozmanitosť, pestrosť a atraktívnosť aktivít,
  • byť zameraný na danú tému a daný účel (nezaťažovať používateľa a učiteľa inými problémami a nerozptyľovať tak ich pozornosť),
  • poskytovať rastúce  úrovne náročnosti a podporovať individuálny prístup žiaka.

Kvalitný edukačný softvér nám pomáha experimentovať, manipulovať s objektami, objavovať vzťahy a zákonitosti, skúmať a konštruovať. Konštruovať niečo, a tak  konštruovať naše poznanie .


Použitie moderného edukačného softvéru:

Úlohou tvorivého učiteľa je projektovať výučbu tak, aby  mal  žiak možnosť  absolvovať všetky etapy poznávacieho procesu, a tak si vytvoriť a zafixovať nový poznatok. Ten by mu teda

mal pomáhať

  • vytvoriť alebo  zvýšiť motiváciu pre danú problematiku- príležitosti cez  interakciu a vizualizáciu (počítač rýchlo vypočíta potrebné transformácie objektov, údajov či aktérov a zobrazí ich v názornej a atraktívnej forme),
  • získať konkrétne skúsenosti – napr. aj vďaka  koncentrácii na danú tému  –žiak môže zažiť veľa situácií či riešiť veľa úloh,
  • fixovať vytvorený poznatok (utužiť ho).

(E-learning, learinig management system –Moodle, mobilné vzdelávanie, vzdialené a virtuálne laboratória, virtuálne simulácie, Logo –Mikrosvet, Geografické informačné systémy….)

Učebné materiály

Ak chceme skúmať moderné trendy v učebných materiáloch, mali by sme dôsledne  rozlišovať medzi:

  • formou učebného materiálu,
  • formou doručenia či sprostredkovania učebného materiálu žiakovi.

 

Momentálne rozlišujeme tri formy (médiá) sprostredkovania učebného materiálu:

  • papier (tradičné médium),
  • CD, DVD a ďalšie fyzické prenosné pamäťové médiá,
  • internet ako prostredie (virtuálne médium) pre uchovávanie a sprostredkúvania

digitálneho obsahu alebo e-learningovej podpory vzdelávania. Edukačný obsah sa dá na internete uchovávať a sprístupňovať v podobe digitálnych knižníc a úložísk, vzdelávacích portálov či iných podobných zdrojov.

Z tohto pohľadu môžeme rozlišovať:

  • textové dokumenty ,
  • hypertextové dokumenty (čiže texty s aktívnymi referenciami – skokmi na iné hypertextové dokumenty alebo ich časti),
  • multimediálne kompozície (súbory rôznych multimediálnych foriem obsahu, ako napr. textu, statických obrázkov, animácií, audio a video záznamov),
  • softvérové nástroje  – aplety, mikrosvety, modely či prostriedky virtuálnej reality  (táto forma celkom prirodzene prerastá do edukačného softvéru, modelovania a simulácií,
  • kombinácia niektorých z týchto foriem.

Digitálny obsah predstavuje v súčasnosti najprogresívnejšiu formu sprostredkovania učebného materiálu.  Prináša však so sebou aj problémy a riziká, ktorých si ako pedagógovia musíme byť vedomí:

a) zostavovať z obsahu vzdelávacieho portálu vyučovaciu hodinu alebo  dlhší tematický celok je časovo veľmi náročný proces,

b) digitálny obsah býva často prístupný iba  v cudzom jazyku, teda môžeme naraziť na jazykovú, prípadne kultúrnu bariéru,

c) kvalitný digitálny obsah  – podobne ako softvér  – môže byť veľmi drahý. Pri používaní voľne prístupného obsahu musíme starostlivo posudzovať jeho kvalitu,

d) aj kvalitný digitálny obsah sa dá veľmi ľahko používať  na nekonštruktívne frontálne učenie, ktoré  zanedbáva dôležité etapy poznávacieho procesu alebo nedodržiava princíp primeranosti či iné digitálne zásady.

Používanie digitálneho obsahu zvyšuje atraktívnosť procesu, ale samo o sebe ešte nezaručuje kvalitu učenia a učenia sa.

Obľúbená forma učebných materiálov sú pracovné listy, komiksy.

Navrhnite scenár vyučovacej hodiny s využitím moderného edukačného softvéru,  didaktickej techniky a učebných materiálov – táto časť je veľmi individuálna, záleží od typu školy, zamerania a tak. napr. onlineekonómia – www.aeucebnica.jasr.sk – moderný edukačný softvér umiestnený na portály Junior Achievement Slovensko,  didaktická technika: dataprojektor, internetové pripojenie, počítač, tlačiareň. Učebné materiály: onlineučebnica, didaktické testky, otázky a úlohy – všetko sa nachádza v prostredí aeucebnice. Podmienka je registrácia žiakov v prostredí, ktorú urobí učiteľ aplikovanej ekonómie. Učiteľ riadi aj proces vzdelávania, sprístupňovaním kapitol, zadávaním otázok a úloh, záverečných testov.Uspešnosť testu je pri 66 %.

Porovnajte vyučovanie bez, resp. s využitím moderného edukačného softvéru, didaktickej techniky a učebných materiálov v minulosti, keď nebola onlineučebnica, boli veľké ťažké knihy, z ktorých sa dal vybarať preberaný materiál, nevýhodou bolo stratenie učebného materiálu, motivácia sa robí jednoduchšie prostredníctvom digitálnych technológií, ekonomické otázky je možné vyhľadať na internete viesť, diskusiu k danému problému, opäť výhodou je aj individuálne tempo preberania ekonomickej problematiky.

Ukážka komiksu


5. Operačný systém

Úlohy:

1)  Popíšte OS z pohľadu používateľa – ako vrstvu softvéru.

2)  Vysvetlite pohľad zvnútra, z hľadiska systému − ako správcu prostriedkov.

3)  Uveďte aspoň dva operačné systémy a porovnajte ich z pohľadu používateľa (napríklad prístupové práva k priečinkom a súborom,  vstupno-výstupné zariadenia – inštalácia ovládačov).

Odpovede:

1.) Operačný systém je základným prostriedkom počítača, ktorý spravuje jeho najdôležitejšie elementy, ako sú operačná pamäť, procesor, periférne zariadenia,  systém  súborov …  Operačný  systém  sa  stáva  správcom  celého  počítača,  nielen  jeho  hardvérovej časti,  ale  aj  všetkých  ostatných  komponentov,  ako  sú  iné  procesy,  používatelia v systéme, sieťové pripojenie, …. Operačný systém rozhoduje, ktorý  proces  práve  pobeží  na  procesore  a  aké  prostriedky  má  k dispozícii.

Obr. 1: Operačný systém ako vrstva softvéru

Vo všeobecnosti môžeme počítačový systém rozdeliť na hardvér, operačný systém, systémové a aplikačné programy, ktoré sú využívané používateľmi /viď obr.1/.

2.) Operačný systém je správcom prostriedkov. Hlavnými hardvérovými prostriedkami sú procesor/procesory,  diskový  priestor,  vstupno-výstupné  zariadenia,  komunikačné zariadenia.  Niektoré  z hlavných  činností  operačného  systému  sú:  implementácia používateľského  rozhrania;  zdieľanie  hardvéru  medzi  používateľmi;    zdieľanie  dát používateľov medzi sebou; zabraňovanie používateľom v zasahovaní si navzájom do svojho pracovného priestoru; plánovanie prostriedkov medzi používateľmi; uľahčenie vstupu/výstupu;  zotavovanie  sa  z chýb;  organizovanie dát pre bezpečný prístup a manipuláciu sieťovej komunikácie.

Správu  vykonávanú  operačným  systémom  môžeme  vo  všeobecnosti  rozdeliť  na niekoľko častí:

a)      Správa procesov

Proces je spustený počítačový program. Je umiesený v operačnej pamäti počítača v podobe  postupností  strojových  inštrukcií  vykonávaných  procesorom.  Jeden program  môže  v  počítači  bežať  ako  viac  procesov  s  rôznymi  údajmi  (napríklad viackrát  spustený  webový  prehliadač  zobrazujúci  rôzne stránky).  Operačný  systém zaisťuje  oddelený  beh  procesov,  prideľuje  im  systémové  prostriedky  počítača  a umožňuje používateľovi procesy spravovať (spúšťať, ukončovať…).

b)      Správa zariadení

Procesy  potrebujú  často  pristupovať  k  periférnym  zariadeniam  pripojeným k počítaču,  ktoré  sú  ovládané  jadrom  OS  cez  ovládače  zariadení. (ovládač = driver = je program, ktorý preberá od programovej vrstvy nezávislej od zariadenia požiadavky na vykonanie určitých operácií a odovzdáva ich zariadeniu vo forme jemu zrozumiteľných príkazov).  OS  sa  stará o odstránenie  technických  detailov  a poskytuje  procesu  využitie  zariadenia  na vyššom  stupni  abstrakcie.

Úlohou  správy  zariadení  je  aj  prideľovanie  zariadení,  t.j.  ak  zariadenie  (napr. tlačiareň, kde nemôžu naraz tlačiť dva procesy) môže používať v jednej chvíli len jeden proces, operačný systém musí situáciu vyriešiť. Navyše kontroluje, či proces má oprávnenie zariadenie používať. Periférne  zariadenia  v  OS  Windows  XP  je  možné  skontrolovať  pomocou  Správcu zariadení, kde je možné spravovať aj ovládače zariadení.

c)      Správa pamäte

Operačný  systém  zodpovedá  aj  za  správu  systémovej  pamäte  (anglicky  memory management),  ktorú  používajú  procesy  v systéme  a  zabezpečuje,  že  proces nepoužije pamäť už obsadenú iným procesom. OS môže zabezpečovať aj následné uvoľňovanie  pamäte  (keď  už  proces  pamäť  nepotrebuje),  nastavovať  ochranu pamäte a eventuálne aj správu adresácie pamäte.  Existujú rôzne metódy ochrany pamäte, ako napr. segmentácia a stránkovanie pamäte.

Operačný  systém  zvyčajne  rieši  problém  obmedzenia  veľkosti  fyzickej  pamäte (fyzicky  pripojená  operačná  pamäť  RAM)  používaním  virtuálnej  pamäte.  Každý proces  má  ilúziu  vlastnej  virtuálnej  pamäte,  do  ktorej  adresuje  pomocou  tzv. virtuálnych adries a nezaujíma sa, kde a aká je skutočná adresa vo fyzickej pamäti. Prevod medzi virtuálnou a fyzickou adresou je podporovaný priamo procesorom. V  súčasných  bežných  operačných  systémoch  je  virtuálna  pamäť  implementovaná pomocou  stránkovania  pamäte  spolu  so  stránkovaním  na  disk,  ktoré  rozširuje operačnú  pamäť  o  priestor  na  pevnom  disku  a tým  umožňuje,  aby  mohla  byť virtuálna pamäť väčšia ako fyzická pamäť. Stránkovanie je adresovacia technika, pri ktorej sa virtuálna pamäť rozdelí  na úseky pevnej  dĺžky tzv. stránky a na  rovnaké úseky  je  rozdelená  aj  fyzická  pamäť,  na  tzv.  rámce.

d)      Správa súborov

Operačný systém  poskytuje služby pre správu a  prácu so súbormi. Najzákladnejšie operácie sú:

  • vytvorenie súboru s daným menom,
  • nastavenie príznakov (atribútov) súboru,
  • otvorenie súboru pre čítanie, alebo modifikáciu,
  • čítanie a modifikáciu otvoreného súboru,
  • uloženie zmien na pamäťové médium,
  • zatvorenie  súboru  a  uloženie  prípadných  vykonaných  zmien  na  pamäťové

médium.

Spôsob,  akým  počítač  organizuje  a manipuluje  s priečinkami  a súbormi,  sa  vo všeobecnosti  označuje  ako  súborový  systém.  Väčšina  počítačov  má  aspoň  jeden súborový  systém.  Niektoré  OS  umožňujú  použitie  niekoľkých  rôznych  súborových systémov.  Napríklad  OS  Windows  XP  podporuje  aj  starší  súborový  systém  typu  FAT pôvodne vytvorený pre OS MS DOS a navyše podporuje nový súborový systém NTFS. Každý súborový systém má svoje výhody a nevýhody. OS Linux má vlastné súborové systémy (ext3, ReiserFS,…), avšak podporuje aj súborové systémy OS Windows. Program,  ktorého  hlavnou  úlohou  je  zjednodušenie  práce  pre  používateľa s počítačovými súbormi a adresármi, najmä prehliadanie, vykonávanie, kopírovanie, mazanie,  premenovanie,  sa  nazýva  Správca  súborov.  Každý  operačný  systém poskytuje  aspoň  jedného  správcu  súborov.  Pre  OS  Windows  je  najpoužívanejším súborovým manažérom program Windows Explorer (v Linuxe s distribúciou Ubuntu je to program Nautilus).

3.) Porovnanie OS Microsoft Windows XP a OS Linux (distribúcia Ubuntu) z hľadiska:

a)      licencie: OS Windows XP je komerčný produkt. Používateľ si OS Windows nekupuje, kupuje si len právo  na  jeho  používanie.  Podmienky,  za  ktorých  tak  robí,  sú  špecifikované v licenčnej dohode, ktorá je pripojená k distribučnému médiu. Licencia,  spojená  s Linuxom (GPL licencia – otvorený a slobodný softvér),  v  prvom  rade  používateľovi  zaručuje  práva.  Je  to najmä  právo  na  štúdium  programu,  jeho  modifikáciu  a  jeho  ďalšie  šírenie,  či  už v pôvodnej  alebo  modifikovanej  forme.  V  licencii  sa  nič  nehovorí  o  prístupnosti zdrojového  kódu  a  ani  o cene. Ale  keďže  ktokoľvek  má  právo  na  jeho  šírenie,  je zrejmé, že OS Linux  je dostupný zdarma. Hoci sa môžeme  stretnúť aj s predajom Linuxu, Linux získame obvykle legálne a zadarmo stiahnutím z Internetu, požičaním inštalačného CD od kamaráta a podobne.

b)      inštalácie aplikácií : Aby  sme  mohli  na  počítači  vykonávať  rôzne  činnosti  alebo riešiť  rôzne  úlohy,  potrebujeme  na  to  vhodné  programy,  tzv.  aplikačný  softvér.  Firma  Microsoft „pribaľuje“ k svojmu operačnému systému Windows XP aj niekoľko takýchto programov. Tieto  programy  však  svojou  funkcionalitou  postačia  len  pre  jednoduchšie  úlohy. Preto  často  potrebujeme  do  počítača  pridať  –  nainštalovať  aj  ďalšie  programy. Ak  v OS Win XP chceme používať vybranú aplikáciu musíme si ju „zaobstarať“ (vyhľadať na internete – freeware, shareware prípadne si ju musíme zakúpiť na inštalačnom médiu /CD, DVD/ ) a nainštalovať. Pri samotnej inštalácií nás inštalačný program prevádza viacerými nevyhnutnými krokmi ako napríklad: potvrdenie licenčne zmluvy, výber súčastí programu, výber umiestnenia na disku, výber umiestnenia v ponuke Štart atď. V Linuxe sme pri inštalovaní novej aplikácie od podobných krokov odbremenení. Používateľ nemusí pracne hľadať softvér na Internete a sťahovať ho ručne zo stránky jeho vývojárov. OS Linux Ubuntu sa automaticky prostredníctvom Internetu pripojí na tzv. úložiská softvéru (tiež zdroj softvéru), kde sú uložené kolekcie aplikácií. Následne si vybranú aplikáciu stiahne a automaticky nainštaluje do počítača používateľa.

c)      inštalácie ovládačov (vstupno-výstupné zariadenia):

Používateľ Windows XP je zrejme zvyknutý na to, že ovládače jednotlivých zariadení si vždy  inštaluje  sám  z média,  ktoré  dodal  výrobca  zariadenia. Výrobcovia hardvéru dodávajú štandardne ovládače kompatibilné so systémami Microsoft Windows.

V prípade  Ubuntu a Linuxu  všeobecne  sú  však  ovládače  dodávané  spolu  s operačným  systémom. V prípade  niektorých  zariadení,  ako  napríklad  sieťové,  grafické  a zvukové  karty, radiče  USB,  bluetooth  porty,  diskové  radiče  a ďalšie,  sú  ovládače  modulmi  jadra operačného  systému  a sú  použité  automaticky.  V prípade  zariadení,  ktoré  sa pripájajú  k systému  pomocou  káblov  (USB,  paralelný  a pod.),  si  používateľ  musí zariadenie konfigurovať sám, ovládače však taktiež bývajú dodávané so systémom a sú obvykle nainštalované automaticky.  Sú,  samozrejme,  aj  výnimky.  Pokiaľ  je  zariadenie  novšie,  ako  je  verzia  systému, ktorú  používame,  môže  nastať  situácia,  keď  si  používateľ  musí ovládač  doinštalovať  sám.  Tu  treba  postupovať  podľa  inštrukcií  výrobcu,  ktoré  sú obvykle  dostupné  na  jeho  webovej  stránke  –  jednotný  spôsob  inštalácie  pritom neexistuje.  Pomoc  obvykle  možno  hľadať  aj  v diskusných  fórach  alebo  vo vyhľadávačoch.  Iná  situácia  môže  nastať,  keď  výrobca  nezverejňuje  údaje,  podľa ktorých možno ovládače napísať. Bohužiaľ, existujú výrobcovia, ktorí takéto údaje nezverejňujú a ani sami ovládače neposkytujú (mnoho modelov hardvéru nemá zaistenú podporu pre Linux. Následne nastáva problém s korektnou prevádzkou hardvérového zariadenia – absencia ovládačov).

d)      bezpečnosti:

Win XP: nutnosť inštalácie a pravidelnej aktualizácie antivírového programu (ochrana pred vírusmi, trójskymi koňmi, červami, spywarom).

Zapnutý firewall – zariadenie, ktoré je súčasťou počítačového systému, slúži na riadenie a zabezpečovanie  sieťovej  prevádzky  medzi  sieťou  a počítačom  (tzn. jeho úlohou je zablokovať neoprávnený prístup a povolenú komunikáciu umožniť). Zjednodušene sa dá povedať, že slúži ako kontrolný  bod, ktorý  definuje pravidlá pre komunikáciu medzi počítačom a sieťou.

OS  Windows  XP  využíva  softvérový  firewall (podobne aj Linux).  Keď  je  Brána  firewall systému Windows zapnutá, komunikácia väčšiny programov prostredníctvom brány firewall je zablokovaná.  Na  odblokovanie  programu  je  potrebné  program  pridať  do  zoznamu výnimiek.  Každým  povolením  výnimky  na  umožnenie  komunikácie  programu  cez bránu Windows Firewall sa však stáva počítač zraniteľnejším. Povolenie výnimky je ako  prederavenie  brány  firewall. Ak  je  takýchto  dier  veľa,  brána  firewall  nemôže plniť svoju funkciu.

Linux: nie je nutné inštalovať antivírový program, nakoľko odoláva mnohým známym bezpečnostným rizikám (napr. vírom, červom). Antivírusové  programy  pre  Linux  existujú,  ale  slúžia  na  kontrolu  súborov prichádzajúcich z iných systémov – napr. pri preposielaní pošty aj s prílohami alebo na kontrolu prenosných médií, ktoré mohli byť infikované v inom systéme. Linuxu windowsovské  vírusy  síce  neuškodia,  ale  takéto  médium  môže  infikovať  ďalšie systémy s OS Windows.

Samotný OS Linux je však treba pravidelne aktualizovať! (platí aj pre OS Windows) („plátanie možných bezpečnostných dier“). V prípade Linuxu medzi okamihom odhalenia chyby a vytvorením aktualizovaného softvérového balíka častokrát uplynie len niekoľko hodín. Tu je preto dôležité nevypínať štandardne zapnutý aktualizačný systém a aktualizácie robiť vždy, keď sme na to vyzvaní.

Dôležité  je upozorniť,  že  počítač  s  Linuxom  obvykle  nie  je  nijako chránený pred útočníkom, ktorý k nemu má fyzický prístup – keď už nič iné, tak ho môže  ukradnúť  celý  alebo  aspoň  jeho  disk.  Linux  takéto  zabezpečenie  ani nepredstiera – po reštarte systému možno vojsť do „záchranného“ módu, v ktorom má používateľ administrátorské práva bez zadania hesla. Inou možnosťou, ako sa dá k dátam  v  počítači  bez  obmedzení  dostať,  je  spustenie  operačného  systému z prenosného média (CD, USB kľúč). Takýto nežiaduci prístup možno sťažiť vhodnými nastaveniami  v  BIOSe  počítača.  Citlivé  dáta  je  preto  vhodné  chrániť  šifrovaním– buď jednotlivých súborov, alebo celých diskových oddielov.