C sekalaista. Roope Hakulinen

Samankaltaiset tiedostot
Metaohjelmointia ja muuta hauskaa

ITKP102 Ohjelmointi 1 (6 op)

Sisältö. 2. Taulukot. Yleistä. Yleistä

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Ohjelmointi 1 Taulukot ja merkkijonot

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Sisältö. 22. Taulukot. Yleistä. Yleistä

13 Operaattoreiden ylimäärittelyjä

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

STL:n uudistukset. Seppo Koivisto TTY Ohjelmistotekniikka

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Tietueet. Tietueiden määrittely

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

12. Monimuotoisuus 12.1

ITKP102 Ohjelmointi 1 (6 op)

Osoitin ja viittaus C++:ssa

Geneeriset luokat. C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet. Geneerisen luokan käyttö.

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

4. Luokan testaus ja käyttö olion kautta 4.1

Olio-ohjelmointi Syntaksikokoelma

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

17. Javan omat luokat 17.1

Ohjelmointiharjoituksia Arduino-ympäristössä

Olio-ohjelmointi Javalla

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

C++11 lambdat: [](){} Matti Rintala

7. Oliot ja viitteet 7.1

Ohjelmoinnin peruskurssi Y1

Demo 6 vastauksia. 1. tehtävä. #ifndef #define D6T1 H D6T1 H. #include <iostream> using std::ostream; using std::cout; using std::endl;

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Java-kielen perusteet

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Tietorakenteet ja algoritmit

16. Javan omat luokat 16.1

Harjoitus 2 (viikko 45)

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

TIEA341 Funktio-ohjelmointi 1, kevät 2008

17. Javan omat luokat 17.1

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

Ohjelmassa on käytettävä funktiota laskeparkkimaksu laskemaan kunkin asiakkaan maksu. Funktio floor pyöristää luvun lähimmäksi kokonaisluvuksi.

7. Näytölle tulostaminen 7.1

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Aalto Yliopisto T Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

12. Monimuotoisuus 12.1

Ohjelmoinnin peruskurssi Y1

ITKP102 Ohjelmointi 1 (6 op)

20. Javan omat luokat 20.1

Luokan sisällä on lista

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

Osoittimet ja taulukot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

13. Loogiset operaatiot 13.1

Virtuaalifunktiot ja polymorfismi

Javan perusteita. Janne Käki

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Luokat. Luokat ja olio-ohjelmointi

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

\+jokin merkki tarkoittaa erikoismerkkiä; \n = uusi rivi.

13. Loogiset operaatiot 13.1

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

Ohjelmoinnin perusteet Y Python

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Muuttujien roolit Kiintoarvo cin >> r;

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

15. Ohjelmoinnin tekniikkaa 15.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Operaattorin ylikuormitus ja käyttäjän muunnokset

Table of Contents. T Olio-ohjelmointi C/C++ perusteita Jukka Jauhiainen OAMK Tekniikan yksikkö 2010, 2011

Metropolia ammattikorkeakoulu TI00AA : Ohjelmointi Kotitehtävät 3 opettaja: Pasi Ranne

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Loppukurssin järjestelyt

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

7/20: Paketti kasassa ensimmäistä kertaa

Loppukurssin järjestelyt C:n edistyneet piirteet

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Harjoitus 5 (viikko 48)

Ohjelmoinnin perusteet Y Python

Taulukot. Jukka Harju, Jukka Juslin

TAMPEREEN TEKNILLINEN YLIOPISTO

Testitapaukset - Siirtoprotokolla

Tietorakenteet ja algoritmit

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Transkriptio:

C++11 - sekalaista Roope Hakulinen 25.5.2012

Sisältö Tuplet Käännösaikaiset murtoluvut Satunnaislukugeneraattorit Aika

Tuplet - yleistä Parin yleistys useammalle elementille Ikään kuin struct, mutta indeksointi järjestysnumerolla nimen sijaan Kaikki tyypit (ml. viittaukset, osoittimet) käyvät elementeiksi

Tuplet - käyttö Luominen: tuple<int, double, string> t1(2, 4.3, tuple ); auto t2 = make_tuple( tuple, Oma(), 4); int a = 0; double b = 4.0; auto t3 = tie(a, b); // Viitteitä Käyttö: int a = get<0>(t1); get<2>(t2) = 16; Myös vertailu (niin kuin pareilla): make_tuple(16, 2.0) > make_tuple(-4, 0.5) // true

Tuplet - käyttökohteita Usean paluuarvon välitysfunktiosta tuple<int, int> koordinaatti = palautakoord();

Käännösaikaiset murtoluvut Luokka ratio<> käännösaikaisten murtolukujen kanssa operoimiseen Käännösaikana huomataan nollalla jaot, ylivuodot ym. virheet Osaa perusaritmetiikan (+, -, *, /) ja vertailun lisäksi supistaa murtoluvut

Ratio<> - käyttö #include <ratio> std::ratio<5, 3> a; std::ratio<6, 4> b; auto c = std::ratio_multiply<a, b>; cout << c::num << / << c::den; // 5/2 std::ratio<5, 0> c; // Käännösvirhe

Satunnaislukugeneraattorit Engine: stateful source of random Distribution: muuntaa enginen antamat arvot satunnaisluvuiksi jakaumansa mukaisesti Enginen arvoja ei tule käyttää suoraan, sillä ne ovat deterministisessä järjestyksessä

Enginet Tilallinen moottori numeroiden tuottamiseen Eroavat tehokkuudessa, laadussa ja palauttamiensa arvojen tyypissä (int/float) Kolme perusmoottoria, lisäksi useita adaptereita (voi käyttää myös default_random_engine) Tuottavat samat arvot kaikilla alustoilla (pl. default_random_engine, joka on alustasta riippuen joku moottoreista) Engine Integer/floating point Laatu Tehokkuus Tilan koko linear_congruential Integer Kesk. Kesk. 1 subtract_with_carry molemmat Kesk. Nopea 25 mersenne_twister Integer Hyvä Nopea 624

Enginet - käyttö #include <random> std::default_random_engine dre; int i = dre(); // Luetaan seuraava arvo dre.discard(2); // Hypätään kahden arvon yli dre.seekg(0); // Siirrytään alkuun std::default_random_engine dre2; int j = dre2(); // i == j bool sama_tila = (dre == dre2); // true std::default_random_engine dre3(5); // Aloitetaan tilasta 5

Engine-adapterit Valmiiksi määriteltyjä adaptereita engineille Kolme: discard_block_engine, independent_bits_engine ja shuffle_order_engine Esimerkiksi discard_block_engine jättää välistä parametrina annetun määrän arvoja Lisäksi adaptereita valmiiksi määritellyillä parametreillä knuth_b = shuffle_order_engine<linear_congruential_engine<uint_fast_32, 16807, 256> 0, 2147483647>,

Distributionit Käytetään enginen arvojen muuttamiseksi (pseudo)satunnaisluvuiksi Valmiiksi tarjolla 20 jakaumaa (normaali-, geometrinen, Bernoullin, Poissonin jakauma jne.)

Distributionit - käyttö #include <random> std::default_random_engine engine; std::uniform_int_distribution<> d(0, 10); int i = d(engine); int minimi = d.min(); // 0 int maksimi = d.max(); // 10

Ajan käsittely Aikaisemmin C:ssä ollaan luotu uusi rajapinta aina, kun kellojen tarkkuus on kasvanut (s ms us ns) Tämän välttämiseksi luotiin uusi kirjasto, chrono, jossa aikaa käsitellään eri tavalla Timepoint = alkuhetki + kesto Määritelty std::chrono-nimiavaruudessa

Ajan käsittely - duration Duration koostuu tickeistä ja suhteesta Suhde ilmaistaan uuden ratio-luokan avulla Esim. std::chrono::duration<1, ratio<1,3>> d1(1); // Yksi kolmasosa sekunti Myös valmiiksi määriteltynä eri perusyksiköt : typedef duration<signed int-type >= 64 bits, ratio<1, 10^(-9)>> nanoseconds; std::chrono::nanoseconds ns(100); // 100 nanosekuntia Kaikki aritmeettiset operaatiot (+, -, *, /, %, ++) sekä vertailut määriteltynä Kaventava muunnos esimerkiksi sekunneista minuuteiksi ei onnistu implisiittisesti duration_cast<>

Ajan käsittely timepoint Kello määrittelee alkuhetken ja tick-jakson Timepoint määritellään kellon ja durationin avulla Std::chrono::time_point<kello, duration> Kolme kelloa: system_clock Järjestelmän reaaliaikakello steady_clock Kello, jota ei koskaan siirretä high_resolution_clock Mahdollisimman tarkka kello Ajan haku: chrono::time_point tp = chrono::system_clock::now();