Harjoitustyö 2: Game of Fibres

Koko: px
Aloita esitys sivulta:

Download "Harjoitustyö 2: Game of Fibres"

Transkriptio

1 TIE Tietorakenteet ja algoritmit, kevät 2019 Harjoitustyö 2: Game of Fibres Viimeksi päivitetty Tapahtui edellisessä harjoitustyössä... Tämä harjoitustyö laajentaa suoraan harjoitustyö 1:tä (Beacons of RGB). Kaikki edellisessä työohjeessa olleet asiat pätevät edelleen, tässä työohjeessa mainitaan vain uudet, tässä harjoitustyössä toteutettavat asiat ja niiden vaatimukset, tai asiat jotka ovat muuttuneet edellisestä työohjeesta. Harjoitustyön aihe Aikojen kuluessa Cmykin sivilisaatio on kehittynyt, ja sen insinöörit ovat huomanneet että maata vaivaavan jatkuvan sumun takia majakoiden valo saadaan välitettyä majakalta toiselle tehokkaammin maan alla kulkevia valokuituja pitkin. Valokuidut ("fibre" harjoitustyön koodissa) muodostavat risteävän verkoston, jossa risteyksessä ("xpoint" coodissa) voidaan valita mihin toiseen kuituun tuleva valonsäde välitetään. Jos majakka sijaitsee kuitujen risteyksessä (tai yksittäisen kuidun päässä), se voi lähettää ja vastaanottaa valoa kuituja pitkin. Tässä harjoitustyössä ensimmäisen harjoitustyön luokkaa laajennetaan käsittelemään kuituverkostoa ja etsimään sieltä valolle sopivia reittejä. Harjoitustyössä harjoitellaan edelleen valmiiden tietorakenteiden ja algoritmien tehokasta käyttöä (STL), mutta siinä harjoitellaan myös algoritmien tehokasta toteuttamista ja niiden tehokkuuden arvioimista. Jokaiselle valokuidulla on kaksi päätepistettä, joiden koordinaatit annetaan. Valo voi kulkea kuidussa kumpaan suuntaan tahansa. Lisäksi jokainen kuitu hidastaa valoa tietyn määrän (fysiikasta muistamme, että valon nopeus väliaineessa vaihtelee), joten jokaiselle kuidulle annetaan myös "kustannus" ("cost" koodissa), joka kertoo valon kulkuajan kuidussa. Ohjelmalla voi lisätä ja poistaa kuituja, kysyä tietysti koordinaatista lähteviä kuituja, etsiä tietyillä kriteereillä valolle reittejä kuituja pitkin, ja ei-pakollisena osana optimoida kuituverkostoa. Koska kyseessä on Tietorakenteiden ja algoritmien harjoitustyö, ohjelman tehokkuus on edelleen tärkeä arvostelukriteeri. Tavoitteena on tehdä mahdollisimman tehokas toteutus, kun oletetaan että kaikki ohjelman tuntemat komennot ovat suunnilleen yhtä yleisiä (ellei komentotaulukossa toisin mainita). Plussaa tietysti saa, mitä tehokkaammin operaatiot pystyy toteuttamaan. Tämän harjoitustyön uusissa operaatioissa asymptoottiseen tehokkuuteen ei välttämättä pysty hirveästi vaikuttamaan, koska käytetyt algoritmit määräävät sen. Sen vuoksi harjoitustyössä algoritmien toteutukseen ja toiminnallisuuteen kiinnitetään enemmän huomiota kuin tehokkuuteen.

2 Huomaa erityisesti seuraavat asiat (osa uusia, osa toistettu tärkeyden vuoksi): Osana ohjelman palautusta tiedostoon datastructures.hh on jokaisen operaation oheen laitettu kommentti, johon lisätään oma arvio kunkin toteutetun operaation asymptoottisesta tehokkuudesta lyhyiden perusteluiden kera. Osana ohjelman palautusta palautetaan git:ssä myös dokumentti (samassa hakemistossa/kansiossa kuin lähdekoodi), jossa perustellaan toteutuksessa käytetyt tietorakenteet tehokkuuden kannalta. Hyväksyttäviä dokumentin formaatteja ovat puhdas teksti (readme.txt), markdown (readme.md) ja Pdf (readme.pdf). Operaatioiden route_least_xpoints(), route_fastest(), route_fibre_cycle() ja trim_fibre_network() toteuttaminen ei ole pakollista läpipääsyn kannalta. Ne ovat kuitenkin osa arvostelua. Osa ei-pakollisista operaatioista saattaa vaatia algoritmeja, joita ei ole käyty läpi luennolla (mutta kyllä mahdollisesti muualla kurssilla). Riittävän huonolla toteutuksella työ voidaan hylätä. Järjestämisestä Jos operaation paluuarvona vaaditaan lista järjestettyjä koordinaatteja, järjestämisessä tulee käyttää koordinaateille valmiiksi määriteltyä "<"-vertailua. Kuitureittien tulostamisesta Harjoitustyössä operaatiot palauttavat usein reitin kuituja pitkin kahden pisteen välillä. Kooditasolla tämä tapahtuu palauttamalla lista pareja, joissa on ensimmäisenä koordinaatti ja toisena reitin kustannus ko. koordinaattiin saakka. Ensimmäisenä on reitin lähtöpiste (kustannuksena 0), sitten reitin seuraava risteyspiste jne., ja päämäärä viimeisenä (kustannuksena koko reitin kustannus). Ohjelman toiminta ja rakenne Osa ohjelmasta tulee valmiina kurssin puolesta, osa toteutetaan itse. Graafisen käyttöliittymän käytöstä QtCreatorilla käännettäessä harjoitustyön valmis koodi tarjoaa graafisen käyttöliittymän, jolla ohjelmaa voi testata ja ajaa valmiita testejä sekä visualisoida ohjelman toimintaa. Uusina ominaisuuksina käyttöliittymässä voi nyt valita kuitujen näyttämisen graafisessa näkymässä ja sen, tuottaako näkymän klikkaaminen hiirellä majakan ID:n (kuten 1. työssä) vai kuituristeyksen koordinaatit (vai risteyskohtia voi klikata). Lisäksi käyttöliittymässä on valinta "Beam routes". Jos tämä on valittuna, yritetään graafisessa näkymässä majakoiden valonsäteet reitittää kuituja pitkin (käyttäen pakollista operaatiota route_any(). Jos reittiä ei operaatiolla löydy, näytetään valonsäde edelleen suoraan majakasta toiseen (siis ilmateitse). (Jos samaa kuitua pitkin kulkee useita valonsäteitä, näytetään niistä vain yksi.)

3 Huom! Käyttöliittymän graafinen esitys kysyy kaikki tiedot opiskelijoiden koodista! Se ei siis ole "oikea" lopputulos vaan graafinen esitys siitä, mitä tietoja opiskelijoiden koodi antaa. Käyttöliittymä hakee kaikki majakat operaatiolla all_beacons() ja kysyy majakoiden tiedot operaatioilla get_...(). Jos valonsäteiden piirtäminen on päällä, ne kysytään operaatiolla get_lightsources(), ja jos säteiden väritys on päällä, säteiden värit kysytään operaatiolla total_color() (vapaaehtoinen). Jos kuitujen piirto on päällä, ne kysytään operaatiolla all_xpoints() ja get_fibres_from(). (Ja kuten edellä todettiin, valonsäteiden reititys tehdään operaatiolla route_any()). Harjoitustyönä toteutettavat osat Tiedostot datastructures.hh ja datastructures.cc class Datastructures: Luokan julkisen rajapinnan jäsenfunktiot tulee toteuttaa. Luokkaan saa listätä omia määrittelyitä (jäsenmuuttujat, uudet jäsenfunktiot yms.) Tiedostoon datastructures.hh kirjoitetaan jokaisen toteutetun operaation yläpuolelle kommentteihin oma arvio ko. operaation toteutuksen asymptoottisesti tehokkuudesta ja lyhyt perustelu arviolle. Lisäksi harjoitustyönä toteutetaan alussa mainittu dokumentti readme.pdf. Huom! Mahdolliset Debug-tulostukset kannattaa tehdä cerr-virtaan (tai qdebug:lla, jos käytät Qt:ta), jotta ne eivät sotke testejä. Ohjelman tuntemat komennot ja luokan julkinen rajapinta Kun ohjelma käynnistetään, se jää odottamaan komentoja, jotka on selitetty alla. Komennot, joiden yhteydessä mainitaan jäsenfunktio, kutsuvat ko. Datastructure-luokan operaatioita, jotka siis opiskelijat toteuttavat. Osa komennoista on taas toteutettu kokonaan kurssin puolesta pääohjelmassa. Alla luetellaan vain tämän harjoitustyön uudet komennot, myös kaikki harjoitustyön 1 komennot ovat käytettävissä. Jos ohjelmalle antaa komentoriviltä tiedoston parametriksi, se lukee komennot ko. tiedostosta ja lopettaa sen jälkeen. Alla operaatiot on listattu siinä järjestyksessä, kun ne suositellaan toteutettavaksi (tietysti suunnittelu kannattaa tehdä kaikki operaatiot huomioon ottaen jo alun alkaen). Komento Julkinen jäsenfunktio all_xpoints std::vector<coord> all_xpoints() Selitys Palauttaa kaikki tietorakenteessa olevat kuitujen päätepisteet koordinaattien mukaisessa järjestyksessä (ks. Järjestämisestä aiemmin), ja jokainen päätepiste on mukana vain kerran. Tämä operaatio ei ole oletuksena mukana tehokkuustesteissä.

4 Komento Julkinen jäsenfunktio add_fibre (x1,y1) (x2,y2) cost bool add_fibre(coord xpoint1, Coord xpoint2, Cost cost) fibres (x,y) std::vector<std::pair<coord, Cost>> get_fibres_from(coord xy) all_fibres std::vector<std::pair<coord, Coord>> all_fibres() remove_fibre (x1,y1) (x2,y2) bool remove_fibre(coord xpoint1, Coord xpoint2) clear_fibres void clear_fibres() (Allaolevat kannattaa toteuttaa todennäköisesti vasta, kun ylläolevat on toteutettu.) route_any (x1,y1) (x2,y2) std::vector<std::pair<coord, Cost>> route_any(coord fromxy, Coord toxy) (Seuraavien operaatioiden toteuttaminen ei ole pakollista, mutta ne parantavat arvosanaa.) route_least_xpoints (x1,y1) (x2,y2) std::vector<std::pair<coord, Cost>> route_least_xpoints(coord fromxy, Coord toxy) Selitys Lisää tietorakenteeseen uuden valokuidun annettujen pisteiden välille ja annetulla hinnalla. Jos annettujen pisteiden välillä on jo kuitu tai jos molemmat pisteet ovat samat, ei tehdä mitään ja palautetaan false, muuten palautetaan true. Palauttaa listan koordinaatteja, joihin annetusta koordinaatista menee suoraan kuituja, ja ko. kuidun hinnan. Lista on järjestetty koordinaattien mukaiseen järjestykseen. Jos annetusta pisteestä ei lähde kuituja, palautetaan tyhjä lista. Palauttaa listan kaikista kuiduista. Listassa jokainen kuitu ilmoitetaan sen päätepisteiden muodostamana koordinaattiparina niin, että lista on järjestetty ensisijaisesti ensimmäisen koordinaatin mukaan, toissijaisesti toisen. Kukin kuitu on listassa vain kertaalleen niin, että sen 1. koordinaatti on pienempi kuin 2. koordinaatti. Poistaa kuidun annettujen koordinaattien väliltä. Jos koordinaattien välillä ei ollut kuitua, palautetaan false, muuten true. Tyhjentää kuituverkoston eli poistaa kaikki kuidut. Huom! Kaikki majakat ja niiden valonsäteet säilyvät edelleen. Palauttaa jonkin (mielivaltaisen) reitin annettujen pisteiden välillä (ks. "Kulkureittien tulostamisesta"). Palautetussa vektorissa on ensimmäisenä alkupiste hinnalla 0, sitten kaikki reitin varrella olevat pisteet ja kustannus ko. pisteeseen saakka, viimeisenä loppupiste. Jos reittiä ei löydy, palautetaan tyhjä vektori. Palauttaa annettujen pisteiden välillä reitin (ks. "Kulkureittien tulostamisesta"), jossa on mahdollisimman vähän risteyksiä (ja siis myös mahdollisimman vähän kuituja). Palautetussa vektorissa on ensimmäisenä alkupiste hinnalla 0, sitten kaikki reitin varrella olevat pisteet ja kustannus ko. pisteeseen saakka, viimeisenä loppupiste. Jos reittiä ei löydy, palautetaan tyhjä vektori.

5 Komento Julkinen jäsenfunktio route_fastest (x1,y1) (x2,y2) std::vector<std::pair<coord, Cost>> route_fastest(coord fromxy, Coord toxy) route_fibre_cycle (x1,y1) std::vector<coord> route_fibre_cycle(coord startxy) trim_fibre_network Cost trim_fibre_network() (Seuraavat komennot on toteutettu valmiiksi pääohjelmassa.) random_fibres n (pääohjelman toteuttama) random_labyrinth xsize ysize extra_routes (pääohjelman toteuttama) Selitys Palauttaa annettujen pisteiden välillä reitin (ks. "Kulkureittien tulostamisesta"), joka on mahdollisimman nopea, ts. jonka kustannus on mahdollisimman pieni. Palautetussa vektorissa on ensimmäisenä alkupiste hinnalla 0, sitten kaikki reitin varrella olevat pisteet ja kustannus ko. pisteeseen saakka, viimeisenä loppupiste. Jos reittiä ei löydy, palautetaan tyhjä vektori. Tarkastaa, voiko annetusta pisteestä kulkea kuituverkkoa pitkin niin, että reittiin muodostuu silmukka (palataan eri kuitua pitkin johonkin reitin varrella olevaan pisteeseen). Paluuarvona palautetaan reitti, joka päättyy ko. silmukkaan (paluuarvon viimeinen piste on se, johon palaaminen muodostaa silmukan). Jos reittiä ei löydy, palautetaan tyhjä vektori. Huom, tulostuksen yhtenäistämiseksi pääohjelma tulostaa palautetusta reitistä vain silmukan, ja vielä niin, että silmukka kierretään haarautumiskohdasta pienemmän koordinaatin suuntaan. Graafisesti reitti näytetään kokonaisuudessaan. Jättää jäljelle kuidut, joiden yhteenlaskettu kustannus on mahdollisimman pieni, mutta joilla edelleen löytyy reitti sellaisten pisteiden välillä, joiden välillä oli ennenkin reitti. Muut kuidut poistetaan. Paluuarvona palautetaan tuloksena olevan kuituverkoston kokonaiskustannus. Jos olemassa useita kokonaiskustannukseltaan yhtä lyhyitä kuituverkostoja, mikä tahansa niistä kelpaa. Lisää maksimissaan n satunnaista valokuitua majakoiden välille niin, että arvotut kuidut eivät risteä keskenään (käyttöliittymän selkeyttämiseksi). Kuituja saatetaan lisätä myös vähemmän. Tehokkuustestissä tämä komento lisää aina maks. 10 kuitua. Lisää satunnaisen kuitulabyrintin, jossa on ysize riviä, joissa on xsize risteystä. Extra_routes kertoo, kuinka monta "ylimääräistä" kuitua korkeintaan lisätään. Jos extra_routes on 0, pääsee labyrintissä joka pisteestä tasan yhtä reittiä toiseen pisteeseen.

6 Komento Julkinen jäsenfunktio perftest all/compulsory/cmd1;cmd2... timeout n n1;n2;n3... (pääohjelman toteuttama) Selitys Ajaa ohjelmalle tehokkuustestit. Tyhjentää tietorakenteen ja lisää sinne n1 kpl satunnaisia majakoita (ks. random_add) ja näiden välille satunnaisen määrän kuituja. Sen jälkeen arpoo n kertaa satunnaisen komennon. Mittaa ja tulostaa sekä lisäämiseen että komentoihin menneen ajan. Sen jälkeen sama toistetaan n2:lle jne. Jos jonkin testikierroksen suoritusaika ylittää timeout sekuntia, keskeytetään testien ajaminen (tämä ei välttämättä ole mikään ongelma, vaan mielivaltainen aikaraja). Jos ensimmäinen parametri on all, arvotaan lisäyksen jälkeen kaikista komennoista, joita on ilmoitettu kutsuttavan usein. Jos se on compulsory, testataan vain komentoja, jotka on pakko toteuttaa. Jos parametri on lista komentoja, arvotaan komento näiden joukosta (tällöin kannattaa mukaan ottaa myös random_add, jotta lisäyksiä tulee myös testikierroksen aikana). Jos ohjelmaa ajaa graafisella käyttöliittymällä, "stop test" nappia painamalla testi keskeytetään (nappiin reagointi voi kestää hetken). Huom! 2. harjoitustyössä perftest ei oletuksena enää testaa 1. työn aakkostamiseen ja valonsäteisiin liittyviä operaatioita, ainoastaan majakoiden lisäämisiä, erityisen usein tehtäviä operaatioita ja kuituihin liittyviä uusia operaatioita (lisäämisvaiheessa lisätään edelleen satunnaisia valonsäteitä). "Datatiedostot" Kätevin tapa testata ohjelmaa on luoda "datatiedostoja", jotka add-komennolla lisäävät joukon majakoita ohjelmaan. Majakat voi sitten kätevästi lukea sisään tiedostosta read-komennolla ja sitten kokeilla muita komentoja ilman, että majakat täytyisi joka kerta syöttää sisään käsin. Alla on esimerkit datatiedostoista, joista toinen lisää majakoita, toinen valonsäteitä: example-beacons.txt (päivitetty vastaamaan tiedoston sisältöä 8.4.) # Add beacons add_beacon G1 Lime (0,0) (0,255,0) add_beacon M1 Fuchsia (6,0) (255,0,255) add_beacon R1 Crimson (1,6) (220,20,60) add_beacon B2 Teal (11, 10) (0,128,128) add_beacon M2 Indigo (10, 4) (75,0,130)

7 example-lightbeams.txt # Add light sources add_lightbeam G1 M1 add_lightbeam R1 M2 add_lightbeam M1 M2 add_lightbeam M2 B2 example-fibres.txt add_fibre (0,0) (6,0) 1 add_fibre (6,0) (10,4) 1 add_fibre (10,4) (6,6) 1 add_fibre (6,6) (11,10) 1 add_fibre (0,0) (1,6) 2 add_fibre (1,6) (6,6) 3 Esimerkki ohjelman toiminnasta Alla on esimerkki ohjelman toiminnasta. Esimerkin syötteet löytyvät tiedostoista examplecompulsory-in.txt ja example-all-in.txt, tulostukset tiedostoista example-compulsory-out.txt ja example-all-out.txt. Eli esimerkkiä voi käyttää pienenä testinä pakollisten toimintojen toimimisesta antamalla käyttöliittymästä komennon testread "example-compulsory-in.txt" "example-compulsory-out.txt" > read "example-compulsory-in.txt" ** Commands from 'example-compulsory-in.txt' > clear_beacons Cleared all beacons > clear_fibres All fibres removed. > read "example-beacons.txt" ** Commands from 'example-beacons.txt' > # Add beacons > add_beacon G1 Lime (0,0) (0,255,0) Lime: pos=(0,0), color=(0,255,0):1530, id=g1 > add_beacon M1 Fuchsia (6,0) (255,0,255) Fuchsia: pos=(6,0), color=(255,0,255):1020, id=m1 > add_beacon R1 Crimson (1,6) (220,20,60) Crimson: pos=(1,6), color=(220,20,60):840, id=r1 > add_beacon B2 Teal (11, 10) (0,128,128) Teal: pos=(11,10), color=(0,128,128):896, id=b2 > add_beacon M2 Indigo (10, 4) (75,0,130) Indigo: pos=(10,4), color=(75,0,130):355, id=m2 > ** End of commands from 'example-beacons.txt' > read "example-lightbeams.txt" ** Commands from 'example-lightbeams.txt' > # Add light sources > add_lightbeam G1 M1 Added lightbeam: Lime -> Fuchsia > add_lightbeam R1 M2 Added lightbeam: Crimson -> Indigo > add_lightbeam M1 M2 Added lightbeam: Fuchsia -> Indigo > add_lightbeam M2 B2 Added lightbeam: Indigo -> Teal > ** End of commands from 'example-lightbeams.txt'

8 > read "example-fibres.txt" ** Commands from 'example-fibres.txt' > add_fibre (0,0) (6,0) 1 Added fibre: (0,0) <-> (6,0), cost 1 > add_fibre (6,0) (10,4) 1 Added fibre: (6,0) <-> (10,4), cost 1 > add_fibre (10,4) (6,6) 1 Added fibre: (10,4) <-> (6,6), cost 1 > add_fibre (6,6) (11,10) 1 Added fibre: (6,6) <-> (11,10), cost 1 > add_fibre (0,0) (1,6) 2 Added fibre: (0,0) <-> (1,6), cost 2 > add_fibre (1,6) (6,6) 3 Added fibre: (1,6) <-> (6,6), cost 3 > ** End of commands from 'example-fibres.txt' > all_xpoints 1. (0,0) 2. (6,0) 3. (10,4) 4. (1,6) 5. (6,6) 6. (11,10) > fibres (6,6) 1. (10,4) : 1 2. (1,6) : 3 3. (11,10) : 1 > remove_fibre (6,6) (1,6) Removed fibre: (6,6) <-> (1,6) > fibres (6,6) 1. (10,4) : 1 2. (11,10) : 1 > route_any (0,0) (11,10) 0. (0,0) : > (6,0) : > (10,4) : > (6,6) : > (11,10) : 4 > clear_fibres All fibres removed. > all_xpoints > ** End of commands from 'example-compulsory-in.txt' > read "example-non-compulsory-in.txt" ** Commands from 'example-non-compulsory-in.txt' > clear_beacons Cleared all beacons > clear_fibres All fibres removed. > read "example-beacons.txt" ** Commands from 'example-beacons.txt' ** End of commands from 'example-beacons.txt' > read "example-lightbeams.txt" ** Commands from 'example-lightbeams.txt' ** End of commands from 'example-lightbeams.txt' > read "example-fibres.txt"

9 ** Commands from 'example-fibres.txt' ** End of commands from 'example-fibres.txt' > route_least_xpoints (0,0) (11,10) 0. (0,0) : > (1,6) : > (6,6) : > (11,10) : 6 > route_fastest (0,0) (11,10) 0. (0,0) : > (6,0) : > (10,4) : > (6,6) : > (11,10) : 4 > route_fibre_cycle (11,10) 0. (6,6) 1. -> (10,4) 2. -> (6,0) 3. -> (0,0) 4. -> (1,6) 5. -> (6,6) > all_fibres (0,0) -> (6,0) (0,0) -> (1,6) (6,0) -> (10,4) (10,4) -> (6,6) (1,6) -> (6,6) (6,6) -> (11,10) > trim_fibre_network The remaining fibre network has total cost of 6 > all_fibres (0,0) -> (6,0) (0,0) -> (1,6) (6,0) -> (10,4) (10,4) -> (6,6) (6,6) -> (11,10) > ** End of commands from 'example-non-compulsory-in.txt' > quit Kuvakaappaus käyttöliittymästä Alla vielä kuvakaappaus käyttöliittymästä sen jälkeen, kun example-beacons.txt ja examplelightbeams.txt ja example-fibres.txt on luettu sisään.

10

Harjoitustyö 1: Beacons of RGB

Harjoitustyö 1: Beacons of RGB TIE-20100 Tietorakenteet ja algoritmit, kevät 2019 Harjoitustyön aihe Harjoitustyö 1: Beacons of RGB Viimeksi päivitetty 18.03.2019 Mystisessä Cmykin maailmassa on Muinaisten rakentamia majakoita, jotka

Lisätiedot

Harjoitustyö 1: Kaupungit

Harjoitustyö 1: Kaupungit TIE-20100 Tietorakenteet ja algoritmit, kevät 2018 Harjoitustyön aihe Harjoitustyö 1: Kaupungit Viimeksi päivitetty 31.01.2018 Tässä harjoitustyössä harjoitellaan yksinkertaisten algoritmien toteuttamista

Lisätiedot

Harjoitustyö 1: Palkkatilastot

Harjoitustyö 1: Palkkatilastot TIE-20100 Tietorakenteet ja algoritmit, kevät 2017 Versio 30.1.2017 Harjoitustyö 1: Palkkatilastot Harjoitustyön aihe Tässä harjoitustyössä tehdään vuoden vaihtumisen kunniaksi ohjelma, jolla saa tuotettua

Lisätiedot

Harjoitustyö 2: Game of Taxes

Harjoitustyö 2: Game of Taxes TIE-20100 Tietorakenteet ja algoritmit, kevät 2018 Harjoitustyö 2: Game of Taxes Viimeksi päivitetty 16.03.2018 Huom. koska tämä harjoitustyö pohjautuu aiempaan harjoitustyöhön, on allaolevassa merkitty

Lisätiedot

Harjoitustyö 3: Roads are coming

Harjoitustyö 3: Roads are coming TIE-20100 Tietorakenteet ja algoritmit, kevät 2018 Harjoitustyö 3: Roads are coming Viimeksi päivitetty 30.04.2018 Huom. koska tämä harjoitustyö pohjautuu aiempaan harjoitustyöhön, on allaolevassa merkitty

Lisätiedot

Harjoitustyö 2: Henkilötietojärjestelmä

Harjoitustyö 2: Henkilötietojärjestelmä TIE-20100 Tietorakenteet ja algoritmit, kevät 2017 Harjoitustyö 2: Henkilötietojärjestelmä Viimeksi päivitetty 31.03.2017 Huom. koska tämä harjoitustyö pohjautuu aiempaan harjoitustyöhön, on allaolevassa

Lisätiedot

Harjoitustyö 3: It's a social network, baby!

Harjoitustyö 3: It's a social network, baby! TIE-20100 Tietorakenteet ja algoritmit, kevät 2017 Harjoitustyö 3: It's a social network, baby! Viimeksi päivitetty 11.04.2017 Huom. koska tämä harjoitustyö pohjautuu aiempaan harjoitustyöhön, on allaolevassa

Lisätiedot

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ). Tehtävä 1: Metodit, listat, alkuluvut (4p) Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ). Alkuluvut ovat lukuja, jotka ovat suurempia kuin yksi ja jotka ovat jaollisia

Lisätiedot

Harjoitustyö 3 - Millosemeni

Harjoitustyö 3 - Millosemeni Harjoitustyö 3 - Millosemeni Tampereen kaupunki tarjoaa avoin data -sivuillaan Tampereen joukkoliikenteen aikataulut, reitit sekä rajapinnan joukkoliikenteen reaaliaikaiseen seurantaan. Näinpä erilaisille

Lisätiedot

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return

Lisätiedot

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

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

Lisätiedot

Toinen harjoitustyö. ASCII-grafiikkaa

Toinen harjoitustyö. ASCII-grafiikkaa Toinen harjoitustyö ASCII-grafiikkaa Yleistä Tehtävä: tee Javalla ASCII-merkkeinä esitettyä grafiikkaa käsittelevä ASCIIArt-ohjelma omia operaatioita ja taulukoita käyttäen. Työ tehdään pääosin itse. Ideoita

Lisätiedot

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 5. Timo Savola. 28. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke

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

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

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Toinen harjoitustyö. ASCII-grafiikkaa 2017 Toinen harjoitustyö ASCII-grafiikkaa 2017 Yleistä Tehtävä: tee Javalla ASCII-merkkeinä esitettyä grafiikkaa käsittelevä ASCIIArt17-ohjelma omia operaatioita ja taulukoita käyttäen. Työ tehdään pääosin

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

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä Pekka Ryhänen & Erkki Pesonen 2002 BlueJ:n käyttö Nämä ohjeet on tarkoitettu tkt-laitoksen mikroluokan koneilla tapahtuvaa käyttöä varten. Samat asiat pätevät myös muissa luokissa ja kotikäytössä, joskin

Lisätiedot

Datatähti 2009 -alkukilpailu

Datatähti 2009 -alkukilpailu Datatähti 2009 -alkukilpailu Ohjelmointitehtävä 1/3: Hissimatka HUOM: Tutustuthan huolellisesti tehtävien sääntöihin ja palautusohjeisiin (sivu 7) Joukko ohjelmoijia on talon pohjakerroksessa, ja he haluavat

Lisätiedot

Zeon PDF Driver Trial

Zeon PDF Driver Trial Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin

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

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 10.10.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 10.10.2018 1 / 20 Oppimistavoitteet: tämän luennon jälkeen Tiedät, miten ohjelman toimintaa voi tutkia ja ohjelmassa

Lisätiedot

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla ALKUHARJOITUS Kynän ja paperin avulla peilaaminen koordinaatistossa a) Peilaa pisteen (0,0) suhteen koordinaatistossa sijaitseva - neliö, jonka

Lisätiedot

Rajapinta (interface)

Rajapinta (interface) 1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä

Lisätiedot

1. Mitä tehdään ensiksi?

1. Mitä tehdään ensiksi? 1. Mitä tehdään ensiksi? Antti Jussi i Lakanen Ohjelmointi 1, kevät 2010/ Jyväskylän yliopisto a) Etsitään Googlesta valmis algoritmi b) Mietitään miten itse tehtäisiin sama homma kynällä ja paperilla

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Kohdissa 2 ja 3 jos lukujen valintaan on useita vaihtoehtoja, valitaan sellaiset luvut, jotka ovat mahdollisimman lähellä listan alkua.

Kohdissa 2 ja 3 jos lukujen valintaan on useita vaihtoehtoja, valitaan sellaiset luvut, jotka ovat mahdollisimman lähellä listan alkua. A Lista Aikaraja: 1 s Uolevi sai käsiinsä listan kokonaislukuja. Hän päätti laskea listan luvuista yhden luvun käyttäen seuraavaa algoritmia: 1. Jos listalla on vain yksi luku, pysäytä algoritmi. 2. Jos

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

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

Suvi Junes/Pauliina Munter Tietohallinto/Opetusteknologiapalvelut 2014

Suvi Junes/Pauliina Munter Tietohallinto/Opetusteknologiapalvelut 2014 Työpaja Työpaja on vertaisarviointiin soveltuva työkalu. Työpaja mahdollistaa töiden palautuksen ja niiden jakelun opiskelijoiden arvioitavaksi sekä arvioinnin antamisen. Laita Muokkaustila päälle ja lisää

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO

TAMPEREEN TEKNILLINEN YLIOPISTO TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 11.08.2010 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ

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

TAMPEREEN TEKNILLINEN YLIOPISTO

TAMPEREEN TEKNILLINEN YLIOPISTO TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 06.09.2005 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ

Lisätiedot

Harjoitus 5 (viikko 41)

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

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

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

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu 811312A Tietorakenteet ja algoritmit, 2018-2019, Harjoitus 3, Ratkaisu Harjoituksessa käsitellään algoritmien aikakompleksisuutta. Tehtävä 3.1 Kuvitteelliset algoritmit A ja B lajittelevat syötteenään

Lisätiedot

Tehtävän lisääminen ja tärkeimmät asetukset

Tehtävän lisääminen ja tärkeimmät asetukset Tehtävä Moodlen Tehtävä-aktiviteetti on tarkoitettu erilaisten tehtävien antamiseen verkossa. Tehtävä-aktiviteettia ei ole tarkoitettu ainoastaan tehtävien palautukseen, kuten moni sen sellaiseksi mieltää,

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

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 4.10.2017 CS-A1111 Ohjelmoinnin peruskurssi Y1 4.10.2017 1 / 23 Mahdollisuus antaa luentopalautetta Luennon aikana voit kirjoittaa kommentteja ja kysymyksiä sivulle

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Keskeneräinen luento 3: Listat (mm. SICP 22.2.3) Riku Saikkonen 31. 10. 2011 Sisältö 1 Linkitetyt listat 2 Linkitetyt listat (SICP 2.1.1, 2.2.1) funktionaalinen

Lisätiedot

Enigmail-opas. Asennus. Avainten hallinta. Avainparin luominen

Enigmail-opas. Asennus. Avainten hallinta. Avainparin luominen Enigmail-opas Enigmail on Mozilla Thunderbird ja Mozilla Seamonkey -ohjelmille tehty liitännäinen GPG-salausohjelmiston käyttöä varten. Sitä käytetään etenkin Thunderbirdin kanssa sähköpostin salaamiseen

Lisätiedot

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5 Kysy Karilta tai Kimmolta, jos tehtävissä on jotain epäselvää. Kerro WETOon liittyvät tekniset ongelmat suoraan Jormalle sähköpostitse (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida

Lisätiedot

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö Algoritmit 2 Luento 2 Ke 15.3.2017 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2017 Luento

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

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö Algoritmit 2 Luento 2 To 14.3.2019 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2019 Luento

Lisätiedot

Ensikosketus ohjelmointiin

Ensikosketus ohjelmointiin Ensikosketus ohjelmointiin Tällä tunnilla luodaan ensimmäinen oma ohjelmamme. Tähän hyödynnetään Touch Develop -ympäristön kilpikonnaohjelmointikirjastoa. Tutoriaalissa opitaan kilpikonnahahmoa ruudulla

Lisätiedot

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä 6.11.2002

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä 6.11.2002 JReleaser Yksikkötestaus ja JUnit Mikko Mäkelä 6.11.2002 Sisältö Johdanto yksikkötestaukseen JUnit yleisesti JUnit Framework API (TestCase, TestSuite) Testien suorittaminen eri työkaluilla Teknisiä käytäntöjä

Lisätiedot

Sukelluskeräily. Pelihahmon liikuttaminen. Aarre ja pisteet

Sukelluskeräily. Pelihahmon liikuttaminen. Aarre ja pisteet Sukelluskeräily 1 Tässä pelissä keräilet erilaisia aarteita ja väistelet vihollista. Tämän lisäksi pelaajan pitää käydä välillä pinnalla hengittelemässä. Peliin lisätään myös häiriötekijäksi esim. parvi

Lisätiedot

Ylläpitodokumentti. Boa Open Access. Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ylläpitodokumentti. Boa Open Access. Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Ylläpitodokumentti Boa Open Access Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Diplomi-insinööri- ja arkkitehtikoulutuksen yhteisvalinta 2017 Insinöörivalinnan matematiikan koe , Ratkaisut (Sarja A)

Diplomi-insinööri- ja arkkitehtikoulutuksen yhteisvalinta 2017 Insinöörivalinnan matematiikan koe , Ratkaisut (Sarja A) Diplomi-insinööri- ja arkkitehtikoulutuksen yhteisvalinta 017 Insinöörivalinnan matematiikan koe 30..017, Ratkaisut (Sarja A) 1. a) Lukujen 9, 0, 3 ja x keskiarvo on. Määritä x. (1 p.) b) Mitkä reaaliluvut

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2018-2019 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

Yhteisrakentamisverkoston uutiskirje 02/2018

Yhteisrakentamisverkoston uutiskirje 02/2018 10.4.2018 Yhteisrakentamisverkoston uutiskirje 02/2018 1 Verkkotietopiste.fi-palvelun uudet ominaisuudet Verkkotietopisteen vuoden 2018 ensimmäinen päivitys on julkaistu ja tuotannossa. Palvelun keskeiset

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

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

2 Konekieli, aliohjelmat, keskeytykset

2 Konekieli, aliohjelmat, keskeytykset ITK145 Käyttöjärjestelmät, kesä 2005 Tenttitärppejä Tässä on lueteltu suurin piirtein kaikki vuosina 2003-2005 kurssin tenteissä kysytyt kysymykset, ja mukana on myös muutama uusi. Jokaisessa kysymyksessä

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

Tavallisen videomainoksen sijasta Ruudussa voidaan mainostauolla esittää dynaamisia spotteja.

Tavallisen videomainoksen sijasta Ruudussa voidaan mainostauolla esittää dynaamisia spotteja. RUUTU DYNAAMINEN SPOTTI TEKNISET OHJEET Versio 1.0 Yleistä Tavallisen videomainoksen sijasta Ruudussa voidaan mainostauolla esittää dynaamisia spotteja. Dynaamiset spotit ovat flash mainoksia, jotka mahdollistavat

Lisätiedot

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

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus: Dokumentaatio, osa 1 Tehtävämäärittely Kirjoitetaan lyhyt kuvaus toteutettavasta ohjelmasta. Kuvaus tarkentuu myöhemmin, aluksi dokumentoidaan vain ideat, joiden pohjalta työtä lähdetään tekemään. Kuvaus

Lisätiedot

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmi on periaatteellisella tasolla seuraava: Algoritmi on periaatteellisella tasolla seuraava: Dijkstra(V, E, l, v 0 ): S := { v 0 } D[v 0 ] := 0 for v V S do D[v] := l(v 0, v) end for while S V do valitse v V S jolle D[v] on minimaalinen S := S

Lisätiedot

Kuva: Ilpo Okkonen

Kuva: Ilpo Okkonen OodiHOPS OHJAAJAN OHJE 14.2.2017 Kuva: Ilpo Okkonen OodiHOPS Oulun yliopistossa Oulun yliopiston koulutusneuvosto on päättänyt, että OodiHOPS-toiminto otetaan käyttöön vähintään aloittavilla opiskelijoilla

Lisätiedot

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++ JAVA alkeet JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++ ja Javascriptin kanssa. Huom! JAVA ja JavaScript eivät silti ole sama asia, eivätkä edes sukulaiskieliä.

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0 CODEONLINE Monni Oo- ja Java-harjoituksia Version 1.0 Revision History Date Version Description Author 25.10.2000 1.0 Initial version Juha Johansson Inspection History Date Version Inspectors Approved

Lisätiedot

Eclipse ja JUnit-ohjelmoijatestit

Eclipse ja JUnit-ohjelmoijatestit Eclipse ja JUnit-ohjelmoijatestit Tarkoitus on tutustua Eclipsen käyttöön vähän lähemmin ja varsinkin JUnit-ohjelmoijatesteihin (ohjelmoijatesti on vanhalta nimeltä yksikkötesti). Ohjelmoijatestit ovat

Lisätiedot

Harjoitustyö: virtuaalikone

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 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

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

Hops-ohjaajan ohje Opiskelijan hopsit.

Hops-ohjaajan ohje Opiskelijan hopsit. Hops-ohjaajan ohje Tässä ohjeessa kuvataan kaksi erilaista tapaa hakea tietyn opiskelijan lähettämä hops. Ensin ohjeistetaan miten toimitaan, jos hopsin ryhmätyökalu on käytössä, eli ohjaajalle on luotu

Lisätiedot

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006 TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa

Lisätiedot

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti. Tietorakenteet, laskuharjoitus 11, ratkaisuja 1. Leveyssuuntaisen läpikäynnin voi toteuttaa rekursiivisesti käsittelemällä jokaisella rekursiivisella kutsulla kaikki tietyllä tasolla olevat solmut. Rekursiivinen

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Hakemistojen sisällöt säilötään linkitetyille listalle.

Hakemistojen sisällöt säilötään linkitetyille listalle. Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi Java-kielellä komentoikkunaa (komentotulkkia, komentoriviä) simuloiva olioperustainen ohjelma. Hakemistojen sisällöt säilötään linkitetyille listalle. Työ

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 31.1.-1.2.2018 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka tutkii onko kokonaisluku tasan jaollinen jollain toisella kokonaisluvulla siten, että ei käytetä lainkaan jakolaskuja Jaettava

Lisätiedot

Luento 2: Viivan toteutus

Luento 2: Viivan toteutus Tietokonegrafiikan perusteet T-111.4300 3 op Luento : Viivan toteutus Lauri Savioja 11/07 Primitiivien toteutus / 1 GRAAFISTEN PRIMITIIVIEN TOTEUTUS HUOM! Oletuksena on XY-koordinaatisto Suorien viivojen

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

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER Group 16 Ville Laatu Henri Myllyoja - i SISÄLLYSLUETTELO 1. DEBUGGERI YLEISESTI... II 1.1 Debuggerin käyttämien... ii 1.2 Debuggerin käynnistäminen... ii

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

OHJ-1160 Laaja Ohjelmointi 2

OHJ-1160 Laaja Ohjelmointi 2 Tampereen teknillinen yliopisto Ohjelmistotekniikan laitos OHJ1160 Laaja Ohjelmointi 2 Harjoitustyö Avaruusseikkailu 2001 + 11 Nyyti Kinnunen 222500 kinnune8 nyyti.kinnunen@tut.fi 1 1 Ohjelman rakenne

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

ITKP102 Ohjelmointi 1 (6 op)

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

Lisätiedot

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

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

Lisätiedot

Tietokanta.java Luokka tarjoaa välineet tietokannan lukemiseen. Haetuista tiedoista muodostetaan kurssi- ja opetus-olioita.

Tietokanta.java Luokka tarjoaa välineet tietokannan lukemiseen. Haetuista tiedoista muodostetaan kurssi- ja opetus-olioita. Arkkitehtuurikuvaus Käytössä olevat java-luokat: Kansio: /WEB_INF/classes/ - käännetyt luokat Kansio: /WEB_INF/src/ - lähdekoodi custom_pojos: Kurssi.java Java-luokka, jonka sisältö vastaa tietokannassa

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

JUnit ja EasyMock (TilaustenKäsittely)

JUnit ja EasyMock (TilaustenKäsittely) OHJELMISTOJEN TESTAUS JA HALLINTA Syksy 2015 / Auvo Häkkinen JUnit ja EasyMock (TilaustenKäsittely) Tehtävässä tarvittava koodi löytyy osoitteella http://users.metropolia.fi/~hakka/oth/mockesimerkki.zip

Lisätiedot

Avaa ohjelma ja tarvittaessa Tiedosto -> Uusi kilpailutiedosto

Avaa ohjelma ja tarvittaessa Tiedosto -> Uusi kilpailutiedosto Condess ratamestariohjelman käyttö Aloitus ja alkumäärittelyt Avaa ohjelma ja tarvittaessa Tiedosto -> Uusi kilpailutiedosto Kun kysytään kilpailun nimeä, syötä kuvaava nimi. Samaa nimeä käytetään oletuksena

Lisätiedot

Suvi Junes/Pauliina Munter Tietohallinto/Opetusteknologiapalvelut 2014

Suvi Junes/Pauliina Munter Tietohallinto/Opetusteknologiapalvelut 2014 Tietokanta Tietokanta on työkalu, jolla opettaja ja opiskelijat voivat julkaista tiedostoja, tekstejä, kuvia ja linkkejä alueella. Opettaja määrittelee lomakkeen muotoon kentät, joiden kautta opiskelijat

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

Tietokannan luominen:

Tietokannan luominen: Moodle 2 Tietokanta: Tietokanta on työkalu, jolla opettaja ja opiskelijat voivat julkaista tiedostoja, tekstejä, kuvia, linkkejä alueella. Opettaja määrittelee lomakkeen muotoon kentät, joiden kautta opiskelijat,

Lisätiedot

Jypelin käyttöohjeet» Ruutukentän luominen

Jypelin käyttöohjeet» Ruutukentän luominen Jypelin käyttöohjeet» Ruutukentän luominen Pelissä kentän (Level) voi luoda tekstitiedostoon "piirretyn" mallin mukaisesti. Tällöin puhutaan, että tehdään ns. ruutukenttä, sillä tekstitiedostossa jokainen

Lisätiedot

Toiminta ennen ensimmäistä ottelua (1/2)

Toiminta ennen ensimmäistä ottelua (1/2) Toiminta ennen ensimmäistä ottelua (1/2) Kotijoukkue kirjautuu järjestelmään omalla joukkuekoodillaan Joukkue- /seuratunnus -kohdasta. Kirjoita joukkueesi tunnus siihen ja paina Kirjaudu -kohdasta. Tunnukset

Lisätiedot