Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Summe ausgeben, nur wie? (https://www.delphipraxis.net/128816-summe-ausgeben-nur-wie.html)

Sn00bY 6. Feb 2009 19:21


Summe ausgeben, nur wie?
 
Hab die hälte hinter mir:
Code:
type TFeld = array of array of integer;
var
          Feld : TFeld;
   n, ZS, z, s : integer;

begin
 ZS := 0;

 write ('Wie gross soll der Wuerfel sein?  '); readln (n);
 Setlength(Feld,1,n);
     for z:=1 to n do
     begin
     writeln;
     writeln;
     writeln;
        for s:= 1 to n do begin
                                ZS:= ZS + 1;
                                write ('| ',ZS:4);
                          end;
     end;

 readln;
Wie bringe ich es jetzt dazu, die Gesamte Summe des Feldes (notwendig für die einzelnen Summen der Waage-/ Senkrechten und einer Diagonalen [Summe / n] auszugeben

UND

es von alleine so anzuordnen, damit überall die "kleine" Summe gleich ist.

Bitte um rat.

Jens Hartmann 6. Feb 2009 19:25

Re: Summe ausgeben, nur wie?
 
Hallo erstmal,

Was genau suchst Du, ich verstehe überhaupt nicht deine Frage

MFG

Jens

Sn00bY 6. Feb 2009 19:35

Re: Summe ausgeben, nur wie?
 
Also, stell dir ein Quadrat vor, das 3 mal 3 Felder hat, in jedem Feld ist ist eine Zahl

123
456
789

Man kann die zahlen so tauschen, das jede Waagerechte, jede Senkrechte und eine Diagonale die Gleiche Summe hat.

1+2+3+4+...+9 = 45

45 / 3 = 15 (Summe jeder Waage-/ Senkrechte und 1 Diagonalen)

Jetzt soll mir das Programm die zahlen so ausgeben, damit es in Etwa so aussieht



1 9 5 = 15
6 2 7 = 15
8 4 3 = 15

globetrotter77 6. Feb 2009 19:43

Re: Summe ausgeben, nur wie?
 
Zitat:

Zitat von Jens Hartmann
Was genau suchst Du, ich verstehe überhaupt nicht deine Frage

Geht mir genauso!
Was für eine Summe meinst du?
Was ist die kleine Summe?
Das kann niemand verstehen!

Was mir auffällt:
Du hast ein zweidimensionales Feld definiert, das in der Größe vermutlich falsch festgelegt wurde.
Ich nehme doch mal an, dass es in allen Dimensionen gleich groß sein soll, oder?
(Siehe SetLength-Anweisung)
Dann fragst du nach der Größe eines Würfels, also eines dreidimensionalen Objekts ... passt das zusammen? Ich glaube nicht!

Im übrigen wurde das Feld noch nicht einmal gefüllt, das sollte natürlich passieren, bevor man irgendwelche Summen bilden kann.

Vielleicht solltest du erst mal kleine Brötchen backen und mit eindimensionalen Feldern rumprobieren, bis du dir da sicher bist, was du machst? Danach kommt eine zweite Dimension dazu, dann die dritte.
Ich habe das zumindest in dieser Reihenfolge gemacht und bin damit ganz gut gefahren. Ich kann dir das nur raten ...

Meflin 6. Feb 2009 19:46

Re: Summe ausgeben, nur wie?
 
gleiche frage wie hier: http://www.delphipraxis.net/internal...t.php?t=151662 ? :gruebel:

Jens Hartmann 6. Feb 2009 19:47

Re: Summe ausgeben, nur wie?
 
Also wenn ich das jetzt richtig verstanden habe, kann der Würfel auch 4x4 oder 5x5 Felder haben, Über die Summe der Zahlen möchtest du die Größe des Würfels?? berechnen.
Ich denke eher du suchst sowas wie SODOKU, oder?

Ändere meine antwort, die Frage steht im Tread von Meflin....

MFG

Jens

Sn00bY 6. Feb 2009 19:56

Re: Summe ausgeben, nur wie?
 
Ja, sowas wie SODOKU, (wir haben in der schule nur Würfel dazu gesagt)
Das programm soll quasi sodku spielen, damit jede Zeile und jede spalte die gleiche summe hat.

Jens Hartmann 6. Feb 2009 20:01

Re: Summe ausgeben, nur wie?
 
Gib mal einfach Soduko im Suchbereich ein und du wirst fündig.

Viel Glück

Jens

Jens Hartmann 6. Feb 2009 21:32

Re: Summe ausgeben, nur wie?
 
Noch mal zum letzten Beitrag von eben.

Beitrag von eben

Es ist richtig, das es kein Soduko ist, aber er sucht nach einem Würfel (3x3 Felder sind allerdings kein Würfel) der in allen Richtungen das selbe Ergebnis aufweißt.

Gut da kommt die Diagonale zu, aber ein Ansatz durch Soduko sollte schon da sein.

Oder?

Jens

inherited 6. Feb 2009 21:51

Re: Summe ausgeben, nur wie?
 
Bei der Suche nach Sodoku oder Soduko wirst du nichts finden. Das Dingenkirchen heißt Sudoku

Jens Hartmann 6. Feb 2009 22:00

Re: Summe ausgeben, nur wie?
 
Sorry,

ich Knalltüte, wie doof von mir, Natürlich heißt das Sudoku, aber man konnte sich ja denken was ich meine. :gruebel:

Jens :wall:

Sn00bY 6. Feb 2009 22:08

Re: Summe ausgeben, nur wie?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also, ich hab gesucht, aber nichts richtiges gefunden.
Ich hab mal so weiter versucht, bisl erfweitert und bin jetzt so weit (siehe Bild)

Da seht ihr, wie ich es bis jetzt ausgegeben bekommen.
Wenn ihr jetzt die erste Zeil zusammenrechnet, bekommt ihr die Summe 15 raus. In der zweiten die Summe 40.
Ich möchte jetzt aber, dass das programm nach der Eingabe der Feldanzahl sofort mir die zahlen so anordnet, das überall die Summe 65 (in diesem Fall) ist.

Jens Hartmann 6. Feb 2009 22:26

Re: Summe ausgeben, nur wie?
 
Also ich habe jetzt grad mal ein bißchen im Forum gestöpert,
schau mal bitte nach ob du mit diesen Links was anfangen kannst.

Sudoku Löser

Sudoku Auflöser erstellen

Sudoku

MFG

Jens

inherited 6. Feb 2009 22:45

Re: Summe ausgeben, nur wie?
 
Zitat:

Zitat von Jens Hartmann
Sorry,

ich Knalltüte, wie doof von mir, Natürlich heißt das Sudoku, aber man konnte sich ja denken was ich meine. :gruebel:

Jens :wall:

Sodoku heißt glaube ich in etwa "lesen ohne (es) zu verstehen"

Sn00bY 6. Feb 2009 22:47

Re: Summe ausgeben, nur wie?
 
Danke für die posts Jens, nur die helfen mir nicht wirklich weiter!

Sudoku is auf dem prinzip aufgebaut, das in jeder spalte und zeile nur die zahlen 1 bis 9 vorkommen, bei mir jedoch zB. die zahlen 1 bis 25 auf dem kompletten feld verteilt werden. :(

Jens Hartmann 6. Feb 2009 22:58

Re: Summe ausgeben, nur wie?
 
Sorry,

Dann weiß ich momentan auch nicht so recht, werde mal ein bißchen probieren.

MFG

Jens

PS: Danke "inherited" für deine schlauen Sprüche, aber wirklich helfen tust du auch nicht.

Sn00bY 6. Feb 2009 23:03

Re: Summe ausgeben, nur wie?
 
Danke, dann bis morgen, gehe schlafen ^^

Jürgen Thomas 7. Feb 2009 10:12

Re: Summe ausgeben, nur wie?
 
Hallo,

in dem anderen (inzwischen geschlossenen) Thread wurde das richtige Stichwort Magisches Quadrat gegeben. (Wie kann man nur auf die völlig abwegige Idee kommen, ein zweidimensionales Ding "Würfel" zu nennen. :roll: ) Ein Konstruktionsverfahren für Quadrate mit ungerader Seitenlänge (wie hier) ist unter Wikipedia: Konstruktion magischer Quadrate zu finden - gleich das erste Beispiel ist gut geeignet.

Die Aufgabe besteht also darin, dieses Konstruktionsprinzip in ein Programm umzusetzen. Viel Erfolg!

Jürgen

Sn00bY 7. Feb 2009 16:22

Re: Summe ausgeben, nur wie?
 
Hallo Jürgen, ich hab gefunden, was ich gesucht habe, dank dir.
Jetzt hab ich nur noch ein Problem:

In dem Programm was ich geschrieben hab, konnte ich per Eingabe festlegen, wie groß das quadrat sein soll.
Dies geht jetzt leider nicht, obwohl ich es mit

write ('blabla'); readln (n);
Setlength(quadrat,1,n);

dazu bringen wollte.

hier der Code:



Delphi-Quellcode:
program magisch_quadrat;

    {$APPTYPE CONSOLE}

uses SysUtils;

const ord=6; //soll wegfallen

var quadrat, matrix1, matrix2 : array[1..ord, 1..ord] of integer;   // array[1..ord, 1..ord] soll zu array of array of integer    werden
i, j : integer; // n : integer

procedure odd;
var x, y, anz :integer;
begin
// hier müsste jetzt write ('blabla'); readln (n);
//                    Setlength(quadrat,1,n);
   x:=(ord+1) div 2;
   y:=1;
   anz:=0;
   for i:=1 to (ord*ord) do
   begin
      quadrat[x, y]:=i;
      inc(anz);
      if (anz mod ord=0) then inc(y)
      else
      begin
         if (x=ord) then x:=1 else inc(x);
         if (y=1) then y:=ord else dec(y);
      end;
   end
end;

procedure oddmod2;
var x, y, anz, zw : integer;

begin
   x:=(ord div 2+1) div 2;
   y:=1;
   anz:=0;
   for i:=1 to (ord*ord div 4) do
   begin
      quadrat[y, x]:=i;
      inc(anz);
      if (anz mod (ord div 2)=0) then inc(y)
      else
      begin
         if (x=ord div 2) then x:=1 else inc(x);
         if (y=1) then y:=ord div 2 else dec(y);
      end;
   end;

   x:=(ord div 2+1) div 2 +(ord div 2);
   y:=1+(ord div 2);
   anz:=0;
   for i:=1 to (ord*ord div 4) do
   begin
      quadrat[y, x]:=i+(ord*ord div 4);
      inc(anz);
      if (anz mod (ord div 2)=0) then inc(y)
    else
    begin
      if (x=ord) then x:=ord div 2 +1 else inc(x);
      if (y=ord div 2 +1) then y:=ord else dec(y);
    end;
   end;

   x:=(ord div 2+1) div 2 +(ord div 2);
   y:=1;
   anz:=0;
   for i:=1 to (ord*ord div 4) do
   begin
      quadrat[y, x]:=i+2*(ord*ord div 4);
      inc(anz);
      if (anz mod (ord div 2)=0) then inc(y)
      else
      begin
        if (x=ord) then x:=ord div 2+1 else inc(x);
        if (y=1) then y:=ord div 2 else dec(y);
      end;
   end;

   x:=(ord div 2+1) div 2;
   y:=1+(ord div 2);
   anz:=0;
   for i:=1 to (ord*ord div 4) do
   begin
      quadrat[y, x]:=i+3*(ord*ord div 4);
      inc(anz);
      if (anz mod (ord div 2)=0) then inc(y)
      else
      begin
        if (x=ord div 2) then x:=1 else inc(x);
        if (y=ord div 2+1) then y:=ord else dec(y);
      end;
   end;

   for i:=1 to (ord div 3) do
   begin
      zw:=quadrat[i, i];
      quadrat[i, i]:=quadrat[ord div 2+i, i];
      quadrat[ord div 2+i, i]:=zw;

      if (i<>ord div 3) then
      begin
         zw:=quadrat[ord div 2+1-i, i];
         quadrat[ord div 2+1-i, i]:=quadrat[ord+1-i, i];
         quadrat[ord+1-i, i]:=zw;
      end;
   end;
end;

procedure mod4;
var a, b, erg, zw : integer;
begin
   zw:=ord div 4;
   for i:=1 to ord do
   for j:=1 to ord do
   begin
      a:=((i-1) div (zw));
      b:=((j-1) div (zw));
      erg:=a*4+b+1;
      case erg of
       1, 4, 6, 7, 10, 11, 13, 16: quadrat[i, j]:=(i-1)*ord+j;
       else quadrat[ord+1-i, ord+1-j]:=(i-1)*ord+j;
      end;
   end;
end;


procedure ausgabe;
begin
   for i:=1 to ord do
   begin
      for j:=1 to ord do Write(quadrat[i, j]:3);
      Writeln;
   end;
   Readln;
end;

begin
   if (ord mod 4=0) then mod4
   else if (ord mod 2=1) then odd
   else oddmod2;
   ausgabe;
end.


bitte um ideen ^^

Jürgen Thomas 7. Feb 2009 16:34

Re: Summe ausgeben, nur wie?
 
Hallo,

bitte ändere Deinen Code auf "Delphi-Code". Ergänze das Ganze mit einer Beschreibung und Kommentaren, damit jeder sieht, was Du Dir vorgestellt hast, und nicht raten muss. Und wofür willst Du Ideen haben? Wie es variabel gestaltet werden soll? (Dann musst Du die Abfrage vor allem einbauen an den Anfang der Haupt-Prozedur des Programms.) Oder was?

Jürgen

/Edit
Ich habe jetzt die Änderungen gelesen. So wird es nichts; sondern so musst Du vorgehen:
Delphi-Quellcode:
//  nicht hier:
procedure odd;
var x, y, anz :integer;
begin
// hier müsste jetzt write ('blabla'); readln (n);
//                    Setlength(quadrat,1,n);
usw. end;

//  sondern hier:
begin
// hier müsste jetzt write ('blabla'); readln (n);
//                    Setlength(quadrat,1,n);
   if (ord mod 4=0) then mod4
   else if (ord mod 2=1) then odd
   else oddmod2;
   ausgabe;
end.
Aber wie es geht, weiß ich nicht, da ich von Delphi schon zu lange weg bin und mit Arrays fast nie gearbeitet habe.

Beschreibung und Kommentare sind natürlich weiterhin notwendig.

Jürgen

Jens Hartmann 8. Feb 2009 19:27

Re: Summe ausgeben, nur wie?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Sn00bY,

wie versprochen, habe ich mir gedanken gemacht.

In dem Beispiel Projekt, ist ein magisches Quadrat für ungerade Zahlen und in dem Link findest du ein Projekt zu allen Magischen Quadraten.

Das magische Quadrat für Gerade Zahlen und soweiter ist schon etwas komplizierter.

Aber der Link ist inkl. Projekt etc.

Magisches Quadrat

Ach übrigens, gib mal im DF und hier bei DP Magisches Quadrat in der Suche ein und du wirst noch mehr finden.

MFG

Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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