IN2090-ukesoppgaver: Uke 1
Motivasjon for databaser og datamodellering
Oppgavene denne f?rste uken handler ikke direkte om pensum, men gir en motivasjon til hvorfor det vi skal gjennomg? i kurset er nyttig og n?dvendig.
De f?rste tre oppgavene bruker tre CSV-filer. CSV er et enkelt format for ? lagre data p? tabell-form. I en CSV fil inneholder f?rste linje en komma-separert liste med kolonne-navn, mens de etterf?lgende linjene representerer radene i tabellen hvor hver kolonnes verdi er separert med komma.
Innholdet i de tre filene som oppgavene under bruker er gitt under:
studenter.csv:
studeintid, fornavn, etternavn, f?dt
1, kari, borg, 1993-02-23
2, per, nes, 1996-07-08
3, mina, gran, 1990-11-03
4, carl, smith, 1992-09-05
tar_kurs.csv:
studentid, kurskode, karakter
1, IN2090, B
1, IN2020, C
2, IN2000, C
3, MAT2250, A
1, AST1010, D
4, FYS2000, C
2, BIOS3010, A
4, IN3000, C
2, INF4000, B
3, MAT1100, E
kurs.csv:
kurskode, navn, studiepoeng
AST1010, Astronomi - en kosmisk reise, 10
MAT2250, Diskret matematikk, 10
IN2000, Software Engineering med prosjektarbeid, 20
BIOS3010, Bioinformatikk, 10
IN1010, Objektorientert programmering, 10
MAT1100, Kalkulus, 10
IN2090, Databaser og datamodellering, 10
BIOS3300, Marinbiologi, 10
IN5360, Forskerlinjen II, 15
MAT1100, Kalkulus, 10
IN1150, Logiske metoder, 10
IN3000, Operativsystemer, 20
Den f?rste filen (studenter.csv) inneholder alts?
informasjon om studenter, deres (unike) student-id, fornavn, etternavn
og datoen de er f?dt. Den andre filen (tar_kurs.csv) sier
hvilke kurs ulike studenter har tatt (og referer til studenter med deres
student-id og kurs med deres kurskode), samt karakteren studenten fikk i
kurset. Den siste filen (kurs.csv) inneholder informasjon
om kurs, kursets (unike) kurs-kode, navn og antall studiepoeng.
S? f.eks. for ? finne navnet til alle kursene som kari
tar, m? vi f?rst finne hennes studentid i
studenter.csv-filen, s? finne kurskodene hun tar i
tar_kurs.csv, og s? til slutt sl? opp navnene p? disse
kursene i kurs.csv.
1. Finn studenter
Skriv psudokode (alternativt Python- eller Java-kode om du ?nsker)
for et program som lister opp navn (fornavn og etternavn) p? alle
studenter som har et etternavn som starter p? 'g'.
Du kan anta at du har en funksjon read_csv som tar en
streng som inneholder filnavnet til en CSV-fil, leser filen og
returnerer en liste med tupler som inneholder dataene i filen. Du kan
hente ut verdier fra tuplene som om de var arrays (hvor indeksene
starter p? 1), f.eks. vil t[1] gi ut det
f?rste elementet i tupplet t.
Ellers kan du bruke vanlige for- og
while-l?kker, if-tester, osv.
2. Finn kurs
Skriv et program (pseudokode, Python- eller Java-kode) som lister opp
kurskode og navn p? alle kurs med en kurskode som starter med
"IN", som er tatt av studenter som er f?dt etter 1. januar
1992. Sorter listen alfabetisk p? kurskode, og bare skriv ut hvert kurs
én gang.
Du kan gj?re de samme antagelsene her som i forrige oppgave. Du kan
ogs? anta at datoer kan sammenlikned med <, f.eks. vil
"1992-01-01" < "1993-04-05".
3. Lag rapport
Skriv et program (pseudokode, Python- eller Java-kode) som lager en
ny CSV-fil studenter_per_kurs.csv som inneholder
informasjon om kurs som er nyttig i analyse av kurs og studentene som
tar dem. Filen skal inneholde kurskode, navnet p? kurset, antall
studiepoeng, antall studenter som har tatt kurset og f?dselsdatoen til
den yngste som har tatt kurset. Dersom et kurs aldri er tatt skal det
likevel listes opp med antall lik 0 og den tomme strengen
som dato ("").
Du kan anta at du kan skrive en liste med tupler til en CSV-fil med
funksjonen csv_write(tupler, kolonner, filnavn) hvor
tupler er listen med tupler du ?nsker ? skrive,
kolonner er en liste med kolonne navn (som skal skrives
?verst i filen), og filnavn er navnet p? filen dataene skal
skrives til.
4. Strukturere data
Vi ?nsker n? ? lagre informasjon om resultatene fra en sjakk-turnering. Lag derfor CSV-filer som inneholder f?lgende informasjon:
- Kari Olesen, med deltakernummer 43 og nasjonalitet Norge, vant i partinummer 1 som hvit spiller over Clark Smith (som har deltakernummer 12 og nasjonalitet UK)
- Clark Smith, med deltakernummer 12 og nasjonalitet UK, vant i partinummer 3 som sort spiller over Laura Fritz (som har deltakernummer 7 og nasjonalitet Tyskland)
- Kari Olesen, med deltakernummer 43 og nasjonalitet Norge, spilte i partinummer 2 som sort spiller mot Laura Fritz (som har deltakernummer 7 og nasjonalitet Tyskland), og spillet endte i remis (alts? uavgjort)
Nytten av databaser og datamodellering
Disse oppgavene er ment ? vise at for ? jobbe med data kreves det mer enn bare vanlige programmeringsspr?k og file