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