Oppvarming til Algdat
Å trene på å kode er utrolig bra for selvfølelsen (du blir flinkere),
selvtillitten (du er flink), programmeringsøvingene (du kan kodingen,
og kan konsentrere deg om algoritmen) og karakterene (i fag med
koding/forståelse innen programmering som en del av karakteren).
Derfor vil vi anbefale at du prøver disse små øvingene med varierende
vanskelighet.
Selv om vanskelighetsgraden er angitt til lett/middels, betyr ikke
det at alle synes de er lette. Graden er ment å reflektere
oppgavenes vanskelighet i forhold til hverandre.
Om du lurer på noe kan du studere løsningsforslagene inngående.
Prøv gjerne å sette inn din kode i stedet for løsningsforslagets
metoder, for å se hvordan koden din fungerer med test-dataene
i løsningsforslaget. Ta kontakt dersom du tror du har funnet
en feil i et løsningsforslag!
Tabeller
1. (lett, lf)
Gitt en tabell av typen int[],
skriv en kodesnutt som finner følgende verdier:
- Minste verdi
- Største verdi
- Gjennomsnittsverdi
- Median
- Typetall (det tallet som forekommer oftest)
2. (lett, lf)
Gitt en tabell temp av typen
int[][][] der temp[x][y][t] representerer
temperaturen i punktet (x, y) ved tidspunkt
t, finn verdiene x, y, og
t som maksimerer uttrykket
|temp[x][y][t+1]-temp[x][y][t]|, det vil si det punktet i
tid/rom der det forekom størst temperaturendring.
3. (vanskelig, lf)
Gitt en tabell dist av typen
int[][] og to verdier a og b av
typen int, der dist[x][y] er avstanden
mellom to byer x og y. Dersom avstanden
er 0, betyr det at det ikke går noen vei mellom byene! Skriv en kodesnutt
som avgjør om du kan komme deg fra a til b
ved hele tiden å følge den korteste veien ut fra den byen du befinner
deg i (med a som første by, naturligvis). Merk at du må
holde rede på hvilke byer du har besøkt, siden hvis du besøker samme
by to ganger så er du inne i en uendelig løkke...
Når vi sier den korteste veien ut, mener vi den veien som er kortest
av de veiene som ikke fører til en by du har vært i før.
Løkker, betinget utførelse, og enkel abstraksjon
4. (middels, lf)
Du får oppgitt medisineringsregler for en rekke
medisiner, og skal generere en plan for
medisinering. Medisineringsreglene kan være av typen "jerntabletter
skal gis hver tredje time, fra kl. 08:00", eller "antibiotika skal gis kl. 08:00 og
kl. 20:00" etc. Planen skal liste opp hvilke medisiner som skal gis
til ethvert tidspunkt (anta at det kun er snakk om hele timer), f.eks.:
00:00
01:00
...
08:00 Jern, Antibiotika
09:00
10:00
11:00 Jern
...
20:00 Jern, Antibiotika
a) Hvordan vil du representere reglene?
b) Skriv programmet som lager rapporten.
Rekursjon
5. (middels, lf)
Gitt en tabell bilde av typen
int[][], der heltallet bilde[i][j]
representerer fargen i pixel (i, j) i
et bilde, lag et program som fargelegger et ensfarget område med en ny
farge. La programmet få input int a og
int b slik at fargeleggingen kan starte i
pixel (a, b).
6. (middels, lf)
Gitt en tabell av typen char[] som kun inneholder tegnene
'[', ']', '(' og
')', lag et program som undersøker om parantesuttrykket
er balansert. For at et uttrykk skal være balansert må det
tilfredsstille ett av disse punktene:
- Ha lengde 0.
- Bestå av et balansert uttrykk i mellom
'(' og
')'.
- Bestå av et balansert uttrykk i mellom
'[' og
']'.
- Bestå av to balanserte uttrykk etter hverandre.
Noen eksempler på balanserte parantesuttrykk blir da:
"", "[]", "()[]",
"[()]([])", "([()]([]))" og
"[][]".
|
 |