Harjoitukset
Vastaaminen Timissä
Tarvitset tunnukset Timiin tehtävien palauttamiseksi ja kirjoittamiseksi. Voit miettiä tehtävät myös Visual Studiolla.
Huom! Joissain tehtävissä ei näy koko koodi oletuksena, esimerkiksi mikäli koodia ei pääse muokkaamaan. Paina Näytä koko koodi
-painiketta, jotta saat tehtävän koodin näkyviin.
Uuden projektin luominen
Luo uusi projekti Visual Studioon valitsemalla
File -> New -> Project
Ja sieltä valitse Visual C#
. Tämän jälkeen valitse Console Application
.
Mikäli sinulla on käynnissä Jypeli-projekti, voit valita Solutionin nimen(ylin "rakenne" kansio hierarkiassa), klikata oikealla tätä ja valita:
Add -> New Project
Valitse täältä myös Console Application
Visual C#
:n alta
Laita projekti C:\MyTemp
-kansion alle. Muuten projektia ei voi ajaa.
Materiaalit
Näihin harjoituksiin kannattaa katsoa apua Ohjelmointi 1 -kurssin oppimateriaalista. Tehtävien kohdalla on laitettu linkkejä vastaaviin asiakokonaisuuksiin luentomonisteeseen.
Ehtolauseet
Tehtävä 0
Tehtävä 1
Ota pois kommenteista toinen sijoitusriveistä (esimerkiksi //a = true, poista //-merkit rivin alusta), niin että koodi tulostaa:
A
B
C
Tehtävä 2
C# ohjelmointikielessä looginen tai
esitetään ||
merkeillä ja looginen ja
esitetään &&
merkeillä
Tehtävä 3
Numeroita voi vertailla käyttämällä ==, > ja < merkkejä. == merkeillä voidaan verrata, ovatko kaksi lukua yhtä suuret. Vastaavasti > merkillä voidaan tarkistaa, onko vasemmanpuolinen luku suurempi kuin oikeanpuoleinen luku ja < merkillä voidaan tarkistaa, onko oikeanpuoleinen luku suurempi kuin vasemmanpuoleinen luku. Mikäli väite on tosi, suoritetaan ehto-lause.
Voit myös tarkistaa samalla kertaa, onko luku pienempi tai yhtäsuuri yhdistämällä yhtäsuuruuden ja pienuuden <=
tai onko luku suurempi tai yhtäsuuri >=
.
Aliohjelmat
Aliohjelmista luentomonisteessa
Aliohjelmat ovat kokonaisuuksia, joita voidaan kutsua esimerkiksi pääohjelmasta jonkun ongelmakokonaisuuden ratkaisemiseksi. Aliohjelman runko näyttää seuraavanlaiselta:
Aliohjelmat koostuvat esittelyrivistä ja aliohjelman sisällöstä, eli rungosta.
Esittelyrivillä olevat asiat tulevat aina tietyssä järjestyksessä. Näitä asioita ovat
- Saantimääre: Määrittää voiko muut ohjelmat käyttää aliohjelmaa. Tätä ei ole pakko kirjoittaa, oletuksena se on
private
, eli ei-julkinen. - Paluuarvon tyyppi: Määrittää minkä tyyppisen arvon aliohjelma palauttaa. Jos ei palauta mitään niin tähän tulee
void
. Paluuarvosta kerrottu lisää alempana. - Staattisuus: Tämä selitetään tarkemmin alempana.
- Aliohjelman nimi: Aliohjelmien nimet kirjoitetaan isolla alkukirjaimella ilman välilyöntejä.
- Parametrit: Aliohjelmalle tuodut muuttujat. Näitä ei ole pakko olla yhtään. Tämä selitetään tarkemmin alempana.
Esimerkki funktiosta, joka laskee kaksi annettua parametria yhteen:
public static int Summa(int a, int b)
{
int tulos = a + b;
return tulos;
}
Koska funktio on julkinen (public
) ja staattinen (static
) pystytään kyseistä aliohjelmaa kutsumaan mistä vaan pääohjelmasta. Paluuarvon tyyppinä on int
, koska funktio palauttaa kokonaisluvun. Parametrina aliohjelma ottaa kaksi kokonaislukua.
Tehtava 1
Ratkaise seuraava tehtävä käyttäen apuna valmiiksi luotuja aliohjelmia
Edellä olleessa tehtävässä aliohjelmille on asetettu hyvinkin tarkka tehtävä. Esimerkiksi LisaaYksi
kasvattaa arvoa täsmälleen yhdellä. Ohjelmoinnissa ei kannata tehdä näin tarkkaan määriteltyjä aliohjelmia, vaan kannattaa aina pyrkiä yleisluontoisiin aliohjelmiin. Seuraavassa tehtävässä tarkoitus onkin tehdä yleiskäyttöinen Muuta-aliohjelma, joka ottaa kaksi parametria, numeron, jota muutetaan ja numeron, kuinka paljon muutetaan.
Tehtava 2
Muodosta Muuta
-aliohjelma niin, että tehtävä toimisi oikein
Samalla idealla kannattaisi toteuttaa myös Tuplaa aliohjelma ottamaan parametrina, kuinka paljon lukua kerrotaan. Hyvin usein ei edes laskutoimituksille tarvita omia aliohjelmia vaan aliohjelman vastuuna on hoitaa paljon isompia kokonaisuuksia.
Silmukat
C# ohjelmointikielessä on käytössä useita erilaisia silmukoita: for, while, do-while ja foreach. Yleisimmin käytetty silmukka lienee for-silmukka, jolla voit toistaa yhtä tai useampaa ohjelmakoodi riviä halutun määrän. Esimerkki for-silmukasta alla:
Yllä olevassa esimerkissä on yksinkertainen silmukka, joka suoritetaan 5 kertaa. Yleensä for-silmukka alustetaan alkamaan 0:sta, kuten on esimerkissä kohdassa int i = 0
.
Toinen asia for-silmukassa määrittää, kuinka pitkään silmukkaa suoritetaan. Esimerkissä ehto i < 5
käskee suorittamaan silmukkaa niin kauan kunnes silmukan kierrosluku on pienempää kuin 5. Tämä tarkoittaa, että silmukkaa suoritetaan kierrokset, joilla i saa arvon 0, 1, 2, 3 ja 4.
Viimeinen asia silmukan sulkujen sisällä on kierroksen lopussa tapahtuva asia. Hyvin usein perussilmukoissa kasvatetaan vain juoksevaa numeroa yhdellä isommaksi eli i++
.
Tehtävä 1
Tee ohjelma, jossa silmukkaa käyttäen tulostetaan luvut 0-100, jokainen omalle rivilleen.
Tehtävä 2
Tee ohjelma, joka tulostaa luvut 1, 3, 5,..., 99, jokaisen omalle rivilleen.
Tehtävä 3
Tee ohjelma joka tulostaa luvut 1--100, ja jos luku on jaollinen 5:llä, tulosta luvun perään teksti "Hep!". Tulostuksen olla täsmälleen kuten mallisssa. Ota huomioon välit ja rivinvaihdon kohta.
1
2
3
4
5 Hep!
6
7
8
9
10 Hep!
Luvun jaollisuutta voi tarkastella esimerkiksi miettimällä, mikä luvun jakojäännös on.
C#:ssa jakojäännöksen kysyminen onnistuu %
-merkillä. Esimerkiksi:
int jakojaannos = 7 % 2;
System.Console.WriteLine(jakojaannos); //Tulostaa 1
Tehtävä 4
Tee ohjelma, joka tulostaa kaikki ne kokonaisluvut <= 1000, joiden neliöjuuri on kokonaisluku.
Asiaa voi miettiä myös vastakkaisesta suunnasta: mitkä kaikki luvut kuuluu tulostua.
Taulukot ja merkkijonot
C#:ssa taulukkoja pystyy käsittelemään indeksien avulla kirjoittamalla taulukon nimen ja hakasulut:
taulukko[0]
Indeksointi alkaa 0:sta, eli ensimmäinen alkio taulukossa löytyy indeksistä 0 ja toinen alkio indeksistä 1 jne.
Merkkijonot toimivat hyvin samankaltaisesti C#:ssa kuin taulukot. Voit ottaa hakasuluilla ulos merkkijonosta kirjaimia esimerkiksi:
char merkki = merkkijono[0];
Yllä olevassa esimerkissä on otettu taulukosta yksittäinen alkio ulos ja tulostettu se. Seuraavaksi on tulostettu koko merkkijono ja tämän jälkeen tulostettu ensimmäinen kirjain merkkijonosta. Voit testata vaihtamalla indeksiä taulukon hakasuluista ja katsoa, miten tulostus muuttuu
Tehtävä 1
Muuta seuraavassa tehtävässä oleva merkkijono "Hello World!" tekstiksi "Hello Me!". Tehtävän voi ratkaista monella tavalla, koita saada ratkaistua se kaikilla tavoilla, jotka ovat kommentoituna tehtävässä.
Tehtävä 2
Tee funktio OnkoPalindromi
, joka ottaa parametrina merkkijonon ja palauttaa totuusarvon, oliko annettu merkkijono palindromi. Palindromi on sana, joka on alusta loppuun ja lopusta alkuun luettaessa samanlainen.
Tehtävä 3
Anagrammilla tarkoitetaan sanan tai sanajoukon, kuten nimen, kirjainten uudelleen ryhmittelyä siten, että niistä muodostetaan yksi tai useampi uusi sana. Esimerkiksi sanan "vaali" eräs anagrammi on "laiva" (Wikipedia).
Tee funktio OnkoAnagrammi
, joka palauttaa tiedon (true
/ false
) siitä ovatko kaksi merkkijonoa anagrammeja keskenään. Funktiota voi kutsua esimerkiksi seuraavasti.
bool a1 = OnkoAnagrammi("Antti", "titnA"); // a1 == true
bool a2 = OnkoAnagrammi("Antti", "tianA"); // a2 == false
Jatkotehtävä: Muuta funktiota siten että kirjainkoolla ja välilyöntien määrällä ei ole väliä.
OnkoAnagrammi("Antti", "TITNA") === true
OnkoAnagrammi("anttijussi", "I Just stina") === true
Merkkijonon voi muuttaa char
-taulukoksi ToCharArray
-metodilla:
char[] merkkitaulukko = merkkijono.ToCharArray();
Taulukon voi järjestää Array.Sort
metodilla.
Array.Sort(taulukko);
Haastavampia tehtäviä
Tässä on Ohjelmointi 1-kurssilla haastavahkoina pidettyinä tehtäviä. Varsinkin aloittelijoille, tehtävissä voi vierähtää hetki aikaa.
G1
Tee ohjelmasta sellainen, että se piirtää viiden laatikon sijaan n
laatikkoa, vieläpä siten, että laatikot pienenevät. Tällöin i
:nnen laatikon koko tulisi olla
(n + 1 - i) / n * laatikonKoko
eli esimerkiksi jos halutaan piirtää yhteensä 10 laatikkoa, niin 7:nnen laatikon koko on
(10 + 1 - 7) / 10 = 4 / 10 * laatikonKoko
G2
G3
Tee Anagrammi-tehtävä lineaarisessa ajassa (eli aikavaativuus O(n)
).
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.