All pastes #282640 Raw Edit

Anonymous

public text v1 · immutable
#282640 ·published 2006-12-17 19:38 UTC
rendered paste body
// Løsningsforslag til eksamen høsten 2005 oppgave 2 VHC, BK og GS

import static javax.swing.JOptionPane.*; // ekstra pga. klientprogram

OPPGAVE A)
class Tale {
  private String innledning;
  private String hoveddel;
  private String avslutning;

  public Tale(String startInnledning, String startHoveddel, String startAvslutning) {
    innledning = startInnledning;
    hoveddel = startHoveddel;
    avslutning = startAvslutning;
  }

  public String finnInnledning() {
    return innledning;
  }

  public String finnHoveddel() {
    return hoveddel;
  }

  public String finnAvslutning() {
    return avslutning;
  }

OPPGAVE B)
  public String toString() {
    return innledning + hoveddel + avslutning;
  }

OPPGAVE C)
  public void lagNyTale(Tale annenTale) {
    hoveddel = hoveddel + annenTale.finnHoveddel();
    avslutning = annenTale.finnAvslutning();
  }

OPPGAVE D)
  public int finnAntallForekomster(String ord) {
    String talen = toString();
    int antallForekomster = 0;
    int posisjon = -1; // pga. da starter letingen på posisjon 0 i løkka
    do {
      posisjon = talen.indexOf(ord, posisjon + 1); // vi leter fra forrige posisjon pluss en
      antallForekomster++;
    } while (posisjon != -1);
    antallForekomster--; // har telt opp en for mye i løkka
    return antallForekomster;
  }

OPPGAVE E)
  public boolean erBortgjemt(String ord) {
    // undersøker om tegnene i ord forekommer i talen i opprinnelig rekkefølge
    String talen = toString();
    int posisjon = 0; // vi skal lete i talen f.o.m. denne posisjonen
    boolean tegnFinnes = true;
    int i = 0;
    while (tegnFinnes && i < ord.length()) { // vi går gjennom ordet tegn for tegn
      char tegn = ord.charAt(i);
      int nyPosisjon = talen.indexOf(tegn, posisjon);
      if (nyPosisjon == -1) tegnFinnes = false;
      if (nyPosisjon == posisjon) posisjon = nyPosisjon + 1; // pga. samme tegn gjentas i ord
      else posisjon = nyPosisjon;
      i++;
    }
    return tegnFinnes;
  }

} // Tale


// EKSTRA KLASSE FOR TESTFORMÅL SOM DET IKEK ER SPURT ETTER I OPPGAVEN:
class TaleTest {
  public static void main(String[] args) {
    int flereTaler = NO_OPTION;

    do {
      String innledning = showInputDialog("Oppgi talens innledning");
      String hoveddel = showInputDialog("Oppgi talens hoveddel");
      String avslutning = showInputDialog("Oppgi talens avslutning");
      Tale talen = new Tale(innledning, hoveddel, avslutning);
      showMessageDialog(null, "Hele talen: " + talen);

      String inngrepLest = showInputDialog("Antall inngrep på talen?");
      int inngrep = Integer.parseInt(inngrepLest);
      for (int i = 0; i < inngrep; i++) {

        String forekommer = showInputDialog("Hva kan forekomme? " + talen);
        showMessageDialog(null, forekommer + " forekommer " + talen.finnAntallForekomster(forekommer));

        String bortgjemt = showInputDialog("Hva kan være bortgjemt?" + talen);
        if (talen.erBortgjemt(bortgjemt)) showMessageDialog(null, bortgjemt + " er bortgjemt");
        else showMessageDialog(null, bortgjemt + " er ikke bortgjemt");

        talen.erstattÅInnledningsvis();
        showMessageDialog(null, "Erstattet å med aa: " + talen);
      }
      flereTaler = showConfirmDialog(null, "Flere taler?", "Taleprogrammet", YES_NO_OPTION);
    } while (flereTaler == YES_OPTION);
  }
} // TaleTest




Løsningsforslag til eksamen høsten 2005 oppgave 1
VHC 4. desember 2005

OPPGAVE A)
Siden && har høyere prioritet enn ||, skal uttrykket leses slik:

a < 9   ||   (b < a / b   &&   a + b == 13   &&   a * b < 42)

a er lik 10 og b er lik 3.

Venstre operand i ||-uttrykket: 10 < 9: false
Høyre operand i ||-uttrykket:
  3 < 10 / 3, altså 3 < 3: false
  10 + 3 == 13: true
  10 * 3 < 42: true
så da har vi (false && true) && true, altså false && true, altså false.

Siden både venstre og høyre operand er false, blir hele ||-uttrykket false.


OPPGAVE B) 
i får verdien 27 / 5, altså 5. j får verdien 27 % 5, altså 2.
svar får da verdien 5 / 2 + 27 / 5 altså 2 + 5, altså 7.
Så utskriften blir:
Svar: 7


OPPGAVE C)
En komposisjon er en en-del-av-sammenheng der livet til delen er uløselig knyttet til det objektet den er en del av.

Eksempel fra læreboka delkapittel 8.2, det viktigste er:

class Navn {
  ...
}

class Student {
  private Navn navn;
  ...
  
  public Student(String startFornavn, String startEtternavn,...) {
    navn = new Navn(startFornavn, startEtternavn);
    ...
  }

  public String finnFornavn() {
    return navn.finnFornavn();
  }

  public String settFornavn(String nyttFornavn) {
    navn.settFornavn(nyttFornavn);
  }

  ... tilsvarende for etternavn...
}

Navn-objektet opprettes inni Student-objektet og administreres derfra. Klienter får ikke tilgang til Navn-objektet. De kan riktignok få tak i fornavnet og etternavnet, men kan ikke endre dem siden strenger er immutable.