aufgabensammlung mathematik mit java
TRANSCRIPT
-
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