Programovanie v jazyku C - struktury a polia

Podobné dokumenty
Programovanie v jazyku C - pole treba poorat...

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

Programovanie v jazyku C - to chce dynamiku

Programovanie v jazyku C - funkcie a makra

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

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

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

Programovanie v jazyku C - davaj argumenty

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

Regulární výrazy. Vzory

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

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

Zápis programu v jazyce C#

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

Standardní algoritmy vyhledávací.

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

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

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

Programování v jazyce C pro chemiky (C2160) 7. Ukazatele, Funkce pro práci s řetězci

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

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

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

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

7.CVIČENIE. Základy HTML

Základy programování (IZP)

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

Metodický koncept k efektivní podpoře klíčových odborných kompetencí s využitím cizího jazyka ATCZ62 - CLIL jako výuková strategie na vysoké škole

Základy programování (IZP)

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;

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

Príloha č. 5 Dátové rozhranie pre zoznam poistencov navrhnutých na zaradenie do dispenzárnej starostlivosti

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

Úvod do programovacích jazyků (Java)

Lineární spojový seznam (úvod do dynamických datových struktur)

Programovanie v jazyku C - ti to zratam...

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

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.

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

Základy programování (IZP)

Polia a matice v jazyku C. Michal Kvasnica

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 -

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

Základy programování (IZP)


Import cenových akcií FRESH

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

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

Jazyk C# a platforma.net

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

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

NPRG030 Programování I, 2017/18 1 / :22:16

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

Modul PROLUC Podvojné účtovníctvo

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

Vstupní a vstupní proudy v C++

11b Další příklady operací vstupu a výstupu (úvod viz 10)




Hromadná korešpondencia v programe Word Lektor: Ing. Jaroslav Mišovych

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

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.

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

1. Formát exportov typu *.gpc (ABO)

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

Úroveň strojového kódu procesor Intel Pentium. Adresovanie pamäte

Lexikální analýza. Rozhraní lexikálního analyzátoru. Miroslav Beneš Dušan Kolář. M. Beneš, D. Kolář: Lexikální analýza 1. Lexikální analýza 2

Úvod do programování 6. hodina

Lexikální analýza. Miroslav Beneš Dušan Kolář

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

Základy programování (IZP)

Úrad pre dohľad nad zdravotnou starostlivosťou Žellova 2, Bratislava

Hlavní funkce pro práci s řetězci

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

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

Algoritmizace a programování

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

Jazyk C pro pokročilé

Programovací jazyk C++ Hodina 1

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

Martin Flusser. December 15, 2016

2 Datové typy v jazyce C

Programování v jazyce C pro chemiky (C2160) 6. Funkce, struktury

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

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

P R O L E M FAKTURA Z VYDAJA OBSAH. Vystavenie faktúry z výdaja postup, podmienky... 2

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

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

Rozšiřování a upravování stávající funkcionality PLToolbox, Orafce

Pole a kolekce. v C#, Javě a C++

Triedenie. Príklad T.1 Vytvorte funkciu, ktorá zistí počet rôznych hodnôt v poli.

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

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

Textové soubory. alg9 1

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

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Objektově orientované programování

Ukazatele, dynamická alokace

Je to voľne dostupný programový balík (free software), ktorý sa používa na meraniach.

Transkript:

CVIČENIE 6/13 (S7) Programovanie v jazyku C - struktury a polia About struktury, rozdiel medzi polom a strukturou, polia struktur, polia smernikov, bublinkove triedenie Basic knowledge pole je homogenny udajovy typ (prvky pola su rovnakeho typu). struktura je heterogenny udajovy typ (prvky/polozky struktury mozu mat rozny typ). struct{ polozky; a; v praxi sa najcestejsie pouzivaju nasledujuce dva zapisy: v tomto priklade vytvorime novy typ, ktory pomenujeme MIERY: typedef struct { int vyska; float vaha; MIERY; MIERY jozko, janko, petko; v tomto priklade vytvorime strukturu miery, ktora bude aj novym typom MIERY: typedef struct miery { int vyska; float vaha; MIERY; MIERY jozko, janko, petko; k jednotlivym polozkam struktury pristupujeme cez operator '.': jozko.vyska = 192; jozko.vaha = 86.5; janko.vyska = jozko.vyska; existuje aj vztah poli a struktur - v samotnej strukture moze existovat polozka, ktora predstavuje pole, ale moze existovat aj pole struktur:

MIERY a[10]; // pole typu MIERY, kde kazda polozka pola je reprezentovana jednou strukturovanou polozkou typu MIERY a[5].vyska = 187; // priradenie vysky 6-temu prvku pola v ANSII C neboo mozne nasledovne priradenie: jozko = janko; // skopirovanie celeho obsahu strukturovanej premennej do druhej dnesne prekladace taketo priradenie vsak uz umoznuju. polia smernikov - jedna sa o pole, kde jenodtlive prvky tohto pola predstavuju smerniky char *c[20]; // pole dvadsiatich smernikov na typ char pouzitie takychto poli je vyhodne napriklad pri triedeni, kedy nedochadza k vymene celych poloziek obsiahnutych v takomto poli (cele riadky), ale len adresa s odkazom na takyto riadok: char zoznam[50][10]; // pole obsahujuce zoznam poloziek char *p_zoznam[50]; // pole smernikov odkazujuce na jednotlive polozky predchadzajuceho pola p_zoznam = zoznam; bublinkove triedenie TODO: Nalezení znaku v řetězci... strchr - syntaxe: char* strchr (const char* s, int c) - funkce vrací pointer na první výskyt c v řetězci s ( \0 se považuje za část řetězce) - pokud znak c není nalezen, funkce vrací 0 (nulový pointer... #define NULL 0) Priklad: naprogramovat funkci strchr char* strchr (char* s, int c){ while (*s && c!= *s) s++; return (*s)? s : NULL; Porovnání dvou řetězců... strcmp - syntaxe: int strcmp (const char* s1, const char* s2) - funkce vrací 1 když s1 > s2 0 když s1 == s2-1 když s1 < s2

- funkce kexikograficky porovnává dva řetězce znak po znaku - většinou (známé znakové sady) jsou malá písmena za velkými ale není to přenositelné Priklad: naprogramovat funkci strcmp int strcmp (const char* s1, const char* s2) { while (*s1 && (*s1 == *s2)){ s1++; s2++; if (!(*s1) &&!(*s2)) return 0 else return (*s1 < *s2)? -1 : 1; Vyhledávání podřetězce v řetězci... strstr - syntaxe: int strstr (const char* s1, const char* s2) - funkce vrací první výskyt řetězce s2 v řetězci s1 (podobně jako strchr, ale hledá podřetězec) Priklad: naprogramovat funkci strstr - program musí zpracovat i případ s1 = abababc s2 = ababc fce má vrátit pointer na: abababc 1. řešení přes 2 cykly: - vnější cyklus projíždí znak po znaku s1 - vnitřní cyklus ojede s2 char* my_strstr(char *s1, char *s2) { char* ps1; char* ps2; while(*s1) { ps1 = s1; ps2 = s2; while (*ps1 && *ps2 && *ps1 == *ps2){ ps1++; ps2++; if (*ps2 == '\0') // jsme na konci ps2 -> nasli jsme vzor return s1;

if (*ps1 == '\0') // jsme na konci ps1 -> nic jsme nenasli return NULL; s1++; return NULL; 2. toto řešení je pomocí stavového automatu: char* strstr(char *s1, char *s2) { char* p = NULL; char *ps2 = s2; int shoda = 0; while (*s1) { if (*s2 && *s1==*s2) { if (!shoda) { p=s1; shoda=1; s2++; else { if (shoda) { shoda = 0; s2 = ps2; s1 = p; s1++; if (!*s2) return p; if (!*s2) return p; else return NULL;

Priklad: napište funkci, která dostane na vstup řetězec (slova oddělená jednou nebo více mezerami) a obrátí řetězec => funkce původní řetězec změní "ahoj babi" "joha ibab" void obratslova( char* s){ char* zac; // zacatek obraceneho slova char* kon; // konec obraceneho slova int c; while( *s) { while( *s == ' ') s++; // preskoc mezery if(! *s) // muze byt konec break; for( zac = s; *s && *s!= ' '; s++) ; // dojet ZA konec slova for( kon = s - 1; zac < kon; zac++, kon--) { c = *zac; // obrat slovo *zac = *kon; *kon = c; Priklad: naprogramovat funkci str_replace char* str_replace(char* s1, char*s2, char* s3) - funkce nahradí výskyt řetězce s2 v řetězci s1 řetězcem s3 - nepoužít žádný pomocný buffer - nepoužít žádnou knihovní funkci - můžeme předpokádat, že s1 je dostatečný velký buffer, aby se tam vešel výsledný řetězec -> dokoncit priklad z hodiny

Examples Ex. 1: vytvorte strukturovany typ, ktory bude pozostavat z: meno - 10 znakov priezvisko - 20 znakov vek - cele cislo vyska - desatinne cislo vaha - desatinne cislo pohlavie - M/Z - jeden znak Ex. 2: upravte dany typ tak, aby obsahoval dve polozky - meno a vek. vytvorte pole, ktore bude tohto typu a bude obsahovat 10 prvkov. nacitajte toto pole zo vstupu. nacitavanie ukoncte, ked: bude presiahnuty pocet 10-tich poloziek pri zadavani novej polozky sa miesto mena (1. udaj) zada znak '0' obsah nacitanych udajov (pola) vypiste na obrazovku Ex. 3: pomocou pola smernikov zotriedte nacitane polozky: podla mena (strcmp) podla veku