Aufgabensammlung Mathematik Mit Java

download Aufgabensammlung Mathematik Mit Java

of 8

Transcript of Aufgabensammlung Mathematik Mit Java

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    1/19

    Aufgabensammlung

    Tutorium zur Einf ̈uhrung in die Programmierung

    - Praktischer Teil: Java-Programmierung -

    Inhaltsverzeichnis

    1 Kontrollstrukturen 2

    2 Methoden 7

    3 Rekursion 11

    4 Felder 13

    5 OOP 17

    1

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    2/19

    1. 2

    1 Kontrollstrukturen

    Aufgabe 1.1

    Schreiben Sie ein Java-Programm, das den Wert einer Variablen vom Typ int in Binärdarstellung ausgibt, d.h. als

    Folge von Nullen und Einsen. Verwenden Sie dazu in geeigneter Weise die beiden Operatoren % und / und nutzen

    Sie die Tatsache aus, dass ein Wert vom Typ int 32 bit hat.

    Hinweis:Eine while-Schleife hat in Java folgende Syntax:

    while (   boolescher Ausdruck    )   {   Anweisung   }Denken Sie daran, dass der +-Operator, wenn man ihn auf eine int- und eine String-Variable anwendet, die int-

    Variable in einen String umwandelt und dann verkettet.

    L ösung zu 1.1

    Das Programm

    p u bl i c c l a s s   B i n a e r T e s t   {p u bl i c s t a t i c v oi d   m ain ( S t r i n g a r g s [ ] )   {

    i n t   e i n g a b e ;

    i n t   r e s t ;

    i n t   i ;   / / S c h l e i f e n z a eh l e r  

    S t r i n g s ;   / / f u e r d i e A us ga be

     / / E i n g a b e m i t We rt b e l e g e n

    e i ng a be = 4 9 ;

     / / I n i t i a l i s i e r u n g d e r Au sg a be

    s = ” ” ;

     / / S c h l e i f e

    i = 1 ;

    w h i l e   ( i  

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    3/19

    1. 3

    a b c

    1 2 3

    c =  c + a + b1 2 6

    a =  c − a − b3 2 6

    b =  c − a − b3 1 6

    c =  c − a − b3 1 2

    Das Programm liefert also die Ausgabe

    a = 3

    b = 1

    c = 2

    Aufgabe 1.3

    In folgendem Programm werden zwei Integervariablen mit Eingabewerten aus der Kommandozeile belegt und

    anschließend die eingegebenen Werte wieder ausgegeben.p u bl i c c l a s s   I n t A d d   {

    p ub li c s t a t i c v oi d   m ain ( S t r i n g a r g s [ ] )   {i n t   i 1

    i n t   i 2 ;

     / / B e l e g u n g d e r V a r i a b l e n m i t E i n g a b e w e r t e n

    i 1 = I n t e g e r . p a r s e I n t ( a r g s [ 0 ] ) ;

    i 2 = I n t e g e r . p a r s e I n t ( a r g s [ 1 ] ) ;

     / / Au sg a be d e r V a r i a b l e n w e r t e

    S y st em . o u t . p r i n t l n ( ” i 1 : ” + i 1 ) ;

    S y st em . o u t . p r i n t l n ( ” i 2 : ” + i 2 ) ;

    }}

    Beim Programmstart müssen dann entsprechende Werte (Integer-Konstanten) angegeben werden.

    Beispiel:

    Übersetzen mit javac IntAdd.java

    Starten mit java IntAdd 23 65

    liefert die Ausgabe:

    i1: 23

    i2: 65

    In der Folge können bei jedem Programmaufrufandere Werte angegeben werden, ohne dass ein erneutes Überstzen

    notwendig wäre.

    Ergänzen Sie das angegebene Programm um eine Methode, die die beiden Eingabewerte addiert. Dise Methodesoll im Hauptprogramm aufgerufen und das Ergebnis ausgegeben werden.

    L ösung zu 1.3

    Die Additionsmethode bekommt zwei Integerwerte als Parameter übergeben und liefert einen Interwert als Ergeb-

    nis zurück, der Methodenkopf ist also

    p ub li c s t a t i c i n t   a d d i e r e ( i n t   x ,   i n t   y )

    Der Rumpf soll nun die Summe berechnen. Dazu kann entweder eine lokale (Hilfs-)variabel benutzt werden:

    {i n t   z ;

    z = x + y ;

    r e t u r n   z ;}

    oder man verzichtet auf die Hilfsvariable:

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    4/19

    1. 4

    {r e t u r n   x + y ;

    }

    Im Hauptprogramm fügen wir den Methodenaufruf summe = addiere(i1 , i2) ;  ein.

    Insgesamt sieht das Programm dann so aus:

    p u bl i c c l a s s   I n t A d d   {p ub li c s t a t i c v oi d   m ain ( S t r i n g a r g s [ ] )   {

    i n t   i 1 ;   / / e r s t e r E i n ga b ew e rt  

    i n t   i 2 ;   / / z w e i t e r E i ng a b ew e rt  

    i n t   summe ;   / / E r g e b n i s v a r i a b l e

     / / B e l e g u n g m i t de n E i n g a b e w e r t e n

    i 1 = I n t e g e r . p a r s e I n t ( a r g s [ 0 ] ) ;

    i 2 = I n t e g e r . p a r s e I n t ( a r g s [ 1 ] ) ;

     / / A d d i t i o n s m e t h o d e a u f r u f e n

    summ e = a d d i e r e ( i 1 , i 2 ) ;

     / / E r g e b n i s a u s g a b e

    S y st em . o u t . p r i n t l n ( ” i 1 : ” + i 1 ) ;S y st em . o u t . p r i n t l n ( ” i 2 : ” + i 2 ) ;

    S y s t e m . o u t . p r i n t l n ( ” Summe : ” + s um me ) ;

    }

     / / A d d i t i o n s m e t h o d e d e f i n i e r e n

    p ub li c s t a t i c i n t   a d d i e r e (  i n t   x ,   i n t   y )   {i n t   z ;

    z = x + y ;

    r e t u r n   z ;

     / / e s g e h t au ch m i t n u r e i n e r A n w e i s u n g un d oh ne d i e H i l f s v a r i a b l e z

     / / r e t u r n ( x+ y ) ;

    }}

    Aufgabe 1.4

    Seit Jahrtausenden versuchen die Menschen, die Kreiszahl   π, die definiert ist als Kreisumfang dividiert durch

    Kreisdurchmesser, möglichst exakt zu bestimmen.

    So rechneten die Babylonier ca. 2000 v. Chr. mit dem Wert  3 18

      ,

    in  Ägypten ist seit ungefähr der gleichen Zeit der Wert ( 169

     )2 überliefert,

    in China wurde seit ca. 250 n. Chr.√ 

    10 benutztund in Europa ist seit Archimedes (ca. 250 v. Chr.)  3 17   eine bekannte Näherung.

    Bestimmen Sie diese Werte und berechnen Sie die jeweilige Abweichung von dem auf 15 Dezimalstellen exakten

    Wert, wie er in der Java-Konstanten Math.PI zur Verfügung gestellt wird.

    Hinweis:Die Wurzelfunktion können Sie in Java mittels   Math.sqrt( einzusetzender Wert ) aufrufen.

    L ösung zu 1.4

    p u bl i c c l a s s   p i A n t i k    {

    p ub li c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s )   {

    d o u b l e   p i B a b y l o n ;

    d o u b l e   p i A e g y p t e n ;

    d o u b l e   p i C h i n a ;

    d o u b l e   p i E u r o p a ;

    p iB ab y lo n = 3 . 0 + ( 1 . 0 / 8 . 0 ) ;

    p i Ae g yp t en = 1 6 . 0∗1 6. 0 / ( 9 .0∗ 9 . 0 ) ;p i C h i n a = M at h . s q r t ( 1 0 . 0 ) ;

    p iE ur op a = 3 . 0 + 1 . 0 / 7 . 0 ;

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    5/19

    1. 5

    S ys te m . o u t . p r i n t l n ( ” J a va : ” + M ath . P I ) ;

    S ys te m . o u t . p r i n t ( ” B a by lo n : ” + p i Ba b y lo n ) ;

    S y st em . o u t . p r i n t l n ( ”\ t \ t \ t A bw ei ch un g : ” + ( M at h . P I   −   p i B a b y l o n ) ) ;S y st em . o u t . p r i n t ( ” A e g y pt e n : ” + p i A e g yp t e n ) ;

    S y st em . o u t . p r i n t l n ( ”\ t \ t \ t A bw ei ch un g : ” + ( M at h . P I   −   p i A e g y p t e n ) ) ;S ys te m . o u t . p r i n t ( ” C hi na : ” + p i ) ;

    S y st em . o u t . p r i n t l n ( ”\ t \ t \ t A bw ei ch un g : ” + ( M at h . P I   −   p i C h i n a ) ) ;

    S ys te m . o u t . p r i n t ( ” E u ro p a : ” + p i E ur o p a ) ;S y st em . o u t . p r i n t l n ( ”\ t \ t \ t A bw ei ch un g : ” + ( M at h . P I   −   p i E u r o p a ) ) ;

    }}

    Aufgabe 1.5

    Ihnen wird folgender Handytarif angeboten:

    Der Basispreis beträgt 22,98 Euro/Monat, darin sind 30 freie Gesprächsminuten enthalten. Jede darüber hinausge-

    hende Gesprächsminute kostet 0,248 Euro.

    Schreiben Sie ein Java-Programm, das den Rechnungsbetrag berechnet. Die Anzahl der Gesprächsminuten soll

    beim Programmstart in der Kommandozeile als Parameter übergeben werden.

    L ösung zu 1.5

    p u bl i c c l a s s   T a r i f B {p ub li c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s )   {

    d o u b l e   p r e i s P r o E i n h e it = 0 . 2 48 ;

    d o u b l e   g r u nd g eb = 2 2 . 9 8 ;

    i n t   d a u e r ;

    d o u b l e   b e t r a g ;

    d a u e r = I n t e g e r . p a r s e I n t ( a r g s [ 0 ] ) ;

    i f    ( d a u e r   >   3 0 )

    b e t r ag = ( d a ue r   −   3 0 ) ∗   p r e i s P r o E i n h e i t + g r un dg eb ;e l s e

    b e t r a g = g r u nd g e b ;

    S y st em . o u t . p r i n t l n ( ” R e c h n u n g s b e t r a g : ” + b e t r a g + ” E u ro ” ) ;

    }}

    Das Programm liefert beim Aufruf mit 30 bzw. 31 Minuten die Beträge:

    >java TarifB 30

    Rechnungsbetrag: 22.98 Euro

    >java TarifB 31

    Rechnungsbetrag: 23.228 Euro

    Aufgabe 1.6

    Wandeln Sie die Zählschleife des folgenden Beispiels in eine äquivalente fußgesteuerte Schleife um. Testen Sie

    Ihr Programm mit den Eingabewerten n = 0, n = 1 und  n  = 5.i n t   i , n , summe ;

    su mm e = 0 ;

    f o r   ( i = 1 ; i  

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    6/19

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    7/19

    2. 7

    k = 1 ;

    do   {summand = summand/ k ;

    e = e + s um mand ;

    k = k + 1;

    }   w h i l e   ( summand   >= 0 . 0 0 0 0 0 0 01 ) ;S ys te m . o u t . p r i n t l n ( ” N a eh er u ng f u e r e n ac h ” + k + ” I t e r a t i o n e n : ” + e ) ;

    }

    }

    2 Methoden

    Aufgabe 2.1

    Die harmonische Reihe ist definiert als unendliche Summe

    ∞k=1

    1

    k  = 1 +

     1

    2 +

     1

    3 +

     1

    4 +  . . .

    Implementieren Sie eine Methode, die die harmonische Reihe bis zu einer vorgegebenen Anzahl von Reihenglie-

    dern berechnet.

    Sie können Ihre Methode in diese Testumgebung einbetten:

    p u bl i c c l a s s   H a r m o n i s c h e R e i h e   {

    p ub li c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s )   {

    i n t   n ;

    d o u b l e   sum ;

    n = I n t e g e r . p a r s e I n t ( a r g s [ 0 ] ) ;

     / / M e t h o d e n a u f r u f 

     / / sum = . . . . ;

    S y s t e m . o u t . p r i n t l n ( s u m ) ;

    }

     / / M e t h o d e n d e f i n i t i o n

    }

    L ösung zu 2.1

    p u bl i c c l a s s   H a r m o n i s c h e R e i h e   {

    p ub li c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s )   {

    i n t   n ;

    d o u b l e   sum ;

    n = I n t e g e r . p a r s e I n t ( a r g s [ 0 ] ) ;

    sum = b e r e c h n e R e i h e ( n ) ;

    S y s t e m . o u t . p r i n t l n ( s u m ) ;

    }

    p u bl i c s t a t i c d ou bl e   b e r e c h n e R e i h e ( i n t   n )   {d o u b l e   s = 0 . 0 ;

    f o r   ( i n t   k = 1 ; k   

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    8/19

    2. 8

    }}

    Beispielaufrufe und Ergebnisse:

    >   j a v a H a r m o n is c h e R ei h e 2

    1 . 5

    >   j a v a H a r m o n is c h e R ei h e 1 0

    2 . 9 2 8 9 6 8 2 5 3 9 6 8 2 5 3 8

    Aufgabe 2.2

    Für ein Seminar muß jeder Teilnehmer eine schriftliche Hausarbeit anfertigen und einen mündlichen Vortrag hal-

    ten. Dafür sind jeweils maximal 10 Punkte erhältlich. Zur Ermittlung der Gesamtpunktzahl wird die Punktzahl

    der Hausarbeit mit 3, die des Vortrags mit 2 multipliziert. Das folgende Java-Programm soll die Gesamtpunktzahl

    eines Studenten berechnen, der für die Hausarbeit 5 Punkte, für den Vortrag 8 Punkte erhalten hat. Was geschieht?

    Wie kann man den Fehler beheben?

    p u bl i c c l a s s   S e m i n a r u n k t e   {

    p u bl i c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s ) {

    i n t   h a u s a r b e i t = 5 , v o r t r a g = 8 , summe = 0 ;b e w e r te n ( h a u s a r b e i t , v o r t r a g , summe ) ;

    S y st em . o u t . p r i n t l n ( ” e r r e i c h t e P u n k t e : ” + summe ) ;

    }

    p u bl i c s t a t i c v oi d   b e w e r t e n ( i n t   h ,   i n t   v ,   i n t   s )   {h = h ∗3 ;v = v ∗2 ;s = h + v ;

    r e t u r n ;

    }}

    L ösung zu 2.2

    Da Kopien der Werte der Parameter an das Unterprogramm übergeben werden (call by value), bleiben die Inhalteder Speicherzellen im aufrufenden Programm unverändert.  Übergabeparameter sind also nicht geeignet, um Werte

    an das aufrufende Programm zurückzuliefern. Statt dessen kann ein eigener Rückgabewert vereinbart werden:

    p u bl i c c l a s s   S e m i n a r u n k t e   {

    p u bl i c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s ) {i n t   h a u s a r b e i t = 5 , v o r t r a g = 8 , summe = 0 ;

    summe = b e w e r te n ( h a u s a r b e i t , v o r t r a g ) ;

    S y st em . o u t . p r i n t l n ( ” e r r e i c h t e P u n k t e : ” + summe ) ;

    }

    p ub li c s t a t i c i n t   b e w e r t e n (  i n t   h ,   i n t   v )   {h = h ∗3 ;v = v ∗2 ;r e t u r n   h + v ;

    }}

    Aufgabe 2.3

    Ein Mobilfunkanbieter stellt Ihnen 3 Tarife zur Wahl:

    Tarif 1 kostet 11,75 Euro Grundgebühr im Monat, zusätzlich kostet jede Gesprächsminute 50 Cent.

    Tarif 2 kostet 19,25 Euro Grundgebühr, dafür schlägt die Gesprächsminute aber nur mit 25 Cent zu Buche.

    Tarif 3 hat eine monatliche Grundgebühr von 22,75 Euro, darin sind 30 Gesprächsminuten pro Monat frei. Erst

     jede darüber hinaus gehende Minute kostet dann 0,375 Euro.

    Schreiben Sie ein Java-Programm, das für jeden Tarif die Monatsrechnung (für 10 bzw. 20, 30, 40, . . . 100 Minuten

    Gespräche im Monat) erstellt.

    Definieren Sie für jeden Tarif eine eigene Methode.

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    9/19

    2. 9

    L ösung zu 2.3

    p u bl i c c l a s s   T a r i f R e c h n e r{p ub li c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s )   {

    i n t   m i n u t e ;

    S y s t e m . o u t . p r i n t l n ( ” M in   \ t T a r i f 1   \ t T a r i f 2   \ t T a r i f 3 ” ) ;f o r   ( m in ut e = 1 0 ; m in ut e  

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    10/19

    2. 10

    L ösung zu 2.4

    p u bl i c c l a s s   NewtonNS   {

    p ub li c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s )   {d o u b l e   x = 1 ;

    d o u b l e   e ps = 1 . 0 e−15 ;

    w h i l e   ( ( a b s ( f ( x ) )   >   e p s ) & ( f s ( x ) ! = 0 ) )   {x = x   −   ( f ( x ) / f s ( x ) ) ;Sys tem . o u t . p r i n t l n ( ” x = ” + x + ” f ( x ) = ” + f ( x ) ) ;

    }}

    p u bl i c s t a t i c d ou bl e   f (  d o u b l e   x )   {r e t u r n   x∗x   −2;

    }

    p u bl i c s t a t i c d ou bl e   f s ( d o u b l e   x )   {r e t u r n   2∗x ;

    }

    p u bl i c s t a t i c d ou bl e   abs ( d o u b l e   x )   {i f    ( x   <   0 )

    x =  −x ;r e t u r n   x ;

    }

    }

    zu *) Um die Anzahl der Schleifendurchläufe zu ermitteln, kann eine Integer-Variable eingebaut werden. Die

    Funktion  f   wird in jedem Durchlauf dreimal aufgerufen (einmal zum Auswerten der Schleifen-Abbruch-

    Bedingung, einmal zu Berechnung des neuen Näherungswertes und einmal für die Ausgabe. Die Funktion f ′

    wird in jedem Durchlauf zweimal aufgerufen. Das sollte durch Einführung von Zwischenvariablen verbessert

    werden.

    **) Dazu ersetzen wir die Methode fs durchp u bl i c s t a t i c d ou bl e   f s ( d o u b l e   x )   {

    d o u b l e   d = 1 . 0 ;

    d o u b l e   f 1 , f 2 , f x ;

    d o u b l e   e ps = 1 . 0 e−15 ;f x = f ( x ) ;

    f 2 = ( f ( x +d )   −   fx ) / d ;do   {

    f 1 = f 2 ;

    d = 0 .5∗ d ;f 2 = ( f ( x +d )   −   fx ) / d ;

    }   w h i l e   ( abs ( f1   −   f 2 )   >   eps ) ;r e t u r n   f 2 ;

    }

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    11/19

    3. 11

    3 Rekursion

    Aufgabe 3.1

    a) In der Vorlesung haben Sie eine rekursive Java-Methode zur Berechnung der Fibonacci-Zahlen kennengelernt,

    deren Berechnungsaufwand in O(2n) liegt. Nehmen Sie an, die Anzahl der Arbeitsschritte zur Berechnung dern-ten Fibonaccizahl sei  exakt  = 2n. Wie lange wird für die Berechnung der 40. Fibonaccizahl benötigt, wenn

    100.000 Arbeitsschritte pro Sekunde ausgeführt werden können?

    b) Schreiben Sie eine iterative Java-Methode zur Berechnung der Fibonaccizahlen.

    c) Welche Komplexität hat Ihr Algorithmus? Die wievielte Fibonaccizahl könnte (bei 100.000 Arbeitsschritten/-

    Sekunde) in einer Sekunde berechnet werden?

    L ösung zu 3.1

    a) Der Aufwand beträgt 240 ≈ 1.0995116 ∗ 1012 Arbeitsschritte, bei 100.000 Schritten/Sekunde werden dafür ca.10995116 Sekunden benötigt, das sind ungefähr 3054 Stunden.

    b)   p ub l ic c l a s s   F i b   {

    p ub li c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s )   {i n t   n = I n t e g e r . p a r s e I n t ( a r g s [ 0 ] ) ;

    System . ou t . p r i n t l n ( f i b I t e r a t i v (n ) ) ;

    }

    p ub li c s t a t i c i n t   f i b I t e r a t i v ( i n t   n )   {i n t   i , f 0 , f 1 , f 2 = 0;

    i f    ( n   <   2 )

    r e t u r n   1 ;

    e l s e   {f 0 = 1;

    f 1 = 1;

    i = 1 ;

    w h i l e   ( i   <   n )   {f 2 = f 0 + f 1 ;

    f 0 = f 1 ;f 1 = f 2 ;

    i = i + 1;

    }r e t u r n   f 2 ;

    }}

    }

    c) Der Arbeitsaufwand liegt inO(n). Wenn wir annehmen, dass die Proportionalitätskonstante c = 10 ist, könnenin einer Sekunde n =   100000

    10  = 10000 Fibonaccizahlen berechnet werden.

    Aufgabe 3.2

    Programmieren Sie je eine iterative und eine rekursive Methode zur Berechnung von  xy für x, y ∈ N0.Zur Erinnerung: x0 = 1.

    L ösung zu 3.2

    p u bl i c c l a s s   P o t e n z b e r e c h n u n g   {

    p ub li c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s )   {i n t   p r ;   / / E r g e b n i s d e r r e k u r s i v e r n B er ec hn un g

    i n t   p i ;   / / E r g b e n is d e r i t e r a t i v e n B er ec hn u ng

    i n t   x ;   / / E i n g a b ew e r t e

    i n t   y ;

    x = I n t e g e r . p a r s e I n t ( a r g s [ 0 ] ) ;

    y = I n t e g e r . p a r s e I n t ( a r g s [ 1 ] ) ;

    p r = p o t en z R ek ( x , y ) ;

    S ys te m . o u t . p r i n t l n ( x + ” h oc h ” + y + ” = ” + p r ) ;

    p i = p o t e n z I t ( x , y ) ;

    S ys te m . o u t . p r i n t l n ( x + ” h oc h ” + y + ” = ” + p i ) ;

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    12/19

    4. 12

    }

    p ub li c s t a t i c i n t   p o t e n z R e k ( i n t   x ,   i n t   y )   { / / r e k u r s i v e Me th o de z u r B e r e ch n u n g d e r P o t e n z vo n x un d y

    i n t   p o t e n z ;   / / Z w i s c he n w e r t  

    i f    ( y == 0 )

    p o t e n z = 1 ;

    e l s ep o te n z = x   ∗   p o t e n zR e k ( x , y−1) ;

    r e t u r n   p o t e n z ;

    }

    p ub li c s t a t i c i n t   p o t e n z I t ( i n t   x ,   i n t   y )   { / / i t e r a t i v e Me th o de z u r B e r e ch n u n g d e r P o t e n z vo n x un d y

    i n t   p o t e n z ;   / / Z w i s c h e n w e rt  

    p o t e n z = 1 ;

    f o r   ( i n t   i = 1; i  

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    13/19

    4. 13

    4 Felder

    Aufgabe 4.1

    Schreiben Sie ein Programm, das die schriftliche Addition zweier sehr großer (z.B. 50-stelliger) Zahlen simuliert.

    Die beiden Zahlen sollen jeweils in einem Integer-Array dargestellt werden. Jedes Array-Element enthält genau

    eine Dezimalstelle.

    Bedenken Sie, dass die Summe eine Stelle mehr haben kann.

    Beispiel für die Darstellung der 12-stelligen Zahl 401312570486 (401 Mrd. 312 Mio. . . .):

    i n t   [ ] l an g Za hl =   new i n t  [ 1 1 ] ;

    l a ng Z ah l [ 0 ] = 6 ;

    l a ng Z ah l [ 1 ] = 8 ;

    l a ng Z ah l [ 2 ] = 4 ;

    l a ng Z ah l [ 3 ] = 0 ;

    l a ng Z ah l [ 4 ] = 7 ;

    l a ng Z ah l [ 5 ] = 5 ;

    l a ng Z ah l [ 6 ] = 2 ;

    l a ng Z ah l [ 7 ] = 1 ;

    l a ng Z ah l [ 8 ] = 3 ;

    l a ng Z ah l [ 9 ] = 1 ;

    l a n g Z ah l [ 1 0 ] = 0 ;

    l a n g Z ah l [ 1 1 ] = 4 ;

    Sie können den Zufallszahlengenerator benutzen, um die beiden 50-stelligen Summanden mit Werten zu belegen:

    i n t   l = 5 0 ;   / / A nz ah l d er S t e l l e n

    i n t   [ ] z ah l1 =   new i n t  [ l ] ;   / / 1 . S um ma nd  

    i n t   [ ] z ah l2 =   new i n t  [ l ] ;   / / 2 . S um ma nd  

     / / d i e b e i d e n Sum man den m i t z u f a e l l i g e n We r t en b e l e g e n

    R an do m r =   new   ja va . u t i l . Random () ;

    f o r   (  i n t   i = 0 ; i   <   l ; i + +)   {z a h l 1 [ i ] = r . n e x t I n t ( 1 0 ) ;

    z a h l 2 [ i ] = r . n e x t I n t ( 1 0 ) ;

    }

    L ösung zu 4.1

    impo rt   ja va . u t i l . ∗ ;

    p u bl i c c l a s s   L a n g Z a h l   {

    p ub li c s t a t i c i n t  [ ] a dd ( i n t   [ ] a ,   i n t  [ ] b )   { / / V o r a u s s e t z u n g : a un d b s i n d g l e i c h l a n g

    i n t  [ ] c =   new i n t   [ a . l e n g t h + 1 ] ;   / / F e ld f u e r d as E r ge b ni s

    i n t   i ;   / / S c h l e i f e n z a eh l e r  

    i n t   s ;   / / Summe d e r a k t u e l l b e re c h n et e n S t e l l e

    i n t   u e b e r t ra g = 0 ;   / / U eb er tr ag f u e r d i e n a e c hs t e S t e l l e

    f o r   ( i = 0; i   <   c . l e n g t h  −1; i = i + 1)   {s = a [ i ] + b [ i ] ;

    c [ i ] = ( s + u e b e r t r a g ) % 1 0 ;

    u e be r tr a g = s / 1 0;

    }c [ c . len gt h −1] = u e b e r t r a g ;r e t u r n   c ;

    }

    p ub li c s t a t i c v oi d   a u s g e be n ( S t r i n g s ,   i n t  [ ] f e l d )   {i n t   i ;

    S y s t e m . o u t . p r i n t ( s ) ;

    f o r   ( i = f e l d . l e n g th  −1; i   >= 0 ; i = i  −1)S y s te m . o u t . p r i n t ( f e l d [ i ] ) ;

    S y s te m . o u t . p r i n t l n ( ) ;

    }

    p ub li c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s )   {

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    14/19

    4. 14

    i n t   a nz S = 5 0 ;   / / A nz ah l d er S t e l l e n

    i n t  [ ] z ah l1 =   new i n t  [ anzS ] ;   / / 1 . S um ma nd  

    i n t  [ ] z ah l2 =   new i n t  [ anzS ] ;   / / 2 . S um ma nd  

    i n t   [ ] z a hl 3 ;   / / E r g e b ni s

     / / d i e b e i d e n Su mma nd en m i t z u f a e l l i g e n We r t e n b e l e g e n

    R an do m r =   new   ja va . u t i l . Random () ;

    f o r   ( i n t   i = 0 ; i   <   a n z S ; i + + )   {

    z a h l 1 [ i ] = r . n e x t I n t ( 1 0 ) ;z a h l 2 [ i ] = r . n e x t I n t ( 1 0 ) ;

    }

     / / E r g e b n i s b e r e c h n e n un d a u s g e b e n

    z a h l 3 = a dd ( z a h l 1 , z a h l 2 ) ;

    a u s g e b e n ( ” 1 . Su mm an d : ” , z a h l 1 ) ;

    a u s g e b e n ( ” 2 . Su mm an d : ” , z a h l 2 ) ;

    a u sg e be n ( ” Summe : ” , z a h l3 ) ;

    }}

    Aufgabe 4.2

    Schreiben Sie ein Programm, das das Minimum und das Maximum der Einträge eines Feldes bestimmt.

    a) Strukturieren Sie Ihr Programm durch Methoden. Sie sollten mindestens die folgenden Teilaufgaben in je einer

    Methode realisieren:

    •  Belegen des Feldes mit Zufallszahlen.•  Ausgabe der Feldelemente auf dem Bildschirm.•  Suchen des kleinsten Elementes im Feld.•  Suchen des größten Elementes im Feld.

    b)  Ändern Sie ihr Programm nun so ab, dass innerhalb  einer  Methode sowohl Minimum als auch Maximum

    bestimmt werden und beide Werte an das Hauptprogramm zurückgegeben werden.

    L ösung zu 4.2

    impo rt   ja va . u t i l . ∗ ;

    p u bl i c c l a s s   FeldMinMax   {

    p ub li c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s )   {

    i n t  [ ] e i n g a be ;   / / d a s F e l d m i t d en E i n ga b ew e rt e n

    i n t   l ;   / / La en ge d e s F e l d es

    i n t   min ;   / / m i n i ma l e r E i n t r ag

    i n t   max ;   / / m a xi m a le r E i n t r a g

    l = I n t e g e r . p a r s e I n t ( a r g s [ 0 ] ) ;

    e i n g ab e =   new i n t  [ l ] ;

    b e l e g e n ( e i n g a b e ) ;

    d r u c k e n ( e i n g a b e ) ;

     / / f u e r A u f g a b e n T e i l a )

    m in = m in im um ( e i n g a b e ) ;

    max = maximum( ein ga be ) ;

    S y st em . o u t . p r i n t l n ( ” K l e i n s t e r W er t : ” + m in ) ;

    S y s te m . o u t . p r i n t l n ( ” G r o e s s t e r W e rt : ” + m ax ) ;

     / / f u e r A u f g a b e n t e i l b )

    S y s te m . o u t . p r i n t l n ( ” K l e i n s t e r W e rt : ” + m in ma x ( e i n g a b e ) [ 0 ] ) ;

    S y s te m . o u t . p r i n t l n ( ” G r o e s s t e r W e rt : ” + m in ma x ( e i n g a b e ) [ 1 ] ) ;

    }

    p ub li c s t a t i c v oi d   d r u c k e n ( i n t   [ ] f e l d )   {f o r   ( i n t   i = 0 ; i   <   f e l d . l e n g t h ; i + +)

    S ys te m . o u t . p r i n t ( f e l d [ i ] + ” ” ) ;

    S y s te m . o u t . p r i n t l n ( ) ;

    }

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    15/19

    4. 15

    p u bl i c s t a t i c v oi d   b e l e g e n (  i n t  [ ] f e l d )   { / / b e l e g t e i n I n t e g e r −F el d m it Z u f a l l s z a h l e n z wi s c he n 0 u nd 9 9

    R an do m r =   new   Random ( ) ;

    f o r   ( i n t   i = 0 ; i   <   f e l d . l e n g t h ; i + +)

    f e l d [ i ] = r . n e x t I n t ( 1 0 0) ;

    }

    p ub li c s t a t i c i n t   minimum(  i n t  [ ] f e l d )   {i n t   m in = f e l d [ 0 ] ;

    f o r   ( i n t   i = 1 ; i   <   f e l d . l e n g t h ; i + +)

    i f    ( f e l d [ i ]   <   m i n )

    m in = f e l d [ i ] ;

    r e t u r n   min ;

    }

    p ub li c s t a t i c i n t   maximum (  i n t  [ ] f e l d )   {i n t   m ax = f e l d [ 0 ] ;

    f o r   ( i n t   i = 1 ; i   <   f e l d . l e n g t h ; i + +)

    i f    ( f e l d [ i ]   >   max)

    max = f e l d [ i ] ;

    r e t u r n   max ;

    }

    p ub li c s t a t i c i n t  [ ] m in ma x ( i n t   [ ] f e l d )   {i n t  [ ] m =   new i n t  [ 2 ] ;

    i n t   m in = f e l d [ 0 ] ;

    i n t   m ax = f e l d [ 0 ] ;

    f o r   ( i n t   i = 1 ; i   <   f e l d . l e n g t h ; i + +)   {i f    ( f e l d [ i ]   <   m i n )

    m in = f e l d [ i ] ;

    i f    ( f e l d [ i ]   >   max)

    max = f e l d [ i ] ;

    }m [ 0 ] = m in ;

    m [ 1 ] = m ax ;

    r e t u r n   m;

    }}

    Aufgabe 4.3

    In folgendem Programm wird eine Integer-Array   zufallszahlender Länge 100 mit zufälligen Werten zwi-

    schen 0 und 9 belegt.

    Definieren Sie eine Methode, die für jede der Zahlen 0 bis 9 zählt, wie oft sie in dem Feld zufallszahlen vorkommt

    und diese Anzahlen in einem zweiten Array der Länge 10 zurückgibt.

    impo rt   ja va . u t i l . ∗ ;

    p u bl i c c l a s s   Z u f a l l s Z a e h l e r   {

    p ub li c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s )   {

    i n t  [ ] z u f a l ls z a h l e n =   new i n t  [ 1 0 0 ] ;

    i n t   [ ] a n za h l ;

    b e l e ge n ( z u f a l l s z a h l e n ) ;

    S y st em . o u t . p r i n t l n ( ” z u f a e l l i g g e zo g en e n Z a h l e n : ” ) ;

    d r u ck e n ( z u f a l l s z a h l e n ) ;

     / / A u f r u f d e r Me th o de z a e h l e n ( P a r a m e t e r ? ) :

     / / a n z a h l = z a e h l e n ( ? ) ;

     / / S y s t e m . o u t . p r i n t l n ( ” H a e u f i g k e i t : ” ) ;

     / / d r u c k e n ( a n z a h l ) ;

    }

    p ub li c s t a t i c v oi d   b e l e g e n ( i n t   [ ] f e l d )   {

    R an do m r =   new   Random ( ) ;f o r   ( i n t   i = 0 ; i   <   f e l d . l e n g t h ; i + +)

    f e l d [ i ] = r . n e x t I n t ( 1 0 ) ;

    }

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    16/19

    4. 16

    p ub li c s t a t i c v oi d   d r u c k e n ( i n t   [ ] f e l d )   {f o r   ( i n t   i = 0 ; i   <   f e l d . l e n g t h ; i + +)

    S ys te m . o u t . p r i n t ( f e l d [ i ] + ” ” ) ;

    S y s te m . o u t . p r i n t l n ( ) ;

    }

     / / D e f i n i t i o n d e r Me th o de z a e h l e n ( P a r a m e t e r ? )

    }

    Ein Beispielaufruf liefert folgendes Ergebnis:

    > java ZufallsZaehler

    zufaellig gezogene Zahlen:

    2 2 0 4 8 9 6 0 9 7 4 2 2 1 0 9 3 4 0 3 6 6 2 9 9

    9 4 5 8 3 6 0 0 0 4 8 4 6 6 9 2 3 0 8 9 3 6 6 4 0

    3 2 4 8 0 9 7 3 3 9 0 2 3 5 5 3 8 7 5 7 7 9 3 8 0

    4 9 5 8 8 6 0 3 9 3 2 7 9 0 4 7 2 6 1 2 9 5 0 8 6

    Haeufigkeit:

    15 2 11 13 10 6 11 7 10 15

    L ösung zu 4.3

    impo rt   ja va . u t i l . ∗ ;

    p u bl i c c l a s s   Z u f a l l s Z a e h l e r   {

    p ub li c s t a t i c v oi d   m ai n ( S t r i n g [ ] a r g s )   {

    i n t  [ ] z u f a l ls z a h l e n =   new i n t  [ 1 0 0 ] ;

    i n t   [ ] a n za h l ;

    b e l e ge n ( z u f a l l s z a h l e n ) ;

    S y st em . o u t . p r i n t l n ( ” z u f a e l l i g g e z o g en e Z a h l en : ” ) ;

    d r u ck e n ( z u f a l l s z a h l e n ) ;

    a n z a hl = z a e h l e n ( z u f a l l s z a h l e n ) ;

    S y s te m . o u t . p r i n t l n ( ” H a e u f i g k e i t : ” ) ;

    d r u c k e n ( a n z a h l ) ;

    }

    p ub li c s t a t i c v oi d   b e l e g e n ( i n t   [ ] f e l d )   {R an do m r =   new   Random ( ) ;

    f o r   ( i n t   i = 0 ; i   <   f e l d . l e n g t h ; i + +)

    f e l d [ i ] = r . n e x t I n t ( 1 0 ) ;

    }

    p ub li c s t a t i c v oi d   d r u c k e n ( i n t   [ ] f e l d )   {f o r   ( i n t   i = 0 ; i   <   f e l d . l e n g t h ; i + +)

    S ys te m . o u t . p r i n t ( f e l d [ i ] + ” ” ) ;

    S y s te m . o u t . p r i n t l n ( ) ;}

    p ub li c s t a t i c i n t  [ ] z a e h le n ( i n t   [ ] f e l d )   {i n t  [ ] e r g eb n is =   new i n t  [ 1 0 ] ;

    f o r   ( i n t   i = 0 ; i   <   e r g e b n i s . l e n g t h ; i + + )

    e r g e b n i s [ i ] = 0 ;

    f o r   ( i n t   i = 0 ; i   <   f e l d . l e n g t h ; i + +)   {e r g e b n i s [ f e l d [ i ] ] + + ;

    }r e t u r n   e r g e b n i s ;

    }}

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    17/19

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    18/19

    5. 18

    p u bl i c c l a s s   LKW   e x t e n d s   KFZ   {

    s t a t i c i n t   v e r f ue g ba r = 0 ;   / / n ur f ̈  u r T e i l b )

    i n t   N u t z l a s t ;

    LKW ( S t r i n g K e nn z ,   i n t   KM,   i n t   l a s t )   {s u p e r (Kennz , KM) ;

    N u t z l a s t = l a s t ;A b s t an d I n s p = 2 0 0 00 ;

    i f    ( N u t z l a s t   >   1 8 0 0 )

    P r e i s = 8 0;

    e l s e

    P r e i s = 5 0;

    v e rf u eg b ar = v e rf u eg b ar + 1 ;   / / T e il b )

    }

     / / f ¨ u r T e i l b )

    v o i d   v e r m i e t e n ( )   {i f    ( f r e i )

    v e r f u eg b a r = v e r f ue g b a r   −   1 ;s u p e r  . v e r m i e t e n ( ) ;

    }

    v o i d   z u r u e c k g e b e n (  i n t   t a g e ,   i n t   gefKM )   {s u p e r  . z u r u e c k g e b e n ( t a g e , g ef KM ) ;

    v e rf u eg b ar = v e rf u eg b ar + 1 ;

    }}

    p u bl i c c l a s s   PKW   e x t e n d s   KFZ   {

    s t a t i c i n t   v e r f ue g ba r = 0 ;   / / n ur f ̈  u r T e i l b )

    PKW ( S t r i n g K e nn z ,   i n t   KM)   {s u p e r (Kennz , KM) ;

    A b s t an d I n s p = 3 0 0 00 ;P r e i s = 3 0 ;

    v e rf u eg b ar = v e rf u eg b ar + 1 ;   / / T e il b )

    }

    v o i d   z u r ue c kg e b en (  i n t   t a g e ,   i n t   gefKM )   {s u p e r  . z u r u e c k g e b e n ( t a g e , g ef KM ) ;

    w a s c h e n ( ) ;

     / / f ¨ u r T e i l b )

    v e rf u eg b ar = v e rf u eg b ar + 1 ;

    }

    v o i d   w as ch en ( )   {S y s te m . o u t . p r i n t l n ( K e n n z e i c h e n + ” w i r d g e w a s ch e n ” ) ;

    }

     / / f ¨ u r T e i l b )

    v o i d   v e r m i e t e n ( )   {i f    ( f r e i )

    v e r f u eg b a r = v e r f u eg b a r   −   1 ;s u p e r  . v e r m i e t e n ( ) ;

    }}

    p u bl i c c l a s s   A u t o v e r m i e t u n g   {

    p ub li c s t a t i c v oi d   m ai n ( S t r i n g a r g s [ ] )   {PKW p1 =   new   PKW( ” P−KW 1 ” , 1 2 ) ;

    PKW p2 =   new   PKW( ” P−KW 2 ” , 0 ) ;LKW l1 =   new   LKW( ”L−KW 1 ” , 1 9 0 0 0 , 1 5 0 0 ) ;z e i g e V e r f u e g b a r e ( ) ;

    p 1 . v e r m i e t e n ( ) ;

  • 8/19/2019 Aufgabensammlung Mathematik Mit Java

    19/19

    5. 19

    z e i g e V e r f u e g b a r e ( ) ;

    p 1 . v e r m i e t e n ( ) ;

    z e i g e V e r f u e g b a r e ( ) ;

    p 1 . z u r u e c k g e b e n ( 2 , 1 2 0 ) ;

    z e i g e V e r f u e g b a r e ( ) ;

    l 1 . v e r m i e t e n ( ) ;

    z e i g e V e r f u e g b a r e ( ) ;

    l 1 . z u r u e c k g e b e n ( 3 , 1 8 0 0 ) ;

    z e i g e V e r f u e g b a r e ( ) ;l 1 . v e r m i e t e n ( ) ;

    z e i g e V e r f u e g b a r e ( ) ;

    l 1 . z u r u e c k g e b e n ( 1 , 1 0 0 ) ;

    z e i g e V e r f u e g b a r e ( ) ;

    }

     / / n u r f u e r T e i l b )

    s t a t i c v oi d   z e i g e V e r f u e g b a r e ( )   {S y s te m . o u t . p r i n t l n ( ) ;

    S y s te m . o u t . p r i n t l n ( ” f r e i : ” + PKW . v e r f u e g b a r + ” PKW u n d ” +

    LKW. ve rf ue gb ar + ” LKW” ) ;

    }}

    Das Programm liefert folgende Ausgabe

    > java Autovermietung

    frei: 2 PKW und 1 LKW

    P-KW 1 wird vermietet

    frei: 1 PKW und 1 LKW

    P-KW 1 ist bereits vermietet

    frei: 1 PKW und 1 LKW

    Rechnung fuer P-KW 1: 60

    P-KW 1 wird gewaschen

    frei: 2 PKW und 1 LKW

    L-KW 1 wird vermietet

    frei: 2 PKW und 0 LKW

    Rechnung fuer L-KW 1: 150

    Inspektion durchfuehren

    frei: 2 PKW und 1 LKW

    L-KW 1 wird vermietet

    frei: 2 PKW und 0 LKW

    Rechnung fuer L-KW 1: 50

    frei: 2 PKW und 1 LKW