Počítačové modelování

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

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

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

Základy jazyka C. 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

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

Úvod do programování

MPASM a IDE pro vývoj aplikací MCU (Microchip)

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

Úvod do programování. Lekce 1

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

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

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

Základy algoritmizace a programování

Programování v C++ 1, 1. cvičení

11. Přehled prog. jazyků

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

ALGORITMIZACE A PROGRAMOVÁNÍ

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

Program a životní cyklus programu

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

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Základy jazyka C. Základy programování 1 Tomáš Kühr

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

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

Algoritmy I. Cvičení č.1 ALGI 2015/16

Úvod do jazyka C. Zdroje: Herout: Učebnice jazyka C, Kopp, České Budějovice, 2001 Schildt H: Nauč se sám C, Softpress, Praha, 2001

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

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

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

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

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

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

Úvod. Programovací paradigmata

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

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

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

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

Algoritmy a algoritmizace

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Algoritmizace. Cíle předmětu

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

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

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

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

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

Základy algoritmizace a programování

Vstupní požadavky, doporučení a metodické pokyny

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

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

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

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Základy programování (IZP)

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

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

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

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

Základy programování (IZP)

Objektově orientované programování

Základy C++ doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

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

Základy programování (IZP)

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

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

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

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

IB111 Programování a algoritmizace. Programovací jazyky

Algoritmizace. 1. Úvod. Algoritmus

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

VISUAL BASIC. Práce se soubory

Matematika v programovacích

Programovací jazyk C++ Hodina 1

Překladač a jeho struktura

Zdroje Úvod Zápis a kompilace programu Příklad programu v jazyce C Příklad programu s výstupem. Úvod do jazyka C. Jan Faigl

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

Struktura programu v době běhu

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

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í

První kapitola úvod do problematiky

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

Opakování programování

Algoritmizace a programování

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

Úvod do jazyka C. Úvod do jazyka C. Knihy 2/2. Knihy 1/2. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze.

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

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

Maturitní témata Školní rok: 2015/2016

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

ČÁST 1. Základy 32bitového programování ve Windows

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Jazyk symbolických adres

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

Stanislav Vítek. Katedra radioelektroniky Fakulta elektrotechnická

Programovací jazyky Přehled a vývoj

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

Proměnná a její uložení v paměti

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

Programovací jazyk Pascal

Transkript:

Počítačové modelování Zimní semestr: Počítačové modelování I 1/2 z Letní semestr: Počítačové modelování II 2/2 z, zk Jan Hnilica mail: hnilica@ih.cas.cz 1

Plán na zimní semestr Základní prostředky jazyka C - jednoduché typy (čísla, znaky), konstanty - práce s proměnnou, aritmetické výrazy - vstup a výstup na terminál - podmínky, logické výrazy - cykly, příkaz switch - ukazatele - pole, řetězce, struktury - funkce, rekurze Algoritmy a programovací techniky - složitost (časová, paměťová, asymptotická, notace O) - jednoduché třídící algoritmy - datové struktury zásobník a fronta - lineární seznamy - rekurze - prohledávání do hloubky - rozděl a panuj - prohledávání do šířky - binární vyhledávací strom - halda, haldové třídění - přihrádkové třídění 2

Materiály ke studiu prezentace z přednášek jazyk C Pavel Herout - Učebnice jazyka C (1. díl) 2016 (6. vydání), nakladatelství Kopp algoritmy Pavel Töpfer: Algoritmy a programovací techniky 2010 (2. vydání), nakladatelství Prometheus 2010 Piotr Wróblewski: Algoritmy 2015, nakladatelství Computer Press 3

Podmínky zápočtu: aktivní účast na cvičeních domácí úkoly = odevzdávání programů zápočtový test = napsání a odladění programu 4

Proč vlastně vytváříme programy? => proto, aby plnily úkoly a řešily problémy (plánovaly trasu, počítaly zatížení nosníku...) Pro vytvoření programu je nutné: Na počátku je vždy problém (zadání) 1. pochopit problém - důkladné pochopení zadání je základním předpokladem - je třeba získat přesné odpovědi na otázky jaké jsou vstupy? co má být výsledkem? jaká jsou pravidla a omezení? 2. zvolit postup (algoritmus) - postupů se vždy nabízí víc, je potřeba se pro jeden rozhodnout (a umět to zdůvodnit...) - nejlepší postup většinou nebývá ten, který nás napadne jako první 3. provést (napsat program) 4. zkontrolovat výsledky - nejlépe mnohokrát, s různými vstupy Rada: kreslete si obrázky! - tužka a papír jsou základními pomůckami programátora - obvykle platí, že čím více času strávíte s tužkou a papírem, tím rychleji program vytvoříte 5

Algoritmus = jednoznačný postup, který vede k řešení dané úlohy problém: najít největší ze tří různých čísel a, b, c - při zadání a = 7, b = 1, c = 9 můžeme odpovědět c, což je sice správná odpověď, ale pro jiné zadání už platit nemusí (např. 4, 14, 2) start obecný postup, který vrací správný výsledek při jakémkoliv zadání je znázorněn pomocí diagramu: ne a > b ano b > c ne ne a > c ano ano největší je b největší je c největší je a hotovo 6

Algoritmus problém: rozhodnout, zda je zadané číslo N prvočíslem prvočíslo je přirozené číslo větší než 1, které je beze zbytku dělitené pouze jedničkou a sebou samým. - problém budeme řešit tak, že zkusíme najít dělitele čísla N (tj. ukázat, že N není prvočíslo) - pokud dělitele nenajdeme, prohlásíme N za prvočíslo Možné postupy: 1) vyzkoušíme všechny dělitele od 2 do N - 1 2) budeme hledat pouze v intervalu od 2 do N/2 (proč?) - pokud tam dělitel není, prohlásíme N za prvočíslo 3) budeme hledat pouze v intervalu od 2 do N (proč?) - pokud tam dělitel není, prohlásíme N za prvočíslo 4) budeme hledat pouze v intervalu od 2 do N s vylepšením: - po vyzkoušení dvojky už budeme zkoušet jen liché dělitele 7

úroveň abstrakce Proč vlastně máme programovací jazyky? Počítačový program = posloupnost instrukcí vyšší programovací jazyky - příkazy srozumitelné lidské řeči (angličtině) - jeden příkaz obvykle mnoho strojových instrukcí - zhuštěný kód, (relativně) srozumitelný člověku JSA (jazyk symbolických adres, assembler ) - mnemotechnické zkratky instrukcí strojového kódu - kód nepřenositelný mezi procesory s různou architekturou c = a + b; WRITE( ahoj ); (nepřesné označení, assembler je překladač z JSA do strojového kódu) ADD... MOV... SUB... strojový kód (machine code) - instrukce přímo vykonatelné procesorem - zápis pomocí číselných kódů instrukcí - kód člověku zcela nesrozumitelný - obtížné ho psát, hledat chyby 00010010 11111100 01110101 1000001 8

Převod příkazů jazyka do strojového kódu: 1) kompilace (Pascal, C, C++ ) - kompletní převod do strojového kódu (kompilace) PŘED spuštěním programu - vyžaduje překladač (kompilátor, compiler) - výsledkem kompilace je spustitelný soubor (.out,.exe) - po jeho spuštění se rovnou vykonávají strojové instrukce Na počítači uživatele kompilátor být nemusí! 2) interpretace (Python, Perl ) - napsaný program se rovnou spustí - jednotlivé instrukce jsou ZA BĚHU PROGRAMU překládány do strojového kódu - vyžadují interpreter - program vykonávající překlad za běhu Interpreter musí být na počítači uživatele! pozn. kompilované programy jsou rychlejší - odpadá překlad každého kroku do strojového kódu 9

Programovací jazyk = prostředek komunikace mezi programátorem a počítačem (soubor pravidel, podle kterých se zapisují instrukce pro počítač) Syntaxe jazyka - pravidla zápisu příkazů ( gramatika ) Sémantika jazyka - význam příkazů syntaktická chyba = přestupek proti pravidlům zápisu (překlep ) - počítač vyžaduje zcela přesný zápis - odhalí ji kompilátor (=>program se vůbec nezkompiluje) sémantická chyba = chyba v logice programu - odhalí ji až chybné fungování programu (=> program se zkompiluje a jde spustit, ale produkuje chybné výsledky, padá ) 10

Programovací jazyk C - autor: Dennis Ritchie (70. léta) - univerzální programovací jazyk - nízkoúrovňový - pracuje pouze se standardními typy (znaky, čísla) - dovoluje práci s pamětí na nízké úrovni - neváže se na žádný konkrétní počítač, operační systém - kompilovaný - vývoj (tzv. normy jazyka) - K&R (1978) kniha Kernighan, Ritchie: The C Programming Language - ANSI C (1990) ANSI = American National Standards Institute - C 99 (2000) 11

Vytvoření programu v C (kam program zapsat a co se děje při zavolání kompilátoru) textový editor soubor.c preprocesor - do editoru zapisujeme příkazy programovacího jazyka - výsledkem je textový soubor - tzv. ZDROJOVÝ KÓD - přípona.c - soubor ve formě prostého textu (bez formátování) - např. Notepad, PSPad (ne Word) - součást kompilátoru - upravuje zdrojový soubor před kompilací (vložení hlavičkových souborů, rozvoj maker ) -> později - výsledek = upravený textový soubor (předán kompilátoru) kompilátor soubor.o linker soubor.exe - překládá zdrojový kód do tzv. relativního kódu (téměř hotový program) - výsledek = objektový soubor (přípona.o,.obj) - v programech jazyka C se většinou (vždy) volají podprogramy (funkce) ze standardních knihoven, někdy je program složen z více souborů - tyto dílčí části je potřeba sestavit do konečného celku - sestavovací program - sestaví moduly a knihovny do jednoho celku - výsledem je spustitelný soubor.exe PRAKTICKY: stačí napsat zdrojový kód a zavolat kompilátor 12

Vývojové prostředí (IDE - Integrated Development Environment): - komplexní nástroj pro vytváření software - obsahuje textový editor zvýrazňuje syntaxi jazyka (a umí další užitečné věci ) kompilátor lze ho volat stisknutím klávesy přímo z IDE, bez nutnosti opouštět editor debugger nástroj pro hledání logických chyb, tzv. odvšivovač obvykle další užitečné programy (např. správa verzí kódu) Code::Blocks http://www.codeblocks.org/ - open source IDE (lze zdarma stáhnout) pro Windows stahujte verzi: codeblocks-16.01mingw-setup.exe!!! (automatická instalace Code::Blocks spolu s kompilátorem MinGW) 13

Vývoj programu start zápis a editace zdrojového kódu kompilace ano chyby při kompilaci? ne spuštění, testování (opakovaně, různá data) ano běhové chyby? podezřelé výsledky? ne hotovo 14

Anatomie programu v C #include <stdio.h> int main() { printf( Kuk!!! ); return 0; } #include <stdio.h> - příkaz pro preprocesor, aby na toto místo vložil obsah souboru stdio.h - stdio.h je soubor standardní knihovny, který obsahuje definice příkazu printf - závorky < > kompilátor ví kde soubor hledat - příkazy pro preprocesor vždy začínají # - příkaz #include (zahrnout, vložit) se používá ve všech programech C int main() funkce budeme probírat později - každý program v C začíná funkcí nazvanou main - funkce main je po spuštění programu volána operačním systémem - do kulatých závorek () za názvem funkce se píší parametry funkce, main sice žádné nemá, ale i tak je nutné závorky () napsat - složené závorky { } ohraničují funkci main - int znamená, že funkce main vrací celočíselnou hodnotu - vrácení hodnoty se vykoná příkazem return 0; (je tedy vrácena 0) - příkazem return 0; končí funkce main => končí celý program všechny příkazy jsou ukončeny středníkem printf( Kuk!!! ); - zajišťuje výpis na monitor - v tomto případě vypíše text Kuk!!! informace pro OS o korektním ukončení programu 15

Hlášení kompilátoru Chybové hlášení - kompilátor sděluje, že zdrojový kód nelze přeložit - nejčastější příčinou je syntaktická chyba (ale může být i jiná) - hlášení obvykle obsahuje: název zdrojového souboru číslo řádky zdrojového kódu pokus o vysvětlení problému pozn. informace o čísle řádku a vysvětlení problému mohou být matoucí - příčina může být o několik řádek jinde než kde ji vidí kompilátor! prvni_program.c line 6 error:'return' with no value, in function returning non-void ( hlášení kompilátoru, pokud v předchozím příkladu vynecháme nulu za slovem return ) Varovnání - kompilátor sděluje, že zdrojový kód obsahuje něco podezřelého - program sice jde přeložit, ale varování často poukazuje na místo, které později způsobí pád programu či zdánlivě nesmyslné výsledky k varování přistupujeme stejně jako k chybám spokojeni jsme jen když kompilátor hlásí Build finished: 0 error(s), 0 warning(s) (což znamená, že v programu nejsou syntaktické chyby) 16

Styl psaní kódu I - prázdné znaky mezera, tabulátor, prázdný řádek - jsou kompilátorem ignorovány - program lze napsat takto: #include <stdio.h> int main() { printf("kuk!!!"); return 0; } nebo i takto #include <stdio.h> int main ( ){ printf("kuk!!!") ; return 0 ;} - pro kompilátor jsou oba zápisy identické, nicméně druhý zápis je z programátorského hlediska zcela nesmyslný - prázdné znaky mají sloužit k větší přehlednosti zdrojového kódu - každý programátor si vytváří vlastní styl psaní kódu, existují ale obecná doporučení, která se vyplatí dodržovat (budete na ně průběžně upozorňováni) pozn.: mezery nesmí být uvnitř slov, která mají pro kompilátor speciální význam (return, printf, názvy proměnných...), zápis re turn 0; způsobí chybu v době kompilace 17

Styl psaní kódu II - komentáře Komentáře - části zdrojového kódu, které kompilátor ignoruje (jsou odstraněny preprocesorem) - do kódu se píší proto aby se v něm vyznal někdo cizí, když ho bude číst vyznal sám programátor, když ho bude číst s časovým odstupem - dobře napsané komentáře výrazně zpřehledňují kód - styl a hustota komentářů jsou věcí vkusu každého programátora Jednořádkový komentář - začíná dvěma lomítky // - kompilátor ignoruje vše od lomítek až do konce řádku // toto je jednořádkový komentář psaní komentářů je rozhodně doporučeno! Víceřádkový komentář - začíná znaky /* a končí znaky */, kompilátor ignoruje celý obsah komentáře /* toto je víceřádkový komentář */ pozn. komentáře slouží i k dočasnému zneviditelnění ( vykomentování ) aktuálně nepotřebných úseků kódu při psaní a ladění programu 18