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)

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

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í (IZP)

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

Základy programování (IZP)

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

Základy programování (IZP)

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

Algoritmizace a programování

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Zápis programu v jazyce C#

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

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

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

Úvod do programování. Lekce 1

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

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

Základy programování (IZP)

Základy programování (IZP)

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

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

Programovací jazyk Pascal

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

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

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

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

Programovací jazyk C++ Hodina 1

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

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

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

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

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

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

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

Základy programování (IZP)

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

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

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

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

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

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

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

2 Datové typy v jazyce C

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

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

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

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á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í

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

Algoritmizace a programování

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

Základy algoritmizace a programování

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

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

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

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

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

Řešení sady 1. Úvod do programování 1 Tomáš Kühr

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

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

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

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

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

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Iterační výpočty Projekt č. 2

Algoritmizace a programování

VISUAL BASIC. Práce se soubory

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

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

Základy algoritmizace a programování

Úvod do programovacích jazyků (Java)

Funkční objekty v C++.

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

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

Sada 1 - Základy programování

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

Ukazatele, dynamická alokace

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

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

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

PB161 Programování v jazyce C++ Přednáška 9

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

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

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

Struktury a dynamická paměť

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

ALGORITMIZACE A PROGRAMOVÁNÍ

Jazyk PL/SQL Úvod, blok

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.

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

Programování v jazyce JavaScript

Datové typy strana 29

Výrazy, operace, příkazy

Transkript:

Základy programování (IZP) Třetí 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 Verze 20180930_19:00 3. 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í 3 2

Náplň cvičení Programování vzdáleně 2 Jak program dostat na server a tam s ním pracovat Překlad ze zdrojových souborů, první programy IZP cvičení 3 3

PROGRAMOVÁNÍ VZDÁLENĚ IZP cvičení 3 4

PŘEKLAD, PRVNÍ PROGRAMY IZP cvičení 3 5

Překlad zdrojového kódu Jednoduchý diagram [1] [1] C program compilation, https://people.sc.fsu.edu/~jburkardt/classes/isc_2012/c_program_compilation.pdf IZP cvičení 3 6

Základní informace Ř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í 3 7

Komentáře Programy by vždy (u projektů je to povinné) měly začínat hlavičkou, např.: /** * IZP Prvni projekt * Autor: Jan Novak, xnovak00@stud.fit.. * Datum: 02.10.2017 * Poznamka: program nefunguje vubec */ IZP cvičení 3 8

Komentáře Funkce (např. main) by měly být komentovány tak, aby bylo možno snadno vygenerovat dokumentaci k programu Stručný příklad: /** (nebo *!) * @param argc Number of aruguments * @param argv Individual arguments * @return Program exit code */ int main(int argc, char* argv[]) { } * nepovinné IZP cvičení 3 9

Komentáře Každá proměnná a složitější konstrukce v těle funkce by měla být komentována. Napomáhá to přehlednosti kódu Stručný příklad: int a = 10; // first counter int b = a; // second counter // comparison between two counters // if a == b, increments a, otherwise.. if (a == b) { } Tvar komentářů lze přizpůsobit pro generování dokumentace IZP cvičení 3 10

Číselné proměnné a konstanty Základní pojmy Proměnná IZP cvičení 3 11

Číselné proměnné a konstanty Základní pojmy Proměnná Pojmenované místo v paměti, ve kterém uchováváme data. Má určitý datový typ a její hodnota se může za běhu programu měnit. Příklad: int a=10; IZP cvičení 3 12

Proměnné a konstanty Základní pojmy Proměnná Pojmenované místo v paměti, ve kterém uchováváme data. Má určitý datový typ a její hodnota se může za běhu programu měnit. Příklad: int a=10; Konstanta IZP cvičení 3 13

Proměnné a konstanty Základní pojmy Proměnná Pojmenované místo v paměti, ve kterém uchováváme data. Má určitý datový typ a její hodnota se může za běhu programu měnit. Příklad: int a=10; Konstanta Pojmenované místo v paměti, ve kterém uchováváme data. Má určitý datový typ, její hodnota se nemůže za běhu programu měnit. Příklad: const int b=10; IZP cvičení 3 14

Proměnné Pojmenování (identifikátor) To, jak je proměnná pojmenovaná, závisí pouze na programátorovi ALE proměnné pojmenované test12345, mojenejuzasnejsipromenna apod. asi nebudou úplně nejvhodnější Indexy: i, j, k, l, Řetězce: str, s, Znaky: c, ch, Konstanty: KONSTANTA (velká písmena) Datové typy: TArray, ColorSpace, (později) IZP cvičení 3 15

Proměnné Nedoporučuje se, aby název proměnné začínal podtržítkem - mnoho takových názvů je definováno překladačem a mají proto zvláštní význam. int _promenna Názvy proměnných a funkcí, které jsou delší, než jedno slovo můžeme zapisovat velmi_dlouhy_nazev_id velmidlouhynazevid (angl. Camel-Caps, Camel-Case) Vyberte si jeden styl zapisování a držte se ho Je vhodné (nikoliv nutné) pojmenovávat v angličtině IZP cvičení 3 16

Proměnné Deklarace Deklarace proměnné vytváří novou proměnnou, kterou je možno použít dál v programu int i; // nepřiřazena žádná hodnota IZP cvičení 3 17

Proměnné Deklarace Deklarace proměnné vytváří novou proměnnou, kterou je možno použít dál v programu int i; // nepřiřazena žádná hodnota Inicializace Přiřazení počáteční hodnoty deklarované proměnné int j = 10; // inicializováno na 10 a = 60; // NELZE, proměnná není // deklarována IZP cvičení 3 18

Proměnné Přiřazení (operátor =) Nastavení hodnoty proměnné int j = 10; // inicializováno na 10 j = 60; // nová hodnota j je 60 Porovnání (operátor ==) Využíváme v podmínkách if(i == 0) { } Pozor: neplést s přiřazovacím operátorem! IZP cvičení 3 19

Proměnné Datový typ IZP cvičení 3 20

Proměnné Datový typ Jaká data mohou být na pojmenovaném místě uložena Jaké operace mohou být s daty prováděny Např. int, double, float, char, bool, Pro určení velikosti datového typu můžeme s výhodou použít operátor sizeof() IZP cvičení 3 21

Výraz, příkaz Příkaz Definuje činnost, kterou program vykoná (např. výpis textu na obrazovku) Výraz Vrací nějaký výsledek IZP cvičení 3 22

Operátory Aritmetické: unární, binární Relační: ==,!=, >, <, >=, <= Logické: && (AND), (OR) IZP cvičení 2 23

Operátory Aritmetické: unární, binární Relační: ==,!=, >, <, >=, <= Logické: && (AND), (OR) A B AND OR 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 1 IZP cvičení 2 24

Ukazatel (podrobněji později ) Ukazatele proměnné uchovávají adresu, která ukazuje do paměti počítače Vážou se k určitému datovému typu Definice proměnné typu ukazatel: bazovy_typ *nazev_promenne; int *int_ptr; // ukazatel na int IZP cvičení 3 25

Řetězcové literály (konstanty) Řetězec bude vysvětlen podrobněji na příštích cvičeních a na přednášce. Zatím: Řetězec se skládá ze znaků (datový typ char) Řetězec je ukončen speciálním znakem (\0), z toho vyplývá, že s tím jako programátoři musíme počítat a přidělit řetězci dostatek paměti Řetězec zatím neumíme měnit, je pro nás konstantní char retezec[9] = ABCDEFGH ; Otázka: Řetězec hello se skládá z pěti znaků. Pro kolik znaků musíme přidělit řetězci paměť? Jaké znaky to budou? IZP cvičení 2 26

Řetězce převody Často je potřeba zadaný řetězec převést na číslo Funkce atoi (řetězec -> celé číslo) atof (řetězec -> desetinné číslo) #include <stdlib.h> // atoi,atof int celecislo = atoi("12"); float desetinnecislo = atof("3.14"); POZOR Řetězec 12abcf není číslo, výsledek funkce ato(i/f) bude 12 Řešení: zkontrolovat, zda se řetězec skládá pouze z číslic, funkce strtod, strtof (později) IZP cvičení 3 27

PŘÍKLADY IZP cvičení 3 28

Řetězcové literály (konstanty) Napište program, který Deklaruje a inicializujte dva řetězcové literály datový typ char*, můžete je inicializovat na cokoli Vypište jejich obsah (%s) Deklarujte a definujte proměnnou typu int na 1 Vypište první literál společně s int proměnnou Výpis může vypadat např.: 1. retezec: obsah retezce Inkrementujte tuto proměnnou (zvyšte její hodnotu o 1) Vypište druhý literál společně s int proměnnou IZP cvičení 3 29

Argumenty programu Jednotlivé argumenty budeme oddělovat mezerou Argumenty se dají získat pomocí následující konstrukce: int main(int argc, char* argv[]) { } // argc počet argumentů // argv jednotlivé argumenty, argv[0] // (název souboru s programem) Pro argv[0]./hello argv[1] sum 10 argv[2] 20 argv[3] argc=4 "hello" "-sum" "10" "20" IZP cvičení 3 30

Spouštění programu s parametry Code::Blocks Project Set program s arguments OK Spustíme program Linux./program arg1 arg2 arg3 Jednotlivé argumenty jsou od sebe odděleny mezerou IZP cvičení 3 31

Výpis argumentů programu Napište program, který bezpečně vypíše všechny argumenty, se kterými byl program spuštěn Nápověda: Použijte cyklus (while) Cyklus while: nezpomeňte inkrementovat řídící proměnnou v těle cyklu Funkce printf() nutné #include <stdio.h> printf("text"); int i = 10; printf("cislo: %d", i); char* retezec = "Ahoj"; printf("retezec: %s", retezec); IZP cvičení 3 32

Bonus: cykly a převody mezi nimi for(inicializace; test; inkrementace) { } inicializace; while(test) { inkrementace; } IZP cvičení 3 33

Základní práce se soubory Všechny vstupy a výstupy v C jsou soubory stdin, stdout, stderr Datový typ, který reprezentuje soubor: FILE* Otevření souboru se provádí pomocí funkce fopen Příklad použití: FILE* soubor = fopen("test.txt", "r"); otevíráme soubor test.txt pro čtení - r, zápis w Před zahájením práce je třeba ověřit, že se podařilo soubor otevřít: if (soubor!= NULL) {//OK} Po ukončení práce je potřeba soubor zavřít pomocí funkce fclose fclose(soubor); IZP cvičení 3 34

Základní práce se soubory FILE* soubor = fopen("test.txt", "r"); if (soubor!= NULL) { // kontrola... práce se souborem...} fclose(soubor); // jsme hotovi Do souboru můžeme zapisovat podobně jako do terminálu (oba soubory) pomocí funkce fprintf fprintf(soubor,"abc %d\n",1); Zapisujeme do otevřeného souboru soubor řetězec ABC 1 a vkládáme nový řádek Názvy funkcí, které pracují se soubory začínají na f fprintf, fscanf,... IZP cvičení 3 35

Základní práce se soubory příklad Vyzkoušejte si čtení a zápis do souborů Čtení: Pomocí funkce fscanf přečtěte první slovo v souboru Slovo může mít max. 99 znaků Vypište načtené slovo Zápis Do jiného souboru zapište libovolný řetězec pomocí funkce fprintf FILE* soubor = fopen("test.txt", "r"); // w if (soubor!= NULL) { // kontrola... práce se souborem...} fclose(soubor); // jsme hotovi IZP cvičení 3 36

Základní práce se soubory příklady Napište program, který spočítá slova v textovém souboru Název souboru bude zadán jako první argument programu Funkce scanf vrací počet úspěšně načtených formátovacích řetězců, v našem případě chceme načítat, dokud se podařilo ze souboru načíst slovo Napište program, který spočítá počet výskytů zadaného znaku v textovém souboru Název souboru bude zadán jako první argument programu Znak bude zadán ze standardního vstupu po spuštění programu IZP cvičení 3 37

Evidence pacientů - kartotéka Vytvořte program, který načítá osobní údaje pacientů Tyto údaje ukládá do souborů, pojmenování ve formátu PACRR, kde RR je rodné číslo pacienta Pro vytvoření názvu souboru použijte funkci sprintf sprintf(filename, "PAC%10s.txt", rodnecislo); filename řetězec, který bude obsahovat výsledek Jednotlivé textové vstupy vždy ukončete znakem. Příklad (z wiki ) IZP cvičení 3 38

Kalkulačka Vytvořte program se jménem c, který bude umět základní matematické výpočty (sčítání, odčítání, násobení, dělení, druhá odmocnina,...). Výpočet se zadává na příkazové řádce. Každý operand nebo operátor bude samostatný argument programu (argumenty jsou oddělené mezerou). Program vypíše výsledek na standardní výstup. První varianta programu (na cvičení) bude umět zpracovávat pouze jeden operátor, druhou variantu můžete vyzkoušet doma viz wiki. Pro správné sestavení programu je nutné přidat přepínač překladači -lm. Tedy: gcc -std=c99 - Wall -Wextra -Werror -lm c.c -o c. IZP cvičení 3 39

Kalkulačka Jako rozšíření můžete vyzkoušet načítat připravené výpočty ze souboru a hromadně vracet výsledky IZP cvičení 3 40

Kalkulačka Zkrácený příklad z wiki $./c 1 + 2 3 $./c 3 / 2 1.5 $./c 40 - -2 42 $./c sqrt 25 5 Na wiki je i ukázkový Makefile IZP cvičení 3 41

Kalkulačka Zpracování argumentů programu Jak vybrat argument? Ve kterém argumentu bude uložena operace? Jaký datový typ lze použít pro určení operace? Jak převádět mezi řetězcem a celým číslem? Implementace jednotlivých operací Jak určíme, která operace byla uživatelem vybrána? Doporučení: Datový typ float Funkce printf IZP cvičení 3 42

Děkuji za pozornost

Poznámka: porovnání dvou řetězců Lze řetězce porovnávat takto? char* str1 = "Ahoj"; char* str2 = "Ahoj"; if (str1 == str2) { ///????? } Co porovnáváme? IZP cvičení 3 44

Poznámka: porovnání dvou řetězců Lze řetězce porovnávat takto? char* str1 = "Ahoj"; char* str2 = "Ahoj"; if (str1 == str2) { ///????? } Co porovnáváme? Řešení: funkce strcmp IZP cvičení 3 45

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í 3 46

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í 3 47

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í 3 48

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í 3 49

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í 3 50

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í 3 51

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í 3 52

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í 3 53

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í 3 54

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í 3 55