Montag, 20. Januar 2014

 

Aufgabe zu Arrays in Java (POS1: 2BHIF)

Ergänzen Sie das Projekt java-arrays aus der letzten Aufgabe um die folgenden Klassen:

Erzeugen Sie eine Klasse DreieckArray, welche ein privates zweidimensionales Array feld für Integers enthält. Dieses Feld soll "dreieckig" sein und mit folgenden Werten initialisiert werden:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
Die Methoden sind public und sollen folgendes tun:
void create(int zeilen, int spalten) soll ein neues Feld mit den gegebenen Zeilen und Spalten erzeugen (rechteckig).
int[][] getArray() soll das Feld zurückliefern.
int[] summen() soll ein eindimensionales Feld mit den Zeilensummen liefern.
boolean set(int zeile, int spalte, int wert) soll den Wert an der gegebenen Stelle im Feld feld setzen und bei erfolg true zurückliefern. Bei ungültigen Indizes soll false zurückgeliefert werden.

Schreiben Sie eine Klasse TestDreieckArray, in der zwei Objekte von DreieckArray in der Methode main() angelegt werden. Machen Sie zum Testen passende Aufrufe der Methoden (z.B. gültige und ungültige set() usw.).

Versehen Sie die Abgabe mit dem Tag ABGABE_2_0.

Labels: , ,


Montag, 13. Januar 2014

 

Aufgabe Arrays (POS1: 2BHIF)

Es folgen einige Aufgaben mit Arrays. Zur Erinnerung: bei Arrays haben alle Elemente denselben Datentyp und es muss vorab definiert werden, wie viele Elemente in einem Array enthalten sind.

Nennen Sie das Projekt java-arrays.

Bei allen folgenden Aufgaben soll das Ergebnis auf der Konsole ausgegeben werden.

Alle Methoden sollen in einer Klasse Arrays implementiert werden. Die Testaufrufe aller Methoden muss im main() erfolgen.

  1. Summe bilden
    Erstellen Sie ein Array von ganzen Zahlen mit den folgenden Zahlen:
    82, 7, 58, 87, 47, 51, 81, 79, 65, 40, 45, 47, 85, 67, 85
    
    Schreiben Sie nun zwei Methoden, welche die Summe und das Produkt der Arrayelemente bestimmt. Die Methoden sollen ein int-Array als Parameter bekommen und ein int zurückliefern.
    Nennen Sie die Methoden sum() bzw. product().
    Achtung: mit den oben genannten Zahlen ergibt sich beim Produkt ein Überlauf (die Zahlen werden negativ). Lassen Sie zum Testen des Produkts die letzten 4 Zahlen weg.
  2. Alle Elemente ändern
    Erstellen Sie ein Array von ganzen Zahlen mit den folgenden Zahlen:
    82, 7, 58, 87, 47, 51, 81, 79, 65, 40, 45, 47, 85, 67, 85
    
    Schreiben Sie eine Methode addtoall(array, number), welche zu allen Elementen des Arrays die Zahl number addiert. Verwenden Sie für das Testprogramm die Zahl 23.
  3. Filtern von Elementen
    Erstellen Sie ein Array von ganzen Zahlen mit den folgenden Zahlen:
    82, 7, 58, 87, 47, 51, 81, 79, 65, 40, 45, 47, 85, 67, 85
    
    Schreiben Sie eine Methode filter(array, number), welche ein neues Array als Returnwert liefert, das alle Elemente enthält, die kleiner als number sind. Verwenden Sie für das Testprogramm für number den Wert 60 (die Länge des neuen Arrays muss nun kleiner oder gleich sein!).
  4. Entfernen von Minimum und Maximum
    Erstellen Sie ein Array von ganzen Zahlen mit den folgenden Zahlen:
    82, 7, 58, 87, 47, 51, 81, 79, 65, 40, 45, 47, 85, 67, 85, 7
    
    Schreiben Sie eine Methode elim(array), welche die kleinste und größte Zahl aus dem Array entfernt und ein neues Array ohne die beiden Werte zurückliefert (die Länge des neuen Arrays muss nun kleiner sein!).
    Sollte das Minimum oder Maximum mehrfach vorkommen, so sind alle Minima bzw. Maxima zu entfernen (in unserem Beispiel muss also 7 zweimal entfernt werden).
  5. Entfernen von Duplikaten
    Erstellen Sie ein Array von ganzen Zahlen mit den folgenden Zahlen:
    82, 7, 58, 87, 47, 51, 81, 79, 65, 40, 45, 47, 85, 67, 85
    
    Schreiben Sie eine Methode elimduplicates(array), welche alle Dpuplikate aus dem Array entfernt und ein neues Array zurückliefert (die Länge des neuen Arrays muss nun kleiner oder gleich sein!).
  6. Reihenfolge umdrehen
    Erstellen Sie ein Array von ganzen Zahlen mit den folgenden Zahlen:
    82, 7, 58, 87, 47, 51, 81, 79, 65, 40, 45, 47, 85, 67, 85
    
    Schreiben Sie eine Methode reverse(array), welche ein neues Array mit den Werten des Arrays in umgekehrter Reihenfolge zurückliefert.
  7. Transponieren einer Matrix
    Erstellen Sie ein zweidimensionales Array von ganzen Zahlen mit den folgenden Zahlen:
    29, 67, 22, 95, 44
    42, 56, 81,  6, 96
    92, 77, 31,  9, 17
    21, 99, 33, 79, 28
    11, 59, 72, 28, 54
    
    Schreiben Sie eine Methode transpose(array), welche die Einträge eines zweidimensionalen Arrays an der Hauptdiagonalen (von links oben nach rechts unten) spiegelt. In der Mathematik nennt man diesen Vorgang transponieren.
    Das Ergebnis sollte bei diesem Beispiel wie folgt sein:
    29, 42, 92, 21, 11
    67, 56, 77, 99, 59
    22, 81, 31, 33, 72
    95,  6,  9, 79, 28
    44, 96, 17, 28, 54
    

Labels: , ,


Freitag, 10. Januar 2014

 

Aufgabe einfach Java Klassen (POS1: 2BHIF)

Erstellen Sie ein Projekt java-klassen mit zwei Klassen:

  1. Person
  2. PersonManager

nach dem folgenden Klassendiagramm:

Die Methoden der Klasse Person sollen folgende Funktionalität bereitstellen:

  1. Der Konstruktor Person(String vn, String fn, int gj, char g) soll einfach die passenden Attribute setzen.
  2. print() soll Vorname, Nachname, Alter und Geschlecht auf der Konsole ausgeben.
  3. getName() liefert den Vornamen und Nachnamen mit einem Leerzeichen getrennt.
  4. getAlter(int jahr) soll das Alter in Jahren bezogen auf das im Parameter angegebene Jahr zurückliefern.
  5. toString() liefert einen String, der alle Informationen lesbar enthält.
  6. main() ist optional und enthält einfach Tests der Klasse.

Die Methoden der Klasse PersonManager sollen folgende Funktionalität bereitstellen:

  1. print() soll einfach alle Personen ausgeben (print() von Person verwenden).
  2. add(Person person) nimmt eine neue Person in die interne Liste/Array auf.
  3. main() soll mindestens zwei verschiedene Personen anlegen, die dann in einen Manager aufgenommen werden. Alle Personen sollen ausgegeben werden.

Beispielaufruf auf Konsole:

hp@if205-2l $ java PersonManager
Max Meier, geboren 1998 (16 Jahre alt), männlich
Katrin Huber, geboren 1996 (18 Jahre alt), weiblich

Importieren Sie das Projekt ins CVS. Die Abgabe erfolgt durch Taggen der abzugebenden Version (siehe CVS: Wissenswertes (POS1: 2BHIF)).

Labels: , , ,


Mittwoch, 8. Januar 2014

 

CVS: Wissenswertes (POS1: 2BHIF)

Tags

Ein Tag (nicht das Gegenstück zur Nacht, sondern das englische Wort zu Marke) ist ein symbolischer Name für den Zustand des Projekts im Repository zu einem bestimmten Zeitpunkt. Ein Tag muss mit einem Buchstaben beginnen und kann dann Buchstaben, Ziffern, Unterstriche und Bindestriche enthalten. Punkte sind nicht erlaubt, damit ein Tag nicht mit einer Versionsnummer verwechselt werden kann.

Beispiele REL_1_0, rev-99, TRY_HP_20060919

Reguläre Tags

Jede Datei im Repository hat ihre eigene Versionsnummer (beginnend mit 1.1, wird bei jedem commit erhöht: 1.2, 1.3 usw.).

Besteht ein Modul (Projekt) aus den Dateien


Main.java 1.4
Gui.java 1.9
Net.java 1.6

will man auf diesen Zustand (diese Versionen) später wieder zugreifen können, weil dies z.B. eine auszuliefernde Version ist, so wählt man ein Tag, z.B. REL_1_0.

Ein Tag erzeugt intern eine Liste von Versionsnummern, die den Stand jeder Datei wiedergeben.

Es können beliebig viele Tags vergeben werden, jedoch müssen sie eindeutig sein.


~/work/project > cvs commit -m ""
cvs commit: Examing .
~/work/project > cvs rtag REL_1_0 project
cvs rtag: Tagging project

Mit dem CVS-Befehl rtag wird das Tag REL_1_0 erzeugt. Später kann man das Projekt mit der Option -r REL_1_0 (-r für release)


~/work > cvs checkout -r REL_1_0 project
~/work > cd project
~/work/project >

auschecken. Die Dateien im Verzeichnis project haben dann wieder obige Versionsnummern. Möchte man das Projekt in ein anderes Verzeichnis auschecken, dann muss man die Option -d name verwenden. Z.B.: es soll REL_1_0 in das Verzeichnis rel1.0 ausgecheckt werden:


~/work > cvs checkout -r REL_1_0 -d rel1.0 project
~/work > cd rel1.0
~/work/rel1.0 >

Verwenden eines Tags für die Abgabe

Für die Abgabe verwenden Sie das Tag ABGABE_1_0. Wollen Sie Korrekturen abgeben, dann verwenden Sie bitte ABGABE_1_1, ABGABE_1_2 usw.

Gibt es für ein Beispiel mehrere (Teil-)Abgaben, so verwenden Sie für die erste Abgabe obiges Schema, für die zweite Abgabe ABGABE_2_0 bis ABGABE_2_n (n n. Abgabeversion) usw.

alte Versionen auschecken

Will man auf eine alte Version zugreifen, so kann man beim Auschecken angeben, welchen Zustand man haben will, in dem man die Option -D datum angibt. datum kann entweder in der englischen Schreibweise angegeben werden (MM/TT/JJJJ), im ISO-Format (JJJJ-MM-TT) oder auch relativ als Text unter Hochkomma (z.B. 3 weeks ago, 1 day ago 27 minutes ago oder 3 days ago o.ä.).

Das Projekt python im Zustand vor einer Woche auschecken:


~/work > cvs co -D "1 week ago" python
cvs checkout: Updating python
U python/dreieck.py
U python/prim.py
~/work >

Das Projekt python im Zustand vom 22.9.2006 auschecken:


~/work > cvs co -D 09/22/2006 python
cvs checkout: Updating python
U python/calc.py
U python/craten.py
U python/dreieck.py
U python/ggt.py
U python/mittelwert.py
U python/muster.py
U python/prim.py
U python/pyintro.pdf
U python/raten.py
U python/summe.py
~/work >

Ältere Versionen sollten in eigene Verzeichnisse ausgecheckt werden. Sobald eine bestimmte Version ausgecheckt wurde, ist sie sticky (klebrig). Das bedeutet, dass sich alle Arbeiten in diesem ausgecheckten Verzeichnisbaum auf diese Version beziehen.

Daher ist das Weiterarbeiten an einer solchen Version nur sinnvoll bei Zweigen.

binäre Dateien

Unter binären Dateien verstehen wir hier Dateien, die nicht aus Textzeilen bestehen. Das sind z.B. Word- und Excel-Dateien, Bilder usw. CVS speichert normalerweise Textdateien und deren Zeilenänderungen. Dies ist bei Binärdateien nicht möglich. Wird z.B. eine Word-Datei nicht als Binärdatei markiert, so wird sie vom CVS zerstört (Subversion, der Nachfolger von CVS, kann gut mit Binärdateien umgehen, CVS ist aber immer noch weit verbreitet...).

Damit nicht bei jedem cvs add, cvs import" usw. die Option %-W *.gif -k 'b' (für jede Dateiendung von Binärdateien einmal!) angegeben werden muss, schreibt man diese Dateien in die Konfigurationsdatei CVSROOT/cvswrappers.

Die Konfiguration eines Repositories befindet sich im Projekt CVSROOT, welches man auscheckt, bearbeitet und dann wieder eincheckt (commit).


~/work > cvs checkout CVSROOT
...
~/work > cd CVSROOT
~/work/CVSROOT > vim cvswrappers

Die Datei sollte z.B. so aussehen (Zeilen mit # sind Kommentare, die schon enthalten sind):


# This file affects handling of files based on their names.
#
# The -m option specifies whether CVS attempts to merge files.
#
# The -k option specifies keyword expansion (e.g. -kb for binary).
#
# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
#
# wildcard [option value][option value]...
#
# where option is one of
# -f from cvs filter value: path to filter
# -t to cvs filter value: path to filter
# -m update methodology value: MERGE or COPY
# -k expansion mode value: b, o, kkv, &c
#
# and value is a single-quote delimited value.
# For example:
*.img -k 'b'
*.cramfs -k 'b'
*.jar -k 'b'
*.m2v -k 'b'
*.mvi -k 'b'
*.ppc -k 'b'
*.jffs* -k 'b'
*.nfi -k 'b'

# Microsoft
*.doc -k 'b'
*.xls -k 'b'
*.ppt -k 'b'

# Openoffice 1.*
*.stc -k 'b'
*.std -k 'b'
*.sti -k 'b'
*.stw -k 'b'
*.sxc -k 'b'
*.sxd -k 'b'
*.sxq -k 'b'
*.sxi -k 'b'
*.sxm -k 'b'
*.sxp -k 'b'
*.sxw -k 'b'

# dia
*.dia -k 'b'

# Bilder
*.xcf -k 'b'
*.jpg -k 'b'
*.bmp -k 'b'
*.gif -k 'b'
*.png -k 'b'

Für jeden Dateityp mit Binärformat gibt es eine Zeile der Form *.endung -k 'b'.

Diese Einträge speichern, den Editor beenden und das Projekt wieder commiten:


~/work/CVSROOT > cvs commit -m "Binärdateien bekanntgegeben"
...

Das Verzeichnis ~/work/CVSROOT können Sie löschen, da Sie es ja jederzeit wieder auschekcen können, wenn Sie eine Dateiendung vergessen haben.

Ignorieren von Dateien/Verzeichnissen

Bestimmte Dateien im Projektverzeichnis will man nicht in die Versionsverwaltung aufnehmen, z.B. Testdateien à la xxx oder die Sicherungsdateien vom vim (*~ - diese werden standardmäßig ignoriert), Klassendateien (*.class) usw.

Dafür gibt es auch Kommandozeilenargumente für cvs (z.B. -I '*.class'), aber besser ist es, diese Dateien ein für alle mal zu ignorieren. Die Konfigurationsdatei heißt CVSROOT/cvsignore. Leider existiert diese Datei in der Standardkonfiguration nicht und muss daher mit cvs add aufgenommen werden.

Hat man CVSROOT bereits ausgecheckt, so muss man die Datei mit einem Editor erzeugen:


~/work/CVSROOT > vim cvsignore

Bei mir hat die Datei folgenden Inhalt:


*.nfi
*.img
*.pyc
*.class
*.log
*.tmp
xxx
*.ppc
*.jffs*
*.cramfs

Dann muss man die Datei dem Repository hinzufügen und einchecken (commit):


~/work/CVSROOT > cvs add cvsignore
~/work/CVSROOT > cvs commit -m "zu ignorierende Dateien"
...

Labels: ,


 

cvs.htlwrn.ac.at (POS1: 2BHIF)

Anmeldung am Server

erfolgt über ssh. Man muss zunächst den Server und das CVS-Verzeichnis wählen. Die Anmeldung erfolgt bei jedem CVS-Befehl über ssh.

~ > export CVSROOT=:ext:USER@cvs.htlwrn.ac.at:/srv/cvsroot/USER
~ > export CVS_RSH=ssh

USER ist der Username (Projektuser, Evidenznummer).

Repository einrichten

~ > cvs init
Password:

damit wird ein Repository eingerichtet (dieser Schritt wird für Schüler vom Administrator beim Anlegen der User durchgeführt). Die Zeile mit Password: deutet das Anmelden am Server an. Hier ist das Passwort einzugeben. Die Meldungen vom CVS werden in diesem Text nicht angegeben.

Importieren eines Projektes

Soll ein Projekt ins CVS aufgenommen werden, so muss man zunächst ein Verzeichnis mit allen Unterverzeichnissen und Dateien anlegen (natürlich können später weitere Dateien hinzugefügt werden).
Dann importiert man das Projekt mit

~ > cd neues_projekt
~/neues_projekt > cvs import -m "eine Beschreibung des Projekts" projektname name start

projektname ist der Name des Projekts im CVS.
name ist das sog. Vendor Tag, eine Bezeichnung des Verkäufers (Entwicklers).
start ist das Release Tag, welches den Start des Projekts anzeigt (beide Tags sind eigentlich unnötig, aber vom CVS zwingen einzugeben...).

Nach dem Import kann (soll) das Verzeichnis neues_projekt gelöscht werden, denn wenn man an diesem Projekt nun weiterarbeiten will, muss es ausgecheckt werden.

Checkout

In einem Arbeitsverzeichnis (workspace) wird das Projekt ausgecheckt (dieser Vorgang ist normalerweise pro Arbeitsplatz und User nur einmal zu machen):

~ > cd workspace
~/workspace > cvs checkout projektname
Password:

Im Verzeichnis workspace wird nun ein Verzeichnis projektname angelegt. In diesem Verzeichnis kann man nun editieren, compilieren, debuggen usw. projektname kann auch ein Modulname sein (vgl. Einführung in CVS).

Update

Ein Update ist nötig, um Änderungen, die von anderen Personen oder von einem anderen Arbeistplatz aus eingecheckt wurden, in den eigenen workspace zu übernehmen. Hier kann es natürlich zu Konflikten kommen, d.h. dieselben Dateien haben sich im Repository und im eigenen Workspace geändert.

~/workspace > cvs update
Password:

Falls es Konflikte gibt, müssen diese gelöst werden.

commit - Änderungen ins Repository übernehmen (check in)

Änderungen im eigenen workspace sollten regelmäßig ins CVS übernommen werden. Dadurch werden von den geänderten Dateien neue Versionen angelegt. Arbeitet man im Team, so dürfen nur Sourcen eingecheckt (commit) werden, die sich zumindest übersetzen lassen. Noch besser ist es, wenn die nötigen Tests bestanden werden.

~/workspace > cvs commit -m "der Text, der beschreibt, was sich geändert hat"
Password:

add - neue Dateien aufnehmen

Werden neue Dateien angelegt, so müssen sie der Versionsverwaltung zunächst bekannt gegeben werden. Die Dateien werden aber erst wirklich aufgenommen, wenn ein commit gemacht wird.

 ~/workspace > cvs add neue_dateien...
Password:

Nun müssen die Dateien auch eingecheckt werden (commit):

~/workspace > cvs commit -m "der Text, der beschreibt, was sich geändert hat (welche Dateien neu sind)"
Password:

Genauere Informationen sind mit man cvs bzw. cvs –help zu finden.

Labels: ,


 

CVS-Einführung (POS1: 2BHIF)


Repository
Zentrale Instanz, welche alle Versionen der Projektdateien enthält. Im Repository werden alle Dokumente (Dateien) gespeichert, welche nicht (automatisch) erzeugt werden können. Das sind z.B.:
  • Source Code
  • Makefiles
  • Scripts
  • Dokumentation
  • Schriftverkehr
  • u.U. Libraries von Fremdherstellern
  • ...
Nicht ins Repository gehören Dateien, die aus anderen Dateien aus dem Repository erzeugt werden können.
Workspace
Der Arbeitsbereich (Workspace) ist eine lokale Kopie der Dinge, die zum Bearbeiten nötig sind. Bei kleineren bis mittleren Projekten ist dies wahrscheinlich eine vollständige Kopie aller Dateien aus dem Repository.
importieren
Ein Projekt in das Versionsverwaltungssystem aufnehmen. Das ist nur ein einziges Mal zu machen, wenn das Projekt angelegt wird oder das erste Mal ins CVS aufgenommen wird.
auschecken (check out)
Erzeugen einer lokalen Kopie aus dem Repository (Achtung: alle lokalen Dateien werden überschrieben, wenn sie existieren, für einen Abgleich muss man aktualisieren).
einchecken (check in - commit)
Lokale Änderungen ins Repository übernehmen.
aktualisieren (update)
Die neuesten Dateien (Änderungen) aus dem Repository in den Workspace übernehmen. Wird benötigt, wenn mehrere Entwickler am selben Projekt arbeiten oder wenn man an mehreren Lokationen programmiert (Schule, Notebook, Heim-PC).
Module
Ein Modul ist eine Gruppe von Dateien, die unter einem Namen ausgecheckt werden können. Module können hierarchisch aufgebaut werden (meist sind Module einfach Verzeichnisse).
Versionen
CVS speichert nicht nur die aktuelle Kopie einer Datei sondern auch jede Version, die jemals eingecheckt wurde. CVS weist der ersten Version einer Datei die Version 1.1 zu, der zweiten 1.2 usw. Zu jeder Version werden Datum, Zeit und ein Kommentar gespeichert.
Mit Hilfe von CVS kann man u.a. folgende Dinge tun:
  • eine bestimmte Version einer datei auschecken
  • den Stand des gesamten Projekts (Moduls) von vor 5 Wochen bestimmen
  • die Unterschiede einer bestimmten Datei zwischen Version 1.3 und 1.5 anzeigen
Wird ein Modul mit den Dateien
     Main.java      1.4
Gui.java 1.9
Net.java 1.6
ausgecheckt, dann in Gui.java und Net.java etwas geändert und danach das Modul wieder eingecheckt, so werden nur die Versionen der geänderten Dateien erhöht:
     Main.java      1.4
Gui.java 1.10
Net.java 1.7
Das bedeutet, dass die individuellen Versionsnummern nicht für Releases verwendet werden können. Dazu sind Tags (Marken) zu verwenden.
Tags
Tags (Marken) sind (fast) frei wählbare Bezeichner für eine Gruppe von Dateien (oder Modulen), die den Zustand zu einem bestimmten Zeitpunkt markieren. So könnte für obiges Modul vor dem Auschecken das Tag PreRel_1_0 gewählt werden. Mit PreRel_1_0 kann man dann ganau auf die oben gezeigten Versionen von Main.java, Gui.java und Net.java zugreifen.
Mit Tags werden üblicherweise bestimmte signifikante Ereignisse im Projekt markiert.
Zweige
Im Verlauf der Entwicklung arbeiten die Entwickler an einer gemeinsamen Quellcodebasis. Sie checken aus und ein, Versionen werden erzeugt usw. Jeder wird die Ergebnisse des anderen weiterverwenden. Dieser Fluss des Sourcecodes wird Hauptstrang bezeichnet:


Zweige in der Versionsverwaltung sind parallele Zeitlinien. Zu einem Zeitpunkt verzweigt sich der Hauptstrang. Ab diesem Zeitpunkt existieren zwei parallele Zeitlinien und damit Kopien des Sourcecodes. Jeder Zweig verhält sich wie ein eigenes Repository. Zweige werden durch Tags gekennzeichnet. Sie werden oft für Releases verwendet (ab einem bestimten Zeitpunkt wird ein Releasezweig erzeugt, in dem nur mehr Fehler behoben werden und keine neue Funktionalität eingebaut wird, im Hauptstrang kann aber gleichzeitig an neuen Features weitergearbeitet werden, Fehlerkorrekturen werden natürlich im Hauptzweig "nachgezogen").
Zweige können natürlich wieder zusammengeführt werden. Die Änderungen für die Korrekturen im Releasezweig können automatisch ermittelt werden und in den Hauptstrang übernommen werden.

Links
Ximbiot
Einführung in das Concurrent Versions System (CVS)
Wikipedia:CVS
ganz kurze Einführung in CVS (pdf)

Bücher
Versionsverwaltung mit CVS

Kurzreferenz
2-seitige Kurzreferenz

Labels: ,


 

Aufgabe Java Wurzelberechnung (POS1: 2BHIF)

Man kann die Wurzel einer Zahl berechnen mit folgender Formel

xn = (xn-1 + a / xn-1) / 2

Man beginnt damit, dass a und x0 gleich der Zahl, aus der man die Wurzel ziehen will, setzt und x1 berechnet. Dann berechnet man x2 usw. bis sich die beiden letzten Werte nur mehr gering unterscheiden (z.B. die Differenz kleiner 0,0000001 ist).

Schreiben Sie eine Methode (Funktion) wurzel(zahl, genauigkeit), welche nach obigem Verfahren die Wurzel berechnet.

Erstellen Sie eine Klasse SquareRoot.java, welche eine Tabelle der Wurzeln der Zahlen 1 bis 20 bei den Genauigkeiten 0.01, 0.0001 sowie 0.0000001 ausgibt:
 1:  1.0000000  1.0000000  1.0000000
 2:  1.4142157  1.4142136  1.4142136
 3:  1.7320508  1.7320508  1.7320508
 4:  2.0000001  2.0000000  2.0000000
 5:  2.2360689  2.2360680  2.2360680
 6:  2.4494944  2.4494897  2.4494897
 7:  2.6457670  2.6457513  2.6457513
 8:  2.8284271  2.8284271  2.8284271
 9:  3.0000000  3.0000000  3.0000000
10:  3.1622777  3.1622777  3.1622777
11:  3.3166248  3.3166248  3.3166248
12:  3.4641017  3.4641016  3.4641016
13:  3.6055514  3.6055513  3.6055513
14:  3.7416576  3.7416574  3.7416574
15:  3.8729837  3.8729833  3.8729833
16:  4.0000006  4.0000000  4.0000000
17:  4.1231067  4.1231056  4.1231056
18:  4.2426425  4.2426407  4.2426407
19:  4.3589018  4.3588989  4.3588989
20:  4.4721402  4.4721360  4.4721360

Stellen Sie fest, wie viele Iterationen benötigt werden. Wie kann man die Anzahl der Iterationen bestimmen, ohne die Parameter bzw. den Returntyp bzw. -wert von wurzel(zahl, genauigkeit) zu ändern?

Labels: , ,


This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]