```

Demotilanne:

  • Pisteet päivittyvät pienellä viiveellä.
  • Värit: Punainen - puutteellinen. Vihreä - hyväksytty (vähintään 6p, joista 2p tähtiä)
# aikajana

Error in expanding macros: 'luentoaiheet' is undefined

# fields

Ohjelmointi 1, k 2024 / Demo 4

Tehtävät perustuvat luentoihin: 07 ja 08.

OPPIMISTAVOITTEET

Täytä sitä mukaa, kun koet oppineesi uusia asioita. Työkirja-sivulla näet yhteenvedon kaikkien demojen osalta.

# Oppimistavoitteet

Demoista

Tauno 1a

# lisaaTaulukkoon

Tauno 1b

# summaajokotoinen
# taunoOppi

Ville 1

Tee Ville-tehtävät 3.3, 3.5, 3.6. 4.1-4.4. Sanoin luennolla että Villen merkkijonot toimivat kuten Javassa, mutta tuo taitaa nyt olla korjattu Villessä, eli Substring-metodin jälkimmäinen indeksi on merkkien määrä.

# villev1

Funktioista F1

Mikäli olit luennolla ma 21.09.2020 voit hypätä kohdan 1 yli ja jatkaa suoraan tämän tehtävän kohdasta 2.

  1. Mikäli et ollut luennolla 05 tai et saanut luennolla tehtyä sitä tehtävää, jossa opiskelijat "leikkivät" aliohjelmia ja "paperilaput" parametrejä, tee se nyt yksin tai yhden/kahden kaverin kanssa.

  2. Seuraavaksi lue huolella monisteen luku 9. Aliohjelman paluuarvo.

  3. Suorita kohdan 9.2 Funktion kutsuminen lopussa oleva animaatio huolella miettien, mitä tapahtuu ja miten asiat samaistuvat luentojen "paperilappujen leikkiesimerkkiin".

  4. Aja kohdan 9.3 Funktion kirjoittaminen toisella tavalla toisen esimerkin testit. Vaihda 2.0 tilalle 2. Aja testit ja katso, mitä tapahtuu. Vaihda jakolaskun tilalle kertominen luvulla 0.5 ja aja testit uudelleen.

  5. Katso alla olevat molemmat animaatiot ajatuksen kanssa.

# ae_keskiarvo
# ae_tolower

Kirjoita alle:

  • mitä opit animaation ja luentojen "paperilappujen" antamisen yhteydestä?
  • mitä hyötyä oli testeistä?
  • miksi sanotaan, että merkijono on muuttumaton (immutable) vaikka merkkijonoanimaation esimerkissä muuttuja jono muuttui?
  • jos vastauksesi on että et oppinut uutta, niin milloin opit em asiat
# funktiokutsu

TDD 1

Lue ensin: 11. Comtest.

Jos teet itse omia testejä vähintään kahteen funktioon (esim ComTest) Visual Studiossa tai vastaavassa, saat merkitä yhden lisäpisteen. Testit eivät saa olla täsmälleen samoja kuin mitkä saa kopioimalla tehtävien TIM-versiosta. Vastauksena kerrot minkä tehtävän ja minkä funktion/funktioiden toiminnan testasit. Voit antaa samalla palautetta ja kehitysehdotuksia Comtestin käytöstä. Huom! Ohjelmia joissa on pelkkä pääohjelma on vielä tämän kurssin tiedoilla aika haastavaa testata, samoin esim. pelijuttuja. Siksi testaamista kannattaa ehkä tehdä tässä demoissa vain sellaisille funktioille, jotka selkeästi palauttavat jotakin. Tässä demossa sellaisia on tehtävissä 2, 5 ja 6.

Jos ComTest ei toimi koneellasi, voit Copy/Pasteta ohjelmia alla olevaan laatikkoon ja testata siinä.

# ComTestPohjaCS
# tdd

Tehtävä 1. Pong tai työaikatutoriaali

Valitse ja tee jompikumpi seuraavista:

  1. (Peli) Tee Pong-tutoriaalista vaiheet 4-7. Näitä ei voi tehdä TIMissä, vaan on käytettävä esimerkiksi Visual Studiota. (Tee myös vaiheet 1-3 ellet niitä vielä ohjaustehtävinä tehnyt)

  2. (Ei-peli) Tutustu työaikaraportti tutoriaaliin Kuten Pongissakin, kirjoita alle muutaman kappaleen mittainen oppimispäiväkirja vastaavilla kriteereillä.

Kirjoita valitsemastasi tehtävästä parin kappaleen mittainen oppimispäiväkirja (väh. 5 riviä). Kerro mitä opit, mitkä asiat olivat uusia, helppoja ja vaikeita. Oliko tästä tehtävästä sinulle hyötyä? Voit antaa myös palautetta tehtävien sisällöistä. (Pong-tutoriaalin kooditiedostoja EI tarvitse palauttaa)

# Pong

Tehtävä 2*. Merkkijonojen vertailu

Tee funktio, joka palauttaa kahdesta merkkijonosta lyhyemmän. Jos jonot ovat yhtä pitkät, palautetaan vertailtavista jonoista aina ensimmäinen.

  • Käytä apunasi luentomonisteen Merkkijonot-lukua.

Lisävinkkejä

# lyhempijono

Huomaa! TIMissä konsolilta lukeminen ei toimi samalla tavalla kuin oikeassa ohjelmassa. TIMissä käyttäjän syöte pitää antaa sille varattuun tilaan ENNEN ohjelman ajamista.

Tehtävä 3 Ääkköset aakkosiksi

Lisävinkkeja

Tee Console-ohjelma, joka toimisi seuraavasti:

Muutan virkkeesi ääkköset kansainvälisesti käypään muotoon!
Anna teksti >Äänekoskella haisee myös öisin.
Muutettu virke: Aeaenekoskella haisee myoes oeisin.

Eli muuttaa sekä pienet että isot ääkköset yleisesti toimiviksi aakkosiksi.

Å -> Aa    &    å -> aa
Ä -> Ae    &    ä -> ae 
Ö -> Oe    &    ö -> oe
# aakkoset

Tehtävä 4. Char-luokka

Lue ensin: 12.8 Char-luokka ja 6. Aliohjelmat.

a) Kirjain isoksi

Katso, mikä kutsu sinun on kirjoitettava XXX:n paikalle, jotta seuraava ohjelma toimisi:

# isoksi

b) Iso vai pieni

Tee funktio, joka palauttaa tiedon merkkijonon viimeisen merkin koosta (joko "pieni" tai "iso").

Lisäksi:

  • Jos viimeistä merkkiä ei ole eli jono on tyhjä, palautetaan aina "iso".
  • Jos viimeinen merkki on jokin muu kuin kirjain (esim. '.'), palautetaan aina "pieni".


Vinkki! Jaa ongelma aluksi jälleen selkeästi pienempiin osiin:

  1. Voinko edes ottaa viimeisen merkin? Missä tilanteessa en? Mitä silloin palautetaan?
  2. Miten saan jonon viimeisen kirjaimen?
  3. Miten tutkin, onko viimeinen kirjain iso?
  4. Miten tuon perusteella palautan tekstin "iso" tai "pieni"?

Mieti myös, mikä on merkkijonon viimeisen merkin indeksi?

# Plugin1
# vertailua

c) Ensimmäinen isoksi

Tee funktio Isoksi, joka muuttaa merkkijonon ensimmäisen kirjaimen isoksi ja palauttaa muutetun merkkijonon. Tyhjä merkkijono palautetaan takaisin tyhjänä.


Vinkki! Kannattaa hyödyntää a-kohdan vastausta hyödyksi ohjelman kirjoittamisessa.

# muutos

Tehtävä 5*. Aikaisin ja viimeisin I

a) Kolmen aakkosen aikaisin ja viimeisin

Tee ohjelma, joka kysyy kolme kirjainta ja tulostaa niistä aakkosissa aikaisimman ja viimeisimmän (eli esim. aikaisin palauttaisi sen syötetyn kirjaimen, joka tulee aakkosissa ekana vastaan). Sovitaan, että käytetään VAIN PIENIÄ KIRJAIMIA. Tee avuksi funktioaliohjelmat Aikaisin ja Viimeisin (joille kummallekin viedään kolme parametriä).

Vinkki! Kirjaimia (jotka ovat merkkejä eli tyypiltään char) voidaan vertailla samoilla operaattoreilla keskenään kuin lukuarvojakin (esim. < ja =).

# aakkosjarjestys

b) Muiden merkkien suhde kirjaimiin

b-kohdassa tekemälläsi aakkosia vertailevalla ohjelmalla ei oikeasti vertailla ainoastaan kirjaimia. Sillä voidaan vertailla kaikkia merkkejä, kuten vaikkapa '!', ' ' ja '%'. Tämä johtuu siitä, että kaikille kansainvälisille merkeille on määritetty jokin vertailtailukelpoinen kokonaislukuarvo, jota yksinkertaisten kansainvälisten merkkien tapauksessa kutsutaan ASCII-koodiksi (American Standard Code for Information Interchange).

Vertaile merkkejä '!', '[', 'a', '#', 'B', '3', 'b', '\', 'A', '?' ja selvitä niiden ASCII-koodiin perustuva järjestys käyttämällä 5a kohdassa tekemääsi ohjelmaa. Anna vastauksesi pienimmästä suurimpaan, kaikki yhteen putkeen ja yhdellä rivillä.

Vinkki! Pelkän ASCII-koodin on korvannut UTF-8 koodaus, jota käytetään nykyään kansainvälisesti ympäri maailmaa. Video ASCII-koodista ja UTF-8:sta.

# merkkijarjestys

Tehtävä 6. Merkkijonon pätkiminen I

Tee tarvittavat aliohjelmat, jotta seuraava pääohjelma toimisi.

public static void Main()
{
    Console.Write("Anna sähköpostiosoitteesi: ");
    string kokonimi = Console.ReadLine();
    string kayttajanimi = AnnaKayttajanimi(kokonimi);
    string verkkotunnus = AnnaVerkkotunnus(kokonimi);
    Console.WriteLine($"Käyttäjätunnuksesi on siis \"{kayttajanimi}\"" +
                      $"ja verkkotunnuksesi \"{verkkotunnus}\".");
}


Huom! Käyttäjänimellä tarkoitetaan sähköpostiosoitteen '@'-merkkiä edeltävää osaa (juolenak@jyu.fi), kun taas verkkotunnuksella tarkoitetaan sen jälkeistä osaa (juolenak@jyu.fi).

Vinkki! Ohjelma voidaan toteuttaa valmiiden ohjelmien IndexOf ja Substring TAI Split avulla. Split vaatii kuitenkin taulukon, jota ei vielä ole käsitelty. Muista aina painaa Näytä koko koodi nähdäksesi pääohjelman.

# Plugin3
# muokkaus
# liuku

L1. Liukuhihna

Dokumentissa Liukuhihna on hauska robotti. Vastaa siellä oleviin kysymyksiin. Maksimissaan voit tuolta kerätä 2.5 p. Kirjoita alla olevaan tehtävään miltä liukuhihnatehtävä tuntui ja laita itse tehtävän pisteisiin liukuhihnan tuloksesi. Saat tehdä tähän demoon sen tehtävästä osan jota et jo tehnyt demo2:ssa tai demo3:ssa, kunhan kumpaankin merkkaamasi (demo2 + demo3 + demo4) summa on sama kuin Liukuhihnatehtävän pistemäärä.

Huom!. Pisterajatarkistus ei vättämättä toimi, joten et saa huijata laittamalla liikaa pisteitä!

# tehtavaL1

B1. Lumiukko V

Lue ensin: Optional arguments.

Ota demojen 3 mallivastaus tehtävään Lumiukko III, jossa kuormitettiin aliohjelmaa PiirraYmpyra tekemällä sille kaksi toteutusta, jotta ohjelmaa voitiin kutstua eri tavoilla.

Vaihda ohjelman kuormitus nyt C#:n valinnaisiin parametreihin, joilla saadaan sama lopputulos aikaiseksi. Ainoaksi eroksi (ja eduksi) jää se, että tuo kuormituksen aikaansaama joustavuus saadaan nyt aiakiseksi vain yhden aliohjelman avulla kahden sijaan.

Mallikuva
Mallikuva
# rajahdys

G1. Pyrstötähdet II

Ota demojen 2 mallivastaus tehtävään Pyrstötähdet I ja aja se ensin sellaisenaan. Lisää ohjelmaan sitten pallo, jota voit itse ohjailla, ja jonka törmäys tähtiin aiheuttaa tähtien tuhoutumisen räjähdysefektissä. Poista vielä painovoiman luontilauseke, jotta tähdet pysyvät paikoillaan (tai vaihtoehtoisesti voit tehdä tähdistä staattisia objekteja).

Esimerkkikuva pelistä
Esimerkkikuva pelistä


Vinkki! Ohjailtava pallo tehtiin demojen 3 tehtävässä B1. Pallon Pukkailu. Törmäysten käsittelyyn tarvitaan Jypelin valmista ohjelmaa AddCollisionHandler.

# pyrstotahdet

Huom! Kun olet tallentanut vastauksesi, arvioi oma suoriutumisesi tehtävästä asteikolla 0-2p. valitsemalla automaatin antaman pistemäärän vierestä Set custom points.

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.