The referenced paragraph does not exist.

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 StringBuilderin sijasta String-olio. Millä tavalla funktion toimintaa ja paluuarvoa tulee muuttaa, jotta se toimisi oikein? Miksi?

Täytyykö tentissä ottaa automaattisesti mahdollisimman kattavasti huomioon se, että käyttäjä voi syöttää ohjelmalle negatiivisia/positiivisia lukuja tai kokonaan väärää tyyppiä olevaa tietoa? Tuli mieleen tätä Taulukkotreeniä osa1:stä tehdessä.

Tämä riippuu tehtävästä. Yleensä olen tenttitehtävässä sanonut, millaiset asiat (esim. tyhjä syöte, vääränmuotoinen syöte, sallittu lukualue) on otettava huomioon. Tässä Osa 1 -tehtävässä ei syötealuetta näköjään oltu sanottu, mutta toisaalta jos vaikkapa k=-1, niin koska tehtävän mukaan potensseja luetellaan "nollasta alkaen", niin negatiivinen syöte ei oikeastaan pitäisi aiheuttaa ongelmia. -AJL

03 Apr 23 (edited 03 Apr 23)

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.