wiki:s2014/demot/demo4
Last modified 3 years ago Last modified on 2014-10-03 15:45:58

Demot » Demo 4, 6.10.2014

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.

Kunkin kerran minimipistemäärä 2 on tehtävä käyttäen "Pakollinen" sanalla merkittyjä tehtäviä. Esim. pelkkä Ville ja Tauno ei riitä minimi määrään. Jos pakolliset tehtävät eivät lähde luonistumaan, kannattaa käydä pääteohjauksissa tai Pahasti Pihalla ryhmissä saamassa apua.

Demojen palautus NettiDemoWWW:llä ​https://www.mit.jyu.fi/demowww/ohj1/

Vinkkejä

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

Jos sinulla ei vielä ole, niin konsolisovelluksen tekeminen on helpompaa ConsoleMain-mallilla. Ota tarvittaessa "parempi" template Vinkki-sivun ohjeilla.

VIDEO 1

Muista että voit saada demopisteitä myös indeksoimalla luento/demovideoita. 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ä.

Tauno 1

Katso ensin video Demo 3:n Tauno-tehtävän käsittelystä. Tee Taunolla- seuraavat tehtävät:

  1. Tee ensin muuttuja lisattava, jonka arvo on 5. Sitten lisää tämän muuttujan arvo jokaiseen taulukon alkioon.
    Esim:
      taulukko 5 4 6 2 9 1 muuttuu taulukoksi 10 9 11 7 14 6
    
  2. Laske yhteen peräkkäisissä paikoissa olevat taulukon alkiot ja laita tulos aina parilliseen (0,2,4) paikaan. Vastaavaan parittomaan paikkaan laitetaan arvo 0. Eli taulukon summa pysyy samana, mutta parittomissa (1,3,5) paikoissa olevat alkiot nollautuvat.
    Esim:
      taulukko 5 4 6 2 9 1 muuttuu taulukoksi 9 0 8 0 10 0
    

Koita vastauksissa välttää turhia apumuuttujia ja mieti kuinka hyvin ratkaisusi yleistyy jos taulukon kokoa kasvatetaan.

Palauta ratkaisusi testattuna c# ohjelmana:

  1. Tee uusi konsoliprojekti projekti nimelle Tauno4.
  2. Korvaa tiedoston Tauno4.cs sisältö pohjatiedostolla Tauno4.cs.
  3. Aja ohjelma tuollaisena (ja jos teet ComTestejä, aja nekin).
  4. Korvaa TODO-kohdissa olevat tiedot Taunoon tekemilläsi. TODO-löytyy VisualStudiossa helposti kun ottaa View/Task List.
  5. Aja ja kokeile saatko oikeat tulokset.
  6. Palauta Tauno4.cs ja kirjoita sen Summary-kohtaan mitä opit.

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. 3.6 tehtävässä substring toimii javan mukaan: parametreinä ovat indeksi josta aloitetaan ja indeksi, jota ei oteta enään mukaan. Esimerkiksi s = "helpotus"; s.Substring(1,5) ==> "elpo";

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 (Pakollinen)

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

public static void Main() 
{
    Console.Write("Anna 1. sana >");
    string sana1 = Console.ReadLine();
    Console.Write("Anna 2. sana >");
    string sana2 = Console.ReadLine();
    string pidempi = PidempiMerkkijono(sana1, sana2);
    Console.WriteLine("\"" + pidempi + "\" on pidempi sana");
}

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.PidempiMerkkijono("Eka sana", "toka") === "Eka sana";
  ///  PidempiSana.PidempiMerkkijono("Eka", "Toka") === "Toka";
  ///  PidempiSana.PidempiMerkkijono("Eka", "Tok") === "Eka";
  ///  PidempiSana.PidempiMerkkijono("", "Toka") === "Toka";
  ///  PidempiSana.PidempiMerkkijono("", "") === "";

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() 
{
    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
}

Jatkotehtävä: Jatka ohjelmaa siten, että siinä 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 (Pakollinen)

M: 13. Ehtolauseet. Tee ohjelma joka kysyy kolme kokonaislukua ja tulostaa niistä suurimman ja pienimmän. Tee avuksi funktioaliohjelmat Suurin ja Pienin (joille kummallekin viedään kolme parametriä). 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() 
{
    Console.Write("Anna nimesi muodossa sukunimi etunimi: ");
    string kokonimi = Console.ReadLine();
    string sukunimi = AnnaEkaSana(kokonimi);
    string etunimi = PoistaEkaSana(kokonimi);
    Console.WriteLine("Etunimesi on siis " + etunimi + 
                      " ja sukunimesi " + sukunimi);
}

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.

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.