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

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

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

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

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

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

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

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

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

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

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

Více o konstruktorech a destruktorech

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ý

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

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

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í

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

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;

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

KTE / ZPE Informační technologie

Odvozené a strukturované typy dat

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

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

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

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

Úvod do programování. Lekce 5

2 Datové typy v jazyce C

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

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

typová konverze typová inference

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

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

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

POČÍTAČE A PROGRAMOVÁNÍ

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

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

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

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

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

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

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

Základy programování (IZP)

Programovací jazyk C++ Hodina 1

Mělká a hluboká kopie

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

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

Základy programování (IZP)

Sdílení dat mezi podprogramy

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

PŘETĚŽOVÁNÍ OPERÁTORŮ

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

Algoritmizace a programování

Vícerozměrná pole. Úvod do programování 2 Tomáš Kühr

Programování II. Návrh programu I 2018/19

Struktura programu v době běhu

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

Jazyk C++ II. Šablony a implementace

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

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

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

DUM 06 téma: Tvorba makra pomocí VBA

Úvod do programovacích jazyků (Java)

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

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

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

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

Jazyk C++ I. Šablony 2

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

Práce s polem a pamětí

Algoritmizace a programování

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

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

Algoritmizace a programování

Programovací jazyk C++ Cvičení 2

Programování v jazyce C a C++

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. cvičení

Objektově orientované programování

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

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

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

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

O datových typech a jejich kontrole

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

Objektově orientované programování. Úvod

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

Algoritmizace a programování

Konstruktory a destruktory

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Jazyk C++ I. Šablony

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

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

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

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

Úvod do programování - Java. Cvičení č.4

Sada 1 - Základy programování

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

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

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

Transkript:

Pole stručný úvod do začátku, podrobně později - zatím 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. 6 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; /* levý horní roh */ pol2d[4][9] = 7; /* pravý dolní roh */ "Prolezu" dvourozměrné pole: int pole2d[100][100]; int sloupec, radek; for(sloupec = 0; sloupec < 100; sloupec++) for(radek = 0; radek < 100; radek++) pol2d[radek][sloupec] = 5; // po sloupcích vždy pro sloupec-tý sloupec projedu všechny řádky (pomocí radek)

- nebo s konstantami #define RADKU 100 #define SLOUPCU 50...tady nějaký začátek programu int pole2d[radku][sloupcu]; for(rad = 0; rad < RADKU; rad++) for(sl = 0; sl < SLOUPCU; sl++) pol2d[rad][sl] = 5; // po řádcích vždy pro rad-tý řádek projedu všechny sloupce (pomocí sl) Funkce základy - základní deklarace funkce: návratový_typ název_funkce(typ_parametru název_parametru_funkce) tělo_funkce; return návratová_hodnota; Např: pom = a * b; return(pom); /* lze též return pom; */ Jinak totéž: return(a * b); Pozn.: funkční prototyp této funkce (např. v hlavičkovém souboru) by vypadal takto: ;

nebo také: int pocitej_soucin(int, int); Potom volání této funkce: int vysledek, prvniop, druhyop; prvniop = 10; druhyop = 20; vysledek = pocitej_soucin(prvniop, druhyop); printf("vysledek soucinu %d a %d je %d.", prvniop, druhyop, vysledek); printf("vysledek soucinu %d a %d je %d.",5,6,pocitej_soucin(5,6)); - jiný postup - kompletnější 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 */

; // tato funkce umi scitat 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"); 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 */ ; funkce1.c obsahuje: #include <stdio.h> #include "funkce1.h" 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"); v jiném souboru: nasobeni.c obsahuje: #include <stdio.h> #include "funkce1.h" 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); Práce s pamětí - oblast působnosti identifikátoru kde daná proměnná platí, kde je vidět - viz výše lokální ve funkci, lokální v bloku, globální Pozor, častá chyba: for (int i = 0; i < 10; i++) /* tady platí i v bloku */ pole[i] = 20; atd... i = 5; /* chyba, tady už i neexistuje */ nebo:

nějaké_příkazy; double pole[10000];...příkazy pracující s polem pole... /* tady pole zaniká */ další_příkazy; Práce s pamětí u funkcí - proměnná je viditelná ve funkci kde byla deklarována - globální proměnné - deklarace mimo funkci na zač. souboru s programem Soubor fcemakej.c: int makej(int a, int b) /* neco dela */ pom = (a * b) / (a + b); return pom; pom 2 a 3 b 6 Soubor hlavni.c: int makej(int a, int b); /* funkční prototyp, je-li třeba */ /* volání této funkce: */ void volacka(void) int x = 3, y = 6, vysl; vysl = makej(x, y); - C umí předávat parametry pouze hodnotou x 3 vysl 2 y 6