Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

Prof.

Praktikant

  • "Prof." started this thread

Posts: 8

Date of registration: Apr 10th 2007

1

Thursday, April 26th 2007, 4:16pm

Java, Übung 3

:D

This post has been edited 1 times, last edit by "Prof." (Apr 26th 2007, 6:51pm)


retr0virus

Trainee

  • "retr0virus" is male

Posts: 83

Date of registration: Oct 2nd 2006

Location: NRW -> Bad Oeynhausen

Occupation: B.Sc. Informatik, 8.Semester

2

Friday, April 27th 2007, 5:59am

Wo gerade schonmal ein Thema dazu da ist...
wie ist in der Aufgabe1 zu verstehen, dass keine String-Operationen zu verwenden sind?
Also z.B. kein .charAt() ?
Gerade bei der Methode mit der HEX-Überprüfung wäre es damit ja ein leichtes, nach dem char 'A' zu suchen...
Ein Nichts im Nichts und ins Nichts vertrieben!
- Ren Dhark

  • "Schokoholic" is male

Posts: 2,518

Date of registration: Oct 4th 2006

Location: Hannover

Occupation: Haarspaltung

3

Friday, April 27th 2007, 10:20am

Ich würde sagen, überhaupt keine String-Variablen bzw. Strings überhaupt benutzen oder? Immerhin gibt es auch einen mathematischen Weg, wo man drauf kommen kann. (Für das A-Problem)

This post has been edited 1 times, last edit by "Schokoholic" (Apr 27th 2007, 10:20am)


Rumpel

Trainee

  • "Rumpel" is male

Posts: 61

Date of registration: Dec 2nd 2005

Location: Hannover

Occupation: Softwareentwickler

4

Friday, April 27th 2007, 12:38pm

Denke ich auch. Dekt sich auch mit dem Hinweis 2:

Quoted

Zweiter Hinweis: Zur Überprüfung der Ergebnisse ist es nützlich, den Wert binär oder hexadezimal auszugeben.
Hierzu können Sie die Methoden Integer.toHexString(int) und Integer.toBinaryString(int)
verwenden (diese sollen für die Berechnung der Bedingungen allerdings nicht genutzt werden!).

Mit charAt wäre das auch zu einfach und wurde in den GÜs auch breit genug getreten. Also wohl alles rein mathematisch.
Wer ander'n eine Grube gräbt, der hat ein Grubengrabgerät!

Kaos

Lesen, denken, flamen!

  • "Kaos" is male

Posts: 973

Date of registration: Oct 16th 2005

Location: Han. / Vahrenwald Sinnvolle Beiträge: 7

5

Friday, April 27th 2007, 1:15pm

Ok, hier das Edit:
Nachdem Einwand von Paranoid hab ich meine Idee etwas ausgebaut: Ich hoffe mal sie stimmt nun. Deinen Tip hab ich mal ignoriert @ Paranoid.
Also: Jede Zahl die vom Dezimal System ins Hexadezimal System umgerechnet wird, hat irgendwann den Modulowert 10, falls ein "A" auftaucht. (Hoffe ich :D )

Also schreibt man sich eine Methode, die überprüft ob irgendwann in der Modulorechnung ein A auftaucht und gibt einen boolean Wert zurueck.
Das sollte das Problem mit aus der Vorlesung bekannten Mitteln lösen. Gibt bestimmt auch was einfacheres :D

Source code

1
2
3
4
5
6
7
8
9
10
138 hat ein A in seiner Hexadezimaldarstellung siehe 8a
154 hat ein A in seiner Hexadezimaldarstellung siehe 9a
160 hat ein A in seiner Hexadezimaldarstellung siehe a0
161 hat ein A in seiner Hexadezimaldarstellung siehe a1
.
.
.
2811 hat ein A in seiner Hexadezimaldarstellung siehe afb
2812 hat ein A in seiner Hexadezimaldarstellung siehe afc
2813 hat ein A in seiner Hexadezimaldarstellung siehe afd


Für die die wissen wollen wie's ungefähr funktioniert:
while zahl > 0
{if zahl % 16 = 10 b = true;
abbruch
else zahl / 16
}
return b;

Solange die Zahl größer als 0 ist, überprüfe ob Zahl modulo 16 "zehn" ergibt, wenn ja gib "true" aus und halte an, ansonsten teile die zahl durch 16 und überprüfe weiter.

Quoted

Man findet immer dort besonders viel Chaos, wo man nach Ordnung sucht. Das Chaos besiegt die Ordnung, weil es besser organisiert ist.

This post has been edited 4 times, last edit by "Kaos" (Apr 27th 2007, 4:08pm)


paradroid

Junior Schreiberling

Posts: 231

Date of registration: Feb 28th 2002

6

Friday, April 27th 2007, 2:09pm

Quoted

Original von Kaos

Quoted

Original von retr0virus
Wo gerade schonmal ein Thema dazu da ist...
wie ist in der Aufgabe1 zu verstehen, dass keine String-Operationen zu verwenden sind?
Also z.B. kein .charAt() ?
Gerade bei der Methode mit der HEX-Überprüfung wäre es damit ja ein leichtes, nach dem char 'A' zu suchen...


Moin, es gibt sicher einige bessere Ideen als meine, aber du könntest ausnutzen, dass alle 16 Zahlen ein A auftauchen muss (hoffe ich zumindest), angefangen ab der 10.
Die Hoffnung trügt Dich: 0xa0, 0xa1, 0xa2, 0xa3 ... haben alle ein "a", sind aber nicht im 16er Abstand.

Tipp: Bitoperatoren

# transmission terminated #

Kaos

Lesen, denken, flamen!

  • "Kaos" is male

Posts: 973

Date of registration: Oct 16th 2005

Location: Han. / Vahrenwald Sinnvolle Beiträge: 7

7

Friday, April 27th 2007, 4:09pm

So, ich hab's mal geändert, siehe oben. Sollte nun stimmen.

Kaos

Quoted

Man findet immer dort besonders viel Chaos, wo man nach Ordnung sucht. Das Chaos besiegt die Ordnung, weil es besser organisiert ist.

retr0virus

Trainee

  • "retr0virus" is male

Posts: 83

Date of registration: Oct 2nd 2006

Location: NRW -> Bad Oeynhausen

Occupation: B.Sc. Informatik, 8.Semester

8

Friday, April 27th 2007, 6:06pm

Quoted

Original von paradroid
Tipp: Bitoperatoren


Ja, damit habe ich auch die Teilaufgabe mit der 2^4 gelöst, aber irgendwie wollte das beim A nicht... naja, werde ich weiter probieren. ;)
Ein Nichts im Nichts und ins Nichts vertrieben!
- Ren Dhark

Philipp

Praktikant

  • "Philipp" is male

Posts: 13

Date of registration: Nov 11th 2006

9

Friday, April 27th 2007, 9:37pm

@retr0virus
Benutze die Shift Operatoren, wenn du auf Bitebene arbeiten möchtest. Damit geht es auf jeden Fall und schneller wird man soetwas in Java nicht mehr implementieren können. Wenn du die 4 Bits dann jeweils immer "extrahiert hast" sollte der Vergleich auf 10 bzw 0xA dann ziemlich leicht werden ;-) .
Der Weg bis dahin ist natürlich etwas holperig, wenn man zum ersten Mal mit den Shiftoperationen arbeitet.

Alternativ, falls die Bitoperation dafür zu abschreckend ist, kann man ja auch noch die Zahl in die Koeffizienten zerlegen zur Basis 16 ( siehe Hinweis mit Math.pow ).
Mögen all deine Träume sich erfüllen, Träumer; mögen sie dir stets Glück und Erkenntnis bringen. ( Sergio Bambaren, Der träumende Delphin )

Kaos

Lesen, denken, flamen!

  • "Kaos" is male

Posts: 973

Date of registration: Oct 16th 2005

Location: Han. / Vahrenwald Sinnvolle Beiträge: 7

10

Friday, April 27th 2007, 9:51pm

Quoted

Original von Philipp
@retr0virus
Benutze die Shift Operatoren, wenn du auf Bitebene arbeiten möchtest. Damit geht es auf jeden Fall und schneller wird man soetwas in Java nicht mehr implementieren können. Wenn du die 4 Bits dann jeweils immer "extrahiert hast" sollte der Vergleich auf 10 bzw 0xA dann ziemlich leicht werden ;-) .
Der Weg bis dahin ist natürlich etwas holperig, wenn man zum ersten Mal mit den Shiftoperationen arbeitet.

Alternativ, falls die Bitoperation dafür zu abschreckend ist, kann man ja auch noch die Zahl in die Koeffizienten zerlegen zur Basis 16 ( siehe Hinweis mit Math.pow ).


Aufgabenstellung besagt aber noch folgendes:

Quoted


Hierzu können Sie die Methoden Integer.toHexString(int) und Integer.toBinaryString(int)
verwenden (diese sollen für die Berechnung der Bedingungen allerdings nicht genutzt werden!).


Wenn man also jeweils 4 Bit untersuchen will, muss man die Zahl erstmal per Hand umwandeln. Das ist dann doch etwas zu aufwändig...

Quoted

Man findet immer dort besonders viel Chaos, wo man nach Ordnung sucht. Das Chaos besiegt die Ordnung, weil es besser organisiert ist.

Philipp

Praktikant

  • "Philipp" is male

Posts: 13

Date of registration: Nov 11th 2006

11

Saturday, April 28th 2007, 5:30pm

Quoted


Source code

1
2
3
4
5
Aufgabenstellung besagt aber noch folgendes:
Zitat:

Hierzu können Sie die Methoden Integer.toHexString(int) und Integer.toBinaryString(int)
verwenden (diese sollen für die Berechnung der Bedingungen allerdings nicht genutzt werden!).



Lies mal was davor steht ;-), sie sollen dir helfen dein Programm nochmal abzuchecken, du sollst allerdings nicht damit arbeiten, um die Bedingungen zu prüfen.

Quoted


Wenn man also jeweils 4 Bit untersuchen will, muss man die Zahl erstmal per Hand umwandeln. Das ist dann doch etwas zu aufwändig...


Peil irgendwie nicht warum du sie von Hand umwandeln willst. Das shiften kannst du über eine Schleife realisieren, wenn du das meinst.
Mögen all deine Träume sich erfüllen, Träumer; mögen sie dir stets Glück und Erkenntnis bringen. ( Sergio Bambaren, Der träumende Delphin )

This post has been edited 2 times, last edit by "Philipp" (Apr 28th 2007, 5:31pm)


L A C K Y

Praktikant

  • "L A C K Y" is male

Posts: 6

Date of registration: Jan 10th 2007

Location: Celle

12

Monday, April 30th 2007, 11:20am

Eine andere Möglcihkeit wäre es auch mit dem bit-operator "&" zu arbeiten.

z.B.

Nach "f" suchen:
(9978-dec = 26fa-hex)

9978 & 15 //wird Bitverknüpft und liefert als Ergebnis 10 = 000a, anschließend kann man die Zahl 4 mal shiften (9978 >> 4) und kann diese Prozedur weiterfüheren.. Beim Zweiten mal kommt das Ergebnis 15=000f heraus und damit wurde das Hex(f) gefunden.

An der 4ten stelle "1":

10 & 8 =
1010 & 1000 = 1000 und damit > 0 ...

hier ist auch keine konvertierung nötig, da die bitoperatoren direkt in der Bitebene arbeitet..

Dies war zumindest mein Denkansatz, den ich auch so realisieren konnte.

ich hoffe, damit konnte ich euch weiterhelfen..

Neo

Erfahrener Schreiberling

  • "Neo" is male

Posts: 322

Date of registration: Jul 24th 2005

Location: Hannover

Occupation: Informatik

13

Monday, April 30th 2007, 10:38pm

Quoted

Original von L A C K Y

9978 & 15 //wird Bitverknüpft und liefert als Ergebnis 10 = 000a, anschließend kann man die Zahl 4 mal shiften (9978 >> 4) und kann diese Prozedur weiterfüheren.. Beim Zweiten mal kommt das Ergebnis 15=000f heraus und damit wurde das Hex(f) gefunden.



Edit: Wieso 4 mal shiften?

This post has been edited 2 times, last edit by "Neo" (Apr 30th 2007, 10:43pm)


  • "Schokoholic" is male

Posts: 2,518

Date of registration: Oct 4th 2006

Location: Hannover

Occupation: Haarspaltung

14

Tuesday, May 1st 2007, 8:44am

Quoted

Original von NeoEdit: Wieso 4 mal shiften?

Weil die Obergrenze 10000_dec = 2710_hex ist. Demnach reicht 4 mal für alle vorgesehenen Zahlen aus. Effizienter wäre aber trotzdem so lange zu shiften, bis die Zahl Null ist.

L A C K Y

Praktikant

  • "L A C K Y" is male

Posts: 6

Date of registration: Jan 10th 2007

Location: Celle

15

Tuesday, May 1st 2007, 1:56pm

nee, so meinte ich das nicht. Wenn man eine Dualzahl um 4 shiftet, dann verschiebt man sie um eine hex stelle (Grundlagen Digitaler Systeme).
und es reicht natürlich nicht nur einmal um 4 zu shiften, sondern in einer while schleife immer wieder um 4 shiften bis die variable 0 ist. so kommt man dann jede hex stelle der zahl, ohne irgendeine konvertierung..

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

16

Tuesday, May 1st 2007, 2:02pm

Quoted

Original von L A C K Y
Eine andere Möglcihkeit wäre es auch mit dem bit-operator "&" zu arbeiten.
Weitere Möglichkeit: Das ganze Herumgeshifte vermeiden und gleich mit einem "Hexzähler" arbeiten. Also statt einer int-Zählvariablen ein Array von int (oder byte) nehmen, in dem jede Stelle von 0 bis 15 läuft. Das Hochzählen muß man dann zwar gesondert implementieren, dafür entfällt jedoch das umfangreiche Shiften nach jedem Schritt. Bin mit jetzt aber gerade selber nicht sicher, welche Methode nun die elegantere ist ...
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

Kaos

Lesen, denken, flamen!

  • "Kaos" is male

Posts: 973

Date of registration: Oct 16th 2005

Location: Han. / Vahrenwald Sinnvolle Beiträge: 7

17

Tuesday, May 1st 2007, 2:28pm

Quoted

Original von Joachim

Quoted

Original von L A C K Y
Eine andere Möglcihkeit wäre es auch mit dem bit-operator "&" zu arbeiten.
Weitere Möglichkeit: Das ganze Herumgeshifte vermeiden und gleich mit einem "Hexzähler" arbeiten. Also statt einer int-Zählvariablen ein Array von int (oder byte) nehmen, in dem jede Stelle von 0 bis 15 läuft. Das Hochzählen muß man dann zwar gesondert implementieren, dafür entfällt jedoch das umfangreiche Shiften nach jedem Schritt. Bin mit jetzt aber gerade selber nicht sicher, welche Methode nun die elegantere ist ...


Das war auch meine erste Idee, funktioniert aber nicht, da nicht alle 16 Zahlen ein "A" auftaucht. Siehe: 161,162,163 etc. Oder hab ich dich falsch verstanden?

Quoted

Man findet immer dort besonders viel Chaos, wo man nach Ordnung sucht. Das Chaos besiegt die Ordnung, weil es besser organisiert ist.

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

18

Tuesday, May 1st 2007, 2:54pm

Quoted

Original von Kaos

Quoted

Original von Joachim
Weitere Möglichkeit: Das ganze Herumgeshifte vermeiden und gleich mit einem "Hexzähler" arbeiten. Also statt einer int-Zählvariablen ein Array von int (oder byte) nehmen, in dem jede Stelle von 0 bis 15 läuft.


Das war auch meine erste Idee, funktioniert aber nicht, da nicht alle 16 Zahlen ein "A" auftaucht. Siehe: 161,162,163 etc. Oder hab ich dich falsch verstanden?
Hast Du. :)

Der Zähler ist dann ein Array. Beispiele:

161 (A1): [1, 10]
162 (A2): [2, 10]
163 (A3): [3, 10]
...
198 (C6): [6, 12]
...
765 (2FD): [13, 15, 2]

Nachteil: Das Hochzählen wird komplizierter und ist mit Performanceeinbußen verbunden.

Vorteil: Das Prüfen der Bedingungen wird einfacher, weil die Shift-Operationen nach jedem Hochzählen entfallen.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

This post has been edited 1 times, last edit by "Joachim" (May 1st 2007, 2:58pm)


retr0virus

Trainee

  • "retr0virus" is male

Posts: 83

Date of registration: Oct 2nd 2006

Location: NRW -> Bad Oeynhausen

Occupation: B.Sc. Informatik, 8.Semester

19

Tuesday, May 1st 2007, 9:27pm

Das Shiften ist allerdings auch nur ein einziger Befehl.

Wenn man sich das ganze mal aufmalt mit ein paar Beispiel-Zahlen und mathematisch und logisch betrachtet, dann kommt man auch nach einigen Stunden (hoffentlich) auf die Lösung, wie man die Bitzahlen so miteinander kombiniert, dass eine Überprüfung, ob ein 'A' vorliegt, funktionieren kann.

Im Endeffekt ist es auch nur relativ wenig Code der benutzt werden muss um ein 'A' zu finden.
Die Methode mit dem durch 16 teilen von Kaos funktioniert allerdings auch sehr schön. ;)
Ein Nichts im Nichts und ins Nichts vertrieben!
- Ren Dhark

nemo

Praktikant

Posts: 5

Date of registration: Apr 26th 2007

20

Monday, May 7th 2007, 9:21pm

Hat jemand eine Pm für mich?

This post has been edited 1 times, last edit by "nemo" (May 8th 2007, 11:17am)