OrgPad logo

Učení - PRG 1.C (1.sk) (2022/23)

Created by Jindřich Zdráhal

Učení - PRG 1.C (1.sk) (2022/23)

cooltext425182039232741

cooltext425182101202112

šipka1

Konečnost

Každý algoritmus musí skončit v konečném počtu kroků.

Problém

Úloha, kterou potřebujeme vyřešit.

Determinovanost (předurčenost)

Každý krok algoritmu musí být jednoznačně a přesně definován. V každé situaci musí být jasné, který krok následuje.

Pro stejné vstupy by program měl mít stejný výstup.

cooltext425188530182708

šipka3

cooltext429801037477543

šipka3

Základy algoritmizace

 

Použité zdroje:

Obecnost (hromadnost, masovost, univerzálnost)

Algoritmus by měl řešit problémy obecně a ne konkrétně. 

Tzn., nepotřebuji kalkulačku, která umí jen sčítat 2+3, ale kalkulačku, která umí sčítat čísla. 

cooltext437284043424847

Algoritmus

Algoritmus je přesný návod či postup, kterým lze vyřešit daný typ úlohy.

Toto a vlastnosti algoritmu převzato z Wikipedie pod licencí CC BY-SA 3.0

Algoritmus je přesný návod k řešení konkrétního problému.

šipka2

Výstup (resultativnost)

Algoritmus má alespoň jeden výstup.

Elementárnost

Algoritmus se skládá z jednoduchých (elementárních) kroků.

větší / menší

Vytvoř vývojový diagram algoritmu, kterému zadáš 2 čísla a on ti vypíše, které je větší a které je měnší.

image

největší číslo ze 3

image

největší číslo z 5

5cisel

Odmocnina

image

odmocnina jinak

image

Informace

Informace jsou data prezentovaná v takovém kontextu, který dává smysl a význam.

Informace tedy slouží ke zpracování, skladování nebo přenášení dat.

Například číslo 120/80 patří mezi data, pokud jej ale ozřejmíme jako dnešní ranní krevní tlak pacienta v milimetrech rtuťového sloupce, již je z něj užiteč ná informace.

01 - Software - data, informace.docx

slovní vyjádření

Známé i z běžného života. Například návody, postupy, kuchařské recepty.

Výhody

Nevýhody

Zápis algoritmů

Zkuste se podívat na prezentaci paní Mgr. Pavlíny Mihačové, kde to hezky vysvětluje:  ZPŮSOBY ZÁPISU ALGORITMŮ
 
Texty převzaty (a někde i pozměněny) z textu od pana učitele Vojáčka Algoritmizace
 

Cyklus s podmínkou na konci

image

program

Algoritmus zapsaný v jazyce, kterému rozumí i počítač. 

Výhody

Nevýhody

Programovací jazyk

Programovací jazyk je prostředek pro zápis algoritmů, jež mohou být provedeny na počítači. Zápis algoritmu ve zvoleném programovacím jazyce se nazývá program.

Programovací jazyk je komunikačním nástrojem mezi programátorem a počítačem. Programovací jazyk je vlastně soubor pravidel pro zápis algoritmu, odborně řečeno se jedná o formální jazyk.
 
Převzato z Wikipedie pod licencí CC BY-SA 3.0

Cyklus s podmínkou na začátku

image

Na začátku cyklu se vyhodnotí podmínka a pokud platí, tak se cyklus provede. Vrátí se na začátek a pokud podmínka stále platí, tak se cyklus opakuje. 

PS Diagram

Z tohoto webu si můžete zdarma stáhnout program na tvorbu vývojových diagramů od Miroslava Bartyzala , který budeme používat. Jestli budete chtít, tak je tam k němu i uživatelská příručka, ale ten program je tak jednoduchý, že to za to nestojí 😉

Všechny obrázky vztažené k vývojovým diagramům jsem dělal v tomto programu.

Průměr

Prumer

Podmínky trojúhelníku

trojúhelníky

trojúhelníky.psdiagram

Písemka 1. verze

1. Vytvořte algoritmus (zapiš vývojovým diagramem) pro výpočet výrazu:

image

Pamatujte:

2. Vyatvořte algoritmus (zapište vývojovým diagramem) pro výpočet Největšího společného dělitele (NSD)

Princip řešení:

  1. Pokud jsou čísla stejná, jsou zároveň svým největším společným dělitelem.
  2. Je-li větší a, pak od něho odečtěte b, čímž dostanete nové a.
  3. Je-li větší b, pak do něho odečtěte a, čímž dostanete nové b.
  4. Postup opakujte tak dlouho, dokud si čísla nebudou rovna:

Např.:

NSD čísel a = 27 a b = 12 je 3

Postup:

  1. krok: a = a-b → 27-12=15       | a bylo větší, proto je teď 15, b je pořád 12
  2. krok: a = a-b → 15-12=3         | a bylo větší, proto je teď 15, b je pořád 12
  3. krok: b = b-a → 12-3=6           | b bylo větší, proto je teď 6, a je pořád 3
  4. krok: b = b-a → 6-3=3             | b je teď 3 a je taky 3 

pisemka1 1

pisemka1 2

Data

Data jsou informace, které jsou zaznamenány a uchovány ve formě digitálního záznamu.

Data mohou být různého druhu, jako například čísla, texty, obrázky nebo zvuky.

Vývoj a rozdělení programovacích jazyků

matematický zápis

Vhodné tam, kde se problém dá zapsat jako matematický problém (rovnice).

image

Výhody

Nevýhody

Cyklus

Jedno opakování cyklu se jmenuje jedna iterace.

rozhodovací tabulky

Vhodné tam, kde je jenom několik možností. Např.: rozvrh hodin, výrokové tabulky, přehledy a podobně

gate truth tables

Obrázek je převzatý z ASIC-System on Chip-VLSI Design pod licencí CC BY-SA 2.5

Výhody

Nevýhody

 

strukturogramy

V podstatě se jedná o slovní zápis s grafickým naznačením struktury.

image

Výhody

Nevýhody

 

vývojové diagramy

Grafické symboly s textem.

Výhody

Nevýhody

Struktury algoritmů

s pevným počtem opakování

image

cooltext436352198106759

image

Větvení

Datové struktury

Datová struktura je konkrétní způsob organizace dat v paměti počítače, který zajišťuje, aby mohla data být používána efektivně.

Datová struktura umožňuje uchovávat a zpracovávat množinu dat stejného typu nebo různorodých, ale logicky souvisejících dat.

 

Datové struktury.docx

12 - Datové struktury.pdf

Taky je to mat. otázka, ale teď nebude na písemku

01 - Software - data, informace.docx

11 - Algoritmizace.docx

image

Jednotlivé značky

Najděte si, co znamenají a naučte se je.

Vypracované maturitní otázky

12 - Datové struktury.pdf

13 - Pole, seznam, zásobník, fronta, strom.pdf

Sekvenční

image

Neúplné

image

Vícenásobné

image

Spojování podmínek / výroková logika

Výrok je každé sdělení (gramaticky vyjádřené oznamovací větou), o němž má smysl tvrdit, že je pravdivé (platí, 1), nebo nepravdivé (neplatí, 0). 

Jednoduchý výrok (atomický)

Jednoduché (atomické nebo elementární) výroky jsou výroky, které neobsahují logické spojky. (např. „Jmenuji se Jan.“, „Včera pršelo.“, „79 je prvočíslo“). Jsou z logického hlediska dále nedělitelné a jsou prezentovány výrokovými proměnnými (nebo také výrokovými symboly).

Složený výrok (formule)

Složené výroky jsou výroky, které vznikly z jednoduchých výroků použitím logických spojek.

Převzato z Wikipedie pod licencí CC BY-SA 3.0

 

Ekvivalence / rovnost / porovnání / ==

Platí tehdy, pokud se vstupy rovnajíScreenshot 3

image

Dělení datových struktur

Datové struktury můžeme dělit podle různých kritérií.

image

Úplné

image

image

Logický součin / A / AND / &&

Platí jen tehdy, pokud platí obě podmínkyScreenshot 1

Negace / NOT / !

Otáčí hodnotu vstupuScreenshot 4

Logický součet / nebo / OR / ||

Platí tehdy, pokud platí alespoň jedna z podmínekScreenshot 2

image

image

image

Základní datové struktury vs. odvozené datové struktury

Základní datové struktury

Do základních datových struktur patří proměnná, pole, záznam a objekt. S těmito datovými strukturami se nejčastěji setkáváme u většiny programovacích jazyků.

Odvozené datové struktury

Do odvozených datových struktur patří seznam, zásobník, fronta a strom.

13 - Pole, seznam, zásobník, fronta, strom.pdf

image

Samostatné hodnoty vs. strukturované údaje

Samostatné hodnoty jsou jednotlivé hodnoty, které nejsou spojeny s žádnými jinými hodnotami, zatímco strukturovaná data jsou data, která jsou uspořádána určitým způsobem.

Strukturovaná data jsou obvykle uspořádána do tabulek, záznamů nebo jiných datových struktur, které umožňují snadné vyhledávání a manipulaci.

Samostatné hodnoty se obvykle používají pro jednoduché výpočty nebo porovnávání, zatímco strukturovaná data se používají pro složitější úlohy, jako je analýza dat a vytváření zpráv.

short

-32 768 -- + 32 767

2 byte

int (integer)

- 2 147 483 648 -- + 2 147 483 647

4 byte

základní celočíselný datový typ

Proměnná

Proměnné si můžeme představit jako šuplíčky se jmény (abychom je mohli pohodlně volat), které uchovávají určitá data(čísla, znaky, texty,...). 

Proměnná je místo v paměti, kde se uchovávají hodnoty. Hodnotu můžeme uložit a později ji zase načíst zpět.

Proměnné jsou jen dočasné - při ukončení programu se vymažou.

Pro pojmenování proměnných používáme camel case.

Viz tento web.

byte

-128 -- +127

1 byte

long

- 9 223 372 036 854 775 808 -- +9 223 372 036 854 775 807

 

8 byte

Základní datové struktury

S těmito se setkáme u většiny programovacích jazyků. Jsou jednodušší.

Lze zadat v jiných číselných soustavách

int a = 30; // normálně v desítkové
int b = 030 //když to začíná 0 tak v osmičkové
int c = 0x30 //0x začíná číslo v šestnáctkové

Odvozené datové struktury

Tyto struktury jsou složitější.

float

4 byte

celé číslo

bez desetinné čárky

Strom

reálné číslo

s desetinnou čárkou

Pole

Lineární datová struktura.

Obsahuje posloupnost proměnných stejného datového typu uložených v řadě za sebou a je chápáno jako jeden celek. 

Vytváří se deklarací, kde určíme:

V paměti počítače je adresována pouze první položka pole, zbytek je adresován za pomoci indexů. Indexy začínají (většinou) NULOU.

image

Musíme hlídat, abychom se nepokoušeli dostat na prvek s indexem, který už (ještě) nemáme.

Výhoda: vyskytuje se v téměř všech programovacích jazycích, je jednoduché na používání

Nevýhoda: umožňuje ukládat jenom data jednoho datového typu. V JAVĚ je statické (nejde jednoduše zvětšit jeho velikost), blbě se vhládá doprostřed a odebírá z prostředku.

image

Záznam a objekt

Tyto datové struktury budeme probírat až při programování. Takže tady jsme si je uvedli jenom, že existují.

čísla

Seznam

Lineární dynamická datová struktura.

Lineární = data jsou ukládána za sebou.

Dynamická = je to budováno postupně, tzn. na začátku nevíme jak bude seznam velký.

V paměti je seznam adresován svým prvním prvkem. Každý prvek obsahuje adresu následujícího prvku = ukazatel.

image

Výhody: snadno vkládám nebo odebírám hodnoty odkudkoliv.

Nevýhody: pomalejší přístup k jednotlivým hodnotám (musím jít na začátek a pak tam "doskákat"). Pokud potřebuji předcházející hodnotu, tak musím znovu od začátku.

 

Fronta

thumbnailImage
Fronta
V programování je fronta abstraktní, dynamický datový typ, typu FIFO
Přejít na tento sway

Zásobník

double

8 byte

základní reálný datový typ

Dělení na základní a referenční

Datové typy dělíme v JAVĚ na dvě velké skupiny:

Teorie nám říká, že v základních datových typech jsou přímo hodnoty, které jsme tam zadali.

referenčních je jenom odkaz (reference) na místo v paměti, kde je skutečná hodnota.

Datový typ

Datový typ určuje, jaká data mohou být v proměnné uložena a co se s nimi dá provádět. Datový typ je určený:

Programovací jazyky mají některé datové typy předdefinované. Z nich pak můžeme tvořit další datové typy.

char

znak

2 byte

zápis

zapisuje se mezi jednoduché uvozovky např.:

char c = 'x';

Zajímavost - můžeme ho zapsat jako:

  1. znak 'x'
  2. posloupnost '\uxxxx' 
  3. escape sekvenci - ta může být taky zadána přes '\uxxxx'
  4. osmičkově '\ooo'

 

boolean

pouze dvě hodnoty:

Bacha! Obě se jmenují "základní", ale je to něco trošku jiného :)

Dynamické vs. statické typování proměnných

Statické typování

Datový typ se proměnné přiřazuje při její deklaraci. Díky tomu jsou tyto typy známé hned při překladu zdrojového kódu a díky tomu může odhalit některé typy chyb. Také je to vhodnější pro optimalizaci.

Na druhou stranu nemůžeme do této proměnné ukládat data jiného datového typu.

Toto je třeba programovací jazyk JAVA

Dynamické typování

Hodnoty proměnných a jejich datové typy vznikají až za běhu programu. Proto nemohou být kontrolovány při kompilaci, ale až za běhu. Na druhou stranu můžeme do proměnné postupně ukládat data různého datového typu.

To je dobré pro flexibilitu programování a hloupé pro optimalizaci.

Proto jsou jazyky s dynamickým typováním jsou obecně pomalejší.

Deklarace + inicializace

Pokaždé, když chci použít nějakou proměnnou, tak ji musím deklarovat a případně i inicializovat.

Deklarace je v podstatě to, že řeknu programu, že budu mít proměnnou jménem xy a bude určitého typu. Takže si vlastně jenom vytvořím šuplík do kterého budu ukládat data. K tomuto šuplíku mám jeho jméno a typ dat, která do něj budu dávat. Dělá se to tak, že napíšu typ proměnné a její jméno. 

Např.: chci používat proměnnou pocet a chci aby to bylo celé číslo.

int pocet;

Tím mám tu proměnnou, ale nemá žádnou hodnotu. Takže když ji budu nějakým způsobem používat (třeba k ní něco přičítat pocet++ tak to nebude fungovat).

První přiřazení hodnoty do proměnné se nazývá inicializace.

pocet = 100; 

Pokud už na začátku vím, jako hodnotu tam budu chtít, tak to můžu spojit do jednoho kroku:

int pocet = 100;

Snímek obrazovky 2023-03-31 113355

  1. mám deklarovanou proměnnou + mám ji inicializovanou a mám v ní hodnotu 0
  2. mám deklarovanou proměnnou, ale nemám ji inicializovanou (pak se říká, že má hodnotu NULL)
  3. proměnnou nemám ani deklarovanou