wiki:s2012/demot/demo4
Last modified 5 years ago Last modified on 2012-10-07 13:16:55

Demot » Demo 4, 8.10.2012

Oppimisen kannalta näistä tärkeimmät 2 tehtävää voisivat olla tehtävät joukosta 1, 5 ja 6.

Huom! Ohjelmatehtävissä palautetaan vain .cs tiedosto.

Vinkkejä

Aliohjelmatehtävissä kertaa monisteen lisäksi Aliohjelmien kutsuminen, Aliohjelmien kirjoittaminen sekä luennon 08 esimerkkiohjelmat Merkkijonoja.cs, Lukuja.cs ja Jonoja.cs

Jotta konsolisovelluksen tekeminen olisi helpompaa, ota "parempi" template ConsoleMain Vinkki-sivun ohjeilla.

VIDEO 1

Muista että voit saada demopisteitä myös indeksoimalla luento/demovideoita, ks: https://trac.cc.jyu.fi/projects/ohj1/wiki/s2012/videohakemisto. Lisää vähintään 3-linkkiä ja kerro tiedostoon video.txt mitkä linkit lisäsit. Tehtävän numeroksi VIDEO1. Jatkossa voi joka demokerralle merkitä vastaavasti yhden VIDEO-tehtävän kolmesta linkistä.

Ville 1

Tee Ville-tehtävät 3.3, 3.5, 3.6. 4.1-4.4. Villen Substring-tehtävät toimivat väärin (toimivat kuten Javassa, eli parametrit ovat alku,loppu+1, kun C#:ssa ne olisivat alku,pituus. Tulos on molemmissa sama jos alku == 0, muuten eri. Eli 3.5 tehtävästä menee väärin rivi 4.). Vastatkaa C#:in mukaan älkääkä välittäkö väärästä tuloksesta.

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. Pong

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. Merkkijonoja vertaava funktio

M: 12. Merkkijonot, 13. Ehtolauseet. Tee alla olevaan (Console-projektin) pääohjelmaan tarvittava funktio PidempiJono

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). Lisätietoa Wiki-sivulta aliohjelmien kirjoittamisesta. 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... Testit tätä funktiota varten voisivat olla esim:

  ///  PidempiSana.PidempiJono("Eka sana", "toka") === "Eka sana";
  ///  PidempiSana.PidempiJono("Eka", "Toka") === "Toka";
  ///  PidempiSana.PidempiJono("Eka", "Tok") === "Eka";
  ///  PidempiSana.PidempiJono("", "Toka") === "Toka";
  ///  PidempiSana.PidempiJono("", "") === "";

Tehtävä 3. Lässytystä

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. Kirjain isoksi

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 (helpointa ja varminta niin, että luetaan vastaus merkkijonoon ja otetaan siitä ensimmäinen merkki) ja tulostetaan onko se iso kirjain (uppercase) vai ei (lower case).

Tehtävä 5. Kolmen luvun suurin ja pienin

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. Merkkijonon pätkiminen

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. Pallojen pukkaileminen

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.

Jos Screen.Size ei toimi, päivitä Jypeli tai vaihda sama asia tehtäväksi leveyden ja korkeuden avulla.

G1. Räjähdys

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.