avoin/avoin23
Huom! TÄMÄ ON AVOIMEN YLIOPISTON SIVU.
Et voi suorittaa kurssia, ellet ole ilmoittautunut täällä.
```
Demotilanne:
- Pisteet päivittyvät pienellä viiveellä.
- Värit: Punainen - puutteellinen. Vihreä - hyväksytty (vähintään 6p, joista 2p tähtiä)
Please
Osa-alue |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
12 |
12 |
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 | |||
Deadlinet |
HT1 (suu- nnitelma) |
Väli- kysely |
Debug- näyte |
HT2 (50%) |
Tentti- ilmo |
HT3 (100%) |
Tentti | ||||||||
Ohjaus | 1 | 2 | 3 | 4 | 5 | ||||||||||
Demo | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Summa | d% | |
Pisteet |
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 |
Please
Ohjelmointi 1, avoin 2023 / Demo 6
Tehtävät perustuvat luentoihin: 11 ja 12.
OPPIMISTAVOITTEET
Täytä sitä mukaa, kun koet oppineesi uusia asioita. Työkirja-sivulla näet yhteenvedon kaikkien demojen osalta.
HUOMAUTUS: Tällä demokerralla testejä pitää kirjoittaa itse. Malleja ja ideoita voi kopioida aikaisemmilta demokerroilta, kun niiden koodissa painaa "Näytä koko koodi".
Tässä demossa näet testien tarpeen siitä, että "Näytä koko koodi" painamalla ei näy yhtään valmista testiä. Lisäksi jos painaa Test-painiketta eikä testejä ole kirjoitettu, niin tästä tulee virheilmoitus.
Pohja, josta testejä voi kopioida (tosin tehtäviä suositellaan tehtäväksi Visual Studiossa):
/// <summary>
/// Aliohjelmalla ...
/// </summary>
/// <param name="???">?????</param>
/// <returns>???</returns>
/// <example>
/// <pre name="test">
/// FunktioNimi(Parametrit) === tulos;
/// </pre>
/// </example>
Muista, että reaalilukuja testataan eri tavalla kuin muita tyyppejä!
Itsekirjoitetuista testeistä voi saada pisteitä vaikka testit olisivatkin vajavaisia, tässä pitää siis olla rehellinen! Jos testit eivät ole kunnollisia ja testaa jotakin, niin testit täytyy joko pyyhkiä pois tai tehdä sellaisiksi, etteivät ne käänny. Muuten ohjelma antaa ansiottomia pisteitä.
Täysien pisteiden saamiseksi myös dokumentaatio pitää käydä katsomassa (ja tarkistaa, että se on kunnollinen, eli siinä näkyy myös paramterin nimet ja selitykset).
Välipalautekysely (1p)
Vastaa kurssin välikyselyyn. Kopioi kyselystä kohta Analysoi omia vaikeuksiasi tai tarkenna edellisiä alla olevaan laatikkoon. Muista painaa return aina, kun rivi tulee täyteen, ettei tulisi yli 65 merkkiä pitkiä rivejä. Vaihtoehtoisesti paina wrap
aina välillä.
Analysoi omia vaikeuksiasi kurssilla alla olevaan laatikkoon ja käy lukemassa/lisäämässä mielipiteitä palaute-sivulla. Suhteuta myös siihen, miten paljon olet käyttänyt kurssilla tarjottuja apuja, mm. pääteohjausta, keskustelukanavia, demojen harjoittelutehtäviä yms.
Tauno 1
Tee alla olevat Tauno-tehtävät. Kun saat oikeat tulokset, niin laita Taunon generoima koodi kommentteihin ja korvaa se koodilla, jossa sama asia tehdään silmukassa. Varmista Aja- ja Test-painikkeilla, että koodi edelleen toimii.
- Tehtävät joilla voit harjoitella ilman silmukkaa ja silmukaksi
Huom 1: Tämä on "par 1" tehtävä, eli yksi apumuuttuja riittää kahden indeksimuuttujan lisäksi. Haluamasi muuttujan arvoa voit kasvattaa/vähentää yhdellä, kun raahaat sen päälle "laskupalkissa" olevan +1
/-1
laatikon. Voit käyttää olemassa olevaa muuttujaa taulukon indeksinä raahaamalla muuttujan taulukon solun alla olevaan laatikkoon. Mikäli haluat käyttää toista indeksimuuttujaa, tulee sinun raahata toinen muuttuja toisen taulukon solun alle.
Huom 2: Tämän hetken Taunossa on sellainen bugi, että indeksit eivät saa mennä päistä ylitse ja jos menee, se ei näy "kuvassa".
Tauno 2*
Jos yhtään vaikeuksia, katso: tehtävä jolla voi harjoitella.
Tehtävää ei tehdä oikealla Taunolla mutta periaatteessa samalla idealla. Ongelma: Edellisen kerran "sopuli-pelin" tietyn sopulin naapurit voidaan laskea ehtolauseen sijaan ainoastaan summaamalla kussakin naapuriruudussa olevat luvut yhteen, ja mikäli ruuduissa on vain arvoja 0 tai 1. Tämä tarkoittaa jokaista laskettavaa ruutua kohti 8 naapuriruudun arvojen summaamista. "Matriisin" reunoilla oleville ruuduille ei VIELÄ yritetä laskea naapureiden määrää, koska reunoilla olevin naapuriruutujen määrä vaihtelee. Tehtävässä siis lasketaan naapureiden määrä vain niille ruuduille, joilla on 8 naapuriruutua.
Piirrä itsellesi kuva ruutupaperille tilanteesta, jossa "pelissä" on 6 riviä ja 5 saraketta. Kirjoita ruutuihin sopulimääriä (0 tai 1) ja ruutujen nurkkiin pienellä ruudun osoite tyyliin [1,2]
(rivi ensin, sarake sitten). Kertaa itsellesi vielä, miten lasketkaan jonkin ruudun naapurisopuleiden määrän.
- Tee alla olevan aliohjelman tehtävä taunomaisesti, eli käyttäen vain vakioindeksejä. Toisin sanoen kopioi
n +=...
riviä seitsemän kertaa ja muuta paikassa[1,2]
olevan sopulin nurkkanaapurin indeksiparin[0,1]
tilalle kullakin uudella rivillä vastaavan naapurin paikka. Mene paikat läpi rivi kerrallaan vasemmalta oikealle. Käytännössä siis kirjoita ruudun [1,2] naapureiden osoitteet (8 kpl).
- Kopioi edellinen vastaus alle kohtaan Tauno 2.2 ja muuta vastauksesi niin, että vakioiden sijaan käytät hyväksesi aliohjelman parametreinä tuotuja indeksejä
iy
jaix
siten, että minkä tahansa ei-reunassa olevan ruudun naapurit voidaan laskea. Esimerkiksi tämän tehtävän kohdan 1 vastauksen 1. rivi olisin += sukupolvi[iy-1,ix-1];
. HUOM! Älä merkitse pelkkäiy
vaaniy+0
.
- (Vapaaehtoinen). Kohdan 2 vastauksen jälkeen sinulla pitäisi olla 8 riviä, jotka ovat hyvin samankaltaisia, mutta eivät kuitenkaan täysin samanlaisia. Kopioi edellinen vastaus kohtaan Tauno 2.3 ja jatka sen muuttamista alla olevilla ohjeilla. Esittele apumuuttujat
int x=-1, y=-1;
ja muuta kaikki rivit muotoonn += sukupolvi[iy+y,ix+x];
niin, että ennen riviä muutat indeksejäx
jay
siten, että seuraavalla rivillä viitataan samaan paikkaan kuin ennen muuttujienx
jay
käyttämistä, eli kuten Tauno 2.2 kohdassa. Muuttamiseen saat käyttää vain lauseitax++
,x=-1
,y++
. Älä kirjoita näitä lauseita hakasulkeiden sisään, vaan omille riveilleen.
- (Vapaaehtoinen). Kohdasta 3 pitäisi nyt erottua kaksi sisäkkäistä silmukkaa. Tee kohtaan Tauno 2.4 kohdasta 3 uusi vastaus silmukoita käyttäen (edelleen ei reunassa oleville sopuleille).
Ville 1
Tee Ville-tehtävät: 5.6-5.8, ja 9.4-9.6. Villen käyttöohje.
Tehtävä 1. Aliohjelman esittely
Tehtävänäsi on tehdä pääohjelmaan tarvittavan aliohjelman tai funktion esittely ja tynkä-toteutus eli lyhyin mahdollinen runko tehtävän jokaiseen kohtaan. Itse ohjelmien kuvausta vastaavia toteutuksia ei tarvitse tässä tehtävässä tehdä. Riittää, että ohjelma kääntyy. Parametrit on kuitenkin nimettävä hyvin!
Kun olet tyytyväinen vastaukseesi, paina Aja
.
- Jos tulostuu
"ok"
, tehtävä on suoritettu. - Jos tulee virheitä, tehtävää ei ole läpäisty.
Huom! Oikeastakin vastauksesta tulee varoituksia (warning), koska tehtävissä on muuttujia, joista jokaista ei käytetä. Niistä ei tarvitse nyt välittää, vaan riittää, että tulostuu "ok"
.
Kustakin kohdasta saa 0.2 p.
Vaihtoehtoja eri tyyppisille funktioille:
return; // tai ei mitään
return 0;
return false;
return 0.0;
return ' ';
return "";
return new StringBuilder();
return new int[0];
Tehtävä 2*. Ehtolauseet
Lue ensin: 13. Ehtolauseet ja Liukulukujen testaaminen.
Jos yhtään vaikeuksia, aloita harjoitustehtävällä.
Aloita tehtävien teko Visual Studiossa kirjoittamalla ComTest-testit, joissa kutsut funktiota sopivilla testattavilla arvoilla. TIM versiossakin testit pitää tästä edespäin kirjoittaa itse.
a) Käänteisluku
Tee funktio, jota voi kutsua muodossa:
double kaanteisluku = Kaanteisluku(luku);
Huom! Luvulla 0 ei ole olemassa käänteislukua. Sen vuoksi funktion tulee 0:n kohdalla palauttaa aina 0.
b) Jaollisuus
Kirjoita vastaavasti nyt seuraavalle kutsulle funktio:
bool jaollinen = OnkoJaollinen(luku, jakaja);
Vinkki! Jaollisuutta voidaan tutkia operaattorilla %
.
c) Taulukon arvot
Kirjoita vielä funktio seuraavalle toteutukselle:
int[] luvut = { 1, 2, 3 };
bool ovatko = Positiivisia(luvut);
Console.WriteLine(ovatko);
// Tulostaa "True"
Sarja B*. Keskiluku (2 p)
- Sarjatehtävät ovat useammasta osasta koostuvia tehtäviä, joissa samaa ohjelmaa työstetään kussakin osassa eteenpäin.
- Seuraavaan osaan pääset aina vasta, kun olet lukinnut antamasi vastauksen.
- Lukitsemisen jälkeen voit edelleen työstää osioon antamaasi vastausta, muttet voi enää saada siitä lisää pisteitä.
- Ei haittaa, vaikket onnistu jokaisessa osassa, sillä saat lukitsemisen jälkeen aina kyseisen osan mallivastauksen, jotta voit edetä tehtävässä.
Lue ensin: 15. Taulukot ja 16. Toistorakenteet.
Jos yhtään vaikeuksia, aloita: harjoitustehtävällä.
Olkoon tässä tehtävässä keskiluku
se taulukon alkio, joka on lähimpänä taulukon alkioiden välistä keskiarvoa.
Tehtävänäsi on tehdä ohjelma, joka osaa etsiä ja palauttaa minkä tahansa lukutaulukon keskiluvun. Tätä varten tarvitaan useampi hyvin määritelty aliohjelma. Tehtävässä on monta osaa, joissa jokaisesta edetään pala-palalta kohti tuota lopullista päämäärää.
Osa 1. Keskiarvo
Keskiluvun ratkaisemiseksi tarvittiin taulukon alkioiden keskiarvo. Aloita siis tekemällä funktio Keskiarvo
, joka ottaa vastaan taulukon ja palauttaa taulukon alkioiden välisen keskiarvon.
Osa 2. Etäisyys
Taulukosta tuli myös löytää ratkaistua keskiarvoa lähin alkio. Lähimmän määrittämiseksi tarvitsemme kuitenkin keinon laskea etäisyyksiä. Tee siis funktio Etaisyys
, joka palauttaa kahden arvon välisen etäisyyden.
Huom! Kyseessä ei ole pelkkä miinuslasku. Ennemminkin tehtävän 3a itseisarvolaskua muistuttava operaatio.
Osa 3. Lähin
Nyt kun keino laskea etäisyyksiä on tehty, voidaan seuraavaksi lähteä etsimään taulukosta lähintä arvoa. Tee funktio EtsiLahin
, joka palauttaa taulukon arvoista haluttua arvoa lähimmän hyödyntämällä b-kohdan Etaisyys
-funktiota. Aloita kopioimalla se tuohon alas pohjaksi.
Osa 4. Keskiluku
Keskiluvulla tosiaan tarkoitettiin sitä taulukon alkiota, joka on lähimpänä taulukon alkioiden keskiarvoa. Nyt löytyy sekä keino laskea keskiarvo että etsiä taulukosta keskiarvoa lähin alkio. Nämä kaksi yhdistämällä on nyt mahdollista selvittää varsinainen keskiluku.
Tee funktioaliohjelma Keskiluku(double[] luvut)
, joka palauttaa taulukon keskiluvun. Hyödynnä kaikkia osissa 1-3 rakentamiasi ohjelmia.
Sarjan B loppu.
Tehtävä 3. Lukujen yhtäsuuruus
Lue ensin: 11.3 Liukulukijen testaaminen ja 13. Ehtolauseet.
Monesti tarvitaan tieto siitä, ovatko kaksi arvoa keskenään saman suuruiset vai eivät. Tehtävänäsi on tehdä aliohjelma, joka osaa vastata tuohon kysymyksen niin kokonaislukujen kuin reaalilukujenkin kohdalla.
Reaalilukuja ei voi luotettavasti verrata operaattorilla "==
". Tämän vuoksi reaalilukujen yhtäläisyyttä joudutaan arvioimaan raja-arvoilla. Raja-arvon sisällä reaalilukujen voidaan katsoa olevan riittävän lähellä, vastatakseen toinen toistaan. Raja-arvon suuruus on aina tilanneriippuvainen ja valitaan tarpeen mukaan.
Täydennä funktio Erit
, joka palauttaa totuusarvon siitä, ovatko vertailtavat kaksi reaalilukua sovellettavan raja-arvon sisällä yhtäläiset. Toisin sanottuna, jos kaksi reaalilukua ovat "riittävän" lähellä toisiaan, palautetaan false
, muuten aina true
.
a) Kokonaislukujen vertaaminen
Tee funktio YhtaSuuret
, joka palauttaa totuusarvon siitä, ovatko vertailtavat kaksi kokonaislukua (int
) yhtä suuria keskenään.
b) Reaalilukujen vertaaminen I
Muuta a-kohdassa tekemääsi funktioa YhtaSuuret
niin, että se osaa nyt palauttaa totuusarvon kahden reaaliluvun (double
) välisestä yhtäsuuruudesta.
c) Miksei toiminut?
Kuten saatoit b-kohdan tulostuksesta huomata, reaalilukujen vertaaminen ei onnistunutkaan samalla tavalla kuin kokonaislukujen. Muuttujien a
(6.3) ja c
(6.3) arvot olivat ohjelman mukaan eri suuruiset, vaikka oikeastihan ne olivat samat. Miksi näin kävi? Pohdi ja perustele johtopäätöksesi.
d) Reaalilukujen vertaaminen II
Lue ensin: Optional arguments.
Muuta b-kohdan aliohjelmaa YhtäSuuret
siten, että se ottaa vastaan kolmannen parametrin ja käyttää sitä raja-arvona reaalilukujen vertaamisessa. Aliohjelman YhtaSuuret
tulee nyt palauttaa totuusarvo raja-arvon asettaman vaihteluvälin perusteella.
Tee tuosta raja-arvosta vielä valinnainen parametri (optional parameter/argument), jonka oletusarvo on 0.00001
.
Sarja C. Lämpötilaseuranta matriisissa (3 p)
- Sarjatehtävät ovat useammasta osasta koostuvia tehtäviä, joissa samaa ohjelmaa työstetään kussakin osassa eteenpäin.
- Seuraavaan osaan pääset aina vasta, kun olet lukinnut antamasi vastauksen.
- Lukitsemisen jälkeen voit edelleen työstää osioon antamaasi vastausta, muttet voi enää saada siitä lisää pisteitä.
- Ei haittaa, vaikket onnistu jokaisessa osassa, sillä saat lukitsemisen jälkeen aina kyseisen osan mallivastauksen, jotta voit edetä tehtävässä.
Lue ensin: 15.5 Moniulotteiset taulukot.
Tässä sarjassa harjoitellaan 2-ulotteisten taulukoiden eli matriisien käyttöä.
Olet kirjannut ulkolämpötilat kuukauden ajalta matriisiin, joka on käytännössä kaksiulotteinen taulukko. Haluaisit myöhemmin hyödyntää kirjaamiesi lämpötilojen tietoja tutkiaksesi, miten lämpötila on muuttunut ajankohdasta toiseen.
Logaamasi lämpötilat matriisissa:
double[,] lammotKK =
{ { 16.4, 14.3, 15.6, 17.2, 18.3, 16.6, 14.7 }, // iy=0 (viikko 1)
{ 15.2, 13.0, 13.5, 16.7, 12.9, 16.1, 14.8 }, // iy=1 (viikko 2)
{ 13.3, 15.2, 15.0, 12.1, 111.7, 11.1, 15.0 }, // iy=2 (viikko 3)
{ 11.3, 10.1, 11.9, 13.7, 12.0, 10.4, 13.1 } }; // iy=3 (viikko 4)
// ix=0 ix=1 ix=2 ix=3 ix=4 ix=5 ix=6
Osa 1. Matriisin käsittely
Tutki lämpötilamatriisia ja huomaa, että yksi arvoista on kirjattu väärin. Siinä sama luku on ilmeisesti syötetty kahteen kertaan.
- Tunnista tuo matriisin virheellinen alkio ja tulosta se.
- Korjaa virheellinen arvo oikeaksi ja tulosta se sitten uudelleen.
- Laske sitten kuukauden ensimmäisen ja viimeisen mittauksen välinen keskiarvo ja tulosta se.
- Vertaa lopuksi korjaamasi alkion arvoa laskemaasi kuukauden keskiarvoon ja tulosta niiden välinen erotus kahdella desimaalilla.
Huom! Älä tulosta mitään ylimääräistä tai automaattitarkistus ei osaa pisteyttää tehtävää. Tulosta siis ainoastaan virheellinen arvo
, korjattu arvo
, keskiarvo
ja erotus
tuossa järjestyksessä ja jokainen omalla rivillään!
Osa 2. Matriisista hakeminen
Nyt kun matriisin virheellinen arvo on korjattu, voidaan matriisiin kerättyä dataa tutkia. Aloitetaan lämpötilojen hakemisella matriisista.
Tee funktio AnnaArvo
, joka palauttaa matriisin tietyltä riviltä löytyvän tietyn sarakkeen arvon.
Ohjelman tulisi toimia seuraavasti:
// vk pv
int[] mittaus = { 1, 5 };
double lampo = AnnaArvo(lammotKK, mittaus);
Console.WriteLine($"Lämpötila {mittaus[0] + 1}. viikon {mittaus[1] + 1}. päivänä: {lampo} °C.");
// Tulostaa "Lämpötila 2. viikon 6. päivänä: 16.1 °C."
Tee aliohjelmasta AnnaArvo
vielä sellainen, että jos etsittävän rivin/sarakkeen arvo on suurempi kuin niiden määrä, palautetaan aina viimeisen alkion arvo kyseiseltä riviltä/sarakkeesta. Vastaavasti jos haettava rivi/sarake on pienempi kuin 0 palautetaan aina ensimmäisen alkion arvo kyseiseltä riviltä/sarakkeesta.
Huom! Tulostuksen +1 viikon ja päivän arvoihin johtuvat jälleen siitä, että indeksit alkavat aina 0:sta ja oikean maailman viikot ja päivät 1:stä.
Osa 3. Operaatiot matriisilla I
Toiseksi voisimme tutkia, miten paljon lämpötila on muuttunut kahden mittauksen välillä.
Laske "kynällä ja paperilla" matriisin kahden alkion arvon välinenn erotus. Anna jokaiseen kohtaan vain pelkkä vastaus yhdellä desimaalilla.
Tehtävän lämpötilamatriisi:
double[,] lammotKK =
{ { 16.4, 14.3, 15.6, 17.2, 18.3, 16.6, 14.7 }, // iy=0 (viikko 1)
{ 15.2, 13.0, 13.5, 16.7, 12.9, 16.1, 14.8 }, // iy=1 (viikko 2)
{ 13.3, 15.2, 15.0, 12.1, 111.7, 11.1, 15.0 }, // iy=2 (viikko 3)
{ 11.3, 10.1, 11.9, 13.7, 12.0, 10.4, 13.1 } }; // iy=3 (viikko 4)
// ix=0 ix=1 ix=2 ix=3 ix=4 ix=5 ix=6
Osa 4. Operaatiot matriisilla II
Hyödynnä edellisessä osassa 3 käyttämääsi ajattelumallia alkioiden välisten erotuksien laskemiseksi. Tee ajattelumallistasi algoritmi funktioon Erotus
, joka palauttaa matriisin kahden alkion arvon välisen erotuksen.
Käytä apunasi myös osassa 1 tekemääsi funktiota AnnaArvo
.
Ohjelman olisi tarkoitus toimia seuraavasti:
// vk pv
int[] mittaus1 = { 1, 5 };
int[] mittaus2 = { 3, 2 };
double lampotilamuutos = Erotus(lammotKK, mittaus1, mittaus2);
Console.WriteLine($"Lämpötilamuutos mittausten välillä: {lampotilamuutos} °C.");
// Tulostaa "Lämpötilamuutos mittausten välillä: -4.2 °C."
Osa 5. Matriisin rivit ja sarakkeet
Käyttäjäystävällisyyden kannalta voimme lisätä vielä tiedon siitä, kauanko kahden mittaushetken välillä on kulunut aikaa päivissä.
Tee funktio Paivia
, joka palauttaa kahden mittaushetken välisen eron päivissä. Tässä tilanteessa rivin (viikon) muutos tarkoittaa +7 ja sarakkeen (päivän) muutos +1.
Ohjelman pitää toimia seuraavasti:
// vk pv
int[] mittaus1 = { 1, 5 };
int[] mittaus2 = { 3, 2 };
double lampotilamuutos = Erotus(lammotKK, mittaus1, mittaus2);
int paivia = Paivia(mittaus1, mittaus2);
Console.WriteLine($"Lämpötilanmuutos {paivia} päivässä: {lampotilamuutos:0.#} °C.");
// Tulostaa "Lämpötilanmuutos 11 päivässä: -4.2 °C."
Huom! Päivät eivät voi olla negatiivisia, joten funktion Paivia
pitää aina palauttaa mittaushetkien välinen erotus positiivisena lukuna (eli itseisarvona).
Sarja C jatkuu demoissa 8...
Tehtävä 4. Merkkijonon pätkiminen II
Lue ensin: 12. Merkkijonot, Jonoja.cs, Merkkijonoja.cs ja Aliohjelminen kutsuminen.
Demojen 4 tehtävässä 6 Merkkijonon pätkiminen I harjoiteltiin merkkijonon käsittelyä ja pilkkomista. Tässä tehtävässä jatkojalostetaan noita taitoja eteenpäin.
Tee tarvittavat aliohjelmat, jotta seuraava pääohjelma toimisi.
public static void Main()
{
string kokonimi = "Juho Enäkoski";
string etunimi = PoistaSukunimi(kokonimi);
string sukunimi = AnnaSukunimi(kokonimi);
Console.WriteLine($"Etunimesi on siis {etunimi} ja sukunimesi {sukunimi}.");
kokonimi = "Antti Jussi Lakanen";
etunimi = PoistaSukunimi(kokonimi);
sukunimi = AnnaSukunimi(kokonimi);
Console.WriteLine($"Etunimesi on siis {etunimi} ja sukunimesi {sukunimi}.");
}
Huom! Muista aina painaa Näytä koko koodi
nähdäksesi pääohjelman.
Vinkki! Voidaan toteuttaa valmiiden ohjelmien IndexOf
ja Substring
TAI Split
avulla.
B1. Kirjaimet isoksi
Lue ensin: 27. ASCII-koodi.
Tee funktio Isoksi
, joka palauttaa merkkijonon kaikki kirjaimet isoiksi muutettuina. Nyt kuitenkaan ET SAA KÄYTTÄÄ valmista ohjelmaa .ToUpper
, vaan joudut itse tekemään sitä vastaavan toteutuksen.
Vinkki! Kannattaa hyödyntää ASCII-koodeja:
- Mitkä ovat pienten kirjainten ASCII-koodit?
- Miten pieni kirjain muutetaan ASCII-koodien avulla isoksi?
G1. Pyrstötähdet IV
Ota demojen 5 mallivastaus tehtävään Pyrstötähdet III ja aja se ensin sellaisenaan.
Muuta ohjelmaa niin, että pelissä on ruudulla näkyvä pistekyltti (Label
) ja laskuriin (IntMeter
) sidottu pistemäärä. Pisteen ansaitsee jokaisen tähden tuhoamisesta.
Korvaa tähtien satunnaisvärjäys annetulla .png kuvalla tähdestä (tahti.png). Anna myös pelaajalle oma kuva (koira.png).
Kokeile että toimii.
G2. Toiston poisto
StringFormat.cs-esimerkissä on paljon copypaste-koodia. Muotoiluesimerkin muuttaminen vaatisi paljon muutoksia koodiin, samoin esimerkkinumeroiden. Tee ohjelma, jossa on yhdessä taulukossa muotoiluesimerkit ja toisessa käytetyt numerot ja sitten itse ohjelman (mahdollisten aliohjelmien kanssa) toteutus perustuu vain näiden kahden taulukon käyttöön. Nyt muotoiluesimerkin muuttaminen on vain yksi muutos yhdessä paikassa. Samoin kuin yhden esimerkkinumeron muuttaminen tai jopa lisääminen.
H1. Harjoitustyöhön jokin viikon luentoihin liittyvä ominaisuus
Jatkossa on aina tehtävä H1, josta voi merkitä itselleen 1-2 p sen mukaan, miten sen "vaikeus" suhteutuu muihin tehtäviin.
Lisää harjoitustyöhösi (se voi olla aluksi hyvinkin tyhjä "lumiukkopohja") jokin kurssiviikon aiheeseen liittyvä ominaisuus. Kommentoi koodiin selvästi, missä "viikon" ominaisuutta on käytetty. Tällä viikolla esimerkiksi silmukat, taulukot ja 2-ulotteiset taulukot.
Jos harjoitustyöhön ei ominaisuutta saa lisättyä, voit tehdä myös pienen muun ohjelman, jossa harjoittelet ko. ominaisuuksia, mikäli varsinaisista tehtävistä ei mieleistä vastaavaa harjoittelua löydy.
Pyydetty linkki esim. muodossa:
https://gitlab.jyu.fi/oma_kayttajatunnus/ohj1ht
PP 1
PP-tehtävät on kertaavia tehtäviä.
Lue ensin: 16. Toistorakenteet ja Taulukoita.cs.
Tee aliohjelma, joka tulostaa lukujen neliöitä seuraavan esimerkin mukaisesti:
1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
5 * 5 = 25
6 * 6 = 36
7 * 7 = 49
8 * 8 = 64
9 * 9 = 81
10 * 10 = 100
PP 2
Lue ensin: 12.7 Char-luokka ja 16. Toistorakenteet.
Tee aliohjelma, joka tulostaa parametrina annetusta merkkijonotaulukosta vain ne sanat, jotka alkavat isolla alkukirjaimella.
Esimerkiksi taulukosta
["kissa", "Kana", "Koira", "hevonen", "Vuohi"]
Tulostuu vain
Kana
Koira
Vuohi
Omaa tuotantoa
Näihin tehtäviin voit palauttaa jonkin oman kurssin tämän hetken oppimistavoitteita vastaavia tehtäviä. Ei kuitenkaan enää jos vastaavat tehtävät on tehty edellä olevissa tehtävissä.
Nämä on tarkoitettu lähinnä niille, joilla ei ole mahdollisuutta tehdä varsinaisia tehtäviä ajallaan esimerkiksi kertausharjoitusten tai sairauden takia. Yleensä jos tulee ajoissa ennakoitavia esteitä, pitäisi tehdä perustehtäviä tehdä etukäteen.
Nämä arvostellaan manuaalisesti ja opiskelijan pitää ottaa yhteyttä kurssin opettajiin kun toivoo näitä arvosteltavan. Jos tehtävä on liian lähellä mallivastauksia, ei sitä arvostella tai voidaan pyytää muuttamaan vastaustaan erilaiseksi. Samoin jos tehtävä ei liity viikon oppimistavoitteisiin (vertaa esim tähtitehtävät). Luonnollisesti nuo kaksi ohjelmaa eivät saa olla samanlaisia. Laita ohjelman kommentteihin mitä perustehtäviä nämä korvaisivat ja mikä olisi oma peruste millekin pistemäärälle (se voi olla enemmänkin kuin 1p/tehtävä).
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.