avoin/avoin23
Huom! TÄMÄ ON AVOIMEN YLIOPISTON SIVU.
Et voi suorittaa kurssia, ellet ole ilmoittautunut täällä.
```
Demotilanne:
- Pisteet päivittyvät pienellä viiveellä.
- Värit: Punainen - puutteellinen. Vihreä - hyväksytty (vähintään 6p, joista 2p tähtiä)
Please
Osa-alue |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
12 |
12 |
Luennot | 1&2 | 3&4 | 5&6 | 7&8 | 9&10 | 11&12 | 13&14 | 15&16 | 17&18 | 19&20 | 21&22 | 23&24 | |||
Deadlinet |
HT1 (suu- nnitelma) |
Väli- kysely |
Debug- näyte |
HT2 (50%) |
Tentti- ilmo |
HT3 (100%) |
Tentti | ||||||||
Ohjaus | 1 | 2 | 3 | 4 | 5 | ||||||||||
Demo | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Summa | d% | |
Pisteet |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
|
Korjattu |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
||||
Tunnit |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please
Ohjelmointi 1, avoin 2023 / 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.
Muista, että kunkin demokerran minimipistemäärä 2 on tehtävä käyttäen tähdellä (*
) merkittyjä tehtäviä. Esim. pelkkä Ville ja Tauno ei riitä minimimäärään. Jos tehtävät eivät lähde luonnistumaan, kannattaa käydä pääteohjauksissa hakemassa apua.
Muista että B
-tehtävät ovat Bonus tehtäviä, joiden tekemiseksi joutuu yleensä etsimään materiaalia kurssin sen hetken materiaalin ulkopuolelta (esim. lukemalla monistetta eteenpäin). Jos niitä ei osaa tehdä, se ei ole vielä vakavaa.
G
-tehtävät ovat Guru-tehtäviä, jossa pitää jo osata selkeästi enemmän kuin kurssin taso tällä hetkellä.
Tauno 1a
Tauno 1b
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ä.
Muista Villen käyttöohje.
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.
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.
Seuraavaksi lue huolella monisteen luku 9. Aliohjelman paluuarvo.
Suorita kohdan 9.2 Funktion kutsuminen lopussa oleva animaatio huolella miettien, mitä tapahtuu ja miten asiat samaistuvat luentojen "paperilappujen leikkiesimerkkiin".
Aja kohdan 9.3 Funktion kirjoittaminen toisella tavalla toisen esimerkin testit. Vaihda
2.0
tilalle2
. Aja testit ja katso, mitä tapahtuu. Vaihda jakolaskun tilalle kertominen luvulla0.5
ja aja testit uudelleen.
Katso alla olevat molemmat animaatiot ajatuksen kanssa.
Opiskelijat aliohjelmina tehtävää ei voinut toteuttaa, linkit eivät toimineet tehtävän tekoa varten.
VL: Kokeiles nyt
—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
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ä.
Tehtävä 1. Pong tai työaikatutoriaali
Valitse ja tee jompikumpi seuraavista:
(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)
(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)
Tehtävä 2*. Merkkijonojen vertailu
Lue ensin: 12. Merkkijonot ja 13. Ehtolauseet.
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.
Tätä tehtävää tehdessä älä yhtään mystifioi asioita. Kyseessä on samanlainen tehtävä kuin edellisviikonkin demoissa! Ainoana erona on eri tyyppiset muuttujat ja hieman erilainen toteutus. Mitään sen ihmeellisempää tässä ei tosiaan ole.
Muista jakaa funktion rakentaminen osiin:
- Funktion esittelyrivi ja runko
- Dokumentaatio
- Tynkä
- Testaus
- Toteutus
Voit edelleen jakaa toteutuksen vaiheisiin:
- Saan kaksi merkkijonoa (sanaa), joista lyhempi pitää palauttaa!
- Mistä olen kiinnostunut? En jonojen sisällöstä vaan sana1:n XXX ja sana2:n XXX.
- Miten saan selville XXX? Mikä on XXX tyyppi?
- Vertaan jonojen XXX ja päättelen sen perusteella mitä palautetaan.
- Mitä tyyppiä palautettavan tuloksen pitää olla?
Jos näissä on vielä vaikeuksia, voit aloittaa harjoitustehtävällä.
Tuloksesta tulee vihreä "OK", mutta pisteet 0,9?
VL: Document pitää aina katsoa jos ko linkki on tuossa. Ajatuksen kanssa että ymmärtää millaista dokumentaatiota syntyy.
—Katselin dokumentinkin, mutta silti 0.9 pistettä. Vahingossa tuon myös lukitsin
VL: No annoin pisteet ;-)
—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
Lue ensin: 12. Merkkijonot ja 13. Ehtolauseet.
(vinkki: katso String-luokan dokumenttia ja etsi metodi, jolla voit vaihtaa kirjaimia. Tiedon lukemista varten katso edellisen tehtävän pääohjelmaa (tässä tehtävässä ei välttämättä tarvitsisi itse kirjoittaa yhtään aliohjelmaa, tosin tulevia demoja ajatellen apufunktiosta ei ole haittaakaan)
Muista jakaa funktion rakentaminen osiin:
- Funktion esittelyrivi ja runko
- Dokumentaatio
- Tynkä
- Testaus
- Toteutus
Voit edelleen jakaa toteutuksen vaiheisiin:
- Saan kaksi merkkijonoa (sanaa), joista lyhempi pitää palauttaa!
- Mistä olen kiinnostunut? En jonojen sisällöstä vaan sana1:n XXX ja sana2:n XXX.
- Miten saan selville XXX? Mikä on XXX tyyppi?
- Vertaan jonojen XXX ja päättelen sen perusteella mitä palautetaan.
- Mitä tyyppiä palautettavan tuloksen pitää olla?
Jos näissä on vielä vaikeuksia, voit aloittaa harjoitustehtävällä.
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
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:
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:
- Voinko edes ottaa viimeisen merkin? Missä tilanteessa en? Mitä silloin palautetaan?
- Miten saan jonon viimeisen kirjaimen?
- Miten tutkin, onko viimeinen kirjain iso?
- Miten tuon perusteella palautan tekstin
"iso"
tai"pieni"
?
Mieti myös, mikä on merkkijonon viimeisen merkin indeksi?
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.
Kirjoittelin tämän riderissä stringBuilderin avulla ja sain toimimaan. Toki nyt herjaa vielä sitä, jos input on täysin tyhjä, eli "", mutta en ala sitä nyt korjaamaan, kun testeri ei päästä stringBuilder ratkaisua läpi. No kaippa tämän osasin ratkaista, mutta en pelkällä system - kirjastolla. Pisteet jää siis saamatta.
VL: tämän voi ihan samalla vaivalla kirjoittaa pelkällä string-luokalla.
—Tehtävä 5*. Aikaisin ja viimeisin I
Lue ensin: 13. Ehtolauseet, 27. ASCII-koodi ja Lukuja.cs.
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 =
).
Saisinko tähän vähän apua, kuinka lähteä tekemään tehtävää?
Vastauksesi on muuten oikein mutta "Place"-juttu on turha. -AJL
Saan tämän menemään vain läpi ajosta, mutta testit eivät mene läpi koska aliohjelmat ottaa vain aina vastaukseksi kirjaimet siinä järjestyksessä kun ne on syötetty, eikä aakkosjärjestyksessä.
Nyt saattaa mennä sekäisin sulla merkit ja muuttujat. Jos sulla on 'a', niin kyseessä on merkki (eli nyt kirjain); jos taas a, niin kyseessä on muuttuja. Tuota sun iffittely logiikkaa kun korjaat ja otat tuon seikan huomioon, niin saanet ratkaistua ongelman. Tällä hetkellä kaikki sun aikaisin on aina eka parametrimuuttuja ja viimeisin vika parametrimuuttuja, se on pielessä. -JE
Jep, ja minä sanoin alun perin sikäli väärin, että aiemmassa vastauksessasi oli sekä Place-juttu virheellinen, mutta myös ehtolausekkeissa (pienempi-kuin ja suurempi-kuin -merkkien suunnissa) virheet. Tämä meni multa aiemmin ohi. -AJL
Löysin nyt vanhasta demosta apua tähän, se selvensi että täytyy miettiä ihan eri kautta kun ensin ajattelin. Kiitos avusta.
—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.
Tehtävä 6. Merkkijonon pätkiminen I
Lue ensin: 12. Merkkijonot, Jonoja.cs, Merkkijonoja.cs ja Aliohjelminen kutsuminen.
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.
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ä!
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.
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).
Vinkki! Ohjailtava pallo tehtiin demojen 3 tehtävässä B1. Pallon Pukkailu. Törmäysten käsittelyyn tarvitaan Jypelin valmista ohjelmaa AddCollisionHandler
.
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.