wiki:s2014/demot/demo11
Last modified 3 years ago Last modified on 2014-11-24 15:19:25

Demot » Demo 11, 24.11.2014

Tämä demo on pääasiassa mallitentti.

Muista että oikea tentti on pe 5.12 klo 12:00-16:00. Ilmoittaudu tenttiin Korpissa. Jos haluat aloittaa muuhun aikaan, merkitse se tieto Korppiin. Jos et voi tulla tuohon tenttiin mistään syystä, ota yhteyttä (vesal@…).

K1 Vastaa kurssin palautekyselyyn

Linkki ja Dumppi kerää palautetta kursseista, jotta niitä voitaisiin kehittää entistä paremmiksi. Palautekyselyyn voit vastata Korpissa.

Kiitos palautteestasi! Täytä kysely ja tee tiedosto vaikeaa.txt, johon kerrot, mikä oli vaikeaa tällä demokerralla. Palauta yhtenä DemoWWW:n "tehtävänä", nimeä K1 ja merkitse 1p.

K2 Vastaa kurssin jälkikyselyyn

Kurssin alussa vastasit alkukyselyyn siihen, mitä ohjelminti on sinun mielestäsi. Nyt on aika vastata samaan kyselyyn uudelleen, jotta nähdään ovatko mielipiteesi muuttuneet: Ohjelmointikysely syksyn kurssin jälkeen.

Täytä kysely ja tee tiedosto vaikeaa.txt, johon kerrot, mikä oli vaikeaa tällä demokerralla. Palauta yhtenä DemoWWW:n "tehtävänä", nimenä K2 ja merkitse 1p. Jos vastasit myös palautekyselyyn, merkitse sekä K1 että K2 kohtiin 1p (palauta molempiin sama vaikeaa.txt). Huom! Pakollista minimiä ei saa suorittaa vain kyselyihin vastaamalla vaan pitää tehdä muutakin (ja kannattaa, koska kyseessä on kokeeseen harjoittelu).

Viimeistään nyt ohjelmien on oltava mallikelpoisia

Eli nyt ei saa palauttaa ohjelmia, joissa on seuraavia vikoja:

  • kommentit puuttuvat tai ovat vaillinaisia
  • muuttujien nimet eivät ole kuvaavia
  • aliohjelmien nimet eivät ole kuvaavia
  • luokkien nimet eivät ole kuvaavia jne...
  • ohjelmaa ei ole koskaan edes ajettu
  • aliohjelma tulostaa vaikka sen ei ole käsketty tulostaa

Mallitentti

Tentissä ei tarvitse ihan tarkkaan ulkoa muistaa mitä .NET-frameworkin aliohjelmia on käytettävissä. Jos tarvitset jotakin valmista luokkaa, aliohjelmaa tai metodia, kuvaile mitä kuvittelet sen tekevän ja millaisilla parametreillä. Ohjelmatehtävät pitää dokumentoida, kuten on opetettu. Oikeassa tentissä keräile tehtäviä niin, että niiden maksimipistemäärä on 24 pistettä. (Demoja varten laske kuitenkin tehtävien pisteet kuten ennenkuin, eli 1p/tehtävä.) Tentissä voi olla rajoitettu, kuinka monta tehtävää enintään saa tehdä. Tässä voisi vaatimuksena olla että ainakin toinen tehtävistä 1-2 tai 5 pitää olla valittujen joukossa.

Korpissa on kentät "Mallitentin tehtävien tekemiseen kulunut aika". Täytä siihen tehtävittäin kauanko sinulta meni. Tämä on sinulle avuksi oikean tentin ajankäytön suunnittelua varten. Oikeassa tentissä aikaa on 4 tuntia.

Muista, että tentti tehdään kynällä ja paperilla. Yksi A4-kokoinen molemmin puolin täytetty lunttilappu saa olla mukana. Nettiä tai tietokoneita ei voi käyttää. Tämän mallitentin tarkoitus on siis simuloida tenttitilannetta, joten älä aluksi käytä näissä tehtävissä tietokonetta muuhun, kuin vastauksen kirjoittamiseen aluksi. Tehtävissä kirjoittamista on kuitenkin sen verran vähän, että palautusta varten tehtävien kirjoittaminen lopuksi koneelle on nopeaa. Kun olet tehtävät tehnyt, ota Visual Studio ja muokkaa ohjelmavastaukset toimiviksi ohjelmiksi ja palauta Tehtäviin 1-2,3,5 ne .cs-tiedostot. HUOM: Mikäli palautetuissa ohjelmissa ei ole kommentteja ja kunnollisia muuttujien nimiä, pudotetaan ko tehtävän pistemäärä 0:ksi.

Tehtävien perässä olevat pisteet (6p jne.) tarkoittavat pisteitä "leikki"tentissä. NettiDemoWWW:hen lasketaan kuten ennenkin 1p/tehtävä.

Palautus NettiDemoWWW:llä https://www.mit.jyu.fi/demowww/ohj1/

K, PP, Ville ja Bonustehtävät eivät ole mukana "mallitentin ajanlaskussa".

Tehtävä 1-2. Taulukot

Tee ohjelma: Pääohjelma kutsuu aliohjelmaa (funktiota), joka etsii ja palauttaa parametrina viedyn kokonaislukutaulukon toiseksi suurimman alkion. Aliohjelma EI saa järjestää taulukkoa. Mitä huomionarvoisia erikoistapauksia voi olla? Määrittele miten ne käsitellään.

  • Esimerkiksi taulukko: 3 1 -7 9 15 8
  • Aliohjelma palauttaa arvon 9 (ei tulosta)
  • ja tulostaa:
    Taulukon 3 1 -7 9 15 8 toiseksi suurin alkio on 9
    

Taulukon tulostaminen hoidetaan omalla aliohjelmalla joka pitää myös tehdä (laita nimeksi vaikka TulostaTaulukko, silloin aliohjelma saa tulostaa). Ohjelmassa saa käyttää vain pääohjelman paikallisia muuttujia, aliohjelman parametrimuuttujia ja aliohjelmien paikallisia muuttujia. (12 p)

Tehtävä 3. Nimet

Ohjelma lukee riveittäin käyttäjän antamaa nimitietoa muodossa

Ekaetunimi Tokaetunimi Kolmasetunimi Sukunimi

Sukunimi on aina mukana, etunimiä annetaan vähintään yksi, enintään kolme. Syöttö lopetetaan antamalla pelkkä Enter, jolloin ohjelma tulostaa nimet aakkosjärjestyksessä, muodossa

Sukunimi E.T.K.

Esimerkki:

Anna nimiä muodossa Etunimet Sukunimi, 
yksi nimi rivilleen, pelkkä Enter lopettaa. 

> Kaarle Kustaa Korkki
> Seppo Pentti Ville Kinnunen
> Åke Aarnio
> Ulla-Maija Wikholm-Seppänen
> [Enter]
 
Annoit nimet:
Aarnio Å.
Kinnunen S.P.V.
Korkki K.K.
Wikholm-Seppänen U.

Käyttäjältä voit lukea merkkijonon

 string jono;
 jono = Console.ReadLine();

(6 p)

Tehtävä 4. Aliohjelmakutsu

Kerro omin sanoin ja esimerkein mitä tapahtuu aliohjelmakutsun yhteydessä. Käsittele funktiomaista aliohjelmaa, jossa on ainakin muutama parametri. Milloin mikäkin muuttuja syntyy ja milloin häviää. Mikä ero on aliohjelmakutsun kannalta perusmuuttujilla (bool, char, int, double) ja oliomuuttujilla. (6 p)

Tehtävä 5. Poista

Kirjoita aliohjelma Poista(jono, kirjain), jolle seuraavat aliohjelman testitapaukset toimisivat. Tyypit joudut miettimään itse. Samoin miten <- käytännössä toteutetaan. Kirjoita aliohjelmalle myös pieni pääohjelma, jossa aliohjelman toimintaa testataan. (6 p.)

TYYPPI jono  <-  "kissa istuu puussa"; // alustetaan jono
Poista(jono, ' ') === 2; jono.ToString() === "kissaistuupuussa";
Poista(jono, 'u') === 4; jono.ToString() === "kissaistpssa";
Poista(jono, 'k') === 1; jono.ToString() === "issaistpssa";
Poista(jono, 'a') === 2; jono.ToString() === "issistpss";
Poista(jono, 's') === 5; jono.ToString() === "iitp";
Poista(jono, 'x') === 0; jono.ToString() === "iitp";

Tehtävä 6. Teoriakysymyksiä

Vastaa seuraaviin muutamien rivien selostuksella ja/tai esimerkillä (kerää max. 6 p edestä osatehtäviä):

a) Miten C#-ohjelma käännetään ja ajetaan komentoriviltä? Entä jos ohjelma tarvitsee jonkin kirjaston avukseen? (2 p)

b) Laske (laskutoimitukset mukaan) seuraavien binäärilukujen arvo 10-järjestelmän lukuna. Mitä oletuksia teit? (2 p)

0100 0101      0011 1111     1000 0001

c) Oletetaan 8-bittisille negatiivisille kokonaisluvuille 2-komplementtiesitys. Mikä olisi luvun miinus viisi (-5) bittiesitys tällaisessa järjestelmässä. (1 p)

d) Binäärinen desimaaliluku 1001.1110 10-järjestelmän lukuna. (1 p)

e) Pohdi missä mielessä List on parempi kuin tavallinen taulukko. Missä mielessä huonompi? (2 p)

f) Mikä ero on String ja StringBuilder -luokilla? (1 p)

g) Paljonko on 34/7 C#:ssa. Paljonko on 34%7 C#:ssa. (1 p)

h) Mitä tarkoittaa että olio "muuttuu roskaksi"? (1 p)


Lisätehtävät

Seuraavat lisätehtävät (Ville, B ja PP) eivät kuulu "tenttiin".

V1

Tee Ville-tehtävät: 10.1, 10.2. Muista: ville ja Ville-tehtävien palauttamisohjeet (palauta ville.txt).

V2

Tee Ville-tehtävät: 11.1-11.2 Muista: Villen käyttöohje ja Ville-tehtävien palauttamisohjeet (paitsi palauta ville2.txt).

V3

Tee Ville-tehtävät: 11.3-11.4 Muista: Villen käyttöohje ja Ville-tehtävien palauttamisohjeet (paitsi palauta ville3.txt). Voit ottaa pohjaksi Visual Studioon tiedoston: Robots.cs ja kirjoittaa koodin siinä ja sitten kopioida sen Villeen. Samasta tiedostosta voit lukea myös robotin "käyttöohjeita". Koodi voi olla esim:

  rc.withdraw();
  for (int i=0; i<3; i++) rc.down();
  rc.grab(); 

B1-2. Salakirjoitus kuvaan

Tee ohjelma, joka kysyy käyttäjän nimen ja sitten ”salakirjoittaa” tämän valokuvaan niin, että jostakin kohti alkaen kuvaan sijoitetaan jotenkin RGB-arvojen tilalle nimestä tulevia ASCII-koodeja.

PP

PP1

  1. Tee for-silmukka joka tulostaa seuraavaa:
    0
    3
    6
    9
    12
    ...
    177
    
  2. Lataa itsellesi Taulukointia.cs ja tee siitä uusi projekti. Täydennä aliohjelma TaytaTaulukko siten, että ohjelma tulostaa seuraavaa:
    Taulukon paikassa 0 on luku 1
    Taulukon paikassa 1 on luku 3
    Taulukon paikassa 2 on luku 5
    ...
    Taulukon paikassa 21 on luku 43
    
  3. Tee aliohjelma joka vastaanottaa kaksi parametria: merkkijonon ja kokonaisluvun. Aliohjelma palauttaa merkkijonosta merkin, jonka paikka merkkijonossa on annettu kokonaisluku. Aliohjelma kutsu voisi näyttää tältä:
    PalautaKirjain("kissa istuu puussa", 8); // Palauttaa 't'
    

PP2

Tässä tehtävässä on useampi kohta, jossa täytyy ladata jokin tiedosto ja tehdä siihen muutoksia tai täydennyksiä. Jos haluat käyttää Visual Studiota tehtävän ratkaisemiseen, tee ensin uusi projekti (Console Application) ja lataa tehtävän tiedosto projektin hakemistoon. Tämän jälkeen voit lisätä tiedoston projektiisi klikkaamalla projektin nimeä Visual Studiossa hiiren oikealla näppäimellä, valitse Add->Existing Item.. ja valitse lataamasi tiedosto.

  1. Lataa itsellesi Testausta.cs ja täydennä aliohjelma LahinLuku niin, että sille kirjoitetut testit voidaan ajaa virheettä.
  2. Lataa itsellesi Aliohjelmia.cs ja täydennä pääohjelma niin, että käytät apunasi kommenteissa mainittuja aliohjelmakutsuja. Tehtävässä ei tarvitse itse luoda yhtään aliohjelmaa.
  3. Tee aliohjelma joka vastaanottaa merkkijonon ja lisää siihen merkkijonon " on hauskaa". (Käytä StringBuilder-luokkaa) Tee pääohjelmasta seuraavanlainen:
    public static void Main(string[] args)
    {
        StringBuilder muuttuvaJono = LisaaMerkkijonoon("Koodaus");
        Console.WriteLine(muuttuvaJono.ToString());
        Console.ReadKey();
    }
    
  4. Lataa itsellesi Muuttujia.cs ja täydennä pääohjelmaan muuttujatyypit oikeiksi.