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

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

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

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

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

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:

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

Standardní vstup a výstup

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

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

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

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

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

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

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

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

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

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

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

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

Úvod do programování. Lekce 1

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

Algoritmizace a programování

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

Algoritmizace a programování. Terminálový vstup a výstup

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

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

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Jednoduché příkazy jazyka Pascal

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

3 KTE / ZPE Informační technologie

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

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

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

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

Zápis programu v jazyce C#

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

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

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

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

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

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

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

Úvod do programování. Lekce 5

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

Programování v jazyce C a C++

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ý

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

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Programovací jazyk Pascal

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

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

ALGORITMIZACE A PROGRAMOVÁNÍ

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í

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

PHP tutoriál (základy PHP snadno a rychle)

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.

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

Algoritmizace a programování

Odvozené a strukturované typy dat

Struktura programu v době běhu

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

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

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Typové a netypové soubory

Šablona 10 VY_32_INOVACE_0106_0110 Rovnice s absolutní hodnotou

Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice, Benešovo náměstí 1, p.o. III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT

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

Sada 1 - Základy programování

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

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Textové soubory

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

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

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

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

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

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

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

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

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

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

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

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

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

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

Více o konstruktorech a destruktorech

Datové typy pro reálná čísla

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

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

Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru

Vyšší odborná škola a Střední škola,varnsdorf, příspěvková organizace. Šablona 20 VY 32 INOVACE

2 Datové typy v jazyce C

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

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

Sada 1 - Základy programování

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

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

dovolují dělení velkých úloh na menší = dekompozice

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

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

Transkript:

Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 CZ.1.07/1.5.00/34.1076 Pro vzdělanější Šluknovsko 32 - Inovace a zkvalitnění výuky prostřednictvím ICT 0202 Ing. Vladimír Ďurči LINUX VY_32_INOVACE_0202_0310 Jazyk C/C++, Standardní vstup - výstup a ukazatele [3/10] JAZYK C - OS LINUX Vytvořeno 7. 6. 2013 Určeno pro Operační systémy 4. ročník, maturitní obor Přílohy Přiložené textové soubory, a zpracované programy IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C 1

Lekce 10 J a z y k C / C + +, S t a n d a r d n í v s t u p - v ý s t u p a u k a z a t e l e Obsah lekce: Úvod... 1 Shrnutí Funkce printf() a ukazatele.... 2 Otázky k opakování 3 Lab 4 2

Úvod Úvod V této lekci se podíváme na printf() a scanf(), nejznámější funkce ze standardní knihovny, a také na funkce jim podobné. S h r n u t í F u n k c e p r i n t f ( ) a u k a z a t e l e Ukazatele a pár drobností Než se pustíme do funkce printf, je třeba znát několik věcí, které jsme ještě neprobrali. Nejdůležitější jsou ukazatele (anglicky pointer), céčkové programy na nich stojí a hlavně padají. Ukazatel je fyzicky číslo, adresa v paměti. Jeho velikost záleží na architektuře, nejčastěji je stejně velký jako int, obvykle 4 byty, ale spoléhat se na to nelze. V Céčku má ukazatel vždy nějaký typ, například ukazatel na int není totéž, co ukazatel na double. Pokud typ neznáme, používá se ukazatel na void. Ukazatel se definuje pomocí hvězdičky. int pi; / proměnná pi je ukazatel na int / void pv; / proměnná pv je ukazatel na void / Je běžným zvykem pojmenovávat proměnné typu ukazatel tak, aby začínali písmenem p (p jako pointer), někteří programátoři přidávají k úvodnímu p ještě podtržítko, například p_i, p_v a podobně. Všechny objekty v paměti včetně funkcí mají adresu. U proměnných se dá zjistit operátorem &. Inverzním operátorem je stará známá hvězdička. int i, j; / dvě proměnné typu int / int pi; / ukazatel na int / i = 1; / do i dáme 1 / pi = &i; / do pi dáme adresu i / j = pi; / do j dáme obsah paměti (chápaný jako int), na niž ukazuje pi, tedy obsah i, tedy 1 / Jeden typ ukazatele už známe z minula. Je to řetězec, typ char. Pokud napíšeme "řetězec", vyhradí překladač v datovém segmentu programu celkem alespoň osm bytů pro písmena řetězce a ukončovací nulu (připomínám: byte s číselnou hodnotou 0, nikoli znak '0'), výraz má typ const char, je to tedy pointer na char a ukazuje na byte, který obsahuje úvodní 'ř'. Klíčové slovo const znamená, že obsah paměti, na niž pointer ukazuje nesmí být měněn. V jazyku C přijde do kontaktu s ukazateli i začátečník. Důvodem je kromě řetězců také volání funkcí s parametry, ty se totiž předávají výhradně hodnotou. Ukážeme si to na příkladu, chceme napsat funkci, která vynuluje proměnnou. void nula_spatne(int promenna) { promenna = 0; void nula_dobre(int ppromenna) { ppromenna = 0; 3

int main(void) { int i = 1; nula_spatne(i); / v i je pořád jedna / nula_dobre(&i); / teprve teď je v i nula / return i; Při volání funkce nula_spatne se vytvoří kopie proměnné i a do této kopie se vloží nula. Po skončení funkce kopie zmizí a původní proměnná zůstala nezměněná. Ve funkci nula_dobre máme v proměnné ppromenna adresu původní proměnné i, takže zápisem do paměti skutečně změníme hodnotu i a změnu nijak neovlivní ani zánik parametru ppromenna po skončení funkce. V některých jazycích (hlavně Pascal a C++) lze napsat funkci nula_dobre syntaxí podobnou nula_spatne, říká se tomu parametr předaný odkazem, ale Céčko tuto možnost nenabízí. Funkce printf() V jazykách s vysokou teoretickou hodnotou a nízkou praktickou použitelností (Prolog) jsou výstupy takzvaně zadarmo. To znamená, že po skončení výpočtu se sám od sebe vypíše výsledek na obrazovku ve formátu, který vyhovuje autorovi normy jazyka. V jazykách vhodných pro výuku programování (Pascal) existuje magická formulka (writeln) s přehlednou, ale speciální syntaxí a touto formulkou (schválně neříkám funkcí) vypíše programátor libovolný počet hodnot různého typu. Moderní objektově orientované jazyky (Java) se snaží s problémem vypořádat pomocí metody, které převede cokoli na řetězec. Céčko je starý nízkoúrovňový jazyk pro praxi, a proto výstup řeší obyčejná funkce neobyčejné síly, která umožní výpis libovolného počtu hodnot základních typů na obrazovku ve formátu, který si určí programátor. Daní za to je mírně obtížnější syntaxe. int printf(const char format,...); Funkce printf je ze stdio.h, vrací počet vypsaných znaků nebo záporné číslo v případě chyby. Zajímavější než návratová hodnota, která se v programech většinou ignoruje, jsou její parametry. Prvním je formátovací řetězec, který se až na případné speciální znaky vypíše na obrazovku, následuje libovolný počet (třeba i 0) dalších parametrů. To se v C značí třemi tečkami. Kolik je parametrů, jakého jsou typu a jak a kam se mají vypsat se uvede ve formátovacím řetězci. Řídícím znakem je '%', pokud jej chcete vypsat, musí se zdvojit. Celá řídící sekvence má syntaxi %[příznaky][minimální šířka][přesnost][modifikátor typu]typ a typicky popisuje vložení jednoho parametru funkce printf. Téměř vždy znamená výskyt jedné řídící sekvence jeden další nepovinný parametr při volání printf. Běžně užívané typy jsou: Označení Typ parametru a interpretace i o, u, x, X int, znaménkové číslo v desítkové soustavě unsigned, nezáporné celé číslo v osmičkové, desítkové, šestnáctkové (s ciframi abcd nebo ABCD) soustavě 4

e f c s p double, v exponenciální formě double, ve formě s desetinou tečkou int, zkonvertuje se na unsigned char reprezentující jeden znak const char, nulou ukončený řetězec void, adresa paměti, číslo v šestnáctkové soustavě Ukážeme si několik jednoduchých příkladů, všechny řídící sekvence z formátovacího řetězce budou v základním formátu %typ. int i = -125; const char s = "Nějaký text"; double d = 31.4159; / 1. Nejjednodušší příklad bez nepovinných parametrů, / printf("ahoj světe\n"); / 2. který zvládne i funkce puts, ta navíc odřádkuje. / puts("ahoj světe"); / 3. Výpis čísla typu int / printf("minus sto dvacet pět je %i\n", i); / 4. Zdvojení vypisovaného procenta / printf("jedeme na %i%%\n", 100); / 5. Výpis znaku, jeho ASCII kódu ve dvou soustavách / printf("znak '%c' má ASCII kód %i, šestnáctkově %x\n", 'm', 'm', (unsigned) 'm'); / 6. Výpis řetězce, ukazatele a znaku / printf("řetězec s obsahuje \"%s\", je na adrese %p" " a začíná písmenem '%c'\n", s, (const void ) s, (int) s); / 7. Výpis reálných čísel / printf("10 pi je asi %f, což se dá napsat i jako %e\n", d, d); / 8. Funkce printf vrací, kolik toho vytiskla. / printf("vnořená printf vypsala %i znaků\n", printf("12345\n")); Příklad vytiskne na standardní výstup následující text: Ahoj světe Ahoj světe Minus sto dvacet pět je -125 Jedeme na 100% Znak 'm' má ASCII kód 109, šestnáctkově 6d Řetězec s obsahuje "Nějaký text", je na adrese 0x8048540 a začíná písmenem 'N' Číslo pi je asi 31.415900, což se dá napsat i jako 3.141590e+01 12345 Vnořená printf vypsala 6 znaků První příklad je velmi jednoduchý, vypíšeme jen jednoduchý řetězec bez řídících znaků. Funkce printf narozdíl od puts sama neodřádkuje, proto jsem musel přidat znak konce řádku do řetězce. Ve třetím příkladu je vidět výpis parametru typu int pomocí %i. Tím parametrem nemusí být jen proměnná, ale třeba konstanta (4), výsledek volání funkce (8) nebo obecně jakýkoli výraz příslušného typu. Řídících sekvencí se znakem procento může být ve volání více (5), (6) a (7), všechny běžně užívané a zde uvedené sekvence zkonzumují po jednom parametru. Důležité je, aby byly parametry správného typu. Pokud to není splněno, musíme je přetypovat (5), (6). V pátém případě využívám skutečnosti, že znaková konstanta není typu char, ale int (je to divné, ale je tomu tak). V případě %x je lepší 'm', přetypovat z intu na vyžadovaný typ unsigned, ačkoli na normálních platformách mají stejnou fyzickou reprezentaci v paměti a příklad bude fungovat i bez přetypování. V šestém případě podobně měním const char na const void spíše pro formu (neumím si 5

představit platformu, kde by ukazatele na různé typy měly různé reprezentace v paměti). O něco větší smysl má přetypování charu na int (6), nicméně vzhledem ke způsobu předávání parametrů funkcím není na normálních platformách nezbytné. Vyzkoušejte si ale třeba bez přetypování vypsat double pomocí %i nebo naopak int pomocí %f a budete možná nepříjemně překvapeni 6

O t á z k y k o p a k o v á n í 1. V které knihovně jsou definovány funkce printf() a scanf()? 2. Co znamenají zápisy %d, %f, %c ve funkcích printf() a scanf()? 3. Co znamenají zápisy \n, \t, \r ve funkci printf()? 7

L a b 1. Napište program, který krátce pípne! / řešení Zvukovy vystup ============== / int main(void) { printf("tento program kratce pipne \007\n"); return 0; 2. Napište program, který přečte reálné číslo a vypíše celou jeho část. Zkuste vytvořit více způsobů získání celé části. / řešení Oriznuti desetinne casti ======================== / int main(void) { double f; int i; printf("zadejte realne cislo s desetinnou casti: "); scanf("%lf", &f); printf("1) bez desetinne casti: %.0f - pomoci formatu tisku (!zaokrouhluje)\n", f); printf("2) bez desetinne casti: %d - pomoci explicitni typove konverze\n", (int) f); i = f; printf("3) bez desetinne casti: %d - pomoci implicitni typove konverze\n", i); return 0; 3. Další příklady / Formatovane cteni a nasobeni realnych cisel 8

=========================================== / int main(void) { double x, y, z; printf("zadej 3 realna cisla: "); scanf("%lf %lf %lf", &x, &y, &z); printf("aritmeticky prumer je: %.2f\n", (x + y + z) / 3); return 0; / Ruzne vyznamy operatoru / ========================= / int main(void) { int i, j; double f, g; printf("celociselne a realne deleni\n"); printf("delenec Delitel Cele Realne\n"); i = 7; j = 2; f = 7.0; g = 2.0; printf("%5d / %5d = %5d %5.2f\n", i, j, (int)(i/j), (double)(i/j)); printf("%5.2f / %5d = %5d %5.2f\n", f, j, (int)(f/j), (double)(f/j)); printf("%5d / %5.2f = %5d %5.2f\n", i, g, (int)(i/g), (double)(i/g)); printf("%5.2f / %5.2f = %5d %5.2f\n", f, g, (int)(f/g), (double)(f/g)); printf("\ndeleni modulo:\n"); printf("delenec Delitel Zbytek\n"); printf("%4d %% %3d = %5d\n", i, j, i % j); printf("%4d %% %3d = %5d\n", j, i, j % i); return 0; 9