Verständnisfrage Studium (Java programmieren)

Status
Nicht offen für weitere Antworten.

cantus

Mitglied
Ich habe hier in meinen Studium ne Aufgabe bekommen, die ich nicht ganz verstehe. Mir geht es jetzt nicht um die Java Lösung, sondern nur darum, was hier eigentlich zu machen ist.

Folgende Aufgabe:
Schreiben Sie ein Programm, das die in dem nachfolgendem Körper T liegenden Gitterpunkte mit ganzzahligen Koordinaten i, j, k ausgibt. Je Zeile wird ein Punkt (i,j,k) ausgegeben. Die Punkte sollen entsprechend der Relation "<=" in aufsteigender Reihenfolge ausgegeben werden. Die Gitterpunkte dürfen innherhalb von T und damit auch auf begrenzenden Flächen von T liegen. Die ganzzahlige Würfellänge n , 0<=n, ist Eingabe in das Programm.

a) lexikographische Ordnung: (i1, j1, k1) <= (i2, j2, k2) genau dann, wenn (i1<i2) oder ((i1=i2) und (j1<j2)) oder ((i1=i2) und (j1=j2) und (k1<=k2))

b) T ist ein Teil eines Würfels mit Kantenlänge n. T ist der Tetraeder, der durch die Eckpunkte (0,0,0), (n,0,0), (n,n,0), (n,0,n) gebildet wird.

Kann mir jemand die Aufgabe erklären? Ich brauch keine technische erklärung, wenn ich weiß, wie es geht, kann ich es selbst programmieren
 
hmm ... alle ganzahligen koordinaten in dem körper T?
also 0,0,0 | 1,0,0 | 2,0,0 | ... ?

aber das kann ja auch nicht wirklich das gewünschte sein. hmm .. :?
 
angenommen n = 4:

0,0,0
0,0,1
0,0,2
0,0,3
0,1,0
0,1,1
0,1,2
0,1,3
0,2,0
0,2,1
0,2,2
0,2,3
0,3,0
0,3,1
0,3,2
0,3,3

1,0,0
1,0,1
1,0,2
1,0,3
1,1,0
1,1,1
1,1,2
1,1,3
1,2,0
1,2,1
1,2,2
1,2,3
1,3,0
1,3,1
1,3,2
1,3,3

usw.
 
ok, danke für eure Antworten, die haben mich schon mal ein bisschen weiter gebracht.

Aber irgendwie hänge ich noch immer durch.

Wie kann ich das programmieren?

Gebt mir bitte nen kleinen Tipp...
 
ja, ich weiß *schäm*

aber ich krieg nicht mal den einstieg hin... ich habs jetzt schon ne weile probiert. alles was ich bis jetzt geschafft habe, war ne schöne endlosschleife :-(

vielleicht könnt ihr mir noch beim einstieg helfen
 
Zeig doch was du geschrieben hast, wir sagen dir dann was noch zu verändern ist.
 
cantus hat gesagt.:
alles was ich bis jetzt geschafft habe, war ne schöne endlosschleife :-(
*gg*

das kann ich nur allzu gut, wenn es um rekursion oder so geht 😀

überleg mal .. wenn wir dir jetzt den einstieg geben, dann denkst du .. hey .. das is ja easy. einfach fragen und fertig dann kommt die nächste frage und wieder die nächste.
dann hast "du" es irgendwann fertig, aber eigentlich hast du gar nicht verstanden was da abläuft. du hast den entwicklungsprozess nicht selbst durchgeführt.

lass uns das zusammen machen, dann hast du da mehr von ;-)
 
a) mit Compareable, als Objekte Tripel nehmen
Code:
Punkt 
{
    int x
    int y
    inz z
}
und CompareTo für die lexikographische Ordnung implementieren,
einfach nacheinander für x,y,z
Code:
if(x1<x2) return -1
if(x2>x2) return +1
if(y1<y2) return -1 // wenn x1==x2, dann also y
if(y1>y2) return +1
if(z1<z2) return -1
if(z1>z2) return +1
return 0; // wenn alle drei gleich sind 0
das ist wohl der leichte Teil, du besorgst dir alle Tupel für T (siehe b), legst sie in eine Collection und machst Collections.sort

b) eher schwierig, du musst die Koordinaten aller Punkte im Tetraeder beschaffen, dazu ist leider etwas mathematik nötig 🙂
 
ok, ich hab das jetzt alles etwas ganz anders gemacht, komme aber auf das Ergebnis das vorhin als Beispiel gezeigt wurde


Code:
		int laenge = 0;
		
		//zum Einlesen während der Laufzeit
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		System.out.print("Bitte geben Sie die Wuerfellaenge ein: ");
		laenge = Integer.parseInt(br.readLine());
		
		System.out.println("--------");
			
		for (int i=0; i<laenge; i++) {
			for (int j=0; j<laenge; j++) {
				for (int k=0; k<laenge; k++) {
					System.out.println(i + "." + j + "." + k);
				}
			}
		}
		
		System.out.println("--------");


keine Ahnung ob das so stimmt
 
Zu b: überleg dir das Ganze zuerst zweidimensional.
Man kann dann was mit der Summe (i+j+k) was basteln (Ob ein Punkt "hinter" oder "vor" einer Fläche liegt, kann man über das Vorzeichen von "a*x+b*y+c*z+d", wobei a/b/c der Normalvektor auf die Fläche ist, rausfinden :wink: ).
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben