Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu
Algoritmizace a programování V algoritmizaci a programování je důležitá schopnost analyzovat a myslet. Všeobecně jsou odrazovým můstkem pro řešení neobvyklých, ale i každodenních problémů. Naučí nás rozdělit složité informace na jednodušší a pochopit tak lépe podstatu problému. Problém je stav, ve kterém je rozdíl mezi tím, co v daném momentě máme a tím, co chceme dosáhnout. Řešení problému je odstraňování rozdílu mezi aktuálním stavem a tím, co chceme dosáhnout
Algoritmus Algoritmus = přesný postup, který je potřeba k vykonání určité činnosti Vlastnosti: elementárnost – postup je složený z jednoduchých kroků, které jsou pro počítač srozumitelné konečnost – musí skončit v konečném počtu kroků jednoznačnost - každý krok algoritmu musí být jednoznačně a přesně definován rezultativnost - výpočet dává po konečném počtu prvků výsledek hromadnost - algoritmus je schopen zpracovávat jakákoliv vstupní data, která vyhovují zadaným podmínkám efektivnost – výpočet se uskutečňuje v co nejkratším čase a s využitím co nejmenšího množství prostředků
Algoritmický jazyk jazyk pro komunikaci se strojem vyžaduje stabilní a neměnný seznam umožňující přesnou specifikaci příkazů je vyžadována přesnost, konkrétnost a adresnost Algoritmické jazyky můžeme rozdělit na graficky orientované – vývojové diagramy, strukturogramy a obrázkové jazyky textově orientované – slovní zápis v přirozeném jazyce, programovací jazyky a rozhodovací tabulky
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu
Vývojový diagram je grafické znázornění algoritmu. Vývojové diagramy se skládají z grafických značek. Značky jsou různé a různě se kombinují, tím se simulují různé situace a různé příkazy, do těchto značek se pak vypisují upřesňující údaje. Takto vypadají jednotlivé části vývojového diagramu.
Konec a začátek algoritmu Vstup nebo výstup Běžný příkaz Podmíněný výraz Cyklus s určeným počtem opakování Cyklus s podmínkou na konci
Cyklus s podmínkou na začátku
Podprogram Spojovací značka Spojovací čára
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu
Vytváření programu Rozdělit proces do čtyř kroků: 1. přesná definice problému 2. sestavení algoritmu 3. tvorba programového kódu 4. ověření funkce programu ad1. Programátor by měl velice přesně znát, co chce naprogramovat, co má program umět a kdo jej bude používat. Je vhodné kontaktovat i budoucí uživatele a vyjasnit si co lze a nelze naprogramovat. Při tvorbě jednoduchých programů je tato fáze velice krátká a často odpadá, ale u složitějších projektů může být stěžejní. ad2. Tato fáze nastává u jakéhokoliv programu. U jednodušších stačí mít algoritmus v hlavě, u složitějších je lepší použít tužku a papír. Prvním krokem bývá rozdělení „velkého“ problému na několik jednodušších U algoritmizace úlohy je třeba zdůraznit některé důležité zásady: a) každý příkaz musí mít jednoznačný význam, který je počítač schopen provést b) algoritmizace se musí řídit tzv. matematickou logikou ad3. Programátor píše zdrojový kód a zodpovídá za to: -
aby kód dělal skutečně to co má
-
aby v programu nebyly chyby (aby byl program správně odladěn)
-
aby byl psán optimálním způsobem
ad4. Stejně jako se provádí v matematice zkouška, zde se provádí ověření funkce -
simuluje se zadávání vstupních dat, které se mohou vyskytnout za běžného provozu
-
zadávají se různé kombinace nesmyslných dat a zjišťuje se, jak si s nimi program poradí (neměl by havarovat)
-
navozují se mezní podmínky, při kterých by měl program ještě pracovat dobře
Ladění, druhy chyb v programu Programování je komplexní proces, a protože je vykonáván lidmi, dochází při něm ke vzniku chyb. Anglicky se chyby nazývají bugs a jejich odstraňování debugging (ladění).
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu V programu mohou existovat tři druhy chyb. Je potřeba naučit se mezi nimi rozlišovat kvůli snadnějšímu vyhledávání. 1. Syntaktické chyby – překladače mohou přeložit jen syntakticky správný zdrojový text, jinak se překlad přeruší a je ukončen s chybou. Syntaxe popisuje strukturu zdrojového textu a pravidla definující tuto strukturu. Jde vlastně o chyby „pravopisné“. Je možné jich objevit snadněji než chyby ostatní. S narůstajícími zkušenostmi s daným jazykem a programováním počet syntaktických chyb klesá. 2. Běhové chyby, to jsou chyby vznikající až při běhu programu. Tyto chyby se nazývají výjimkami, jelikož většinou indikují vznik výjimečné situace. Typickým příkladem je dělení nulou. Na tyto chyby narazíme až u složitějších programů. 3. Logické chyby, jsou to chyby v logickém návrhu programu. Tento typ chyb je nejzáludnější, nejhůře vyhledatelný, protože program se spustí bez problému, nevypisuje žádné chybové hlášky, ale nepracuje správně. Dělá přesně to, co jsme mu řekli. Problém spočívá v tom, že jsme napsali část programu jinak, než jsme zamýšleli. Vyhledávání takovéto chyby vyžaduje zpětnou kontrolu logiky programu, sledování kontrolních programů a odhadování toho, co vlastně program v daném okamžiku dělá (krokování programu) Ladění je jednou z nejdůležitějších dovedností, kterou je nutné se naučit. I když to zpočátku vypadá jako marná práce, je ladění duševně náročnou, podnětnou a zajímavou částí programování. Jistým způsobem připomíná detektivní práci. Jsme konfrontováni se stopami, ze kterých se musíme snažit vydedukovat procesy a události, které vedou k výsledkům, jež vidíte. Ladění občas připomíná vědecký výzkum. Jakmile máte tušení kde je chyba, upravíte program a zkusíte to znova. Byla-li vaše hypotéza správná a potvrdí-li se výsledky vaší modifikace, jste o krůček blíž k funkčnímu programu. Nebyla-li hypotéza správná, musíte přijít s novou.
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu
Programovací jazyky a metody programování Program je jedním z možných zápisů algoritmů, na rozdíl od ostatních forem zápisu mu kromě člověka rozumí i počítač Programovací jazyk byl vyvinut pro usnadnění komunikace člověka s počítačem
Rozdělení programovacích jazyků a) na nižší a vyšší – podle toho jak blízko mají ke strojovému kódu
strojový kód
hovorová řeč nižší jazyky
vyšší jazyky
Počítač
Člověk
Zdrojový kód psaný v nižším programovacím jazyce je podstatně delší než ve vyšším Nižší programovací jazyky – všechny jazyky operačních systémů – Assemblery, jazyk C Vyšší programovací jazyky – všechny uživatelsky orientované – Fotran, Pascal, Delphi, Java…. b) překládané (kompilované) a interpretované Překlad neboli kompilace je úkon, při kterém se převede program ze zdrojového kódu do strojového. Programy napsané v překládaných programovacích fungují tak, že se nejprve vytvoří spustitelný exe-soubor a pak už se spouští pouze ten. Interpretace programu je postup, při kterém se nevytvoří dopředu spustitelný soubor, ale překládá se až „za běhu programu.“ Tyto jazyky jsou nezávislé na prostředí, ve kterém jsou spuštěny. Překládané jazyky jsou rychlé zákazníkovi nemusí být poskytnut zdrojový kód je úzce svázán s operačním systémem a typem počítače
Interpretované jazyky je nezávislý na operačním systému a typu počítače jsou pomalé zákazníku musí být poskytnut zdrojový kód
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu
Programovací metody Podle způsobu tvorby programu existují dva směry programování: 1. Strukturované programování a. složitá úloha se rozdělí na dílčí úkoly, které lze řešit samostatně b. při návrhu řešení dílčích úloh lze použít pouze povolené řídící struktury, což jsou sekvence, větvení a cykly 2. Objektové programování a. v rámci úlohy se identifikují objekty (např. formulář, tlačítko, …) b. každý objekt má svoje vlastnosti a metody c. zdrojový kód se vytváří formou procedur, které jsou připojeny k událostem určitého objektu d. uvnitř procedur však stejně postupujeme strukturovaně
Sekvence – nejjednodušší typ algoritmu, kromě mezních značek se skládá pouze ze sekvenčních bloků. Během sekvence nesmí docházet k větvení algoritmu ani k cyklu. Je jedním ze základních stavebních kamenů algoritmu. Povolené operace v sekvencích Operace
Značka
Rozdíl
-
Součin
*
Mocnina
SQR
Logický součet
OR
Logický součin
AND
Negace
NOT
Nepovolené operace v sekvencích Operace Podíl Celočíselné dělení Odmocnina Jakákoliv forma cyklu
Značka / DIV SQRT
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu Operace jsou nepovolené proto, neboť by musely být nejprve ošetřeny větvením, nebo jde o cyklus, což u sekvencí není možné Matematické operace začátek
Čti: A, B
C:= A + B D:= A – B E:= A * B
Zobraz:C, D, E
konec
Výměna obsahu dvou buněk začátek
Čti: A, B
POM := A A := B B := POM
Zobraz A,B
3. Konec
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu Obvod a obsah obdélníka začátek
Čti: a, b
o:= 2*(a+b) S:= a*b
Zobraz o,S
Konec
Obvod a obsah kruhu
začátek
Čti: r
o:= 2*Pi *r S:= Pi * r * r
Zobraz o,S
Konec
Úterý 29. září
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu
Větvení Úplný příkaz větvení je-li ve větvích jediný příkaz
Zápis v programu: if podmínka then jediný příkaz else jediný příkaz; Úplný příkaz větvení je-li ve větvích více příkazů
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu Zápis v programu: if podmínka then begin první příkaz poslední příkaz end else begin první příkaz poslední příkaz end;
Neúplný příkaz větvení je-li ve větvích jediný příkaz
Zápis v programu: if podmínka then jediný příkaz;
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu Neúplný příkaz větvení je-li ve větvích více příkazů
Dělení
x=
A B CD
Začátek
Čti: A,B,C,D
-
+ C+D = 0
X:= (A+B)/(C+D)
Zobraz: X
Konec
Zobraz: Nulou nelze dělit
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu
Obecný výraz X
A B CD
Absolutní hodnota
Namísto větvení můžeme použít funkci abs Absolutní hodnota pomocí větvení if A < 0 then A:= -A;
Absolutní hodnota pomocí funkce abs A := abs(A);
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu
Zjištění, je-li číslo sudé nebo liché
A div(2) – celočíselné dělení dvěma
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu Namísto celočíselného dělení a zpětného násobení lze použít funkci odd (lichost) Zjištění lichosti pomocí celočíselného dělení a zpětného násobení POM:= A div(2); ZB:= A- 2* POM; if ZB = 0 then write (‘Číslo A je sudé’) else (‘Číslo A je liché’);
Dělitelnost
Zjištění lichosti pomocí funkce odd
if odd (A) then write (‘Číslo A je sudé’) else (‘Číslo A je liché’);
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu
Početní operace modulo je zbytek po dělení a souvisí s celočíselným dělením. Př. 17 : 4 = 4 zb. 1 = > 17 mod 4 = 1 Je-li modulo (zbytek po dělení) nula, můžeme říct, že první číslo je dělitelné druhým číslem. Procedura exit Program lze někdy zjednodušit instrukcí exit. Má za následek okamžité ukončení programového celku. Největší ze tří čísel
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu Seřadit tři čísla sestupně
Case – vícenásobné větvení
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu
Napište program, který ze zadané ujeté vzdálenosti vypočte platbu taxikáři, jestliže má stanoveny následující sazby: 0 - 19km
25 Kč/km
20 - 39km
23 Kč/km
40 - 59km
20 Kč/km
60km a více 17 Kč/km
Interval v Pascalu se píše 2..8
Vytvořeno podle knih Jany Pšeničkové: Algoritmizace a Programování v Pascalu Rozhodněte, o jaký druh trojúhelníku jde