Übung: Erstes Programm Seite 1 Aufgabe 1 – Grundrechenarten a) Schreiben Sie ein Programm, das die Summe und die Differenz von zwei ganzen Zahlen ausgibt. Beispiel-Bildschirmausgabe: b) Erweitern Sie Ihr Programm um Multiplikation und Division. Außerdem soll der Rest aus der Division der beiden Ganzzahlen ausgegeben werden. (Sie erhalten diesen durch den Modulo-Operator %.) Aufgabe 1b – Die Datentypen short und int Erstellen Sie ein Programm, welches einer Variable zahl vom Typ short den Wert 32 zuweist und geben Sie sie aus mit System.out.println("Die Zahl lautet "+zahl); Testen Sie das Programm. Nun vergrößern Sie die Zahl, indem hinten immer wieder eine 0 anfügt wird. Was passiert, wenn die Zahl zu groß für den Datentyp short wird? Ersetzen Sie im nächsten Schritt short durch int und prüfen, welche Zahlen hiermit noch darstellbar sind. Übung: Einfache Berechnungen 19. September 2013 Seite 1 Aufgabe 4 – Swap Schreiben Sie ein Programm, das die Inhalte zweier Variablen des Typs int vertauscht. Eine Eingabe ist nicht erforderlich. Aufgabe 5 – Fahrplan Ein Zug fährt in Köln um 14:40 Uhr ab und erreicht Frankfurt um 15:20 Uhr. Nach dem Ausbau der Strecke ist die Fahrtzeit um 15% geringer. Erstellen Sie hierzu eine Klasse namens Fahrplan, die die neue Fahrtzeit berechnet und die neue Ankunftszeit ausgibt. Das Programm soll die beiden vorgegebenen Zeiten in 24-Stunden-Notation als Ganzzahlen verarbeiten (z.B. Abfahrt: 1440). Nach der Berechnung soll das Ergebnis auch in diesem Format augegeben werden. (Hinweis: Zur Vereinfachung der Rechnung sollen die Zeiten in Minuten umgerechnet werden. Dies geht besonders gut mit dem Modulo-Operator.) Seite 1 Aufgabe 2 – Gleichungen Es interessieren die verschiedenen Funktionswerte der Gleichung 3x2 − 8x + 4 Bei x=0.0 hat die Gleichung den Wert 4.0 PS: Bei x=2.0 und x=2/3 sollte y=0 sein. Aufgabe 3a – Benzinverbrauch1 Ein Auto muss zum Tanken, nachdem es eine Strecke von 548 km zurückgelegt hat. Der Fahrer entnimmt der Tankquittung, dass sein Fahrzeug für diese Strecke 41.3 Liter Benzin verbraucht hat. Er wüsste gerne, wie viel sein Auto auf 100 km verbraucht. Schreiben Sie ein Programm das den Durchschnittsverbrauch (in Liter pro 100 km) berechnet. Aufgabe 3b – Benzinverbrauch2 Ein Auto verbraucht auf normalen Straßen 8 Liter Benzin auf 100 km, auf weniger guten Straßen 15% mehr. Schreiben Sie ein Programm zur Ausgabe der Entfernung, die das Auto auf normalen und schlechten Straßen mit einem vollen 40-Liter-Tank fahren kann. WS 2013/14, Übung zum Java-Vorkurs für MATSE Übung: Eingaben von der Tastatur lesen 19. September 2013 Seite 1 Aufgabe 8 – Benzinverbrauch3 Erstellen Sie zum Programm aus Aufgabe 3 (Benzinverbrauch1) eine Version, die die Angaben zur gefahrenen Strecke und der für diese Strecke benötigten Benzinmenge vom Benutzer erfragt und diese dann von der Tastatur einliest. Testen Sie Ihr Programm mit verschiedenen Eingaben. Aufgabe 9 – BodyMassIndex1 Erstellen Sie zum Programm aus Aufgabe 7 (BodyMassIndex) ebenfalls eine Version mit einer Benutzereingabemöglichkeit für die Angaben zu Körpergewicht und -größe. Aufgabe 10 – Widerstand Für einen elektrischen Widerstand gilt: R = U/I. R - Widerstand des Leiters U - Spannung am Leiter Beispiel-Bildschirmausgabe: Startzeit: 1440 Alte Ankunftszeit: 1520 Neue Ankunftszeit: 1514 I - Stromstärke im Leiter Der Benutzer soll Spannung und Stromstärke eingeben können. Berechnen Sie daraus den Widerstand und geben Sie ihn aus. Aufgabe 6 – Zubringerbus Zwischen zwei Terminals eines Flughafens verkehrt ein Zubringerbus, der jeweils zur halben und zur vollen Stunde abfährt. Schreiben Sie ein Programm, das eine Uhrzeit in Form einer initialisierten Variablen erhält (in 24-Stunden-Notation) und berechnet, wie lange es bis zur Abfahrt des nächsten Busses noch dauert. (Hinweis: Es werden keine Verzweigungen benötigt, nur der Modulo-Operator) Aufgabe 7 – BodyMassIndex Schreiben Sie ein Programm, das den Body-Mass-Index (BMI) einer Person berechnet. Dieser ergibt sich nach folgender Formel: M asse BM I = Größe2 wobei M asse das Körpergewicht in Kilogramm und Größe die Körpergröße in Metern ist. Der berechnete BMI-Wert ist vor der Ausgabe auf den nächsten ganzzahligen Wert auf- bzw. abzurunden. Beispiel-Bildschirmausgabe: Gewicht in kg: 64 Groesse in cm: 172 BMI: 22 WS 2013/14, Übung zum Java-Vorkurs für MATSE Erstes Programm Schreiben Sie ein Programm mit einer Variablen x vom Typ double und weisen Sie der Variablen nacheinander die Werte 0, 1/3, 2/3, 1., 2. und 3. zu. Berechnen Sie den Funktionswert y an der Stelle x und geben für jedes x den entsprechenden y-Wert wie folgt aus: Das Ergebnis der Addition 23+4 ist 27. Das Ergebnis der Subtraktion 23-4 ist 19. WS 2013/14, Übung zum Java-Vorkurs für MATSE Übung: 19. September 2013 Beispiel-Bildschirmausgabe: U (Volt) = 10.0 I (Ampere) = 4.0 R (Volt/Ampere) = 2.5 Aufgabe 11 – Preisnachlass Ein Geschäftsinhaber plant ein Aktionswochenende, an dem auf alle Artikel ein Preisnachlass von 20% gewährt werden soll. Zum Berechnen der neuen Preise benögt er ein Programm, das nach Eingabe des bisherigen Preises den reduzierten Preis und außerdem die in diesem Betrag enthaltene Mehrwertsteuer von 19% auf den Nettopreis ausgibt. Erstellen Sie ein entsprechendes Java-Programm. Beispiel-Bildschirmausgabe: alter Preis: 39.90 neuer Preis: 31.92 Mwst: 5.10 WS 2013/14, Übung zum Java-Vorkurs für MATSE 19. September 2013 Übung: Berechnungen von Formeln Seite 1 Aufgabe 12 – Einstein Die berühmte Formel von Einstein für die Energie in Joule lautet: E = m · c2 . Die Lichtgeschwindigkeit sei ungefähr c = 300 000 000 m/s. Für die Masse m soll der Benutzer eine Anzahl an Tafeln Schokolade eingeben (eine Tafel wiegt 100 g = 0.1 kg). Nun soll mit der obigen Formel berechnet werden, wieviel PetaJoule an Energie entstehen würden, wenn man die Schokolade vollständig in Energie auflösen könnte. Peta bedeutet dabei 1015 . Um sich die Energiemenge besser vorstellen zu können, soll das Ergebnis mit dem Jahresenergieverbrauch Deutschlands von 15 000 PJ verglichen werden. Geben Sie die Ergebnisse ausführlich aus. Beispiel-Bildschirmausgabe: Anzahl Tafeln Schokolade: 50 Loesen sich die 50 Tafeln Schokolade vollstaendig in Energie auf, so erhaelt man 450.0 PJ. Das sind 3.0 % des Jahresenergieverbrauchs von Deutschland. Aufgabe 13 – Punktabstand Schreiben Sie ein Programm, das den Abstand von zwei Punkten(P1=(x1,y1); P2=(x2,y2)) nach Eingabe der x-, y-Werte berechnet und ausgibt. (Wurzelberechnung in Java: Math.sqrt(4); // ergibt 2) Abstand (P1,P2) = q (x1 − x2 )2 + (y1 − y2 )2 Übung: Fallunterscheidungen (1) Seite 1 Aufgabe 15 – Bestellung Eine Firma liefert bei einem Bestellwert ab 200,- Euro porto- und verpackungsfrei. Für Aufträge unter 200,- Euro beträgt die Versandpauschale 5,50 Euro. Ein Programm soll den Rechnungsbetrag in Abhängigkeit vom Bestellwert ausgeben. Der Bestellwert soll vom Benutzer einzugeben sein. Beispiel-Bildschirmausgabe: Berechnung des Rechnungsbetrages Bestellwert in Euro: 150 Rechnungsbetrag: 155.5 Euro Aufgabe 16 – Gleichung Die Gleichung ax + b = 0 soll für einzulesende Werte a und b vom Computer gelöst werden. Denken Sie daran, dass sowohl a als auch b den Wert 0 annehmen kann. Beispiel-Bildschirmausgabe: Gleichung ax+b=0 a = 3 b = 6 Loesung = -2 Aufgabe 17 – char Ein Wort und eine Zahl sollen eingelesen werden. Das Programm soll den Buchstaben, der an der entsprechenden Stelle des Wortes steht oder eine passende Fehlermeldung ausgegeben. Beispiel-Bildschirmausgabe: Der Punktabstand von P1(3|4), P2(1|2) betraegt: 2.8284271247461903 Aufgabe 14 – Windchill Eine tiefe Temperatur fühlt sich für den Menschen noch kälter an, wenn dazu ein Wind bläst. Dieser Effekt wird Windchill-Effekt genannt. Die gefühlte“ Temperatur wct berechnet sich aus ” der Windgeschwindigkeit v (in km/h gemessen) und der tatsächlichen Temperatur t (gemessen in ◦ C): √ wct = 33 + (0.478 + 0.237 · v − 0.0124 · v)(t − 33) Schreiben Sie ein Programm, das diese Berechnung für Sie durchführt. Beispiel-Bildschirmausgabe: Temperatur in Grad Celsius: 5 Windgeschwindigkeit in km/h: 66 die gefuehlte Temperatur ist: -11.4 Grad C Geben Sie das Ergebnis auf eine Nachkommastelle gerundet aus. WS 2013/14, Übung zum Java-Vorkurs für MATSE Übung: Fallunterscheidungen (1) 19. September 2013 Seite 2 Aufgabe 18a – Switch Erstellen Sie ein Programm, das ein Datum diesen Jahres (Tag und Monat als Zahlen) einliest und ausgibt, wieviele Tage noch bis zum Monatsende vergehen. Aufgabe 18b – Switch Finden Sie die Fehler in der vorgegebenen Datei WievieleFehler.java. Aufgabe 19 – JouleKal Eine Kalorie entspricht 4.19 Joule. Fragen Sie den Benutzer, ob er Kalorien in Joule oder Joule in Kalorien umrechnen möchte. Dann soll er den umzurechnenden Wert eingeben. Ermitteln Sie das Ergebnis und geben Sie es aus. WS 2013/14, Übung zum Java-Vorkurs für MATSE Übung: Fallunterscheidungen (3) 19. September 2013 Seite 1 Aufgabe 21a – BodyMassIndex2 Erweitern Sie das Programm aus Aufgabe 9 (BodyMassIndex1), so dass außer dem dem BMIWert auch ausgegeben wird, ob die Person Untergewicht, Normal- oder Übergewicht hat. Bei der Bewertung des BMI ist das Alter der Person, das zusätzlich eingelesen werden soll, entsprechend der folgenden Tabelle zu berücksichtigen: Alter (Jahre) 19-24 25-34 35-54 > 64 Normalgewicht (BMI-Idealwert) 19-24 20-25 21-27 24-29 Aufgabe 21b – Schaltjahr Schreiben Sie ein Programm, das nach Eingabe einer Jahreszahl ausgibt, ob es sich bei diesem Jahr um ein Schaltjahr handelt oder nicht. Beispiel-Bildschirmausgabe: Moechten Sie (1) Joule in Kalorien oder (2) Calorien in Joule umrechnen? 2 Kalorien: 2000 Joule : 8380 Die Regeln, die festlegen, ob ein Jahr ein Schaltjahr ist oder nicht, lauten wie folgt: • Ist die Jahreszahl durch 4 (ohne Rest) teilbar, aber nicht durch 100, dann ist es ein Schaltjahr mit 366 Tagen. Beispiele: 1980, 1972, 1720 Aufgabe 20 – Klimaklasse Bei Kühlschränken mit Eisfach, besonders mit Tiefkühlfächern, ist auf die vom Hersteller angegebene Umgebungstemperatur des Aufstellorts, angegeben als Klimaklasse zu achten: • Ist die Jahreszahl durch 100 (ohne Rest) teilbar, aber nicht durch 400, dann ist das Jahr kein Schaltjahr und hat nur 365 Tage, z.B. in den Jahren 1700, 1800 und 1900 oder ferner 2100. • Ist die Jahreszahl durch 400 (ohne Rest) teilbar, dann ist das Jahr ein Schaltjahr. Die Jahre 1600 und 2000 waren Schaltjahre. N (Norm): Umgebungstemperaturen von +16 ◦ C bis +32 ◦ C SN (Erweiterte Norm): Umgebungstemperaturen von +10 ◦ C bis +32 ◦ C ST (Subtropen): Umgebungstemperaturen von +18 ◦ C bis +38 ◦ C T (Tropen): Umgebungstemperaturen von +18 ◦ C bis +43 ◦ C Lesen Sie vom Benutzer die minimale und maximale Umgebungstemperatur ein und geben Sie aus, welche Klimaklassen dem entsprechen (können mehrere sein). Entspricht dem keine Klimaklasse, soll dies auch ausgegeben werden. Beispiel-Bildschirmausgabe: Minimale Umgebungstemperatur: 17 Maximale Umgebungstemperatur: 28 Moegliche Klimaklassen: N (Norm): Umgebungstemperaturen von +16 bis +32 Grad Celsius SN (Erweiterte Norm): Umgebungstemperaturen von +10 bis +32 Grad Celsius WS 2013/14, Übung zum Java-Vorkurs für MATSE 19. September 2013 WS 2013/14, Übung zum Java-Vorkurs für MATSE 19. September 2013 Übung: Schleifen (1) Seite 1 Aufgabe 22 – Quadratzahlen Geben Sie die ersten n natürlichen Zahlen zusammen mit ihren Quadratzahlen aus. n soll eingelesen werden. Aufgabe 23 – Summe Lassen Sie den Rechner die Summe der folgenden Zahlen bis zu einem Grenzwert g berechnen und geben Sie die Anzahl der benötigten Glieder aus. Übung: Schleifen (1) Seite 2 Erstellen Sie eine zweite Version des Programms aus Aufgabe 24 (Quersummen), das anstelle der einfachen Quersumme einstellige Quersummen berechnet. Dazu wird von einer mehrstelligen Quersumme solange erneut die Quersumme gebildet, bis diese einstellig wird: z.B. 67 → 6+7 → 13 → 1+3 → 4 1 + 2 + 3 + 4 + 5 + ... + n + ... Beispiel-Bildschirmausgabe: Berechnung der Summe 1 + 2 + 3 + 4 + ... bis zum Grenzwert 16 Nach 6 Gliedern ist 16 erreicht. Die Summe ist 21. Aufgabe 24 – Quersummen Schreiben Sie ein Programm, das einen ganzzahligen Wert einliest, und die Quersumme für diese Zahl berechnet und ausgibt. Beispiel-Bildschirmausgabe: Ganzzahliger Wert: 1234 Die Quersumme der Zahl 1234 ist 1+2+3+4 = 10 Ganzzahliger Wert: Hilfe: 1234 % 10 = 4 1234 / 10 = 123 123 % 10 = 3 Aufgabe 24b – Quersummen Ändern sie das Programm, so dass es wiederholt ganzzahlige Werte einliest, und die Quersumme für jede dieser Zahlen berechnet und ausgibt. Aufgabe 25 – Statistik Schreiben Sie ein Programm, welches eine double-Zahlenfolge einliest, das arithmetische Mittel, die Varianz und die Standardabweichung der Zahlenfolge ermittelt und diese drei Werte ausgibt. Die Anzahl der einzulesenden Folgenwerte soll als erstes eingelesen werden. Zur Erinnerung hier noch die benötigten Formeln: Mittelwert: x= Varianz: σ2 = Standardabweichung: n 1X xi n i=1 n 1X x2 − x 2 n i=1 i √ σ = + σ2 Aufgabe 26 – EinstelligeQuersummen WS 2013/14, Übung zum Java-Vorkurs für MATSE Übung: Schleifen (2) 19. September 2013 Seite 1 Aufgabe 27 – VollkommeneZahlen Eine natürliche Zahl, die gleich der Summe ihrer positiven echten Teiler (d.h. aller Teiler außer sich selbst) ist, wird vollkommene Zahl genannt. Die Zahl 6 ist die kleinste vollkommene Zahl, denn die Summe der Teiler 1, 2 und 3 ergibt wiederum die Zahl 6. Schreiben Sie ein Programm, das jede Zahl von 1 bis 10000 daraufhin untersucht, ob sie diese Eigenschaft besitzt und alle auf diese Weise gefundenen vollkommenen Zahlen ausgibt. Beispiel-Bildschirmausgabe: Vollkommene Zahlen zwischen 1 und 10000: 6 28 496 8128 Aufgabe 28 – Primzahl Lassen Sie prüfen, ob eine long-Zahl eine Primzahl ist. Dividieren Sie die zu prüfende Zahl x durch i = 2, 3, usw. bis i2 > x ist und prüfen Sie, ob die Division xi einen Rest lässt. Beispiel-Bildschirmausgabe: Primzahlpruefung Ganze Zahl eingeben: 66 66 ist keine Primzahl. WS 2013/14, Übung zum Java-Vorkurs für MATSE Übung: 19. September 2013 Schleifen (3) Seite 1 Aufgabe 30 – Zahlendreieck Schreiben Sie ein Programm, das mit for-Anweisungen und print- bzw. println-Anweisungen das folgende Dreieck auf dem Bildschirm ausgibt. Lesen Sie die benötigte Zeilenanzahl (hier fünf) ein. 1 2 3 4 5 2 3 3 4 4 4 5 5 5 5 Passen Sie das Programm zur Ausgabe des Dreiecks so an, dass die Zahlen wie unten dargestellt, zentriert werden: 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 Passen Sie es erneut an, um das Dreieck zentriert und auf dem Kopf stehend auszugeben: Aufgabe 29 – Ausdruck Schreiben Sie ein Programm, das einen Ausdruck der Form zahl1 op zahl2 op ... op zahln berechnet, wobei op für einen der folgenden Operatoren steht: + - * / % Gestalten Sie die Eingabe derart, dass pro Zeile entweder eine Zahl oder ein Operator eingegeben wird. Der gesamte zu berechnende Ausdruck soll also über mehrere Zeilen verteilt eingelesen werden. Die Eingabe des Ausdrucks soll durch Eingabe des Zeichens = beendet werden. Der berechnete Ergebniswert ist dann auszugeben. Beispiel-Bildschirmausgabe: 14 / 7 * 2 + 3 = 7 5 5 5 5 5 4 4 4 4 3 3 3 2 2 1 Aufgabe 31 – Geburtstage Die Wahrscheinlichkeit, dass zwei Menschen in einer Gruppe von n Personen am gleichen Tag Geburtstag haben beträgt p(n) = 1 − 365 364 363 365 − n + 1 · · · ... · 365 365 365 365 Schreiben Sie ein Programm zur Berechnung dieser Wahrscheinlichkeit und zur Auswertung und Ausgabe dieser Wahrscheinlichkeit für Gruppen von 2 bis 60 Personen. Der Operator soll als folgendermassen eingelesen werden: Scanner sc = ... ... char op = sc.next().charAt(0); WS 2013/14, Übung zum Java-Vorkurs für MATSE 19. September 2013 WS 2013/14, Übung zum Java-Vorkurs für MATSE 19. September 2013 Übung: Gleitkommaarithmetik (1) Seite 1 Aufgabe 34 – GleitkommaArithmetik Überlegen Sie sich zunächst welche Ausgabe vom folgenden Programm erzeugt wird und überprüfen Sie anschließend die Richtigkeit Ihrer Annahmen. Was können Sie daraus schließen, in Bezug auf die Verwendung eines Gleitkommatyps für Zählvariablen bei Schleifen? Untersuchen Sie, welche Änderungen sich ergeben, wenn anstelle des Typs float der Typ double verwendet wird. (Die Quelldatei GleitkommaArithmetik.java ist im Verzeichnis /home/java zu finden.) public class GleitkommaArithmetik { public static void main(String[] args) { Übung: Gleitkommaarithmetik (1) 1. eingezahltes Kapital in Euro (Mindestanlagebetrag 100 EUR) 2. Zinssatz in % 3. Anlagedauer in Jahren Die eingelesenen Werte sind auf Gültigkeit zu überprüfen. Bei korrekter Eingabe ist eine Tabelle auszugeben, die die jährliche Entwicklung der Geldanlage auflistet. Beispiel: Für einen Anlagebetrag von 1.000 Euro, der bei einer Laufzeit von 6 Jahren mit 3% verzinst wird, sollte z.B. folgende Ausgabe erzeugt werden: Jahr 0 1 2 3 4 5 6 float a = 0.1f; float b; boolean skipLine = false; for (int i = 1; i < 15; i++) { b = i*0.1f; if (skipLine) System.out.println(); System.out.println("i=" + i + "\ta=" + a + "\tb=" + b); if (10*a != i) { System.out.println(" (i - 10*a) = " + (i - 10*a)); skipLine = true; } if (10*b != i) { System.out.println(" (i - 10*b) = " + (i - 10*b)); skipLine = true; } a += 0.1; } Seite 2 Zinsen 0.00 30.00 30.90 31.83 32.78 33.77 34.78 Guthaben 1000.00 1030.00 1060.90 1092.73 1125.51 1159.28 1194.06 } } Aufgabe 35 – Formel Programmieren Sie die Formel f (x) = 36(x − 1)14 5x − 9 und geben Sie im Bereich von -1 bis 2 eine Wertetabelle mit Schrittweite 0.1 aus. Berücksichtigen Sie die Erkenntnisse aus Aufgabe 34 und überprüfen Sie Ihr Ergebnis! Aufgabe 36 – Zinsen Schreiben Sie ein Programm, das für eine Geldanlage Zinsen und Zinseszinsen berechnet. Die Zinsen sollen am Ende jeden Laufzeitjahres dem Kapital zugeschlagen und in den Folgejahren zusammen mit dem Kapital verzinst werden. Die folgenden Angaben, die für die Berechnung benötigt werden, sind einzulesen: WS 2013/14, Übung zum Java-Vorkurs für MATSE Übung: 19. September 2013 Gleitkommaarithmetik (2) Seite 1 Aufgabe 37 – Pi Die Bailey-Borwein-Plouffe-Formel ist eine 1996 entdeckte Reihendarstellung für die Zahl π (Pi): π = ∞ X k=0 mit den Summanden sk = 1 16k 4 2 1 1 − − − 8k + 1 8k + 4 8k + 5 8k + 6 Verwendet man diese Formel bei der Programmierung, dann kann die Berechnung der Summe nach P dem Aufaddieren der ersten n Summanden abgebrochen werden. Die Teilsumme Sn = nk=0 sk kann als Näherungwert für π verwendet werden. Die Anzahl n der Summanden ergibt sich einfach dadurch, dass man solange Summanden aufaddiert bis sich der Wert der Summe durch das Aufaddieren eines weiteren Summanden nicht mehr ändert, also für zwei aufeinander folgende Teilsummen Si und Si+1 = Si + si+1 gilt: Si+1 = Si . (Diese mathematisch unmöglich erscheinende Situation ergibt sich im Programm relativ schnell, da Gleitkommawerte nur ungenau dargestellt werden können und die Werte der Summanden sehr klein werden.) Schreiben Sie ein Programm, das nach der beschriebenen Methode unter Verwendung des Typs double die Zahl π näherungsweise berechnet. Das Programm soll neben dem Näherungswert für π auch die Anzahl n der verwendeten Summanden ausgeben. Aufgabe 38 – Quadratwurzel Sei a eine positive reelle Zahl und eine Folge xi positiver reeller Zahlen rekursiv definiert durch x0 = 1, Übung: Euklid/ Felder (Arrays) 19. September 2013 Seite 1 Aufgabe 39 – Euklid Implementieren Sie den folgenden Algorithmus. Was wird berechnet? void programm () sk WS 2013/14, Übung zum Java-Vorkurs für MATSE 1 a xi+1 = für i = 0, 1, 2, . . . xi + 2 xi Es kann mathematisch gezeigt werden, dass gilt: √ xi → a für i → ∞ a und b einlesen b != 0 a> b T F a=a-b b=b-a result=a Aufgabe 40 – Fragen zu Arrays Welche Zeilen in Abbildung 1 enthalten eine korrekte Definition eines Arrays? Kreuzen Sie die korrekten Definitionen an. a) b) c) d) e) f) g) int int int int int int int f1 f2 [] [] f5 f6 f7 [2] = {5,3}; [] = {7,1,9}; f3 = {5,3}; f4 = new int [2]; [2]; [] = new int [2]; [] = new int [] {f3[0], f3[1]}; Abbildung 1: potentielle Definitionen von Arrays in Java Schreiben Sie ein Programm, das interaktiv Werte für a einliest und unter Verwendung der gegebenen Folge die Quadratwurzel von a näherungsweise berechnet. Als Näherungswert ist jeweils das erste Folgenglied xn zu benutzen, für das gilt |xn − xn−1 | ≤ 0.001 Geben Sie für jeden gelesenen Wert a, die Quadratwurzel q, a − q (Überprüfen der Genauigkeit) und die Anzahl der Iterationen aus, die jeweils zur Berechnung benötigt wurden. Für alle Rechnungen ist der Datentyp double zu verwenden. Testen Sie das Programm u.a. mit den Werten a = 64, 9, 0.5, 1 und 0.01. 2 WS 2013/14, Übung zum Java-Vorkurs für MATSE int result, a, b 19. September 2013 Aufgabe 41 – Umkehrung Lesen Sie 10 Zahlen vom Benutzer ein und geben Sie diese anschließend in umgekehrter Reihenfolge wieder aus. Aufgabe 42 – Ergänzung Lesen Sie eine Menge von Zahlen vom Benutzer ein, und geben Sie die Zahlen von 1 bis 10 aus, die er nicht eingegeben hat. Aufgabe 43 – Sortieren Lesen Sie maximal 25 Zahlen vom Benutzer ein und geben Sie diese anschließend aufsteigend sortiert wieder aus. WS 2013/14, Übung zum Java-Vorkurs für MATSE 19. September 2013 Übung: Felder Seite 1 Zusatzaufgabe – Schiffe versenken Implementieren Sie eine einfache Version des Spiels “Schiffe versenken”. Dazu soll eine Eingabedatei mit einer Karte in ein zweidimensionales char-Feld eingelesen werden. Ein Schiff oder Schiffsteil wird in der Karte mit 1 markiert, der Rest mit 0. Das Spielfeld ist 10x10 Felder gross. Es existieren 5 Schiffe mit einer Länge von 1 bis 5. Der Benutzer soll versuchen, die Schiffe des Computers zu versenken, indem er in jedem Schritt eine Koordinate angibt. Nach dieser Eingabe wird die Karte mit Zeilen- und Spalternnummerierung ausgegeben, wobei versenkte Schiffsteile mit x markiert werden sollen und schon getestete leere Stellen mit -. Versenkte Schiffe sollen mit grossen X markiert werden. Wenn alle Schiffe versenkt wurden, soll die Anzahl der benötigten Versuche ausgegeben werden. Das Lesen von einer Eingabedatei geht folgendermassen: import java.io.File; Übung: Schleifen und Methoden Seite 1 Aufgabe 32 – Primzahlentabelle - Methoden Schreiben Sie zunächst das Programm aus Aufgabe 28 (Primzahl) in eine Methode um, die einen boolean-Wert mit dem Ergebnis der Überprüfung zurückgibt. (In der Methode soll keine Ausgabe des Ergebnisses erfolgen.) Die zu prüfende long-Zahl soll beim Aufruf an die Methoden übergeben werden. Schreiben Sie dann unter Verwendung dieser Funktion ein Programm, das alle ungeraden Zahlen in einem bestimmten Intervall daraufhin untersucht, ob es eine Primzahl ist und alle so gefundenen Primzahlen ausgibt. Beispiel-Bildschirmausgabe: Untere Grenze: 5 Obere Grenze: 12 Primzahlen, die zwischen 5 und 12 liegen: 5 7 11 // Das Program fuer das Spiel "Schiffen versenken" ... Aufgabe 33 – Kundennummer - Methoden Die vorliegende Aufgabe ist unter Zuhilfenahme einer Funktion qsum zur Berechnung der Quersumme einer ganzen Zahl zu lösen, die unter Verwendung des Programms aus Aufgabe 24 (Quersummen) geschrieben werden soll. static void main(String args[]) throws Exception { Scanner sc = new Scanner(new File("Eingabe.txt")); In der kommerziellen Datenverarbeitung ist es eine beliebte Methode, sogenannte Schlüsselzahlen (Personalnumern, Kundennumern) mit einer zusätzlichen Prüfziffer zu versehen. Diese Prüfziffer kann z.B. helfen, mögliche Übertragungsfehler zu erkennen. ... Um die einzelnen Zeichen einzulesen verwenden sie sc.next().charAt(0) Schreiben Sie ein Programm, das mehrere int-Werte einliest. Jede der eingelesenen Zahlen ist als siebenstellige Kundennummer zu interpretieren, sofern sie positiv ist und nicht mehr als sieben Dezimalziffern hat (z.B. steht der Wert 123 für die Kundennummer 0000123). Das Programm soll die Kundennummer um die Prüfziffer erweitern und das Ergebnis ausgeben. Falls der eingelesene Wert keine zulässige Kundennummer darstellt, ist eine Fehlermeldung auszugeben. Seien ai , i ∈ {1, ..., 7} die Ziffern der Kundennumer, dann ist die Prüfziffer a8 so zu bestimmen, P dass 8i=1 ai ohne Rest durch 10 teilbar ist. Für 0000123 ergibt sich beispielsweise die erweiterte Kundennummer 00001234. WS 2013/14, Übung zum Java-Vorkurs für MATSE Übung: Sortieren/ Felder als Parameter 19. September 2013 Seite 1 Aufgabe 44 – Reverse Schreiben Sie eine Methode public static void reverse(char text[]) welche die Reihenfolge der in dem übergebenen Feld text enthaltenen Zeichen umkehrt. Enthält das an text übergebene Feld vor dem Aufruf von reverse z.B. die Zeichenfolge ’n’, ’e’, ’b’, ’e’, ’l’ so soll es anschließend die Zeichen in der Reihenfolge ’l’, ’e’, ’b’, ’e’, ’n’ enthalten. Schreiben Sie die Methode so, dass Sie kein zusätzliches (Hilfs-)Feld verwenden. Aufgabe 45 – Primzahlenfeld Schreiben Sie eine Methode public static int primzahlen(int grenze, int primvek[]) die alle Primzahlen, die kleiner oder gleich dem vorgegebenen Wert grenze sind, (in aufsteigender Reihenfolge) in dem Feld primvek abspeichert. Es ist davon auszugehen, dass das an den Parameter primvek übergebene Feld hinreichend groß angelegt wurde (mindestens ⌊1.26 · grenze/log(grenze)⌋ Elemente). Die Methode soll als Resultatwert die Anzahl der in das Feld eingetragenen Primzahlen zurückgeben. Aufgabe 46 – Primfaktoren Schreiben Sie ein Programm, das alle Primfaktoren einer Zahl findet, wie z.B. WS 2013/14, Übung zum Java-Vorkurs für MATSE Übung: Zusatzaufgaben 19. September 2013 Seite 1 Zusatzaufgabe 1 - Kleines 1x1 Schreibe ein Programm, welches das kleine Ein-Mal-Eins (bis 10 mal 10) berechnet und in einer Matrix (einem zweidimensionalen Feld) speichert. Die Matrix soll dann mit Hilfe von zwei Schleifen tabellarisch auf dem Bildschirm ausgegeben werden. Um die Werte geeignet einzurücken kann \t verwendet werden. Mit System.out.print(x) wird nach der Ausgabe von x keine neue Zeile angefangen. Die Ausgabe sieht also etwa wie folgt aus: 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100 Zusatzaufgabe 2 - Klammerung Implementieren eine Java-Methode, die für eine Zeichenkette überprüft, ob die dort enthaltenen runden Klammern korrekt gesetzt sind. Das heiss t: Für jede öffnende Klammer ( muss es eine nachfolgende schliess ende Klammer ) geben. Es darf keine Klammer geschlossen werden, wenn nicht die entsprechende Klammer vorher geöffnet wurde. Zeichen auss er den runden Klammern sollen ignoriert werden. Folgendes sind korrekt geklammerte Strings: (), abc, (()(abc)( ()((def)))). Diese Strings sind fehlerhaft: 27 = 3 * 3 * 3 11 = 11 (Primzahl) 15 = 3 * 5 ((), )(. Das Programm soll mehrere positive ganze Zahlen einlesen und jeweils die Zahl mit ihren Primfaktoren ausgeben. Lösen Sie die Aufgabe unter Verwendung der Methode primzahlen aus Aufgabe 45 (Primzahlenfeld). Die Methode soll einen booleschen Wert zurückgeben. In der main-Methode soll entsprechend ausgegeben werden, ob der String korrekt oder fehlerhaft geklammert ist. Hinweis: String str.... // liefert das 1. Zeichen des Strings als char str.charAt(0); // liefert das letzte Zeichen des Strings als char str.charAt(str.length()-1); Zusatzaufgabe 3 – Primzahlen - Das Sieb des Eratosthenes Schreibe ein Programm, welches Primzahlen nach dem Algorithmus des Eratosthenes berechnet: Zunächst werden alle Zahlen 2, 3, 4, usw. bis zu einer eingelesenen Obergrenze g aufgelistet. Die zunächst unmarkierten Zahlen sind potenzielle Primzahlen. Die kleinste unmarkierte Zahl ist immer eine Primzahl. Nachdem eine Primzahl gefunden wurde, werden alle Vielfachen dieser Primzahl als zusammengesetzte Zahlen markiert. Es genügt dabei, mit dem Quadrat der Primzahl zu beginnen, da alle kleineren Vielfachen bereits markiert sind. Sobald das Quadrat der Primzahl gröss er als die Grenze g ist, sind alle Primzahlen kleiner oder gleich g bestimmt: Es sind die nicht markierten Zahlen. Das Verfahren beginnt also damit, die Vielfachen 4, 6, 8,... der kleinsten Primzahl 2 durchzustreichen. Die nächste unmarkierte Zahl ist die nächst gröss ere Primzahl, die 3. Anschliess end werden deren Vielfache 9, 12, 15,... durchgestrichen, usw. WS 2013/14, Übung zum Java-Vorkurs für MATSE 19. September 2013 WS 2013/14, Übung zum Java-Vorkurs für MATSE 19. September 2013