wiki:s2011/demot/demo4
Last modified 6 years ago Last modified on 2011-11-24 18:10:04

Demot » Demo 4, 3.10.2011

Videot

Muista että voit saada demopisteitä myös indeksoimalla luento/demovideoita, ks: https://trac.cc.jyu.fi/projects/ohj1/wiki/s2011/videohakemisto. Pidä yllä montako linkkiä olet lisännyt ja kurssin loppudemoissa on sitten yksi tehtävä, jossa nämä saa merkitä.

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.

TDD 1

Jos tarkistat vähintään kahden funktion toiminnan automaattisella testillä (ComTest), saat merkitä yhden lisäpisteen. Palauta DemoWWW:ssä tehtävänä TDD1 tekstitiedosto TDD.txt (jonka siis arvostelet yhden pisteen arvoiseksi), missä kerrot minkä tehtävän ja minkä funktion/funktioiden toiminnan testasit. 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. peli-juttuja. 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.

Tehtävä 1

Tee Pong-tutoriaalista vaiheet 4-7. (Tee myös 1-3 jos et niitä ohjauksissa tehnyt.) Kirjoita parin kappaleen mittainen oppimispäiväkirja, eli mitä opit, mikä oli uutta? Mikä oli helppoa ja mikä vaikeaa? Oliko tästä tehtävästä sinulle hyötyä? Voit antaa myös palautetta tutoriaalin sisällöstä. 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 :-)

Tehtävä 2

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 (se / ja täydennä summary ja parametrien merkitys). Aluksi itse funktion sisältö voi olla vaikka pelkkä:

return "testi";

Sitten kokeilet että ohjelma kääntyy ja kyselee ja tulostaa tuollaisenaan. Kun se toimii, voit ruveta muuttamaan funktion sisältöä niin, että funktio tekee sen mitä pitääkin.

Paitsi jos teet kunnon TDD:tä (Test Driven Development), 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ä 3

M: 12. Merkkijonot. Tee Console-ohjelma, joka toimisi seuraavasti (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ä tarvitse itse kirjoittaa yhtään aliohjelmaa, tosin tulevia demoja ajatellen apufunktiosta ei ole haittaakaan).

Toistan mitä sanot, mutta en osaa sanoa l:ää!
Anna teksti  >ralliauto ajaa superkovaa.
Sanoit siis : lalliauto ajaa supelkovaa.

Tehtävä 4

Kirjaimet: katso char-dokumentaatiota. Katso mikä kutsu sinun on kirjoitettava xxx:n paikalle jotta seuraava ohjelma toimisi:

public static void Main(string[] args) 
{
    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
}

Jatkokysymys: Kysytään käyttäjältä merkki ja tulostetaan onko se iso kirjain (uppercase) vai ei (lower case).

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 aliohjelmia 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ää on helpointa lähteä laajentamaan ajatuksesta

  int suurin = a;
  if ( b > a ) suurin = b;
  return suurin; 

Tehtävä 6

M: 12. Merkkijonot. Tee tarvittavat aliohjelmat, jotta seuraava pääohjelma toimisi (vinkki: IndexOf, Substring tai Split, Split vaatii 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();
}

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.

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.