Základy programování (IZP)

Podobné dokumenty
Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

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:

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

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

- jak udělat konstantu long int: L long velka = 78L;

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

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

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

Úvod do programovacích jazyků (Java)

Standardní algoritmy vyhledávací.

10 Práce s řetězci - pokračování

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

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

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

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

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

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

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

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

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

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

Pointery II. Jan Hnilica Počítačové modelování 17

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

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

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

Algoritmizace a programování

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Úvod do programování. Lekce 1

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

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

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

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

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

Práce se soubory. Základy programování 2 Tomáš Kühr

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

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

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Programovací jazyk Pascal

Základy C++ I. Jan Hnilica Počítačové modelování 18

2 Datové typy v jazyce C

Funkční objekty v C++.

NPRG030 Programování I, 2010/11

Zápis programu v jazyce C#

Algoritmizace a programování

ALGORITMIZACE A PROGRAMOVÁNÍ

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í

MAXScript výukový kurz

Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru

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

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

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

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

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

Sada 1 - PHP. 03. Proměnné, konstanty

Např.: // v hlavičkovém souboru nebo na začátku // programu (pod include): typedef struct { char jmeno[20]; char prijmeni[20]; int rok_nar; } CLOVEK;

Př. další použití pointerů

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

Základy programování (IZP)

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

PROGRAMOVÁNÍ V C++ CVIČENÍ

Algoritmizace a programování

Prostory jmen. při vkládání několika hlavičkových souborů může vzniknout kolize. logika.h const int x=5; typedef struct {...

Úvod do programování. Lekce 5

8 Třídy, objekty, metody, předávání argumentů metod

VISUAL BASIC. Práce se soubory

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

Řídicí struktury. alg3 1

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

Programování v jazyce C pro chemiky (C2160) 6. Funkce, struktury

Vstup a výstup datové proudy v C

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Algoritmizace a programování

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Programovací jazyk C++ Hodina 1

Základy programování (IZP)

Soubory. Hung Hoang Dieu. Department of Mathematics Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague 1 / 7

Objektově orientované programování

Dílčí příklady použití jazykových konstrukcí v projektu. Jazyk C Příklady. Pravidla překladu v gmake. Zadání

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

Transkript:

Základy programování (IZP) Čtvrté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 4. týden

Důležité informace Můj profil: http://www.fit.vutbr.cz/~iveigend/ Kancelář: A221 Konzultační hodiny: po domluvě emailem Karta Výuka odkaz na osobní stránky: IZP 2018/2019 Cvičení Materiály Komunikace: email prosím používejte předmět: IZP - <předmět emailu> IZP cvičení 4 2

Náplň cvičení Datové typy, úvod do řetězců, funkcí, času Řešení všech máte na wiki stránkách ale když už jsme tady, vyzkoušíme je aspoň trochu samostatně (jako minule) Pokud nebudete vědět, jak se zapisuje nějaká programová konstrukce (proměnná, podmínka, atd.), zapište si do zdrojového souboru komentář // tady se budou vypisovat dva retezce /* komentar na vice radku */ IZP cvičení 4 3

Proměnná Několik příkladů int i; char* s = "Hello"; char c1 = '\0', c2; char *s2, c; i = 2; c2 = s[i]; // jaký znak získáme? IZP cvičení 4 4

FUNKCE IZP cvičení 4 5

Funkce Funkce umožňují dekomponovat program do menších celků, které vykonávají nějakou funkci Například porovnání dvou řetězců (funkce strcmp), načtení řetězce ze std. vstupu (funkce scanf) a podobně Nějaká demopozice (tj. rozdělení do funkcí) bude nutnou součástí prvního projektu IZP cvičení 4 6

Funkce Základní program může vypadat například takto: #include<stdio.h> int main() { return 0; } Obsahuje kód výše nějaké funkce??? IZP cvičení 4 7

Funkce Jak do programu přidáme funkce, které jsou součástí standardu? #include<nazev_hlavickoveho_souboru> Později se naučíme, jak vytvářet a přidávat vlastní hlavičkové soubory IZP cvičení 4 8

Funkce Obecně může deklarace funkce vypadat např. takto: int max(int a, int b); // hlavička int - datový typ, který funkce vrací pokud nic nevrací, použijeme typ void max název funkce (musí být unikátní v rámci všech použitých hlavičkových souborů) int a, int b parametry, které funkce očekává všimněte si datových typů proměnné a,b jsou deklarovány a lze je použít v těle funkce IZP cvičení 4 9

Funkce definice: hlavička + tělo Co chceme získat? Název funkce Co funkce potřebuje pro výpočet? int max(int a, int b) { } // Co musí funkce provést, aby dosáhla výsledku IZP cvičení 4 10

Funkce použití v programu #include<stdio.h> int max(int a, int b); // hlavicka int main() { } int m = max(5,3); return 0; // lze pod main diky hlavicce int max(int a, int b) { // implementace return promenna_typu_int; // vraci typ integer (výsledek) } IZP cvičení 4 11

Funkce jednoduchý příklad Napište funkci s prototypem float sum(float a, float b); Funkce bude vracet součet dvou čísel typu float Výsledek funkce vypište ve funkci main V programu se funkce volá např.: //soucet cislic 5 a 4, vysledek v res float res = sum(5,4); Specifikátor pro výpis %f IZP cvičení 4 12

Řetězce Řetězcový literál (neboli konstanta) Inicializujeme char* s = "Hello"; Nelze měnit za běhu programu Nekonstantní řetězec Inicializujeme (na případně prázdný řetězec) char str[6] = "Hello"; // proc 6??? nebo na řetězec, který již obsahuje slovo char str[] = "Hello"; // automaticky Lze měnit za běhu programu IZP cvičení 4 13

Datový typ pole Skutečná adresa 1634 1635 1636 1637 1638 1639 Index 0 1 2 3 4 5 Hodnota 10 20 30 40 50 60 IZP cvičení 4 14

Datový typ pole Skutečná adresa 1634 1635 1636 1637 1638 1639 Index 0 1 2 3 4 5 Hodnota 10 20 30 40 50 60 Pole: prvky stejného typu, spojité místo v paměti IZP cvičení 4 15

Datový typ pole Skutečná adresa 1634 1635 1636 1637 1638 1639 Index 0 1 2 3 4 5 Hodnota 10 20 30 40 50 60 Pole: prvky stejného typu, spojité místo v paměti Deklarace staticky: int moje_pole[6]; IZP cvičení 4 16

Datový typ pole Skutečná adresa 1634 1635 1636 1637 1638 1639 Index 0 1 2 3 4 5 Hodnota 10 20 30 40 50 60 Pole: prvky stejného typu, spojité místo v paměti Deklarace staticky: int moje_pole[6]; Velikost pole: operátor sizeof() velikost v bajtech U polí vrací součet velikostí jeho položek IZP cvičení 4 17

Datový typ pole Skutečná adresa 1634 1635 1636 1637 1638 1639 Index 0 1 2 3 4 5 Hodnota 10 20 30 40 50 60 Pole: prvky stejného typu, spojité místo v paměti Deklarace staticky: int moje_pole[6]; Velikost pole: operátor sizeof() velikost v bajtech U polí vrací součet velikostí jeho položek Velikost moje_pole: int velikost = 6*sizeof(int); IZP cvičení 4 18

Datový typ pole Skutečná adresa 1634 1635 1636 1637 1638 1639 Index 0 1 2 3 4 5 Hodnota 10 20 30 40 50 60 Pole: prvky stejného typu, spojité místo v paměti Deklarace staticky: int moje_pole[6]; Velikost pole: operátor sizeof() velikost v bajtech U polí vrací součet velikostí jeho položek Velikost moje_pole: int velikost = 6*sizeof(int); Pozor: velikost datového typu záleží na procesoru sizeof(int) může být 2, 4 nebo 8 IZP cvičení 4 19

Datový typ pole řetězce Skutečná adresa 1634 1635 1636 1637 1638 1639 Index 0 1 2 3 4 5 Hodnota 'h' 'e' 'l' 'l' 'o' '\0' IZP cvičení 4 20

Datový typ pole řetězce Skutečná adresa 1634 1635 1636 1637 1638 1639 Index 0 1 2 3 4 5 Hodnota 'h' 'e' 'l' 'l' 'o' '\0' Řetězce: pole typu char zakončená nulovým znakem '\0' IZP cvičení 4 21

Datový typ pole řetězce Skutečná adresa 1634 1635 1636 1637 1638 1639 Index 0 1 2 3 4 5 Hodnota 'h' 'e' 'l' 'l' 'o' '\0' Řetězce: pole typu char zakončená nulovým znakem '\0' Pozor: char pole[5]; Není zde místo pro ukončovací nulu ('\0') Pozor: je nutné hlídat meze pole! IZP cvičení 4 22

Funkce - práce s řetězci Napište funkci strlen_m, která bude počítat délku řetězce a tuto délku vrací Hlavička int strlen_m(char* str); Implementace int strlen_m(char* str) { } return delka_retezce_str; Nápověda: řetězec končí znakem \0 IZP cvičení 4 23

Další funkce Dále můžete implementovat Funkci pro hledání prvního výskytu znaku ch v řetězci str Vrací index znaku nebo -1, pokud nebyl znak nalezen int my_strchr(char str[], char ch); Funkci pro hledání posledního výskytu znaku ch v řetězci str Vrací index znaku nebo -1, pokud nebyl znak nalezen int my_strrchr(char str[], char ch); IZP cvičení 4 24

HLEDÁNÍ ARGUMENTU IZP cvičení 4 25

Funkce pro práci s řetězci string.h Nutné hlavičkový soubor: #include <string.h> Lexikografické porovnání řetězců s1 a s2 int strcmp(char* s1, char* s2); Funkce vrací číslo (int) A další == 0 pokud jsou řetězce s1 a s2 stejné > 0 pokud je řetězec s1 lexikograficky větší než s2 < 0 pokud je řetězec s1 lexikograficky menší než s2 IZP cvičení 4 26

Funkce strcmp() a podmíněný příkaz Složený příkaz: if(podmínka){ } else{ } Pokud je podmínka pravdivá: provede se větev if Pokud není podmínka pravdivá: provede se větev else Jak tedy zjistíme, že jsou dva řetězce shodné? 1) Musíme zavolat funkci strcmp() 2) Musíme v podmínce ověřit, jak porovnání dopadlo 2 způsoby: Lepší: if(strcmp("ahoj","ahoj") == 0) { } int pom; pom = strcmp("ahoj","ahoj"); // lze také if(pom == 0) { } IZP cvičení 4 27

Hledání argumentu help Napište program, který zjistí, zda byl zadán argument -help Pokud ano, vypište libovolný text na obrazovku Zároveň vypište, na jakém indexu se argument -help nachází Zkuste hledání argumentu implementovat do funkce, která bude vracet index argumentu int findargh(int c, char* a[]); Nápověda int strcmp(char* s1, char* s2); Funkce vrací 0, pokud jsou řetězce shodné, pro kontrolu argumentů využijte cyklus IZP cvičení 4 28

ČAS IZP cvičení 4 29

Získání aktuálního času #include <stdio.h> #include <time.h> int main() { // globalni cas time_t now = time(null); // lokalni cas struct tm *datetime = localtime(&now); // pristup ke slozkam pomoci -> printf("year = %d\n", datetime->tm_year + 1900); return 0;} IZP cvičení 4 30

Pomocné funkce Napište funkci, která vrátí řetězcový literál odpovídající skloňování slova hodina char* hodiny2str(int hodin); Např. pokud hodin==1, funkce vrátí hodina apod. Napište funkci, která vrátí řetězcový literál odpovídající skloňování slova minuta char* minuta2str(int minut); Např. pokud minut==1, funkce vrátí minuta apod. Poznámka: lze i return "ahoj"; IZP cvičení 4 31

NAČÍTÁNÍ SLOV ZE STANDARDNÍHO VSTUPU (STDIN) IZP cvičení 4 32

Načítání slov ze stdin Načítání slov ze standardního vstupu (stdin) Možnosti: Po znacích: funkce getchar() Celý řádek: funkce scanf scanf() vrací: cislo = počet správně načtených formátovacích řetězců cislo <= 0 při chybě int cislo = scanf("%format", kam); IZP cvičení 4 33

Načítání slov ze stdin Načítání slov ze standardního vstupu (stdin) Možnosti: Po znacích: funkce getchar() Celý řádek: funkce scanf Napíšeme program, který načte slovo o maximální délce 10 znaků a vypíše ho Bude slova načítat, dokud nenarazí konec souboru (EOF = End Of File) Windows: CTRL-Z Linux: CTRL-D char slovo[?]; // co tu bude? int code = scanf("%10s", slovo); IZP cvičení 4 34

ZPRACOVÁNÍ ARGUMENTŮ PŘÍKAZOVÉ ŘÁDKY IZP cvičení 4 35

Zpracování argumentů příkazové řádky Následující příklad se může hodit v projektech Knihovna #include <stdbool.h> Poté můžete používat datový typ bool Pravdivostní hodnoty true/false Číselně: false == 0, true!= 0 (cokoli jiného než 0) bool pravdivapodminka = true; bool nepravdivapodminka = false; V podmínce if (pravdivapodminka) { } if (!nepravdivapodminka) { } IZP cvičení 4 36

Zpracování argumentů příkazové řádky A na závěr ještě operátory Aritmetické: unární, binární Logické: && (AND), (OR) Relační: =,!=,==, >, <, >=, <= A B AND OR 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 1 Výpis chybových hlášení standardní chybový výstup: fprintf(stderr, "Chyba!\n"); Toto je potřeba v projektech! A teď konečně příklad IZP cvičení 4 37

Zadání (za DÚ) Napište program, který bude kontrolovat zadané argumenty příkazové řádky Pokud nebyl zadán žádný argument, vypíše chybu na stderr Pokud byl zadán argument h (většinou nápověda), vypíše na standardní výstup řetězec Napoveda Pokud byl zadán argument o, vypíše na standardní výstup libovolný jiný řetězec Argumenty h a o nelze použít zároveň (v tom případě chyba, výpis na stderr) Program může přijímat pouze argumenty h a o, v opačném případě chyba Pokuste se oddělit zpracování argumentů od výpisů bool hflag = false; if (hflag) IZP cvičení 4 38

KALKULAČKA II IZP cvičení 4 39

Kalkulačka II Jistě si pamatujete na kalkulačku z minulého cvičení Dnes vyzkoušíme implementaci pomocí standardního vstupu Schopnosti aplikace si přizpůsobte sami Vstup načítejte pomocí funkce scanf s formátovacím řetězcem %s Načtená slova zpracovávejte pomocí funkce sscanf sscanf(nactene_slovo, "%lf", &cislo) Výsledky tiskněte na standardní výstup pomocí funkce printf se specifikátorem %g Snažte se, aby program neměl žádnou funkci delší než 25 řádků. Žádný řádek nesmí být delší než 80 znaků. IZP cvičení 4 40

Příště - první bodované cvičení Budu se ptát na jednoduché věci, které se budou týkat tématu cvičení nebo toho, co jsme tady už dělali Budete zase programovat samostatně, tak jako na tomto a předchozím cvičení Pokud vám dělaly problémy dnešní příklady, využijte tento týden k procvičení Příklady najdete např. na konci slidů z přednášek Hodnocení Rád bych všem dal ALESPOŇ 1b, ale budu chtít vidět aktivitu a to, že jste se na cvičení připravili Se samostatným příkladem případně pomůžu, ale většinu musíte zvládnout sami IZP cvičení 4 41

Děkuji za pozornost

Styl psaní zdrojových kódů Základní styly: llvm http://llvm.org/docs/codingstandards.html Mozilla Gnu https://developer.mozilla.org/en- US/docs/Mozilla/Developer_guide/Coding_Style https://www.gnu.org/prep/standards/standards.html IZP cvičení 4 43