![]() |
Zahlenquadrat
Ich brauch mal kurz Hilfe. Mein Delphi spinnt rum und schreibt ganz komische Sachen.
Die Aufgabenstellung ist die Folgende: 1. Man hat ein Quadrat mit n Feldern höhe und breite (bei unserem Beispiel 5). 2. In das Mittlere Feld der ersten "Zeile" schreibt man eine 1 hin. 3. Nun füllt man die restlichen Zahlen (2 bis n^2) in die Felder nach folgenden Regeln: 1. Folgt die Zahl einem Teiler von n, kommt diese in das Feld darunter. 2. Ist sie kein Teiler kommt die Zahl in das Feld rechts oben (1 nach rechts, 1 nach oben). 3. Ist man am Rand angelangt, springt die Zahl auf die Gegenseite. Ein Dreieck mit n=5 sähe also so aus: 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 dazu hab ich schnell einen quelltext geschrieben:
Delphi-Quellcode:
program Project2;
{$APPTYPE CONSOLE} uses SysUtils; type zweidimensional=array [1..10,1..10] of word; var matrix :zweidimensional; i,x,y :integer; const n=5; procedure ausgeben; var k,l:integer; begin for k:=1 to n do begin for l:=1 to n do write(matrix[x,y]:3); writeln; end; end; begin x:= (n div 2)+1; y:=1; matrix[x,y]:=1; ausgeben; for i:=2 to sqr(n) do begin if (i-1 mod n)=0 then begin if y=n then y:=1 else inc(y); matrix[x,y]:=i; end else begin if x=n then x:=1 else inc(x); if y=1 then y:=n else dec(y); matrix[x,y]:=i; end; ausgeben; //zum fortschritt debuggen end; ausgeben; readln; end. seltsamerweise spuckt das programm sehr seltsame ergebnisse aus bei den zwischenausgaben. schaut sie euch bitte mal an. ich finde den fehler irgendwie nicht :( |
Re: Zahlenquadrat
Wie wärs, wenn du die Procedur ausgeben folgendermaßen umschreibst?
Delphi-Quellcode:
Denn x und y sind zwar global deklariert, werden aber in dieser Procedur nicht verändert. Habs nich probiert, das sollte es aber wohl eigentlich sein!
procedure ausgeben;
var k,l:integer; begin for k:=1 to n do begin for l:=1 to n do write(matrix[l,k]:3); writeln; end; end; |
Re: Zahlenquadrat
das isses nich. die ausgabe ist schon richtig. das komische ist, dass bei den zwischendurchläufe das komplette array den aktuellen wert zu haben scheint. irgendwie speichert das programm die koords nicht richtig oder weist ihnen nicht richtig den wert zu. probierts mal selbst aus.
|
Re: Zahlenquadrat
Zitat:
MfG Binärbaum |
Re: Zahlenquadrat
Ich sags nochmal, in der Ausgabe benutzt du x und y, die du nur in der Befüllungsfunktion änderst. In der Ausgabe-Funktion hast du zwar 2 Schleifen mit l und k, die werden aber nicht benutzt. Du gibst also l*k die aktuellen Werte von x und y aus. Daher steht überall die gleiche Zahl...
|
Re: Zahlenquadrat
Zitat:
@leddl: jo. sry. hab mich da verschrieben, war aber nit die ursache. Ich hab den Fehler jetzt gefunden. Ich hab dämlicherweise an dieser Stelle:
Code:
mist gebaut. es hätte (i-1) mod n heissen müssen, da der compiler sonst (i-(1 mod n)) rechnet.
if (i-1 mod n)=0 then
begin if y=n then y:=1 else inc(y); matrix[x,y]:=i; end |
Re: Zahlenquadrat
Gut, OK, die eigentliche Berechnung hab ich mir nich angeschaut. Das war mir für die kurze Zeit, die ich hatte zu aufwendig. Aber daraus
Zitat:
Hab auch den Quelltext nich ausprobiert. Bin aber auf jeden Fall froh, daß ich trotzdem irgendwie recht hatte! :mrgreen: |
Re: Zahlenquadrat
Zitat:
Du speicherst zwar i in der Matrix ab, aber da du nach jedem Schleifendurchlauf die Matrix anzeigen lässt, stehen dann immer nur in einem Teil der Felder die berechneten Werte, während in den anderen Feldern beliebige Werte stehen. Erst zum Ende der Berechnung, also wenn die Schleife komplett abgearbeitet wurde, stehen die berechneten Ergebnisse in der Matrix. Deshalb entstehen auch die Zitat:
Binärbaum |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz