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)

Základy programování (IZP)

Základy programování (IZP)

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

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

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

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

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

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

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

Základy programování (IZP)

Základy programování (IZP)

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

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

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

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

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

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

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

Dynamická vícerozměrná pole. Základy programování 2 Tomáš Kühr

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

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

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.

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

Úvod do programovacích jazyků (Java)

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

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

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

Algoritmizace a programování

Úvod do programování. Lekce 1

Práce s řetězci. IUJCE Přednáška č. 10. string.h. vrací: délku řetězce str (bez '\0')

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;

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

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

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

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

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

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

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

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

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

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

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

2 Datové typy v jazyce C

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

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í

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

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

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

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

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

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

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

Vstup a výstup datové proudy v C

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

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

Programování v jazyce C pro chemiky (C2160) 7. Ukazatele, Funkce pro práci s řetězci

Zápis programu v jazyce C#

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

Algoritmizace a programování

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

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

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

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

- tzv. standardní vstupní a výstupní proud (input / output stream)

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

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

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

1. Téma 03 - Rozhodování

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

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

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

Algoritmizace a programování

Výčtový typ strana 67

Pole, ukazatel, textový řetězec, vstup a výstup programu

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

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

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

Funkce, intuitivní chápání složitosti

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

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

Struktura programu v době běhu

ALGORITMIZACE A PROGRAMOVÁNÍ

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

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

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

Programovací jazyk C++ Hodina 1

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

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

PB071 Programování v jazyce C Jaro 2015

Transkript:

Základy programování (IZP) Páté 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 5. 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 Komunikace: email prosím používejte předmět: IZP - <předmět emailu> IZP cvičení 4 2

Náplň cvičení Seznámení se zadáním prvního projektu Jak by měl vypadat zdrojový kód? Ukázka Teorie opakování Příklady Načítání znaků ze standardního vstupu po znacích Datový typ pole Jednoduché příklady IZP cvičení 5 3

1. PROJEKT PRÁCE S TEXTEM IZP cvičení 5 4

1. projekt Práce s textem Základní informace 30. 10. Obhajoba projektu Měli byste mít hotovou implementaci 4.11. Odevzdání projektu do WISu Jméno souboru: proj1.c Hodnocení: 5b (2,5b obhajoba, 2,5b implementace) Zadání viz Wiki stránky POZOR, v projektu nelze použít Funkce malloc a free (dynam. alokace paměti) Práce s dočasnými soubory funkce fopen, fclose, atd. Funkci atoi IZP cvičení 5 5

Převod řetězce na číslo Několik funkcí (a hlavičkových souborů), které se mohou hodit Knihovna #include <stdlib.h> Funkce int atoi(const char* str); Převádí řetězce na čísla, vrací získané číslo POZOR: je nutné funkci předat opravdu číslo, ne nesmysl int cislo = atoi("123abc"); printf("prevedene cislo: %d", cislo); // prevedene cislo: 123 Pokud předáte opravdu nesmysl, vrátí 0 Bezpečnější varianta: strtol() IZP cvičení 4 6

Převod řetězce na číslo Funkce long int strtol (const char* str, char** endptr, int base); str řetězec k převodu endptr ukazatel na poslední znak, který zbyl po konverzi if(*endptr!= '\0') { // chyba } base základ, v tomto případě desítková soustava (tedy 10) IZP cvičení 3 7

1. projekt Práce s textem Co se hodnotí? (Pořadí podle důležitosti) přeložitelnost zdrojového souboru, formát zdrojového souboru (členění, zarovnání, komentáře, vhodně zvolené identifikátory), dekompozice problému na podproblémy (vhodné funkce, vhodná délka funkcí a parametry funkcí), správná volba datových typů, případně tvorba nových typů, správná funkcionalita a ošetření chybových stavů. IZP cvičení 5 8

1. projekt Práce s textem Překlad programu gcc -std=c99 -Wall -Wextra -Werror proj1.c -o proj1 -Werror všechna varování interpretuje jako chyby! IZP cvičení 5 9

JAK BY MĚL VYPADAT ZDROJOVÝ KÓD? IZP cvičení 5 10

Jak by měl vypadat zdrojový kód? Dekomponujte problém na podproblémy tvorba vlastních funkcí Vhodně pojmenovávejte funkce a proměnné Dbejte na přehlednost kódu odsazení! Tělo funkce Příkazy v if, else if, else Těla cyklů Pište komentáře Vhodné je psát komentáře ke každé definici funkce, a také k určitým částem kódu IZP cvičení 5 11

Jak by měl vypadat zdrojový kód? // potrebne knihovny #include <stdio.h> #include <stdlib.h> // definice funkci (dekompozice problemu) // Hlavni program int main(int argc, char** argv) { // zpracovani argumentu prikazove radky // provedeni danych akci return 0; } IZP cvičení 5 12

Jak by měl vypadat zdrojový kód? /** * Funkce scita dve cela cisla. * @param a Prvni cislo * @param b Druhe cislo * @return Vraci soucet dvou cisel. */ int soucet(int a, int b) { return a + b; } IZP cvičení 5 13

Implicitní streamy V jazyce C můžete používat 3 implicitní streamy, které reprezentují vstup a výstup stdin stdout stderr standardní vstup, třeba z klávesnice standardní výstup, třeba na monitor standardní chybový výstup Chybová hlášení programů je vhodné (a v projektu nutné) vypisovat na standardní chybový výstup pomocí funkce fprintf() #include <stdio.h> fprintf(stream, format_retezec, dalsi_param); fprintf(stderr, "Chybove hlaseni\n"); fprintf(stderr, "Malo parametru: %d", ecode); IZP cvičení 5 14

Teorie opakování Proměnná, konstanta IZP cvičení 5 15

Teorie opakování Proměnná, konstanta Datový typ IZP cvičení 5 16

Teorie opakování Proměnná, konstanta Datový typ Příkaz IZP cvičení 5 17

Teorie opakování Proměnná, konstanta Datový typ Příkaz Deklarace, inicializace proměnné IZP cvičení 5 18

Teorie opakování Proměnná, konstanta Datový typ Příkaz Deklarace, inicializace proměnné Operátory IZP cvičení 5 19

Příklad načítání ze stdin po znacích Napište program, který načítá jednotlivé znaky ze standardního vstupu. Vypíše číselnou a znakovou reprezentaci jednotlivých znaků. Nakonec vypíše počet načtených znaků. Použijte funkci getchar Zadávání EOF Windows: Linux: CTRL + Z CTRL + D IZP cvičení 5 20

ASCII tabulka IZP cvičení 5 21

DATOVÝ TYP POLE IZP cvičení 5 22

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 23

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 24

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 25

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 26

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 27

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 28

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 29

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 30

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 31

Datový typ pole Otázka: Jaký je rozdíl mezi následujícími inicializacemi pole? char array_1[] = {'h' 'e','l','l 'o','\0'}; char array_2[] = "hello"; IZP cvičení 5 32

Datový typ pole Otázka: Jaký je rozdíl mezi následujícími inicializacemi pole? char array_1[] = {'h' 'e','l','l 'o','\0'}; char array_2[] = "hello"; Odpověď: Obě inicializace jsou ekvivalentní, ale u array_2 je koncová nula přidána automaticky. IZP cvičení 5 33

Datový typ pole Otázka: Jaký je rozdíl mezi následujícími inicializacemi pole? char array[] = "hello"; char *array = "goodbye"; IZP cvičení 5 34

Datový typ pole Otázka: Jaký je rozdíl mezi následujícími inicializacemi pole? char array[] = "hello"; char *array = "goodbye"; Odpověď: hello je uloženo v poli 6 znaků, hodnoty pole lze libovolně měnit, kopie je uložena na zásobníku goodbye je řetězcový literál, který nelze měnit IZP cvičení 5 35

Příklad Definujte: Pole typu int o 5 prvcích a naplňte jej hodnotami Řetězec s libovolným textem IZP cvičení 5 36

Příklad Definujte: Pole typu int o 5 prvcích a naplňte jej hodnotami Řetězec s libovolným textem int array[5] = {5, 10, -10, 2, -2}; char *str = "Hello world!"; Napište program, který vypočítá sumu všech prvků v poli array vypíše počet znaků v řetězci str IZP cvičení 5 37

FUNKCE IZP cvičení 5 38

Funkce Do teď jsme vše zapisovali do funkce int main( ) { } Nyní začneme vytvářet vlastní 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 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í 5 39

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í 5 40

Funkce příklad Minule jsme zkoušeli porovnávat dva řetězce. Používali jsme k tomu funkci strcmp(), která byla deklarována takto int strcmp(char* s1, char* s2); IZP cvičení 5 41

DALŠÍ ÚKOLY IZP cvičení 5 42

Úkol 1 Implementuje funkci, která ověří, že číslo x patří do intervalu [a,b]. Funkce vrátí 1 pokud se číslo x nachází v intervalu [a,b] 0 jinak IZP cvičení 5 43

Úkol 2 Implementujte funkci, která ověří, zda je číslo dělitelné jiným číslem beze zbytku. Pokud ano, funkce vrací 1, jinak 0. Nápověda: k řešení použijte operátor modulo (zbytek po celočíselném dělení), v C % 10 % 5 = 0 11 % 6 = 5 atp IZP cvičení 5 44

Úkol 3 Implementujte funkci, která vypočítá absolutní hodnotu čísla typu double a vypočítanou absolutní hodnotu vrátí. IZP cvičení 5 45

Úkol 4 Implementujte funkci, která vybere maximální hodnotu z pole typu int, které má n členů. Funkce maximální hodnotu vrátí. IZP cvičení 5 46

Úkol 5 Napište funkci, která vypočítá n-tý prvek Fibonacciho posloupnosti. Fibonacciho posloupnost je definována: f(0) = 0 f(1) = 1 f(n) = f(n-1) + f(n-2) 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, atd. IZP cvičení 5 47

KNIHOVNA <CTYPE.H> IZP cvičení 4 48

Knihovna ctype.h Funkce vrací číslo > 0 nebo 0 Zkontroluje, zda je znak c bílý znak int isspace(int c); Zkontroluje, zda je znak c číslice int isdigit(int c); Zkontroluje, zda je znak c písmeno int isalpha(int c); Více informací o ctype.h man ctype.h Internet IZP cvičení 5 49

Děkuji Vám za pozornost! IZP cvičení 5 50

Funkce pro práci s řetězci string.h Vyhledání znaku c v řetězci s, vrací ukazatel na vyhledaný znak, jinak NULL char* strchr(char* s, int c); Kopie řetězce src do řetězce dst, vrací ukazatel na dst char* strcpy(char* dst, char* src); Spojení řetězců dst a src, výsledek v dst char* strcat(char* dst, char* src); Lexikografické porovnání řetězců s1 a s2 int strcmp(char* s1, char* s2); IZP cvičení 5 51