Programmering — Oppgaver

Oppgave 1

I dialogboksen som er gjengitt nedenfor, kan du se fire stjernefigurer ved siden av hverandre. Figurene er laget ved å bygge opp en tekststreng (String-variabel) ved å bruke stjerne-tegn, blanke tegn (mellomrom) og linjeskifttegn. Tekststrengen blir vist i et tekstområde (JTextArea). Hensikten med oppgaven er å gi trening i å bruke for-løkker. Figuren skal derfor bygges opp ved å gjennomløpe en del slike løkker, der det for hvert gjennomløp av en løkke legges til ett nytt tegn til tekststrengen. Det er imidlertid litt lettere å lage programmet slik at de fire stjernefigurene blir vist under hverandre, istedenfor ved siden av hverandre. Lag derfor først et program der figurene blir vist under hverandre. Deretter kan du prøve å lage et program der de står ved siden av hverandre, som på figuren. For å unngå at stjernefigurene blir skjeve, lønner det seg å skifte skrivefont for tekstområdet som skal vise figurene. Det får du til ved å skrive som følger:

  JTextArea tekstområde = new JTextArea(); //Skal vise figurene.
  tekstområde.setFont( new Font( "Monospaced", Font.PLAIN, 12 ) );

Klassen Font som definerer skrivefonter ligger i pakken java.awt. Du må derfor importere den derfra.

Oppgave 2: Pytagoreiske tripler

For rettvinklede trekanter vet vi at Den pytagoreiske læresetning gjelder:
Kvadratet (andrepotensen) av hypotenusen er lik summen av kvadratene av katetene (de to sidene som står vinkelrett på hverandre).
Dersom lengden av alle de tre sidene er hele tall, kalles derfor disse tre tallene et pytagoreisk trippel. Et velkjent eksempel på et slikt trippel er 3, 4, 5 (fordi 5 * 5 er lik 3 * 3 + 4 * 4). Men det finnes også mange andre, for eksempel 5, 12, 13 og 8, 15, 17.

Du får nå som oppgave å skrive et program som finner og skriver ut alle pytagoreiske tripler inntil en gitt grense for de tre tallene. Bruker skal kunne velge denne grensen. (Alle de tre tallene skal altså være mindre enn eller lik den valgte grense.) Legg også inn en tellevariabel slik at programmet skriver ut hvor mange pytagoreiske tripler det er (innenfor den valgte grense). Lag programmet slik at det gir informative ledetekster ved innlesing og visning av resultater.

Hint: Bruk trippel-nestede for-løkker for å finne de pytagoreiske triplene.

Vis resultatene fra programmet i et tekstområde som du viser i en meldingsboks. Når du i utskriften viser ett pytagoreisk trippel per linje, kan det bli flere linjer enn det er plass til å vise på skjermen samtidig. Det er da behov for å utstyre tekstområdet med skrollefelter. Det får du til ved å gjøre som i følgende eksempel:

  JTextArea tekstområde = new JTextArea( 10, 15 ); // 10 linjer og
             // inntil 15 tegn på hver linje vises samtidig - du kan
             // velge andre tall for dette etter eget ønske
  < legg inn den teksten du ønsker tekstområdet skal inneholde >
  JScrollPane skrolleområde = new JScrollPane( tekstområde );
             // utstyrer tekstområdet med skrollefelter
  JOptionPane.showMessageDialog( null, skrolleområde );
             // viser på skjermen tekstområdet med skrollefelter

I programmet trenger du da i tillegg følgende import-instruksjon:

import javax.swing.JScrollPane;

Oppgave 3: Primtall

Et primtall er et helt tall større enn 1 som bare er delelig med seg selv og med 1. Sekvensen av primtall starter dermed med 2, 3, 5, 7, 11, 13, ... . Primtall spiller en viktig rolle i mange sammenhenger, også når det gjelder databehandling. Det er derfor av interesse å kjenne til effektive algoritmer for å finne primtall. En slik algoritme som går helt tilbake til oldtida, kalles Erathostenes' såld. Denne kan beskrives på følgende måte:

Vi tenker oss at vi skriver opp på et papir alle hele tall fra 2 og oppover til en valgt grense n. Så går vi fram på følgende måte: Først stryker vi over alle multipler av 2 (det vil si 4, 6, 8, 10, ...). Vi finner deretter første tall som ikke er strøket over. Det vil være 3. Så stryker vi over alle multipler av 3 (det vil si 9, 12, 15, 18, ...). Vi fortsetter på samme måte: Finner nå første tall som ikke er strøket over, det vil være 5. Så stryker vi over alle multipler av 5 (det vil si 10, 15, 20, ...). Slik fortsetter vi. Når vi er ferdige med denne prosessen, vil alle tall som ikke er strøket over, være primtall (det vil si 2, 3, 5, 7, 11, ...).

Du får som oppgave å skrive et program som leser inn en valgt grense for verdien n nevnt ovenfor og som finner og skriver ut på skjermen alle primtall inntil denne grensen.

For å finne primtallene, kan du gå fram på følgende måte: Opprett en array av logiske verdier med så mange plasser som den innleste grense. Initialiser den til true på alle plasser. Arrayens indekser vil svare til de positive hele tallene. (Vi ser bort fra 0 og 1.) Målet er nå å sette til false alle plasser i arrayen som har en arrayindeks som ikke er primtall, slik at når vi er ferdige, finner vi primtallene som alle arrayindeksene der det i arrayen fortsatt er verdi true. For å få til dette, gjennomløper du arrayen fra indeksplass 2 og oppover. Dersom det på en indeksplass i er verdi true, gjennomløper du resten av arrayen ved å sette til false alle steder som har en indeks som er et multiplum av i. Lag programmet som en vindusapplikasjon.

Løsningsforslag
Stjernefigurer.java
PytagoreiskeTripler.java
Primtall.java
Primtallvindu.java
Primtalltest.java