Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Quizfrage


Scharfrichter - So 12.12.04 14:42
Titel: Quizfrage
Hi,
ich hätte hier mal eine interessante Fragestellung bei der ich einfach nicht weiter komme, vielleicht könnt ihr mir helfen. Die Fragestellung lautet wie folgt:
Gegeben sei folgendes statisches array:
Const N=....;
var F: array[1..N] of integer;

Es wird nun angenommen, dass N eine Quadratzahl ist, und, dass F als Quadrat interpretiert wird. Die Aufgabe ist es eine Prozedur zu schreiben, welche die Hauptdiagonale des Quadrates aus F mit ihren Komponenten Nummern belegt.


Gausi - So 12.12.04 14:59

Na, das ist einfach. Schreib dir das Array doch mal als Quadrat auf.

Quelltext
1:
2:
3:
4:
5:
z.B. für N=16:
 (1)  2   3   4
  5  (6)  7   8
  9  10 (11) 12
 13  14  15 (16)

In Klammern stehen die Diagonalelemente. Welche Nummern haben die? 0+1, 4+2, 8+3, 12+4. Da muss man sich jetzt nur die Regelmäßigkeit raussuchen. Und dann sehen, wie das mit anderen Quadratzahlen entsprechend geht... und dann das ganze in eine Schleife packen.


Scharfrichter - So 12.12.04 22:07

Ok wie man die Diagonale herausbekommt ist mir klar, aber wie bekomme ich die Werte dann auf ein Quadrat zugewiesen. Im Array f sind alle Zahlen von 1 bis N und diese müssen nur den Elementen der Hauptdiagonalen zugewiesen werden so wie du es wunderbar aufgeschrieben hast. Ich hatte mir überlegt eine For Schleife anzulegen in der Prozedur die wie folgt aussieht:
For i:= 0 to N do
(Wurzel * i) + (i + 1)

Wurzel steht für die jeweilige Wurzel einer Quadratzahl, also 3 zb. von 9. Nur wie bekomme ich jetzt die Zahlen aus F auf meine Hauptdiagonale?


Gausi - So 12.12.04 22:37

so vielleicht?

Delphi-Quelltext
1:
2:
for i:=0 to Wurzel-1 do
    F[(Wurzel * i) + (i + 1)] := (Wurzel * i) + (i + 1);


IngoD7 - Mo 13.12.04 12:25

Ihr könnt ja mal folgende zwei Diskussionen hier mit einfließen lassen. 8)

DP [http://www.delphipraxis.net/topic41670_berechnung+der+hauptdiagonalen+eines+quadrates.html&highlight=] und DG [http://www.delphi-groups.de/YaBBSe/index.php?board=15;action=display;threadid=23374]