1. C++ -pääohjelma. Olio-ohjelmointi Johdanto ohjelmointiin C++-kielellä

Koko: px
Aloita esitys sivulta:

Download "1. C++ -pääohjelma. Olio-ohjelmointi Johdanto ohjelmointiin C++-kielellä"

Transkriptio

1 Olio-ohjelmointi Johdanto ohjelmointiin C++-kielellä Tässä osassa tutustutaan C++ - ohjelmoinnin perusrakenteisiin ja siihen, kuinka käyttäjän kanssa kommunikoidaan käyttäen hyväksi konsoli-ikkunaa. Teksti perustuu pääasiallisesti opetusmonisteen [CppTut] ensimmäiseen lukuun. Lukijan oletetaan tuntevan C-kielen siinä määrin kuin se esitetään kurssilla Johdatus ohjelmointiin. C++ perustuu syntaksiltaan C- ohjelmointikieleen: Lähes mikä tahansa C-ohjelma on myös C++-ohjelma. Tällä kurssilla pyritään kuitenkin ohjelmoimaan C++:n luonteen mukaisesti, jolloin monien C-kielestä tuttujen toimintatapojen tilalle tulee uusia menetelmiä. 1. C++ -pääohjelma Ohjelman suoritus alkaa aina pääohjelmasta, joka on sekä C- että C++ - ohjelmissa nimeltään main. Pääohjelma on tavallinen C++ -ohjelman funktio, jota käyttöjärjestelmä kutsuu automaattisesti. Vaikka pääohjelma onkin normaali funktio, sitä erottavat tavallisista funktioista seuraavat seikat: 1. Sitä ei voi kutsua erikseen. 2. Sen osoitetta ei voi tallentaa osoitinmuuttujaan. 3. Sitä ei tarvitse esitellä ennen määritystä. 4. Sitä voi olla vain yksi kappale ohjelmassa. C++ -standardin mukaan pääohjelma voi olla kahta muotoa: (1a) (1b) int main(void) (2a) int main(int argc, char **argv) (2b) int main(int argc, char *[]argv) (2c) int main(int argc, char [][]argv) Näistä kaksi ensimmäistä ovat ns. parametrittomia ja kolme viimeistä ns. parametrillisia muotoja pääohjelmasta. Kaksi ensimmäistä muotoa ovat vaihtoehtoisia keskenään ja kolme viimeistä ovat vaihtoehtoisia keskenään. Yleensä C++ -ohjelmissa käytetään muotoa 1a silloin, kun ei tarvita käynnistysparametreja, ja muotoa 2a, kun tarvitaan syöttöparametreja. C++ -pääohjelman paluuarvon tyyppi on aina int. C++ -standardi ei määrittele paluuarvolle merkitystä; siinä ainoastaan luvataan arvon nolla merkitsevän, että ohjelman suoritus on loppunut onnistuneesti. Muut arvot ilmaisevat jonkinlaista virhetilannetta, jonka käyttöjärjestelmä tulkitsee. Paluuarvoa käytetään lähinnä ohjelmissa, jotka on tarkoitettu putkitettavaksi käyttöjärjestelmätasolla siten, että edellisen ohjelman tulostetieto on seuraavan ohjelman syöttötieto. Käyttöjärjestelmä päättää paluuarvon perusteella jatketaanko putken suorittamista vai keskeytetäänkö se. C++ -standardissa on määritelty kaksi symbolista vakiota, joita voi käyttää paluuarvoina. Nämä vakiot on määritelty otsikkotiedostossa <cstdlib>: 1. EXIT_FAILURE tarkoittaa, että ohjelman suoritus on tavalla tai toisella epäonnistunut ja 2. EXIT_SUCCESS tarkoittaa, että ohjelman suoritus on onnistunut. C++ -ohjelmalle voidaan välittää ohjelmaan käynnistämisen yhteydessä parametreja, kun käytetään aiemmin mainittua toista pääohjelman muotoa. Käyttöjärjestelmä välittää parametrit 1

2 C-tyyppisinä merkkijonoina, ts. merkkitaulukkoina, joiden viimeisenä merkkinä on nollamerkki. Ensimmäinen parametri ilmoittaa, kuinka monta parametria ohjelmalle välitettiin. Tämä arvo on aina suurempi kuin nolla, koska käyttöjärjestelmä välittää tavallisesti ohjelman nimen ensimmäisenä parametrina. Ellei ohjelman nimeä välitetä, parametritaulukon ensimmäisenä alkiona on tyhjä merkkijono ( ). Oletetaan, että ohjelma nimeltä echo on käynnistetty seuraavasti: echo hello Tällöin parametrien arvot ovat: argc muuttujan arvo on 2. Ensimmäisessä argv taulukon alkiossa (argv[0]) on osoitin merkkijonoon echo. Toisessa argv taulukon alkiossa (argv[1]) on osoitin merkkijonoon hello. Luonnollisesti parametrien nimet voivat olla mitä tahansa, mutta niiden tyyppien pitää olla em. eli int ja char** (tai char*[] tai char[][]). Yleisesti kuitenkin käytetään nimiä argc (eli argument count) ja argv (eli argument values). 2. Lukeminen ja tulostaminen C++-kielessä tulostamiseen käytetään operaattoria <<, jota kutsutaankin nykyään pääsääntöisesti tulostusoperaattoriksi. (Operaattorin toinen merkitys on kokonaislukujen bittien siirtäminen vasemmalle). Operaattori on määritelty standardikirjastossa jokaiselle C++ -kielen sisäiselle tyypille. Kirjaston yksi suunnitteluperiaate on se, että ohjelmoijan omien tyyppien tulostaminen ei eroa kielen sisäisten tyyppien tulostamisesta. Ohjelmoija voi siten määritellä tulostusoperaattorin omille tyypeilleen haluamallaan tavalla. Tähän asiaan tutustutaan kurssilla käsiteltäessä ylikuormittamista. C++ - standardikirjastossa on määritelty cout -niminen oliomuuttuja, joka huolehtii tulostamisesta konsoli-ikkunaan. Seuraava esimerkkiohjelma tulostaa tekstin Terve maailma! ja rivivaihdon. std::cout << Terve maailma! << std::endl; Huomioidaan ohjelmasta seuraavaa: Lähdekoodiin liitetään #include-direktiiveillä standardikirjaston otsikkotiedostoja, joissa esitettyjä tyyppejä ja funktioita ohjelmassa tarvitaan. Esimerkkiohjelmassa tällaisia ovat cout-oliomuuttujan ja operaattorin << esittelyt. Tulostettava teksti on ohjelmassa esitetty merkkijonovakiona. Tällaisesta ohjelmakoodissa esiintyvästä vakiosta käytetään myös nimitystä literaali. Literaali voi olla muunkin tyyppinen vakio kuin merkkijono. Merkintä std:: entiteettien cout ja endl edessä tarkoittaa sitä, että nämä entiteetit on määritelty standardikirjaston nimiavaruudessa std. Nimiavaruuksien avulla voidaan välttää samannimisten entiteettien esiintymiset ohjelmassa. Tällä kurssilla käytetään ainoastaan standardinimiavaruutta 2

3 std. Merkinnän käyttäminen voidaan tehdä tarpeettomaksi esimerkiksi käyttämällä usingdirektiiviä (using directive), jonka avulla nimiavaruudesta tuodaan kaikki entiteetit. Esimerkkiohjelma voidaan täten kirjoittaa myös muodossa: cout << Terve maailma! << endl; Voidaan myös käyttää using-esittelyä (using declaration), jolloin valitaan, mitkä entiteetit halutaan tuoda valitusta nimiavaruudesta. Esimerkkiohjelmasta tulisi tällöin: using std::cout; using std::endl; cout << Terve maailma! << endl; Siirrettävyyden ja ylläpidettävyyden vuoksi using-lauseiden näkyvyys tulisi rajata mahdollisimman suppeaksi. Yleensä ne tulisi sijoittaa funktioiden toteutuksiin. Edellisissä esimerkeissä ne on kirjoitettu main-funktioon. Esimerkkiohjelmasta huomataan myös, että tulostettavia arvoja voidaan ketjuttaa yhteen tulostuslauseeseen lisäämällä tulostettavien arvojen väliin operaattori <<. Tulostuksen muotoilu: minimileveys, täytemerkki ja tasaus C++-ohjelmassa voidaan tulostuksen muotoa muuttaa. C++:ssa tulostus on osittain kenttäpohjaista, toisin sanoen tulostettavalle arvolle voidaan määritellä kentän pituus. Tämä pituus on ainoastaan minimipituus: jos tulostettava arvo vie enemmän tilaa kuin kentän nykyinen leveys, kentän leveyttä kasvatetaan. Lisäksi kentän minimipituus asetetaan jokaisen arvon tulostamisen jälkeen nollaksi, mikä tarkoittaa sitä että jokaisen tulostettavan arvon kohdalla pitää, ohjelmoijan niin halutessa, määritellä kentän minimileveys. Kentän leveys voidaan määritellä ns. manipulaattorin avulla, joka asettaa tulostusvirran muotoilulippuun tietyn arvon. Standardimanipulaattorit on esitelty kahdessa otsikkotiedostossa: Otsikkotiedostossa <iostream> on esitelty ne manipulaattorit, jotka eivät ota parametreja, kuten endl. Otsikkotiedostossa <iomanip> on esitelty ne manipulaattorit, joilla on parametri, kuten minimileveyden asettamiseen käytettävä setw. Seuraavassa ohjelmassa käytetään manipulaattoreita setw, setfill, left ja right muotoilemaan tulostusta: 3

4 #include <iomanip> cout << C++ << << C++ << endl; cout << setw(5) << C++ << << C++ << endl; cout << setw(5) << setfill( * ) << C++ << << C++ << endl; cout << C++ << << C++ << endl; cout << setw(5) << setfill( * ) << left << C++ << << C++ << endl; cout << setw(5) << setfill( * ) << right << C++ << << setw(5) << C++ << endl; Ohjelma tulostaa samat kuusi riviä eri tavoin muotoiltuna seuraavasti: C++ C++ C++ C++ **C++ C++ C++ C++ C++** C++ **C++ **C++ Tulostuksesta ja koodista huomataan: 1. Oletusleveys on nolla merkkiä, joten tulostuskentät laajenevat automaattisesti. 2. Oletustasaus tehdään tulostuskentän oikeaan reunaan. 3. Asetettu tietokentän leveys nollataan jokaisen arvon tulostamisen jälkeen. 4. Täytemerkki ja tasaus säilyvät asettamisen jälkeen. Yhden sanan lukeminen ja lukuoperaattori Konsoli-ikkunasta lukeminen tapahtuu C++:n IOStream-kirjaston välityksellä, kuten konsoliikkunaan tulostaminenkin. Tässäkään tapauksessa ohjelmoijan omien tyyppien lukemisen ei tulisi erota C++ - kielen sisäisten tyyppien lukemisesta. Tätä varten on ylikuormitettu operaattori >>, joka tarkoittaa myös kokonaisluvun bittien siirtoa oikealle. Tätä operaattoria kutsutaankin nykyään pääsääntöisesti lukuoperaattoriksi. IOStream-kirjastossa on määritelty lukuoperaattorit kielen sisäisille tyypeille. Ko. kirjastossa on määritelty olio cin, jonka välityksellä konsolinäppäimistöltä syötettyjä tietoja luetaan. Lukuoperaattori lukee luettavan tiedon tyypin perusteella niin monta merkkiä kuin tyypin merkkiavaruuteen kuuluu, minkä jälkeen lukeminen loppuu ja merkit muutetaan ko. tyypin arvoksi. Lukeminen on oletusarvoisesti puskuroitua. Luettaessa poistetaan ensimmäiseksi alussa olevat valkomerkit (white space characters), joita ovat mm. rivinvaihto-, tabulaattori- ja välilyöntimerkit. Jäljellä olevat merkit jäävät seuraavan lukuoperaation luettavaksi. Lukeminen tapahtuu siis tietokentittäin. Jos lukemisen yhteydessä ei tallenneta yhtään merkkiä merkkijonoon, asetetaan virhelippu. Tilannetta käsitellään lyhyesti tuonnempana. Luettaessa merkkijonotyyppistä tietoa luettavien merkkien määrä voidaan rajata asettamalla tietokentän leveys samalla tavalla kuin tulostettaessa. Jos luettavien merkkien lukumäärää ei ole 4

5 asetettu, lopetetaan lukeminen ensimmäiseen valkomerkkiin, joka jää seuraavan lukutoimenpiteen käsiteltäväksi. Luettavien merkkien lukumäärä pitää aina asettaa kun luetaan merkkitaulukkoon tietoa, jotta lukuoperaatio ei kohdistuisi taulukon ulkopuolelle. Tarkastellaan seuraavaa ohjelmaa: #include <iomanip> const int TAULUKON_KOKO = 12; char hetu[taulukon_koko]; cout << Anna HETU: ; cin >> setw(taulukon_koko) >> hetu; cout << Syötit seuraavan HETU:n << hetu << endl; Jos esimerkissä ei olisi asetettu tietokentän leveyttä ja käyttäjä olisikin syöttänyt viisitoista merkkiä, niin kolme viimeistä merkkiä ja merkkijonon loppumisen ilmoittava nollamerkki olisi kirjoitettu taulukon ulkopuolelle, mahdollisesti jopa ohjelmakoodin päälle. Tätä tilannetta nimitetään puskurin ylivuodoksi (buffer overflow), joka on yksi yleisimmistä virusten ja muiden haittaohjelmien käyttämistä tietoturva-aukoista. Kun käytetään C++-standardikirjastossa määriteltyä merkkijonoluokkaa string, ei tarvitse välittää merkkijonon maksimipituudesta, jolloin edellä oleva esimerkki voidaan kirjoittaa muodossa: #include <string> cout << Anna HETU: ; string hetu; cin >> hetu; cout << Syötit seuraavan HETU:n << hetu << endl; C++:n merkkijonotyyppi varaa tarvittaessa automaattisesti lisää tilaa, kunnes merkkijonon maksimipituus täyttyy; tämä on yleensä sidoksissa int-tyypin kokoon, jolloin 32-bittissä järjestelmissä tämä maksimikoko on 2^32 1 eli merkkiä, ts. noin 4 gigatavua (olettaen että laitteistossa on niin paljon vapaata muistitilaa). Tämän vuoksi C++-ohjelmissa ei juurikaan käytetä C-tyyppisiä merkkijonoja eli merkkitaulukkoja; tämä karsii koodista yhden 5

6 mahdollisen virhepaikan. Haluttaessa voidaan luettavien merkkien lukumäärää rajoittaa myös string-oliota käytettäessä asettamalla tietokentän leveys manipulaattorin setw avulla. Syöttö- ja tulostusvirroilla (cin ja cout) on kolmesta lipusta (eli yksittäisestä bitistä) koostuva tila, joka kertoo, onko virta toimintakykyinen. Nämä bitit ovat eofbit, badbit ja failbit. Kun muuttujaa luettaessa ajaudutaan virhetilanteeseen, muuttujan sisältö on määrittelemätön ja cin-olion jokin virhelippu on asetettu. Tilaa voidaan lukea käyttämällä seuraavia metodeita, jotka kaikki palauttavat bool-tyyppisen arvon: Metodi good() fail() bad() eof() Selitys Palauttaa arvon true, jos kaikki on OK. Palauttaa arvon true, jos on tapahtunut lukuvirhe Palauttaa arvon true, jos virta on käyttökelvoton. Palauttaa arvon true, jos tiedoston loppumerkki on luettu. Lukemisen yhteydessä riittää usein tarkastella tietovuon virhetilaa good()-metodin avulla: #include <string> while (cin.good()) // Kutsutaan cin-olion metodia good() string sana; cout << Syötä tietoa: ; cin >> sana; cout << sana << endl; Edellä oleva ohjelma lukee näppäimistöä, kunnes tapahtuu virhetilanne. Näppäimistöä käytettäessä ainoa virhetilanne on se, että yritetään lukea ohi tiedoston loppumerkin, joka saadaan aikaan Windows/DOS-ympäristössä painamalla yhtä aikaa ctrl ja Z ja Unix/Linuxympäristöissä painamalla yhtä aikaa ctrl ja D. Jos virheellisessä tilanteessa yritetään lukea lisää tietoa, ei lukutoiminto johda mihinkään vaan se epäonnistuu automaattisesti. Täten ennen jokaista lukutoimenpidettä tulisi tarkistaa ja korjata virhetilanne poistamalla virhelippu kutsumalla tietovuon metodia clear. 6

7 Numeerisen arvon lukeminen, tulostaminen ja tulostamisen muotoilu Numeerisen arvon lukemiseen pätevät samat periaatteet kuin yhden sanan lukemiseen, paitsi että asetettua tietokentän leveyttä ei huomioida eikä sitä nollata. Seuraavissa esimerkeissä oletetaan että luettava tieto on kokonaislukutyyppi int. Syöte Luettu arvo % Määrittelemätön Taulukon toisessa tilanteessa lukutoiminto onnistuu, mutta tätä seuraava numeerisen tiedon lukuyritys epäonnistuu, koska % - merkki ei ole minkään numeron osa, muuten se olisikin luettu jo ensimmäisellä kerralla. Neljännessä tilanteessa lukeminen loppuu pistemerkkiin, koska se ei osa merkistöä, joita käytetään kokonaislukujen yhteydessä. Viimeisessä tilanteessa tapahtuu ylivuoto, koska syötettä ei voida esittää tyypin int avulla. Tällöin asetetaan cin-olion virhetilalippu. Kokonaislukujen tulkintaa voidaan ohjata myös kolmella manipulaattorilla: hex, jolloin lukujen kantalukuna on 16 ja käytettävä merkistö on abcdefABCDEFxX oct, jolloin lukujen kantalukuna on 8 ja käytettävä merkistö on dec, jolloin lukujen kantalukuna on 10 ja käytettävä merkistö on Jotta heksadesimaalimuodossa olevissa luvuissa voitaisiin käyttää x-kirjainta, sen edellä pitää olla numero 0. Esimerkiksi 0x12 hyväksytään, mutta muotoa x12 ei hyväksytä. Yhdistelmä 0x saa esiintyä vain kerran. Jos syötetty luku ei ala 0x, se tulkitaan alkavan sillä eli syöte 12 tulkitaan syötteeksi 0x12. Oktaalilukujen alussa olevat numerot 0 tulkitaan yhdeksi nollaksi. Esimerkiksi tulkitaan sen olevan 012. Jos syötetty luku ei ala numerolla 0, sen tulkitaan olevan kuitenkin alussa eli syöte 12 tulkitaan syötteeksi 012. Kun luetaan reaalilukua, sallitut merkit ovat eE. Piste ja e-merkit voivat esiintyä peräkkäin. Mikäli luvussa esiintyy E tai e-kirjain, luvussa täytyy esiintyä jokin numero sekä ennen että jälkeen kirjaimen. Kirjainta seuraavan numeron edessä voi olla myös etumerkki. Seuraavassa on esimerkkejä hyväksytyistä reaaliluvuista: e5 1.e e

8 Seuraavassa ohjelmassa kysytään käyttäjältä reaalilukuna lämpötila Celsius-asteina ja ohjelma tulostaa lämpötilan Fahrenheit-asteikolla. double celsius; cout << Anna lämpötila celsius-asteina: ; cin >> celsius; if (!cin.good()) cout << Luku ei kelpaa << endl; cin.clear(); else double farenheit = 1.8 * celsius + 32; cout << celsius << Celsius-astetta on Fahrenheit-asteikolla << farenheit << endl; Ohjelma havaitsee virheellisen syötteen, mutta ei pyydä uutta arvoa. Tällaisen rakenteen toteuttamiseksi tulisi syöttövirrasta poistaa edellinen virheellinen syöte, kuten myöhemmin näytetään. Numeeriset arvot tulostetaan täsmälleen samoin kuin merkkijonot eli käyttämällä tulostusoperaattoria, kuten edellä olevassa esimerkissä näytettiin. Kun ohjelmassa käytetään reaalilukuja, niin usein halutaan muotoilla lukujen tulostusta esimerkiksi rajoittamalla tulostettavien desimaalien määrää. Lukujen muotoilua varten otsikkotiedostoissa <ios> ja <iomanip> on määritelty mm. seuraavat manipulaattorit: Manipulaattori Tarkoitus showpos Positiivisten lukujen yhteyteen tulostetaan + merkki noshowpos Positiivisten lukujen yhteydessä ei tulosteta merkkiä (oletus) left Tasataan luku vasempaan reunaan tulostuskenttää right Tasataan luku oikeaan reunaan tulostuskenttää (oletus) setw(leveys) Asetetaan tulostuskentän minimileveys (oletuksena 0) fixed Käytetään reaalilukujen yhteydessä desimaalimuotoa scientific Käytetään reaalilukujen yhteydessä tieteellistä muotoa (E) setprecision(luku) Reaaliluvun merkitsevien numeroiden lukumäärä showpoint Tulostetaan aina reaalilukujen yhteydessä desimaalipiste Muut manipulaattorit löytää esimerkiksi Cppreference-sivustolta osoitteesta 8

9 Seuraavassa taulukossa on esimerkkejä reaaliluvun muotoilulippujen vaikutuksesta: setprecision() normaali e showpoint e fixed scientific e e e e-02 Ainoastaan tulostuskentän leveys nollataan jokaisen luvun yhteydessä, muut muotoilulippujen asetukset säilyvät ensimmäisen asetuksen jälkeen. Yhden rivin lukeminen Edellä esitetyt lukutoimenpiteet olivat kaikki ns. muotoiltuja lukutoimenpiteitä, joissa lukemiseen vaikuttavat muotoiluliput kuten esimerkiksi tietokentän leveys. Muotoiltujen lukutoimintojen lisäksi IOStream-kirjasto määrittelee metodeja ja funktioita, joiden avulla voidaan lukea merkkityyppistä tietoa raakadatana, ilman että siihen kohdistetaan mitään muotoilutoimenpiteitä. Käytetyin muotoilemattoman lukemisen funktion on luokalle string määritelty funktio getline, jonka prototyyppi on seuraava: std::istream& getline(std::istream& is, std::string& str, char delim = \n ); Funktio palauttaa ensimmäisen parametrin. Kolmas parametri voidaan jättää pois, jolloin lopettamismerkkinä on rivinvaihtomerkki ( \n ). Funktio toimii seuraavasti: 1. Tyhjennetään parametrina annettu merkkijono. 2. Luetaan silmukassa annetusta vuosta merkkejä ja lisätään ne merkkijonoon, kunnes tapahtuu jokin seuraavista: a. Luetaan tiedoston loppumerkki, jolloin eof-metodi palauttaa arvon true, b. Luettu merkki oli annettu lopetusmerkki (delim), joka poistetaan vuosta mutta ei lisätä merkkijonoon, tai c. Merkkijonon maksimipituus on saavutettu, jolloin fail-metodi palauttaa arvon true. Jos yhtään merkkiä ei luettu, asetetaan lippu fail, jolloin tietovuon metodi fail() palauttaa arvon true. Funktiota käytetään seuraavasti: 9

10 #include <string> cout << Anna etunimesi välilyönnillä erotettuna: ; string etunimet; getline(cin, etunimet); Kun toteutetaan konsolipohjaista käyttöliittymää getline-funktiota käyttämällä, niin ennen funktion kutsua pitää poistaa lukuoperaattorin mahdollisesti jäljelle jättämä rivinvaihtomerkki. Tämä tapahtuu kutsumalla istream-luokan metodia ignore, jolla on seuraavat muodot: std::istream& ignore(); std::istream& ignore(int lkm); std::istream& ignore(int lkm, int delim); Näistä ensimmäinen poistaa yhden merkin merkkipuskurista. Toinen poistaa annetun lukumäärän verran merkkejä merkkipuskurista ja kolmas poistaa annettuun lopetusmerkkiin saakka korkeintaan annetun lukumäärän verran merkkejä. Jos lukumäärä on yhtä suuri kuin suurin mahdollinen kokonaisluku 1, niin silloin poistetaan kaikki merkit kunnes luetaan annettu lopetusmerkki tai tiedoston loppumerkki. Jos puskuri tyhjenee täysin, jäädään odottamaan lisää merkkejä tuhottavaksi. Konsolipohjaisessa käyttöliittymässä kannattaa käyttää seuraavaa rakennetta: int luku; cin >> luku; cin.clear(); cin.ignore(numeric_limits<int>::max(), \n ); string rivi; getline(cin, rivi); 1 saadaan kutsumalla funktiota std::numeric_limits<int>::max(), joka on määritelty otsikkotiedostossa <limits> 10

11 3. Merkkijonon muuttaminen numeeriseksi arvoksi ja päinvastoin Kuten edellä on tullut ilmi, lukujen lukeminen virheettömästi käyttämällä konsolipohjaista käyttöliittymää on varsin hankalaa. Yksi tapa tämän hankaluuden voittamiseksi on lukea kaikki tiedot konsolilta merkkijonoina ja muuttaa ne tarvittaessa luvuiksi käyttäen hyväksi muotoiltua lukutoimenpiteitä merkkijonoon. Tämä onnistuu käyttämällä vuota std::stringstream, joka on määritelty otsikkotiedostossa <sstream>. Seuraavassa esimerkissä vuota käytetään lukemaan kaksi kokonaislukua: #include <iomanip> #include <string> #include <sstream> int luku1 = 0; int luku2 = 0; cout << Anna ensimmäinen luku: ; string luku; getline(cin, luku); if (cin.good()) stringtream strm1(luku); strm1 >> luku1; cout << Anna toinen luku: ; getline(cin, luku); if (cin.good()) stringstream strm2(luku); strm2 >> luku2; double keskiarvo = (luku1 + luku2) / 2.0; cout << Lukujen keskiarvo on << setprecision(2) << showpoint << keskiarvo; 11

12 Tätä merkkijonovuota voidaan myös käyttää muuttamaan numeerinen tieto merkkijonoksi: #include <iomanip> #include <string> #include <sstream> int luku1 = 0; int luku2 = 0; cout << Anna ensimmäinen luku: ; string luku; getline(cin, luku); if (cin.good()) stringtream strm1(luku); strm1 >> luku1; cout << Anna toinen luku: ; getline(cin, luku); if (cin.good()) stringtream strm2(luku); strm2 >> luku2; double keskiarvo = (luku1 + luku2) / 2.0; stringstream strm3; strm3 << setprecision(2) << showpoint << keskiarvo; string str = strm3.str(); cout << Lukujen keskiarvo on << str; 4. Funktiot C++:ssa aliohjelmaa ja funktiota ei eroteta toisistaan; aliohjelmana voidaan pitää funktiota, jonka paluutyyppi on void, ts. kyseessä on funktio, joka ei palauta mitään. Jotta funktiota voidaan käyttää hyväksi eli kutsua, sen muodon on oltava selvillä siinä ohjelman kohdassa, jossa funktiota kutsutaan. Tätä muodon selvittämistä kutsutaan funktion esittelyksi ja funktion esittelylausetta funktion prototyypiksi. Esittelylauseet voivat olla missä ohjelmakoodin kohdassa tahansa; esittelyt ovat voimassa esittelylauseesta lähtien esittelylauseen sisältävän näkyvyysalueen loppuun asti. Yleensä esittelylauseet kerätään yhteen, joko C++ tiedoston alkuun #include-lauseiden jälkeen tai 12

13 otsikkotiedostoihin. Otsikkotiedostoja on käytettävä silloin, kun funktiota on tarkoitus kutsua useasta eri tiedostosta. Esittelyssä funktion nimeen liitetään sen palauttaman arvon tyyppi ja sen tarvitsemat parametrien tyypit ja mahdollisesti parametrien oletusarvot. C++ -ohjelmassa saa olla samannimisiä funktioita, kunhan niiden parametriluettelot poikkeavat toisistaan. Tätä sanotaan funktion ylikuormittamiseksi. Esittelylauseessa annetaan aina funktion paluuarvon tyyppi, funktion nimi ja sulkeissa oleva parametriluettelo. Esittelylause päättyy puolipisteeseen. Parametriluettelossa on lueteltu funktion tarvitsemat parametrit pilkulla erotettuna toisistaan. Jos funktiolla ei ole yhtään parametria, parametriluettelo on tyhjä. Parametrista ilmoitetaan tyyppi ja mahdollisesti parametrin nimi. Lisäksi parametrilla voi olla oletusarvo. Esittelyssä riittää siis parametrien yhteydessä vain niiden tyyppi, mutta koska esittelylause on ainoa kohta, jossa funktion käyttäjä voi saada tietoa funktiosta, kannattaa parametri nimetä sen tarkoituksen mukaisesti ja sisällyttää nimi esittelylauseeseen. Parametreille voidaan antaa oletusarvoja parametriluettelon lopusta lähtien, jolloin annettuja arvoja käytetään, ellei funktion kutsussa parametria käytetä. Oletusparametrien avulla voidaan vähentää funktioiden kuormittamisen tarvetta. Seuraavat kaksi esimerkkifunktiota palauttavat double-tyyppisen arvon ja niillä on yksi doubletyyppinen parametri: double converttocelsius(double farenheit); double converttofarenheit(double celsius); Seuraavassa esittelylausessa esitellään funktio nimeltään calculatedistance, joka palauttaa double tyyppisen arvon. Funktiolla on kuusi double tyyppistä parametria, joista kolmella viimeisellä on oletusarvo: double calculatedistance(double x1, double y1, double z1, double x0 = 0, double y0 = 0, double z0 = 0); Mikäli funktiota kutsutaan vain kolmella parametrilla, käytetään funktiossa muuttujien x0, y0 ja z0 arvoina nollaa. Jotta funktio suorittaisi halutut toiminnot, se pitää määritellä. Samalla funktiolla saa olla vain yksi määrittely, sen sijaan esittelylauseita voi olla useita. Kahden funktion katsotaan olevan samoja jos niiden nimet ovat samoja ja parametriluettelo on sama. Kaksi samannimistä funktiota, joilla on eri parametriluettelo, tulkitaan eri funktioiksi, jotka molemmat on määriteltävä erikseen. Määrittelylause alkaa funktion esittelylauseella ilman lopettavaa puolipistettä, jonka tilalle tulee funktion toiminnat toteuttava määrittelylohko. Määrittelylauseet sijoitetaan aina johonkin C++kooditiedostoon. Määrittelylauseen parametriluettelossa pitää olla kaikilla käytettävillä parametreilla nimi. Määrittelyn yhteydessä parametreille ei saa antaa oletusarvoa. 13

14 Seuraavassa esimerkissä määritellään edellä esitellyt kolme funktiota: #include <cmath> // sqrt funktio double converttocelsius(double farenheit) return 5 * ( farenheit 32 ) / 9; double converttofarenheit(double celsius) return * celsius / 5; double calculatedistance(double x1, double y1, double z1, double x0, double y0, double z0) using std::sqrt; double distance = (x1 x0) * (x1 x0); distance += (y1 y0) * (y1 y0); distance += (z1 z0) * (z1 z0); distance = sqrt(distance); return distance; Lisäksi on mahdollista määritellä funktioita, joilla voi olla vaihtuva määrä parametreja, mutta koska C++:ssa on mahdollista kuormittaa funktion nimeä eri parametriluetteloilla, niin tällaisia funktioita ei enää C++:ssa juuri käytetä. Tekniikka on kääntäjäriippuvainen mutta rajapinnat on standardoitu otsikkotiedostossa <cstdarg>. Tärkeimpiä asioita funktioiden toiminnan ymmärtämisessä ja toteuttamisessa on mieltää, miten funktiolle välitetään sen tarvitsemat parametrit. C++-kielessä parametrit voidaan välittää joko arvo- tai viittausparametreina. Funktion arvoparametrit Arvotyyppisessä parametrien välityksessä parametriksi annettu muuttujan arvo kopioidaan määrityksen yhteydessä olevaan muuttujaan. Tämä on parametrinvälityksen oletusmuoto C++:ssa. Tällöin siis alkuperäisen muuttujan arvo ei muutu, vaikka funktiolle annettua arvoa muutetaan funktiossa. Seuraavassa esimerkissä funktiossa muutetaan annettua parametria, joka on sille annettu käyttäen arvoparametria: 14

15 void muuta(int arvo); int a = 10; cout << a ( << hex << &a << ) = << dec << a << endl; muuta(a); cout << a ( << hex << &a << ) = << dec << a << endl; void muuta(int arvo) cout << arvo ( << hex << &arvo << ) = << dec << arvo << endl; arvo = 123; cout << arvo ( << hex << &arvo << ) = << dec << arvo << endl; Ohjelma voi tulostaa esimerkiksi seuraavaa (muuttujien muistiosoitteet voivat vaihtua): a (0xfedc3823) = 10 arvo (0xfedc3900) = 10 arvo (0xfedc3900)= 123 a (0xfedc3823)= 10 Tulostuksesta nähdään että pääohjelman muuttujan arvo ei muutu ja että parametrimuuttujan muistiosoite on eri kuin pääohjelman muuttujan. Funktion viiteparametrit Jos halutaan että funktiossa muutettu arvo päivittyy myös parametrina annettuun muuttujaan, tieto on syytä välittää käyttäen viitetyypistä parametrin välitystä. Tällöin ei välitetä funktiolle muuttujan arvoa vaan sen osoite, jota kautta kutsuva funktio ja kutsuttava funktio jakavat saman muistialueen ja jommassakummassa funktiossa tapahtuva muutos näkyy molemmissa funktioissa. Kun käytetään viiteparametria, niin ei kopioida parametrina annettua muuttujaa toiseen muuttujaan, mikä on tärkeää varsinkin silloin kun välitetään suuria olioita. Tästä syystä C++:ssa on tapana välittää olioparametrit käyttäen viiteparametria, koska olioiden kopioiminen voi olla erittäin paljon resursseja vievä toimenpide. Arvoparametrina välittäminen ei aina ole edes mahdollista. Kun käytetään viittaustyyppistä viiteparametria, ei tarvitse välittää eksplisiittisesti muuttujien osoitteita, vaan osoitteiden välittämisen hoitaa kääntäjä. Viittaustyyppisiä muuttujia käytetään täsmälleen samoin kuin normaaleja muuttujia. Viittaustyyppinen parametri merkitään 15

16 parametriluettelossa parametrin tyypin yhteydessä olevalla & -merkillä. Seuraavassa esimerkissä käytetään viittaustyyppistä parametrien välitystä: void muuta(int& arvo); int a = 10; cout << a ( << hex << &a << ) = << dec << a << endl; muuta(a); cout << a ( << hex << &a << ) = << dec << a << endl; void muuta(int& arvo) cout << arvo ( << hex << &arvo << ) = << dec << arvo << endl; arvo = 123; cout << arvo ( << hex << &arvo << ) = << dec << arvo << endl; Ohjelman tulostus on seuraavan kaltainen (ainoastaan muistiosoitteet voivat vaihtua): a (0xfedc3823) = 10 arvo (0xfedc3823) = 10 arvo (0xfedc3823)= 123 a (0xfedc3823)= 123 Usein halutaan, varsinkin olioita parametreina välitettäessä, välttää parametrin kopiointi, vaikka parametrimuuttujaa ei haluttaisikaan muuttaa funktiossa. Tällöin käytetään viiteparametreja. Jotta muuttujaa ei vahingossa muutettaisi funktiossa, voidaan funktiolta evätä oikeus muuttaa parametrin arvoa välittämällä parametri vakioviittauksen avulla, kuten seuraavassa esimerkissä: 16

17 #include <string> std::ostream& print(const std::string& merkkijono); std::ostream& printnl(const std::string& merkkijono); printnl( Terve maailma\n ); std::ostream& print(const std::string& str) return std::cout << str; std::ostream& printnl(const std::string& str) return print(str) << std::endl; Jos jommassakummassa funktiossa yritettäisiin muuttaa str-parametrin arvoa, kääntäjä antaisi virheilmoituksen. Parametri välitetään siis vakiomuotoisena viiteparametrina eikä arvoparametrina tehokkuussyistä, koska tällöin ei muodosteta str-muuttujaan kopiota tulostettavasta merkkijonosta. Osoittimet funktion parametreina Kun funktion parametrina on osoitin, se välitetään käyttäen arvovälitystä. Osoitin viittaa kuitenkin johonkin muistiosoitteeseen, joten sen kautta voidaan vaikuttaa samaan osoitteeseen kuin alkuperäinen osoitinmuuttuja. Näin ollen osoittimia käyttämällä saa aikaan vaikutukseltaan samantapaisen funktion kuin viiteparametreilla. Näissä kummassakin tapauksessa voidaan puhua muuttujaparametreista, kuten teoksessa [Hie], s Kun parametri välitetään muuttujaparametrina käyttäen osoitinta parametrina, ei funktiolle annetakaan muuttujan arvoa vaan osoite, jossa muuttuja sijaitsee tietokoneen muistissa. Jokaisella muuttujalla paitsi literaalilla on muistiosoite, myös vakiomuuttujilla. Muuttujan osoite saadaan selville osoiteoperaattorin & avulla. Toinen osoitinmuuttujien yhteydessä käytettävä operaattori on sisältöoperaattori *. Muistipaikan sisältöön viittaamista tämän operaattorin avulla kutsutaan myös dereferenssiksi. Parametrien välityksessä osoiteoperaattoria käytetään funktiokutsun yhteydessä, ja sisältöoperaattoria käytetään kutsuttavan funktion määrittelyssä, kun halutaan lukea tai kirjoittaa parametrin arvoa. Parametriluettelossa osoitintyyppinen parametri ilmaistaan liittämällä tarkoitetyyppiin * - merkki. Seuraavassa esimerkissä on toteutettu edellisen esimerkin kanssa samalla tavoin toimiva ohjelma käyttäen osoitintyyppistä muuttujaparametria: 17

18 void muuta(int* arvo); int a = 10; cout << a ( << hex << &a << ) = << dec << a << endl; muuta(&a); // Parametriksi muuttujan a muistiosoite cout << a ( << hex << &a << ) = << dec << a << endl; void muuta(int* arvo) cout << arvo ( << hex << arvo << ) = << dec << *arvo << endl; *arvo = 123; cout << arvo ( << hex << arvo << ) = << dec << *arvo << endl; Ohjelman tulostus on seuraava (jälleen ainoastaan muistiosoitteet voivat vaihtua): a (0xfedc3823) = 10 arvo (0xfedc3823) = 10 arvo (0xfedc3823)= 123 a (0xfedc3823)= 123 Kumpaa muuttujaparametrien välitystapaa käyttää, on lähes puhtaasti tyylikysymys, mutta osoitemuuttujat ja viittausmuuttujat eroavat toisistaan seuraavasti: Viittausmuuttujaa käytettäessä pitää olla olemassa jokin muuttuja, johon viittausmuuttuja kiinnitetään lopullisesti. Viittausmuuttujan kohdetta ei voi vaihtaa määrityksen jälkeen. Osoitinmuuttujan määrityksen yhteydessä osoittimen arvon voi asettaa nollaksi, toisin sanoen osoitettavaa muuttujaa ei tarvitse olla olemassa. Osoitinmuuttuja voidaan muuttaa osoittamaan toiseen muuttujaan myös määrityksen jälkeen. Funktion paluuarvo Funktion paluuarvo voi olla jokin seuraavista: void-tyyppi, jolloin funktio ei palauta mitään (funktio on aliohjelma), tavallinen tyyppi, jolloin paluuarvo kopioidaan, osoitintyyppi, jolloin välitetään palautettavan arvon sisältämän muuttujan osoite viittaustyyppi, jolloin välitetään muodostettu viittausmuuttuja, joka viittaa palautettavan arvon sisältämän muuttujaan. 18

19 Kahdessa viimeisessä tavassa on yksi C++-kielen Akilleen kantapäistä. Se muuttuja, johon viitataan, on voitu tuhota, kun funktiosta palataan sitä kutsuvaan funktioon. Tällainen tilanne voi syntyä varsinkin, kun palautettava viite on viittaus parametrimuuttujaan tai paikalliseen muuttujaan. Nykyaikaiset kääntäjät antavat kyseisissä tilanteissa varoituksia ja virheilmoituksia, joten kannattaa tulkita tarkoin myös kääntäjän antamat varoitukset, nämäkin voivat johdattaa ohjelmointivirheen jäljille. Taulukkotyypin käyttö parametrina ja paluuarvon tyyppinä C++:ssa on mahdollista käyttää ohjelmissa C-kielen mukanaan tuomaan taulukkotyyppiä, jonka koko määritellään käännösaikana eikä sitä voida ohjelmallisesti muuttaa. Taulukon alkioiden tyyppi voi olla mikä tahansa C++:n tyyppi, jolle on määritelty oletusmuodostin, myös taulukkotyyppi, jolloin voidaan rakentaa moniulotteisia taulukoita. Oletusmuodostimen käsitteeseen palataan perehdyttäessä oliopohjaiseen ohjelmointiin. Taulukkomuuttuja määritellään muuttujan perään lisättävillä hakasulkeilla, joiden sisällä ilmaistaan taulukon koko. Tätä kokoa ei ole mahdollista ohjelmallisesti selvittää, joten taulukon koko on aina välitettävä taulukkoa käyttäville funktioille. Taulukon nimi on samalla osoitin ensimmäiseen alkioon. Taulukko välitetään funktioille osoittimena taulukon ensimmäiseen alkioon. Vastaavasti, haluttaessa palauttaa taulukko, paluutyypin arvona on osoitin taulukon ensimmäiseen alkioon. Seuraavassa on esitelty funktiot, joiden ensimmäisenä parametrina on taulukkotyyppi ja toisena tyyppinä taulukon alkioiden lukumäärä. Ensimmäinen funktio palauttaa luettujen alkioiden lukumäärän ja toinen funktio ei palauta mitään. int luelampotilat(double * lampotilat, int koko); void tulostalampotilat(double * lampotilat, int elementit); 19

20 Niiden toteutukset voivat olla esimerkiksi: int luelampotilat(double * lampotilat, int koko) cin.clear(); int count = 0; while (cin.good() && count < koko) cout << Anna lämpötila: ; double arvo; cin >> arvo; if (cin.good()) // jos lukeminen onnistui lampotilat[count] = arvo; ++count; if (!cin.good()) return -1; return count; void tulostalampotilat(double * lampotilat, int elementit) for (int i = 0; i < elementit; ++i) cout << i + 1. kuukausi: << lampotilat[i] << endl; Funktioita voitaisiin käyttää pääohjelmassa esimerkiksi seuraavasti: const int TAULU_KOKO = 12; double taulu[taulu_koko]; int lkm = luelampotilat(taulu, TAULU_KOKO); tulostalampotilat(taulu, lkm); Olioita sisältäviin taulukoihin palataan myöhemmin. Lähteet [CppTut] Juustila, A. Kettunen, H. Kilpi, T. Räisänen, T. Vesanen A.: C++ -tutoriaali (Opetusmoniste) 2004, Saatavana [Hie] Hietanen, P.: C++ ja olio-ohjelmointi, 3. laitos, Docendo

UNIVERSITY OF OULU DEPARTMENT OF INFORMATION PROCESSING SCIENCE

UNIVERSITY OF OULU DEPARTMENT OF INFORMATION PROCESSING SCIENCE 1 UNIVERSITY OF OULU DEPARTMENT OF INFORMATION PROCESSING SCIENCE OPETUSMONISTEET SARJA C11 JUUSTILA ANTTI KETTUNEN HARRI KILPI TEEMU RÄISÄNEN TONI VESANEN ARI C++- OHJELMOINTIKURSSIN OHEISMATERIAALI ISBN

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

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

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

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

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

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

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille: Merkkijonot C-kielessä merkkijono on taulukko, jonka alkiot ovat char -tyyppiä. Taulukon viimeiseksi merkiksi tulee merkki '\0', joka ilmaisee merkkijonon loppumisen. Merkkijono määritellään kuten muutkin

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

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

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen

Lisätiedot

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

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU Ohjelmointi 2 Jussi Pohjolainen TAMK» Tieto- ja viestintäteknologia Tietotyypeistä C++ - kielessä useita tietotyyppejä Kirjaimet: char, wchar_t Kokonaisluvut: short, int, long Liukuluvut: float, double

Lisätiedot

12 Mallit (Templates)

12 Mallit (Templates) 12 Mallit (Templates) Malli on määrittely, jota käyttämällä voidaan luoda samankaltaisten aliohjelmien ja luokkien perheitä. Malli on ohje kääntäjälle luoda geneerisestä tyyppiriippumattomasta ohjelmakoodista

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 12. huhtikuuta 2019 Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä. Yksi A4-kokoinen lunttilappu

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

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

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Osoittimet Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Muistilohkon koko riippuu muuttujan tyypistä, eli kuinka suuria arvoja muuttujan

Lisätiedot

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

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat: 1. Luokan jäsenet Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat: class luokan_nimi tyypit: enum, struct, class, typedef

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita Käyttäjän kanssa keskusteleva ohjelma 1 Kirjoittaminen konsolinäkymään //Java ohjelma, joka tulostaa konsoli-ikkunaan public class HeiMaailma { public void aja() { // kirjoitus ja

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. I Johdanto ohjelmointiin C++kielellä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. I Johdanto ohjelmointiin C++kielellä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk I Johdanto ohjelmointiin C++kielellä Sisältö 1. C++-kielen lyhyt historia 2. C++-kielen ominaisuuksia tiivistettynä 3. Peruskäsitteitä 4. C++-ohjelman looginen

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Ohjelmointi 1 Taulukot ja merkkijonot

Ohjelmointi 1 Taulukot ja merkkijonot 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

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Osoittimet. Mikä on osoitin?

Osoittimet. Mikä on osoitin? Osoittimet 7 Osoittimet On aika siirtyä käsittelemään osoittimia, C++:lle elintärkeätä ominaisuutta. Osoittimet ovat tärkeitä, koska ne luovat perustan muistin dynaamiselle varaukselle ja käytölle. Ne

Lisätiedot

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

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla Tietojen syöttäminen ohjelmalle Tähän mennessä on käsitelty Javan tulostuslauseet System.out.print ja System.out.println sekä ohjelman perusrakenneosat (muuttujat, vakiot, lauseet). Jotta päästään tekemään

Lisätiedot

Kääntäjän virheilmoituksia

Kääntäjän virheilmoituksia OHJ-1101 Ohjelmointi 1e 2008-09 1 Kääntäjän virheilmoituksia Kun progvh2 ohjelma käännetään antaa tutg++ seuraavat virheilmoitukset ja varoitukset: proffa> tutg++ progvh2.cc progvh2.cc:29:13: warning:

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

Lisätiedot

Kirjoita, tallenna, käännä ja suorita alla esitelty ohjelma, joka tervehtii käyttäjäänsä.

Kirjoita, tallenna, käännä ja suorita alla esitelty ohjelma, joka tervehtii käyttäjäänsä. Tehtävä 1. Kirjoita, tallenna, käännä ja suorita alla esitelty ohjelma, joka tervehtii käyttäjäänsä. #include /* mm. I/O-funktiot */ #include /* mm. EXIT_SUCCESS */ /*main-funktio,

Lisätiedot

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot Tiedosto yhteenkuuluvien tietojen joukko, joka on tavallisesti talletettu pysyväismuistiin muodostuu tietueista, jotka voivat olla keskenään samanlaisia tai vaihdella tyypiltään tiedostot ovat joko tekstitiedostoja

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 16.3.2009 1 / 40 Kertausta: tiedostosta lukeminen Aluksi käsiteltävä tiedosto pitää avata: tiedostomuuttuja = open("teksti.txt","r")

Lisätiedot

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

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

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

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

Lisätiedot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet String-merkkijonoluokka 1 Ohjelmointikielten merkkijonot Merkkijonot ja niiden käsittely on välttämätöntä ohjelmoinnissa Valitettavasti ohjelmointikielten tekijät eivät tätä ole ottaneet

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 21.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 21.1.2009 1 / 32 Tyypeistä Monissa muissa ohjelmointikielissä (esim. Java ja C) muuttujat on määriteltävä ennen

Lisätiedot

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 11. Luokka Opetellaan seuraavaksi, miten omia luokkia kirjoitetaan. Aikaisemmin olikin jo esillä, että luokka on tietorakenne, joka sisältää sekä tiedot (attribuutit) että niitä käsittelevät aliohjelmat

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 3.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 3.3.2010 1 / 44 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

Lisätiedot

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

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

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

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

Lisätiedot

Muuttujien roolit Kiintoarvo cin >> r;

Muuttujien roolit Kiintoarvo cin >> r; Muuttujien roolit Muuttujilla on ohjelmissa eräitä tyypillisiä käyttötapoja, joita kutsutaan muuttujien rooleiksi. Esimerkiksi muuttuja, jonka arvoa ei muuteta enää kertaakaan muuttujan alustamisen jälkeen,

Lisätiedot

11. oppitunti III. Viittaukset. Osa. Mikä on viittaus?

11. oppitunti III. Viittaukset. Osa. Mikä on viittaus? Osa III 11. oppitunti Viittaukset Kahdessa viime luvussa opit käyttämään osoittimia kohteiden käsittelyyn vapaalla muistialueella sekä viittaamaan noihin kohteisiin epäsuorasti. Tässä luvussa käsiteltävät

Lisätiedot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

Lisätiedot

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

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 7.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 7.2.2011 1 / 39 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi ero taulukkoon taulukossa alkiot samantyyppisiä tietueessa alkiot voivat olla erityyppisiä tiedot kuitenkin yhteen kuuluvia ohjelmoinnin perusteet,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 19.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 19.1.2011 1 / 39 Haluatko antaa palautetta luennoista? Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

Lisätiedot

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

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

Merkkijonot ja C++ Antti-Juhani Kaijanaho. 5. maaliskuuta 2001. 1 Vanhojen C++-kääntäjien käyttäjät, huomio! 2 Merkkijonojen perusteet

Merkkijonot ja C++ Antti-Juhani Kaijanaho. 5. maaliskuuta 2001. 1 Vanhojen C++-kääntäjien käyttäjät, huomio! 2 Merkkijonojen perusteet Merkkijonot ja C++ Antti-Juhani Kaijanaho 5. maaliskuuta 2001 1 Vanhojen C++-kääntäjien käyttäjät, huomio! Tämä kirjoitus perustuu vuonna 1998 julkistettuun C++-kielen kansainväliseen ISO-standardiin.

Lisätiedot

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

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman

Lisätiedot

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

C++11 lambdat: [](){} Matti Rintala C++11 lambdat: [](){} Matti Rintala bool(*)(int) Tarve Tarve välittää kirjastolle/funktiolle toiminnallisuutta Callback-funktiot Virhekäsittely Käyttöliittymät Geneeristen kirjastojen räätälöinti STL:n

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

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

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. 1 Luokka Murtoluku uudelleen Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. Sievennettäessä tarvitaan osoittajan ja nimittäjän suurin yhteinen tekijä (syt).

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

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

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi 1 C++11 Syntaksi Jari-Pekka Voutilainen 13.4.2012 2 Range-for Iteroi säiliön kaikki alkiot for-silmukassa. Säiliöltä vaaditaan begin- ja end-iteraattorit. Pätee kaikille C++11 STL-säiliöille, taulukoille,

Lisätiedot

Ohjelmointi funktioiden avulla

Ohjelmointi funktioiden avulla Ohjelmointi funktioiden avulla 8 Ohjelmointi funktioiden avulla Ohjelman jakaminen hallittaviin osiin on idea, joka on perustana kaikille ohjelmointikielille. Funktio on kaikkien C++-ohjelmien perusosa.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 1.3.2010 1 / 36 Monikko Monikko (engl. tuple) muistuttaa listaa, mutta monikon sisältöä ei voi muuttaa sen jälkeen,

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 14.9.2016 CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 17.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.2.2010 1 / 41 Sanakirja Monissa sovelluksissa on tallennettava rakenteeseen avain arvo-pareja. Myöhemmin rakenteesta

Lisätiedot

12. Näppäimistöltä lukeminen 12.1

12. Näppäimistöltä lukeminen 12.1 12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 4 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten lauseisiin, lausekkeisiin ja aliohjelmiin liittyvät kysymykset. Tehtävä 1. Mitä

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 13.9.2017 CS-A1111 Ohjelmoinnin peruskurssi Y1 13.9.2017 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

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

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys Loogisia operaatioita - esimerkkejä Tänään on lämmin päivä ja perjantai Eilen satoi ja oli keskiviikko tai tänään on tiistai. On perjantai ja kello on yli 13 Ei ole tiistai tai ei sada. Ei pidä paikkaansa,

Lisätiedot

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

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

Binäärioperaatiot Tiedostot ja I/O

Binäärioperaatiot Tiedostot ja I/O C! Binäärioperaatiot Tiedostot ja I/O 8.3.2018 Tiedotteita Viimeinen luento to 29.3. Ohjelmointitehtävä, ohjelmointikoe ja niiden järjestelyt Ohjelmointikokeeseen ilmoittautuminen auki 2 .c tiedostot ja.h

Lisätiedot

Osoittimet ja taulukot

Osoittimet ja taulukot C! ja taulukot 1.2.2018 Tiedotteita Tämän jälkeen taas pari väliviikkoa (tenttiviikko) Seuraava luento 22.2. Laskareita ei tenttiviikolla 12.2. 16.2. 2 ja muisti Muisti Keskusyksikkö Suorittaa muistissa

Lisätiedot

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

// Tulostetaan double-tyyppiseen muuttujaan hinta tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf(%.1f euros. Lue kukin tehtävänanto huolellisesti ja kokonaisuudessaan ennen kuin aloitat vastaamisen. Kustakin tehtävästä voi saada 0 6 pistettä. Tentin läpipääsyraja on 12 / 24 pistettä. Ratkaisut palautetaan WETO-järjestelmään

Lisätiedot

Harjoitus 3 (viikko 39)

Harjoitus 3 (viikko 39) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Vältä liian pitkiä rivejä. Ohjelmointitehtävien

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

13 Operaattoreiden ylimäärittelyjä

13 Operaattoreiden ylimäärittelyjä 248 13 C++-kielessä voidaan operaattoreita ylimäärittää. Ylimääriteltävää operaattoria voidaan pitää ikäänkuin metodina, joka esitellään luokan esittelyssä ja määritellään luokan ulkopuolella kuten metoditkin.

Lisätiedot

Harjoitus 2 (viikko 45)

Harjoitus 2 (viikko 45) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista lisätä static-määre operaatioidesi otsikoihin, jotta ohjelmasi kääntyvät. Muista noudattaa hyvän

Lisätiedot

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

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013

Lisätiedot

Osa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 15: 16: int main() 17: {

Osa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 15: 16: int main() 17: { Osa I 2. oppitunti C++-ohjelman osat Ennen kuin menemme yksityiskohtaisemmin sisälle C++-luokkiin, -muuttujiin jne, katsokaamme ensin, millaisista osista C++-ohjelma koostuu. Tämän tunnin aikana opit seuraavat

Lisätiedot

5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma

5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma 5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma Every cloud has a silver line. - englantilainen sananlasku Tässä osiossa tärkeää: yksi- ja moniulotteinen taulukko Sisältö Yleistä Yksiulotteinen

Lisätiedot

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

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen Ohjelmointitaito (ict1td002, 12 op) Kevät 2009 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-kehitysympäristö Java-ohjelma ja luokka

Lisätiedot

Metodien tekeminen Javalla

Metodien tekeminen Javalla 1 Metodien tekeminen Javalla Mikä metodi on? Metodin syntaksi Metodi ja sen kutsuminen Parametreista Merkkijonot ja metodi Taulukot ja metodi 1 Mikä metodi on? Metodilla toteutetaan luokkaan toiminnallisuutta.

Lisätiedot

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

System.out.printf(%d / %d = %.2f%n, ekaluku, tokaluku, osamaara); Kysy Karilta tai Kimmolta, jos tehtävissä on jotain epäselvää. Kerro WETOon liittyvät ongelmat suoraan Jormalle sähköpostitse (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 4.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 4.3.2009 1 / 35 Tiedostot Tiedostojen käsittelyä tarvitaan esimerkiksi seuraavissa tilanteissa: Ohjelman käsittelemiä

Lisätiedot

Olio-ohjelmointi Geneerisyys. 1. Johdanto

Olio-ohjelmointi Geneerisyys. 1. Johdanto Olio-ohjelmointi Geneerisyys Aiemmin käsiteltiin kolme monimuotoisuuden muotoa. Tässä osassa tutustutaan niistä neljänteen geneerisyyteen. Esitys perustuu pääosin teoksen [Bud] lukuun 18. Java-kielen geneerisyyden

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 18.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 18.3.2009 1 / 51 Olioista (kertausta) Olioiden avulla voidaan kuvata useammasta arvosta koostuvaa kokonaisuutta

Lisätiedot

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

19. Olio-ohjelmointia Javalla 19.1

19. Olio-ohjelmointia Javalla 19.1 19. Olio-ohjelmointia Javalla 19.1 Sisällys Olioiden esittely ja alustus. Metodit Yleistä metodeista. Mihin metodeja tarvitaan? Metodien määrittely. Omat metodit: nimeäminen, paikka, kutsuminen, parametrit

Lisätiedot

Ohjelman virheet ja poikkeusten käsittely

Ohjelman virheet ja poikkeusten käsittely Ohjelman virheet ja poikkeusten käsittely 17 Ohjelman virheet ja poikkeusten käsittely Poikkeukset ovat tapa ilmoittaa virheistä ja odottamattomista tilanteista C++-ohjelmassasi. Poikkeusten käyttö virheiden

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 16.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 16.9.2015 1 / 26 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot