Psaní jednoduchých programů (2. přednáška) F F U K. Jonathan L. Verner. Department of Logic

Podobné dokumenty
IB111 Úvod do programování skrze Python Přednáška 7

Programovací jazyk Pascal

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

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ů

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

Chyby a výjimky. Chyba. Odkud se chyby berou? Kdo chyby opravuje? Co můžete dělat jako programátor? Dvě hlavní metody práce s chybami.

Algoritmizace a programování

Zápis programu v jazyce C#

Funkce, podmíněný příkaz if-else, příkaz cyklu for

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

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

Konečný automat. Jan Kybic.

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

Úvod do programovacích jazyků (Java)

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Programování v Pythonu

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

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

Sada 1 - Základy programování

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

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

6. Příkazy a řídící struktury v Javě

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

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

Základy algoritmizace a programování

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

Jazyk C# a platforma.net

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

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

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

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 -

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Základy algoritmizace a programování

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

Algoritmus. Algoritmus je posloupnost kroků, které jsou potřeba k vyřešení problému.

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

Programování v jazyce JavaScript

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

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

NPRG030 Programování I, 2010/11

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

1. Téma 03 - Rozhodování

Scrapping stránek prakticky: Dívka dne na TN.cz

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

Python profesionálně: dynamické parametry, generátory, lambda funkce... with. Dynamické parametry

Algoritmizace a programování

3. Řízení běhu programu

Základy PERLu snadno a rychle

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

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

Úvod do programování. Lekce 1

MQL4 COURSE. By Coders guru -4 Operace & Výrazy

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

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

Programování v jazyce JavaScript

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Funkce - opakování. Funkce může přijímat parametry na vstupu a může vracet parametry na výstupu.

2. lekce Algoritmus, cyklus Miroslav Jílek

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Algoritmizace prostorových úloh

Stručný návod k programu Octave

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

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

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

Algoritmy a datové struktury

VISUAL BASIC. Práce se soubory

Řídicí struktury. alg3 1

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

Algoritmizace a programování

Sada 1 - Základy programování

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

Větvení a cykly. Úvod do programování 1 Tomáš Kühr

Programování v Pythonu

Úvod do databázových systémů

Násobení pomocí sčítání

PROGRAMOVÁNÍ V SHELLU

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

LEKCE 6. Operátory. V této lekci najdete:

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

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

Datové typy strana 29

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Proměnné a parametry. predn_08.odt :00:38 1

CZ.1.07/1.5.00/

Algoritmizace prostorových úloh

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

C2110 Operační systém UNIX a základy programování

Sekvenční a podmíněné provádění

Standardní algoritmy vyhledávací.

Řídicí příkazy KAPITOLA 3. Vstup znaků z klávesnice

Objektově orientované programování

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

VY_32_INOVACE_08_2_04_PR

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

15. Projekt Kalkulačka

Transkript:

Psaní jednoduchých programů (2. přednáška) Jonathan L. Verner

Vývoj software Vývoj není jednoduchý. Počítači je nutné říci všechno do nejmenších detailů. Počítač je tupý. Proto je třeba systematického přístupu.

Vývoj software jednotlivé fáze Rozbor problému problém je třeba co nejpřesněji formulovat, stanovit priority, ujasnit si, kdo bude uživatelem,... Specifikace programu přesně stanovit, co bude program dělat (i co dělat nebude), jaké budou vstupy/výstupy. V této fázi se není třeba starat o to jak ale o to co. Návrh programu navrhnout algoritmy (datové struktury) strukturu programu. Víme už co, teď jde o to jak. (Architekt) Implementace napsat reálný kód, třeba v Pythonu. (Stavař) Testování/Debugování hlavní otázka: Dělá program opravdu to, co má dělat? Jak se chová, když je uživatel blbý? (Uživatelé jsou blbí!) (unit testing, randomized testing...) Údržba postupný vývoj (nové funkce, změny,...)

Farenheit x Celsius Kamarád je na studijním pobytu v USA a dělá mu potíže zvyknout si na měření teploty ve Farenheitech. Anglicky umí dobře, takže ranní předpověď počasí z radia si poslechne, ale moc mu to nepomůže, protože netuší, jestli 32 Farenheitů je zima nebo vedro. Chcete se předvést, tak mu navrhnete, že napíšete program, který mu pomůže.

Celsius Farenheit: Rozbor problému Tento konkrétní problém je jednoduchý. Jde o převod mezi stupnicemi. Přesněji, jde o převod ze stupnice Farenheit do stupnice Celsius.

Celsius Farenheit: Specifikace Program uživatele vyzve, aby zadal teplotu ve stupních Farenheit. Pak vypíše odpovídající teplotu ve stupních Celsia.

Celsius Farenheit: Návrh Víme, že 100 C = 212 F a 0 C = 32 F. Také víme, že obě stupnice jsou na sobě lineárně závislé. Tedy: 212 32 = 180 stupňů F. odpovídá 100 0 = 100 stupňům C., tedy 1 stupeň F odpovídá 100/180 = 5/9 stupňům C., C = 5/9F + k Dosazením 32 F = 0 C zjistíme, že k 17.7. 1. Načti vstup od uživatele do F 2. Spočti C podle vzorečku C = 5/9 * F - 17.7 3. Vypiš na obrazovku C

Celsius Farenheit: Implementace # farenheit2celsius.py # Program na převod z Farenheit do Celsius # autor: Student Logiky def main(): F = float(input("jaka je teplota ve Farenheitech? ")) C = 5/9 * F - 17.7 print("teplota ve stupnich Celsia je", C) main()

Celsius Farenheit: Debugování >>> Jaka je teplota ve Farenheitech? 32 Teplota ve stupnich Celsia je 0.0777777777778 >>> main() Jaka je teplota ve Farenheitech? 212 Teplota ve stupnich Celsia je 100.077777778 >>>

Základní stavební bloky programu: Jména Jména (podobně jako v přirozeném jazyce) jsou důležitou součástí jazyka. Pojmenováváme programy (farenheit2celsius), funkce/příkazy (main, print), hodnoty/proměnné (C, F)... V programátorském žargonu jsou to tzv. identifikátory (identifiers). Každý identifikátor musí začínat písmenem nebo podtržítkem (_) Může obsahovat pouze písmena (z anglické abecedy), číslice nebo podtržítka Rozlišují se malá a velká písmena (t.j. Ahoj není totéž jako ahoj) Je dobré volit jména krátká a výstižná (NE: PromennaJejizHodnotaSeCastoMeniAMuzeBytIZaporna, celsius uchovávající stupně ve Farenheitech)

Zabraná jména (reserved words) and del for is raise assert elif from lambda return break else global not try class except if or while continue exec import pass yield def finally in True False None nonlocal as with

Základní stavební bloky programu: Výrazy (expressions) Programy manipulují s daty. Části programů, které vytváří/počítají nová data se nazývají výrazy. Nejjednodušším příkladem výrazu jsou literály. 9.5 5.0 10 Jméno (identifikátor proměnné) je také výrazem. Když se vyhodnocuje výraz, jména jsou nahrazena příslušnou hodnotou.

Výrazy >>> x=5 >>> x 5 >>> y Traceback (most recent call last): File "<pyshell#7>", line 1, in <module> y NameError: name 'y' is not defined >>> Jméno musí být definováno, dříve než lze použít ve výrazu.

Složené výrazy operátory Složitější výrazy lze nakombinovat z jednodušších pomocí operací. Pro číselné výrazy jsou k dispozici sčítání (+), odčítání (-), násobení (*), dělení (/) a mocnění (**). Priorita operací je stejná jako na ní jsme zvyklí ( +,- < *,/ < **) Mezery Python ignoruje, ale hodí se kvůli čitelnosti. Pro seskupování výrazů lze použít závorky (pouze kulaté závorky: (,)).

Formální rekurzivní definice výrazu simple_expr := <literal> <identifikator_promenne> OP := + - * / ** expr := <simple_expr> ( <expr> ) <expr> <OP> <expr>

Syntax vs Sémantika Každý příkaz v Pythonu má přesně danou syntax (formu) a sémantiku (význam) Pro popis syntaxe/sémantiky se hodí speciální meta-jazyky (viz předchozí slide).

Základní stavební bloky programu: Přiřazovací příkazy <variable> = <expr> Význam: Výraz na pravé straně je vyhodnocen a výsledná hodnota je přiřazena do proměnné na levé straně. x = 3.9 * x * (1-x) C = 5/9 * F - 17.7 x = 5 do jedné proměnné lze přiřadit vícekrát proměnná si vždy ponechá hodnotu posledního přiřazení

Přiřazovací příkazy >>> myvar = 0 >>> myvar 0 >>> myvar = 7 >>> myvar 7 >>> myvar = myvar + 1 >>> myvar 8

Přiřazovací příkazy >>> myvar = 0 >>> myvar 0 myvar 0

Přiřazovací příkazy >>> myvar = 0 >>> myvar 0 >>> myvar = 7 >>> myvar 7 myvar 0 7

Přiřazovací příkazy >>> myvar = 0 myvar >>> myvar 0 >>> myvar = 7 >>> myvar 7 >>> myvar = myvar + 1 >>> myvar 8 Proměnná je ve skutečnosti ukazatel. Staré hodnoty (na které žádná proměnná neodkazuje) se mažou automaticky Garbage collection 0 7 8

Načtení vstupu Funkce input <variable> = input(<expr>) Význam: Python vyhodnotí výraz <expr> a vypíše na obrazovku. Uživatel zadá posloupnost znaků na klávesnici a vstup ukončí klávesou enter. Posloupnost znaků se přiřadí do proměnné <variable>. >>> x = input("zadej cislo: ") Zadej cislo: 10 >>> x '10' >>> x = input("zadej vyraz: ") Zadej vyraz: x+10+(3*27) >>> x 'x+10+(3*27)' >>>

Simultánní přiřazení <variable_1>,...,<variable_n> = <expr_1>,...,<expr_n> Význam: Python vyhodnotí výrazy na pravé straně, poté výsledky přiřadí do proměnných na levé straně. Hodí se např. k prohození proměnných. >>> x = 10 >>> y = 20 >>> x, y = y, x >>> print(x, y) 20 10

Základní stavební bloky programu: Cykly for <variable> in <sequence>: <body> Význam: <sequence> je posloupnost hodnot python postupně prochází tuto posloupnost v každém kroku a) přiřadí aktuální hodnotu do proměnné <variable> b) provede příkazy <body>

Posloupnosti <sequence> je často prostě seznamem hodnot o seznamech si více řekneme později, prozatím stačí vědět dva jednoduché způsoby, jak je vytvářet: >>> seznama=range(2) >>> for i in seznama: print(i) 0 1 >>> seznamb = ["Hynku", "Vileme", "Jarmilo"] >>> for clovek in seznamb: print("ahoj", clovek, "!") Ahoj Hynku! Ahoj Vileme! Ahoj Jarmilo!

Flowchart diagramy For cyklus Zbývají nějaké členy v posloupnosti? NE ANO <var> = další člen <body>

Zhodnocení investice: Rozbor problému Chceme napsat program, který spočte, jakou hodnotu bude v budoucnu mít investice uložená do banky. Závisí to na vloženém kapitálu a na úrocích. A na tom, jak často se úroky přičítají. A na tom, jak dlouho jsou uložené. (A na tom, jestli banka nezkrachuje.) Dohodněme se, že uživatel místo zadání úrokové sazby a četnosti přičítání úroku zadá přepočet na roční úrokovou sazbu, t.j. o kolik procent vzroste uložený kapitál za jeden rok. Dále se dohodněme, že tuto sazbu zadá jako desetinné číslo mezi 0 a 1 (nebo i větší ;-)).

Bankovní úroky: Specifikace Program Investice Vstupy vložený kapitál (kap), počet let (leta), roční úroková sazba (r) Výstup hodnota investice po zadaných letech Vztah mezi vstupy/výstupem: Hodnota po jednom roce je daná vzorečkem kap (1 + r), který musíme aplikovat leta-krát.

Bankovní úroky: Návrh Vypiš informační text. Načti vložený kapitál do proměnné kap. Načti počet let, po které je uložen do proměnné let. Načti roční úrokovou míru do proměnné r. Zopakuj let-krát: kap = kap * (1 + r) Vypiš proměnnou kap. Poznámka. Cyklus je v našem algoritmu poněkud zbytečný, není těžké ho nahradit mocněním. Zde jsme použili cyklus jako další ilustraci cyklení a také proto, že zvolený algoritmus se lépe hodí k některým modifikacím (viz domácí úkol).

Bankovní úroky: Implementace # investice.py # Program, ktery spocte budouci hodnotu # bankovniho vkladu. # autor: Student Logiky def main(): print("tento program spote budouci") print("hodnotu bankovniho vkladu.") kap = float(input("zadejte vlozeny kapital:")) r = float(input("zadejte rocni urokovou sazbu:")) let = int(input("zadejte pocet let:")) for i in range(let): kap = kap * (1 + r) print("hodnota vkladu po", let, "letech:", kap)

Bankovní úroky: Debugování Přenecháno posluchači!