Základy programování (IZP) Druhé 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 20180924_13:00 2. týden
Důležité informace Jmenuji se Petr Veigend Studijní poradce Můj profil: http://www.fit.vutbr.cz/~iveigend/ Kancelář: A221 Konzultační hodiny: po dohodě emailem, na profilu mám časy, kdy bývám obvykle na fakultě 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> Přestávky? IZP cvičení 1 2
Důležité informace FIT: http://www.fit.vutbr.cz/ CVT: http://www.fit.vutbr.cz/cvt/net/ WIS: https://wis.fit.vutbr.cz/ EMAIL: http://email.fit.vutbr.cz/ VUTBR: http://www.vutbr.cz/ SU FIT: http://www.su.fit.vutbr.cz/ Certifikáty: http://ca.vutbr.cz/pki/pub/policy.html Karta předmětu IZP: http://www.fit.vutbr.cz/study/course-l.php?id=12816 IZP cvičení 1 3
Náplň cvičení Programování vzdáleně, zdroje informací Jednoduché programy Řešení všech máte na wiki stránkách ale když už jsme tady, vyzkoušíme je aspoň trochu samostatně 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 řetězce /* toto je komentar na vice radku */ IZP cvičení 2 4
PROGRAMOVÁNÍ VZDÁLENĚ IZP cvičení 2 5
Programování vzdáleně (Windows) Ve Windows spusťte program PuTTY Plocha Network Apps PuTTY Nastavení PuTTY Category: Terminal Features zaškrtnout Disable application keypad mode (NumLock) Category: Session Host name: merlin.fit.vutbr.cz, protokol: SSH Přihlašovací jméno: xlogin00 (váš login) Saved Sessions: Merlin, potom Save Heslo: heslo, kterým se přihlašujete do WIS IZP cvičení 2 6
Programování vzdáleně (Linux) V Linuxu otevřete program Terminal Applications System Tools Terminal Na vzdálený server se lze připojit pomocí příkazu ssh ssh login@merlin.fit.vutbr.cz Ve školní síti stačí ssh merlin Přihlašovací jméno a heslo je stejné jako do WISu Dále je postup stejný jako při programování z Windows (vzdáleně) Kromě editoru nano lze také využít vývojové prostředí Code::Blocks IZP cvičení 2 7
Získávání nápovědy Nápovědu můžete získat z internetu: vygooglit název příkazu + c Výborný zdroj: http://www.cplusplus.com/ Doporučení AS: http://devdocs.io/ pomocí příkazu man (linux) Kniha např. pokud chcete získat informace o funkci printf, zadejte: man 3 printf Herout, P. Učebnice jazyka C. Mohla by ještě být v knihovně IZP cvičení 2 8
Code::Blocks lokálně Na školních serverech je poměrně stará verze prostředí Code::Blocks (Windows a asi i Linux) Doporučuji proto si Code::Blocks nainstalovat na disk P Ze stránek Code::Blocks si stáhněte codeblocks-17.12mingw-nosetup.zip A archiv rozbalte na disk P. Obsahuje i překladač, takže není potřeba nic dalšího A disk P máte k dispozici na všech školních počítačích IZP cvičení 2 9
Čí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í 2 10
Čí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; 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í 2 11
Číselné proměnné a konstanty Základní pojmy Inicializace Nastavení hodnoty proměnné nebo konstanty Příkaz Definuje činnost, kterou program vykoná (např. výpis textu na obrazovku) IZP cvičení 2 12
PŘÍKLADY IZP cvičení 2 13
Pár poznámek V příkladech budeme používat jedinou knihovní funkci printf() Funkce se nachází v knihovně stdio.h #include <stdio.h> Použití: printf("text"); int i = 10; printf("cislo: %d", i); char retezec[] = "Ahoj"; printf("retezec: %s", retezec); IZP cvičení 2 14
Hello world Napište program, který na obrazovku vypíše pozdrav světu Určitě si ho pamatujete z předchozího cvičení Kostra (může vypadat nějak takto, ostatní dnes sami): #include <stdio.h> // funkce main() // výpis pozdravu // návratová hodnota IZP cvičení 2 15
Číselné proměnné a konstanty Napište program, který: Vypíše na obrazovku číslo 38 (%d) Deklarujte proměnnou typu int (může se jmenovat libovolně) Do proměnné uložte hodnotu 38 K deklarované proměnné přičte hodnotu 4 Opět vypíše novou hodnotu na obrazovku (%d) IZP cvičení 2 16
Jednoduché podmínky (if) Základní pojmy podmíněný příkaz if (podmínka){ příkazy } else {příkazy} Napište program, který Deklaruje a inicializuje proměnnou typu int na hodnotu 42 K hodnotě této proměnné přičte 3 Pokud je hodnota proměnné větší než 44, program o tomto nějak informuje uživatele. Pokud je hodnota proměnné větší než 45, program o tomto informuje uživatele. V opačném případě program ohlásí, že zadaná hodnota není větší než 45. IZP cvičení 2 17
Argumenty programu Jednotlivé argumenty budeme oddělovat mezerou Argumenty, se kterými byl program spuštěn, se dají získat pomocí doplnění dvou parametrů do hlavičky funkce main: int main(int argc, char* argv[]) { } // argc počet argumentů // argv jednotlivé argumenty, argv[0] // (název souboru s programem) IZP cvičení 2 18
Argumenty programu int main(int argc, char* argv[]) { } // argc počet argumentů // argv jednotlivé argumenty, argv[0] // (název souboru s programem) Pro./hello sum 10 20 argc=4 argv[0] argv[1] argv[2] argv[3] "hello" "-sum" "10" "20" IZP cvičení 2 19
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í 2 20
Výpis argumentů programu Napište program, který vypíše první tři argumenty, se kterými byl program spuštěn počet argumentů programu Tentokrát společně a pro společnou bezpečnost VELMI opatrně int main(int argc, char* argv[]) { } // argc počet argumentů // argv jednotlivé argumenty, argv[0] // (název souboru s programem) IZP cvičení 2 21
Výpis argumentů programu jednoduchý cyklus Cyklus (počítaný, nepočítaný) Cyklem myslíme opakování určité části programu Počítaný: známý počet průchodů (for) Nepočítaný: neznámý počet průchodů (while, do-while) Zatím si vystačíme s cyklem while while (podmínka) { tělo cyklu } IZP cvičení 2 22
Jak vytvořit cyklus? Bude to pro vás jedna z nejčastějších činností, takže je asi dobré to dostat do krve Použijeme příklad z wiki a na něm si ukážeme, jak se cyklus tvoří Budeme opět vypisovat všechny argumenty Nejdříve vypíšeme název programu a počet argumentů Poté inicializujeme proměnnou typu int, kterou budeme indexovat jednotlivé proměnné Pokud bude argc větší než hodnota proměnné typu int, vypíšeme obsah na obrazovku (argv[]) a inkrementujeme proměnnou A úplně stejně pro ostatní argumenty IZP cvičení 2 23
OK Zjevný problém u předchozího příkladu Mnohokrát opakujeme stejný kód Řešení: opakující se kód zkopírujeme do cyklu Co se mění u našeho příkladu? Jak tu změnu přepsat do cyklu? IZP cvičení 2 24
OK Zjevný problém u předchozího příkladu Mnohokrát opakujeme stejný kód Řešení: opakující se kód zkopírujeme do cyklu Co se mění u našeho příkladu? Jak tu změnu přepsat do cyklu? // inicializace while (argc > i) { } printf("argument %d: %s\n",i,argv[i]); i = i+1; // i++; IZP cvičení 2 25
Další úkoly Na Wiki stránkách je několik dalších jednoduchých příkladů, které určitě stojí za vyzkoušení Načtení vstupu a výstup z programu Načtení dvou čísel a jejich výpis Výpočty Základní cyklus Na dalších slidech najdete zadání a rady k řešení (hlavně abyste nemuseli otevírat wiki, pokud budete zkoušet příklady řešit samostatně) Pokud je nestihnete tady, důrazně doporučuji si úkoly doprogramovat na DÚ IZP cvičení 2 26
Načtení vstupů K načítání vstupů se používá funkce scanf scanf("formátovací řetězec",&proměnná) Formátovací řetězec indikuje formát dat, která načítáme např. %f, %d Proměnná indikuje proměnnou, do které budou zadaná data uložena Znak &: chceme adresu, na kterou ukládáme Pozor na řetězce/pole Příklad: int celecislo; // kam ukládáme scanf("%d",&celecislo); // načtení printf("%d\n",celecislo); // výpis IZP cvičení 2 27
Načtení vstupů Napište program, který načte z klávesnice celé číslo (datový typ int) a to poté vypíše Nezapomeňte vytvořit proměnnou pro uložení čísla Funkce scanf, formátovací řetězec pro int: %d Výpis na obrazovku pomocí funkce printf: %d Napište program, který načte z klávesnice desetinné číslo (datový typ float) a to poté vypíše Nezapomeňte vytvořit proměnnou pro uložení čísla Funkce scanf, formátovací řetězec pro float: %f Výpis na obrazovku pomocí funkce printf: %g IZP cvičení 2 28
Načtení vstupů Napište program, který načte z klávesnice znak (datový typ char) a ten poté vypíše Nezapomeňte vytvořit proměnnou pro uložení znaku Funkce scanf, formátovací řetězec pro char: %c Výpis na obrazovku pomocí funkce printf: %c (zkuste i %d) Napište program, který načte z klávesnice řetězce (datový typ char []) a maximální délce 9 znaků. Tyto řetězce budou reprezentovat jméno a příjmení. Proměnné: char jmeno[10], char prijmeni[10] Funkce scanf, formátovací řetězec pro char [10]: %9s Výpis na obrazovku pomocí funkce printf, použijte dva formátovací řetězce %s IZP cvičení 2 29
Načtení dvou čísel a jejich výpis Načtěte dvě čísla typu float, která budou reprezentovat souřadnice bodů Nezapomeňte vytvořit proměnné pro uložení čísel Funkce scanf, dva formátovací řetězce %f Výpis pomocí printf (%f) ve tvaru [prvnícislo,druhecislo] IZP cvičení 2 30
Výpočty spotřeba paliva Vytvořte program, který spočítá spotřebu pohonných hmot Uživatel bude muset zadat čtyři parametry Počáteční stav nádrže [l] Počáteční stav tachometru [km] Koncový stav nádrže [l] Koncový stav tachometru [km] Výstupem bude průměrná spotřeba paliva na 100 km IZP cvičení 2 31
Výpočty čas Napište program, který převede zadaný počet hodin a minut na sekundy. Ve výstupu musí být patrný počet hodin a sekund a převedená hodnota. Napište program, který zadaný počet sekund převede na hodiny, minuty a sekundy. Ve výstupu musí být patrný počet sekund a převedená hodnota. IZP cvičení 2 32
Evidence pacientů větší systém Během semestru budeme na cvičeních vytvářet větší progam Evidenci pacientů u lékaře Na cvičeních budeme postupně doplňovat do programu různé funkce Doktor Smrčka s ním bude pracovat na řízených democvičeních IZP cvičení 2 33
Evidence pacientů rok narození Napište program, který načítá roky narození jednotlivých pacientů Roky jsou odděleny bílým znakem (mezera, ENTER), načítání skončí, pokud uživatel zadá číslo 0. Program jako výstup vypíše celkový počet pacientů, pro které byla načtena data narození a počet pacientů, kterým je dle roku narození méně než 18 let. IZP cvičení 2 34
Děkuji za pozornost