avoin/avoin23
Kertaustehtäviä
Tylsien asioiden museo
Uskomattoman tylsien asioiden museo haluaa päästä eroon joistain näyttelyesineistään. Merja, museon amanuenssi saa idean ja antaa jokaiselle esineelle arvosanan ja poistaa sitten pienimmän arvosanan saaneen esineen.
Juuri kun Merja on saanut annettua arvosanat tylsille esineille, hän joutuu lähtemään kaupungille asioille. Niinpä hän pyytää sinua kirjoittamaan ohjelman joka kertoo jäljellejääneiden tavaroiden arvosanat, kun kaikkein huonoin arvosanan saanut kappale on poistettu.
Tehtävä
Funktio ottaa kokonaislukuja sisältävän listan ja palauttaa uuden listan, josta on poistettu pienin luku. Jos listassa on useita samoja arvoja, poistetaan se jolla on pienin indeksi.
Lisäys 30.3.: Alkuperäistä (parametrina saatua) listaa ei saa muokata.
Tyhjän listan tapauksessa palautetaan tyhjä lista.
Jäljelle jääneiden alkioiden järjestystä ei saa muuttaa.
Esimerkkejä
List<int> lista;
lista = Poistaja.PoistaPienin(new List<int>{1,2,3,4,5});
String.Join(",", lista) === "2,3,4,5";
lista = Poistaja.PoistaPienin(new List<int>{5,3,2,1,4});
String.Join(",", lista) === "5,3,2,4";
lista = Poistaja.PoistaPienin(new List<int>{2,2,1,2,1});
String.Join(",", lista) === "2,2,2,1";
Taulukkotreeniä
Osa 1. Annetun luvun potenssit
Kirjoita funktio Potenssit
, joka laskee k
kappaletta luvun n
potensseja nollasta alkaen. Luvut n
ja k
annetaan funktiolle kahtena int
-tyyppisenä parametrina. Ensimmäisellä parametrilla kerrotaan, minkä luvun potensseja lasketaan ja toisella parametrilla kuinka monta. Funktio palauttaa taulukon, joka sisältää oikean määrän laskettuja potensseja.
Funktiokutsu Potenssit(2,8)
taulukoisi siis kahdeksan kappaletta kakkosen potensseja ja sen palauttama taulukko sisältäisi alkiot 1, 2, 4, 8, 16, 32, 64, 128
.
Bonus! Älä käytä valmista Math.Pow
-funktiota, vaan toteuta vastaava toiminnallisuus itse.
Osa 2. Array.Reverse
Kirjoita funktio Kaanna
, jolle annetaan parametrina ykkösosiossa luotu potenssitaulukko. Funktio kääntää annetun taulukon alkiot päinvastaiseen järjestykseen, mutta ei palauta mitään. Älä käytä otsikossa mainittua valmista Reverse
-funktiota, vaan toteuta se itse.
Alkuperäisen taulukon alkiot 1, 2, 4, 8, 16, 32, 64, 128
kääntyisivät siis järjestykseen 128, 64, 32, 16, 8, 4, 2, 1
.
Bonus! Kirjoita algoritmisi niin, että se toimii ns. paikallaan, eli se ei varaa ylimääräistä lisätilaa (esimerkiksi luomalla uuden taulukon). Yksittäisten int
-tyyppisten apumuuttujien käyttäminen on sallittua.
Osa 3. String vs. StringBuilder
Kirjoita toinen versio Kaanna
-funktiosta, jolle annetaan parametrina taulukon sijasta StringBuilder
-olio. Funktio toimii muuten samalla tavalla kuin äskeisessä osiossa. Kirjoita funktiosta sitten vielä kolmas versio, jolle annetaan StringBuilder
in sijasta String
-olio. Millä tavalla funktion toimintaa ja paluuarvoa tulee muuttaa, jotta se toimisi oikein? Miksi?
Aritmeettiset operaatiot ja muuttujat
Tarkastele alla olevaa ohjelmaa ja mieti, mitä se tulostaa. Kirjaa vastauksesi paperille tai tekstieditoriin ja aja sitten ohjelma itse. Vastaako tuloste odotuksiasi? Jos ei, miksi?
Huom! Tämä on melko ilkeä tehtävä :-).
using System;
class Muuttujat
{
public static void Main()
{
int n = 8%5;
Console.WriteLine(n);
double d = 8/5;
Console.WriteLine(d);
for (int i = 0; i < 10; i++);
Console.WriteLine("Kirjoitin rivin");
int[] taulukko = new int[] { 1,2,4,8,16 };
for (int i = 0; i < taulukko.Length; i++)
if (i > 5) Console.WriteLine(taulukko[i]);
Korvaa(taulukko);
foreach (int i in taulukko)
Console.Write(i + " ");
}
public static void Korvaa(int[] taulukko)
{
taulukko = new int[] { 1,2,3 };
}
}
Jaollisuus ja operaattorit
Kirjoita aliohjelma static bool Prime(int n)
joka kertoo, onko luku n
alkuluku.
Solunjakautuminen
Vaihe 1
Tee funktio JaaSolut
, joka ottaa parametrina A ja B kirjaimia sisältävän merkkijonon ja muuttaa jokaista sen kirjainta seuraavien sääntöjen mukaisesti:
- "A" \(\rightarrow\) "AB"
- "B" \(\rightarrow\) "A"
Lopuksi funktio palauttaa lopullisen merkkijonon. Saat olettaa, että parametrina tuleva merkkijono sisältää vain A ja B kirjaimia.
Esimerkkejä funktion toiminnasta:
JaaSolut("A") === "AB"
JaaSolut("AB") === "ABA"
JaaSolut("ABA") === "ABAAB"
JaaSolut("ABAAB") === "ABAABABA"
Voit halutessasi käyttää alla olevaa pääohjelmaa tai kirjoittaa oman:
public static void Main()
{
string alkutilanne = "ABA";
string tulos = JaaSolut(alkutilanne);
Console.WriteLine("Solut jakautumisen jälkeen: " + tulos);
}
Vaihe 2
Tämä on jatkoa ensimmäiselle vaiheelle ja tämän voi tehdä samaan projektiin sen kanssa.
Tee funktio TeeGeneraatio
, joka jakaa soluja JaaSolut
funktion avulla parametrina annetun luvun verran ja palauttaa lopputuloksen. Nolla palauttaa pelkän merkkijonon "A" ja negatiiviset luvut antavat tyhjän merkkijonon.
Esimerkiksi jos parametrina annetaan luku 3, niin alkutilannetta "A" jaetaan kolme kertaa, jolloin lopputuloksena saadaan "ABAAB".
Esimerkkejä funktion toiminnasta:
TeeGeneraatio(-1) === ""
TeeGeneraatio(0) === "A"
TeeGeneraatio(1) === "AB"
TeeGeneraatio(2) === "ABA"
TeeGeneraatio(3) === "ABAAB"
TeeGeneraatio(4) === "ABAABABA"
Voit halutessasi käyttää alla olevaa pääohjelmaa tai kirjoittaa oman:
public static void Main()
{
string tulos = TeeGeneraatio(4);
Console.WriteLine("Solut neljännen jakautumisen jälkeen: " + tulos);
}
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.