TAMPEREEN TEKNILLINEN YLIOPISTO Tietotekniikan osasto. ANTTI VIRTANEN Visuaalinen tulkki ohjelmoinnin opetukseen Diplomityö

Koko: px
Aloita esitys sivulta:

Download "TAMPEREEN TEKNILLINEN YLIOPISTO Tietotekniikan osasto. ANTTI VIRTANEN Visuaalinen tulkki ohjelmoinnin opetukseen Diplomityö"

Transkriptio

1 TAMPEREEN TEKNILLINEN YLIOPISTO Tietotekniikan osasto ANTTI VIRTANEN Visuaalinen tulkki ohjelmoinnin opetukseen Diplomityö Aihe hyväksytty osastoneuvoston kokouksessa Tarkastajat: Prof. Hannu-Matti Järvinen (TTY) DI Essi Lahtinen (TTY) 1

2 Alkulause Haluan kiittää työn ohjaajia professori Hannu-Matti Järvistä ja tutkija Essi Lahtista, jotka pysyivät kärsivällisinä tekemisen kangerrellassa. Molemmat jaksoivat korjata kirjoitusvirheitäni ja antoivat hedelmällistä palautetta sisällöstä ahkerasti. Lämpimät kiitokset kaikille työn tekemisessä kannustaneille ja auttaneille ystäville ja kollegoille. Erityiskiitokset Mira Tammiselle, Mika Valtolalle sekä #titeplanets IRCkeskustelukanavan väelle, jotka saivat suurimman osan työhön liittyvästä tilityksestä. Tampereella Antti Virtanen Insinöörinkatu 68 B

3 Sisällysluettelo 1 Johdanto Ohjelmien visualisointi TTY:n perusohjelmoinnin opetus Tietokonepohjaisen visualisoinnin tarve Visualisoinnin hyödyt Visualisoinnin käyttöönoton ongelmat Hyvän visualisointityökalun ominaisuudet Visualisoinnin hyötyjen arviointi Olemassaolevat järjestelmät Tango, X-Tango, Polka Trakla, Trakla Blue, BlueJ Jeliot-perhe SDE (SIMPLESEM) Yhteenveto Lausekielten jäsentäminen Formaalit kielet ja kielioppi Vasemmalle rekursiivisuus Säännöllisten kielten luokittelu (LALR, LR, LL) Kurkistus Lausekielten määrittely Jäsennyspuu Yksikäsitteisyys Presedenssi ja sitovuus Jäsennystekniikat Lausekielten jäsentäminen käytännössä Selaaja Jäsentäjä Välikieli Postfix Yleisassembler Tavukoodi

4 3.4.4 Puurakenne (AST) Tulkit ja virtuaalikoneet Kääntämisen ja tulkkaamisen ero Virtuaalikone Tulkkaamisen edut Tulkkien toteuttaminen Symbolitulkin perusrakenne Käskykanta Puurakenne (AST) tulkin välikielenä Tulkkaamisen nopeus Konekielelle kääntäminen tulkissa Muistimalli Automaattinen roskienkeruu Symbolitaulu Aktivaatiopino Ajonaikaiset semanttiset tarkistukset VIP visualisaattorin toteutus Perusrakenne Käytetyt apukirjastot Ongelmat CUP:n kanssa Välikieli Suoritusaskel Kääntäjä Staattiset semanttiset tarkistukset Profiloija Testaus Loki Regressiotestaus Käyttöliittymä Muuttujien ja funktiokutsujen esittäminen Hallintapainikkeet Visualisointien tekeminen Ohjekommentit

5 5.10 Koodieditori Lausekkeiden evaluoinnin esittäminen Tulkki Tulkkialgoritmi Dynaamiset semanttiset tarkistukset Symbolitaulu Aktivaatiopino Muisti Muuttujien toteutus VIP:n ohjelmointikieli C Tyypitys ja tietotyypit Ominaisuuksia, joita ei ole toteutettu Tiedon luku ja kirjoitus Funktiot Lauseet Jatkokehitysajatuksia Räätälöinti Kielen muokkaaminen Välikielen esittäminen Muisti-ikkuna Uudet C-- ominaisuudet Askelten rajoittaminen Undo-toiminto Käyttöliittymä C++:n STL-standardikirjaston toteuttaminen Yhteenveto Lähdeluettelo...63 Liite 1 Selaajan JFlex-tiedosto Liite 2 Jäsentäjän CUP-tiedosto 5

6 TAMPEREEN TEKNILLINEN YLIOPISTO Tietotekniikan osasto Ohjelmistotekniikka VIRTANEN, ANTTI: Visuaalinen tulkki ohjelmoinnin opetukseen Diplomityö, 51 s., 21 liites. Tarkastajat: prof. Hannu-Matti Järvinen, tutkija Essi Lahtinen Rahoittajat: TTY, Codewitz/Minerva, Virtuaali-yliopisto. Toukokuu 2005 Avainsanat: tulkki, C++, visualisointi, opetus Ohjelmien visualisointia on tutkittu paljon ja visualisointiin on kehitetty erilaisia työkaluja. Opetuskäyttössä erityisesti tietorakenteiden ja algoritmien visualisointi on osoittautunut hyödylliseksi. Oppikirjoissa esitetään usein ohjelmien toimintaa kuvien ja symbolien avulla esimerkiksi piirtämällä nuolia kuvaamaan osoittimia. Tässä työssä toteutettiin visuaalinen tulkki C++-kielen osajoukolle ohjelmoinnin peruskurssin tarpeisiin. Toteutettu tulkki visualisoi ohjelman tilan ja esittää suorituksen etenemisen askel kerrallaan. Tulkki on suunniteltu ohjelmoinnin perusopetukseen, joten tehokkuuteen ei ole kiinnitetty erityistä huomiota. C++-kielen perusrakenteet toteutettiin työn puitteissa, mutta mallit, oliot ja poikkeukset jätettiin toteuttamatta. Vastaavia järjestelmiä on toteutettu muissa yliopistoissa, mutta mikään tutkituista vaihtehdoista ei soveltunut TTY:n käyttöön, joten tässä työssä toteutettiin kokonaan itse tehty visualisaattori. Erityistä huomiota kiinnitettiin helppokäyttöisyyteen sekä opiskelijan että opettajan näkökulmasta. Järjestelmän lähdekoodi on kokonaisuudessaan saatavilla ilmaiseksi ei-kaupalliseen käyttöön. Tulkki on toteutettu Java-applettina, joten sitä voi käyttää millä tahansa käyttöjärjestelmällä. WWW-palvelinta sijaan visualisointeja voidaan ajaa paikalliselta kovalevyltä selaimella. Tulkkia on käytetty TTY:llä perusohjelmoinnin opetuksessa ja uusien visualisointien luominen on osoittautunut helpoksi. Työkalun käytöstä on kerätty opiskelijapalautetta, joka on ollut melko neutraalia. Tulkin käyttö on ollut täysin vapaaehtoista, joten aineiston pohjalta on vaikea arvioida sen hyödyllisyyttä. 6

7 TAMPERE UNIVERSITY OF TECHNOLOGY Department of Computer Science, Institute of Software Systems VIRTANEN, ANTTI: Visual interpreter for learning programming Master of Science Thesis, 51 pages, 21 enclosure pages Examiner: Dr. Hannu-Matti Järvinen and Res. Essi Lahtinen May 2005 Keywords: interpreter, C++, visualization, learning Programming books often present the structure and behavior of programs using pictures and symbols. For example, arrows commonly present pointers. Consequently, there has been significant amount of research on visualizing programs and a variety of tools have been developed. A visual interpreter for a subset of C++ programming language was developed in this project. The interpreter visualizes the state of a given program and it's execution step by step. The interpreter has not been optimized for speed as the system was desigend for teaching introductory programming. The basic constructs of C++ were implemented but advanced features like templates, object oriented programming and exceptions were left out. Similar systems have been developed in other universities but all examined systems lacked some important features from our point of view. Thus, a completely new system was developed instead of tailoring an existing one. Ease of use, from both student's and teacher's point of view, was considered especially important. The full source code of the system is available on request for non-commercial use. Being a Java-applet, the interpreter is available on virtually all platforms. The system is still a stand-alone program and can be used without a WWW server. The interpreter has been used on Tampere University of Technology for introductory programming course and creating new visualizations has proven to be easy. Survey was made among the students and generally the feedback was neutral. As using the system has been voluntary it is difficult to estimate whether the visualization had any impact on the students. 7

8 Termit ja lyhenteet Työssä käytettyjen termien ja lyhenteiden selityksiä. Mikäli työssä on haluttu viitata tiettyyn versioon esimerkiksi JDK:sta, versio on mainittu erikseen. lyhenne selitys viite Java Java-ohjelmointikieli yleensä AWT Abstract Window Toolkit, Javan alkuperäinen käyttöliittymäkirjasto JDK Java Developer's Kit, Sun Microsystemsin julkaisema Javan kehitysympäristö Swing Javan nykyinen käyttöliittymäkirjasto JIT Just-In-Time, (virtuaalikoneissa) konekielelle kääntäminen juuri ennen operaation suorittamista WWW World Wide Web HTTP HyperText Transfer Protocol CGI Common Gateway Interface MVC Model-View-Controller, arkkitehtuurimalli TTY Tampereen Teknillinen Yliopisto VIP Visual InterPreter Perl Perl-ohjelmointikieli LR Left-to-right, Right-most derivation LALR Left-to-right, Right-most derivation AST Abstract Syntax Tree, ohjelmaa esittävä puurakenne BNF Backus-Naur Form 8

9 lyhenne selitys viite CFG Context-Free Grammar UML Unified Modeling Language ITiCSE Information Technology in Computer Science Education STL Standard Template Library HTML HyperText Mark-up Language ACM Association for Computing Machinery SIGCSE The ACM Special Interest Group on Computer Science VM Virtual Machine, virtuaalikone SDE Simplesem Development Environment, visualisointiympäristö ja virtuaalikone Simplesemarkkitehtuurille TRAKLA Teknillisessä Korkeakoulussa kehitetty järjestelmä tietorakententeiden ja algoritmien visualisointiin 9

10 1 Johdanto Ohjelmien, tietorakenteiden ja algoritmien koneellista visualisointia ja opettamista on tutkittu kauan. Tutkimus ja kehitystyö on eriytynyt käsittelemään ohjelmien eri piirteiden visualisointia ohjelmistokehityksessä ja ohjelmoinnin opetuksessa. Ohjelmoinnin eri osa-alueille on havaittu hedelmälliseksi käyttää erilaisia visualisointeja: erityisesti tietorakenteet ja algoritmit esitetään usein abstraktilla tasolla nuolien, laatikoiden yms. avulla. Laajasta tutkimuksesta huolimatta visualisoinnin hyödyllisyydestä oppimisen kannalta ei ole selvyyttä. Yleisesti kuitenkin oletetaan visualisoinnista olevan hyötyä oppimisen kannalta. Interaktiivisuus on nähty olennaiseksi itseopiskeluun ja opetuksen tueksi tarkoitetuissa visualisoinneissa. Mikäli opiskelija voi kokeilla eri lähestymistapoja ja ratkaisuja, ongelman eri aspektien ymmärtäminen on syvällisempää. Vapaan interaktiivisuuden saavuttaminen ohjelmien visualisoinnissa edellyttää mahdollisuutta muokata visualisoitavaa ohjelmakoodia ja siten jonkinlaisen tulkin toteuttamista. Ohjelmointikielten tulkin toteuttaminen mielivaltaiselle ohjelmointikielelle on kääntäjän toteuttamiselle läheinen ongelma. Kuten kääntäjän, tulkin täytyy jäsentää lähdekoodi, suorittaa sille syntaksin ja semantiikan tarkistuksia ja muodostaa ohjelmasta välikielinen versio. Konekielikoodin generoinnin sijaan tulkki voi toteuttaa kielen operaatiot korkean tason kielellä, jolla tulkki itse on kirjoitettu. Koska tulkkaaminen hidastaa ohjelman suoritusta, erityistä huomiota tulkkien tutkimuksessa on kiinnitetty tehokkuuteen. Tehokkaiden tulkkien toteuttaminen on kuitenkin erittäin monimutkaista. Tämän diplomityön tavoitteena oli rakentaa erityisesti ohjelmoinnin perusopetukseen soveltuva visuaalinen tulkki, jossa yksinkertaisten ohjelmien ajonaikaista toimintaa voi tarkastella yksityiskohtaisella tasolla. Tavoitteena oli, että työssä kehitetty visuaalinen tulkki (Visual InterPreter, VIP) tukisi mahdollisimman hyvin ohjelmoinnin perusopetusta TTY:n kurssilla Laaja 10

11 ohjelmointi. Koska tulkkia oli tarkoitus käyttää perusohjelmoinnin opetuksessa, tulkilla suoritettavat koodiesimerkit olivat yksinkertaisia. Näin ollen tulkin tehokkuus oli toissijaista ylläpidettävyyden ja selkeyden rinnalla. Jotta tulkin käyttö olisi mahdollisimman helppoa uusien esimerkkien tuottamisen piti vaatia mahdollisimman vähän vaivaa opettajalta, eikä työkalun asentaminen ja käyttöönotto saanut olla työlästä. VIP:n simuloima ohjelmointikieli on C++:n aito osajoukko, jolle on annettu nimi C--. C-- sisältää C++:n perusrakenteet, mutta olio-ohjelmointi, vuot ja poikkeukset on jätetty toteuttamatta. Luvussa 2 luodaan katsaus muihin ohjelmoinnin opetukseen tarkoitettuihin visualisointiympäristöihin ja määritellään perusohjelmoinnin opetuksen kannalta olennaisia ominaisuuksia sekä käsitellään työkalujen arviointikriteereitä. Lausekielten jäsentämisen teoriaa, tulkkien ja kääntäjien eroja sekä tulkkien toteutustekniikoita käsitellään luvuissa 3-5. Tulkkien ja virtuaalikoneiden tehokkuusoptimointia ja lausekielten erityiskysymyksiä ei käsitellä. Luvussa 6 esitetään varsinainen toteutettu visualisointiympäristö. Luvut 7 ja 8 käsittelevät työn onnistumista ja jatkokehitysajatuksia. 11

12 2 Ohjelmien visualisointi Ohjelmointikielten visualisointia opetustarkoituksiin on tutkittu ja kehitetty ainakin 1960-luvulta alkaen [Knowlton 1966]. Graafinen visualisointi on luonnollinen tapa opettaa algoritmeja ja ohjelmointikielten semantiikkaa. Ohjelmoinnin opetuksessa eri kursseilla on erilaiset lähtötasot, tavoitteet ja siten erilaiset tarpeet visualisoinnille. Algoritmien ja tietorakenteiden visualisoinnissa käytetään erilaista asioiden esitystapaa kuin perusohjelmoinnissa. Myös samalla kurssilla voidaan joitakin asioita esittää hyvin abstraktilla tasolla ja toisia hyvin yksityiskohtaisella. Tässä luvussa arvioidaan ja esitellään olemassa olevia visualisointijärjestelmiä, käsitellään TTY:n perusohjelmoinnin opetuksen ongelmia ja määritellään perusteet visualisointityökalujen arviointiin. 2.1 TTY:n perusohjelmoinnin opetus TTY:n perusohjelmointikursseilla on vuosittain noin tuhat opiskelijaa. Näin suuri opiskelijamäärä on itsessään merkittävä haaste kurssien järjestelyille. Opiskelijoiden tarve ohjaukselle on hyvin yksilöllistä, koska osalla opiskelijoista on jo alan työkokemusta opiskelut aloittaessaan. Osa taas ei tiedä ohjelmoinnista ja tietokoneiden toiminnasta mitään. Peruskoulu ja lukio eivät automaattisesti luo riittäviä valmiuksia ohjelmoinnissa tarvittavien abstraktien käsitteiden hahmottamiseen. Matemaattisten formalismien sijaan ohjelmoinnin peruskäsitteiden konkretisointi visualisoimalla ja esimerkeillä onkin oleellinen osa opetusta. TTY:llä on käytetty menestyksellisesti ohjelmoinnin opetuksessa harjoitustöiden automaattiseen tarkistamiseen ja arviointiin Ceilidh- ja Style++-järjestelmiä, jotka arvioivat ohjelmien toteutuksen oikeellisuutta ja ohjelmointityyliä. Automaattitarkistus antaa opiskelijalle välittömästi palautetta, minkä jälkeen kurssihenkilökunta tarkastaa manuaalisesti hyväksytysti palautetut, toimivat ohjelmat. Automaattitarkistimet eivät kuitenkaan yksin auta oppimaan ohjelmointia, eivätkä ne voi täysin korvata opettajia. 12

13 Täysin hyödyttömiä automaattiset tarkistimet eivät oppimisen kannalta kuitenkaan ole. Automaattisen tyylianalysaattorin käyttö kursseilla pakottaa opiskelijat lukemaan ja noudattamaan Ohjelmistotekniikan laitoksen C++tyyliohjetta [Rintala & Jokinen 2004], mikä on selvästi parantanut harjoitustöiden rakennetta ja luettavuutta. 2.2 Tietokonepohjaisen visualisoinnin tarve Algoritmien ja ohjelmien toimintaa voidaan simuloida paperin ja kynän avulla, mutta tämä on usein työlästä ja siinä on helppo tehdä virheitä. Hyvin tehdyssä tietokonepohjaisessa simuloinnissa ohjelman toiminnan seuraaminen on huomattavasti helpompaa. Ensisijaisesti visualisoinnit tukevat itsenäistä opiskelua ja opitun asian kertaamista. Automaattisilla visualisoinneilla on myös mahdollista esittää asioita, joiden simuloiminen manuaalisesti olisi käytännössä mahdotonta. Esimerkiksi lajittelualgoritmien toimintaa isoilla aineistoilla on hyvin näppärää esittää graafisesti simulaattorilla. 2.3 Visualisoinnin hyödyt Visualisointia on tutkittu kauan ja sitä pidetään hyödyllisenä, mutta hyödyn arviointi ja toimivan visualisoinnin suunnittelu ovat kiistanalaisia kysymyksiä, joista on monia eri näkemyksiä. ITiCSE:n vuonna 2002 teettämä tutkimus [Almstrum et al. 2002] esittää pääteesinään, että edistääkseen oppimista visualisoinnin pitää mahdollistaa kokeilu ja aktiivinen oppiminen (käännetty englannista) Visualisoinnin käyttöönoton ongelmat Opettajien mielestä viisi tärkeintä ongelmatekijää visualisoinnin käytössä ohjelmistotekniikan opetukseen olivat SIGCSE:n vuonna 2003 tehdyn kyselyn mukaan [Naps et al. 2003]: 13

14 hyvien esimerkkien etsimiseen kuluva aika uuden työkalun käytön opetteluun kuluva aika uusien visualisointien tekemiseen kuluva aika hyvien kehitystyökalujen puute visualisoinnin integroimiseen kurssin käytäntöihin kuluva aika. Opetushenkilökunnan näkökulmasta työkalun asentamiseen ja visualisointien rakentamiseen kuluva aika on selvästi kriittinen tekijä, joten hyvän työkalun tulee olla mahdollisimman helppokäyttöinen ja helposti asennettava Hyvän visualisointityökalun ominaisuudet Visualisointityökaluilla on aina kaksi käyttäjäryhmää, opettajat ja oppilaat, joilla on hieman erilaiset arviointikriteerit työkalun hyödyllisyydelle. Kuten jo aiemmin todettiin, opettajien näkökulmasta aika ja helppokäyttöisyys ovat kriittisiä tekijöitä. Oppilaan näkökulmasta visualisointien kehittämiseen ja etsimiseen kuluva työmäärä on irrelevanttia. ITiCSE:n tutkimuksessa [Almstrum et al. 2002] määritellään seuraavia ominaisuuksia hyvälle visualsointityökalulle: 1) Visualisoinnin tulkintaohjeet. Opiskelijalle on tarjottava selkeä kuvaus siitä, miten eri asiat visualisoinnissa esitetään. 2) Asioiden oikea esitystaso ja esitystapa. Opiskelijalle pitää esittää asiat riittävällä tarkkuudella ja sopivalla abstraktiotasolla, jotta olennainen ei huku yksityiskohtien sekaan. 3) Useiden eri näkymien tarjoaminen. Ohjelman suoritusta ja toimintaa on hyvä pystyä tarkkailemaan mahdollisimman monesta eri näkökulmasta. Näkökulmaa on voitava vaihtaa kesken ohjelman suorituksen. 14

15 4) Tehokkuusanalyysin esittäminen. Algoritmien tehokkuuden analysointi on usein hyödyllinen ja olennainen osa niiden ymmärtämistä. 5) Ohjelman suoritushistorian esittäminen. Algoritmien toiminnan ymmärtämistä helpottaa, jos aiemmin suoritettujen operaatioiden suoritusjärjestys voidaan nähdä. 6) Joustavien suoritusmahdollisuuksien tarjoaminen. Ohjelman tai algoritmin toimintaa pitäisi pystyä kontrolloimaan ja suoritusaskelia peruuttamaan. 7) Mahdollisuus kokeilla ja tutkia eri vaihtoehtoja interaktiivisesti. Staattisen visualisoinnin sijaan opiskelijalla tulisi olla mahdollisuus muokata algoritmia ja kokeilla eri vaihtoehtoja mahdollisimman vapaasti. 8) Mahdollisuus kokeilla eri syötteitä. Ohjelman syötettä ei tulisi kiinnittää, vaan opiskelijalle pitää antaa mahdollisuus omien mielivaltaisten syötteiden käyttämiseen. 9) Dynaamisten kysymysten esittäminen. Visualisoinnin lisäksi opiskelijalle olisi hyvä esittää kysymyksiä ohjelmasta. Erityisesti kysymykset, jotka pyytävät opiskelijaa ennustamaan ohjelman tulevaa käyttäytymistä, ovat oppimisen kannalta hyödyllisiä. 10)Automaattisen palautteen antaminen. Hyvä visualisointi antaa ajonaikaisesti automaattista palautetta opiskelijan osaamisesta. 11)Selitysten integroiminen visualisointiin. Hyvä visualisointi ei pohjaudu pelkästään asioiden esittämiseen graafisesti, vaan opettajan tulee voida liittää visualisointiin erillisiä selittäviä tekstejä. Käytännössä kaikki menestyneet visualisointityökalut ohjelmoinnin opetuksessa noudattavat näitä perusperiaatteita. Näiden periaatteiden noudattaminen käytännössä edellyttää visualisoinnin toteuttamista jonkinlaisen tulkin avulla, mikä tekee hyvän visualisointityökalun toteuttamisesta haastavaa. 15

16 2.3.3 Visualisoinnin hyötyjen arviointi Aiemmin todettiin visualisoinnin hyötyjen arvioinnin olevan hankalaa ja saatujen tulosten ristiriitaisia. Hyötyjen arviointia varten olisi hyvä kerätä ainakin seuraavia tietoja visualisointityökalun käytöstä [Naps et al. 2003]: opiskelijoiden tarkkailu työkalun käytön yhteydessä työkalun käyttöön kulunut aika opiskelijoille tehdyt kyselyt kollegoiden arviot työkalusta opiskelijoiden haastattelu. Näin kerätyn informaation analysointi ja kyselyjen suunnittelu on oma ongelmakenttänsä, eikä sen käsittely kuulu tämän diplomityön piiriin. Haastattelujen ja opiskelijoiden suoranaisen tarkkailun toteuttaminen on rahallisesti ja ajallisesti kallista ja hankalaa, joten sitä ei yleensä tehdä. Sen sijaan työkalun käyttöön kulunutta aikaa ja työkalun käyttöä voidaan tilastoida epäsuorasti minimaalisin kustannuksin, mikäli työkalu mahdollistaa käyttöä koskevien tietojen keräämisen näkymättömästi. 2.4 Olemassaolevat järjestelmät Tässä kohdassa luodaan lyhyt katsaus olemassaoleviin visualisointijärjestelmiin. Katsaus ei ole kattava, vaan esittää poikkileikkauksen erilaisista lähestymistavoista visualisointiin ohjelmoinnin opetuksessa. Järjestelmien yksityiskohtiin ei mennä Tango, X-Tango, Polka Tango on 1993-kehitetty visualisointiympäristö algoritmien visualisointiin. X- Tango on X-Window toteutus Tangosta ja Polka on myöhemmin tehty Javatoteutus. 16

17 Tango on tarkoitettu 2-ulotteisten algoritmianimaatioiden tekoon. Animaatiot rakennetaan Tangon omalla ohjelmointikielellä, jonka jälkeen niitä voidaan askeltaa ja ajaa Tangolla. Tangon ohjelmointikieli tarjoaa yksinkertaiset grafiikkaprimitiivit, kuten laatikon ja ympyrän, sekä rakenteita näiden liikuttamiseen ja manipulointiin [Hartley 1994] Trakla, Trakla2 Trakla on Teknillisessä korkeakoulussa kehitetty järjestelmä tietorakenteiden ja algoritmien opettamiseen. Jatkokehitysversiot Matrix ja Trakla2 osaavat esittää graafisesti algoritmeja ja perustietorakenteita sekä sisältävät tarvittavat työkalut erilaisten visualisointien ja testien rakentamiseen. Trakla mahdollistaa interaktiivisten visualisointien tekemisen sekä erilaisten tehtävien tarjoamisen opiskelijalle. Trakla esittää algoritmien ja tietorakenteiden toiminnan abstraktilla tasolla, eikä visualisointia sidota minkään tietyn ohjelmointikielten rakenteisiin. Trakla2 kerää taustalla hyvin yksityiskohtaista tietoa opiskelijoiden toimenpiteistä työkalua käyttäessä. Kyseisistä tiedoista on jo nyt ollut selvää etua opiskelijoiden oppimisen analysoinnissa. [Korhonen et al. 2002] Blue, BlueJ Blue on erityisesti opetuskäyttöön suunniteltu oliokieli ja sen päälle rakennettu visuaalinen kehitysympäristö. Bluen kehittäminen ja tukeminen loppui vuonna BlueJ on Bluesta saatujen kokemusten pohjalta rakennettu Javaohjelmointikielen opetukseen tarkoitettu visuaalinen kehitysympäristö. BlueJ antaa opiskelijoille mahdollisuuden editoida ohjelman lähdekoodia, katsella oliohierarkiaa graafisesti ja tarjoaa debuggausmahdollisuudet jne. BlueJ:n käyttö käytännössä vaatii perinteisestä poikkeavaa lähestymistapaa ohjelmoinnin opetukseen siten, että ohjelmoinnin perusrakenteita lähdetään opettamaan rinnan olio-ohjelmoinnin kanssa [Kolling et al. 2003]. BlueJ on osoittautunut käytännössä erittäin hyväksi [Kolling et al. 2003], mutta kaikki opettajat eivät ole yhtä mieltä opetettavien asioiden jaksottamisesta eri kurssien kesken. TTY:llä käytetään perinteistä jakoa olio-ohjelmointia käsittelevään ja ohjelmoinnin 17

18 perusrakenteita käsittelevään kurssiin Jeliot-perhe Jeliot on joukko hieman toisistaan poikkeavia visualisointiympäristöjä. Jeliotin uusin versio, Jeliot 3 on Java-pohjainen ympäristö, jossa Java-ohjelmien toimintaa voidaan visualisoida dynaamisesti ja editoida niitä. Jeliot voidaan integroida osaksi BlueJ ympäristöä ja siinä on sama lähestymistapa ohjelmoinnin opetukseen: Kielenä on Java ja olio-ohjelmoinnista aletaan puhua heti alkeita opetettaessa. Jeliotin toimivuutta on tutkittu runsaasti. Helsingin yliopistolla havaittiin 1998, että Jeliotin käyttö ja hyöty jäi vähäiseksi [Lattu, Meisalo, Tarhio 1998]. Jeliotin uudemmat versiot ovat kuitenkin osoittautuneet hyödyllisemmiksi. Tulokset ovat kuitenkin edelleen ristiriitaisia Uusimman Joensuun yliopistolla tehdyn tutkimuksen mukaan noin 15% opiskelijoista koki hyötyvänsä Jeliotista, mutta noin 30% koki Jeliotin hidastavan opiskelua [Kannusmäki et al. 2002] SDE (SIMPLESEM) Simplesem on kuvitteellinen tietokonearkkitehtuuri, joka on esitelty kirjassa Programming Language Concepts [Ghezzi & Mehdi 1997]. SDE on Javapohjainen toteutus tästä arkkitehtuurista [Hauswirth et al. 1998]. Simplesemmäärittely kuvaa yksinkertaisen suorittimen ja sen käskykannan. SDE mahdollistaa Simplesem-ohjelman suorituksen seuraamisen konekielitasolla ja esittää ohjelman käytössä olevien rekisterien ja muistin visuaalisesti. SDE:n käyttö perusohjelmoinnin opetuksessa on hankalaa, koska opiskelijan on ymmärrettävä suorittimien yleiset toimintaperiaatteet, eikä korkean tason ohjelman toiminnan hahmottaminen suoritettavasta konekielisestä koodista ole helppoa. SDE ja Simplesem soveltuvat parhaiten konekielen, suorittimien ja matalan tason ohjelmoinnin opetukseen. 18

19 2.4.6 Yhteenveto Vaikka kaikissa järjestelmissä on omat vahvuutensa, yksikään niistä ei sellaisenaan soveltunut TTY:n tarpeisiin. Jeliotin ja BlueJ:n käyttö vaatii opetuskieleksi Javan, minkä lisäksi BlueJ vaatii erilaista lähestymistapaa kuin TTY:llä on valittu. Jeliotia ei myöskään ole tarkoitus laajentaa ymmärtämään muita ohjelmointikieliä [Levy, Ben-Ari, Uronen 2003]. Sekä Jeliot että BlueJ noudattavat aiemmin esitettyjä hyvien visualisointien suunnitteluperiaatteita esimerkillisesti. Tango:n ja SDE:n abstraktiotaso sopii huonosti perusohjelmointiin. SDE:n käyttö vaatisi prosessorin ja konekielen selittämistä opiskelijoille aivan alussa. Tango taas soveltuu parhaiten algoritmien ja abstraktien asioiden visualisointiin. Trakla on on hyvä järjestelmä tietorakenteiden ja algoritmien visualisointiin abstraktilla tasolla, mutta siitä on vain vähän hyötyä ohjelmoinnin perusopetuksessa. 19

20 3 Lausekielten jäsentäminen Tässä luvussa esitetään aluksi formaalien kielten teoriaa ja joukko määritelmiä, joita tarvitaan käytännön sovellusten ymmärtämiseksi. Myöhemmin esitetään lausekielten jäsentämisen yleisiä tekniikoita. Virheenkorjausta jäsentämisessä ei käsitellä. 3.1 Formaalit kielet ja kielioppi Formaali kieli koostuu joukosta aakkosia ja määrittelee mitkä kaikista aakkosista muodostettavissa olevista aakkosten jonoista (merkkijonoista) kuuluvat kieleen. Formaalin kielen aakkoset ovat abstrakteja symboleita, eikä niillä välttämättä ole suoraa kytkentää reaalimaailman aakkosiin ja merkkeihin. Mikäli kieli on äärellinen, se voidaan määritellä luettelemalla kaikki kieleen kuuluvat merkkijonot. Kieleen kuuluvia leksikaalialkioita, jakamattomia äärellisiä merkkijonoja, kutsutaan terminaaleiksi. Terminaaleista käytetään myös termejä terminaalisymboli ja päätemerkki. Äärettömiä merkkijonoja sisältäville kielille voidaan rakentaa määritelmä neljästä elementistä: Ei-terminaalien äärellinen joukko N. Terminaalien äärellinen joukko T, T N =. Aloitussymboli S, S N. Reduktiosääntöjen joukko P. Jokainen P:n alkio on muotoa u v, missä u ( N T )+ j a v ( N T)*. Mielivaltainen merkkijono kuuluu kieleen, jos ja vain jos se voidaan sääntöjen avulla redusoida aloitussymboliksi. 20

21 3.1.1 Vasemmalle rekursiivisuus Kieliopin sääntö on vasemmalle rekursiivinen, mikäli kaikki sen säännöt ovat muotoa: A t tai A tb, missä t on terminaalisymboli ja B ja A ovat ei-terminaaleja. Oikealle rekursiiviset kieliopit ovat myös mahdollisia, mutta usein lausekielet esitetään käytännön syistä vasemmalle rekursiivisina tai muunnetaan vasemmalle rekursiivisiksi. Vasemmalle rekursiivisuudesta käytetään myös ilmausta vasemmalle lineaarinen. Mikäli kielioppi on vasemmalle rekursiivinen tai oikealle rekursiivinen, kielioppi on säännöllinen. Säännöllinen kielioppi määrittelee säännöllisen kielen Säännöllisten kielten luokittelu (LALR, LR, LL) Säännölliset kielet voidaan jakaa eri luokkiin, joista LL, LR ja LALR ovat tärkeimmät. LR-kieliopilla määritelty kieli voidaan jäsentää lukemalla symbolijonoa vasemmalta oikealle (left-to-right), käyttämällä pelkistyssäännöistä valintatilanteissa aina oikeanpuolimmaisen osan luetusta redusoivaa sääntöä (rightmost reduction). LALR on LR:n osajoukko, joka on hyödyllinen kahdesta syystä: Käytännössä kaikki mielenkiintoiset LR-kieliopit ovat LALR-kielioppeja LALR-kieliopin jäsentäminen on huomattavasti helpompaa kuin LR-kielen. LL-kieliopit ovat tärkeä luokka, koska ne voidaan jäsentää tekniikalla, josta käytetään nimeä rekursiivinen laskeutuminen (recursive descent) tai kokoava jäsentäminen. Rekursiivinen laskeutuminen on erittäin yksinkertainen toteuttaa, mikäli jäsentäjä joudutaan tekemään ilman automaattityökaluja. 21

22 3.1.3 Kurkistus Sääntöjen jäsentäminen yksikäsitteisesti vaatii useimmiten vähintään yhden symbolin mittaisen ikkunan käsittelemättömään osaan symbolijonoa. Seuraavaksi tulevaa symbolia tutkimalla voidaan ratkaista joitakin muuten hankalia ristiriitatilanteita. Jäsennettävän symbolijonon esikatselusta käytetään nimitystä kurkistus (look-ahead englanninkielisessä materiaalissa). LR(k) tarkoittaa LR-kielioppia, jossa esikatselupuskurin koko on k symbolia. Vastaavasti käytetään merkintöjä LALR(k) ja LL(k). Erityisesti LALR(1) ja LR (1) ovat tärkeitä luokkia, koska näille tunnetaan tehokkaita jäsennystekniikoita, joita ei voida kuitenkaan soveltaa yleisesti LALR(k)-kielen jäsentämiseen Lausekielten määrittely Useimmat ohjelmointikielet voidaan esittää LR(1)-kielioppina [Backhouse 1979, sivu 172]. Matemaattisen määrittelyn sijaan lausekielen kielioppi esitetään yleensä BNF-notaatiolla, joka sallii muunmuassa loogisen TAI-operaation käytön. Usein terminaalit erotetaan ei-terminaaleista kirjoittamalla terminaalit isoilla kirjaimilla ja ei-terminaalit pienillä. Kuvassa 3.1 on esimerkki yksinkertaisesta lausekkeita kuvaavasta kieliopista. lauseke ::= tekijä tekijä + lauseke tekijä ::= termi termi * tekijä termi ::= MUUTTUJA VAKIO Kuva 3.1 Yksinkertainen kielioppi Jäsennyspuu Aiemmin esitetty riittää määrittelemään yksikäsitteisesti, mitkä merkkijonot kuuluvat kieleen ja mitkä eivät. Merkkijonoa tutkittaessa voidaan rakentaa jäsennyspuu, joka esittää kuinka kieliopin sääntöjä on käytetty. Jokaista käytettyä sääntöä kuvaa solmu, ja kunkin solmun lapsina ovat rekursiivisesti jäsennyksessä käytetyt säännöt. 22

23 3.1.6 Yksikäsitteisyys Kielioppi on yksikäsitteinen, mikäli jokaista laillista (kieleen kuuluvaa) merkkijonoa kohti on vain yksi jäsennyspuu. Kuvan 3.1 kielioppi on esitetty yksinkertaisemmassa muodossa kuvassa 3.2. Kuvan 3.2 kielioppi ei kuitenkaan ole yksikäsitteinen. termi ::= MUUTTUJA VAKIO lauseke ::= termi termi + lauseke termi * lauseke Kuva 3.2 Monikäsitteinen kielioppi Lause i = 2 * kuuluu molempiin kieliin, mutta kuvan 3.2 kieliopissa se voidaan tulkita joko muodossa i = (2 * 3) + 4 tai i = 2 * (3 + 4) Presedenssi ja sitovuus Presedenssi tarkoittaa operaattoreiden (sääntöjen) keskinäistä merkitsevyysjärjestystä. Mikäli kertolaskulle määritellään yhteenlaskua korkeampi presedenssi, se suoritetaan ensin, jolloin edellisen kappaleen kieliopista saadaan yksikäsitteinen. Sitovuus määrittelee suoritusjärjestyksen vasemmalta tai oikealta aloitettavaksi. Useimmiten lausekkeet sidotaan vasemmalle, mutta muun muassa potenssilasku sidotaan oikealle. Joissakin operaatiossa sitomissuunnalla ei ole merkitystä lopputuloksen kannalta (esimerkiksi yhteenlasku). Esimerkkikielioppiin voidaan lisätä vähennyslasku esimerkiksi muuttamalla lausekkeen määrittelevää sääntöä. lauseke ::= tekijä tekijä + termi tekijä - termi 23

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

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä olevilla komponenteilla? Voisiko jollakin ohjelmointikielellä

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

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

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

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

Ohjelmointi 1 / syksy /20: IDE

Ohjelmointi 1 / syksy /20: IDE Ohjelmointi 1 / syksy 2007 10/20: IDE Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/8 Tämän luennon rakenne

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

DIPLOMITYÖ ARI KORHONEN

DIPLOMITYÖ ARI KORHONEN DIPLOMITYÖ ARI KORHONEN TEKNILLINEN KORKEAKOULU Diplomityö Tietotekniikan osasto 20.5.1997 Ari Korhonen WORLD WIDE WEB (WWW) TIETORAKENTEIDEN JA ALGORITMIEN TIETOKONEAVUSTEISESSA OPETUKSESSA Työn valvoja

Lisätiedot

11.4. Context-free kielet 1 / 17

11.4. Context-free kielet 1 / 17 11.4. Context-free kielet 1 / 17 Määritelmä Tyypin 2 kielioppi (lauseyhteysvapaa, context free): jos jokainenp :n sääntö on muotoa A w, missäa V \V T jaw V. Context-free kielet ja kieliopit ovat tärkeitä

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015 TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 30. marraskuuta 2015 Sisällys t Väitöstilaisuus 4.12.2015 kello 12 vanhassa juhlasalissa S212 saa tulla 2 demoruksia

Lisätiedot

.NET ajoympäristö. Juha Järvensivu 2007

.NET ajoympäristö. Juha Järvensivu 2007 .NET ajoympäristö Juha Järvensivu juha.jarvensivu@tut.fi 2007 Käännösprosessi C# lähdekoodi C# kääntäjä CILtavukoodi JITkäännös Ajettava natiivikoodi Kehitysympäristössä ohjelmoijan toimesta Ajonaikana.NET

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

Yhteydettömän kieliopin jäsennysongelma

Yhteydettömän kieliopin jäsennysongelma Yhteydettömän kieliopin jäsennysongelma Yhteydettömän kieliopin jäsennysongelmalla tarkoitetaan laskentaongelmaa Annettu: yhteydetön kielioppi G, merkkijono w Kysymys: päteekö w L(G). Ongelma voidaan periaatteessa

Lisätiedot

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistojen mallintaminen, mallintaminen ja UML 582104 Ohjelmistojen mallintaminen, mallintaminen ja UML 1 Mallintaminen ja UML Ohjelmistojen mallintamisesta ja kuvaamisesta Oliomallinnus ja UML Käyttötapauskaaviot Luokkakaaviot Sekvenssikaaviot 2 Yleisesti

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

L models. Tekninen määrittely. Ryhmä Rajoitteiset

L models. Tekninen määrittely. Ryhmä Rajoitteiset Teknillinen Korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L models Tekninen määrittely Ryhmä Rajoitteiset Versio Päivämäärä Tekijä Muutokset

Lisätiedot

Dynaaminen kääntäminen ja Java HotSpot

Dynaaminen kääntäminen ja Java HotSpot Dynaaminen kääntäminen ja Java HotSpot Jukka Eskola Kimmo Kulovesi Tatu Säily Helsinki 11.4.2005 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Sisältö 1. Johdanto...1 1.1 JIT-kääntäjän ongelmat...2

Lisätiedot

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli Dart Ryhmä 38 Ville Tahvanainen Juha Häkli 1.LYHYESTI Dart on luokkapohjainen, yksiperintäinen, puhdas olio-ohjelmointikieli. Dart on dynaamisesti tyypitetty. Sovellukset on organisoitu modulaarisiksi

Lisätiedot

M =(K, Σ, Γ,, s, F ) Σ ={a, b} Γ ={c, d} = {( (s, a, e), (s, cd) ), ( (s, e, e), (f, e) ), (f, e, d), (f, e)

M =(K, Σ, Γ,, s, F ) Σ ={a, b} Γ ={c, d} = {( (s, a, e), (s, cd) ), ( (s, e, e), (f, e) ), (f, e, d), (f, e) Tik-79.148 Kevät 2001 Tietojenkäsittelyteorian perusteet Laskuharjoitus 7 Demonstraatiotehtävien ratkaisut 1. Pinoautomaatti M = K Σ Γ s F missä K Σ s ja F on määritelty samalla tavalla kuin tilakoneellekin.

Lisätiedot

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 10. kesäkuuta 2013

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 10. kesäkuuta 2013 TIEA241 Automaatit ja kieliopit, kesä 2013 etenevä Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 10. kesäkuuta 2013 Sisällys etenevä etenevä Chomskyn hierarkia (ja muutakin) kieli säännöllinen LL(k) LR(1)

Lisätiedot

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla ohjelmoida useita komponenteiltaan ja rakenteeltaan

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

1. Olio-ohjelmointi 1.1

1. Olio-ohjelmointi 1.1 1. Olio-ohjelmointi 1.1 Sisällys Olio-ohjelmointi on eräs ohjelmointiparadigma. Olio-ohjelmoinnin muotoja. Ohjelmiston analyysi ja suunnittelu. Olioparadigman etuja ja kritiikkiä. 1.2 Ohjelmointiparadigmoja

Lisätiedot

Jäsennysalgoritmeja. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 29. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Jäsennysalgoritmeja

Jäsennysalgoritmeja. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 29. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Jäsennysalgoritmeja TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 29. syyskuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe B tiistai 6.10. klo 10 selaaja ja jäsentäjä toimivat Kääntäjän

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen

Lisätiedot

811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto

811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto 811312A Tietorakenteet ja algoritmit 2015-2016 I Johdanto Sisältö 1. Algoritmeista ja tietorakenteista 2. Algoritmien analyysistä 811312A TRA, Johdanto 2 I.1. Algoritmeista ja tietorakenteista I.1.1. Algoritmien

Lisätiedot

Uudelleenkäytön jako kahteen

Uudelleenkäytön jako kahteen Uudelleenkäyttö Yleistä On pyritty pääsemään vakiokomponenttien käyttöön Kuitenkin vakiokomponentit yleistyneet vain rajallisilla osa-alueilla (esim. windows-käyttöliittymä) On arvioitu, että 60-80% ohjelmistosta

Lisätiedot

Tietotekniikan valintakoe

Tietotekniikan valintakoe Jyväskylän yliopisto Tietotekniikan laitos Tietotekniikan valintakoe 2..22 Vastaa kahteen seuraavista kolmesta tehtävästä. Kukin tehtävä arvostellaan kokonaislukuasteikolla - 25. Jos vastaat useampaan

Lisätiedot

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

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

Lisää pysähtymisaiheisia ongelmia

Lisää pysähtymisaiheisia ongelmia Lisää pysähtymisaiheisia ongelmia Lause: Pysähtymättömyysongelma H missä H = { w111x w validi koodi, M w ei pysähdy syötteellä x } ei ole rekursiivisesti lueteltava. Todistus: Pysähtymisongelman komplementti

Lisätiedot

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen

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

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

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD)

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) Ohjelmointikäytännöt 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 1 Sisältö 1) Mitä on hyvä koodi? 2) Ohjelmointikäytäntöjen merkitys? 3) Koodin asettelu

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

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

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

Ohjelmistojen mallintaminen

Ohjelmistojen mallintaminen Ohjelmistojen mallintaminen - Mallit - Ohjelmiston kuvaaminen malleilla 31.10.2008 Harri Laine 1 Malli: abstraktio jostain kohteesta Abstrahointi: asian ilmaiseminen tavalla, joka tuo esiin tietystä näkökulmasta

Lisätiedot

Ohjelmointi 1. Kumppanit

Ohjelmointi 1. Kumppanit Ohjelmointi 1 Kumppanit November 20, 2012 2 Contents 1 Mitä ohjelmointi on 7 2 Ensimmäinen C#-ohjelma 9 2.1 Ohjelman kirjoittaminen......................... 9 A Liite 11 3 4 CONTENTS Esipuhe Esipuhe 5

Lisätiedot

jäsennyksestä TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 29. syyskuuta 2016 TIETOTEKNIIKAN LAITOS Kontekstittomien kielioppien

jäsennyksestä TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 29. syyskuuta 2016 TIETOTEKNIIKAN LAITOS Kontekstittomien kielioppien TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 29. syyskuuta 2016 Sisällys Harjoitustehtävätilastoa Tilanne 29.9.2016 klo 8:41 (lähes kaikki kommentoitu) passed

Lisätiedot

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A. Tehtävä. Tämä tehtävä on aineistotehtävä, jossa esitetään ensin tehtävän teoria. Sen jälkeen esitetään neljä kysymystä, joissa tätä teoriaa pitää soveltaa. Mitään aikaisempaa tehtävän aihepiirin tuntemusta

Lisätiedot

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten, Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten, että se pystyy suorittamaan kaikki mahdolliset algoritmit?

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

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

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. lokakuuta 2016

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. lokakuuta 2016 TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. lokakuuta 2016 Sisällys n tunnistin Jay : An Efficient Context-Free Parsing Algorithm. Communications of the

Lisätiedot

Yhteydettömät kieliopit [Sipser luku 2.1]

Yhteydettömät kieliopit [Sipser luku 2.1] Yhteydettömät kieliopit [ipser luku 2.1] Johdantoesimerkkinä tarkastelemme kieltä L = { a n b m a n n > 0, m > 0 }, joka on yhteydetön (mutta ei säännöllinen). Vastaavan kieliopin ytimenä on säännöt eli

Lisätiedot

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA: REFAKTOROINTI 2 (9) SEPA: REFAKTOROINTI 3 (9) VERSIOHISTORIA Version Date Author Description 0.1 2.12.2005 Erik Hakala Ensimmäinen

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op FT Ari Viinikainen Tietokoneen rakenne Keskusyksikkö, CPU Keskusmuisti Aritmeettislooginen yksikkö I/O-laitteet Kontrolliyksikkö Tyypillinen Von Neumann

Lisätiedot

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 27. lokakuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe D tiistai 10.11. klo 10 välikielen generointi Kääntäjän rakenne

Lisätiedot

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen ohjelmointiin Jukka Talvitie Valvoja: Professori Jorma Jormakka Paikka: TietoEnator oyj Ongelma Ideologia Lifebelt

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Kurssin sisältö pääpiirteittäin Tarvittavat pohjatiedot Avainsanat Abstraktio Esimerkkiohjelman tehtäväkuvaus Abstraktion käyttö tehtävässä Abstrakti tietotyyppi Hyötyjä ADT:n

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

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista 582101 - Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista 1 Ohjelmistotuotannon työkaluuista Projektinhallintatyökalut (ei käsitellä tällä kurssilla) CASE- ja mallinnustyökalut (esim. Poseidon)

Lisätiedot

TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat. Antti-Juhani Kaijanaho. 16. helmikuuta 2011

TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat. Antti-Juhani Kaijanaho. 16. helmikuuta 2011 TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 16. helmikuuta 2011 Sisällys Sisällys Ohjelmointikieli? programming language n. a

Lisätiedot

UML-kielen formalisointi Object-Z:lla

UML-kielen formalisointi Object-Z:lla UML-kielen formalisointi Object-Z:lla Kalvot ja seminaarityö WWW:ssä: http://users.jyu.fi/~minurmin/opiskelu/form/ UML UML == Unified Modelling Language. OMG:n standardoima kieli ohjelmistojärjestelmien,

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: SICP kohdat 22.2.3 Riku Saikkonen 2. 11. 2010 Sisältö 1 Linkitetyt listat 2 Listaoperaatioita 3 Listarakenteet 4 Gambit-C:n Scheme-debuggeri Linkitetyt

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

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms. Kokeellinen algoritmiikka (3 ov) syventäviä opintoja edeltävät opinnot: ainakin Tietorakenteet hyödyllisiä opintoja: ASA, Algoritmiohjelmointi suoritus harjoitustyöllä (ei tenttiä) Kirjallisuutta: Johnson,

Lisätiedot

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä.

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä. Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä. On arvioitu, että maailmassa on tällä hetkellä enemmän sulautettuja

Lisätiedot

uv n, v 1, ja uv i w A kaikilla

uv n, v 1, ja uv i w A kaikilla 2.8 Säännöllisten kielten rajoituksista Kardinaliteettisyistä on oltava olemassa (paljon) ei-säännöllisiä kieliä: kieliä on ylinumeroituva määrä, säännöllisiä lausekkeita vain numeroituvasti. Voidaanko

Lisätiedot

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki PERL TIE-20306 Principles of Programming Languages Ryhmä 4: Joonas Lång & Jasmin Laitamäki 1. Johdanto Perl on ohjelmointikielten perhe, johon kuuluu Perl 5 ja Perl 6. Kielet ovat kuitenkin erilliset ohjelmointikielet

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

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Hahmon etsiminen syotteesta (johdatteleva esimerkki) Hahmon etsiminen syotteesta (johdatteleva esimerkki) Unix-komennolla grep hahmo [ tiedosto ] voidaan etsia hahmon esiintymia tiedostosta (tai syotevirrasta): $ grep Kisaveikot SM-tulokset.txt $ ps aux

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

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

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

P e d a c o d e ohjelmointikoulutus verkossa

P e d a c o d e ohjelmointikoulutus verkossa P e d a c o d e ohjelmointikoulutus verkossa Java-kielen perusteet Teoria ja ohjelmointitehtävät Java-kielen perusteet 3 YLEISKATSAUS KURSSIN SISÄLTÖIHIN 10 JAVA-KIELEN PERUSTEET 10 OPISKELUN ALOITTAMINEN

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

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 811122P (5 op.) 12.12.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

Kieliversiointityökalu Java-ohjelmistoon. Ohje

Kieliversiointityökalu Java-ohjelmistoon. Ohje Kieliversiointityökalu Java-ohjelmistoon Ohje 2/6 SISÄLLYSLUETTELO 1 YLEISTÄ OHJELMASTA... 3 2 PÄÄ-IKKUNA...4 3 YLÄVALIKKO... 4 3.1 TIEDOSTO... 4 3.2 TOIMINTO... 4 3.3 ASETUKSET... 5 3.4 OHJE... 5 4 VÄLILEHDET...5

Lisätiedot

Attribuuttikieliopit

Attribuuttikieliopit TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. toukokuuta 2011 Sisällys t Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti

Lisätiedot

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA341 Funktio-ohjelmointi 1, kevät 2008 TIEA34 Funktio-ohjelmointi, kevät 2008 Luento 3 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 2. tammikuuta 2008 Ydin-Haskell: Syntaksi Lausekkeita (e) ovat: nimettömät funktiot: \x

Lisätiedot

Käännös, linkitys ja lataus

Käännös, linkitys ja lataus Luento 10 (verkkoluento 10) Käännös, linkitys ja lataus Ohjelmasta prosessiin Käännösyksikkö Kääntämisen vaiheet Makrot, literaalit Staattinen ja dynaaminen linkitys Nimien sidonta Lausekielestä suoritukseen

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

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 26. marraskuuta 2015 Sisällys Tunnistamis- ja jäsennysongelma Olkoon G = (N, Σ, P, S) kontekstiton kielioppi ja

Lisätiedot

1. Universaaleja laskennan malleja

1. Universaaleja laskennan malleja 1. Universaaleja laskennan malleja Laskenta datan käsittely annettuja sääntöjä täsmällisesti seuraamalla kahden kokonaisluvun kertolasku tietokoneella, tai kynällä ja paperilla: selvästi laskentaa entä

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Opintojakso TT00AA11 Ohjelmoinnin jatko (Java) Tavoite Opiskelija ymmärtää olio-ohjelmoinnin problematiikan. Opiskelija osaa määritellä ja käyttää itse

Lisätiedot

Rajoittamattomat kieliopit (Unrestricted Grammars)

Rajoittamattomat kieliopit (Unrestricted Grammars) Rajoittamattomat kieliopit (Unrestricted Grammars) Laura Pesola Laskennanteorian opintopiiri 13.2.2013 Formaalit kieliopit Sisältävät aina Säännöt (esim. A -> B C abc) Muuttujat (A, B, C, S) Aloitussymboli

Lisätiedot

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen Pedacode Pikaopas Java-kehitysympäristön pystyttäminen Pikaoppaan sisältö Pikaoppaassa kuvataan, miten Windowstyöasemalle asennetaan Java-ohjelmoinnissa tarvittavat työkalut, minkälaisia konfigurointeja

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Luento

Lisätiedot

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 31. maaliskuuta 2011 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti

Lisätiedot

(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3

(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3 T-79.48 Tietojenkäsittelyteorian perusteet Tentti 25..23 mallivastaukset. Tehtävä: Kuvaa seuraavat kielet sekä säännölisten lausekkeiden että determinististen äärellisten automaattien avulla: (a) L = {w

Lisätiedot

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. kesäkuuta 2013

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. kesäkuuta 2013 TIEA241 Automaatit ja kieliopit, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 12. kesäkuuta 2013 Sisällys t Chomskyn hierarkia (ja vähän muutakin) kieli säännöllinen LL(k) LR(1) kontekstiton

Lisätiedot

S BAB ABA A aas bba B bbs c

S BAB ABA A aas bba B bbs c T-79.148 Kevät 2003 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut 4. Tehtävä: Laadi algoritmi, joka testaa onko annetun yhteydettömän kieliopin G = V, Σ, P, S) tuottama

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

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti C! C-ohjelmoinnin peruskurssi Pasi Sarolahti Mitä haluan oppia C-kurssilla? ja miksi? Tutustu lähimpään naapuriin Keskustelkaa miksi halusitte / jouduitte tulemaan kurssille 3 minuuttia è kootaan vastauksia

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

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö Algoritmit 1 Luento 2 Ke 11.1.2017 Timo Männikkö Luento 2 Algoritmin esitys Algoritmien analysointi Suoritusaika Asymptoottinen kertaluokka Peruskertaluokkia NP-täydelliset ongelmat Algoritmit 1 Kevät

Lisätiedot

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016 ICS-C2000 Tietojenkäsittelyteoria Kevät 2016 Kierros 6, 22. 26. helmikuuta Huom: arviointiviikolla 15. 19.2. ei ole laskuharjoituksia! Demonstraatiotehtävien ratkaisut D1: (a) Osoita, että seuraava yhteydetön

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy 2015. Antti-Juhani Kaijanaho. 3. joulukuuta 2015

TIEA241 Automaatit ja kieliopit, syksy 2015. Antti-Juhani Kaijanaho. 3. joulukuuta 2015 TIEA241 Automaatit ja, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. joulukuuta 2015 Sisällys Formaalisti Määritelmä Nelikko G = (V, Σ, P, S) on kontekstiton kielioppi (engl. context-free

Lisätiedot

Integrointi. Ohjelmistotekniikka kevät 2003

Integrointi. Ohjelmistotekniikka kevät 2003 Integrointi Ohjelmistotekniikka kevät 2003 ERP (Toiminnanohjausjärjestelmä) Myynti Henkilöstö, palkanlaskenta Kirjanpito Myynti Myyjät Extranet Tietovarasto Laskutus, reskontrat Asiakas ERP Asiakasrekisteri

Lisätiedot

812341A Olio-ohjelmointi, I Johdanto

812341A Olio-ohjelmointi, I Johdanto 812341A Olio-ohjelmointi, 2016 I Johdanto Sisältö 1. Abstraktiosta 2. Olio-ohjelmoinnin historiaa 3. Olioparadigmasta 4. Peruskäsitteiden kertausta 812341A Olio-ohjelmointi, Johdanto 2 1 Abstraktiosta

Lisätiedot