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
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
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 Vytváření 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í).
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.
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
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 Značka Podíl / Celočíselné dělení DIV Odmocnina SQRT Jakákoliv forma cyklu
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
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áří
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ů
Zápis v programu: if podmínka then begin první příkaz end else begin end; poslední příkaz první příkaz poslední příkaz 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;
Neúplný příkaz větvení je-li ve větvích více příkazů Dělení x = A B C D Začátek Čti: A,B,C,D - + C+D = 0 X:= (A+B)/(C+D) Zobraz: Nulou nelze dělit Zobraz: X Konec
Obecný výraz X A B C D 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);
Zjištění, je-li číslo sudé nebo liché A div(2) celočíselné dělení dvěma
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é ); Zjištění lichosti pomocí funkce odd if odd (A) then write ( Číslo A je sudé ) else ( Číslo A je liché ); Dělitelnost
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
Seřadit tři čísla sestupně Case vícenásobné větvení
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
Rozhodněte, o jaký druh trojúhelníku jde