Autor |
Beitrag |
swasy
Hält's aus hier
Beiträge: 7
|
Verfasst: Di 24.04.07 08:27
Hy sitz grad mit ein paar Freunden in der schule und arbeiten an einem Delphi-Projekt "Magische Quadrate"...
leider kommen wir nicht mehr weiter und hoffen ihr könnt uns helfen.
Was wir aufjedenfall noch brauchen wäre eine Kontrolle das jede Zahl nur einmal verwendet werden darf!
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221:
| implementation
{$R *.DFM} type tMagic=array [1..100]of integer; var Magic:tMagic;
type tMaQuad = array [1..3,1..3] of integer; var MaQuad : tMaQuad;
procedure TfrmMagischeQuadrate.BtnNeuesSpielClick(Sender: TObject); var summe, summe1:real; begin with StrGridEingabe do begin cells[0,0]:=' '; cells[0,1]:=' '; cells[0,2]:=' '; cells[1,0]:=' '; cells[1,1]:=' '; cells[1,2]:=' '; cells[2,0]:=' '; cells[2,1]:=' '; cells[2,2]:=' '; end;
begin Randomize; Magic[1]:=Random(15)+1;
StrGridEingabe.cells[1,1]:=IntToStr(Magic[1]); end;
begin LblSumme1.Caption:='0'; LblSumme2.Caption:='0'; LblSumme3.Caption:='0'; LblSumme4.Caption:='0'; LblSumme5.Caption:='0'; LblSumme6.Caption:='0'; LblSumme7.Caption:='0'; LblSumme8.Caption:='0'; end;
begin summe:=StrToFloat (StrGridEingabe.cells[1,1]); summe1:=(summe)*3; EdtSumme.Text:=FloatToStr(summe1); end; frmMagischeQuadrate.LblSumme1.Font.Color:=clBlack; frmMagischeQuadrate.LblSumme5.Font.Color:=clBlack; frmMagischeQuadrate.LblSumme2.Font.Color:=clBlack; frmMagischeQuadrate.LblSumme3.Font.Color:=clBlack; frmMagischeQuadrate.LblSumme4.Font.Color:=clBlack; frmMagischeQuadrate.LblSumme8.Font.Color:=clBlack; frmMagischeQuadrate.LblSumme7.Font.Color:=clBlack; frmMagischeQuadrate.LblSumme6.Font.Color:=clBlack;
end;
procedure TfrmMagischeQuadrate.BtnSchliessenClick(Sender: TObject); begin close; end;
procedure Summenkontrolle (MQOrdnung : integer);
var z, s, SummeHD , SummeND : Integer; summe1 : real;
type tSummeZeile = array [1..3] of Integer; var SummeZeile : tSummeZeile;
type tSummeSpalte = array [1..3] of Integer; var SummeSpalte : tSummeSpalte;
begin
For z := 1 to MQOrdnung do begin SummeZeile[z]:=0; For s := 1 to MQOrdnung do begin SummeZeile[z]:= SummeZeile[z]+MaQuad[z,s]; end; end; For s := 1 to MQOrdnung do begin SummeSpalte[s]:=0; For z := 1 to MQOrdnung do begin SummeSpalte[s]:= SummeSpalte[s]+MaQuad[z,s]; end; end; SummeND:=0; For s := 1 to MQOrdnung do begin SummeND:= SummeND+MaQuad[s,(MQOrdnung+1)-s]; end; SummeHD:=0; For s := 1 to MQOrdnung do begin SummeHD:= SummeHD+MaQuad[s,s]; end;
frmMagischeQuadrate.LblSumme1.Caption:= IntToStr (SummeND); frmMagischeQuadrate.LblSumme5.Caption:= IntToStr (SummeHD); frmMagischeQuadrate.LblSumme2.Caption:= IntToStr (SummeZeile[1]); frmMagischeQuadrate.LblSumme3.Caption:= IntToStr (SummeZeile[2]); frmMagischeQuadrate.LblSumme4.Caption:= IntToStr (SummeZeile[3]); frmMagischeQuadrate.LblSumme8.Caption:= IntToStr (SummeSpalte[1]); frmMagischeQuadrate.LblSumme7.Caption:= IntToStr (SummeSpalte[2]); frmMagischeQuadrate.LblSumme6.Caption:= IntToStr (SummeSpalte[3]);
summe1:= StrToInt(frmMagischeQuadrate.EdtSumme.Text) ; if summe1 = SummeND then begin frmMagischeQuadrate.LblSumme1.Font.Color:=clBlue; end else frmMagischeQuadrate.LblSumme1.Font.Color:=clRed;
if summe1 = SummeHD then begin frmMagischeQuadrate.LblSumme5.Font.Color:=clBlue; end else frmMagischeQuadrate.LblSumme5.Font.Color:=clRed; if summe1 = SummeZeile[1] then begin frmMagischeQuadrate.LblSumme2.Font.Color:=clBlue; end else frmMagischeQuadrate.LblSumme2.Font.Color:=clRed; if summe1 = SummeZeile[2] then begin frmMagischeQuadrate.LblSumme3.Font.Color:=clBlue; end else frmMagischeQuadrate.LblSumme3.Font.Color:=clRed; if summe1 = SummeZeile[3] then begin frmMagischeQuadrate.LblSumme4.Font.Color:=clBlue; end else frmMagischeQuadrate.LblSumme4.Font.Color:=clRed; if summe1 = SummeSpalte[1] then begin frmMagischeQuadrate.LblSumme8.Font.Color:=clBlue; end else frmMagischeQuadrate.LblSumme8.Font.Color:=clRed; if summe1 = SummeSpalte[2] then begin frmMagischeQuadrate.LblSumme7.Font.Color:=clBlue; end else frmMagischeQuadrate.LblSumme7.Font.Color:=clRed; if summe1 = SummeSpalte[3] then begin frmMagischeQuadrate.LblSumme6.Font.Color:=clBlue; end else frmMagischeQuadrate.LblSumme6.Font.Color:=clRed;
end;
procedure TfrmMagischeQuadrate.BtnUeberpruefenClick(Sender: TObject); var MQOrdnung: integer;
begin MaQuad[1,1]:=StrToInt (StrGridEingabe.cells[0,0]); MaQuad[2,1]:=StrToInt (StrGridEingabe.cells[0,1]); MaQuad[3,1]:=StrToInt (StrGridEingabe.cells[0,2]); MaQuad[1,2]:=StrToInt (StrGridEingabe.cells[1,0]); MaQuad[2,2]:=StrToInt (StrGridEingabe.cells[1,1]); MaQuad[3,2]:=StrToInt (StrGridEingabe.cells[1,2]); MaQuad[1,3]:=StrToInt (StrGridEingabe.cells[2,0]); MaQuad[2,3]:=StrToInt (StrGridEingabe.cells[2,1]); MaQuad[3,3]:=StrToInt (StrGridEingabe.cells[2,2]); MQOrdnung:=3; Summenkontrolle (MQOrdnung);
end;
end. |
Moderiert von Tino: Titel geändert.
|
|
Horst_H
      
Beiträge: 1654
Erhaltene Danke: 244
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Di 24.04.07 08:39
Hallo,
anschaulich hast Du eine Menge von Zahlen, da bieten sich doch der typ set an.
Include, exclude, if zahl in Menge then
Gruß Horst
|
|
FiceGoesDelphi
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Di 24.04.07 10:36
Ich bin mir nicht ganz sicher aber meine zu wissen, dass erst vor kurzem ein ähnliches Problem hier im Forum diskutiert wurde. Ich glaube du solltest in die Suche mal "Sudoku" eingeben! Da sollten Random-Zahlen auch nur einmal wiedergegeben werden! Vllt hilft dir das ja weiter!
Liebe Grüße,
FGD
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Mi 02.05.07 15:01
Oder du schreibst:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var MagicControl: TStrings; i: Integer; begin for i := 1 to MagicControl.Count do begin if StrToInt(MagicControl[i] = StrToInt() then MagicControl.Add() else begin MagicControl.Clear; Application.MessageBox ('Fehler beim Ausfüllen.','Magische Quadrate',MB_OK + MB_ICONERROR); end; end; end; |
|
|
swasy 
Hält's aus hier
Beiträge: 7
|
Verfasst: Di 15.05.07 08:46
hy,
wir bekommen immer einen fehler bei der zeile
"for i := 1 to MagicControl.Count do"
und er sagt es würde eine Zugriffsverletzung vorliegen
wir haben jetzt schon alles versucht was uns eingefallen ist aber bekommen den fehler nicht weg!
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 15.05.07 09:26
Delphi-Quelltext 1:
| for i := 0 to MagicControl.Count-1 do |
Solche Zählungen fangen immer bei "0" an.
|
|
Christian V.
      
Beiträge: 311
Win Xp Prof
Turbo Delphi 2005
|
Verfasst: Di 15.05.07 17:57
Um zu prüfen ob jede Zahl nur einmal vorkommt einfach ein Array erstellen:
Delphi-Quelltext 1:
| InUse: Array [1..9] of Boolean; |
Sobald die Zahl in einem feld vorkommt, den entsprechenden Wert im Array auf True setzen.
_________________ Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?
|
|
swasy 
Hält's aus hier
Beiträge: 7
|
Verfasst: Di 22.05.07 08:35
und was brauchen wir noch außer diese eine zeile?!
"InUse: Array [1..9] of Boolean;"
weil mit einem array of boolean haben wir noch nie gearbeitet und haben echt keine ahnung was wir noch machen müssen!
|
|
arj
      
Beiträge: 378
Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
|
Verfasst: Di 22.05.07 10:54
Du hast ja dein MaQuad. Jetzt könntest du einfach testen, ob irgendeine Zahl irgendwoanders verwendet wird:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| i,j : Integer; zahl : Integer; doppelt : Boolean;
doppelt := false; for i:= 1 to 9 do InUse[i] := false;
for i :=1 to 3 do begin for j:=1 to 3 do begin zahl := MaQua[i,j]; if (zahl > 9 or zahl < 1) continue; if InUse[zahl] then begin doppelt := true; break; end else begin InUse[zahl] := true; end; end; end; |
|
|
swasy 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mi 23.05.07 13:37
hi danke für den quelltext =)
if (zahl > 9 or zahl < 1); // Wenn die Zahlen nicht im Bereich von 1,...,9 sind
in dieser zeile kommt eine fehlermeldung das die Typen inkompatible sind
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 23.05.07 13:45
Delphi-Quelltext 1:
| if (Zahl > 1) and (Zahl < 9) |
Klammer beachten.
_________________ Na denn, dann. Bis dann, denn.
|
|
swasy 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mi 23.05.07 14:04
vielen dank es hat funktioniert =)
noch ein problem wir wollen ein start formular machen auf dem 3 button sind, wenn man auf den button klickt öffnet sich das formular mit den magischen quadrate 3*3 die 2 anderen button dienen dazu magische quadrate 5*5 oder 7*7 zu öffnen.
wäre cool wenn mir da jemand helfen könnte 
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 23.05.07 16:07
Hallo!
Bitte erstelle für eine neue Frage auch ein neues Topic. Danke!
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|