Ohjelmointi 1 Taulukot ja merkkijonot

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

Olio-ohjelmointi Syntaksikokoelma

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

Muuttujien roolit Kiintoarvo cin >> r;

17. Javan omat luokat 17.1

Taulukot ja merkkijonot

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

ITKP102 Ohjelmointi 1 (6 op)

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

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

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

20. Javan omat luokat 20.1

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

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

17. Javan omat luokat 17.1

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

Taulukot. Jukka Harju, Jukka Juslin

13 Operaattoreiden ylimäärittelyjä

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

Java-kielen perusteet

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

Java-kielen perusteet

18. Abstraktit tietotyypit 18.1

12 Mallit (Templates)

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Osoittimet. Mikä on osoitin?

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Tietueet. Tietueiden määrittely

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

15. Ohjelmoinnin tekniikkaa 15.1

1. Mitä tehdään ensiksi?

Ohjelmointiharjoituksia Arduino-ympäristössä

Olio-ohjelmointi 2. välikoe HYV5SN

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Harjoitus 5 (viikko 48)

Java-kielen perusteita

7/20: Paketti kasassa ensimmäistä kertaa

8. Näppäimistöltä lukeminen 8.1

Rakenteiset tietotyypit Moniulotteiset taulukot

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Algoritmit 2. Luento 7 Ti Timo Männikkö

Harjoitus 4 (viikko 47)

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Taulukoiden käsittely Javalla

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Ohjelmoinnin perusteet Y Python

15. Ohjelmoinnin tekniikkaa 15.1

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Osoitin ja viittaus C++:ssa

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

15. oppitunti. Taulukot. Osa. Mikä on taulukko?

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

Ohjelmointi 1 C#, kevät 2014, tentti

Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Ohjelmoinnin perusteet Y Python

8. Näppäimistöltä lukeminen 8.1

14. Hyvä ohjelmointitapa 14.1

Olio-ohjelmointi Javalla

Lyhyt kertaus osoittimista

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Java-kielen perusteet

ITKP102 Ohjelmointi 1 (6 op)

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

OpenOffice.org Base 3.1.0

Ohjelmointi 2 / 2010 Välikoe / 26.3

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Ohjelmoinnin jatkokurssi, kurssikoe

Harjoitus 2 (viikko 45)

Tehtävä 1. TL5302 Olio-ohjelmointi Koe Malliratkaisuja. Tässä sekä a)- että b)-kohdan toimiva ratkaisu:

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Jukka Helle

Metodien tekeminen Javalla

Ohjelmoinnin peruskurssi Y1

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

Operaattoreiden uudelleenmäärittely

Plagioinnin tunnistaminen lähdekielisistä ohjelmista

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

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit

Transkriptio:

Ohjelmointi 1 Taulukot ja merkkijonot Jussi Pohjolainen TAMK Tieto- ja viestintäteknologia

Johdanto taulukkoon Jos ohjelmassa käytössä ainoastaan perinteisiä (yksinkertaisia) muuttujia, ohjelmien teko on hankalaa. Yksinkertaisiin muuttujiin pystytään tallettamaan ainoastaan yksi arvo Monissa algoritmeissa on tarpeellista tallettaa monta samantyyppistä arvoa saman tunnuksen alle Talletetaan esim. n. määrä int-tyyppisiä arvoja listaan.

Taulukko Taulukko on kokoelma yksinkertaisia muuttujia, jotka ovat samaa tyyppiä Taulukolle annetaan yksi nimi Taulukon yksittäisiin muuttujiin (alkioihin) viitataan indeksillä Indeksi on alkion järjestysnumero taulukon sisällä

Taulukko-esimerkki Haluamme tallentaa usemman opiskelijan tenttipisteet. Ohjelman teko mennee hankalaksi, jos joudumme jokaiselle opiskelijalle tekemään oman muuttujan: opiskelijaa_tenttipisteet = 12; opiskelijab_tenttipisteet = 18;... Tilanteessa on järkevää käyttää taulukkoa. Taulukon määritelyssä annetaan normaalin tapaan taulukon nimi ja tietotyyppi. Tietotyyppi määrittelee nyt minkätyyppisiä muuttujia taulukkoon tullaan asettamaan.

Tenttipisteet Taulukko-esimerkki [0] [1] [2] [3]... [n-1] 23 18 7 22... 23 Taulukon ensimmäinen alkio tenttipisteet[0] Kymmenes taulukon alkio on tenttipisteet[9] Jos taulukon koko on n, viimeinen alkio löytyy indeksistä n-1

tenttipisteet[] Taulukko esimerkki indeksi [0] [1] [2] [3] alkio 23 18 7 22 Indeksillä 3, arvo on 22 Indeksillä 1, arvo on 18 Taulukon alkiot tavallisia muuttujia

Taulukko ja muistinhallinta Taulukko on yksinkertaisesti joukko muistipaikkoja, joista jokaiseen voidaan tallentaa samantyyppinen muuttuja. Taulukon luonti: int tenttipisteet[50]; Nyt muistista on varattu 50 kappaleelle kokonaislukuja tilaa. Taulukon arvoja usein kutsutaan alkioiksi. Taulukon koko on 50

Taulukon alkioon viittaaminen Taulukon yksittäiseen alkioon viitataan käyttämällä kokonaislukua. Tätä kokonaislukua kutsutaan indeksiksi. Taulukon ensimmäinen indeksi on 0. indeksi [0] [1] [2] [3]... [n-1] alkio 23 18 7 22... 23

Taulukon käyttö int tenttipisteet[3]; tenttipisteet[0] = 12; tenttipisteet[1] = 18; tenttipisteet[2] = 24; cout << tenttipisteet[0] << endl; cout << tenttipisteet[1] << endl; cout << tenttipisteet[2] << endl;

Taulukon käyttö int tenttipisteet[3]; tenttipisteet[0] = 12; tenttipisteet[1] = 18; tenttipisteet[2] = 24; int i=0; while(i < 3) { cout << tenttipisteet[i] << endl; i++; }

Taulukon käyttö int tenttipisteet[3]; tenttipisteet[0] = 12; tenttipisteet[1] = 18; tenttipisteet[2] = 24; for(int i=0; i<3; i++) { cout << tenttipisteet[i] << endl; }

Yleisiä virheitä int tenttipisteet[3]; // mitä tulostaa? cout << tenttipisteet[0] << endl; // mitä tulostaa? cout << tenttipisteet[3] << endl; // mitä tulostaa? cout << tenttipisteet << endl;

Taulukon alustaminen int tenttipisteet[3] = {12, 24, 15}; int tenttipisteet[7] = {12, 24, 15}; int tenttipisteet[3] = {}; int tenttipisteet[] = {12, 24, 15};

Taulukkoanimaatio

Merkkijonot

C++ ja merkit Olemme käsitelleet perustietotyypit (int, char, double, float..) ja taulukon. char - muuttujaan tallennetaan yksi merkki (esim. 'a') Entä useammat merkit? C++ tarjoaa kaksi vaihtoehtoa: 1) C - tyyliset merkkijonot 2) string - luokka

C-tyyliset merkkijonot C-tyylinen merkkijono: taulukollinen merkkejä (char) + lopetusmerkki Lopetusmerkki on '\0' ja tätä kutsutaan usein nullmerkiksi

Kokonaislukutaulukko int luvut[5] = {1,2,3,4,5}; indeksi [0] [1] [2] [3] [4] alkio 1 2 3 4 5

Kokonaislukutaulukko int luvut[7] = {1,2,3,4,5}; [0] [1] [2] Koko suurempi kuin annettujen lukujen määrä [3] [4] [5] Huom! Loput menevät nolliksi! [6] 1 2 3 4 5 0 0

Merkkitaulukko char vokaalit[5] = {'a','e','i','o','u'}; vokaalit[] indeksi [0] [1] [2] [3] Lopetusmerkki [4] puuttuu alkio 'a' 'e' 'i' 'o' 'u'

Koko suurempi kuin annettujen merkkien Merkkitaulukko määrä char nimi[7] = {'p','e','k','k','a'}; Loput tilat täytetään null-merkeillä [0] [1] [2] [3] [5] [6] [7] 'p' 'e' 'k' 'k' 'a' '\0' '\0'

Merkkitaulukko char nimi[7] = "pekka"; [0] [1] [2] [3] [5] [6] [7] 'p' 'e' 'k' 'k' 'a' '\0' '\0'

char nimi[] = "pekka"; Merkkitaulukko [0] [1] [2] [3] [4] [5] 'p' 'e' 'k' 'k' 'a' '\0'

Tuloste char nimi[] = "Pekka"; cout << nimi << endl; // tulostaa "Pekka"!

Syöte const int MAXPITUUS = 100; char teksti[maxpituus] = {}; cout << "Anna nimesi" << endl; cin.getline(teksti, MAXPITUUS);

cin vs. cin.getline(..) cin >> teksti; Lukee käyttäjän syötettä ensimmäiseen tyhjään merkkiin asti (esim. välilyönti). cin.getline(teksti, MAXPITUUS) Lukee ja tallentaa kokonaisen rivin merkkejä, välilyönnit mukaanlukien.

Merkkijonojen vertailu? const int MAXPITUUS = 100; char teksti1[maxpituus] = {}; char teksti2[maxpituus] = {}; cout << "Anna mj1: " << endl; cin.getline(teksti1, MAXPITUUS); cout << "Anna mj2: " << endl; cin.getline(teksti2, MAXPITUUS); if(teksti1 == teksti2) // EI TOIMI! { cout << "samat ovat" << endl; }

Merkkijonojen vertailu ei näin: taulukko1 == taulukko2 vaan näin: taulukko1[0] == taulukko2[0] && taulukko1[1] == taulukko2[1] &&...

Merkkijonojen vertailu bool samat = true; int i = 0; while(teksti1[i]!= '\0') { if(teksti1[i]!= teksti2[i]) { samat = false; } i++; } if(teksti1[i]!= teksti2[i]) { samat = false; } if(samat) { cout << "samat ovat" << endl; }

Paremmat merkkijonot: string C++-kielessä parempi vaihtoehto C-tyyppisille merkkijonoille: string - luokka Emme ole käsitelleet kurssilla luokkatyyppejä (emmekä tulekaan käsittelemään). Tämä ei kuitenkaan haittaa, sillä string-luokan käyttö on samannäköistä kuin perustietotyyppien. string ei ole perustietotyyppi vaan luokka. string-luokan ilmentymiä sanotaan olioiksi (ei muuttujiksi) string-luokan käyttöön otto: #include <string>

string olioiden käsittely string merkkijono; // tyhjä merkkijono string mj1 = "merkkijononi"; string mj2("merkkijononi"); cout << mj2.length() << endl; string mj3(6, 'z'); // zzzzzz string mj4 = mj3;

string olioiden käsittely string a = "Kalle"; string b = "tervehtii"; string c = a + " " + b;

Yksittäisten merkkien käsittely string a = "Kalle"; for(int i=0; i<a.length(); i++) { cout << a[i] << endl; }

Syötteen ottaminen string a; // Huom! ei tarvitse huolehtia lukumäärästä getline(cin, a);

Merkkijonojen vertailu string-olioita voidaan vertaillu myös == ja!= vertailuoperaattoreiden avulla. string a = "Kalle"; string b = "Kalle"; if(a == b) {...}