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

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

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

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

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

11a Dynamické dvourozměrné pole (obdobně vícerozměrné)

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

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í

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

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ý

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

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

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

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

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

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

Více o konstruktorech a destruktorech

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

Odvozené a strukturované typy dat

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;

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

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

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

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

Programovací jazyk C++ Hodina 1

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

Opakování programování

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

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

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

2 Datové typy v jazyce C

Algoritmizace a programování

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

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

Základy programování (IZP)

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

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

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

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

KTE / ZPE Informační technologie

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

Úvod do programování. Lekce 5

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

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

POČÍTAČE A PROGRAMOVÁNÍ

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

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

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

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

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

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)

typová konverze typová inference

Algoritmizace a programování

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

Ukazka knihy z internetoveho knihkupectvi

Ukazatele a pole. Chceme-li vyplnit celé pole nulami, použijeme prázdný inicializátor: 207 Čárka na konci seznamu inicializátorů

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

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

Systém je citlivý na velikost písmen CASE SENSITIVE rozeznává malá velká písmena, např. PROM=1; PROm=1; PRom=1; Prom=1; prom=1; - 5 různých proměnných

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

Úvod do programování. Lekce 1

Jazyk C++ II. Šablony a implementace

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

Programovanie v jazyku C - funkcie a makra

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

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

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

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

Struktura programu v době běhu

Úvod do programovacích jazyků (Java)

Prezentace a vysvětlení programového prostředí NXC

přetížení operátorů (o)

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

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

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

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

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

Algoritmizace a programování

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

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

Jazyk C++ I. Šablony 2

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í

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

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

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

ZÁPOČTOVÝ TEST. Zpracoval Vilém Závodný, #include "stdafx.h" #include "stdio.h"

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

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

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

Seminář Java II p.1/43

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

Zápis programu v jazyce C#

Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,Benešovo náměstí 1, příspěvková organizace

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

IUJCE Přednáška č. 1. programování v C na vyšší úrovni základy objektově orientovaného programovaní v (C++, C#)

Algoritmizace a programování

Transkript:

21.4.2009 Makra - dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h - jak na vlastní makro: #define je_velke(c) ((c) >= 'A' && (c) <='Z') - a potom použití v programu: if (je_velke('a' + 'B')).. - před překladem z toho preprocesor udělá toto: if ((('A' + 'B') >= 'A' && ('A' + 'B') <='Z')).. - opět je nutno závorkovat jak tělo makra, tak jeho parametr uvnitř těla Makra v ctype.h např.: isalnum(c) je číslo nebo písmeno? isalpha(c) je písmeno? isascii(c) je ascii 0-127? iscntrl(c) je ascii 0-26? např. test jen na tisknutelné znaky bez háčků a čárek: if (isascii(c) &&!iscntrl(c)) putchar(c); isdigit(c) je číslice?

islower(c) je malé písmeno? isupper(c) je velké písmeno? isprint(c) je ascii 32-126 (tisknutelné)? ispunct(c) je interpunkční znaménko? (,. / atp.) isspace(c) je mezera, tab, \n tj. nový řádek? isxdigit(c) je hexadec. cislice (0-9, A-F, a-f)? isgraph(c) je ascii 33-126 (i pseudografické znaky)? Konverzní makra tolower(c) - na malá písmena toupper(c) - na velká písmena toascii(c) - ořízne bit s pořadím 7 (tj. osmý, nejvyšší bit), tj. z 8 bitů znaku bere jen dolních 7, tj. 0. až 7. Pole stručný úvod do začátku, podrobně později - statická pole (ne dynamicky) - číslují se od 0 int policko[100]; // tj. pole je od 0 do 99!!! policko[5] = 7; // pozor je to 6. prvek s indexem 5 policko[99] = 2; // poslední prvek. policko[100] = 78; // C nijak neprotestuje příkaz vykoná - hodnota 78 je zapsána do paměti ZA moje pole, přepisuji paměť, kterou nemám přidělenu => pravděpodobně bude program chybovat. Může tam uložena moje jiná proměnná... - to znamená, že C nekontroluje rozsahy polí a ohlídání je na programátorovi musím si udržovat např. nějakou proměnnou, kde budu délku pole uloženu.

Dvourozměrné pole: int pol2d[5][10]; pol2d[0][0] = 4; "Prolezu" dvourozměrné pole: int pole2d[100][100]; for(i = 0; i < 100; i++) for(j = 0; j < 100; j++) pol2d[j][i] = 5; // po sloupcích vždy pro i-tý sloupec projedu všechny řádky (pomocí j) - nebo s konstantami #define RADKU 100 #define SLOUPCU 50...tady nějaký začátek programu int pole2d[radku][sloupcu]; for(i = 0; i < RADKU; i++) for(j = 0; j < SLOUPCU; j++) pol2d[i][j] = 5; // po řádcích vždy pro i-tý řádek projedu všechny sloupce (pomocí j)

Funkce základy (shrnutí ze cvičení) - základní deklarace funkce: návratový_typ název_funkce(typ_parametru název_parametru_funkce) tělo_funkce; return návratová_hodnota; Např: int pocitej_soucin(int a, int b) int pom; pom = a * b; return(pom); /* lze též return pom; */ Jinak totéž: int pocitej_soucin(int a, int b) return(a * b); Pozn.: funkční prototyp této funkce (např. v hlavičkovém souboru) by vypadal takto: int pocitej_soucin(int a, int b); nebo také: int pocitej_soucin(int, int); ------------------- 21.4.2009 ------------------- Potom volání této funkce: void main(void) int vysledek; vysledek = pocitej_soucin(10, 20); printf("vysledek soucinu %d a %d je %d.",5,6,pocitej_soucin(5,6));

- jiný postup - kompletnější void main(void) int vstup1, vstup2, vysledek; vstup1 = 23; vstup2 = 25; vysledek = pocitej_soucin(vstup1, vstup2); printf("vysledek soucinu %d a %d je %d.",vstup1,vstup2, vysledek); - typ proměnné použité jako parametr u return musí být shodný s typem (návratovým typem) dané funkce - lze provést přetypování návratové hodnoty nebo se udělá implicitní typová konverze. Např.: return((int) (a * b)); - pozor pokud funkci volám, musí už být známa (stačí hlavička funkce, tzv. funkční prototyp) #include <stdio.h> /* funkcni prototyt */ int pocitej_soucin(int a, int b); // tato funkce umi scitat void main(void) int vstup1, vstup2, vysledek; vstup1 = 23; vstup2 = 25; vysledek = pocitej_soucin(vstup1, vstup2); printf("vysledek soucinu %d a %d je %d.\n",vstup1,vstup2, pocitej_soucin (vstup1, vstup2)); system("pause"); int pocitej_soucin(int a, int b)

int pom; pom = a * b; return(pom); /* lze též return pom; */

Nebo: void nazdar(void); /* musím uvést, aby ho ahoj mohl zavolat */ int ahoj(void)...nějaké příkazy... nazdar(); /* u funkcí bez parametrů se uvádí závorky */... atd... void nazdar(void)...nějaké příkazy... int v = ahoj(); /* u funkcí bez parametrů se uvádí závorky */... atd... - používá se hlavně pokud jsou funkce v různých souborech potom se nedávají funkční prototypy na začátek, ale do vlastního hlavičkového souboru (.h): Např.: funkce1.h obsahuje: /* funkcni prototyp */ int pocitej_soucin(int a, int b); funkce1.c obsahuje: #include <stdio.h> #include "funkce1.h" void main(void) int vstup1, vstup2, vysledek; vstup1 = 23; vstup2 = 25; vysledek = pocitej_soucin(vstup1, vstup2); printf("vysledek soucinu %d a %d je %d.\n",vstup1,vstup2, pocitej_soucin (vstup1, vstup2)); system("pause"); na konci nebo v jiném souboru: int pocitej_soucin(int a, int b)

int pom; pom = a * b; return(pom); /* lze též return pom; */ - do hlavičkových souborů se umisťují dále konstanty a deklarace nových datových typů (typedef) Dále k funkcím: - pokud funkce nevrací nic návratový typ je void - pokud nemá parametry parametry jsou void - volání funkce bez parametrů: funkce(); /* závorky jsou nutné!!! */ - nezapomenout parametry funkce se chovají jako lokální proměnné - C umí předat parametry do funkce pouze hodnotou, jinak musím obejít (viz dále - pointery) - lokální proměnné uvnitř funkce z vnějšku nejsou vidět, zanikají při skončení "své" funkce - globální proměnné jsou deklarovány mimo funkci, jsou vidět "všude" - nesmí se umístit do souboru.h mohl bych jej víckrát "includovat" => proměnná by byla v projektu několikrát při linkování dojde ke kolizi... lze ošetřit viz dále. - pokud bude mít lokální proměnná ve funkci stejné jako nějaká globální proměnná => lokální proměnná překryje ve funkci tu globální. int g; double fn; double vypocet(int fn) double g; g = 2.45; // měním lokální g, globální g je překryto g = 3.5 * fn; // jde o lokální fn, ten parametr funkce // zde zbytek programu return(nejaky_vysledek);