OHJ-1101 Ohjelmointi 1e

Koko: px
Aloita esitys sivulta:

Download "OHJ-1101 Ohjelmointi 1e"

Transkriptio

1 OHJ-1101 Ohjelmointi 1e Essi Lahtinen

2 OHJ-1101 Ohjelmointi 1e Kurssin järjestelyt Kurssin vastuuhenkilö Essi Lahtinen huone: TE210, puh ) vastaa kurssin sisällöstä, materiaalista, korvauksista ja luennoi toiselle ryhmälle. Toisen luentoryhmän luennoijana toimii Mikko Tiusanen huone: TF207, puh: ). Kurssivääpeli Teemu Erkkola huone: TE212, puh: ) vastaa kaikista kurssiin liittyvistä käytännön järjestelyistä (harjoitusryhmät, harjoitustöihin liittyvät asiat, jne.). Lisäksi kurssin henkilökuntaan kuuluu 12 mukavaa ja avuliasta assistenttia, jotka ohjaavat viikkoharjoituksia ja harjoitustöitä. Kurssin henkilökunnan vastaanottoajat löytyvät kurssin nettisivulta.

3 OHJ-1101 Ohjelmointi 1e Tiedottaminen kurssilla Kurssin asioista tiedotetaan ensisijaisesti uutisryhmässä tut.ot.ohj1e, jota kannattaa seurata, jos haluaa selvitä kurssista mahdollisimman helpolla. Uutisryhmien lukemista kerrataan vielä ensimmäisessä viikkoharjoituksessa. Kysy neuvoa harjoitusassistentiltasi. Kurssin kotisivulla ohj1e/ on pääasiassa vain kurssin keston ajan muuttumatonta tietoa. Kotisivu kannattaa lukea perusteellisesti läpi, jos haluaa välttää höynäytetyksi tulemisen.

4 OHJ-1101 Ohjelmointi 1e Kurssin suorittaminen Kurssi muodostuu seuraavista osista: Luennot (2. periodilla 4 h/vk ja 3. periodilla 2 h/vk) Harjoitukset (2. ja 3. periodeilla 2 h/vk) Palautustehtävät (yhteensä 4 kpl, joista 3 kpl pakollisia), henkilökohtaisia Harjoitustyö (sisältää välipalautuksen), henkilökohtainen ja pakollinen Kaksi välikoetta tai tentti, pakollinen Luentoja on 36 h ja harjoituksia 22 h, mikä on yhteensä 48 h. Kurssista saa 4 op, joka merkitsee n. 104 h työtä. Muihin hommiin menee varmaan aika paljon aikaa! Ohjelmoimaan oppii vain ohjelmoimalla.

5 OHJ-1101 Ohjelmointi 1e Kurssin arvostelu Kurssin arvosana määräytyy kokonaispistemäärän (= suorituspisteet + bonuspisteet) perusteella. Suorituspisteitä saa tentistä tai välikokeista ( n. 30) ja harjoitustyöstä (3). Bonuspisteitä saa aktiivisesta osalistumisesta harjoituksiin (3). Suorituspisteet vaikuttavat arvosanarajojen määräytymiseen. Bonuspisteillä voi korottaa saamaansa arvosanaa maksimissaan yhdellä. (Hylättyä suoritusta ei voi korottaa.)

6 OHJ-1101 Ohjelmointi 1e Materiaali Kurssin pruju löytyy nettisivulta ja halutessaan sen voi tulostaa paperiversioksi TiTe-killan monistuskoneelta. Pruju on tarkoitettu luentojen tueksi, ei itseopiskeluun. Jos et aio käydä luennoilla, hanki jokin C++-opus. Tällaiseksi sopii esimerkiksi: Walter Savitch: Problem Solving with C++, The Object of Programming tai Jan Skansholm: C++ From the Beginning Epätoivoisesti englanninkieltä pelkäävät voivat kokeilla esim. hiukan kevyempää Päivi Hietanen: C++ ja olio-ohjelmointi C++-perusteos, järeää luettavaa unettomille ja kielestä enemmän kiinnostuneille, enemmän referenssi, kuin oppikirja Bjarne Stroustrup: The C++-programming language (saatavana myös suomenkielisenä)

7 OHJ-1101 Ohjelmointi 1e Kurssin tavoitteet ja motivaatio Tavoitteena on selvittää ohjelmoinnin peruskäsitteet ja yksinkertaiset tietorakenteet ohjelmanteon vaiheet ja ohjelman suorittaminen perustietämys C++-ohjelmointikielestä Kurssi ei ole teoriapainotteinen, vaan se antaa opiskelijalle käytännön perustaidot pienten ohjelmien suunnitteluun ja kirjoittamiseen C++-kielellä. Ammattiohjelmoijia ei kurssilla synny. Jokaisen DI:n tulisi nykyään tietää edes jotain ohjelmoinnista. Kurssilla opitut taidot ovat hyödyllisiä joillain myöhemmillä ammattiainekursseilla (osastosta riippumatta). Edellisvuoden kurssipalauteen mukaan esim. Matlabin tehokas käyttäminen on helpompaa kun ohjelmoinnin peruskäsitteet ovat hallussa. Jos kiinnostus ohjelmointiin herää kurssin kuluessa, voi ohjelmoinin opiskelua jatkaa kurssilla OHJ-1151 Ohjelmointi 2e (tai OHJ-1150 Ohjelmointi 2).

8 OHJ-1101 Ohjelmointi 1e C++:sta Kurssin esimerkkikieli on C++, mutta tarkoitus on perehtyä ohjelmointiin yleisestikin. C++ on vain esimerkkikieli. Kaikkia kielen piirteitä ei käydä läpi. Kielen syvällisempiä piirteitä käsitellään kursseilla OHJ-1400 Olio-ohjelmoinnin peruskurssi ja OHJ-1450 Olio-ohjelmoinnin jatkokurssi C++ ei ole kaikin puolin paras mahdollinen opetuskieli. Se kärsii jonkin verran menneisyyden painolastista, koska se pohjautuu C-kieleen. Huonoja piirteitä ovat mm. syntaksin kryptisyys, erilaisten suojaverkkojen puuttuminen ja jyrkkä oppimiskäyrä. Ohjelmoinnin perusjutut hukkuvat helposti yksityiskohtien alle. C++ on joustava ja tehokas ammattilaisen työkalu niille, jotka tietävät mitä tekevät.

9 OHJ-1101 Ohjelmointi 1e Kurssin ohjelmointiympäristöstä Kurssin ohjelmointiympäristönä käytetään TTY:n proa-klusteria. Kääntäjänä käytetään komentorivipohjaista tutg++:aa. Kurssilla ei opeteta käyttämään mitään graasta ohjelmointiympäristöä, koska komentorivipohjainen ympäristö tuo ohjelman kehityksen eri vaiheet selkeämmin esille. Graasta ympäristöä on helppo oppia käyttämään, jos hallitsee komentorivipohjaisen. Toisinpäin opetteleminen ei yleensä ole yhtä helppoa. Tietotekniikan ammattilainen hallitsee työnsä ympäristössä kuin ympäristössä, myös ei-graasessa. Itse tietenkin saa koodailla ihan missä ympäristössä haluaa.

10 OHJ-1101 Ohjelmointi 1e Esimerkki: Tavuttaminen Ohjelmoinnista on jo saatu yleiskäsitys kurssilla OHJ-1010 Tietotekniikan perusteet. Tällä kurssilla sanalla ohjelmointi tarkoitetaan tietokoneen ohjelmointia. Aloitamme perehtymisen ohjelmoinnin ongelmiin ja vaiheisiin pienen esimerkin avulla: suunnitellaan pientä tietokoneohjelmaa, joka tavuttaa suomenkielistä tekstiä. Esimerkissä ei ole tarkoitus keskittyä tavutussääntöjen opettelemiseen vaan ajattelu- ja toimintatapaan, jota ohjelmoija tarvitsee. Kiinnitä huomiosi muuhunkin kuin yksityiskohtiin.

11 OHJ-1101 Ohjelmointi 1e Äidinkielen kirja kertoo, että suomen kielen tavuttaminen seuraa melko suoraviivaisesti seuraavia sääntöjä: Konsonanttisääntö: Jos tavuun kuuluvaa vokaalia seuraa yksi tai useampia konsonantteja, joita vielä seuraa vokaali, tavuraja sijoittuu välittömästi ennen viimeistä konsonanttia. lef-fas-sa ki-vaa kah-del-le: tra-giik-kaa se-kä hork-ka-ti-lo-ja Vokaalisääntö: Jos tavun ensimmäistä vokaalia seuraa toinen vokaali, niiden väliin tulee tavuraja, ellei a) edellinen vokaali ole sama kuin jälkimmäinen (pitkä vokaali). b) kysymyksessä ole jokin diftongi. lu-en-to Aa-si-an kää-pi-ö-puo-lu-eis-ta Diftongisääntö: Jos tavun kuuluvaa diftongia tai pitkää vokaalia seuraa vokaali, tähän väliin tulee aina tavuraja. raa-is-tu-nut maa-il-ma, liu-ot-ti-met lau-an-tai-na tau-ot-ta leu-an al-la Poikkeuksiakin löytyy: de-mo-kra-ti-a, kai-vos-auk-ko, jne, jne. Diftongit ovat: ai, ei, oi, ui, yi, äi, öi, au, eu, ey, ie, iu, ou, uo, yö, äy tai öy.

12 OHJ-1101 Ohjelmointi 1e TiTePK:sta muistamme, että tietokone ei osaa tavuttaa noin ylimalkaisten tavutussääntöjen perusteella, vaan sitä varten pitää kehittää algoritmi. Algoritmin pitää olla: 1. yksikäsitteinen (ei tulkittavissa väärin) 2. yksityiskohtainen (tyhmäkin osaa seurata) 3. saavuttaa tavoitteensa (eli toimii oikein) 4. määrää toimenpiteiden suoritusjärjestyksen (seuraus kohdasta 1) 5. sisältää äärellisen määrän toimenpiteitä (muuten tehtävä ei tulisi suoritetuksi, seuraus kohdasta 3) Tietokone on tyhmä.

13 OHJ-1101 Ohjelmointi 1e Riittävä yksikäsitteisyys ja yksityiskohtaisuus ovat tulkinnanvaraisia ja riippuvat tilanteesta. Ihminen ymmärtää, mitä pitää tehdä, jos algoritmi sanoo Laske yhteen luvut yhdestä sataan. Ihminen saattaa jopa keksiä tähän luovan ratkaisun ja välttyä käsityöltä. Tietokoneet ovat "rajoittuneita". Suunniteltaessa tietokonealgoritmeja niiden on oltava äärimmäisen yksikäsitteisiä ja yksityiskohtaisia. Esimerkiksi, jos halutaan, että tietokone selvittää, montako vokaalia sanassa on, se pitää ohjeistaa tietokoneelle näin tarkasti: Ota käsiteltäväksi sana ensimmäinen kirjain Ota vokaalien lukumääräksi nolla NIIN KAUAN KUIN ei olla sanan lopussa JOS käsiteltävänä on vokaali Kasvata lukumäärää yhdellä Siirry seuraavaan kirjaimeen Tulosta lukumäärä

14 OHJ-1101 Ohjelmointi 1e Edellisessä algoritmissa esiintyi toistoa ja ehdollisuutta. 1. Jotain algoritmin osaa saatetaan tarvittaessa suorittaa useita kertoja peräkkäin (toisto). 2. Jonkin algoritmin osan suorittaminen saattaa riippua olosuhteista (ehdollisuus). Toisto voidaan esittää algoritmissa seuraavasti: NIIN KAUAN KUIN väite toimenpiteet jota tulkitaan suoraviivaisesti siten, että toimenpiteitä toistetaan yhä uudelleen niin kauan kuin esitetty väite on tosi. Väite voi siis periaatteessa olla mikä tahansa toteamus, kunhan siitä tavalla tai toisella voidaan päätellä, pitääkö se paikkansa vai ei.

15 OHJ-1101 Ohjelmointi 1e Algoritmissa ehdollisuus esitetään muodossa: JOS väite NIIN toimenpiteet1 MUUTEN toimenpiteet2 Tätä tulkitaan siten, että mikäli väite on tosi, on algoritmin toteuttamiseksi suoritettava toimenpiteet1. Mikäli väite taas ei pidä paikkaansa, suoritetaan toimenpiteet2. Kuten aiemminkin väite saa olla mitä tahansa, jos siitä vain voidaan päätellä, onko se tosi vai epätosi. Ehtorakenne voi olla myös sellainen, että siinä on vain JOS-osa ilman MUUTEN-osaa. Tällöin ei tehdä mitään, jos väite ei pidä paikkaansa.

16 OHJ-1101 Ohjelmointi 1e Pseudokoodi Algoritmikielessä "jos-niin-muuten" ja "niin kauan kuin" ovat syntaktisia (l. kieliopillisia) rakenteita, joiden semantiikka (l. merkitys) on ehdollisuus ja toisto. Monista ohjelmointikielistä löytyy vastaavankaltaiset rakenteet "ifthen-else" ja "while-do". Jatkon kannalta on selvempää, jos käytämme niitä suomenkielisten rakenteiden sijaan. Tällaista ohjelmointikielen ja puhutun kielen yhdistelmää kutsutaan pseudokoodiksi. Se on erittäin hyödyllinen työkalu ohjelmien suunnittelemisessa.

17 OHJ-1101 Ohjelmointi 1e Palataan tavutusongelmaan ja kokeillaan ensin muodostaa suoraan tavutussääntöjen pohjalta sen kummemmin miettimättä algoritmi, joka tavuttaa yhden sanan. Kootaan algoritmi siten, että toistorakenteen avulla käydään läpi tavutettavaa sanaa kirjain kerrallaan: Ota käsiteltäväksi sanan ensimmäinen kirjain WHILE ei olla sanan lopussa DO Selvitä tuleeko tähän kohtaan tavuviiva Ota käsiteltäväksi seuraava kirjain Tulosta sana tavuviivoin

18 OHJ-1101 Ohjelmointi 1e Osaa Selvitä tuleeko tähän kohtaan tavuviiva täytyy tarkentaa: valintarakenteen avulla katsotaan jokaisen kirjaimen kohdalla, mikä säännöistä on tarkoitus suorittaa: IF konsonanttisääntötilanne voimassa THEN Suorita konsonanttisääntö ELSE IF vokaalisääntötilanne voimassa THEN Suorita vokaalisääntö ELSE IF diftongisääntötilanne voimassa THEN Suorita diftongisääntö

19 OHJ-1101 Ohjelmointi 1e Kun valintarakenne lisätään toistorakenteen sisään, algoritmiksi muodostuu:

20 OHJ-1101 Ohjelmointi 1e Käyttäen aidinkielenkirjan tavutussääntöjä, edellisen kuvan pohjalta voidaan kirjoittaa pseudokoodilla seuraava tavutusalgoritmi: Ota käsiteltäväksi sanan ensimmäinen kirjain WHILE ei olla sanan lopussa DO IF käsiteltävänä on vokaali ja sitä seuraa konsonantti THEN IF viimeisen peräkkäin olevan konsonantin perässä on vokaali THEN Sijoita tavuviiva ennen viimeistä konsonanttia ELSE IF käsiteltävänä on vokaali ja sitä seuraa vokaali THEN IF käsiteltävä ja seuraava eivät ole tuplavokaali tai diftongi THEN Sijoita tavuviiva käsiteltävän vokaalin jälkeen ELSE IF käsiteltävä ja seuraava ovat tuplavokaali tai diftongi THEN IF tuplavokaalia tai diftongia seuraa vokaali THEN Sijoita tavuviiva tuplavokaalin tai diftongin jälkeen Siirry käsittelemään seuraavaa kirjainta Tulosta koko sana tavuviivoineen

21 OHJ-1101 Ohjelmointi 1e Vuokaavio tavutusalgoritmista tarkemmin

22 OHJ-1101 Ohjelmointi 1e Tässä vaiheessa herää epäilys: voiko tavutusalgoritmin muodostaminen olla noin yksinkertaista? Testataan kehittämäämme algoritmia. Hyvää testiaineistoa löytyy esimerkiksi sivulta 10. Otetaan käyttöön kynä ja paperia ja testataan algoritmia sanalla luento. Lopputuloksena lu-en-to eli näyttää siltä, että ainakin vokaalisääntö ja konsonanttisääntö toimivat. Ainakin joskus... Tai ainakin tässä tilanteessa! :) Toimiiko algoritmimme nyt siis oikein?

23 OHJ-1101 Ohjelmointi 1e Algoritmien muodostaminen Hyväksi havaittu tapa algoritmien muodostamiseen on kokonaisuutta pienempiin osiin. Pieniä kokonaisuuksia on helpompi hallita. jäsentää Kokonaisuus saadaan pienistä osista yhdistämällä, kunhan osien algoritmit ovat oikein muodostettu ja liitetty toisiinsa. "Hajoita ja hallitse." Jäsentämistä jatketaan, kunnes osatoiminnot ovat riittävän yksinkertaisia. Algoritmin toiminnot ovat monimutkaisuudeltaan samalla tasolla kuin mitä algoritmin suorittava systeemi ymmärtää käskyinään. Tärkeintä on, että paloittelet ja jäsennät kokonaisuuden niin, että itse ymmärrät, mitä olet tekemässä.

24 OHJ-1101 Ohjelmointi 1e Yritetään muodostaa tavutusalgoritmi uudestaan, tällä kertaa niin, että myös ymmärretään, miten se toimii. Kun katsotaan kaikkia tavutussääntöjä, huomataan, että jokainen niistä alkaa siitä, että käsitellään vokaalia. Tavutusalgoritmin kannattaa ensimmäiseksi tarkastaa ollaanko käsittelemässä vokaalia. Jos ei, niin ei tarvitse tehdä mitään, siirrytään vain seuraavaan kirjaimeen. Algoritmiksi tämän voisi pukea esim. näin: Ota käsiteltäväksi sanan ensimmäinen kirjain WHILE ei olla sanan lopussa DO IF käsiteltävänä on vokaali THEN Täytyy tehdä jotain... Siirry käsittelemään seuraavaa kirjainta Tulosta koko sana tavuviivoineen

25 OHJ-1101 Ohjelmointi 1e Kohtaa Täytyy tehdä jotain... pitää selvästikin tarkentaa. Säännöt jakautuvat kahteen tilanteeseen: 1. vokaali ja sen jälkeen konsonantti toteutetaan konsonanttisääntö 2. vokaali ja sen jälkeen vokaali toteutetaan joko vokaalisääntö tai diftongisääntö Ja sama algoritmina: IF käsiteltävästä seuraava kirjain on konsonantti THEN ELSE Suoritetaan konsonanttisääntö Suoritetaan joko vokaalisääntö tai diftongisääntö Samaan tyyliin voidaan jatkaa pala kerrallaan koko tavuttamisalgoritmin muodostamista.

26 OHJ-1101 Ohjelmointi 1e Lopputuloksena saadaan korjattu ja siistitty algoritmi: Ota käsiteltäväksi sanan ensimmäinen kirjain WHILE ei olla vielä sanan lopussa DO IF käsiteltävänä on vokaali THEN IF käsiteltävästä seuraava kirjain on konsonantti THEN IF viimeisen peräkkäin olevan konsonantin jälkeen on vokaali THEN Sijoita tavuviiva ennen viimeistä konsonanttia ELSE IF käsiteltävä vokaali on tuplavokaalin tai diftongin alku THEN IF tuplavokaalin tai diftongin jälkeen on vielä vokaali THEN Sijoita tavuviiva tuplavokaalin tai diftongin perään ELSE Sijoita tavuviiva käsiteltävän vokaalin perään Siirry käsittelemään seuraavaa kirjainta Tulosta koko sana tavuviivoineen

27 OHJ-1101 Ohjelmointi 1e Vuokaavio lopullisesta tavutusalgoritmista

28 OHJ-1101 Ohjelmointi 1e Tätä uutta algoritmia testataan tietenkin uudestaan vähintään yhtä kattavasti kuin ensimmäistäkin versiota algoritmista. Kun algoritmia on testattu riittävästi ja todettu toimivaksi, se voidaan toteuttaa jollakin ohjelmointikielellä. Kuten algoritmin toteutuksessakin, tässä vaiheessa ohjelmakoodi voidaan kirjoittaa monella eri tavalla. Seuraavalla kalvolla esitettävä toteutus ei ole ainoa oikea vaan yksi mahdollinen. Valmiiksi hyvin suunnitellun algoritmin toteuttaminen C++:lla ei todennäköisesti ole C++:aa osaavalle henkilölle yhtään niin vaativaa, kuin itse algoritmin suunnitteleminen. Siitä huolimatta tässä vaiheessa kurssia ei vielä tarvitse ymmärtää, miten seuraava C++toteutus toimii. Ohjelmalistauksesta voi kuitenkin saada jonkinlaisen käsityksen siitä, millaista C++ on.

29 OHJ-1101 Ohjelmointi 1e Yksi tapa toteuttaa tavutusalgoritmi C++:lla: string tavuta( string sana ) { vector< bool > viivat( sana.size(), false ); for( unsigned int i = 0; i < sana.size(); ++i ) { if( vokaali( sana.at( i ) ) && i+1 < sana.size() ) { // Jos käsiteltävänä vokaali ja sana ja if( konsonantti( sana.at( i+1 ) ) ) { // Vokaalin perässä konsonantti -> Konsonanttisäänt int j = 1; // Lasketaan kuinka monta konsonanttia on peräkkäin while( i+j < sana.size() && konsonantti( sana.at( i+j ) ) ) { ++j; if( i+j < sana.size() && vokaali( sana.at( i+j ) ) ) { viivat.at( i+j-2 ) = true; else { // Vokaalin perässä toinen vokaali if( ( sana.at( i ) == sana.at( i+1 ) ) diftongi( sana.at( i ), sana.at( i+1 ) ) ) { // Tuplavokaali tai diftongi -> Diftongisääntö if( i+2 < sana.size() && vokaali( sana.at( i+2 ) ) ) { viivat.at( i+1 ) = true; else { // Ei tuplavokaali eikä diftongi -> Vokaalisääntö viivat.at( i ) = true; string tavutettu; for( unsigned int i = 0; i < sana.size(); ++i ) { tavutettu += sana.at( i ); if( viivat.at( i ) ) { tavutettu += "-"; return tavutettu;

30 OHJ-1101 Ohjelmointi 1e Ohjelmoinnin vaiheet Seuraava malli kuvaa onnistuneen ohjelmointiprojektin vaiheita: 1. Ongelman ratkaisuvaihe (a) Analysointi ja määrittely: ymmärrä ongelma ja selvitä, mitä ratkaisun on tarkoitus tehdä. (b) Yleinen ratkaisu (algoritmi ): kehitä looginen sarja ohjeita, joita noudattamalla ongelmalle saadaan haluttu lopputulos. (c) Tarkistus: testaa kynällä ja paperilla, että algoritmi toimii. 2. Ratkaisun toteutusvaihe (a) Konkreettinen ratkaisu: toteuta algoritmi sopivalla ohjelmointikielellä. (b) Testaus: suorita ohjelmaa eri syötteillä ja vertaile tuloksia tunnettuihin oikeisiin ratkaisuihin: jos virheitä löytyy, mieti "miksi?" ja korjaa ne. 3. Ylläpitovaihe (a) Käyttö: käytä ohjelmaa suunniteltuun tarkoitukseen. (b) Ylläpito: korjaa löytyviä virheitä ja lisää mahdollisia uusia tarvittavia ominaisuuksia.

31 OHJ-1101 Ohjelmointi 1e Asiaan perehtymättömillä on usein sellainen käsitys, että ohjelmointi on sitä, kun istutaan tietokoneen ääressä ja syötetään näppäimistöltä koneelle ohjelmaa. Kun naputtelu on ohi, kone suorittaa ohjelman ongelmitta ja näyttää oikean tuloksen. Kun tätä käsitystä ohjelmoinnista vertaa kalvolla 29 esitettyyn malliin, niin jotain puuttuu: Harhaluuloinen käsitys koostuu pelkästään yleisen mallin viimeisestä vaiheesta. Ongelmaa ei välttämättä ole ymmärretty kunnolla eikä sen ratkaisua mietitty loppuun saakka. Väärä lähestymistapa johtaa ikävyyksiin: ongelmaa ei ole ymmärretty ratkaistaan väärä ongelma ratkaisutapa virheellinen ohjelman antama tulos on väärä ohjelmaa pitää korjata hukataan aikaa ja rahaa Karkea sääntö: ratkaisuvaihe/toteutusvaihe tulisi olla 50%/50%, kun vertaillaan käytettyä aikaa ja resursseja. "Väärää lähestymistapaa" käyttävillä suhde on usein 10%/90% tai huonompi: ongelmaa pohdittu kahvikupin verran ja rynnätty suoraan toteuttamaan. Vaikka virheellinen lähestymistapa saattaakin toimia pienissä ohjelmointiprojekteissa, ongelman koon kasvaessa se ei toimi.

32 OHJ-1101 Ohjelmointi 1e Ohjelmointikielistä Ohjelmointikieli on se kieli, jolla tietokoneen kanssa voidaan kommunikoida (l. kuvata algoritmit muodossa, joka saadaan koneen ymmärtämään muotoon). Tarkoitus on myös, että koodia lukeva ihminen ymmärtää, mistä on kyse. Se on selkeästi analoginen puhutun kielen kanssa, mutta sangen yksinkertainen. Kaikki tietokoneet ymmärtävät pohjimmiltaan vain omaa konekieltään: sopivassa järjestyksessä koneen muistiin tallennettuja lukuja 0 ja 1 (tosiasiassa jännitetasoja). Tietyssä järjestyksessä esiintyvät nollat ja ykköset tietokone osaa tulkita alkeellisiksi käskyiksi, konekäskyiksi. Alunperin kaikki ohjelmointi oli puhtaasti konekielellä ohjelmointia: johtoja ja vipuja. Konekieli on kovin hankalakäyttöistä. Symbolinen konekieli. Korkean tason ohjelmointikielet (esim. lausekielet ).

33 OHJ-1101 Ohjelmointi 1e Lausekielet Lausekielet ovat konekieltä ilmaisuvoimaisempia: niillä halutun tehtävän selittäminen tietokoneelle helpompaa ja lopputulos ymmärrettävämpää ihmiselle. Yksi lausekielellä kirjoitettu käsky vastaa useita, jopa tuhansia, konekäskyjä. Ennen kuin tietokone voi suorittaa jollain muulla kuin sen omalla konekielellä kirjoitetun ohjelman, se täytyy tavalla tai toisella muuntaa konekieleksi: kääntäminen (compiling) tulkkaaminen (interpreting)

34 OHJ-1101 Ohjelmointi 1e Ohjelman tulkkaaminen Ohjelman tulkkaaminen perustuu siihen, että ohjelmointikielen tulkki suorittaa ohjelmaa käsky ( lause/lauseke) kerrallaan. Etuja: ohjelma voidaan testata pala kerrallaan tulkki huolehtii virheilmoituksista ja auttaa virheiden etsinnässä Haittoja: ohjelman suoritus vaatii aina tulkin tehoton

35 OHJ-1101 Ohjelmointi 1e Ohjelman kääntäminen Ohjelman kääntäminen perustuu siihen, että ohjelmakoodi käännetään kokonaisuudessaan konekielelle erityisellä kääntäjäohjelmalla (kääntäjällä) ennen kuin se voidaan suorittaa. Etuja: syntaksi- ja semanttiset virheet havaitaan aina kääntäjää ei enää tarvita uudelleen ajettava ohjelma nopea helpompi optimoida Haittoja: ajonaikaiset virheet jäävät yleensä ohjelmoijan hoidettavaksi

36 OHJ-1101 Ohjelmointi 1e Kääntäjän toiminta

37 OHJ-1101 Ohjelmointi 1e Ensimmäinen C++-ohjelma Käydään yksityiskohtaisesti läpi pikkuruinen C++-kielinen ohjelma: 1 // Lähdekooditiedosto: forever.cc // // Ohjelma tulostaa näytölle lausahduksen: // "I plan to live forever or die trying." rivitettynä 5 #include <iostream> #include <cstdlib> using namespace std; 10 int main() { // Ohjelman toiminnot alkavat tästä. cout << "I plan to live forever" << endl; cout << "or die trying." << endl; return EXIT_SUCCESS; 15

38 OHJ-1101 Ohjelmointi 1e Pienessä ohjelmassa on monta tärkeää asiaa: Teksti //-kirjainyhdistelmästä rivin loppuun on kommentti, joka ei vaikuta ohjelman toimintaan. Kaikissa C++-ohjelmissa pitää olla funktio int main(), joka päättyy käskyyn return. Varsinaiset ohjelman suorittamat toiminnot ovat main:ia seuraavien aaltosulkeiden sisällä. Käskyt (lauseet) tuntuvat päättyvän ";":een. Jos C++-ohjelmassa halutaan lukea syötteitä tai kirjoittaa tulosteita, sen alkuun on lisättävä #include <iostream> ja using namespace std. cout on C++:ssa tulostusvirta, johon voidaan <<-operaattorilla ohjata tulosteita, jotka sitten ilmestyvät ohjelmaa suoritettaessa näytölle. Lainausmerkkien väliin kirjoitettua tekstiä kutsutaan merkkijonoksi, mikä tarkoittaa selkokielellä tekstimuotoista tietoa. endl tulostaa rivinvaihdon: seuraavat tulostukset alkavat uudelta riviltä (sen vasemmasta laidasta).

39 OHJ-1101 Ohjelmointi 1e Lähdekoodista suoritettavaksi ohjelmaksi C++-ohjelman tekeminen etenee yleensä seuraavasti: 1. Suunnitellun algoritmin C++-version kirjoittaminen jollain editorilla 2. Tallentaminen tiedostoon, jonka nimi päättyy.cc 3. Tiedoston kääntäminen C++-kääntäjällä konekielelle 4. JOS tuli käännösvirheitä NIIN takaisin editoriin korjaamaan ne 5. Käännetyn ohjelman testaaminen, jotta nähdään, toimiiko se oikein 6. JOS ei toimi oikein NIIN mieti miksi ei ja palaa takaisin editoriin korjaamaan viat 7. MUUTEN ohjelma on valmis

40 OHJ-1101 Ohjelmointi 1e Editointi C++-ohjelmia voi kirjoittaa millä tahansa editoriohjelmalla. Ohjelmien editointiin kannattaa kuitenkin, jos mahdollista, käyttää jed- tai emacs-editoria. Kun jedillä tai emacsilla käsittelee tiedostoa, jonka nimi päättyy.cc:hen, editori menee automaattisesti C++-tilaan, joka osaa esimerkiksi sisentää ohjelmakoodin automaattisesti, kun vain painaa sarkainnäppäintä. Periaatteessa tällä kurssilla ei ole tarkoitus uppoutua editoriohjelman käyttöön: jonkin editorin tuntemus pitäisi jokaisella olla TiTePk:sta. Ensimmäisissä viikkoharjoituksissa kuitenkin käydään pikaopastus jedin ja emacsin tärkeimpiin ominaisuuksiin.

41 OHJ-1101 Ohjelmointi 1e Kääntäminen Ohjelman kääntämiseen käytämme tutg++-nimistä kääntäjää. tutg++:lle luetellaan komentorivillä kaikki C++-kieliset lähdekooditiedostot, ja se kääntää niistä suoritettavan konekielisen ohjelman: proffa> tutg++ forever.cc Jos koodi on virheetön, tuloksena syntyy ajokelpoinen ohjelma a.out, joka suoritetaan kirjoittamalla sen nimi komentotulkille: proffa>./a.out I plan to live forever or die trying. a.out ei ole kuvaava nimi, mutta tutg++:lle voi kertoa vivulla -o, minkä nimisen ohjelman haluaa tuloksena: proffa> tutg++ -o plan forever.cc proffa>./plan I plan to live forever or die trying. tutg++ tunnistaa kymmeniä muitakin komentorivivipuja. Kuten TiTePK:sta muistamme, komentoriville kirjoitetun komennon alussa./ tarkoittaa, että ajettava ohjelma on työhakemistossa.

42 OHJ-1101 Ohjelmointi 1e Virhetilanteet Periaatteessa ohjelmissa on kolmenlaisia virheitä: kielioppi- eli syntaksivirheitä semanttisia eli "merkitysvirheitä" loogisia eli "ajatusvirheitä" Syntaksivirheet Syntaksivirheet ovat virheitä, jotka syntyvät, kun lähdekoodi ei ole käytetyn ohjelmointikielen kielioppisääntöjen mukaista. Esimerkiksi cout- tai return-lauseen lopusta puuttuva ";"-merkki olisi C++:ssa syntaksivirhe. Kääntäjä löytää aina syntaksivirheet. Virheen löydyttyä kääntäjä tulostaa ilmoituksen, joka kertoo virheen syyn ja (suuntaa-antavan) rivinumeron, jolla virhe lähdekooditiedostossa sen mielestä sijaitsi. Tyypillisesti virheilmoitus alkaa "syntax error" tai "parse error".

43 OHJ-1101 Ohjelmointi 1e Semanttiset virheet Semanttiset virheet syntyvät, kun ohjelmakoodi on syntaktisesti oikein, mutta kääntäjä ei silti pysty ymmärtämään sitä. Jos esimerkkiohjelmassa olisi vahingossa kirjoitettu ndl, kun oikea vaihtoehto on endl, olisi tuloksena semanttinen virhe. ndl on kyllä syntaktisesti ihan oikeanlainen: se voisi olla jonkin asian tunniste. Semanttinen virhe tulee, koska kääntäjä ei kuitenkaan ymmärrä, mitä ndl tarkoittaa. Semanttiset virheetkin kääntäjä löytää useimmiten. Semanttisesta virheestä tulostuu virheilmoitus, jonka jälkeen kääntäjä tyypillisesti sekoaa ja väittää löytävänsä koodista samalta ja myöhemmiltä riveiltä kaikennäköisiä virheitä. Korjaa virheet aina kääntäjän ilmoittamassa järjestyksessä.

44 OHJ-1101 Ohjelmointi 1e Loogiset virheet Loogiset virheet syntyvät, kun ohjelman kirjoittaja ajattelee jotain väärin tai unohtaa ottaa huomioon jonkun joskus hyvinkin vähäpätöisen seikan. Loogiset virheet ovat tavallisesti kirjoitusvirheitä tai algoritmin suunnittelussa tapahtuneita virheitä. Loogiset virheet ilmenevät siten, että ohjelma toimii väärin. Kääntäjällä ei ole mahdollisuuksia havaita loogisia virheitä, koska se vaatisi ohjelmoijan ajatuksenjuoksun ymmärtämistä. Ainoa tapa välttää loogisia virheitä on ohjelman huolellinen suunnittelu ja kirjoittaminen.

45 OHJ-1101 Ohjelmointi 1e Varatut sanat Kuten puhutuissa kielissä, on ohjelmointikielissäkin sanoja, joilla on jokin kiinteä merkitys. Esim. suomessa "kolme", "koska" ja "minä" tai C++:ssa main ja return. Ohjelmointikielistä puhuttaessa tällaisia sanoja kutsutaan varatuiksi sanoiksi. Varatuille sanoille on siis ohjelmointikielessä määritelty merkitys, eikä ohjelmoija yleensä voi muuttaa tätä merkitystä, koska tällöin kyseisen sanan alkuperäinen tarkoitus hukkuisi. Joskus kielen varattuja sanoja kutsutaan myös käskyiksi. Sanaa "käsky" käytetään kuitenkin usein hiukan vapaammin, esimerkiksi tarkoittamaan yhtä ohjelman lausetta. Varatut sanat luovat perustan koneen ja ohjelmoijan kommunikoinnille käytettäessä korkean tason ohjelmointikieltä.

46 OHJ-1101 Ohjelmointi 1e C++-kielen varatut sanat Seuraavassa on lueteltu C++-kielen varatut sanat: and and eq asm auto bitand bitor bool break case catch char class compl const const cast continue default delete do double dynamic cast else enum explicit export extern false oat for friend goto if inline int long main mutable namespace new not not eq operator or or eq private protected public register reinterpret cast return short signed sizeof static static cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile wchar t while xor xor eq Osaan kurssilla tutustutaan, mutta ei läheskään kaikkiin.

47 OHJ-1101 Ohjelmointi 1e Esimerkki // Lähdekooditiedosto: vastukset.cc // // Kommentointi on tärkeä osa ohjelman kirjoittamista, mutta // kalvoilla se vie liikaa tilaa, joten vastaisuudessa prujun // esimerkit ovat kommentoituja vain tositarpeessa! #include <iostream> #include <cstdlib> using namespace std; int main() { cout << "Sarjaan: " << << endl; cout << "Rinnan: " << 5.0 * 10.0 / ( ) << endl; return EXIT_SUCCESS;

48 OHJ-1101 Ohjelmointi 1e Kun ohjelma käännetään ja suoritetaan: proffa> tutg++ -o vastukset vastukset.cc proffa>./vastukset Sarjaan: 15 Rinnan: Siitä opittua: C++-kieli selvästikin ymmärtää lukuja ja sallii niillä laskemisen. cout:in avulla voidaan tulostaa myös lukuja (laskulausekkeen arvoja). C++ ei ole kovin tarkka siitä, kuinka jaamme ohjelmamme riveille. Huomaa sisentäminen ja koodin ulkoasu! VIP-esimerkki: 1.1. (ks. VIP-esimerkit kurssin ohj1e IDLEn valikosta)

49 OHJ-1101 Ohjelmointi 1e Perustietotyypit Tietokoneohjelmat koostuvat kahdenlaisista asioista: tiedosta toimenpiteistä, jotka käsittelevät tietoa Jotta ohjelmointikielellä voisi tehdä tietoa käsitteleviä ohjelmia, on oltava joku tapa tiedon esittämiseen ja käsittelyyn. Perustietotyypit (alkeistietotyypit ) tiedon esittämiseen Varatut sanat ja operaattorit sen käsittelyyn Yleisesti ottaen tietotyypillä käsitetään joukkoa alkioita, joilla on samat ominaisuudet, eli niitä voidaan käsitellä samoilla operaattoreilla. Perustietotyypit ovat sellaisia tiedon esitysmuotoja, jotka ohjelmointikieli tuntee automaattisesti (ilman kirjastoja). Tavallisesti perustietotyyppien alkioiden käsittelyyn on valmiit käskyt konekielessä.

50 OHJ-1101 Ohjelmointi 1e Kaikella tiedolla on joku tyyppi ja yleensä vain samantyyppisillä tietoalkioilla voi operoida keskenään. Alussa riittää tutustua perustietotyyppeihin, joita C++-kielessä ovat: bool totuusarvoille (true ja false) int kokonaisluvuille (esim. -2, 12345) double (ja float) liukuluvuille (esim , 1E10) char kirjainmerkeille (esim. 'a', '\n'). Liukuluvut eivät ole sama asia kuin reaaliluvut, vaan kasa likiarvoja. Tyyppejä int, double, float ja char kutsutaan aritmeettisiksi tyypeiksi, eli tyypeiksi, joille voidaan suorittaa normaaleja laskuoperaatioita (kuten yhteen- ja kertolasku). Todellisuudessa C++ käsittelee kirjainmerkkejäkin pieninä kokonaislukuina eli tallettaa niiden ASCII-koodin. Toistaiseksi käsitellään myös merkkijonoja ( string, tekstimuotoinen tieto, lainausmerkkien sisällä oleva teksti) kuten perustietotyyppejä, vaikka ne eivät perustietotyyppejä olekaan.

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin. 2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet

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

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

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

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto Osa VIII Liitteet Liitteet A B C Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto Osa VIII A. Liite Operaattoreiden suoritusjärjestys On tärkeää ymmärtää, että operaattoreilla on prioriteettinsa,

Lisätiedot

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

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

1. Algoritmi 1.1 Sisällys Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. Muuttujat ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

etunimi, sukunimi ja opiskelijanumero ja näillä

etunimi, sukunimi ja opiskelijanumero ja näillä Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

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

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

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

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

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

Tietotyypit ja operaattorit

Tietotyypit ja operaattorit Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto

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

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot 3. Muuttujat ja operaatiot Sisällys Muuttujat. Nimi ja arvo. Algoritmin tila. Muuttujan nimeäminen. Muuttujan tyyppi. Muuttuja ja tietokone. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeetiikka.

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

5/20: Algoritmirakenteita III

5/20: Algoritmirakenteita III Ohjelmointi 1 / syksy 2007 5/20: Algoritmirakenteita III Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/17 Tämän

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

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin Sisällys 17. Ohjelmoinnin tekniikkaa for-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. if-else-lause vaihtoehtoisesti

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

17. Ohjelmoinnin tekniikkaa 17.1

17. Ohjelmoinnin tekniikkaa 17.1 17. Ohjelmoinnin tekniikkaa 17.1 Sisällys for-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. if-else-lause vaihtoehtoisesti

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

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys For-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. If-else-lause vaihtoehtoisesti

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat Sisällys 12. Javan toistorakenteet Ylstä toistorakentsta. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirhtä. Silmukan rajat asetettu kierroksen

Lisätiedot

Sisällys. 15. Lohkot. Lohkot. Lohkot

Sisällys. 15. Lohkot. Lohkot. Lohkot Sisällys 15. Lohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.1 15.2 Lohkot Aaltosulkeet

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

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

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

Johdatus Ohjelmointiin

Johdatus Ohjelmointiin Johdatus Ohjelmointiin Syksy 2006 Viikko 2 13.9. - 14.9. Tällä viikolla käsiteltävät asiat Peruskäsitteitä Kiintoarvot Tiedon tulostus Yksinkertaiset laskutoimitukset Muuttujat Tiedon syöttäminen Hyvin

Lisätiedot

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Sisällys 3. Pseudokoodi Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Ohjausrakenteet: Valinta if- ja if--rakenteilla. oisto while-, do-while- ja for-rakenteilla. 3.1 3.2 Johdanto

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 21.9.2016 CSE-A1111 Ohjelmoinnin peruskurssi Y1 21.9.2016 1 / 22 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

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

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmointiharjoituksia Arduino-ympäristössä Ohjelmointiharjoituksia Arduino-ympäristössä Yleistä Arduino-sovelluksen rakenne Syntaksi ja käytännöt Esimerkki ohjelman rakenteesta Muuttujat ja tietotyypit Tietotyypit Esimerkkejä tietotyypeistä Ehtolauseet

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

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

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

11. Javan valintarakenteet 11.1

11. Javan valintarakenteet 11.1 11. Javan valintarakenteet 11.1 Sisällys If- ja if--lauseet. Orpo. Valintaa toisin: switch-lause. 11.2 Valintarakenteet Valintarakenteilla ilmaistaan formaalisti, kuinka algoritmin suoritus voi haarautua

Lisätiedot

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9. Python linkit: Python tutoriaali: http://docs.python.org/2/tutorial/ Numpy&Scipy ohjeet: http://docs.scipy.org/doc/ Matlabin alkeet (Pääasiassa Deni Seitzin tekstiä) Matriisit ovat matlabin perustietotyyppejä.

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä Sisällys 11. Javan toistorakenteet Laskuri- ja lippumuuttujat.. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin lopettaminen break-lauseella.

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

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

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

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

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

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

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

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014 Yhtälönratkaisusta Johanna Rämö, Helsingin yliopisto 22. syyskuuta 2014 Yhtälönratkaisu on koulusta tuttua, mutta usein sitä tehdään mekaanisesti sen kummempia ajattelematta. Jotta pystytään ratkaisemaan

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 2. Lukujen esittäminen ja aritmetiikka 2.1 Kantajärjestelmät ja lukujen esittäminen Käytettävät lukujoukot: Luonnolliset luvut IN = {0,1,2,3,... } Positiiviset kokonaisluvut

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

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

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 26.10.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 26.10.2015 1 / 28 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta

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

Javan perusteita. Janne Käki

Javan perusteita. Janne Käki Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).

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

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

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva Sisällys 6. Muuttujat ja Java Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut. boolean- ja char-tyypit. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

6. Muuttujat ja Java 6.1

6. Muuttujat ja Java 6.1 6. Muuttujat ja Java 6.1 Sisällys Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut. boolean- ja char-tyypit. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

TAITAJA 2007 ELEKTRONIIKKAFINAALI 31.01-02.02.07 KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

TAITAJA 2007 ELEKTRONIIKKAFINAALI 31.01-02.02.07 KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro: KILPAILIJAN TEHTÄVÄT Kilpailijan nimi / Nro: Tehtävän laatinut: Hannu Laurikainen, Deltabit Oy Kilpailutehtävä Kilpailijalle annetaan tehtävässä tarvittavat ohjelmakoodit. Tämä ohjelma on tehty laitteen

Lisätiedot

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

\+jokin merkki tarkoittaa erikoismerkkiä; \n = uusi rivi. 1. Johdanto 1.1 Yleistä Suurten ohjelmien organisointi vaikeaa C:ssä. 1980 Stroustrup lisäsi C:hen olio-ohjelmoinnin (OOP = Object Oriented Programming). C C++: C-ohjelma on (muutamia poikkeuksia lukuunottamatta)

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

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017

Lisätiedot

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmointi 2 / 2010 Välikoe / 26.3 Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2009 1 / 33 Valintakäsky if syote = raw_input("kerro tenttipisteesi.\n") pisteet = int(syote) if pisteet >=

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 23.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 23.2.2009 1 / 44 Debuggeri Tyypillinen tilanne: ohjelma on kirjoitettu, Python-tulkki ei valita virheistä, mutta

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

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

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

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tyyppejä ja vähän muutakin TIEA341 Funktio ohjelmointi 1 Syksy 2005 Viime luennolla... Haskellin alkeita pääasiassa Hello World!... ja muita tutunoloisia ohjelmia Haskellilla Haskellin voima on kuitenkin

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva Sisällys 6. Muuttujat ja Java Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut, merkit, totuusarvot. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

6. Muuttujat ja Java 6.1

6. Muuttujat ja Java 6.1 6. Muuttujat ja Java 6.1 Sisällys Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut, merkit, totuusarvot. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

7/20: Paketti kasassa ensimmäistä kertaa

7/20: Paketti kasassa ensimmäistä kertaa Ohjelmointi 1 / syksy 2007 7/20: Paketti kasassa ensimmäistä kertaa Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007

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

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä Sekalaiset tehtävät, 11. syyskuuta 005, sivu 1 / 13 Tehtäviä Tehtävä 1. Johda toiseen asteen yhtälön ax + bx + c = 0, a 0 ratkaisukaava. Tehtävä. Määrittele joukon A R pienin yläraja sup A ja suurin alaraja

Lisätiedot

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100 Tiedonsiirtokäskyt LOAD LOAD-käsky toimii jälkimmäisestä operandista ensimmäiseen. Ensimmäisen operandin pitää olla rekisteri, toinen voi olla rekisteri, vakio tai muistiosoite (myös muuttujat ovat muistiosoitteita).

Lisätiedot

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

Tehtävä 1. TL5302 Olio-ohjelmointi Koe Malliratkaisuja. Tässä sekä a)- että b)-kohdan toimiva ratkaisu: TL5302 Olio-ohjelmointi Koe 19.4.2005 Malliratkaisuja Tehtävä 1 Tässä sekä a)- että b)-kohdan toimiva ratkaisu: #include using namespace std; int main() int taul[5]=1,2,3,4,5; int *p,&r=taul[0];

Lisätiedot

Operaattorin ylikuormitus ja käyttäjän muunnokset

Operaattorin ylikuormitus ja käyttäjän muunnokset 13 Operaattorin ylikuormitus ja käyttäjän muunnokset Luvussa 7, "Ominaisuudet, taulukot ja indeksoijat," opit, miten luokan yhteydessä käytetään ohjelmallisesti []-operaattoria, jolloin objektia voidaan

Lisätiedot

1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on

1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on 1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on esiteltävä. char ch; int count=1; struct complex float re, im; complex z; complex sqrt( complex );

Lisätiedot

Harjoitustyön testaus. Juha Taina

Harjoitustyön testaus. Juha Taina Harjoitustyön testaus Juha Taina 1. Johdanto Ohjelman teko on muutakin kuin koodausta. Oleellinen osa on selvittää, että ohjelma toimii oikein. Tätä sanotaan ohjelman validoinniksi. Eräs keino validoida

Lisätiedot

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tällä luennolla Algebralliset tietotyypit Hahmonsovitus (pattern matching) Primitiivirekursio Esimerkkinä binäärinen hakupuu Muistattehan...

Lisätiedot

Olio-ohjelmointi Syntaksikokoelma

Olio-ohjelmointi Syntaksikokoelma C++-kielen uusia ominaisuuksia Olio-ohjelmointi Syntaksikokoelma 31.10.2008 Bool-tietotyyppi: Totuusarvo true (1), jos ehto on tosi ja false (0) jos ehto epätosi. Dynaaminen muistinvaraus: Yhden muuttuja

Lisätiedot

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

T740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 12. Periytyminen Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi

Lisätiedot

Tentti erilaiset kysymystyypit

Tentti erilaiset kysymystyypit Tentti erilaiset kysymystyypit Kysymystyyppien kanssa kannatta huomioida, että ne ovat yhteydessä tentin asetuksiin ja erityisesti Kysymysten toimintatapa-kohtaan, jossa määritellään arvioidaanko kysymykset

Lisätiedot

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1 Tietorakenteet ja algoritmit syksy 2012 Laskuharjoitus 1 1. Tietojenkäsittelijä voi ajatella logaritmia usein seuraavasti: a-kantainen logaritmi log a n kertoo, kuinka monta kertaa luku n pitää jakaa a:lla,

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla:

Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla: KERTAUSTEHTÄVIÄ Tietue Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla: struct henkilotiedot char nimi [20]; int ika; char puh [10]; ; Edellä esitetty kuvaus määrittelee

Lisätiedot

Muuttujat ja kontrolli. Ville Sundberg

Muuttujat ja kontrolli. Ville Sundberg Muuttujat ja kontrolli Ville Sundberg 14.9.2007 Alkeistyyppi Alin abstraktiotaso josta tarvitsee välittää Yksittäinen, jakamaton tiedonjyvä Tavallaan kaikki alkeistyypit ovat lukuja arvojoukko vaihtelee

Lisätiedot

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana Muilla kielillä: English Suomi Pong-peli, vaihe 3 Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana Jaetaan ohjelma pienempiin palasiin (aliohjelmiin) Lisätään peliin maila (jota ei voi vielä

Lisätiedot

20. Javan omat luokat 20.1

20. Javan omat luokat 20.1 20. Javan omat luokat 20.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Ohjelmointi 1 C#, kevät 2013, 2. tentti ITKP102 Ohjelmointi 1 C# 15.5.2013 1 / 6 Ohjelmointi 1 C#, kevät 2013, 2. tentti Tentaattori Antti-Jussi Lakanen Tässä tentissä saa olla mukana omia muistiinpanoja yhden arkin verran. Tentin valvojalla

Lisätiedot