Demot » Demo 4, 10.2.2014 Oppimistavoitteet

2/4/2014
k2014/demot/demo4 – Ohjelmointi 1
Last modified on 2014-02-03 11:01:14
Demot » Demo 4, 10.2.2014
Palauta demot su klo 23:59 mennessä kurssin NettiDemoWWW:llä.
Huomio ohjauksissa kävijät: Ota ohjauksiin aina kynä ja paperia! Muistathan, että ohjaustehtävät ovat myös
omalla sivullaan.
Oppimistavoitteet
Tämän demokerran päätteeksi
ymmärrät, miten ehtolausetta voidaan käyttää
osaat lukea käyttäjän syötettä (näppäimistöltä) ja käyttää merkkijonomuuttujia (String)
osaat käyttää ohjelmassasi useita aliohjelmia ja funktioita
osaat tehdä jo pienen pelin (Pong)
Jypeli-tehtävät
Tehtävä 1
Tee Pong-tutoriaalin vaiheet vaiheet 1-7. (Voit skipata vaiheet 1-3 jos teit ne jo ohjauksissa.) Kirjoita 100
sanan mittainen oppimispäiväkirja, jossa kerrot, mitä opit, mikä oli helppoa ja mikä vaikeaa, sekä mikä oli
uutta. Kirjoita myös, oliko tästä tehtävästä sinulle hyötyä. Voit antaa myös palautetta tutoriaalin sisällöstä, ja
miten sitä voisi kehittää. Palauta oppimispäiväkirja nimellä teht1.txt, Pong-tutoriaalin kooditiedostoja EI
tarvitse palauttaa.
Älä jää liikaa suremaan hieman omituista fysiikan käytöstä joissakin pompuissa :-).
Console Application -tehtävät
Seuraavat tehtävät ovat tekstipohjaisia. On suositeltavaa asentaa Visual Studioon kurssia varten tehty
ConsoleMain -projektimalli, jolla luokan nimi tulee automaattisesti samaksi kuin projektin nimi. Lisäksi ko.
projektimalli poistaa koodin alusta Namespacen joka on tällä kurssilla turha. Tämä pikkuisen helpottaa
nimeämistä ja dokumentaatioiden kirjoittamista.
Tehtävä 2
Lue seuraavat dokumentaatiot ja aliohjelmien esittelyt. Jokaisessa niissä on jotain outoa. Parannettavaa voi
olla (mutta ei välttämättä ole) paluuarvon tyypissä, funktion nimessä, parametrien määrässä ja niiden nimissä
tai tyypeissä, tai itse dokumentaatiokommenteissa. Myös kokonaisia sanoja voi puuttua esittelyriviltä tai
dokumentaatiosta. Palauta vastauksena teht2.txt, jossa kerrot, mitä korjattavaa löysit. Huomaa, että
aliohjelmien toteutusta ei tässä arvioida eikä edes näytetä. Tee tulkintasi dokumentaation ja esittelyrivin
perusteella.
Kun löydät jokaisesta kohdasta vähintään kaksi korjattavaa asiaa, voit laittaa itsellesi täyden (yhden) pisteen.
a) Itseisarvo
/// <summary> Funktio palauttaa annetun luvun itseisarvon. </summary>
/// <param name="luku"> Luku, josta itseisarvo halutaan ottaa. </param>
/// <returns> Luvun itseisarvo. </returns>
public static int palautaitseisarvo(double luku)
{
...
}
https://trac.cc.jyu.fi/projects/ohj1/wiki/k2014/demot/demo4
1/5
2/4/2014
k2014/demot/demo4 – Ohjelmointi 1
b) Lyhempi sana
/// <summary> Funktio palauttaa kahdesta sanasta lyhyemmän.
/// Sanojen ollessa yhtä pitkiä palautetaan ensimmäinen. </summary>
/// <param name="sana1"> Ensimmäinen sana. </param>
/// <param name="sana2"> Toinen sana. </param>
/// <returns> Lyhyempi sana. </returns>
void String PalautaLyhyempiKahdestaSanasta(char sana1 char sana2)
{
...
}
c) Palindromi
/// <summary> Funktio kertoo, onko sana palindromi. </summary>
/// <param name="sana"> Tutkittava sana. </param>
/// <returns> Onko palindromi. </returns>
public static String Palindromi(bool)
{
...
}
Tehtävä 3
M: 12. Merkkijonot, 13. Ehtolauseet. Tee alla olevaan (Console-projektin) pääohjelmaan tarvittava funktio
public static void Main(string[] args)
{
Console.Write("Anna 1. sana >");
String sana1 = Console.ReadLine();
Console.Write("Anna 2. sana >");
String sana2 = Console.ReadLine();
String pidempi = PidempiJono(sana1, sana2);
Console.WriteLine("\"" + pidempi + "\" on pidempi sana");
Console.ReadKey();
}
Muista että ensin teet funktion esittelyrivin (sen missä on public static jne...). Sitten kirjoita funktion
dokumentaatio (kolme kauttaviivaa /// ja täydennä summary ja parametrien merkitys). Aluksi itse funktion
sisältö (eli runko-osa) voi olla pelkästään
return "testi";
Sitten kokeilet että ohjelma kääntyy ja kyselee ja tulostaa tuollaisenaan. Kun se toimii, voit alkaa muuttamaan
funktion sisältöä niin, että funktio tekee sen mitä pitääkin.
Jos teet kunnon TDD:tä (eng. Test Driven Development, ks. kohta TDD1), niin ennen funktion toteutusta
kirjoitat testit ja kokeilet, että testit epäonnistuvat. Sitten vasta toteutat funktion ja ajat testit, korjaat
funktiota jos testit eivät toimi jne.
Tehtävä 4
M: 12. Merkkijonot. Tee konsoliohjelma (Console Application), joka toimisi seuraavasti (vinkki: katso Stringluokan dokumentaatiota ja etsi metodi jolla voit vaihtaa kirjaimen toiseksi. (Vinkki: String.Replace(char,
char). Tiedon lukemiseen käyttäjältä käytä Console.ReadLine()-metodia, kuten edellisessä tehtävässä. Tässä
tehtävässä ei välttämättä tarvitse itse kirjoittaa yhtään aliohjelmaa tai funktiota, tosin jonkin apufunktion
tekemisestä saattaa olla hyötyä.
Toistan mitä sanot, mutta en osaa sanoa l:ää!
https://trac.cc.jyu.fi/projects/ohj1/wiki/k2014/demot/demo4
2/5
2/4/2014
k2014/demot/demo4 – Ohjelmointi 1
Anna teksti > ralliauto ajaa superkovaa.
Sanoit siis : lalliauto ajaa supelkovaa.
Tehtävä 5
M: 13. Ehtolauseet. Tee ohjelma joka kysyy kolme kokonaislukua ja tulostaa niistä suurimman ja pienimmän.
Tee avuksi funktioaliohjelmat Suurin(a, b, c)ja Pienin(a, b, c). Millä arvoilla näitä funktioita olisi hyvä
testata? Oletetaan, että käyttäjä syöttää kokonaisluvun, eli poikkeuksia (jokin muu kuin kokonaisluku annettu)
ei tarvitse tässä ottaa huomioon. Numeron saat luettua päätteeltä seuraavasti:
Console.Write("Anna 1. kokonaisluku > ");
int a = int.Parse(Console.ReadLine());
Vinkki tehtävään 5. (Älä lue jos haluat ensin itse miettiä)
Tehtävä 6
M: 12. Merkkijonot. Tee tarvittavat aliohjelmat, jotta seuraava pääohjelma toimisi (vinkki: String-luokan
metodit IndexOf, Substring tai Split. Hae MSDN-dokumentaatio ja tutki miten merkkijono saadaan
paloiteltua. Splitvaatii taulukon jota ei vielä ole käsitelty).
public static void Main(string[] args)
{
Console.Write("Anna nimesi muodossa sukunimi etunimi: ");
String kokonimi = Console.ReadLine();
String etunimi = PoistaEkaSana(kokonimi);
String sukunimi = AnnaEkaSana(kokonimi);
Console.WriteLine("Etunimesi on siis " + etunimi + "
ja sukunimesi " + sukunimi);
Console.ReadKey();
}
TDD 1
Jos tarkistat vähintään kahden funktion toiminnan automaattisella testillä (ComTest), saat merkitä yhden
lisäpisteen. Käyttääksesi ComTestiä asenna se tietokoneellesi edellä löytyvän linkin ohjeiden mukaan.
Asennusohje löytyy myös videona: http://www.youtube.com/watch?v=y5O3VsFRupw. Voit varmistaa että
asennus on mennyt oikein läpi näin:
1.
2.
3.
4.
Tee uusi Console Application -projekti
Copy-pasteta tämä testikoodi projektiisi
Aja ComTest (Tools -> ComTest -> ComTest solution)
Jos avautuu alas Test Results ja vihreä pallo missä lukee Passed, niin kaikki meni oikein. Muussa
tapauksessa tutki asennusohjeita uudestaan ja kysy tarvittaessa apua ohjaajilta.
https://trac.cc.jyu.fi/projects/ohj1/wiki/k2014/demot/demo4
3/5
2/4/2014
k2014/demot/demo4 – Ohjelmointi 1
Palauta DemoWWW:ssä tekstitiedosto tdd.txt(jonka siis arvostelet yhden pisteen arvoiseksi), missä kerrot
minkä tehtävän ja minkä funktion/funktioiden toiminnan testasit. Tehtävän "numeroksi" anna TDD1. Voit
antaa samassa tiedostossa palautetta ja kehitysehdotuksia Comtestin käytöstä. Huom! Ohjelmia, joissa on
pelkkä pääohjelma on vielä tämän kurssin tiedoilla aika haastava testata, samoin esim. pelijuttuja. Siksi
testaamista tehdään näissä demoissa vain funktioille, eli aliohjelmille, jotka palauttavat jotakin. Tässä
demossa sellaisia on tehtävissä 3, 5 ja 6.
Ville 1
Tee Ville-tehtävät 3.3, 3.5, 3.6. 4.1-4.4. Muista: Villen käyttöohje ja Ville-tehtävien palauttamisohjeet.
B1-2
Ota Demo 2:n mallivastauksista SuorakulmiotFysiikalla.cs. Aja se ensin sellaisenaan. Muuta sitten se niin, että
luodaan pelikentälle satunnaisiin paikkoihin 30 palloa (mielellään satunnaisin värein), joilla on satunnainen
säde 5 ja 30 välillä. Kokeile että toimii. Lisää vielä yksi 40-säteinen valkoinen pallo jota voi ohjata
"tökkimällä" nuolinäppäimillä (katso mallia edellisen demon Lumiukon tökkimisestä). Ohjainten lisäämiseen
voit katsoa vinkkiä Pong-tutoriaaleista.
B3
Voit tehdä a- ja b-kohdat samaan cs-tiedostoon.
a) Katso char-dokumentaatiota. Mitä sinun on kirjoitettava Xxx:n paikalle jotta seuraava ohjelma toimisi:
public static void Main(string[] args)
https://trac.cc.jyu.fi/projects/ohj1/wiki/k2014/demot/demo4
4/5
2/4/2014
k2014/demot/demo4 – Ohjelmointi 1
{
char pienena = 'a';
char isona = Char.Xxx(pienena);
Console.WriteLine(pienena + " => " + isona); // a => A
pienena = 't';
isona = Char.Xxx(pienena);
Console.WriteLine(pienena + " => " + isona); // t => T
}
b) Kysy käyttäjältä merkki, ja tulosta tieto, onko se iso kirjain (uppercase) vai ei (lower case). Esimerkki
ohjelman käytöstä:
Anna merkki > B [enter]
Annoit ison kirjaimen.
Anna merkki > p [enter]
Annoit pienen kirjaimen.
G1
Lisää edelliseen pallopeliin ominaisuus, että jos ohjattavalla pallolla osuu toiseen palloon kentän puolivälin
yläpuolella, niin toinen pallo räjähtää ja poistuu pelistä (vinkki: Jypelin ohjeet. Pelin tarkoituksen on räjäyttää
kaikki pallot.
https://trac.cc.jyu.fi/projects/ohj1/wiki/k2014/demot/demo4
5/5