Struktury a dynamické proměnné



Podobné dokumenty
Programování a počítače 1 Počítačová cvičení pro obor B-EST

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

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

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

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

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

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

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

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;

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

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

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

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í

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

Martin Flusser. December 15, 2016

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

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

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

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

Základy programování (IZP)

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

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

Základy programování (IZP)

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

1. Téma 03 - Rozhodování

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

Algoritmizace a programování

Více o konstruktorech a destruktorech

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

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

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

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

- 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 programování (IZP)

Základy programování (IZP)

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

Konstruktory a destruktory

Základy programování (IZP)

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

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

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

2 Datové typy v jazyce C

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

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

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Rozklad na prvočinitele. 3. prosince 2010

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

Základy programování (IZP)

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

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

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

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

Struktura programu v době běhu

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

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

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

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

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

MQL4 COURSE. By Coders guru -8- Proměnné

Programovací jazyk C++ Hodina 1

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

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

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

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

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

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

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

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

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

Vstupní požadavky, doporučení a metodické pokyny

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

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

První kapitola úvod do problematiky

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

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

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

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

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

Úvod do programovacích jazyků (Java)

Mělká a hluboká kopie

Odvozené a strukturované typy dat

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

Algoritmizace a programování

PREPROCESOR POKRAČOVÁNÍ

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

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.

Výčtový typ strana 67

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

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

Embedded SQL v C/C++ úvod. Administrace Oracle Kateřina Opočenská

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

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

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 11

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

Abstraktní třídy, polymorfní struktury

Úvod do programovacích jazyků (Java)

Základy algoritmizace a programování

Test z programování v jazyce VBA v rámci předmětu Počítače II Vzorová zadání a vypracování

Transkript:

BPC1E počítačové cvičení 9 Struktury a dynamické proměnné Cílem cvičení je sestavit aplikaci, která bude používat vhodnou strukturu popisující daný objekt požadovanými parametry. Navazujícím cílem je deklarovat tuto strukturu jako dynamickou proměnnou a procvičit si práci s dynamickými proměnnými v jazyku C. Úloha A. Cílem tohoto příkladu je sestavit projekt pro jednoduchou správu autobazaru. Projekt k příkladu A se skládá ze zdrojového souboru BPC1E_C09A.c, kde se nachází funkce main(): #include <stdio.h> #include <bazar.h> int main(void) T_car *bazar[200]; // ptrs. to cars int cnt=0; // number of recorded cars int lprice, hprice; char cmd; cnt = ini_bazar(bazar, cnt); printf("\n\ninsert command: 'q' = quit "); scanf("%c", &cmd); fflush(stdin); while(cmd!='q') // if not quit switch (cmd) case 'p': print_bazar(bazar, cnt); break; //case 'a': call function for adding a new car case 's': printf("\nselect low limit of price:"); scanf("%d", &lprice); fflush(stdin); printf("\nselect high limit of price:"); scanf("%d", &hprice); fflush(stdin); printf("\n\ninsert command: 'q' = quit, "); scanf("%c", &cmd); fflush(stdin); ; // call function for deleting of all recods return 0; a knihovny pro funkce spojené se správou autobazaru s hlavičkovým souborem bazar.h: typedef struct car // car record char type[20]; // type of car char color[10]; // color of car char mot; // kind of the motor B = benzin, D = diesel

int vol; // motor volume in cubic cm int year; // year of production int price; // price T_car; int ini_bazar(t_car **rec, int num); // bazar initialization void print_record(t_car *prcar); // printing car parameters void print_bazar(t_car **rec, int num); // printing all cars // insert function header for deleting of all records (cars) // insert function header for printing of bazar content with // defined range of price // insert function header for adding of new car a zdrojovým souborem bazar.c: #include <bazar.h> int ini_bazar(t_car **rec, int num) T_car *new_car; new_car=(t_car*)malloc(sizeof(t_car)); strcpy(new_car->type, "Skoda_Felicia"); strcpy(new_car->color, "Blue"); new_car->mot='d'; new_car->vol=1400; new_car->year=2003; new_car->price=75000; rec[num++] = new_car; // and other cars return num; void print_record(t_car *prcar) printf("\n%s\t %s", prcar->type, prcar->color); if(prcar->mot=='d') printf("\t diesel"); else if(prcar->mot=='b') printf("\t beznin"); printf("\t %4d ccm\t year %d\t price %6d CZK", prcar->vol, prcar->year, prcar->price); void print_bazar(t_car **rec, int num) int n; for(n=0; n<num; n++) print_record(rec[n]); // insert function for deleting of all cars // insert function for printing of all cars from given price range // insert function for adding a new car Vložte předpřipravené kódy do vašeho projektu. V hlavičkovém souboru je uvedena kompletní definice vlastního typu struktury T_car, položky jsou popsány v poznámkách. Ve vlastní knihovně bazar máte rovněž připraveny kompletní a plně funkční funkce pro

inicializaci databáze autobazaru ini_bazar( ), která naplní pole záznamů několika vozy tak, abyste nemuseli při každém spuštění plnit databázi ručně. Dále pak obsahuje funkci pro tisk položek jednoho záznamu do jednoho řádku print_record( ), vstupním parametrem je ukazatel na záznam, který má být tisknut. Poslední připravenou funkcí je print_bazar( ) pro tisk všech záznamů (aut) v autobazaru. Ve funkci main() je inicializováno pole ukazatelů na záznam *bazar[200], tedy na 200 záznamů. Do tohoto pole se vkládají ukazatele (adresy) na jednotlivé záznamy, způsob je zřejmý z funkce ini_bazar( ). Důležitá je rovněž proměnná cnt, ve které je uložen počet naplněných záznamů. Všimněte si, že například ve funkci print_bazar( ) je parametrem ukazatel na ukazatel, protože potřebuji znát ukazatel na pole, musím to provést tímto způsobem. Vašim úkolem je doplnit program o funkce pro přidání nového záznamu auta, výpis aut v bazaru pro zadaný rozsah cen a funkci, která před ukončením programu vymaže všechny dynamický vytvořené záznamy. Ve funkci main() je již vytvořeno jednoduché ovládací prostředí pomocí zadávání příkazů z klávesnice. Ukázka činnosti programu je na obrázku 9.1. Obr. 9.1. Příklad zobrazení výsledků příkladu A) v konzolovém okně. Hodnocení: 3 body.

Bonusová úloha Vytvořte program, který v konzolovém okně umožní hodnocení dvoukolového mezinárodního závodu ve skocích na lyžích. Vytvořte vlastní datový typ struktury (nebo využijte přiložený zdrojový kód), který bude obsahovat jméno závodníka, třímístný kód země, celkové dosažené body a aktuální pořadí a dvě vnitřní struktury s hodnocením jednotlivých skoků v prvním a druhém kole (délka skoku + bodové hodnocení 5 rozhodčích). Bodování je zřejmé z následujících pravidel: Hodnocení se vytváří na základě součtu dvou údajů: bodů za délku skoku a za stylové provedení: a) body za délku skoku: každý závodník obdrží automaticky 60 bodů (výjimkou jsou mamutí můstky - K170 a více, u nichž se uděluje 120 bodů). V závislosti na dosažení tzv. konstrukčního bodu můstku (např. 120 metrů u můstků K120) získává (nebo ztrácí) další body. Za každý metr navíc/méně získá/ztrácí určité množství bodů závislé na typu můstku: K60 - K69: 2,4 bodu za metr K70 - K79: 2,2 bodu za metr K80 - K99: 2,0 bodu za metr K100 - K169: 1,8 bodu za metr K170 a více: 1,2 bodu za metr (velikost můstku je proměnná zadaná na začátku po spuštění programu) b) body za stylové hodnocení: Každý z pěti porotců udělí skokanovi známku do 20 bodů s rozlišením po 0,5 bodech. Nejvyšší a nejnižší hodnota ze všech pěti známek se škrtá. Platné jsou tedy pouze tři známky a maximální zisk je 60 bodů. Stylové chyby skokana musí porotce promítnout do svého hodnocení. Jednotlivé záznamy budou generovány jako dynamické proměnné, na které bude nastaven ukazatel v poli ukazatelů na jednotlivé záznamy s počtem maximálně 30. Počet záznamů udržujte ve vhodné globální proměnné. Sestavte funkce pro vložení závodníka a dále funkce pro hodnocení skoku a výpis výsledků. Pro jednoduchost v prvním i druhém kole startují závodníci podle pořadí, ve kterém byly jejich záznamy dynamicky přidány. Po každém skoku bude vypsáno aktuální pořadí a na žádost i tabulka výsledků (pořadí od nejlepšího k nejhoršímu). Na závěr každého kola bude tabulka výsledků vypsána automaticky. V maximální míře využívejte funkce. Příklad výpisů konzolového okna je uveden na obrázku 9.2. Kritickou částí je generování aktuálního pořadí. Doporučuji vytvořit funkci, kterou zavoláte po každém skoku a v níž se vyhodnotí pořadí podle bodů. Tak stačí porovnat jen aktuální záznam s předešlými výsledky a vhodným způsobem jej zařadit. Příklad řešení struktury je v přiloženém zdrojovém kódu BPC1E_C09BON.c.

Obr. 9.2. Příklad výstupů v konzolovém okně pro bonusový úkol včetně finálního vyhodnocení. typedef struct jump float length; float points[5]; t_jump; // structure for jump and evaluation typedef struct competitor char name[20]; char country[4]; // structure for competitor // length of jump in meters // evaluation by refs // name // three-letter code of country

float points; // sum of points int order; // order t_jump round_1; // jump and eval. in the 1st round t_jump round_2; // jump and eval. in the 2nd round t_competitor; t_competitor *comp[30]; int cnt=0; // global array of pointers to comp. records // global number of records Kontrolní otázky 9.1) Jak velký prostor bude v paměti vyhrazený v případě deklarace proměnné typu T_car z příkladu A? 9.2) Co deklaruje následující konstrukce: int **x? 9.3) Jak se projeví při tisku znak \t v řetězci funkce printf()? Literatura [9.1] KERNIGHAN, B. W., RITCHIE, D. M. Programovací jazyk C. Brno: Computer Press, 2004. [9.2] HEROUT, P. Učebnice jazyka C. 1. díl. České Budějovice: KOOP nakladatelství, 2009. [9.3] HEROUT, P. Učebnice jazyka C. 2. díl. České Budějovice: KOOP nakladatelství, 2008.