algoritmus a problém
DESCRIPTION
Algoritmus a problém. predpokladom potreby algoritmu je existencia problému v prvých rokoch života je riešenie problémov postavené na iných základoch ako neskôr riešenie mnohých problémov je automatické bez uvedomenia si existencie algoritmu. Problém pitia kakaa. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/1.jpg)
Algoritmus a problémAlgoritmus a problémpredpokladom potreby algoritmu je
existencia problémuv prvých rokoch života je riešenie
problémov postavené na iných základoch ako neskôr
riešenie mnohých problémov je automatické bez uvedomenia si existencie algoritmu
![Page 2: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/2.jpg)
Problém pitia kakaaProblém pitia kakaa1. ak nie je dosť teplé, vrátime sa do bodu ___.,2. do prázdnej šálky zmiešame cukor a kakao,3. dáme ho zohriať,4. overiť dostatok surovín5. necháme vychladnúť,6. skontrolujeme mlieko,7. do hrnčeka nalejeme mlieko,8. zalejeme zmes v šálke,9. vypijeme.10. a je po probléme...
![Page 3: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/3.jpg)
Terminológia Problém
– stav, v ktorom jestvuje rozdiel medzi tým, čo v danom momente máme a tým, čo chceme dosiahnuť
Riešenie problému – odstraňovanie rozdielu medzi pôvodným stavom a
tým, čo chceme dosiahnuť
Algoritmus– postup, ktorým sa pri riešení problému riadime
Nie každý problém je riešiteľný a nie vždy sa dopracujeme k požadovanému výsledku
![Page 4: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/4.jpg)
Algoritmus a život riešiť pomocou algoritmu problémy
reálneho života je dosť náročné, pretože správny algoritmus vždy berie do úvahy všetky možnosti, detaily, náhody alebo zriedkavé situácie (pitie kakaa)
o algoritmoch má zmysel hovoriť vtedy, keď máme k dispozícii určitú obmedzenú množinu príkazov (môže byť aj veľmi veľká), pomocou ktorých dokážeme navrhnúť postup pri riešení.
![Page 5: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/5.jpg)
Algoritmus a Programovanie elementárny pojem, potrebná korektná
definícia: presná postupnosť krokov a inštrukcií,
ktorá nás od (meniteľných) vstupných údajov privedie v konečnom čase k výsledku. – nie každý postup je algoritmom, potrebuje
spĺňať nasledovné vlastnosti:
![Page 6: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/6.jpg)
Vlastnosti algoritmu elementárnosť: postup je zložený z jednoduchých krokov, ktoré sú
pre vykonávateľa (počítač, nemysliace zariadenie, človek) zrozumiteľné,
determinovanosť: postup je zostavený tak, že v každom momente jeho vykonávania je jednoznačne určené, aká činnosť má nasledovať, alebo či sa už postup skončil,
rezultatívnosť: postup dáva pre rovnaké vstupné údaje vždy rovnaké výsledky,
konečnosť: postup vždy skončí po vykonaní konečného počtu krokov, hromadnosť: postup je použiteľný na celú triedu prípustných
vstupných údajov, efektívnosť: postup sa uskutočňuje v čo najkratšom čase a s využitím
čo najmenšieho množstva prostriedkov (časových i pamäťových).
![Page 7: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/7.jpg)
Elementárnosť každý postup môže byť zapísaný viacerými spôsobmi dôležité je, aby mu rozumel jeho vykonávateľ zohrievanie mlieka v mikrovlnej rúre:
– dlhodobý vlastník: zohrej mlieko– nový majiteľ?– dieťa (počkaj na rodičov a požiadaj ich)
zistite 6 mocninu dvojky– pre piataka-šiestaka je formulácia OK– druhák ju nezvládne, napriek tomu, že ide len o 2.2.2.2.2.2
jednoznačnosť:– Meľ dva dni staré rožky! – Rozbi dve vajcia!
![Page 8: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/8.jpg)
Determinovanosť v každom kroku musí byť jasné, kam sa má riešenie
uberať, čím pokračovať ak by sa napr. obľúbené „umyť, urobiť za sebou
poriadok, vyzliecť a spať“ vykonávalo v inom poradí, nemuselo by už byť tým, čo bolo pôvodne zamýšľané
– ak by počítač vykonal najprv časovo najnáročnejšiu úlohu: najprv pôjde spať (vykoná časovo najnáročnejšiu úlohu) a až keď sa vyspí, urobí poriadok, vyzlečie sa a umyje
![Page 9: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/9.jpg)
Rezultatívnosť výsledok za rovnakých vstupných podmienok má byť vždy
rovnaký– v bežnom živote sa to vždy podariť nemusí – varenie/pečenie– číslicová technika, pokiaľ nedôjde k poruche, s tým problémy nemá
Skúste:
Traja chlapci si v športovom obchode kúpili loptu. Zaplatili za ňu spolu 30,- Sk. Keď odišli, predavač zistil, že lopta stála len 25,- Sk a so zvyšnými peniazmi poslal za nimi pomocníka. Ten im dal 3,- Sk a 2,- Sk si ponechal „od cesty“. Takže chlapci (keďže každý dostal 1,- Sk nazad) zaplatili za loptu po 9,- Sk a pomocníkovi zostali 2,- Sk.
Spolu: 9 x 3 + 2 = 29,- Sk. Kam sa podela zvyšná koruna?
![Page 10: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/10.jpg)
Konečnosť vlastnosť má zabezpečiť, aby sa algoritmus vždy skončil
– človek, pracujúci s problémom na základe skúseností dokáže určiť, či jeho postup dá alebo nedá správny výsledok (resp. či skončí alebo nie).
– počítač bez skúseností sa na takejto úrovni rozhodnúť nedokáže
Algoritmus pre počítač1. polož hrniec s jedlom na varič,2. pusti plyn,3. miešaj, kým nezačne vrieť.
......
![Page 11: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/11.jpg)
Konečnosť II. Kop, kým nenarazíš na poklad! Kým je zadané číslo menšie ako jedna, vynásob ho
dvoma!
existujú aj problémy, ktorých riešenie je síce konečné, ale nájdenie výsledku trvá veľmi dlho.
– šifrovacie algoritmy, keď síce teoreticky dokážeme rozšifrovať každú správu, no doba realizácie je taká dlhá, že správa po rozšifrovaní (po 10 rokoch) stráca zmysel.
– počítanie buniek v ľudskom tele, – molekúl v litri vzduchu – zrniek piesku na púšti.
![Page 12: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/12.jpg)
Hromadnosť vlastnosť skôr užitočná ako nutná
– nie každý algoritmus vie byť hromadný,– je potrebné vkladať do algoritmu určité vstupné parametre– napr. objem kvádra, výpočet dĺžky brzdnej dráhy pri rýchlosti
vozidla a povrchu vozovky a zadanej hmostnosti
pri tvorbe algoritmu nejde o vyriešenie konkrétneho problému, ale len o popísanie postupu, pomocou ktorého možno získať výsledok
![Page 13: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/13.jpg)
Efektívnosť opäť nepovinná vlastnosť navrhnúť taký postup, ktorý s použitím minimálnych prostriedkov
v čo najkratšom čase vyrieši problém aj neefektívny algoritmus je algoritmom
Pri prehliadke veliteľ potreboval zistiť počet nastúpených vojakov. Vojaci stáli v 32 radoch po 17. Úlohou poveril dvoch zástupcov. Prvý postupoval nasledovne: 17+17+17+17+....+17, druhý to skúsil ako 17 x 32. Čo myslíte, ktorý sa dopracoval k výsledku skôr?
Problém sčítavania čísel 1 až 100. Prvý spôsob, ktorému všetci rozumieme je postupovať 1+2+3+4+...+100. K výsledku sa síce dostaneme, ale ak vezmeme dvojice čísel 1+100, 2+99, 3+98... 50+51 (spolu ich je 50), vyriešime problém podstatne rýchlejšie: dvojíc je 50, ich súčet je 101, teda 101 x 50 = 5 050.
![Page 14: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/14.jpg)
Načo algoritmizovať? život je algoritmus (resp. je zložený z algoritmov) moje vstávanie:
– zazvoní budík, – otvorím pravé oko, – udriem ho (budík), – zatvorím pravé oko, – o dvadsať minút sa strhnem, – v zhone zhltnem raňajky – bežím do práce
na čo je dobrý popis algoritmu?– vďaka popisu dokážeme vykonávaním algoritmu poveriť iného človeka
alebo počítač– vďaka vyjadreniu myšlienok sa nám problém stáva zrozumiteľnejším
a sme schopní lepšie mu porozumieť
![Page 15: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/15.jpg)
Algoritmizácia proces, ktorý pri zápise algoritmu vykonávame na začiatku vždy potrebujeme určiť:
– vstupné podmienky (napr. rozsah hodnôt, ktoré môžu do algoritmu vstupovať)
– výstupné podmienky (vlastnosti výsledku)
Zadanie algoritmu zapisujeme: {VST: vstupné podmienky}
?
{VÝS: výstupné podmienky}
{VST: a, b, c : reálne čísla rôzne od 0}?
{VÝS: V – reálne číslo - objem}
![Page 16: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/16.jpg)
Algoritmický jazyk jazyk – dorozumievací prostriedok
– slovenský jazyk cca 110.000 slov– anglický jazyk 800.000 slov
použitie ľudského jazyka je problematické– frazeologizmy, príslovia a porekadlá– synonymá– homonymá– tvary, pády, osoby– plynulý prirodzený vývoj pribúdanie a „vypúšťanie“ slov
=> potreba redukcie prirodzeného jazyka
![Page 17: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/17.jpg)
Algoritmické jazyky niekoľko typov:a) vývojové diagramy (postupnosť činností popisovaná
prostredníctvom grafických značiek a textu v nich),b) štruktúrogramy (zhutnená obdoba vývojových diagramov, ktorá
však oproti vývojovým diagramom nie je definovaná normou),c) obrázkové jazyky (často detské programovacie jazyky umožňujúce
programovať prostredníctvom spájania obrázkov),d) rozhodovacie tabuľky (popisujú zložitejšie problémy pozostávajú
zo zoznamu podmienok, kombinácie podmienok, zoznamu činností a kombinácie činností – pre našu prácu nie sú vhodné),
e) slovný zápis algoritmu v národnom jazyku (formalizované jazyky, ktoré sa od programovacích jazykov odlišujú použitím slov národného),
f) programovacie jazyky (formalizované algoritmické jazyky často založené na redukcii slov anglického jazyka).
![Page 18: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/18.jpg)
Skladba algoritmického jazyka operačná zložka: Príkazy: vety jazyka prikazujúce procesoru vykonať presne
stanovené činnosti. (vstupu, výstup a priradenie). – musia spracúvať iné objekty: premenné, konštanty a výrazy.
Premenná objekt obsahujúci počas realizácie algoritmu konkrétnu hodnotu presne stanoveného typu (napr. celé číslo, reálne číslo, reťazec znakov...).
Konštanta objekt nadobúdajúci počas celej realizácie algoritmu jedinú konkrétnu hodnotu príslušného typu. Je to obdoba konštánt známych z matematiky, napr. pí, e, ale aj z fyziky: g, c, k, e, m.
Výraz predpis obsahujúci konštanty, premenné a spôsob ich spracovania pomocou operácií a funkcií podobných tým, ktoré poznáme z matematiky. Výsledkom je hodnota príslušného typu, ktorá vznikne po vykonaní vo výraze naznačeného spracovania.
– napr. obsah=a*bobsah=pí*r*r
![Page 19: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/19.jpg)
Skladba algoritmického jazyka riadiaca zložka: prostriedky pre riadenie postupnosti vykonávania
jednotlivých prvkov zložky operačnej vďaka nej je v každom kroku algoritmu jednoznačne
určená činnosť, ktorá sa má vykonať – sekvencia– vetvenie– cyklus
![Page 20: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/20.jpg)
Algoritmické konštrukcie sekvencia postupnosť príkazov (príkaz je povel, ktorý
počítač alebo iné zariadenie pozná a dokáže vykonať) vykonávanú v takom poradí, v akom sú jednotlivé časti zapísané
vetvenie poskytuje možnosť rozhodnúť sa podľa pravdivosti skúmaného znaku. Skladá sa z podmienky uvedenej za slovíčkom ak a z príkazov, ktoré sa vykonajú v prípade kladného a záporného výsledku. Týmto dvom častiam hovoríme vetvy.
cyklus umožňuje ľubovoľnú činnosť opakovať. Pri opakovaní je dôležité čo (telo cyklu) sa má opakovať a dokedy (podmienka cyklu) sa má opakovať
![Page 21: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/21.jpg)
Príklad sekvencie Majme k dispozícii robotický vysávač, ktorý dokáže
nasledovné činnosti:– posun – posunie vysávač vpred o 50 cm,– vysaj – zapne vysávanie prachu na 10 s,– vľavo bok - otočí sa o 90° doľava.
Zabezpečte, aby vysávač vysal metrový pás v smere, ktorý má nastavený.
![Page 22: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/22.jpg)
Riešenie vysaj // 50 cm posun vysaj // 100 cm posun // nie je potrebné
Problém sme vyriešili vďaka sekvencii príkazov, ktoré sa vykonávajú v takom poradí, v akom sú zapísané.
Vo všeobecnosti možno sekvenciu zapísať nasledovne:
príkaz1
príkaz2
...
príkazn
![Page 23: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/23.jpg)
Príklad alternatívy Zabezpečte, aby sa vysávač v prípade narazenia na prekážku otočil
doľava.
Na riešenie problému potrebujeme, aby vysávač dokázal zistiť (rozhodnúť), či má pred sebou prekážku alebo nie. Nevyhnutnou je teda nová schopnosť:
prekážka – v prípade existencie prekážky vráti hodnotu ANO, inak hodnotu NIE,
![Page 24: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/24.jpg)
Riešenieak prekážka = ÁNO tak
vľavo bokinak
posun
zápis obsahuje dve vetvy (alternatívy), pričom stroj, ktorý príkazy vykonáva si vyberie v závislosti od splnenia podmienky.
vo všeobecnosti:ak podmienka tak
príkaz11
príkaz12
...príkaz1m
inak
príkaz21
príkaz22
...príkaz2n
koniec ak
![Page 25: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/25.jpg)
Príklad cykluZabezpečte, aby vysávač vyčistil 15 metrový pás.
úlohu by sme mohli riešiť zápisom sekvencie tak, že by sme 30 ráz za sebou zopakovali dvojicu:
vysaj posun vysaj posun vysaj posun vysaj posun....
vhodnejšie riešenie však predstavuje použitie cyklu.– počet opakovaní nám je známy (30 x - prečo?)
![Page 26: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/26.jpg)
Riešenieopakuj 30 krát
vysaj
posun
vo všeobecnosti:
opakuj počet krát
príkaz1
príkaz2
...
príkazn
koniec opakuj
![Page 27: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/27.jpg)
Typy cyklov použitý cyklus sa nazýva cyklus s pevným (známym) počtom
opakovaní nie vždy je nám však počet opakovaní známy v momente
vytvárania algoritmu => potreba kontroly ukončenia cyklu buď:– pred vykonaním kroku (tela) cyklu – cyklus s podmienkou na začiatku– po vykonaní tela cyklu – cyklus s podmienkou na konci
v prvom prípade sa cyklus nemusí vykonať vôbec, v druhom prebehne minimálne raz – prečo?
![Page 28: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/28.jpg)
Príklad: cyklus s podmienkou na začiatku
Napíšte algoritmus, ktorý zabezpečí vysávanie od aktuálnej polohy po prekážku.
pokiaľ prekážka = NIE robvysajposun
koniec pokiaľ
všeobecne:pokiaľ podmienka rob
príkaz1
príkaz2
...
príkazn
koniec rob
![Page 29: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/29.jpg)
Príklad: cyklus s podmienkou na konci
Upravte algoritmus zabezpečujúci vysávanie od aktuálnej polohy po prekážku tak aby sa vysávanie vykonalo minimálne raz.
robvysajposun
pokiaľ nebude prekážka = ANO
všeobecne:rob
príkaz1
príkaz2
...
príkazn
pokiaľ nebude podmienka
![Page 30: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/30.jpg)
Vývojové diagramy
zápis prostredníctvom prirodzeného jazyka nie je prehľadný pre začiatočníkov sú najvhodnejším riešením vývojové diagramy
– postupný prechod na programovací jazyk okrem sekvencie, vetvenia a cyklu sú potrebné aj prostriedky na
vstup a výstup údajov
![Page 31: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/31.jpg)
Príkazy vstupu a výstupu
Príkaz vstupu
p1, ... , pn sú premenné, do ktorých sa uložia údaje na spracovanie
Príkaz výstupu
h1, ... , hn sú výstupné hodnoty (položkou výstupu môže byť aj text uzavretý v úvodzovkách)
![Page 32: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/32.jpg)
Príkaz priradenia a sekvencia
príkaz priradenia:
p je premenná; v je výraz, ktorého hodnotu priradením premenná p nadobudne
sekvencia:
p1, ..., pn sú príkazy; vykonajú sa
v poradí v akom sú zapísané
![Page 33: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/33.jpg)
Jednoduché príklady
Vypočítajte súčet dvoch čísel. Zistite obsah a objem kruhu. Vypočítajte objem a povrch hranola.
![Page 34: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/34.jpg)
Vetvenie (alternatíva)
binárne úplné – obsahuje príkazy v oboch vetvách
p1, p2 sú príkazy (resp. zložené
príkazy)
- ak je podmienka splnená vykoná sa p1,
- ak nie je splnená vykoná sa p2
binárne neúplné – obsahuje príkazy
v oboch vetvách
- ak je podmienka splnená
vykoná sa príkaz p,
- inak je vetvenie bez účinku
![Page 35: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/35.jpg)
Jednoduché príklady
Zistite maximálnu hodnotu z dvoch zadaných čísel. Zistite podiel dvoch čísel (nezabudnite na nemožnosť delenia
nulou). Zistite absolútnu hodnotu zadaného čísla.
![Page 36: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/36.jpg)
Cyklus
s pevným počtom opakovaní
- i je riadiaca premenná cyklu, n je
počet opakovaní, p je príkaz
(resp. zložený príkaz), ktorý sa opakuje
s neznámym počtom opakovaní
s podmienkou na začiatku
s neznámym počtom opakovaní
s podmienkou na konci
![Page 37: Algoritmus a problém](https://reader035.vdocuments.mx/reader035/viewer/2022082209/568157f3550346895dc57125/html5/thumbnails/37.jpg)
Jednoduché príklady
Vypočítajte hodnotu súčtu prvých N prirodzených čísel. Zistite faktoriál zadaného čísla Vypočítajte ciferný súčet číslic daného prirodzeného čísla N.