PB161 Programování v jazyku C++ Textové řetězce (1. část) Pole Ukazatele vs. Odkazy Funkce

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

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

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

PB161 Programování v jazyce C++ Přednáška 4

Standardní algoritmy vyhledávací.

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

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

Funkční objekty v C++.

Základy programování (IZP)

Úvod do programovacích jazyků (Java)

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

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

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

Více o konstruktorech a destruktorech

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

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

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

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

Jazyk C++ I. Šablony 2

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

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

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

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Základy programování (IZP)

Programování v jazyce C a C++

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

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

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

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

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

Vector datový kontejner v C++.

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

PB161 Programování v jazyce C++ Přednáška 9

Úvod do programovacích jazyků (Java)

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

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

Základy programování (IZP)

Šablony, kontejnery a iterátory

PB161 Programování v jazyce C++ Přednáška 10

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

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Zápis programu v jazyce C#

7. Datové typy v Javě

Prostory jmen. při vkládání několika hlavičkových souborů může vzniknout kolize. logika.h const int x=5; typedef struct {...

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

Šablony, kontejnery a iterátory

C++ objektově orientovaná nadstavba programovacího jazyka C

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

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.

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Algoritmizace a programování

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

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

Jazyk C++ II. STL knihovna kontejnery část 1

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

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

Mělká a hluboká kopie

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

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

Jazyk C# a platforma.net

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

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.

Ukazatele, dynamická alokace

Množina v C++ (set, multiset).

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

Algoritmizace a programování

Konstruktory a destruktory

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

Programovací jazyk C++ Hodina 1

Stručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787

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

map, multimap - Asociativní pole v C++.

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

Zpracoval:

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

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

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

Abstraktní třídy, polymorfní struktury

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom

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

PB161 Programování v jazyce C++ Přednáška 10

Struktury a dynamická paměť

PREPROCESOR POKRAČOVÁNÍ

Úvod do programování. Lekce 1

Šablony funkcí a tříd (Templates) Genericita

Zpracoval:

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

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

Teoretické minimum z PJV

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Úvod do programování 6. hodina

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

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

Množina čísel int stl-set-int.cpp

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

Seminář Java II p.1/43

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

Transkript:

PB161 Programování v jazyku C++ Textové řetězce (1. část) Pole Ukazatele vs. Odkazy Funkce

Řetězce ve stylu C Jedná se o pole znaků zakončených nulovým znakem '\0'. proto při deklaraci pole musíme uvést o 1 znak více, než je délka řetězce. příklady char slovo_a[] = buldozer ; char *slovo_b = buldozer ; char slovo_c[21]; char slovo_d[6] = OK_OK ; char slovo_e[5] = OK_OK ; //chyba slovo_c = ahoj ; strcpy(slovo_c, ahoj ); //chyba //OK

Řetězce ve stylu C co se stane... struct dva_retezy { char s1[4]; char s2[4]; } retezy;

Řetězce ve stylu C co se stane... struct dva_retezy { char s1[4]; char s2[4]; } retezy; strcpy(retezy.s1, "Ahoj"); strcpy(retezy.s2, "Zdar"); cout<<retezy.s1<<endl;

Řetězce ve stylu C co se stane... struct dva_retezy { char s1[4]; char s2[4]; } retezy; strcpy(retezy.s1, "Ahoj"); strcpy(retezy.s2, "Zdar"); cout<<retezy.s1<<endl; AhojZdar

Řetězce ve stylu C++ Používá se třída string. Řetězec ve stylu C++ již není obyčejné pole znaků, je to objekt. Lze je dynamicky zvětšovat a zmenšovat relačními operátory lexikograficky porovnávat řetězit konvertovat na/z styl C zjišťovat velikost (délku) textu bezpečně procházet znak po znaku přímo přiřazovat...

Řetězce ve stylu C++ (2) Nutno vložit hlavičkový soubor <string> operátor = přiřazení řetězu operátory ==,!= srovnání řetězců na rovnost/různost operátory <=, >=, <, >,!= lexikografické porovnání řetězců operátory <<, >> výstup, vstup (načtení) operátor + zřetězení dvou řetězců

Řetězce ve stylu C++ (3) operátor [] indexace znaků v řetězci metoda (funkce) at() bezpečná indexace znaků v řetězci, vyhazuje výjimky string retez = "test_retezce"; for (unsigned i=0; i<retez.length()+10; i++) { cout<<retez[i]; //test_retezce cout<<retez.at(i); } //test_retezceneúspěšně ukončen (SIGABRT)

Řetězce ve stylu C++ (4) příklad repeater #include<iostream> using namespace std; int main (void) { string retez; while (cin>>retez) { cout<<retez; } Program čte vstup. Dle bílých znaků jej rozděluje do jednotlivých řetězců (v každé iteraci cyklu while jeden). A každý z nich jde na výstup. Až se dosáhne konce souboru (v konzoli CTRL+D), operátor >> ve while cyklu vrátí hodnotu, která se vyhodnotí jako false a čtení se zastaví. } retur n 0; Takto lze načítat/vypisovat čísla, znaky, boolean hodnoty,... cokoli, pro co jsou (budou) operátory >> a << přetíženy.

Řetězce ve stylu C++ (5) metoda (funkce) length() zjištění délky řetězce metoda c_str() převod obsahu řetězce na styl C char * string retez = "ahoj"; cout<<"delka: "<<retez.length()<<endl; cout<<"delka: "<<strlen(retez.c_str())<<endl;

Řetězce ve stylu C++ (5) metoda (funkce) length() zjištění délky řetězce metoda c_str() převod obsahu řetězce na styl C char * string retez = "ahoj"; cout<<"delka: "<<retez.length()<<endl; cout<<"delka: "<<strlen(retez.c_str())<<endl; Delka: 4 Delka: 4

Pole v C++ Definujeme li staticky pole, musí být rozměry konstantní, ale nemusí jít o makra. #define X 10 #define Y 5 char pole2[x][y]; VS. const int x = 10; const int y = 5; char pole3[x][y];

Pole v C++ Oproti C99 ISO/IEC C (nikoli ANSI C!) standard C++ (ani C++03 ISO/IEC 14882:2003) neumožňuje proměnnou na místě meze pole lokálního ve funkci: void vypis(int x, int y) { int pole[x][y]; for (int ix = 0; ix < x; ix ++) for (int iy = 0; iy < y; iy ++) pole[ix][iy] = ix * iy; for (int ix = 0; ix < x; ix ++) { for (int iy = 0; iy < y; iy ++) cout<<setw(3)<<pole[ix][iy]; cout<<endl; } } error: ISO C++ forbids variable-size array

Funkce Jazyk C povoloval pouze volání jménem proto se simulovalo předávání odkazem pomocí předávání hodnotou ukazatele prehod(&x, &y); funkce nemůže měnit hodnotu ukazatele, ale může měnit, kam ukazatelé ukazují námi požadovanou hodnotu viz část kolegy Šimona Jazyk C++ umožňuje volání hodnotou i odkazem bez nutnosti simulace.

Funkce (2) Předávání parametrů hodnotou: void ch_point(int *p, int *q){ int pom=*p; *p=*q; *q=pom; } //ch_point(&a, &b); Předávání parametrů odkazem: void ch_ref(int &p, int &q) { int pom=p; p=q; q=pom; } //ch_ref(a, b); Pokud voláte funkci fun(x), nepoznáte, zda předáváte odkazem nebo hodnotou.

Funkce (3) V C++ je nutné uvést prototyp funkce před jejím prvním použitím, je li definována později. hlavička bez parametrů znamená typ void kromě konstruktorů a destruktorů je povinné uvádění návratového typu funkce lze použít... pro funkci s proměnným počtem parametrů ale lepší použít následující lze (postupně zprava) nadefinovat parametrům implicitní hodnoty zprava lze pak vynechávat parametry lze přetěžovat funkce [a metody, a operátorové funkce]

Funkce (4) implicitní parametry #include<iostream> #include<string> using namespace std; string posli(string text, int dulezitost = 1) { return (!dulezitost? "Oznameni: " : dulezitost == 1? "Varovani: " : "VYHRUZKA: ") + text; return "ahoj"; } int main(void) { cout<<posli("bude prset")<<endl; cout<<posli("plaveme v rece", 0)<<endl; cout<<posli("jestli NEDAS POKOJ...", 2)<<endl; } return 0;

Funkce (5) přetěžování (overloading) rozpoznej.cc void rozpoznej(int x) { cout<<x<<" je cele cislo"<<endl; } void rozpoznej(double x) { cout<<x<<" je float cislo"<<endl; } void rozpoznej(int x1, char x2) { cout<<x1<<" je cele cislo a " <<x2<<" je znak"<<endl; }

Funkce (5.5) přetěžování (overloading) rozpoznej(10); rozpoznej(10.2); rozpoznej(10, 'a'); 10 je cele cislo 10.2 je float cislo 10 je cele cislo a a je znak K přetížení nestačí: rozdílný návratový typ parametr předaný hodnotou a odkazem konstantní a nekonstantní typ

1. úkol Napište (zde rovnou na cvičení) program, který: bude číst znaky oddělené bílými znaky tak dlouho, dokud nenarazí na znak ' ' až narazí, bude číst do konce souboru (CTRL+D v shellu) první i druhou skupinu znaků bude považovat za množiny program provede výpočet a vypíše sjednocení a průnik těchto množin můžete předpokládat, že korektní vstup obsahuje každý znak nejvýše 1x můžete použít metodu ř etětec.find(znak/ ř etě z), která vrátí pozici výskytu nebo číslo >= ř etězec.length()

1. úkol (kdyby nešlo) řešení (nic moc moje : )) lze nalézt na: www.fi.muni.cz/~xbayer/pb161/2007/03/prunik.cc používám schválně typ string pro ukládání prvků množin (procvičení), ale není to moc dobré řešení. C++ nabízí v STL již hotové kontejnery, které přesně odpovídají množinám. Mají již definované metody a vypořádají se i duplicitami, dokáží uložit více než jen znaky... ale to je jiný příběh (probereme časem)

2. úkol Dobrovolný (za <0, 2> bodů). Odevzdávat emailem v příloze na pb161extra@fi.muni.cz Na odevzdání je 14 dní (do 15.10. včetně) Platí pro něj obdobné pravidla, jako pro klasicky odevzdávané úkoly, až na způsob odevzdání a nemožnost obdržet další +2 body za včasné odevzdání.

2. úkol (zadání) Napište (doma) program, který načte množinu znaků oddělených bílými znaky a spočte z ní její množinu všech množin (potenční množinu). http://cs.wikipedia.org/wiki/poten%c4%8dn%c3%ad_algebra Hlídat duplicity {a, a} = {a} Stojí li na vstupu ne znak, ale řetězec, použijte pouze jeho první znak, např.: a b zdar c a c množina bude {a, b, z, c}

2. úkol (zadání (2)) Jako oddělovač prvků můžete použít mezeru. Pro ukončení vstupu hlídejte konec souboru CTRL+D v shellu Pro procvičení můžete opět využít string, kdo zná STL, může použít i kontejner. Vzor řeší rekurzivně a pomocí string. Lze zkusit na aise: /home/xbayer/open/potencni_monzina

Fibonacciho posloupnost 1,1,2,3,5,8,13... http://cs.wikipedia.org/wiki/fibonacciho_posloupnost Jen v bodech první povinný vypsat fibonacciho čísla <= zadané číslo (očíslovat) použít unsigned long int pokud nové číslo je menší než minulé ohlásit chybu (přetečení) VRÁTIT NENULU Z MAIN FUNKCE http://www.fi.muni.cz/usr/jkucera/pb161/fibon.htm /home/jkucera/pb161/cvic3/fibon