BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Podobné dokumenty
Programování a algoritmizace

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Algoritmizace. Cíle předmětu

Algoritmizace. Algoritmizace (Y36ALG), Šumperk - 1. přednáška 1

Algoritmizace a programování

Algoritmizace a programování

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

Algoritmy. BI-PA1 Programování a Algoritmizace 1. Miroslav Baĺık, Ladislav Vagner a Josef Vogel

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

Algoritmizace prostorových úloh

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

2. lekce Algoritmus, cyklus Miroslav Jílek

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

Funkce, intuitivní chápání složitosti

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Algoritmizace prostorových úloh

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Základy algoritmizace

Výukový materiál zpracován v rámci projektu EU peníze školám

Jazyk C++, některá rozšíření oproti C

Lekce 01 Úvod do algoritmizace

Základy algoritmizace a programování

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Algoritmizace. 1. Úvod. Algoritmus

Algoritmizace- úvod. Ing. Tomáš Otáhal

Operační systémy. Cvičení 4: Programování v C pod Unixem

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

Programovací jazyk Pascal

Rozklad problému na podproblémy, rekurze

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

DTP Základy programování Úvod do předmětu

Rozklad problému na podproblémy, rekurze

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata

Řídící struktury, if, while, switch

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

ALGORITMIZACE A PROGRAMOVÁNÍ

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Algoritmizace a programování

NPRG030 Programování I RNDr.Tomáš Holan, Ph.D. 4.patro, č

Programování 1 - Java

Základy algoritmizace a programování

Programovací jazyk C++ Hodina 1

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Program a životní cyklus programu

VISUAL BASIC. Přehled témat

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

Algoritmy a algoritmizace

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

KTE / ZPE Informační technologie

Operační systémy. Cvičení 3: Programování v C pod Unixem

Datové struktury 2: Rozptylovací tabulky

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Seminář z Informatiky a výpočetní techniky. Slovanské gymnázium Olomouc 4. září 2014 Tomáš Kühr

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Algoritmizace. Obrázek 1: Přeložení programu překladačem

Úvod. Programovací paradigmata

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

Úvod do programování - Java. Cvičení č.4

IB111 Úvod do programování skrze Python Přednáška 13

IUJCE 07/08 Přednáška č. 1

1 Základy algoritmizace a programování. 1.1 Algoritmus Možnosti zápisu algoritmů. Základy algoritmizace a programování

6 Příkazy řízení toku

Algoritmy. BI-PA1 Programování a Algoritmizace I. Ladislav Vagner

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

ANOTACE vytvořených/inovovaných materiálů

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Poslední nenulová číslice faktoriálu

11. Přehled prog. jazyků

KTE / PPEL Počítačová podpora v elektrotechnice

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Řídící struktury, if, while, switch

Řídicí struktury. alg3 1

Algoritmizace a programování

IB111 Programování a algoritmizace. Programovací jazyky

Úvod do programování

Matematika v programovacích

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

IB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat

Racionální čísla, operátory, výrazy, knihovní funkce

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Zápis programu v C a základní řídicí struktury

Transkript:

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Algoritmy BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík Fakulta informačních technologií České vysoké učení technické v Praze

Kdo je kdo v PA1? Ing. Miroslav Balík, Ph.D. přednášející a garant předmětu Ing. Josef Vogel, CSc. přednášející Ing. Ladislav Vagner, Ph.D. prosemináře, Progtest Cvičící a asistenti Studenti Ing. Miroslav Balík, Ph.D. - BI-PA1-01 2

Organizace předmětu Výuka 2 hod. přednášek, pondělí 12:45, 16:15, úterý 9:15 prosemináře 2 hod. jednou za 14 dní 2 hod. cvičení týdně v počítačové učebně Studijní materiály a další informace budou postupně zveřejňovány na webu: http://edux.fit.cvut.cz/courses/bi-pa1/ Doporučená literatura Herout: Učebnice jazyka C, KOPP, Č. Budějovice Virius: Jazyky C a C++, GRADA, Praha Ing. Miroslav Balík, Ph.D. - BI-PA1-01 3

Osnova předmětu Přednášky Cvičení 1. Algoritmus 1. Učebna, číselné soustavy 2. Proměnné, vstup, výstup 2. Proměnné, vstup, výstup 3. Výrazy 3. Reálné typy, výrazy 4. Větvení, cykly 4. Podmíněné příkazy 5. Funkce 5. Cykly, posloupnosti 6. Rekurze 6. Funkce 7. Pole, řetězce 7. Rekurze 8. Ukazatele 8. Pole a řetězce 9. Soubory 9. Ukazatele 10. Složitost algoritmů 11. Struktury 12. Spojové struktury 13. Modulární programování 10. Soubory 11. Složitost algoritmů 12. Struktury 13. Spojové struktury Ing. Miroslav Balík, Ph.D. - BI-PA1-01 4

Cíl předmětu Náš cíl naučit Vás sestavovat algoritmy pro řešení jednoduchých problémů a zapisovat je v jazyku C Váš cíl získat zápočet a zkoušku za A Ing. Miroslav Balík, Ph.D. - BI-PA1-01 5

Hodnocení předmětu Zdroje bodů pro hodnocení Body domácí úkoly 7*5 = 35b soutěžní úloha až 15 bodů semestrální práce 20 b test u počítače v semestru 25 b písemný zkouškový test 20 b Ústní zkouška Ano/Ne Klasifikace (na základě bodového hodnocení) klasifikace počet bodů číselně slovně A 90-100 1 výborně B 80-89 1,5 velmi dobře C 70-79 2 dobře D 60 69 2,5 uspokojivě E 50-59 3 dostatečně Detaily na http://edux.fit.cvut.cz/courses/bi-pa1/classification/start Ing. Miroslav F Balík, Ph.D. < 50 - BI-PA1-01 4 nedostatečně 6

Algoritmus a jeho vlastnosti Definice postup při řešení určité třídy úloh, který je tvořen seznamem jednoznačně definovaných příkazů a zaručuje, že pro každou přípustnou kombinaci vstupních dat se po provedení konečného počtu kroků dospěje k požadovaným výsledkům Vlastnosti hromadnost měnitelná vstupní data determinovanost každý krok je jednoznačně definován konečnost a resultativnost pro přípustná vstupní data se po provedení konečného počtu kroků dojde k požadovaným výsledkům Ing. Miroslav Balík, Ph.D. - BI-PA1-01 7

Algoritmus Algoritmus syntetický model postupu řešení obecných úloh Prostředky pro zápis algoritmu přirozený jazyk, vývojové diagramy, struktogramy, pseudojazyk, programovací jazyk - C Ing. Miroslav Balík, Ph.D. - BI-PA1-01 8

Problém číslo 1, myš na Zemi a ve vesmíru Problém: Předpokládejme, že naše Země je omotána na rovníku tlustou mašlí. Otázka zní, pokud tuto mašli prodloužíme o jeden metr, vznikne dostatečná mezera, aby se pod ní protáhla myš? Jak se změní odpověď pokud nebudeme uvažovat Zemi, ale Měsíc? Země(Apollo 17): Myš:. Ing. Miroslav Balík, Ph.D. - BI-PA1-01 9

Řešení 1. velmi naivní algoritmus 1. Chytnu myš,raději živou, bude muset prolézat 2. seženu velmi dlouhou mašli, 3. natáhnu ji po rovníku, 4. přidám k ní jeden metr, 5. zkontroluji, zda je všude povolená stejně, 6. vhodně motivovanou myš požádám, aby zkusila prolézt, 7. zapíši výsledek. Modifikace pro Měsíc: 1. seženu grant, 2. koupím vesmírnou loď, skafandr pro sebe a myš, 3. pokračuji jako na Zemi Ing. Miroslav Balík, Ph.D. - BI-PA1-01 10

Požadavky na algoritmus, aneb je tento naivní algoritmus algoritmem? Konečnost - Každý algoritmus musí skončit v konečném počtu kroků. Tento počet kroků může být libovolně velký (podle rozsahu a hodnot vstupních údajů), ale pro každý jednotlivý vstup musí být konečný. Ano, skončí. Determinovanost - Každý krok algoritmu musí být jednoznačně a přesně definován; v každé situaci musí být naprosto zřejmé, co a jak se má provést, jak má provádění algoritmu pokračovat. S rezervou, ale ano. Vstup - Algoritmus obvykle pracuje s nějakými vstupy, veličinami, které jsou mu předány před započetím jeho provádění, nebo v průběhu jeho činnosti. Vstupy mají definované množiny hodnot, jichž mohou nabývat. Vstupem jsou myš a planeta (mají velikost), 1metr. Výstup - Algoritmus má alespoň jeden výstup, veličinu, která je v požadovaném vztahu k zadaným vstupům, a tím tvoří odpověď na problém, který algoritmus řeší. (Algoritmus vede od zpracování hodnot k výstupu - Resultativnost) Ano, projde x neprojde. Ing. Miroslav Balík, Ph.D. - BI-PA1-01 11

Požadavky na algoritmus II, aneb je tento naivní algoritmus algoritmem? Efektivita - Obecně požadujeme, aby algoritmus byl efektivní, v tom smyslu, že požadujeme, aby každá operace požadovaná algoritmem, byla dostatečně jednoduchá na to, aby mohla být alespoň v principu provedena v konečném čase pouze s použitím tužky a papíru. (tj. byla elementární) Tady je největší slabina navrženého algoritmu Obecnost (Hromadnost) Algoritmus neřeší jeden konkrétní problém (např. jak spočítat 9 7 ), ale obecnou třídu obdobných problémů (např. jak spočítat součin dvou celých čísel ). Ano. V praxi jsou proto předmětem zájmu hlavně takové algoritmy, které jsou v nějakém smyslu kvalitní. Takové algoritmy splňují různá kritéria, měřená např. počtem kroků potřebných pro běh algoritmu, nebo jednoduchost či elegance algoritmu. Problematikou efektivity algoritmů, tzn. metodami, jak z několika známých algoritmů řešících konkrétní problém vybrat ten nejlepší, se zabývají odvětví informatiky nazývané algoritmická analýza a teorie složitosti.výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Ing. Miroslav Balík, Ph.D. - BI-PA1-01 12

Řešení 2. - výpočetní algoritmus 1. Zjistím velikost poloměru příslušné planety, označím jej r, 2. velikost myši označím mys, budu ji uvádět v metrech, 3. vypočtu rovníkový obvod planety podle vztahu obvod = 2*π*r, 4. vypočtu poloměr r2 povolené mašle podle vztahu r2 = (obvod + 1)/ (2* π), 5. jestliže mys + r < r2 odpověď je Ano, jinak Ne Modifikace pro Měsíc: 1. Změním poloměr a postup opakuji. Konečnost, determinovanost, vstup, výstup, efektivita, obecnost - Hromadnost Determinovanost si vynucuje jednoznačný zápis, např. v C. K tomu potřebujeme proměnné, výrazy, vstup a výstup. Ing. Miroslav Balík, Ph.D. - BI-PA1-01 13

Algoritmy - NSD Úloha: najděte největšího společného dělitele čísel 6 a 15 (co je největší společný dělitel dvou přirozených čísel?) Řešení: Popišme postup tak, aby byl použitelný pro dvě libovolná přirozená čísla, nejen pro 6 a 15: označme zadaná čísla x a y a menší z nich d není-li d společným dělitelem x a y, pak zmenšíme d o 1, test opakujeme a skončíme, až d bude společným dělitelem x a y Poznámka: Význam symbolů x, y a d použitých v algoritmu: jsou to proměnné (paměťová místa), ve kterých je uložena nějaká hodnota, která se může v průběhu výpočtu měnit Ing. Miroslav Balík, Ph.D. - BI-PA1-01 14

NSD 2 Úloha: najděte největšího společného dělitele Přesnější popis: Vstup: přirozená čísla x a y Výstup: nsd(x,y) Postup: 1. Je-li x<y, pak d má hodnotu x, jinak d má hodnotu y 2. Opakuj krok 3, pokud d není dělitelem x nebo d není dělitelem y 3. Zmenši d o 1 4. Výsledkem je hodnota d Sestavili jsme algoritmus pro výpočet největšího společného dělitele dvou přirozených čísel Ing. Miroslav Balík, Ph.D. - BI-PA1-01 15

NSD - příklad Úloha: najděte největšího společného dělitele čísel 6 a 15 krok x y d poznámka 6 15? zadání vstupních dat 1 6 15 6 2 6 15 6 d není dělitelem y, proveď krok 3 3 6 15 5 2 6 15 5 d není dělitelem x, proveď krok 3 3 6 15 4 2 6 15 4 d není dělitelem x ani y, proveď krok 3 3 6 15 3 2 6 15 3 d je dělitelem x i y, proveď krok 4 4 6 15 3 výsledkem je číslo 3 Ing. Miroslav Balík, Ph.D. - BI-PA1-01 16

NSD vývojový diagram nsd(x, y) ano x < y ne d := x d := y d není dělitelem x nebo d není dělitelem y ano d := d - 1 ne nsd := d Ing. Miroslav Balík, Ph.D. - BI-PA1-01 17

NSD - Struktogram nsd(x, y) ano x < y ne d := x d := y pokud d není dělitelem x nebo d není dělitelem y opakuj nsd :=d d := d - 1 Ing. Miroslav Balík, Ph.D. - BI-PA1-01 18

NSD - pseudojazyk Zápis algoritmu v pseudojazyku nsd(x,y): if x<y then d:=x else d:=y; while d není dělitelem x or d není dělitelem y do d:=d-1; nsd:=d; Zápis algoritmu v programovacím jazyku C int nsd(int x, int y) { int d; if (x<y) d=x; else d=y; while (x%d!=0 y%d!=0) d--; return d; } Ing. Miroslav Balík, Ph.D. - BI-PA1-01 19

Programy a programovací jazyky Program je předpis pro provedení určitých akcí počítačem zapsaný v programovacím jazyku (je to vždy zápis algoritmu?) Programovací jazyky strojově orientované strojový jazyk = jazyk fyzického procesoru asembler (jazyk symbolických adres) vyšší jazyky imperativní (příkazové, procedurální) neimperativní (např. funkcionální, deklarativní,...) Hlavní rysy imperativních jazyků (např. C, C++, Java, Pascal, Basic,...) zpracovávané údaje mají formu datových objektů různých typů, které jsou v programu reprezentovány pomocí proměnných resp. konstant program obsahuje deklarace a příkazy deklarace definují význam jmen (identifikátorů) příkazy předepisují akce s datovými objekty nebo způsob řízení výpočtu Ing. Miroslav Balík, Ph.D. - BI-PA1-01 20

Vlastnosti programovacích jazyků Syntaxe souhrn pravidel udávajících přípustné tvary dílčích konstrukcí a celého programu Sémantika udává význam jednotlivých konstrukcí Prostředky pro popis syntaxe syntaktické diagramy různé formy Backus-Naurovy formy Sémantika je obvykle popsána slovně Ing. Miroslav Balík, Ph.D. - BI-PA1-01 21

Syntaktické diagramy Příklad: identifikátor je posloupnost písmen a číslic začínající písmenem Ing. Miroslav Balík, Ph.D. - BI-PA1-01 22

Rozšířená BNF Rozšířená Backus-Naurova forma EBNF Příklad: identifikátor identifikátor = písmeno {písmeno číslice} písmeno = 'A' 'B' 'C' 'D'... 'X' 'Y' 'Z' číslice = '0' '1' '2' '3' '4' '5' '6' '7' '9' Neterminály: Terminály: identifikátor, písmeno, číslice A, B,... Význam metasymbolů: {x} x y [x] žádný nebo několik výskytů x x nebo y žádný nebo jeden výskyt x Ing. Miroslav Balík, Ph.D. - BI-PA1-01 23

Implementace programovacích jazyků Dvě základní metody: interpretační kompilační Interpretační metoda: Ing. Miroslav Balík, Ph.D. - BI-PA1-01 24

Implementace programovacích jazyků Kompilační metoda: Ing. PG1-1 Miroslav Balík, Ph.D. - BI-PA1-01 25 25

Úvod do jazyka C Pro prezentaci, návrh a ověřování algoritmů použijeme jazyk C Z historie jazyka C 1972 D. Ritchie Bell Laboratories PDP11 1978 Kernighan, Ritchie: The C Programming Language (K&R C) Systémový jazyk operačního systému Unix 1982 ANSI pracovní skupina X3J11 ANSI X3.159-1989 (ANSI C, C89) převzatá ISO/IEC 9899:1990 1999 nová norma ISO 9899:1999 (C99) Budeme používat ANSI C Objektově orientovaným rozšířením C je jazyk C++, se kterým se seznámíme v předmětu PA2 Ing. Miroslav Balík, Ph.D. - BI-PA1-01 26

Úvod do jazyka C Přednosti jazyka C jde o vyšší, obecně použitelný programovací jazyk neobsahuje černé schránky, veškeré konstrukce jsou srozumitelné a snadno ilustrovatelné umožňuje operace blízké strojovému kódu (operace s adresami) překladače optimalizují, výsledný kód je velice efektivní vytvořené programy jsou dobře přenositelné (portabilní), pokud se nepoužívají počítačově závislé triky syntaxi výrazů a příkazů převzala řada dalších jazyků Hlavní nevýhoda překladačů jazyka C pro začátečníka nízká zabezpečenost (při běhu programu se neprovádějí žádné kontroly) Ing. Miroslav Balík, Ph.D. - BI-PA1-01 27

První program v jazyku C Příklad programu, který vypíše daný text na obrazovku: #include <stdio.h> #include <stdlib.h> int main(void) { printf("\nnazdar, toto je prvni program\n"); system("pause"); return 0; } Po překladu a spuštění se na obrazovku vypíše Nazdar, toto je prvni program Pokračujte stisknutím libovolné klávesy... vložení deklarací knihovních funkcí definice hlavní funkce oddělovač řádků příkaz pro výpis řetězce Nejjednodušší zdrojový program Jeden soubor obsahující hlavní funkce main Ing. Miroslav Balík, Ph.D. - BI-PA1-01 28

Překladače a vývojová prostředí Co budeme používat pro tvorbu programů NetBeans + GCC (Cygwin) Dev-Cpp volně šiřitelný překladač (freeware) PROC interpret jazyka C s omezenou knihovnou napsaný v jazyce Java provádí kontroly při běhu programu - Dále je možno použít - C++ Builder (Borland Inc.) - Visual C++ (Microsoft) Ing. Miroslav Balík, Ph.D. - BI-PA1-01 29

První program v Dev-Cpp Ing. Miroslav Balík, Ph.D. - BI-PA1-01 30

Příklady k přednáškám První program a všechny další, které budou prezentovány na přednáškách, jsou v adresáři prednasky/priklady Struktura adresáře: priklady priklad.dev priklad.exe... p1 prvni.c prvni.o nsd.c nsd.o p2... soubor s projektem spustitelný program zdrojový soubor soubor v jazyce relativních adres Ing. Miroslav Balík, Ph.D. - BI-PA1-01 31

#include <stdlib.h> #include <stdio.h> /* nsd.c */ Program pro výpočet NSD int nsd(int x, int y) { int d; if (x<y) d=x; else d=y; while (x%d!=0 y%d!=0) d--; return d; } int main(void) { int a, b, v; printf("\nnejvetsi spolecny delitel\n"); printf("zadej dve prirozena cisla\n"); scanf("%d %d", &a, &b); if (a<=0 b<=0) printf("cisla musi byt vetsi nez nula\n"); else printf("nsd(%d,%d)=%d\n", a, b, nsd(a,b)); system("pause"); return 0; } Ing. Miroslav Balík, Ph.D. - BI-PA1-01 32