Emne: PROGRAMMERING |
Emnekode: LO 127 A |
Faglig veileder: Eva Vihovde | |
Grupper: 1AA, 1AB, 1AC, 1IA |
Dato: 23.02.2006 |
Eksamenstid: 09.00 - 14.00 | |
Eksamensoppgaven består av: | Antall sider (inkl. forsiden): 6 | Antall oppgaver: 3 | Antall vedlegg: 0 |
Tillatte hjelpemidler: | Alle trykte og håndskrevne | ||
Kandidaten må selv kontrollere at oppgavesettet er fullstendig. Ved eventuelle uklarheter i oppgaveteksten skal du redegjøre for de forutsetninger du legger til grunn for løsningen. |
Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.
Utarbeidet av (faglærer): | Kontrollert av (en av disse): | Studieleders/ Fagkoordinators underskrift: | ||
Annen lærer | Sensor | Studieleder/ Fagkoordinator | ||
|
Heltallsmengde
som representerer en mengde av ikke-negative hele tall. Arrayen element
brukes
til å indikere om et helt tall er med i (er element i) mengden eller ikke:
Dersom tallet er innenfor arrayens indeksområde og arrayen på denne indeksplass
har verdi true
, så er tallet med i mengden, ellers ikke. Det kan
altså ikke settes inn i mengden elementer som er utenfor arrayens indeksområde.
public class Heltallsmengde { private boolean[] element; // brukes som forklart ovenfor < Konstruktør med parameter som angir størrelse for arrayen element. Konstruktøren foretar nødvendig initialisering. > public int getKapasitet() { < Returnerer størrelse for arrayen element. > } public void settInnElement( int k ) { < Registrerer at k blir satt inn som element i mengden, forutsatt at dette er mulig. (Se innledningen ovenfor.) > } public void fjernElement( int k ) { < Registrerer at k ikke skal være element i mengden, i tilfelle det er nødvendig å gjøre det. > } public boolean inneholder( int k ) { < Returverdien indikerer om k er element i mengden eller ikke. > } public boolean erDelmengdeAv( Heltallsmengde m ) { < Returverdien indikerer om denne mengden er delmengde av den mengden m som er parameter, det vil si om alle elementer i denne mengden også er elementer i mengden m. > } public boolean erLik( Heltallsmengde h ) { < Returverdien indikerer om denne mengden er lik mengden h, det vil si om den inneholder nøyaktig de samme elementer som h. > } public String innhold() { < Returnerer mengdens elementer med et mellomrom mellom hvert element og inntil 20 elementer per linje. Dersom mengden er tom, skal metoden returnere Ø, som er symbolet for den tomme mengde. > } public Heltallsmengde union( Heltallsmengde h ) { < Returnerer en mengde som er unionen av denne mengde og den mengde som er parameter, det vil si som inneholder alle elementer som er i den ene eller i den andre av disse mengdene. > } public Heltallsmengde snitt( Heltallsmengde h ) { < Returnerer en mengde som er snittet av denne mengde og den mengde som er parameter, det vil si som inneholder alle elementer som er felles for de to mengdene. > } public Heltallsmengde minus( Heltallsmengde m ) { < Returnerer en mengde som er differensmengden av denne mengde og den mengde som er parameter, det vil si som inneholder alle elementer som er i denne mengde, men som ikke er i den mengde som er parameter. > } }Vær oppmerksom på at når det i metodene som er beskrevet i skissen inngår to mengder, kan disse være representert av arrayer som har ulik lengde. Metodene du skriver skal i størst mulig grad anvendes der du har bruk for dem i seinere deloppgaver. a) Programmer klassens konstruktør, samt metoden
getKapasitet
.
b) Programmer metodene settInnElement, fjernElement
og inneholder
.
c) Programmer metodene erDelmengdeAv
og
erLik
.
d) Programmer metoden innhold
.
e) Programmer metodene union
og snitt
.
f) Programmer metoden minus
.
Mengdeoperasjoner
som er skissert etter bildet lenger nede,
definerer et vindu som kan brukes til å teste ut metoder definert i klassen
Heltallsmengde
. Det blir opprettet to mengder av den typen
klassen definerer, den ene kan inneholde elementer i intervallet 0 til 60,
mens den andre kan inneholde elementer i intervallet 0 til 40. Følgende bilde
viser vinduet etter at det er satt inn noen elementer i hver av de to mengdene.
public class Mengdeoperasjoner extends JFrame implements ActionListener { private Heltallsmengde a, b; private JTextField afelt; // for tall som skal inn i eller ut av mengde a private JTextField bfelt; // for tall som skal inn i eller ut av mengde b private JButton aInn, aFjern, bInn, bFjern; private JTextArea mengdeA, mengdeB, union, snitt, aMinusB, relasjoner; public Mengdeoperasjoner() { super( "Mengdeoperasjoner" ); int aKap = 61, bKap = 41; a = new Heltallsmengde( aKap ); b = new Heltallsmengde( bKap ); < oppretter grafiske skjermkomponenter > aInn.addActionListener( this ); aFjern.addActionListener( this ); bInn.addActionListener( this ); bFjern.addActionListener( this ); Container c = getContentPane(); c.setLayout( new FlowLayout() ); c.add( new JLabel( "Element for mengde A (0.." + (aKap-1) + ")" ) ); c.add( afelt ); c.add( aInn ); c.add( aFjern ); c.add( new JLabel( "Element for mengde B (0.." + (bKap-1) + ")" ) ); c.add( bfelt ); c.add( bInn ); c.add( bFjern ); c.add( new JLabel( "Innhold i A" ) ); c.add( new JScrollPane( mengdeA ) ); c.add( new JLabel( "Innhold i B" ) ); c.add( new JScrollPane( mengdeB ) ); c.add( new JLabel( "A union B" ) ); c.add( new JScrollPane( union ) ); c.add( new JLabel( "A snitt B" ) ); c.add( new JScrollPane( snitt ) ); c.add( new JLabel( "A minus B" ) ); c.add( new JScrollPane( aMinusB ) ); c.add( new JLabel( "Relasjoner" ) ); c.add( new JScrollPane( relasjoner ) ); } public void settInn( Heltallsmengde m, int verdi ) { < Registrerer at parameteren verdi blir satt inn i mengden m. > } public void fjern( Heltallsmengde m, int verdi ) { < Registrerer at parameteren verdi blir fjernet fra mengden m. > } public void skrivMengdeinnhold( Heltallsmengde m, JTextArea t ) { < Skriver ut innholdet av mengden m i tekstområdet t. > } public void skrivMengder() { < Skriver ut innhold av mengder, tilsvarende som vist på vindusbildet ovenfor. > } public void skrivMengderelasjoner() { < Skriver ut relasjoner mellom mengder, tilsvarende som det er vist på det nederste tekstområdet på vindusbildet ovenfor. > } < En metode som foretar riktige metodekall, avhengig av hvilken knapp det blir klikket på. > }a) Programmer metodene
settInn
og fjern
.
b) Programmer metodene skrivMengdeinnhold
og
skrivMengder
.
c) Programmer metoden skrivMengderelasjoner
.
d) Programmer den metode som er beskrevet nederst i skissen
ovenfor, den som skal foreta riktige metodekall.
e) Programmer følgende metode, som kan være en utvidelse av
applikasjonen:
public String snittinnhold( Heltallsmengde a, Heltallsmengde b, Heltallsmengde c ) { < Returnerer innholdet i snittet mellom de tre mengdene a, b og c (det vil si de elementer som er felles for alle tre). Den returnerte teksten skal utformes på tilsvarende måte som beskrevet i metoden innhold() i klassen Heltallsmengde. > }
Heltallsmengde
og Mengdeoperasjoner
kan brukes til
å få til et kjørbart program.