© 1999-2003, Flemming Koch Jensen
Alle rettigheder forbeholdt
Metoder
Vejledende løsninger

 

 

1
class Opgave_1 {

  static void skrivAdresse() {
    System.out.println( "Ikast Handelsskole" );
    System.out.println( "Bøgildvej 12" );
    System.out.println( "7430 Ikast" );
  }

  public static void main( String[] argv ) {
    skrivAdresse();
  }
}
   
2
class Opgave_2 {

  static void meddelFejl_v1() {
    System.out.println( "Der er en fejl" );
  }

  static void meddelFejl_v2( int fejlNr ) {
    System.out.println( "Fejl nr. " + fejlNr );
  }

  static void meddelFejl_v3( int fejlNr, int linieNr ) {
    System.out.println( "Fejl nr. " + fejlNr + " i linie " + linieNr );
  }

  public static void main( String[] argv ) {
    meddelFejl_v1();
    meddelFejl_v2( 5 );
    meddelFejl_v3( 5, 14 );
  }
}
   
3
class Opgave_3 {

  static int midterst( int tal1, int tal2, int tal3 ) {
    int midt=0;

    if ( tal1 <= tal2 && tal2 <= tal3 || tal3 <= tal2 && tal2 <= tal1 )
      midt = tal2;
    else if ( tal2 <= tal1 && tal1 <= tal3 || tal3 <= tal1 && tal1 <= tal2 )
      midt = tal1;
    else
      midt = tal3;

    return midt;
  }

  public static void main( String[] argv ) {
    System.out.println( midterst( 6, 10, 8 ) );
  }
}
   
4 
class Opgave_4 {

  static void stjerneLinie() {
    int antalStjerner=20;
    for ( int i=0; i<antalStjerner; i++ )
      System.out.print( "*" );
    System.out.println();
  }

  public static void main( String[] argv ) {
    stjerneLinie();
  }
}
   
5
class Opgave_5 {

  static void stjerneLinie( int antalStjerner ) {
    for ( int i=0; i<antalStjerner; i++ )
      System.out.print( "*" );
    System.out.println();
  }

  public static void main( String[] argv ) {
    stjerneLinie( 20 );
  }
}
   
6
class Opgave_6 {

  static void tegnLinie( int antalTegn, char tegn ) {
    for ( int i=0; i<antalTegn; i++ )
      System.out.print( tegn );
    System.out.println();
  }

  public static void main( String[] argv ) {
    tegnLinie( 20, '#' );
  }
}
   
7 a: Det er ikke noget problem at placere de to metoder i samme program, selvom de har samme navn, da de overloader hinanden.
  b: Man kan lave opgave 4 ved at lade metoden kalde løsningen af opgave 5, og metoden i opgave 5 ved at kalde metoden i opgave 6:
 
class Opgave_7 {

  static void stjerneLinie() {
    stjerneLinie( 20 );
  }
  
  static void stjerneLinie( int antalStjerner ) {
    tegnLinie( antalStjerner, '*' );  
  }
  
  static void tegnLinie( int antalTegn, char tegn ) {
    for ( int i=0; i<antalTegn; i++ )
      System.out.print( tegn );
    System.out.println();  
  }
}
   
8
class Opgave_8 {

  static void udskrivArray( int[] array ) {
    for ( int i=0; i<array.length; i++ )
      System.out.print( array[i] + " " );
    System.out.println();
  }
      
  static void inc( int[] tabel ) {
    for ( int i=0; i<tabel.length; i++ )
      tabel[i] ++;
  }

  public static void main( String[] argv ) {
    int[] tal = { 5, 3, 1, 6, 2, 4, 8, 2 };
    
    inc( tal );
    
    udskrivArray( tal );
  }
}
   
9
class Opgave_9 {

  static void udskrivArray( int[] array ) {
    for ( int i=0; i<array.length; i++ )
      System.out.print( array[i] + " " );
    System.out.println();
  }

  static void add( int tabel1[], int tabel2[] ) {
  // PRE: tabel1.length == tabel2.length

    for ( int i=0; i<tabel1.length; i++ )
      tabel1[i] += tabel2[i];
  }

  public static void main( String[] argv ) {
    int første[] = { 5, 42, 9, 53, 3, 10 };
    int andet[]  = { 3, 9, 19, 33, 10, 1 };

    add( første, andet );

    udskrivArray( første );
    udskrivArray( andet );
  }
}
   
10
class Opgave_10 {

  static void udskrivArray( int[] array ) {
    for ( int i=0; i<array.length; i++ )
      System.out.print( array[i] + " " );
    System.out.println();
  }
      
  static void max( int tabel1[], int tabel2[] ) {
  // PRE: tabel1.length == tabel2.length
  
    for ( int i=0; i<tabel1.length; i++ )
      if ( tabel1[i] < tabel2[i] )
        tabel1[i] = tabel2[i];
  }

  public static void main( String[] argv ) {
    int første[] = { 5, 42, 9, 53, 3, 10 };
    int andet[]  = { 3, 9, 19, 33, 10, 1 };
    
    max( første, andet );
    
    udskrivArray( første );
    udskrivArray( andet );
  }    
}
   
11
class Opgave_11 {

  static void udskrivArray( int[] array ) {
    for ( int i=0; i<array.length; i++ )
      System.out.print( array[i] + " " );
    System.out.println();
  }
      
  static void swap( int tabel1[], int tabel2[] ) {
  // PRE: tabel1.length == tabel2.length
  
    for ( int i=0; i<tabel1.length; i++ ) {
      int temp  = tabel1[i];
      tabel1[i] = tabel2[i];
      tabel2[i] = temp;
    }
  }

  public static void main( String[] argv ) {
    int første[] = { 5, 42, 9, 53, 3, 10 };
    int andet[]  = { 3, 9, 19, 33, 10, 1 };
    
    swap( første, andet );
    
    udskrivArray( første );
    udskrivArray( andet );
  }    
}
   
12
class Opgave_12 {
  static void printArray( int[] t ) {
    for( int i=0; i<t.length; i++ )
      System.out.print( t[i] + " " );
    System.out.println();
  }

  static void theSmallOneOut_1( int[] t ) {
    int smallestIndex = 0;
    int secondSmallestIndex;
  
    // find den mindste (indirekte angivet ved smallestIndex)
    for ( int i=smallestIndex+1; i<t.length; i++ )
      if ( t[i] < t[smallestIndex] )
        smallestIndex = i;
  
    // Indstil secondSmallestIndex til en start der ikke er det mindste element
    if ( smallestIndex == 0 )
      secondSmallestIndex = 1;
    else
      secondSmallestIndex = 0;
  
    // find det mindste element der ikke er selve t[smallestIndex]
    for ( int i=secondSmallestIndex+1; i<t.length; i++ )
      if ( t[i] < t[secondSmallestIndex] && i != smallestIndex)
        secondSmallestIndex = i;
  
    t[smallestIndex] = t[secondSmallestIndex];
  }

  static boolean theSmallOneOut_2( int[] t ) {
    int smallestIndex = 0;
    int secondSmallestIndex=0;
  
    // find den mindste (indirekte angivet ved smallestIndex)
    for ( int i=smallestIndex+1; i<t.length; i++ )
      if ( t[i] < t[smallestIndex] )
        smallestIndex = i;
  
    // Indstil secondSmallestIndex til en start der ikke er
    // det mindste element og har en større værdi
    for ( int i=0; i<t.length; i++ )
      if ( t[i] != t[smallestIndex] ) {
        secondSmallestIndex = i;
        break;
      }
  
    // find det mindste element der ikke er t[smallestIndex]
    for ( int i=secondSmallestIndex+1; i<t.length; i++ )
      if ( t[i] < t[secondSmallestIndex] && t[i] != t[smallestIndex] )
        secondSmallestIndex = i;
  
    if ( t[smallestIndex] != t[secondSmallestIndex] ) {
      t[smallestIndex] = t[secondSmallestIndex];
      return true;
    } else
      return false;
  }
  
  static void allSmallOnesOut( int[] t ) {
    int counter=0;

    while ( theSmallOneOut_2( t ) )
      counter++;
  
    System.out.println( "Antal iterationer: " + counter );
  }
  
  public static void main( String[] argv ) {
    int test[] = { 5, 2, 8, 4, 0, 3, 1, 4 };

    System.out.println( "test[]" );
    printArray( test );

    System.out.print( "theSmallOneOut_1( test ): " );
    theSmallOneOut_1( test );
    printArray( test );

    System.out.print( "theSmallOneOut_1( test ): " );
    theSmallOneOut_1( test );
    printArray( test );

    System.out.print( "theSmallOneOut_2( test ): " );
    theSmallOneOut_2( test );
    printArray( test );

    System.out.println( "allSmallOnesOut( test )" );
    allSmallOnesOut( test );
  }
}
   
13
class Opgave_13 {

  static boolean erDetPrimtal( int kandidat ) {
    boolean erPrimtal=true; // indtil det modsatte er bevist
    
    for ( int divisor=2; divisor<=Math.sqrt( kandidat ); divisor++ )
      if ( kandidat % divisor == 0 ) {
        erPrimtal = false;
        break;
      }
    
    return erPrimtal;
  }

  public static void main( String argv[] ) {
    for ( int i=2; i<=100; i++ )
      if ( erDetPrimtal( i ) )
        System.out.print( i + " " );
    System.out.println();
  }
}
   
14
class Opgave_14 {

  /*
   *   opgave 1
   */

  static int add( int x, int y ) {
    return x + y;
  }

  /*
   *   opgave 2
   */

  static int sub( int x, int y ) {
    return x - y;
  }

  static int mul( int x, int y ) {
    return x * y;
  }

  static int div( int x, int y ) {
    return x / y;
  }

  static int mod( int x, int y ) {
    return x % y;
  }

  /*
   *   opgave 4
   */

  static int power( int x, int y ) {
  // PRE: y>=0    
    
    int res=1;
    
    for ( int i=0; i<y; i=add(i,1) )
      res = mul( res , x );
      
    return res;
  }
  
  /*
   *   opgave 5
   */

  static int sqr( int x ) {
    return power( x, 2 );
  }
  
  /*
   *   opgave 6
   */

  static int abs( int x ) {
    if ( x<0 )
      x = sub( 0 , x );
    
    return x;
  }
  
  /*
   *   opgave 7
   */

  static int poly3( int x ) {
    return sub( add( add( power( x, 3 ), mul( 3, sqr( x ) ) ), x), 5 );
  }
  
  /*
   *   opgave 8
   */

  static int sqrt( int x ) {
  // PRE: x>0
  
    int res=0;
    
    while ( sqr( res ) <= x )
      res = add( res, 1 );
      
    return sub( res, 1 );
  }
  
  public static void main( String[] argv ) {
    
    System.out.println( "add( 2, 3 ) = " + add( 2, 3 ) );
    System.out.println( "sub( 2, 3 ) = " + sub( 2, 3 ) );
    System.out.println( "mul( 2, 3 ) = " + mul( 2, 3 ) );
    System.out.println( "div( 2, 3 ) = " + div( 2, 3 ) );
    System.out.println( "mod( 2, 3 ) = " + mod( 2, 3 ) );
    
    System.out.println( "power( 2, 3 ) = " + power( 2, 3 ) );

    System.out.println( "sqr( 3 ) = " + sqr( 3 ) );

    System.out.println( "abs( -5 ) = " + abs( -5 ) );

    System.out.println( "poly3( 2 ) = " + poly3( 2 ) );
    
    System.out.println( "sqrt( 41 ) = " + sqrt( 41 ) );
    
    /*
     *   opgave 3
     */

    System.out.println( "5 * 10 + 11 = " + add( mul( 5, 10 ), 11 ) );
    System.out.println( "7 / 3 - 9 * 5 = " + sub( div( 7, 3 ), mul( 9, 5 ) ) );
    System.out.println( "4 * ( 3 + 9 ) = " + mul( 4, add( 3, 9 ) ) );
    System.out.println( "9 / 4 + 8 % 3 = " + add( div( 9, 4 ), mod( 8, 3 ) ) );
    System.out.println( "9 / 3 + 9 % 3 + 12 = " +
                        add( add( div( 9, 3 ), mod( 9, 3 ) ), 12 ) );
  }    
}
   
15
static int tilskud( int afstand ) {
// PRE: afstand >= 0
  if ( afstand > 5 )
    return afstand - 5;
  else
    return 0;
}
   
16
static boolean bestået( int[] karakter ) {
// PRE: karakter.length == 8 && karakter[i] er gyldig karakter på 13-skalaen
  if ( karakter[0] < 6 ||
       karakter[1] < 6 ||
       karakter[7] < 6 )
    return false;
  
  double sum=0;
  for ( int i=0; i<karakter.length; i++ )  {
    sum += karakter[i];
    if ( karakter[i] < 5 )
      return false;
  }
  
  return sum / karakter.length >= 6;
}
   
17.1
static boolean lige( int x ) {
  return x % 2 == 0;
}

static boolean ulige( int x ) {
  return !lige( x );
}
  Selv om de to metoder godt kunne laves uafhængigt af hinanden, er det mere elegant at den ene kalder den anden.
17.2
static boolean swapLigeUlige( int[] t, int index1, int index2 ) {
  if ( lige( t[index1] ) && ulige( t[index2] ) ) {
    int  temp = t[index1];
    t[index1] = t[index2];
    t[index2] = temp;
    
    return true;
  } else
    return false;
}
17.2 swapLigeUlige gennemløber elementparene i arrayet (elementer der står parvis ved siden af hinanden) og bytter dem om med hinanden hvis den til venstre er lige og den til højre er ulige.
  Hvis swapLigeUlige returnerer false, står alle de ulige tal i den første del af arrayet, mens alle de lige står i den sidste del af arrayet.
  F.eks.:
 
static void printArray( int[] t ) {
  for ( int i=0; i<t.length; i++ )
    System.out.print( t[i] + " " );
  System.out.println();  
}

public static void main( String[] argv ) {
  int[] tabel = { 6, 7, 1, 8, 5 };
  
  printArray( tabel );
  while ( m( tabel ) )
    ;
  printArray( tabel );
}

6 7 1 8 5 
7 1 5 6 8 

   
18
static void erstatMindre( int[] t, int grænse, int erstatning ) {
  for ( int i=0; i<t.length; i++ )
    if ( t[i] <= grænse )
      t[i] = erstatning;
}
   
19
static boolean findesPar( int[] t, int x1, int x2 ) {
  for ( int i=0; i<t.length-1; i++ )
    if ( t[i] == x1 && t[i+1] == x2 )
      return true;

  return false;
}
   
20.1
static int hyppighed( int[] t, int værdi ) {
  int antal=0;
  
  for ( int i=0; i<t.length; i++ )
    if ( t[i] == værdi )
      antal++;
      
  return antal*100/t.length;
}
20.2
static void printStatistik( int[] t ) {
  for ( int i=0; i<10; i++ )
    System.out.println( i + ": " + hyppighed( t, i ) );
}