© 1999-2003, Flemming Koch Jensen
Alle rettigheder forbeholdt
Metoder

Vejledning løsninger
Opgaver

 

 

1

Lav en metode skrivAdresse, der udskriver din eller en andens adresse på tre linier, med navn, adresse og postnummer. F.eks. kunne udskriften være:

 
Ikast Handelsskole
Bøgildvej 12
7430 Ikast
  hvis du tilfældigvis tror du er Ikast Handelsskole!
   
2

I denne opgave skal vi udvikle en metode meddelFejl, der kan bruges til at udskrive fejlmeddelelser.

1.

Lav først metoden så den udskriver teksten:

Der er en fejl

2.

Lav dernæst ændringer så metoden kan udskrive et tilhørende fejlnummer, som gives med som parameter ved kaldet. F.eks. skal metoden udskrive:

Fejl nr. 5

hvis parameteren i kaldet er 5

3.

Lav til slut ændringer i metoden, så den kan bruges til at udskrive såvel fejlnummer som linienummeret for den linie hvor fejlen er fundet. F.eks. skal kaldet meddelFejl( 14, 5 ) bevirke, at der udskrives:

Fejl nr. 5 i linie 14

3 Lav en metode midterst, der tager tre tal som parametre. Metoden skal returnere den midterste værdi. F.eks. skal kaldet midterst( 6, 10, 8 ) returnere 8.
   
4

Lav en metode stjerneLinie, der udskriver en linie med 20 stjerner. Udskriften vil ved ét kald blive:

********************

Du skal i opgaven anvende en lokal variabel, der sættes til værdien 20 (En form for oplæg til næste opgave), ud over den tæller der optræder i en evt. for-sætning.

   
5 Lav en metode stjerneLinie, der udskriver en linie med et vist antal stjerner. Antallet af stjerner skal være givet som parameter til metoden.
   
6

Lav en metode tegnLinie, der udskriver en linie med et vist antal forekomster af et bestemt tegn. Lad tegnet og antallet af gange det skal udskrives være givet ved parametre. Et kald: tegnLinie( 10, '#' ) skal give følgende udskrift.

 
##########
   
7

Betragt dine løsninger til opgave 4, 5 og 6.

 

a: Er det muligt at have de to metoder fra opgave 4 og 5 i samme program? - forklar!

b: Lav ændringer i de tre metoder så det samlede program bliver kortest muligt (hint: Brug metoder, der kalder metoder).

   
8 Lav en metode inc, der tager et array af int som parameter og tæller alle elemeneter op med 1.
   
9

Lav en metode add, der tager to arrays af int som parametre. Metoden skal beregne summen af elementerne med samme index og placere den i det array som står som den første parameter, på den position hvor de begge stod. F.eks. skal de to arrays:

første:
5 42 9 53 3 10

andet:
3 9 19 33 10 1

efter kaldet add( første, andet ) få følgende udseende:

første:
8 51 28 86 13 11

andet:
3 9 19 33 10 1

Her er summen af tallene parvist lagt i arrayet første, mens arrayet andet er uberørt.

Du kan antage at de to aktuelle parametre til metoden har samme antal elementer.

Er der her tale om at metoden returnerer mere end en værdi?

   
10

Lav en metode max, der tager to arrays af int som parametre. Metoden skal finde den største af elementerne med samme index og placere det i det array som står som den første parameter, på den position hvor de begge stod. F.eks. skal de to arrays:

første:
5 42 9 53 3 10

andet:
3 9 19 33 10 1

efter kaldet max( første, andet ) få følgende udseende:

første:
5 42 19 53 10 10

andet:
3 9 19 33 10 1

Her er maximum af tallene parvist lagt i arrayet første, mens arrayet andet er uberørt.

Du kan antage at de to aktuelle parametre til metoden har samme antal elementer.

   
11

Lav en metode swap, der tager to arrays af int som parametre. Metoden skal ombytte elementerne med samme index. F.eks. skal de to arrays:

første:
5 42 9 53 3 10

andet:
3 9 19 33 10 1

efter kaldet swap( første, andet ) få følgende udseende:

første:
3 9 19 33 10 1

andet:
5 42 9 53 3 10

Her er elementerne parvist swappet.

Du kan antage at de to aktuelle parametre til metoden har samme antal elementer.

   
12*

1.

Lav en metode theSmallOneOut, der tager et array af int som parameter. Metoden gennemløber arrayet og finder det mindste element. Metoden sætter i stedet dette elements værdi til den næstmindste værdi. Hvis f.eks. arrayet havde følgende udseende før kaldet:

 
5 2 8 4 0 3 1 4
  Vil den efter kaldet have følgende udseende:
 
5 2 8 4 1 3 1 4
  Elementet med værdien 0 var det mindste og den er nu blevet sat til 1, der var den næstmindste værdi.
2.

Man bemærker at ovenstående metode, ved gentagen anvendelse vil bringe arrayet i en stabil tilstand, hvor før og efterbilledet er ens. Man ser i eksemplet ovenfor at dette allerede er sket, da der er to 1-taller, og det ene for eftertiden vil blive sat til det andet.

Modificer din implementation af metoden theSmallOneOut, således at metoden i stedet vil sætte det mindste element (ét af 1-tallerne) til den mindste værdi, der er større end værdien selv (2).

Bemærk: Det er muligt at du allerede har løst del-opgave 1 så den tager dette i betragtning! (Man kan godt fortolke del-opgave 1 således at dette allerede skulle være gjort)

3.

Lav en metode allSmallOnesOut, der tager et array af int som parameter, og foretager gentagne kald af theSmallOneOut indtil arrayet har opnået en stabil tilstand, hvor der ikke sker flere ændringer. Metoden skal også udskrive hvor mange iterationer, der var nødvendige for at opnå den stabile tilstand.

Det vil i den forbindelse være nyttigt at ændre metoden theSmallOneOut, så den returnerer boolsk om den reelt har ændret noget!

   
13

1.

Lav en metode erDetPrimtal, der tager et tal som parameter og returnerer boolsk om det er et primtal.

2.

Lav en løkke der bruger kald af erDetPrimtal til at udskrive alle primtal i intervallet [2:100].

   
14*

Denne opgave går ud på at lave en række små metoder og bruge dem i sammensatte kald.

1. Lav en metode add der tager to parametre og returnerer deres sum.
2. Lav tilsvarende metoder sub, mul, div og mod, der returnerer resultatet ved henholdsvis substraktion, multiplikation, division og modulus.
3.

Beregn vha. metodekald følgende udtryk (Bemærk du må kun anvende metodekald, ikke nogen af operatorerne +, -, *, / eller %):

A: 5 * 10 + 11
B: 7 / 3 - 9 * 5
C: 4 * ( 3 + 9 )
D: 9 / 4 + 8 % 3
E: 9 / 3 + 9 % 3 + 12

Bemærk at du i denne og de følgende opgaver kun må anvende metodekald, ikke nogen af operatorerne +, -, *, / eller %.

F.eks. skal 4 * 2 - 3 beregnes ved: sub( mul( 4, 2 ), 3 )

4.

Lav en metode power der beregner xy

5. Lav en metode sqr der beregner x2
6. Lav en metode abs der fjerner fortegnet hvis det er negativt (dvs. 5 afbildes over i 5, og -5 afbildes også over i 5)
7. Lav en metode poly3 der beregner x3+3x2+x-5
8. [Svær] Lav en metode sqrt der finder kvadratroden af x

   
15 [Ikast Handelsskole: Datamatiker - Konstruktions-reeksamen, 23. januar 2001: Opgave 3.1]
  For at tiltrække arbejdskraft har firmaet Far-away A/S besluttet at yder dets medarbejdere et tilskud til deres transport-udgifter. For specielt at tilgodese medarbejdere, der bor længere fra arbejde er tilskudet indrettet så der ydes 1,- kr. pr. km. ud over de første 5 km. en medarbejder har til arbejde hver dag.
 

Hvis f.eks. en medarbejder har 15 km. til arbejde, får han 10 kr. om dagen i tilskud, da han har 10 km. til arbejde ud over de første 5 km: 1·(15-5) = 10.

 

Hvis f.eks. en medarbejder kun har 3 km. til arbejde, får han 0 kr. om dagen i tilskud, da han har under 5 km. til arbejde.

  Lav en metode tilskud, der tager hele afstanden som parameter og returnerer det tilskud som medarbejderen skal have.
  Du kan antage at parameteren ikke er negativ og at det er et heltal.
   
16 [Ikast Handelsskole: Datamatiker - Konstruktions-reeksamen, 23. januar 2001: Opgave 3.2]
  For at fuldføre datamatikeruddannelsen skal man til otte eksaminer.
  For at bestå samlet gælder der at:
 

Ingen karakterer må være under 5.

Første, anden og sidste eksamen skal være bestået (mindst 6).

Gennemsnittet af samtlige karakterer skal være mindst 6.

  Lav en metode bestået, der tager et array af heltal som parameter. Arrayet indeholder de otte karakterer for en studerende, idet karakteren for første eksamen er det første element i arrayet, karakteren for den anden eksamen er andet element, og så fremdeles.
  Du kan antage at arrayet indeholder otte elementer og at de alle er gyldige karakterer på 13-skalaen.
  Metoden skal returnere boolsk om den studerende har fuldført uddannelsen.
   
17 [Ikast Handelsskole: Datamatiker - Konstruktions-eksamen, 3. januar 2001: Opgave 4]
17.1 Lav en metode lige, der tager et heltal som parameter. Metoden skal returnere boolsk om parameteren er et lige tal. Lav tilsvarende en metode ulige, der returnerer om et heltal er ulige.
   
17.2 Lav en metode swapLigeUlige, der tager et array af heltal som parameter. Metoden tager yderligere to heltal som parametre (dvs. i alt tre parametre). De to heltal angiver to index i arrayet. Hvis elementet svarende til det første index er et lige tal og elementet svarende til det andet index er et ulige tal, skal de to elementer byttes om, ellers ikke.
  Hvis f.eks. arrayet der sendes med som parameter er følgende,
 

  og de to index er 0 og 1, bliver resultatet,
 

  da 6 er lige, og 7 er ulige.
  swapLigeUlige skal returnere boolsk om den byttede om på de to elementer. I ovenstående eksempel vil den derfor returnere true.
  Implementationen af swapLigeUlige skal, om muligt, anvende kald af metoderne lige og ulige.
  Du kan antage, at det første index altid er mindre end det andet, samt at de begge er gyldige index i arrayet.
   
17.3 Betragt følgende metode:
 
public static boolean m( int[] t ) {
boolean b = false;

for ( int i=0; i<t.length-1; i++ )
if ( swapLigeUlige( t, i, i+1 ) )
b = true;

return b;
}
  Forklar hvad denne metode gør ved det array den modtager som parameter.
  Hvad gælder der om elementernes placering i arrayet når metoden returnerer false? (Dit svar må ikke relatere til elementernes placering før metoden bliver kaldt!)
   
18 [Ikast Handelsskole: Datamatiker - Konstruktions-eksamen, 6. januar 2000: Opgave 6.1]
  Lave en metode erstatMindre, der tager et array af heltal som parameter, samt to andre heltal (dvs. i alt tre parametre). Det ene heltal er en angivelse af en grænseværdi, og det andet heltal er en angivelse af en værdi. Når metoden returnerer skal alle forekomster af tal i arrayet, der var mindre end eller lig med grænseværdien være erstattet med den angivne værdi. Metoden skal ikke returnere noget.
  Hvis det array, der sendes med som parameter f.eks. har følgende udseende:
 

  og vi ligeledes sender grænseværien 4, og værdien 0, med i kaldet af erstatMindre, skal arrayet efter kaldet have følgende udseende:
 

   
19 [Ikast Handelsskole: Datamatiker - Konstruktions-eksamen, 6. januar 2000: Opgave 6.2]
  Lave en metode findesPar, der tager et array af heltal som parameter, samt to andre heltal (dvs. i alt tre parametre). De to andre heltal danner et par i den rækkefølge de anføres. Metoden returnerer boolsk om dette par findes i arrayet.
  Hvis det array, der sendes med som parameter f.eks. har følgende udseende:
 

  og vi ligeledes sender tallene 5 og 3 med som parameter (anført i nævnte rækkefølge) vil metoden returnere true, da disse tal optræder som par i arrayet på index-positionerne 4 og 5
   
20 [Ikast Handelsskole: Datamatiker - Konstruktions-reeksamen, 20. januar 2000: Opgave 3]
20.1 Lav en metode hyppighed, der tager et array af heltal som parameter, samt et andet heltal (dvs. i alt to parametre). Metoden skal returnere hvor mange procent af tallene i arrayet, der har den pågældende værdi, som er sendt med som parameter.
  Hvis det array, der sendes med som parameter, f.eks. har følgende udseende:
 

  og vi ligeledes sender tallet 4 med i kaldet af hyppighed, skal metoden returnere 9, da 4 forekommer én gang og 1/11=0,09. Bemærk at metoden skal returnere procenten som heltal:
   
20.2 Lav en metode printStatistik, der tager et array af heltal som parameter. Metoden skal udskrive en statistik over forekomsten af tallene fra 0 til 9. Du kan antage at samtlige tal i arrayet ligger i intervallet [0:9]. Du kan i besvarelsen af denne opgave antage, at du har metoden hyppighed fra opgave 20.1.
  Hvis det array, der sendes med som parameter, er det samme som i opgave 20.1, skal udskriften bliver:
 
0: 0
1: 9
2: 9
3: 18
4: 9
5: 27
6: 9
7: 9
8: 0
9: 9