Monisteen numerointia noudattaen (* = 4 suositeltavaa):
- 1.
- Ks. tehtäviä 4.9 ja
4.10. Tehdään järjestämisalgoritmista vielä
yksi versio k-kirjaimisille nimille (meillä on lappuja,
joissa on jokaisessa yksi sana jossa on k kpl
kirjaimia):
0. i = k
1. Laita i:n kirjaimen mukaan kukin lappu omaan kasaansa nurinpäin
2. i = i - 1
3. Kerää kasat oikeinpäin päällekkäin siten että ylimmäksi tulee A-kasa
4. jos i > 0, niin jatka 1.
5. Nimet järjestyksessä.
-
- Jos jokaisessa nimessä olisi 10 kirjainta, niin mikä
olisi tämän "jakamisalgoritmin" kompleksisuus (karkeasti ottaen: montako kertaa kutakin lappua pitäisi katsoa)?
- 2.
- Kokeile puolitushakua puhelinluetteloon 3:lla keksimälläsi nimellä (joku esiintyy luettelossa, joku ei).
Kirjaa ylös "nimien katsomisten" lukumäärä kussakin tapauksessa. Vastaako tehtävässä
4.17 saatua kompleksisuutta O-mielessä ( O(log
n), esim. merkintä O(n) tarkoittaa että operaatioiden
määrä on muotoa k1 * n + k2)?
- 3.
- Algoritmi Napoleonin hauta pasianssiin sen
tarkistamiseksi, käykö tutkittava kortti tiettyyn
"pakkaan" ja voiko toisaalta jostakin pakasta ottaa
kortin. Ks. liite ja koeta
keksiä taulukkopohjainen toteutus jossa "kaikki" pakat
ovat "samanlaisia"! (ks.
n:\kurssit\vclclx\delphi\korttipe\napoleon.exe).
- 4*.
- Keksi ilman lajittelua toimiva algoritmi joka siirtää
pöydälle levitetystä korttipakasta punaiset kortit vasempaan laitaan ja mustat oikeaan laitaan (vaikkei punaisia ja mustia olisi yhtä monta). Vihje: ks.
tehtävä 4.21. Käytä "osoittimia".
- 5*.
- Olkoon päiväys muodossa pp.kk. Kirjoita algoritmi, joka lisää päiväystä yhdellä (esim. 25.1 + 1 => 26.1,
31.1 + 1 => 1.2 jne.).
- 6*.
- Kirjoita C++ funktiot kertoman laskemiseksi sekä
do-while -silmukalla että while -silmukalla.
n! = 1*2*3...n-1*n, esim 3! = 1*2*3 = 6
0! = 1
-
- Pöytätestaa (ks. 5.4.2) algoritmisi syötöillä 0,3 ja 6.
- 7.
- Sijoita 3 korttia kohdan
5.4.5 2-ulotteiseen mallitaulukkoon sekä tee tehtävä 5.34
(muttei mallitehtävän vastauksia).
- 8*.
- "Sievennä" seuraavat ehdot:
a) ei hyväksytty joss ( dp < 40% tai vk1 < 6 tai summa < 12 )
b) ei lennä ulos kapakasta joss (kello < 1.00 ja selvinpäin)
c) NOT ( vikoja>90% AND kesto<5 kk)
d) ( (kello<7) tai sataa ) ja NOT ( ( kello>=7 ) ja ei sumua )
e) kotiin jos ( pimeä ja kylmä ) tai ( pimeä ja pelottaa )
- B1.
- Täydennä liitteenä oleva etu- ja sukunimen
vaihtamisohjelma
(n:\kurssit\cpp\moniste\demo\c-ohj\etusuku.cpp).
- G1-2
- Tee funktio pisteet, jolle viedään parametrinä
merkkijono (jonon oltava samaa muotoa kuin yksi
files.txt:ssä oleva rivi) ja funktio palauttaa reaalilukuna pisteiden lukumäärän.
Esimerkkejä riveistä ja siitä, mitä palautetaan:
teht1.txt = [T1-2:1.5] - oikea muoto => 1.5
teht1.txt = [T1-2,1.5] - ei : => 0.0
teht1.txt = (T1-2:1.5) - väärät sulut => 0.0
teht1.txt = [T1-2:1,5] - pilkku eikä piste => 1.0
teht1.txt = T1-2:1.5 - sulut puuttuu => 0.0
teht1.txt [T1-2:1.5] - =-merkki puuttuu => 0.0
teht1.txt = [1-2:1.5] - T-merkki puuttuu => 0.0
teht1.txt = [B1-2:1.5] - T-merkki puuttuu => 0.0