Sinun UserID: 0
```
Ilmoittaudu missä ryhmässä (zoom) katsot demojen vastaukset (huom joka viikolla oma ilmoittautuminen)
Please
to interact with this component. Please
to interact with this component. Please
to interact with this component. Please
to interact with this component. Please
to interact with this component.
Alla demotilanteesi.
- Pisteet eivät päivity tähän automaattisesti, vaan aina pienellä viiveellä.
- Värit: Punainen: Minimit ei täyty. Vihreä: vähintään 5p joista 2p tähtitehtävistä.
Please
Viikko |
35 25.8. |
36 1.9. |
37 8.9. |
38 15.9. |
39 22.9. |
40 29.9. |
41 6.10. |
42 13.10. |
43 20.10. |
44 27.10. |
45 3.11. |
46 10.11. |
47 17.11. |
48 24.11. |
Luennot | 1&2 | 3&4 | 5&6 | 7&8 | 9&10 | 11&12 | 13&14 | 15&16 | 17&18 | 19&20 | 21&22 | 23&24 | ||
Tärkeät |
ti: bonus pe: HT1 |
Väli- kysely |
pe: Debug- näyte |
ti: bonus pe: HT2 |
ti: bonus pe: HT3 |
Tentti pe: 2.12 |
||||||||
dh | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Summa | % | |
Demot |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Korjattu |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
|||
Tunnit |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please |
Please
Ohjelmointi 1, s 2022 / Demo 4
Jos haluat harjoitella vastaavilla tehtävillä, joihin saat myös mallivastaukset, niin katso:
HUOM! Joka kerta on saatava vähintään 2p tähtitehtävistä! Alle 5p tehneillä on huono ennuste loppukurssissa.
Demot palautetaan viimeistään maanantaina klo 11:00 mennessä. Voit palauttaa osan tai kaikki tehtäväsi etukäteenkin ja täydentää vastauksia määräaikaan mennessä. Alla mainitut mallivastaukset näkyvät vasta kun demojen palautustilaisuudet on pidetty.
- huomaa että Answer-linkistä pääset katsomaan muiden vastauksia kun palautusaika on ummessa
- mallivastaukset
- muiden vastaukset
Oppimistavoitteet
Klikkaile ruksit niihin kohtiin jotka olet oppinut. Työkirja-sivulla näet yhteenvedon kaikista demoista.
Palautus
Demot palautetaan viimeistään maanantaina klo 11:00 mennessä. Voit palauttaa osan tai kaikki tehtäväsi etukäteenkin ja täydentää vastauksia määräaikaan mennessä.
Ajankäyttösi tällä viikolla (0.25p)
Demokerran päätteeksi kirjoita arvio tällä viikolla käyttämästäsi työmäärästä. Laske työmäärään mukaan kaikki tällä viikolla käyttämäsi aika: lähiopetukseen (=zoom) osallistuminen, oppimateriaalin lukeminen, demotehtävien tekeminen, luentovideon katsominen, demojen purkutilaisuuteen osallistuminen (maanantaina) ja niin edelleen. Voit päivittää lukua viikon edetessä, se voi helpottaa arvion tekemistä. Huom! Siis tähän ei laiteta kurssin alusta kaikkia tunteja yhteensä, vaan vain tämän viikon tunnit. Tästä annettava 0.25 näkyy Pisteet-sivun demokerran summassa. Kirjoita pelkkä luku esim tyyliin 13.5
Ajankäyttösi tällä viikolla: Plugin numericfield error: Task id refers to another document, but you do not have access to that document.
Huomioitavaa
Oppimisen kannalta näistä tärkeimmät 2 tehtävää voisivat olla tehtävät joukosta 2, 5 ja 6.
Kunkin kerran minimipistemäärä 2 on tehtävä käyttäen tähdellä (*) merkittyjä tehtäviä. Esim. pelkkä Ville ja Tauno ei riitä minimimäärään. Jos nämä tehtävät eivät lähde luonnistumaan, kannattaa käydä pääteohjauksissa saamassa apua.
Muista että B-tehtävät ovat Bonus tehtäviä, joiden tekemiseksi joutuu yleensä etsimään materiaalia kurssin sen hetken materiaalin ulkopuolelta (esim. lukemalla monistetta eteenpäin). Jos niitä ei osaa tehdä, se ei ole vielä vakavaa.
G-tehtävät ovat Guru-tehtäviä, jossa pitää jo osata selkeästi enemmän kuin kurssin taso tällä hetkellä.
Edellisten demojen vastausten korjaaminen E1 (pakollinen)
Kun tehtävien vastaukset on julkistettu (esim demopalautuksissa), pitää jokaisen korjata omat vastauksensa niin, että ainakin Tauno ja perustehtävät 1-6 tuottavat vähintään 1p kukin. Eli demon palautuksen jälkeen pitää demosivun näyttää vähintään 7 p.
Siis esim. ennen demo 2 tehtävien aloittamista pitää demoista 1 tulla vähintään mainittu pistemäärä.
Huomaa että useissa tehtävissä automaattiarvostelu ei ole likikään täydellinen ja vaikka automaatti antaisi täydet pisteet, se ei takaa että tehtävä olisi likikään oikein. Oikea vastaus on aina tarkistettava demonpalautuksesta (paikan päällä tai videoista).
Katso demonpalautusvideo ja kuvaile miten edellisen viikon demot sujuivat itsearviolomakkeeseen.
Kirjoita alla olevaan tekstilaatikkoon kunkin edellisen demokerran tehtävän kohdalle === katkoviivan alle
- millainen vastauksesi oli verrattuna malliin/demojen palautuksessa käsiteltyyn tehtävään
- olisiko vastauksessasi pitänyt olla jotakin enemmän/vähemmän
- jos et ollut tehtävää tehnyt, niin miksi?
- jos et ollut tehtävää tehnyt, niin mitä ymmärsit vastaavasta mallivastauksesta tai demojen palautuksessa käsitellystä vastauksesta
- osaisitko mallin nähtyäsi tehdä vastaavan tehtävän? Miten?
Lisää tarvittavat otsikkorivit lopuille tehtäville samaan tyyliin kuin alla on tehty.
Video 1
Voit saada demopisteitä indeksoimalla luento/demovideoita, ks: Videoiden hakemisto aihepiireittäin 22 Lisää em. videosivulle vähintään 3-linkkiä ja kirjoita alla olevaan laatikkoon, mitkä linkit lisäsit. Joka demokerralle voi merkitä aina vähintään 3:sta linkistä yhden demotehtävän.
TDD-pohja
Tässä voit testata ohjelmiasi jos ComTest ei toimi koneellasi
Tauno 1a
Katso alta ensin video Demo 3:n Tauno-tehtävän käsittelystä. Koita vastauksissa välttää turhia apumuuttujia ja mieti kuinka hyvin ratkaisusi yleistyy jos taulukon kokoa kasvatetaan.
Tauno 1b
Mitähän tästä mahtaa puuttua?
VL: Taitaa tulla varoituksia, joita et ole noteerannut.
—Ville 1
Tee Ville-tehtävät 3.3, 3.5, 3.6. 4.1-4.4. Sanoin luennolla että Villen merkkijonot toimivat kuten Javassa, mutta tuo taitaa nyt olla korjattu Villessä, eli Substring
-metodin jälkimmäinen indeksi on merkkien määrä.
Muista Villen käyttöohje.
Funktioista F1
Mikäli olit luennolla ma 12.09.2022 voit hypätä kohdan 1 yli ja jatkaa suoraan tämän tehtävän kohdasta 2.
Mikäli et ollut luennolla 05 tai et saanut luennolla tehtyä sitä tehtävää, jossa opiskelijat "leikkivät" aliohjelmia ja "paperilaput" parametrejä, tee se nyt yksin tai yhden/kahden kaverin kanssa.
Seuraavaksi lue huolella monisteen luku 9. Aliohjelman paluuarvo.
Suorita kohdan 9.2 Funktion kutsuminen lopussa oleva animaatio huolella miettien, mitä tapahtuu ja miten asiat samaistuvat luentojen "paperilappujen leikkiesimerkkiin".
Aja kohdan 9.3 Funktion kirjoittaminen toisella tavalla toisen esimerkin testit. Vaihda
2.0
tilalle2
. Aja testit ja katso, mitä tapahtuu. Vaihda jakolaskun tilalle kertominen luvulla0.5
ja aja testit uudelleen.
Katso alla olevat molemmat animaatiot ajatuksen kanssa.
Kirjoita alle:
- mitä opit animaation ja luentojen "paperilappujen" antamisen yhteydestä?
- mitä hyötyä oli testeistä?
- miksi sanotaan, että merkijono on muuttumaton (immutable) vaikka merkkijonoanimaation esimerkissä muuttuja
jono
muuttui? - jos vastauksesi on että et oppinut uutta, niin milloin opit em asiat
TDD 1
M: 11. Comtest
Jos teet itse omia testejä vähintään kahteen funktioon (esim ComTest) Visual Studiossa tai vastaavassa, saat merkitä yhden lisäpisteen. Testit eivät saa olla täsmälleen samoja kuin mitkä saa kopioimalla tehtävien TIM-versiosta. Vastauksena kerrot minkä tehtävän ja minkä funktion/funktioiden toiminnan testasit. Voit antaa samalla palautetta ja kehitysehdotuksia Comtestin käytöstä. Huom! Ohjelmia joissa on pelkkä pääohjelma on vielä tämän kurssin tiedoilla aika haastavaa testata, samoin esim. pelijuttuja. 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.
Jos ComTest ei toimi koneellasi, voit Copy/Pasteta ohjelmia alla olevaan laatikkoon ja testata siinä.
Tehtävä 1. Pong tai työaikatutoriaali
Valitse seuraavista jompikumpi sen mukaan mikä on kiinnostus peleihin:
Jos et tykkää pelin tekemisestä, niin tutustu Työaikaraportti tutoriaaliin Toki voit tämän toisen tutoriaalin tehdä myöhemmin vaikka peleistä pitäisitkin :-) Kuten Pongissakin, kirjoita alle muutaman kappaleen mittainen oppimispäiväkirja
Tee Pong-tutoriaalista vaiheet 4-7. Pong-tehtävää ei voi tehdä TIMissä! (Tee myös 1-3 jos et niitä ohjauksissa tehnyt.) Kirjoita parin kappaleen mittainen oppimispäiväkirja (väh. 5 riviä), 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ä. Pong-tutoriaalin kooditiedostoja EI tarvitse palauttaa.
Älä jää liikaa suremaan hieman omituista fysiikan käytöstä joissakin pompuissa :-)
Tehtävä 2*. Merkkijonoja vertaava funktio
- katso erityisesti animaatio siitä, miten merkkijonofunktio toimii: ToLower
- käytä ensisijaisena lähteenä luentomonisteen Merkkijonot-lukua
Tätä tehtävää tehdessä älä yhtään mystifioi asioita. Kyseessä on periaatteessa täsmälleen samanlainen tehtävä kuin viikko sitten Kuutio tai Fahrenheit. Ainoastaan funktion tyyppi on eri, samoin parametrien tyypit. Ja toki sisällöllinen toteutus johon kannattaa paneutua vasta kun on toimiva tynkä tehtynä.
Tee alla olevaan (ConsoleMain-projektin) pääohjelmaan tarvittava funktio PidempiMerkkijono
. Huomaa! TIMissä täytyy syöte antaa etukäteen input-kenttään. Paremman kuvan toiminnasta saat oikeassa ympäristössä (Visual Studio).
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 TIM-sivulta aliohjelmien kirjoittamisesta. Aluksi itse funktion sisältö voi olla vaikka pelkkä (lainausmerkeissä saa tynkä-versiossa olla mitä tahansa):
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 (ks. Näytä koko koodi
) tätä funktiota varten voisivat olla esim:
/// PidempiMerkkijono("Eka sana", "toka") === "Eka sana";
/// PidempiMerkkijono("Eka", "Toka") === "Toka";
/// PidempiMerkkijono("Eka", "Tok") === "Eka";
/// PidempiMerkkijono("", "Toka") === "Toka";
/// PidempiMerkkijono("", "") === "";
Muista jakaa tehtävä osiin:
- Saan kaksi merkkijonoa (sanaa), pidempi pitää palauttaa!
- Mistä olen ensin kiinnostunut? En jonojen sisällöstä vaan sana1 XXX ja sana2 XXX?
- Miten saan selville XXX? Mikä on XXX tyyppi?
- Vertaa jonojen XXX ja päättele sen perusteella mitä palautetaan? Mitä tyyppiä palautettavan tuloksen pitää olla?
Kun olet tehnyt tehtävän, niin kopioi funktio esittelyriveineen tuohon alapuolelle.
Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.
Miksi tässä tehtävässä tim vaatii aliohjelman nimeen "public static string" kun visual studiossa riittää vain "string"? Jos visual studiossa kirjoitan eteen public, tulee ilmoitus: "The modifier 'public' is not valid for this item"
VL: Sää oot todennäköisesti VisualStudiossas kirjoittanut sen funktiosi main-funktion sulkujen sisään jolloin siitä tulee sisäinen funktio josta ei julkista ihan helposti saakkaan. Eli katsolla huolella ne sulkujen paikat!
—Saan pisteiksi 0.9/1 vaikka ohjelma toimii ja testi menee läpi. Mistä voisi johtua?
VL: Ootkos käynyt dokumentit lukemassa?
—Kauan piti miettiä mistä dokumenteista on kyse, mutta löytyipä tuokin nappi nyt. Eli siitä oli kiinni, kiitos.
—Tehtävä 3 Lässytystä
M: 12. Merkkijonot. Luennon 08 esimerkki Merkkijonot.cs, Aliohjelminen kutsuminen
Huomaa! TIMissä konsolilta lukeminen ei toimi samalla tavalla kuin oikeassa ohjelmassa. TIMissä käyttäjän syöte pitää antaa sille varattuun tilaan ENNEN ohjelman ajamista.
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ä tarvitsisi 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.
Eikös tuossa ohjelmassa pitäisi lukea: "Console.WriteLine("Toistan mitä sanot, mutta en osaa sanoa r:ää!");"
VL: eihän se osaa sanoa r:ää
Okei nyt on tyhmä olo :D
—Muutamilla seuraavia virheitä (vaikka olisiki täydet pisteet, samoja virheitä myös T5):
- sisennykset väärin
- jos kutsutaan funktiota, sulku kiinni nimeen
- muuttujien nimien pitää alkaa pienellä kirjaimella
- valmiissa kommentissa oli parametrin sivunpituus nimeksi annettu
lause
ja sitä pitäisi käyttää! - turhia tyhjiä rivejä
- parametria (
lause
) ei saisi käyttää apumuuttujana, kannattaa esitellä uusi apumuuttuja
Tehtävä 4. Char-luokka
Kirjaimet: Katso ensin huolellisesti luennon 08 esimerkki Merkkijonot.cs. Sitten katso Char-dokumentaatiota sekä dokumenttia Aliohjelminen kutsuminen
Tehtävä 4a. Kirjain isoksi (0.4 p)
Katso, mikä kutsu sinun on kirjoitettava XXX:n paikalle, jotta seuraava ohjelma toimisi:
Tehtävä 4b. Onko iso? (0.6 p)
Oletetaan että tehtävänä olisi tehdä ohjelma, jossa kysytään käyttäjältä sana tai jono ja tulostetaan, onko sen ensimmäinen kirjain iso kirjain (uppercase) vai ei (lower case). Käyttönä voisi olla vaikkapa tarkistaa onko annettu muuttujan nimi koodauskäytänteiden mukainen.
Tehtävä kannattaa ilman muuta silloin aloittaa niin, että ensin tehdään funktion IsoVaiPieni
, joka selvittää merkkijonon 1. kirjaimen suuruuden. Sitten kun tämä on tehty ja testattu, ruvetaan miettimään käyttäjältä kysymistä. Tässä tehtävässä tyydytään vasta tuon funktion tekemiseen. Erikoistapausten tulkinnan saat selville valmiista testeistä; jos ensimmäistä merkkiä ei ole tai se on muu kuin kirjain, palautetaan aina "pieni".
TIM-versiossa pääohjelmassa on vakiojono, jossa funktiolla selvitetään, onko jonon 1. kirjain iso vai pieni. Katso tarkasti, mitä itse funktiossa testataan (Näytä koko koodi
) ja mieti, mitä mikäkin tapaus tarkoittaa funktion kannalta. (Array index is out of range = taulukon indeksi on rajojen ulkopuolella, saattaa liittyä tyhjään merkkijonoon. Eli mitä on mj[0]
jos mj == ""
:-) Katso myös luentomoniste.
Jaa ongelma ensin selkeästi pienempiin osiin:
- Voinko edes ottaa 1. kirjaimen? Missä tilanteessa en? Mitä silloin palautetaan?
- Miten saan jonon 1. kirjaimen?
- Miten tutkin, onko 1. kirjain iso?
- Miten tuon perusteella palautan tekstin "iso" tai "pieni"?
Tehtävä 5*. Kolmen luvun suurin ja pienin
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 > suurin ) suurin = b;
return suurin;
Saan pisteiksi 0.9/1 vaikka ohjelma toimii ja testi menee läpi. Mistä voisi johtua?
—Juuh ei en ymmärrä miten tuo Console.Write osuus toimii.
—Tehtävä 6. Merkkijonon pätkiminen
Tee tarvittavat aliohjelmat, jotta seuraava pääohjelma toimisi (vinkki: IndexOf
, Substring
tai Split
, Split
vaatii taulukon jota ei vielä ole käsitelty, muista aina painaa Näytä koko koodi
):
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);
}
Eikös tässä ole väärin päin AnnaEkaSana ja PoistaEkaSana? Koodissa lukee just toise päin
VL: Nyt en ymmärrä?
string kokonimi = Console.ReadLine();
string sukunimi = AnnaEkaSana(kokonimi);
pitäisivät olla toiste päin niin kuin koodissakin? Kyse nyt siis tästä tehtävän esittelystä ilman katsomatta koodia
VL: en vieläkään ymmärrä? Ensin luetaan päätteeltä koko nimi ja sukunimi saadaab ekasta sanasta. Sillä kumpi sijoitetaan ensin (suku- vai etunimi), ei ole väliä, kunhan se pyydetään oikealla funktiolla. Se että tuossa on kaksi esimerkkiä, joissa on eri järjestys, ei muuta tulosta. Hyväkin että on erilaiset esimerkit, ettei kukaan luule että noiden kutsujärjestyksellä on tässä tapauksessa väliä.
—L1. Liukuhihna
Dokumentissa Liukuhihna on hauska robotti. Vastaa siellä oleviin kysymyksiin. Maksimissaan voit tuolta kerätä 2.5 p. Kirjoita alla olevaan tehtävään miltä liukuhihnatehtävä tuntui ja laita itse tehtävän pisteisiin liukuhihnan tuloksesi. Saat tehdä tähän demoon sen tehtävästä osan jota et jo tehnyt demo2:ssa tai demo3:ssa, kunhan kumpaankin merkkaamasi (demo2 + demo3 + demo4) summa on sama kuin Liukuhihnatehtävän pistemäärä.
Huom!. Pisterajatarkistus ei vättämättä toimi, joten et saa huijata laittamalla liikaa pisteitä!
B1-2. Pallojen pukkaileminen
Ota pohjaksi demo 2:n mallivastaus G1-2. Tippuvat suorakulmiot (Näytä mallivastaus/Show model answer
, 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.
Linkki herjaa "404 page not found", vaikka kirjautuu JYU-tunnuksilla. Liittyen mallivastauksiin tuolta edellisten demojen linkistä eli pohjakoodia tehtävän tekoon ei löydy.
VL: Täsmennötkö mikä linkki?
VH: Tuo eka linkki vie demo2 G1-2 tehtävän kohdalle, ja kun viet kursorin tehtävänpalautustilan kohdalle pitäisi siihen yläpuolelle tulla "näytä mallivastaus" teksti näkyviin. Sitä kautta pitäsi ainakin näkyä.
VL: Eikö tuo SuorakulmiotFysiikalla.cs linkki toimi? OLetko kirjautunut koskaan Gitlabiin?
—G1. Räjähdys
Lisää edelliseen pallopeliin sellainen 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.
Korvaavia tehtäviä jotka ovat ei-pelejä
Tehtävät B1-B2 sekä G1 vaativat Jypelin käyttöä. Tähän kerätään vaihtoehtoisia tehtäviä, joissa on sama oppimistavoite, mutta voidaan tehdä tekstuaalisena konsolisovelluksena. Tehtävät ovat ensisijaisesti tarkoitettu niille, jotka eivät halua tai eivät voi käyttää Jypeliä. Tehtäviä voivat kuitenkin tehdä myös muutkin.
B1-2e. Piin likiarvo
Tehtävän tavoitteena on tehdä funktio, joka laskee piin likiarvon Monte-Carlo-simuloimalla.
Piin likiarvo voidaan laskea Monte-Carlo-simuloimalla seuraavasti:
- Arvotaan
pistettä jonkin neliön sisälle.
- Lasketaan, moniko pisteistä osuu neliön sisälle asetetun ympyrän sisälle (
)
- Lasketaan arvio ympyrän pinta-alalle käyttäen lukuja
ja
.
- Lasketaan
saadusta ympyrän pinta-alasta.
Palauta vastauskenttään kokonainen ohjelma, joka sisältää pääohjelman ja toteuttamasi funktion.
Laske ja tulosta lisäksi pääohjelmassa piin likiarvo kun
(Huom. Kun olet tallentanut vastauksesi, arvioi oma suoriutumisesi tehtävästä asteikolla 0-2p. valitsemalla automaatin antaman pistemäärän vierestä Set custom points.)
- Piirrä paperille tilanteesta kuva! Kannattaa ajatella, että ympyrän ja neliön keskipisteet ovat origossa.
- Piste
on
-säteisen ympyrän sisällä, jos pisteen
etäisyys ympyrän keskipisteestä on pienempää kuin säde
.
- Arvio ympyrän pinta-alalle voidaan laskea
, kun
on neliön pinta-ala
- Satunnaisuutta voit hakea
- Jypelin RandomGen-luokasta. Jos käytät tätä, projektiin pitää saada mukaan Jypeli, eli seuraava voi olla helpompi projekin luonnin kannalta.
- C#:n Random-luokasta.
Mikäli käytät tätä, täytyy ensin luoda Random-olio. Esimerkiksi olion metodi nextDouble palauttaa satunnaisen reaaliluvun väliltä 0-1:
/* Satunnaisreaaliluku C#:ssa */ Random rand = new Random(); // Uusi Random -luokan olio double a = rand.NextDouble(); // a = satunnainen luku väliltä 0-1 double b = 15*a; // b = satunnainen luku väliltä 0-15
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.