Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Skolenyttig
  • Forum
eksamenssett.noTren målrettet

Komplett samling av eksamensoppgaver og løsninger for norsk skole.

Om ossFAQPersonvernVilkårAngrerettKontakt

© 2025 Eksamenssett.no · Alle rettigheter forbeholdt

Innholdet er utviklet med AI-verktøy og kvalitetssikres kontinuerlig. Slik jobber vi med kvalitet →

Eksamenssett.no eies og drives av Studenthjelp Privatundervisning AS

Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Skolenyttig
  • Forum
eksamenssett.noTren målrettet

Komplett samling av eksamensoppgaver og løsninger for norsk skole.

Om ossFAQPersonvernVilkårAngrerettKontakt

© 2025 Eksamenssett.no · Alle rettigheter forbeholdt

Innholdet er utviklet med AI-verktøy og kvalitetssikres kontinuerlig. Slik jobber vi med kvalitet →

Eksamenssett.no eies og drives av Studenthjelp Privatundervisning AS

Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Skolenyttig
  • Forum
eksamenssett.noTren målrettet

Komplett samling av eksamensoppgaver og løsninger for norsk skole.

Om ossFAQPersonvernVilkårAngrerettKontakt

© 2025 Eksamenssett.no · Alle rettigheter forbeholdt

Innholdet er utviklet med AI-verktøy og kvalitetssikres kontinuerlig. Slik jobber vi med kvalitet →

Eksamenssett.no eies og drives av Studenthjelp Privatundervisning AS

Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Skolenyttig
  • Forum
eksamenssett.noTren målrettet

Komplett samling av eksamensoppgaver og løsninger for norsk skole.

Om ossFAQPersonvernVilkårAngrerettKontakt

© 2025 Eksamenssett.no · Alle rettigheter forbeholdt

Innholdet er utviklet med AI-verktøy og kvalitetssikres kontinuerlig. Slik jobber vi med kvalitet →

Eksamenssett.no eies og drives av Studenthjelp Privatundervisning AS

Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Skolenyttig
  • Forum
  1. Hjem
  2. Informasjonsteknologi
  3. IT 2 – Diverse språk
  4. Løsning Vår 2024
VG3

Løsningsforslag Informasjonsteknologi IT 2 – Diverse språkVår 2024

Se eksamensoppgaven
Høst 2024NyereHøst 2023Eldre
Om løsningsforslaget: Dette er et veiledende løsningsforslag laget av eksamenssett.no for REA3049 (Diverse språk) Vår 2024. På IT 2 «Diverse»-eksamen kan du velge fritt blant programmeringsspråk som ikke er Python/JavaScript/C# — typisk Java, C++, Kotlin eller Ruby. Vi viser løsningene i Java som den vanligste «diverse»-varianten.

Løsningsforslag – IT 2 Diverse (Java) Vår 2024

Eksamen: REA3049 | Semester: Vår 2024 | Tema: OOP, pseudokode, Fibonacci, kalkulator, deepfakes, tidsbruk-datasett, Game of Life

Oppgave 1 – Hva er en klasse?

Riktig svar: En klasse er en mal eller en prototype for objekter.

I Java er klasser nettopp maler — du oppretter objekter med new-operatoren basert på klassen.

Oppgave 2 – Arv og klasserelasjoner

Riktig svar: B er en spesialisering av A.

I Java skrives dette som class B extends A. B har alle A's metoder og kan i tillegg legge til nye eller overstyre eksisterende.

Oppgave 3 – Sporing av pseudokode

Riktig svar: 5 8 10
aDISPLAY cb etter DECREMENTc etter c+b
2535+3 = 8
3828+2 = 10
410110+1 = 11

Oppgave 4 – Sortering av pseudokode

SET num to -2
FOR hver num LESSER THAN OR EQUAL TO 2
  IF num LESSER THAN 0
    IF num % 2 EQUAL TO 0
      DISPLAY num + " er negativt og partall"
    ELSE
      DISPLAY num + " er negativt og oddetall"
    ENDIF
  ELSE IF num EQUAL TO 0
    DISPLAY num + " er null"
  ELSE
    IF num % 2 EQUAL TO 0
      DISPLAY num + " er positivt og partall"
    ELSE
      DISPLAY num + " er positivt og oddetall"
    ENDIF
  ENDIF
ENDFOR

Oppgave 5 – Fibonacci-tall

5a Svar: 55 (F10)

Oppgave 5b – Forklaring

Algoritmen genererer Fibonacci-tallene iterativt: hvert nytt tall er summen av de to foregående, med startverdiene 0 og 1. Iterativ tabulering gir O(n) tid og O(n) plass — mye raskere enn naiv rekursjon.

Oppgave 5c – De ti første Fibonacci-partall (Java)

// FibonacciPartall.java
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

public class FibonacciPartall {
    public static List<BigInteger> fibonacciPartall(int antall) {
        BigInteger a = BigInteger.ZERO, b = BigInteger.ONE;
        List<BigInteger> partall = new ArrayList<>();
        while (partall.size() < antall) {
            if (a.mod(BigInteger.TWO).equals(BigInteger.ZERO)) partall.add(a);
            BigInteger nestneste = a.add(b);
            a = b; b = nestneste;
        }
        return partall;
    }
    public static void main(String[] args) {
        System.out.println(fibonacciPartall(10));
        // [0, 2, 8, 34, 144, 610, 2584, 10946, 46368, 196418]
    }
}
Hvorfor BigInteger? Det 30. Fibonacci-tallet overskrider int-grensen, det 90. overskrider long. Ved å bruke BigInteger unngår vi overflyt uavhengig av hvor langt vi går.

Oppgave 6 – Kalkulator-klasse

// Kalkulator.java
public class Kalkulator {
    public double pluss(double a, double b) { return a + b; }
    public double minus(double a, double b) { return a - b; }
    public double gange(double a, double b) { return a * b; }
    public double dele(double a, double b) {
        if (b == 0) throw new ArithmeticException("Kan ikke dele på null.");
        return a / b;
    }
}

// TestKalkulator.java
public class TestKalkulator {
    public static void main(String[] args) {
        Kalkulator k = new Kalkulator();
        assert k.pluss(2, 3) == 5;
        assert k.minus(10, 4) == 6;
        assert k.gange(3, 7) == 21;
        assert k.dele(20, 4) == 5;

        // Feil 1: Deling på null
        try { k.dele(10, 0); }
        catch (ArithmeticException e) { System.out.println("OK – fanget: " + e.getMessage()); }

        // Feil 2: Deling på 0.0 returnerer Infinity (ikke unntak for double)
        System.out.println("10.0 / 0.0 = " + (10.0 / 0.0));  // Infinity

        // Unntak: Overflyt for int
        // k.gange(Integer.MAX_VALUE, 2) returnerer korrekt double-resultat,
        // men hvis vi byttet til int-baserte metoder ville det wrappet.

        System.out.println("Tester ferdig.");
    }
}

Identifiserte feil/unntak: (1) Deling på null — kaster ArithmeticException for int, returnerer Infinity/NaN for double (Java 9+). (2) Overflyt for heltall — Java sjekker ikke int-overflyt automatisk; Math.addExact() gir feil ved behov. (Unntak) NumberFormatException ved parsing av ugyldig brukerinput.

Oppgave 7 – Deepfakes (flervalg)

Spm.Riktig svar
a) Hva er deepfakes?manipulerte medier
b) Mulig konsekvens?økt risiko for politisk manipulering
c) Hvordan avsløre?ved å bruke teknikker fra kildekritikk

Oppgave 8 – Deepfakes (drøfting)

Oppgave 8a – Avsløre og forebygge svindel

Avsløring: Lytt etter unaturlige pauser og robotiske intonasjoner. På video — se etter ujevn belysning, kanter mellom ansikt og bakgrunn som flimrer, unaturlige blunkemønstre. Ved kritiske beslutninger — særlig økonomiske transaksjoner — verifisere alltid gjennom en annen kanal.

Forebygging i bedriften:

  • Verifikasjonsrutine: Obligatorisk «callback» for transaksjoner over et terskelnivå.
  • Kodeord som ledelsen bruker til å bekrefte identitet.
  • Opplæring med simulerte angrep.
  • Tekniske verktøy: Deepfake-deteksjon i videomøteplattformer.
  • To-faktor-godkjenning for kritiske beslutninger.

Oppgave 8b – Deepfakes i jobbsøkerprosessen

For: Realistiske press-scenarier kan avsløre faglig modenhet bedre enn et tradisjonelt intervju. Ved åpenhet og samtykke kan det være legitimt for stillinger der krisemestring er kritisk.

Mot:

  • Samtykke og transparens: Hvis kandidaten ikke vet at hen møter deepfakes, krenkes prinsippet om informert samtykke (GDPR art. 5).
  • Kandidatens biometri: Krever særskilt grunnlag etter GDPR art. 9. Hvor lagres modellen?
  • Strukturell skjevhet: Simuleringer kan forsterke fordommer.
  • Stress: Deepfake-scenarier kan være skadelige for personer med angstlidelser.
  • Tillit: En kandidat som har vært utsatt for deepfake-vurdering, kan utvikle mistillit til arbeidsgiver.

Konklusjon: Deepfakes i ansettelsesprosesser kan ha legitime formål, men forutsetter eksplisitt samtykke, klare retningslinjer for sletting av biometriske data, og grundig etisk evaluering.

Oppgave 9 – Tidsbruk-datasett

// Oppgave9.java — analyse av SSB-tidsbruk-datasett (2000)
import java.io.*;
import java.util.*;

public class Oppgave9 {
    private static int tidTilMinutter(String s) {
        if (s == null || s.isEmpty()) return 0;
        String[] del = s.split("\\.");
        return Integer.parseInt(del[0]) * 60 + (del.length > 1 ? Integer.parseInt(del[1]) : 0);
    }

    private static List<Map<String, String>> lesData(String filsti) throws IOException {
        List<Map<String, String>> rader = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader(filsti))) {
            String[] headers = br.readLine().split(";");
            String linje;
            while ((linje = br.readLine()) != null) {
                String[] verdier = linje.split(";", -1);
                Map<String, String> rad = new LinkedHashMap<>();
                for (int i = 0; i < headers.length; i++) {
                    rad.put(headers[i], i < verdier.length ? verdier[i] : "");
                }
                rader.add(rad);
            }
        }
        return rader;
    }

    private static void visTabell(List<Map<String, String>> data, String kjonn) {
        System.out.printf("%n%-28s%-10s%10s%n", "Aktivitet", "Kjønn", "Tidsbruk");
        System.out.println("-".repeat(48));
        for (Map<String, String> r : data) {
            if (kjonn.equals("Alle") || r.get("Kjønn").equals(kjonn)) {
                System.out.printf("%-28s%-10s%10s%n", r.get("Aktivitet"), r.get("Kjønn"), r.get("Tidsbruk"));
            }
        }
    }

    // Stolpediagram som SVG (Java har ingen innebygd diagram-bibliotek)
    private static void stolpeSvg(List<Map<String, String>> data, String kjonn) throws IOException {
        List<Map<String, String>> rader = data.stream()
            .filter(r -> r.get("Kjønn").equals(kjonn))
            .toList();
        int bredde = 800, hoyde = 500, padding = 80;
        int stolpebredde = Math.max(10, (bredde - padding * 2) / rader.size() - 4);
        int maks = rader.stream().mapToInt(r -> tidTilMinutter(r.get("Tidsbruk"))).max().orElse(1);

        StringBuilder svg = new StringBuilder();
        svg.append("<svg xmlns='http://www.w3.org/2000/svg' width='").append(bredde)
           .append("' height='").append(hoyde).append("'>");
        for (int i = 0; i < rader.size(); i++) {
            int v = tidTilMinutter(rader.get(i).get("Tidsbruk"));
            int h = (hoyde - padding * 2) * v / maks;
            int x = padding + i * (stolpebredde + 4);
            int y = hoyde - padding - h;
            svg.append("<rect x='").append(x).append("' y='").append(y)
               .append("' width='").append(stolpebredde).append("' height='").append(h)
               .append("' fill='#1976D2'/>");
        }
        svg.append("</svg>");
        try (FileWriter fw = new FileWriter("stolpe_" + kjonn.toLowerCase() + ".svg")) {
            fw.write(svg.toString());
        }
        System.out.println("Stolpediagram lagret som SVG.");
    }

    public static void main(String[] args) throws IOException {
        List<Map<String, String>> data = lesData("tidsbruk_2000.csv");
        Scanner sc = new Scanner(System.in);
        System.out.print("Velg kjønn (Alle / Menn / Kvinner): ");
        String raw = sc.nextLine().trim();
        String kjonn = raw.substring(0, 1).toUpperCase() + raw.substring(1).toLowerCase();
        visTabell(data, kjonn);
        if (!kjonn.equals("Alle")) stolpeSvg(data, kjonn);
    }
}

Oppgave 10 – Game of Life (Java Swing)

// GameOfLife.java — Conways Game of Life i Java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class GameOfLife extends JPanel {
    private static final int RUTER = 30;
    private static final int CELLE = 18;
    private static final double START_LEVENDE = 1.0 / 3;

    private boolean[][] celler = new boolean[RUTER][RUTER];
    private boolean kjorer = false;
    private final Timer timer;

    public GameOfLife() {
        Random rng = new Random();
        for (int r = 0; r < RUTER; r++)
            for (int k = 0; k < RUTER; k++) celler[r][k] = rng.nextDouble() < START_LEVENDE;
        setPreferredSize(new Dimension(RUTER * CELLE, RUTER * CELLE));
        timer = new Timer(200, e -> { nesteGenerasjon(); repaint(); });
        addMouseListener(new MouseAdapter() {
            @Override public void mousePressed(MouseEvent e) {
                int r = e.getY() / CELLE, k = e.getX() / CELLE;
                if (r >= 0 && r < RUTER && k >= 0 && k < RUTER) {
                    celler[r][k] = !celler[r][k];
                    repaint();
                }
            }
        });
    }

    public void toggle() { kjorer = !kjorer; if (kjorer) timer.start(); else timer.stop(); }
    public void tom() { kjorer = false; timer.stop();
        for (int r = 0; r < RUTER; r++) for (int k = 0; k < RUTER; k++) celler[r][k] = false;
        repaint();
    }
    public void ettSteg() { nesteGenerasjon(); repaint(); }

    private int levendeNaboer(int r, int k) {
        int n = 0;
        for (int dr = -1; dr <= 1; dr++)
            for (int dk = -1; dk <= 1; dk++) {
                if (dr == 0 && dk == 0) continue;
                int nr = r + dr, nk = k + dk;
                if (nr >= 0 && nr < RUTER && nk >= 0 && nk < RUTER && celler[nr][nk]) n++;
            }
        return n;
    }

    private void nesteGenerasjon() {
        boolean[][] ny = new boolean[RUTER][RUTER];
        for (int r = 0; r < RUTER; r++)
            for (int k = 0; k < RUTER; k++) {
                int n = levendeNaboer(r, k);
                ny[r][k] = celler[r][k] ? (n == 2 || n == 3) : (n == 3);
            }
        celler = ny;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (int r = 0; r < RUTER; r++)
            for (int k = 0; k < RUTER; k++) {
                g.setColor(celler[r][k] ? new Color(26, 43, 74) : new Color(250, 250, 250));
                g.fillRect(k * CELLE, r * CELLE, CELLE - 1, CELLE - 1);
            }
    }

    public static void main(String[] args) {
        JFrame f = new JFrame("Game of Life");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        GameOfLife spill = new GameOfLife();
        f.setLayout(new BorderLayout());
        f.add(spill, BorderLayout.CENTER);
        JPanel knapper = new JPanel();
        JButton bToggle = new JButton("Start/Pause"); bToggle.addActionListener(e -> spill.toggle());
        JButton bSteg = new JButton("Steg"); bSteg.addActionListener(e -> spill.ettSteg());
        JButton bTom = new JButton("Tøm"); bTom.addActionListener(e -> spill.tom());
        knapper.add(bToggle); knapper.add(bSteg); knapper.add(bTom);
        f.add(knapper, BorderLayout.SOUTH);
        f.pack(); f.setLocationRelativeTo(null); f.setVisible(true);
    }
}
Hovedpunkter:
  • Synkron oppdatering via separat ny-array er kritisk for korrekt Game of Life.
  • De fire reglene implementeres kompakt i én linje.
  • Swing/Timer kjører simuleringen på Event Dispatch Thread.
  • Klikk på celle for å veksle tilstand; tre knapper for kontroll.

Oppgave 11 – Innlevering

123456/
├── oppgave5c/FibonacciPartall.java + flytskjema.pdf
├── oppgave6/Kalkulator.java + TestKalkulator.java
├── oppgave9/Oppgave9.java + tidsbruk_2000.csv
├── oppgave10/GameOfLife.java
└── README.md   (Java 17+)
Laster…
Nyere løsning
Høst 2024
Eldre løsning
Høst 2023

Alle løsningsforslag for IT 2 – Diverse språk

Vår 2025Høst 2024Vår 2024Høst 2023
Se eksamensoppgaven
eksamenssett.noTren målrettet

Komplett samling av eksamensoppgaver og løsninger for norsk skole.

Om ossFAQPersonvernVilkårAngrerettKontakt

© 2025 Eksamenssett.no · Alle rettigheter forbeholdt

Innholdet er utviklet med AI-verktøy og kvalitetssikres kontinuerlig. Slik jobber vi med kvalitet →

Eksamenssett.no eies og drives av Studenthjelp Privatundervisning AS