NPRG030 Programování I

Podobné dokumenty
NPRG030 Programování I, 2018/19 1 / :25:37

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

Základy algoritmizace a programování

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

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

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Základy algoritmizace a programování

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

NPRG030 Programování I, 2016/17 1 / :58:13

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

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

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

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Objektově orientované programování

Algoritmizace a programování

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Algoritmizace a programování

NPRG030 Programování I, 2010/11

Variace. Mocniny a odmocniny

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

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

Paměť počítače. alg2 1

Programovací jazyk Pascal

Operátory pro maticové operace (operace s celými maticemi) * násobení maticové Pro čísla platí: 2*2

5 Přehled operátorů, příkazy, přetypování

Program a životní cyklus programu

Úvod do programování. Lekce 1

Čísla a číselné soustavy.

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

Algoritmizace prostorových úloh

Operátory. Základy programování 1 Tomáš Kühr

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

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

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

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

Algoritmizace a programování

Poslední nenulová číslice faktoriálu

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Sada 1 - Základy programování

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

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Podíl dvou čísel nazýváme číslo racionální, která vyjadřujeme ve tvaru zlomku.

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Algoritmizace prostorových úloh

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

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

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

Řídicí struktury. alg3 1

Formátové specifikace formátovací řetězce

Sada 1 - Základy programování

IB111 Programování a algoritmizace. Programovací jazyky

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

Lekce 01 Úvod do algoritmizace

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Číselné soustavy. Binární číselná soustava

Tabulkový procesor. Základní rysy

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

Zápis programu v jazyce C#

Matematika v programovacích

2. lekce Algoritmus, cyklus Miroslav Jílek

C# konzole Podíl dvou čísel, podmínka IF

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

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

Inovace bakalářského studijního oboru Aplikovaná chemie

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

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

6 Příkazy řízení toku

ŠVP Školní očekávané výstupy. - vytváří konkrétní soubory (peníze, milimetrový papír, apod.) s daným počtem prvků do 100

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

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Algoritmizace a programování

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

pi Ludolfovo číslo π = 3,14159 e Eulerovo číslo e = 2,71828 (lze spočítat jako exp(1)), např. je v Octave, v MATLABu tato konstanta e není

Algoritmizace. 1. Úvod. Algoritmus

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

ALGORITMIZACE A PROGRAMOVÁNÍ

Princip funkce počítače

Úvod do programování 7. hodina

I. ZÁVĚREČNÁ ZPRÁVA PROJEKTU

Vzdělávací obsah vyučovacího předmětu

Příklad: Součet náhodných čísel ve vektoru s počtem prvků, které zadá uživatel, pomocí sum() a pomocí cyklu for. Ověříme, že příliš výpisů na

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

Úvod do programovacího jazyka Python

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

Už známe datové typy pro representaci celých čísel i typy pro representaci

Algoritmizace. Cíle předmětu

VISUAL BASIC. Práce se soubory

Aplikovaná numerická matematika

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

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

Jazyk PL/SQL Úvod, blok

Počítání s neúplnými čísly 1

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

1 Vzdělávací oblast: Matematika a její aplikace 2 Vzdělávací obor: Matematika 3 Vzdělávací předmět: Matematika 4 Ročník:

Úloha 1 Spojte binární obrazy na obrázku s hodnotami, které reprezentují.

Systém je citlivý na velikost písmen CASE SENSITIVE rozeznává malá velká písmena, např. PROM=1; PROm=1; PRom=1; Prom=1; prom=1; - 5 různých proměnných

Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python

Úvod do programování

Transkript:

NPRG030 Programování I RNDr. Tomáš Holan, Ph.D. RNDr. Martin Pergel, Ph.D. 4.patro, dveře 404 http://ksvi.mff.cuni.cz/~holan/ http://kam.mff.cuni.cz/~perm Tomas.Holan@mff.cuni.cz perm@kam.mff.cuni.cz NPRG030 Programování I, 2020/21 [1] 1 / 38 30.09.2020 14:57:28

NPRG030 Programování I V ZS není zkouška, jen zápočet zkouška v LS - NPRG031 Programování II podmínky zápočtu určuje cvičící, ale obecně o aktivní účast o domácí úkoly o zápočtový test o zápočtový program zvláštní cvičení Martin Mareš NPRG030 Programování I, 2020/21 [1] 2 / 38 30.09.2020 14:57:28

Programování je způsob, jak ovládat počítač umění řešit úlohy (a počítač nám v tom může pomoci) umění/schopnost/dovednost psát programy? co je to program? předpis, podle kterého počítač může provádět výpočet nějakého algoritmu? co je to algoritmus? NPRG030 Programování I, 2020/21 [1] 3 / 38 30.09.2020 14:57:28

Příklad: Algoritmus na sečtení dvou čísel zapsaných v desítkové soustavě. 1. Desítkové zápisy čísel umístíme pod sebe tak, aby jejich pravé okraje byly zarovnány 2. Delší z čísel doplníme zleva jednou nulou 3. Kratší z čísel doplníme zleva tolika nulami, aby byla obě čísla stejně dlouhá 4. Postupujeme zprava a ke každé dvojici číslic určíme číslici výsledku. Přitom tato číslice nezáleží jen na této dvojici, ale i na stavu výpočtu Stavy jsou dva: s přenosem a bez přenosu na začátku je stav bez přenosu výsledné číslice a stav lze určit například z tabulek: NPRG030 Programování I, 2020/21 [1] 4 / 38 30.09.2020 14:57:28

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ALGORITMUS NENÍ vysvětlit něco, co známe, někomu, kdo to taky zná!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NPRG030 Programování I, 2020/21 [1] 5 / 38 30.09.2020 14:57:29

Algoritmus Posloupnost konečného počtu elementárních kroků vedoucí k vyřešení daného typu úloh /Encyklopedický slovník/ Charakteristické vlastnosti: hromadnost (vstupní data, výstupní data)...daného typu úloh... výsledek lze získat zcela mechanicky...elementárních kroků... konečnost...konečného počtu... Více o algoritmech: NPRG062 Algoritmizace NPRG030 Programování I, 2020/21 [1] 6 / 38 30.09.2020 14:57:29

Programovací jazyk Algoritmy potřebujeme zapisovat Přirozený jazyk se na to nehodí (NENÍ to jazyk aby mu rozuměly počítače! Programy nepíšeme pro počítač, ale pro lidi. ) => programovací jazyky (mnoho a stále nové) => zdrojový kód NPRG030: jazyk Python NPRG031: jazyk C# NPRG030 Programování I, 2020/21 [1] 7 / 38 30.09.2020 14:57:29

Překladač, interpret(er) aneb nástroje Překladač Přečte program zapsaný v programovacím jazyku a vytvoří spustitelný program (.EXE) (=překlad). U toho zkontroluje (syntaktickou) správnost/chybnost. Pascal, C, C#, Java Interpret Čte program zapsaný v programovacím jazyku a hned ho provádí. Basic, JavaScript, PHP, Python a různé mezi-články NPRG030 Programování I, 2020/21 [1] 8 / 38 30.09.2020 14:57:29

Jazyk Python 1991, Guido van Rossum open source funguje na různých OS vzájemně nekompatibilní verse 2 a verse 3 prostředí IDLE = součást instalace NPRG030 Programování I, 2020/21 [1] 9 / 38 30.09.2020 14:57:29

Literatura Think Python: How to Think Like a Computer Scientist by Allen B. Downey http://greenteapress.com/thinkpython2/thinkpython2.pdf česky: http://howto.py.cz/index.htm How to Think Like a Computer Scientist Learning with Python by Peter Wentworth, Jeffrey Elkner, Allen B. Downey, and Chris Meyers http://openbookproject.net/thinkcs/python/english3e/...existuje více verzí téže knihy! NPRG030 Programování I, 2020/21 [1] 10 / 38 30.09.2020 14:57:29

Dive Into Python 3 by Mark Pilgrim https://diveinto.org/python3/table-of-contents.html česky: Ponořme se do Pythonu 3 by Mark Pilgrim http://diveintopython3.py.cz/index.html https://knihy.nic.cz/files/edice/python_3.pdf NPRG030 Programování I, 2020/21 [1] 11 / 38 30.09.2020 14:57:29

Co použít / nainstalovat Verze Python www.python.org různé verze jazyka drobné rozdíly vzájemně my budeme používat Python 3! (tj. verze 3.xx) NPRG030 Programování I, 2020/21 [1] 12 / 38 30.09.2020 14:57:29

Pojďme programovat! NPRG030 Programování I, 2020/21 [1] 13 / 38 30.09.2020 14:57:29

Základní prvky programovacího jazyka výstup vypsat, co jsme vypočítali dosazení zapamatovat si nějakou hodnotu proměnná vstup přečíst zadání od uživatele NPRG030 Programování I, 2020/21 [1] 14 / 38 30.09.2020 14:57:29

Řízení běhu programu = rozhodování, který příkaz se teď bude provádět. Možnosti: příkaz skoku mění pořadí provádění příkazů strukturované programování vytváří/skládá složitější příkazy z jednodušších NPRG030 Programování I, 2020/21 [1] 15 / 38 30.09.2020 14:57:29

Strukturované programování Podmíněný příkaz if podmínka: příkaz příkaz elif podmínka: příkaz příkaz else: příkaz příkaz NPRG030 Programování I, 2020/21 [1] 16 / 38 30.09.2020 14:57:29

Strukturované programování Příkaz cyklu while podmínka: příkaz příkaz Které všechny příkazy se provádí, když (ne)platí podmínka a co vše se bude opakovat určuje odsazení. Odsazení: buďto znak tabulátor NEBO mezery. Problém: Vypadá stejně! Zdroj chyb! (jiné jazyky používají begin end, { } apod.) NPRG030 Programování I, 2020/21 [1] 17 / 38 30.09.2020 14:57:29

Jednoduché příklady NPRG030 Programování I, 2020/21 [1] 18 / 38 30.09.2020 14:57:29

Co by taky šlo v Pythonu import numpy as np import matplotlib.pyplot as plt N = 5 menmeans = (20, 35, 30, 35, 27) womenmeans = (25, 32, 34, 20, 25) menstd = (2, 3, 4, 1, 2) womenstd = (3, 5, 2, 3, 3) ind = np.arange(n) # the x locations for the groups width = 0.35 # the width of the bars: can also be len(x) sequence p1 = plt.bar(ind, menmeans, width, yerr=menstd) p2 = plt.bar(ind, womenmeans, width, bottom=menmeans, yerr=womenstd) plt.ylabel('scores') plt.title('scores by group and gender') plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5')) plt.yticks(np.arange(0, 81, 10)) plt.legend((p1[0], p2[0]), ('Men', 'Women')) plt.show() Zdroj: https://matplotlib.org/3.1.1/gallery/lines_bars_and_markers/bar_stacked.html NPRG030 Programování I, 2020/21 [1] 19 / 38 30.09.2020 14:57:29

Jenomže Nevyužívat to, co už někdo vytvořil je hloupost. Využívat cokoliv, co už někdo vytvořil je hloupost. VYNALÉZAČI KOLA (nikomu nevěřím, všechno si píšu sám...) versus LEPIČI A KNIHOVNÁŘI (podívej, co jsem našel na Internetu ) Potřebujeme rozumný kompromis LeftPad NPRG030 Programování I, 2020/21 [1] 20 / 38 30.09.2020 14:57:29

HODNOTY a PROMĚNNÉ NPRG030 Programování I, 2020/21 [1] 21 / 38 30.09.2020 14:57:29

Hodnoty hodnoty vstupují, vypočítávají se, ukládají do proměnných a tisknou mohou být různých typů (dále) >>> type(7) <class 'int'> >>> type(7/2) <class 'float'> NPRG030 Programování I, 2020/21 [1] 22 / 38 30.09.2020 14:57:29

>>> type("ahoj") <class 'str'> NPRG030 Programování I, 2020/21 [1] 23 / 38 30.09.2020 14:57:29

Čísla v algoritmech a programech 10 26 Poloměr vesmíru 3063 studujících studentů MFF UK 3.142857... Ludolfovo číslo 10 16 stáří vesmíru v sekundách!!! budeme potřebovat!!! 3 délka bakalářského studia na MFF UK v letech 36524 délka života stoletého člověka (ve dnech) (!) NPRG030 Programování I, 2020/21 [1] 24 / 38 30.09.2020 14:57:29

Čísla v algoritmech a programech => pracujeme se dvěma*) typy čísel: CELÁ malý omezený rozsah (v Pythonu 3 NEOMEZENÝ!) přesné hodnoty DESETINNÁ velký rozsah přibližné hodnoty neumíme representovat všechny hodnoty ------------------ *) ještě komplexní (1+3j)*(1-3j) == (10+0j) NPRG030 Programování I, 2020/21 [1] 25 / 38 30.09.2020 14:57:29

Typ int neomezený rozsah! OPERÁTORY + sčítání - odčítání * násobení // celočíselné dělení (zaokrouhluje dolů, i pro čísla<0) % zbytek po dělení (periodický: -1 % 7 = 6) / dělení s výsledkem typu float ** umocňování ==,!=, <, >, <=, >= porovnávání NPRG030 Programování I, 2020/21 [1] 26 / 38 30.09.2020 14:57:29

Priorita operátorů 1. umocňování 2. násobení, dělení, zbytek 3. sčítání, odečítání 4. relační operátory V případě stejné priority odleva. NPRG030 Programování I, 2020/21 [1] 27 / 38 30.09.2020 14:57:29

Typ float HODNOTY Racionální čísla, jen konečná množina, výsledek je jen APROXIMACE správného výsledku. VÝSLEDNÉ CHYBY záleží na representaci čísel na řešené úloze na zvoleném algoritmu. >>> 49*(1/49) 0.9999999999999999 NPRG030 Programování I, 2020/21 [1] 28 / 38 30.09.2020 14:57:29

Odhadem velikosti chyb se zabývá NUMERICKÁ MATEMATIKA. POZOR! POZOR! POZOR! POZOR! V paměti je jiná representace než desítkový zápis => při vstupu a výstupu dochází k zaokrouhlování! POZOR! POZOR! POZOR! POZOR! NPRG030 Programování I, 2020/21 [1] 29 / 38 30.09.2020 14:57:29

Poučení Testovat reálná čísla (vypočtená nebo načtená) na rovnost nemusí mít dobrý smysl! Místo toho: abs( koruny1-koruny2 ) < Epsilon NPRG030 Programování I, 2020/21 [1] 30 / 38 30.09.2020 14:57:29

Typ float zápis konstant HODNOTY desetinná tečka a nepovinně číslice za ní nepovinně exponent ve tvaru E<int> SEMILOGARITMICKÝ TVAR 0.3768-326.21 1234. 0.03E-4-10.583E60 NPRG030 Programování I, 2020/21 [1] 31 / 38 30.09.2020 14:57:29

Funkce (pro int i float) int( x ) abs( x ) min( x1, x2 ) max( x1, x2 ) a další. zahodí desetinnou část (takže pro záporná čísla zvětšuje!) absolutní hodnota minimum maximum NPRG030 Programování I, 2020/21 [1] 32 / 38 30.09.2020 14:57:29

Funkce (pro int i float) Ještě další funkce jsou v modulu math (o modulech později), například >>> import math >>> math.factorial(69) 171122452428141311372468338881272839092270544 893520369393648040923257279754140647424000000 000000000 NPRG030 Programování I, 2020/21 [1] 33 / 38 30.09.2020 14:57:29

Typ float - operace...jako u typu int celočíselné dělení (zaokrouhluje dolů, i pro čísla<0), ale když je některý operátor typu float, je výsledek také typu float NPRG030 Programování I, 2020/21 [1] 34 / 38 30.09.2020 14:57:29

Proměnné proměnná nemá svůj typ, lze do ní uložit hodnotu jakéhokoliv typu! >>> a = 2*7 >>> type(a) <class 'int'> >>> a =7/2 >>> type(a) <class 'float'> NPRG030 Programování I, 2020/21 [1] 35 / 38 30.09.2020 14:57:29

Proměnné (Na rozdíl od jiných jazyků:) proměnná NENÍ místo v paměti (jako skříňka nebo háček v šatně) ale pouze jméno ( odkaz ) (jako lísteček, který šatnářka přicvakne na batoh). NPRG030 Programování I, 2020/21 [1] 36 / 38 30.09.2020 14:57:29

Proměnné (důsledek) Dvě proměnné mohou odkazovat na stejná data (později). a pokud je skrze jednu proměnnou změníme, mohou se změnit i ve druhé proměnné (mutable x immutable typy) identity-operator is NPRG030 Programování I, 2020/21 [1] 37 / 38 30.09.2020 14:57:29

Příklady (nebo LeftPad ) NPRG030 Programování I, 2020/21 [1] 38 / 38 30.09.2020 14:57:29