Ohjelmoinnin peruskurssi Y1 CS-A1111 15.11.2017 CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 1 / 28
Mahdollisuus antaa luentopalautetta Luennon aikana voit kirjoittaa kommentteja ja kysymyksiä sivulle presemo.aalto.fi/opey1luento10 Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute. Tätä kautta on mahdollisuus antaa nimettömänä palautetta luennosta. Jos jokin kurssilla esitetty asia on jäänyt epäselväksi, voit kysyä siitä Piazzassa myös nimettömänä. Myös harjoitustehtävistä voi antaa palautetta palautuksen yhteydessä, mutta tämä palaute ei ole nimetöntä. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 2 / 28
Kertausluento Luennolla puhutaan lyhyesti tentistä ja tenttivaatimuksista. Tarkemmat tiedot tenttivaatimuksista MyCoursesissa alasivulla Suoritusvaatimukset. Kerrataan joitakin aiheita opiskelijoiden toivomusten pohjalta. Käydään läpi joitakin vanhoja tenttitehtäviä. Lisäksi luennolla esitellään jatkomahdollisuuksia tämän kurssin jälkeen. Joitakin linkkejä oikean maailman Python-ohjelmiin. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 3 / 28
Esimerkkejä oikean maailman Python-ohjelmista Sivulla http://en.wikipedia.org/wiki/list_of_python_software on lueteltu suuri joukko Pythonilla tehtyjä ohjelmia. Myös sivulla https://www.python.org/about/success/ on kerrottu eri alojen projekteista, joissa on käytetty Pythonia. Voit asentaa matkapuhelimeen (Android, IPhone tai Windows Phone) Python-tulkin. Tällöin voit itsekin kirjoittaa Python-ohjelmia, jotka esim. hakevat haluttua tietoa joltain www-sivulta. (Tietoa voi lukea www-sivulta lähes samaan tapaan kuin tekstitiedostosta.) CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 4 / 28
Mitä tämän kurssin jälkeen? CS-A1121 Ohjelmoinnin peruskurssi Y2 (5 op) (kl) Lisää ohjelmointia Pythonilla, mm. suurempi harjoitustyö. Pohja ohjelmoinnin muille jatkokursseille. Kuuluu pakollisena tietotekniikan sivuaineeseen. CS-A1130 Tietotekniikka sovelluksissa (5 op) (kl) Datan analysointia ja visualisointia eri ohjelmoistoilla. CS-A1141 Tietorakenteet ja algoritmit Y (5 op) (sl) Tietorakenteita, esim. linkitetyt listat, hakupuut, verkot Algoritmeja, esim. järjestäminen, haku Algoritmin tehokkuuden arviointi Kuuluu pakollisena tietotekniikan sivuaineeseen. ELEC-A7100 C-ohjelmoinnin peruskurssi (5 op) (kl) Ohjelmointia C-kielellä. Oletetaan toisen ohjelmointikielen aikaisempi tuntemus. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 5 / 28
Tentti Ensimmäinen tenttimahdollisuus on pe 1.12. klo 9:00 12:00 Kandidaattikeskuksessa (Otakaari 1), Tietotekniikan talossa (Konemiehentie 2) ja TUAS-talossa (Maarintie 8). Salijako ilmoitetaan kurssin MyCourses-sivulla viimeistään to 30.11. Noudata salijakoa ja tarkista etukäteen, mihin rakennukseen sinun pitää mennä. Tämän jälkeen on vielä neljä muuta mahdollisuutta: Tentit kevätlukukaudella 2018: ke 14.2. ja ke 23.5. Kesätentti (todennäköisesti elokuussa 2017). Syyslukukauden 2017 ensimmäinen tentti (todennäköisesti lokakuussa). Varaa ylimääräistä aikaa tentin päättymisajan jälkeen, sillä tentti ei välttämättä pääse alkamaan tasan ilmoitettuna alkamisaikana. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 6 / 28
Tenttiin ilmoittautumisesta Jos olet ilmoittautunut kurssille, olet samalla ilmoittautunut automaattisesti ensimmäiseen (1.12.) tenttiin. Muihin tentteihin pitää ilmoittautua viimeistään viikko ennen tenttiä Oodissa. Niiden, jotka eivät ole ilmoittautuneet kurssille, pitää ilmoittautua myös 1.12. tenttiin. Tenttiin ei ehkä pysty osallistumaan, jos ei ole ilmoittautunut ajoissa. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 7 / 28
Erityisjärjestelyt Jos tarvitset erityisjärjestelyjä esim. lukihäiriön tai jonkin vamman vuoksi, hae oman koulusi opiskelijapalveluista päätös siitä, millaisiin erityisjärjestelyihin olet oikeutettu (samaa päätöstä voit käyttää kaikilla muillakin Aallon kursseilla). Lähetä sähköpostia luennoijalle viimeistään kaksi viikkoa ennen tenttiä, mieluummin jo aikaisemmin. Jos tarvitset tenttikysymykset ruotsiksi tai englanniksi, valitse haluamasi kieli ilmoittautumisen yhteydessä. Vaikka Aallon säännöt eivät sitä vaadikaan, kannattaa toivomuksesta saada ruotsinkieliset kysymykset ilmoittaa luennoijalle hyvissä ajoin ennen tenttiä (mielellään jo kuukausi etukäteen). Näin varmistat huolellisesti tehdyn korkealuokkaisen käännöksen. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 8 / 28
Järjestelyistä Tentti tehdään kirjoittamalla käsin paperille, koska Aalto-yliopisto ei vielä tarjoa sopivia mahdollisuuksia sähköiseen tenttimiseen näin isolle kurssille. Lisämateriaali tai laskimet eivät ole sallittuja. Tentissä ei jaeta muuta materiaalia itse tentin lisäksi. Opiskelijat, joiden äidinkieli ei ole suomi, saavat halutessaan käyttää sanakirjaa, jos siinä ei ole ylimääräisiä merkintöjä (valvoja tarkistaa). CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 9 / 28
Miksi tentillä on niin suuri paino kurssin arvostelussa? Kurssin työmäärästä suurin osa menee harjoitustehtävien tekemiseen. Tentti on lopullinen varmistus sille, että harjoitustehtävät on tehty itse. Jos on tehnyt harjoitustehtävät itse eikä ole saanut liian yksityiskohtaista apua niiden tekemiseen, ovat tentissä vaadittavat taidot yleensä jo hallussa ja tarvitsee korkeintaan muutaman tunnin niiden kertaamiseen. Esimerkiksi viime vuoden kurssin ensimmäisessä tentissä yli 60 % osanottajista sai arvosanan 4 tai 5 ja alle 10 % hylätyn arvosanan. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 10 / 28
Tenttitehtävätyyppejä Koodin ymmärtämistä testaavia tehtäviä, esimerkiksi: Mitä annettu ohjelma tulostaa? Mitä annettu funktio/ohjelma tekee? Mitä virheitä annetussa ohjelmassa on? Omien ohjelmien ja funktioiden kirjoittaminen (valtaosa tehtävistä). Olio-ohjelmointitehtävä Vastaa vaativuustasoltaan yhteensä harjoitustehtäväkierroksen 9 tehtäviä 2 ja 3. (Kirjoita yksinkertainen luokka ja pääohjelma, joka luo luokan olioita ja kutsuu niille luokan metodeita.) Tällainen tehtävä on joka tentissä ja sen pistemäärä on 25 prosenttia tentin maksimipisteistä. Käytännössä tentistä on vaikea saada arvosanaa 3 tai parempaa, jos ei saa lainkaan pisteitä olio-ohjelmointitehtävästä. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 11 / 28
Vanhoja tenttejä Esimerkkejä vanhoista tämän kurssin tenteistä (kurssikoodit CS-A1111 ja CSE-A1111) voi katsoa sivulta www.tenttiarkisto.fi CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 12 / 28
Tenttiin valmistautumisesta ja vastaamisesta Harjoittele tenttiin kirjoittamalla itse pieniä Python-ohjelmia. Harjoittele myös ohjelmien kirjoittamista ilman mallia ja paperille. Ratkaisujen pienistä kirjoitusvirheistä ei yleensä sakoteta, jos niillä ei ole periaatteellista merkitystä ja muusta ratkaisusta näkyy, että vastaava asia on osattu. Poikkeuksena on kuitenkin sisennykset: niiden on erotuttava selvästi ja oltava oikein, koska sisennyksillä on koodin toimintaan ratkaiseva merkitys. Jos sisennyksistä ei saa selvää tai ne puuttuvat, niin se vähentää pisteitä selvästi. Käytä kahden ruudun levyisiä sisennyksiä. Jos joku tehtävä tuntuu liian vaikealta, älä jää liian pitkäksi aikaa tekemään sitä, vaan tee ensin ne tehtävät, jotka osaat. Tee vain se, mitä tehtävässä on pyydetty. Jos tehtävässä pyydetään kirjoittamaan vain funktio, niin pääohjelmaa ei tarvitse kirjoittaa. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 13 / 28
Goblinin kautta tulleita kysymyksiä Voiko for-käskyn luottaa käyvän listan alkiot läpi järjestyksessä? Vastaus: Kyllä. Jos toistokäskyn otsikko on for muuttuja in lista:, niin muuttujan arvo on ensimmäisellä kierroksella listan ensimmäinen alkio, toisella kierroksella toinen alkio jne. Lukeeko for-käsky tiedoston rivit järjestyksessä? Vastaus: Kyllä, jos käskyn toimintaa ei sotketa lukemalla rivejä ennen for-käskyä tai sen sisällä jollain toisella käskyllä (esim. readlinella). Käykö for-käsky sanakirjan avaimet läpi siinä järjestyksessä, kuin ne on lisätty sanakirjaan? Vastaus: Ei käy. Järjestys on satunnainen, ja voi vaihdella ohjelman eri suorituskerroilla. Luennon 6 luentokalvojen lopussa on esimerkki siitä, miten avaimet voi käydä läpi järjestyksessä. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 14 / 28
Goblinin kautta tulleita kysymyksiä, jatkoa Voisitko selittää globaalien ja lokaalien muuttujien toimintaa Vastaus: Käytä globaaleja muuttujia vain ohjelman käyttämien vakioiden tallentamiseen. Näille muuttujille annetaan arvo funktioiden määrittelyjen ulkopuolella. Muuten käytä vain tavallisia muuttujia, joiden arvo näkyy vain saman funktion sisällä. Käytä parametreja ja paluuarvoja, kun tietoa pitää välittää funktiosta toiseen. Olion kenttien arvot näkyvät kaikkien olion määrittelevän luokan metodien sisällä. Pythonissa on myös mahdollisuus määritellä globaaleja muuttujia, mutta niiden käyttäminen tekee helposti ohjelmasta vaikeasti ymmärrettävän ja lisää ohjelmointivirheiden riskiä. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 15 / 28
Goblinin kautta tulleita kysymyksiä, jatkoa Voisitko selittää Pythonin logiikkaa ja toimintaperiaatteita liittyen erilaisten muuttujien viittauksiin. Vastaus: Tämä on valitettavasti liian laaja aihe käsiteltäväksi tällä luennolla. Asiaa on käsitelty opetusmonisteen kappaleessa 5.9 ja luennon 8 lisäkalvoilla. Jos niiden lukemisen jälkeen jää kysymyksiä, vastaan niihin mielelläni Piazzassa. Kannattaa myös kokeilla kirjoittaa pieniä ohjelmia, joissa useampi muuttuja viittaa samaan listaan tai olioon ja katsoa, mitä tapahtuu. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 16 / 28
Vanhoja tenttitehtäviä Seuraavilla kalvoilla esitetään esimerkkejä viime vuoden kurssin tenttitehtävistä. Kalvoilla esitettyjä tehtävänantoja on lyhennetty. Alkuperäisiä tenttejä on tenttiarkistossa. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 17 / 28
Esimerkki koodin ymmärtämistä testaavasta tehtävästä Mitä seuraava ohjelma tulostaa? (2 p.) def main(): osanottajamaara = 1500 if osanottajamaara >= 1000: print("paljon porukkaa.") if osanottajamaara < 100: print("tulipa vahan osanottajia.") else: print("ihan kohtuullinen osanotto.") main() CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 18 / 28
Esimerkkejä syksyn 2016 tenttitehtävistä Mitä seuraava funktio tekee, kun sille annetaan parametrina kokonaislukuja sisältävä lista ja positiivinen kokonaisluku. Listassa on vähintään yksi alkio (4 p.) def mysteeri1(lista, luku): paras = lista[0] tulos = abs(luku - lista[0]) i = 1 while i < len(lista): if abs(luku - lista[i]) < tulos: tulos = abs(luku - lista[i]) paras = lista[i] i += 1 return paras CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 19 / 28
Esimerkkejä syksyn 2016 tenttitehtävistä Mitä seuraava funktio tekee, kun sille annetaan parametrina kokonaislukuja sisältävä lista ja positiivinen kokonaisluku. Listassa on vähintään yksi alkio (4 p.) def mysteeri1(lista, luku): paras = lista[0] tulos = abs(luku - lista[0]) i = 1 while i < len(lista): if abs(luku - lista[i]) < tulos: tulos = abs(luku - lista[i]) paras = lista[i] i += 1 return paras Esimerkki täydet pisteet tuovasta vastauksesta: Funktio etsii ja palauttaa listasta sen alkion, joka on lähimpänä parametrina annettua kokonaislukua. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 19 / 28
Esimerkkejä syksyn 2016 tenttitehtävistä, jatkuu Olet järjestämässä juhlia ja on pyytänyt tarjouksia ruokatarjoilun järjestämisestä kolmesta eri yrityksestä. Yritysten veloittamat summat riippuvat sekä vieraiden lukumäärästä että juhlien kestosta. Yritys A laskuttaa 25 eur / vieras ja lisäksi 80 eur / tunti. Yritys B laskuttaa 20 eur / vieras ja lisäksi 100 eur / tunti. Yritys C veloittaa 35 eur / vieras, mutta se ei laskuta lainkaan juhliin kuluneesta ajasta. Kirjoita ohjelma, joka kysyy käyttäjältä vieraiden lukumäärän ja juhlien keston. Tämän jälkeen ohjelman pitää tulostaa, minkä yrityksen tarjous on halvin ja kuinka paljon juhlien tarjoilu maksaa tämän yrityksen järjestämänä. (10 p) CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 20 / 28
Esimerkkejä syksyn 2016 tenttitehtävistä, jatkuu Kiinteistönvälittäjä saa palkkiota jokaisesta myymästään asunnosta 2 % asunnon myyntihinnasta, mutta kuitenkin vähintään yrityksen päättämän vähimmäispalkkion. Palkkio lasketaan erikseen jokaiselle myydylle asunnolle. Kirjoita funktio laske_kokonaispalkkio(myyntihinnat, vahimmaispalkkio). Funktio saa ensimmäisenä parametrina listan, joka sisältää välittäjän myymien asuntojen myyntihinnat (kukin alkio on yhden asunnon myyntihinta). Funktion toinen parametri on yhden asunnon myynnistä tuleva vähimmäispalkkio. Funktio laskee ja palauttaa arvonaan myydyistä asunnoista välittäjälle yhteensä tulevan palkkion. (20 p) CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 21 / 28
Esimerkkejä syksyn 2016 tenttitehtävistä, jatkuu Eräs yritys on tallentanut tekstitiedostoon tiedot kesätyöpaikkoja hakeneista opiskelijoista niin, että kullakin rivillä on yhden hakijan tiedot. Rivillä on ensin hakijan nimi, sitten hänen vuosikurssinsa, sen jälkeen hänen opintopistemääränsä ja lopuksi hakijan kurssiarvosanojen keskiarvo. Eri tiedot on erotettu toisistaan puolipisteellä, esim. Eetu Energisti;1;35.0;4.09 Satu Sahkolainen;3;151.0;3.76 Ville Virta;2;55.0;3.95 Yritys haluaa kutsua haastatteluun kaikki ne hakijat, joiden keskiarvo on yli 4.0 tai joilla on keskimäärin vähintään 60 opintopistettä jokaista täyttä opiskeluvuotta kohti. Ykkösvuosikurssilaisten osalta haastatteluun pääsyn ratkaisee vain keskiarvo. Kirjoita Python-ohjelma, joka pyytää käyttäjältä hakijatiedot sisältävän tiedoston nimen. Ohjelma lukee tiedoston rivit ja tulostaa haastatteluun kutsuttavien hakijoiden nimet. (20 p) CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 22 / 28
Esimerkkejä syksyn 2016 tenttitehtävistä, jatkuu Kirjoita luokka Matkakortti yksinkertaisen matkakortin kuvaamiseen. Kortille voi ladata ainoastaan rahaa. Matkakortti-oliolla on oltava seuraavat kentät: nimi saldo kaytossa CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 23 / 28
Esimerkkejä syksyn 2016 tenttitehtävistä, jatkuu Määrittele luokkaan Matkakortti seuraavat metodit init (self, nimi1, alkusaldo) kerro_nimi(self) kerro_saldo(self) poista_kaytosta(self) saata_kayttoon(self) nollaa_saldo(self) asettaa kortin saldon nollaksi ja palauttaa kortilla ennen nollausta olleen saldon. lisaa_rahaa(self, lisays) kasvattaa kortin saldoa parametrina annetulla määrällä, jos parametri on positiivinen ja kortti on käytössä. Jos saldon kasvatus onnistuu, metodi palauttaa arvon True, muussa tapauksessa False. (jatkuu seuraavalla kalvolla) CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 24 / 28
Esimerkkejä syksyn 2016 tenttitehtävistä, jatkuu Lisää luokkaan määriteltäviä metodeja: tee_matka(self, vyohyke_lkm) tekee kortilla matkan, jos kortti on käytössä ja kortin saldo riittää matkan tekemiseen. Yhden vyöhykkeen lippu maksaa 206 senttiä, kahden vyöhykkeen lippu 404 senttiä ja kolmen vyöhykkeen lippu 609 senttiä. Metodi vähentää kortin saldoa matkan hinnalla ja palauttaa arvon True, jos matkan tekeminen onnistui, ja muussa tapauksessa False. str (self) palauttaa merkkijonon, joka sisältää kortin omistajan nimen, kortin saldon ja joko tekstin kortti on kaytossa tai ei ole kaytossa sen mukaan, onko kortti tällä hetkellä käytössä. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 25 / 28
Esimerkkejä syksyn 2016 tenttitehtävistä, jatkuu Kirjoita lisäksi pääohjelma, joka tekee seuraavat asiat: Luo kaksi Matkakortti-oliota ja lisää ensin luodulle kortille rahaa. Yrittää tehdä yhden matkan toiseksi luodulla kortilla ja tulostaa, onnistuiko se. Poistaa toiseksi luodun kortin käytöstä, nollaa sen saldon ja tulostaa tämän jälkeen, mikä oli kortin saldo ennen nollausta. Tulostaa molempien korttien tiedot (nimi, kortin saldo ja tieto siitä, onko kortti käytössä). CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 26 / 28
Erityistä 1.12. tentissä Tentin maksimipistemäärä on 100 pistettä. Pisteistä 4 tulee siitä, että opiskelija vastaa 1.12.-8.12. välisenä aikana Goblinissa lopputestiin ja loppukyselyyn. Nämä 4 pistettä tulevat ko. kyselyihin vastaamisesta. Vastausten sisältö ei vaikuta pisteisiin, kunhan opiskelija on vastannut lopputestin kysymyksiin tosissaan eikä selvästi kirjoittanut täysin mielivaltaisia vastauksia. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 27 / 28
Kurssipalautekysely Kurssipalautekysely aukeaa 24.11. ja on auki 14.12. asti. Linkki palautekyselyyn tulee sähköpostissa niille opiskelijoille, jotka ovat ilmoittautuneet kurssille WebOodissa. Palautekyselyyn vastanneet saavat 200 lisäharjoitustehtäväpistettä. Pisteitä ei lasketa minkään kierroksen pisteisiin, mutta ne vaikuttavat harjoitustehtäväarvosanaan. CS-A1111 Ohjelmoinnin peruskurssi Y1 15.11.2017 28 / 28