Harjoitustyö 3 - Millosemeni



Samankaltaiset tiedostot
Harjoitustyö 3 - Reittioptimisaatio

Integraatio-ohje. TVV LMJ Liikennöintitietojen Hallinta Liikennöintitietojen hallinta integraatio-ohje V1.11.

Johdatus Ohjelmointiin

Valtion yhteisen viestintäratkaisun (Vyvi) Työtila- ja Ryhmä-palvelun kirjautumisohje

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

Ohjelmoinnin jatkokurssi, kurssikoe

AXCARD AXCARD PR JOHDANTO 2. LUKIJAN KÄYNNISTYS

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

Palvelupyyntöjärjestelmä. Asiakkaan ohje

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Ohjelmoinnin perusteet Y Python

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

LB-Sokopro projektipankki, Elementtisuunnitelmatiedostojen nimeäminen ja vienti projektipankkiin OSAAVA SUOMALAINEN PERHEYHTIÖ

Porin yliopistokeskuksen tilavarausjärjestelmä. htila.ucpori.fi/ KÄYTTÖOHJE

Ohjelmoinnin perusteet Y Python

Sukupuu -ohjelma. Ossi Väre ( ) Joni Virtanen ( )

Näin järjestän ohjelmointikurssin, vaikka en ole koskaan ohjelmoinut

OP Tunnistuksen välityspalvelu

Rajapintakuvaus Liikenneluvat

SISÄLLYSLUETTELO RC-436

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Projektisuunnitelma. Projektin tavoitteet

LIITE 2.7. Integraatio-ohje. TVV LMJ Liikennöintitietojen Hallinta

Racket ohjelmointia osa 2. Tiina Partanen Lielahden koulu 2014

Ylläpitopalvelu. Tietuekuvaus. Tietuekuvaus 1 (8) Ylläpitopalvelu. Julkinen - Public

Harjoitustyö: virtuaalikone

WINHAWILLE 1 (6) Opiskelijasivut Opiskelijan ohjaus/hh/versio

Tietueet. Tietueiden määrittely

4. Luokan testaus ja käyttö olion kautta 4.1

Elisa Puheratkaisu Vakio Pääkäyttäjän ohjeet

Open Data Tampere Region Kickoff Avoimen datan käyttömahdollisuudet liikenteessä

Loppukurssin järjestelyt

Subversion-ohje. Linux Traffic Control-käyttöliittymä Ryhmä paketti2

Valtiokonttorin tunnistuspalvelu

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

GSRELE ohjeet. Yleistä

Ohjelmoinnin perusteet Y Python

Neuvolan käyttäjänopas

Käyttöohje. Ticket Inspector. Versio 1.0. Sportum Oy

Ohjelmoinnin peruskurssi Y1

Kääntäjän virheilmoituksia

Käyttöpaneelin merkkivalot

Valppaan asennus- ja käyttöohje

1. HARJOITUS harjoitus3_korjaus.doc

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

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

OULA TelemArk - arkkitehtuuri

Ohjelmoinnin perusteet Y Python

Uutisjärjestelmä. Vaatimusmäärittely. Web-palvelujen kehittäminen. Versio 1.3

MetropAccess- workshop Tutustuminen MetropAccess- Reitittimen toimintaan

Rekisteröityminen, tilojen varaaminen ja maksaminen WebTimmi varausjärjestelmässä

moodle-opiskelijan opas AD-tunnuksien käyttäjille SISÄLLYSLUETTELO

1 Muutokset piirilevylle

Lunastuspoistajat AJONEUVOJEN REKISTERÖINTI

Loppukurssin järjestelyt C:n edistyneet piirteet

Lohkokaavio-muotoisen aikataulun laatiminen PlaNet -ohjelmassa

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

3 PAIKKATIETOHARJOITUSTA

Tampereen raitiotie,

5. HelloWorld-ohjelma 5.1

Joukkoliikenteen reititys- ja aikataulupalvelu (MATKA.FI)

edocker PUBLISH! -paketinhallinnan käyttöohje 9/2015

6. Harjoitusjakso II. Vinkkejä ja ohjeita

PHP tehtävä 3 Atte Pekarinen TIKT13A

Matemaattinen optimointi I, demo

Datatähti alkukilpailu

Käyttäjän käsikirja. LIB 500 ja LIB 510 v Releasettelutyökalu Yleistä. ,NNXQDMRNDLOPRLWWDDHWWlNRKGHRQSlLYLWHWWlYl

GPS Miten opin käyttämään? Mihin käytän?

SmartShip Connect Lite lisäosa WooCommerce alustalle (c) Webbisivut.org

Toinen harjoitustyö. ASCII-grafiikkaa

2 Konekieli, aliohjelmat, keskeytykset

Tietotyypit ja operaattorit

Testaussuunnitelma. Ohjelmistotuotantoprojekti Nero. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Hankintaesityksen tekeminen EBSCOhost Collection Managerissa

OP-eTraderin käyttöopas

Rajapinta (interface)

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

Uusi reittiopas otettu käyttöön huhtikuussa 2015 (reittiopas.foli.fi)

Avaras, kyselykooste. Petri Linna, TTY Porin laitos

HYVÄKSILUETTUJEN SUORITUSTEN REKISTERÖIMINEN

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

Valitse ruudun yläosassa oleva painike Download Scilab.

JY / METODIFESTIVAALI 2013 PRE-KURSSI: KYSELYTUTKIMUS DEMOT

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

Hammastankohissin modernisointi. Heikki Laitasalmi

OPISKELIJAN PIKAOPAS

ORIVEDENKADUN LPA-ALUE ASUMISKÄYTTÖÖN (AK8668) NYKYINEN LIIKENNEVERKKO. Luonnos

OULUN SEUDUN JOUKKOLIIKENNEINFO

Ohjelmoinnin perusteet Y Python

3.1 Mitä tarkoittaan heredoc? Milloin sitä kannattaa käyttää? Kirjoita esimerkki sen käyttämisestä.

VJS-96 Black Panthers joukkueen www-sivujen käyttöohjeet

International Olympiad in Informatics 2013

EDMODO. -oppimisympäristö opettajille ja oppilaille KOONNUT: MIKA KURVINEN KANNUKSEN LUKIO

Kuutoskaupunkien suositukset avoimista rajapinnoista

PALLOVERKKO SÄHKÖINEN OTTELUPÖYTÄKIRJA

Opettajan pikaopas Opintojaksopalaute-järjestelmään

Toinen harjoitustyö. ASCII-grafiikkaa 2017

SmartShip lisäosa WooCommerce alustalle (c) Webbisivut.org

Transkriptio:

Harjoitustyö 3 - Millosemeni Tampereen kaupunki tarjoaa avoin data -sivuillaan Tampereen joukkoliikenteen aikataulut, reitit sekä rajapinnan joukkoliikenteen reaaliaikaiseen seurantaan. Näinpä erilaisille alustoille on syntynyt käteviä joukkoliikennepalveluita. Sinun tehtäväsi on toteuttaa pieni nopeimman reitin hakuapuri, jolla voi hakea nopeinta reittiä annettujen pysäkkien välille tietyllä lähtöajalla. Reaaliaikaisia nettihakuja ei tässä aleta toteuttamaan, joten kurssi tarjoaa valmiin kiinteän aikatauludatan. Bussien aikatauludata Huom! Alla oleva kuvaus on yksityiskohdiltaan vielä alustava, pieniä muutoksia voi tulla. Jokaisella linjalla on yksilöllinen tunnus (route_id) ja nimi (route_name) (nimi voi periaatteessa olla samakin kahdella linjalla). Lisäksi linja sisältää listan linjan pysäkeistä ja tiedon siitä, kuinka monta minuuttia päätepysäkiltä lähdön jälkeen ko. pysäkiltä lähdetään. Jokaisella ajettavalla bussivuorolla oma vuorotunnuksensa (bus_id), tieto ajettavasta linjasta ja lähtöaika linjan päätepysäkiltä. Jokaisella pysäkillä on tunnus (stop_id) sekä nimi (stop_name). Useammalla pysäkillä voi olla sama nimi, joten ne yksilöidään tunnuksen perusteella. Kurssi on puolestasi jäsentänyt datasta olennaiset osat tiedostoon, jota pääohjelma käsittelee. Näin tiedoston lukeminen ja tulkitseminen on kurssin vastuulla, ja tiedot syötetään harjoitustyönä tehtävään tietorakenteeseen sen jäsenfunktioita kutsumalla (kuten aiemmissakin harjoitustöissä). Jos haluat tietää lisää Tampereen avoimen data todellisista joukkoliikenteen rajapinnoista, lisätietoa (ja itse rajapinnat) löytyvät osoitteesta http://developer.publictransport.tampere.fi/. Linjan vaihtaminen Matka voi vaatia usean linjan käyttöä eli linja-autoa on mahdollista vaihtaa. Vaihdon pitää olla mahdollinen suorittaa eli bussista A voidaan vaihtaa bussiin B vain, jos bussin A lähtöaika pysäkiltä on sama tai aikaisempi kuin bussin B lähtöaika samalta pysäkiltä (eli tässä työssä nolla-ajassa vaihtaminen onnistuu). Pysäkiltä toiselle kävelyä vaativia vaihtoja ei tehdä vaan vaihtaminen tapahtuu aina yhdellä pysäkillä. Vaihdon yhteydessä linjan busseista valitaan aina ensiksi lähtevä (eli esim. ei ole sallittua jättää menemättä bussiin ja sitten nousta vasta seuraavaan saman linjan bussiin).

Reitin tulostus Kahden pysäkin välinen reitti tulostetaan seuraavasti: Jokaisesta reitin linjasta tulostetaan ensin linjan nimi ja sen jälkeen 2 sanavälillä sisennettynä jokaisesta käytetystä pysäkistä lähtöaika pysäkiltä, pysäkin id ja nimi. Viimeisenä tulostetaan se linjan pysäkki, jolla jäädään bussista pois. Tämän pysäkin osalta tulostetaan pysäkille saapumisaika ja rivin alkuun -> merkitsemään poistumista. Jos reitillä vaihdetaan linjasta toiseen, tulostetaan reitin linjat ylläolevaan tapaan järjestyksessä. Esimerkki tulostuksesta on ohjeen esimerkkiajossa. Ohjelman toiminta Ohjelman tunnistamat komennot on esitelty parametereineen ja kuvauksineen taulukossa 1. Taulukko 1: Ohjelman ymmärtämät komennot Komento Kuvaus R tiedosto Lukee tarvittavat reitti- ja pysäkkitiedot annetusta tiedostosta. B <stop_id> Tulostaa pysäkiltä <stop_id> lähtevät linjaautovuorot tunnusjärjestyksessä. T <hh:mm> <stop_id1> Tulostaa nopeimman reitin (reitin, joka <stop_id2> on perillä mahdollisimman aikaisin) lähtöpysäkiltä <stop_id1> määränpäähän <stop_id2>. Matka alkaa <hh:mm> ja matka on tehtävä saman vuorokauden aikana. Reitin tulostuksen kuvaus on muualla työohjeessa. P <stop_id> Tulostaa pysäkin <stop_id> nimen annetun tunnuksen perusteella. C Tulostaa pysäkkien, linjojen ja bussien lukumäärät. E Q Tyhjentää tietorakenteen. Lopettaa ohjelman. Kurssin koodi tulostaa pakolliset lisenssitiedot. 2

Valmiit osat Harjoitustyössä opetellaan graafirakenteen hyödyntämistä käytännössä. Tässäkin työssä tietorakennetoteutus tehdään luokkana, jolla on valmiiksi annettu rajapinta. Toteuta tietorakenteesi annettuihin.hh ja.cc -päätteisiin tiedostoihin. Pohjat tiedostoille saat versionhallinnasta. Valmiina tarjotaan pääohjelma, joka toteuttaa syötteen käsittelemisen, tietorakenteen luomisen sekä tietorakenteen jäsenfunktioiden kutsumisen. Sen tehtävä on testata toteutettua toiminnallisuutta. Pääohjelmaa ei saa muuttaa. Omia.hh- ja.cc-tiedostoja saa lisätä, mutta pitäkää huoli siitä, että ohjelman voi kääntää kääntämällä kaikki hakemiston.cc-tiedostot yhteen. Määritelty rajapinta annetaan valmiina C++:lla. Rajapinnan funktioiden toteutukset ja tarvittavat jäsenmuuttujat on toteutettava itse. Julkista rajapintaa ei saa muuttaa. Valmiit osat ovat saatavilla opiskelijan harjoitustöitä varten saamassa gitrepositoriossa. Lisäksi versionhallinnassa annetaan ohjelman testaamiseen käytettävä testiaineisto, jota vastaan harjoitustyön toiminnallisuutta arvioidaan. Suositeltavaa on myös tehdä omia testimateriaalejasi. Testitiedoston datan formaatti julkaistaan git-tietovarastossa samalla kuin valmiit koodit. Virhetilanteet Pääohjelma huolehtii virhetilanteista sikäli kun ne liittyvät komentojen parametreihin. Osa virheilmoituksista on käytännön syistä tulostettava tietorakenteen puolella, nämä on kuvattu seuraavassa. Virhekoodit on määritelty.hh-tiedostossa vakioina. Jos annettujen pysäkkien välillä ei ole linja-autoyhteyttä annetun ajankohdan jälkeen saman vuorokauden aikana, tulostetaan NO_ROUTE. Jos annettuja pysäkkejä ei ole olemassakaan, tulostetaan NO_SUCH_STOP. Tarvittaessa muitakin virhetilanteita saa havaita (jos sellaisia havaitsee), tulostusten formaatti on vapaa. Olennaista on, että testeissä tulostukset ovat odotettuja. 3

Esimerkki ohjelman toiminnasta Huom, tässä tulostuksessa esim. 13: Hermia - Ylöjärvi Matkatie on kaikki linjan nimeä. > R tyoohje-esimerkki.txt > C 91 stops, 2 routes, 142 buses. > P 3735 TTY > B 3735 13: Hermia - Ylöjärvi Matkatie > P 523 Linja-autoasema > B 523 10: Kaukajärvi - Keskustori N > T 13:10 3735 523 13: Hermia - Ylöjärvi Matkatie 13:14 3735, TTY 13:15 3733, Hervannan valtaväylä 13:16 3731, Vaajakatu 13:17 3737, Tieteenkatu 7 13:18 3519, Tieteenkatu 13:19 3569, Ammattikoulu 13:20 3587, Kierikankatu 13:21 3585, Lukonmäenkatu ->13:23 3549, Nuijatie 10: Kaukajärvi - Keskustori N 13:24 3549, Nuijatie 13:25 3117, Pullerikinahde 13:26 3562, Sotilaankatu 13:27 3589, Steiner-koulu 13:28 3088, Uotilantie 13:29 3085, Siirtolapuutarha 13:30 3083, Kuoppamäentie 29 13:31 3081, Seurakuntatalo 13:32 3069, Jokipohjantie 23 13:33 3067, Riihitie 13:34 3065, Nekalantie 55 13:35 3063, Nekalantie 29 13:36 3061, Lokintaival 13:37 3557, Iidesaukio 4

13:39 601, Tietotalo ->13:41 523, Linja-autoasema > P 1 Error: No such stop! > T 12:12 8 523 Error: No route! > Q This program uses bus data from Tampereen kaupunkiliikenne (TKL) Rajoitteet C++11:n standardikirjastoa saa ja pitää käyttää. Kielen ulkopuolisia valmiita kirjastoja ei saa käyttää. Koodatkaa hyvin! 5