Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr.
Seite 2 von 3     12 3      

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