Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi scheint einfach, aber der schein trügt ... (https://www.delphipraxis.net/1412-scheint-einfach-aber-der-schein-truegt.html)

Helmut 23. Nov 2002 20:54


scheint einfach, aber der schein trügt ...
 
Hallo,

ich brauch schon wieder eure Hilfe :roll:

Das problem ist eigentlich total banal, aber ich komm nicht auf die gedankliche lösung:

Ich habe 6 boolean-variablen (variable[index].selected:=true/false). (i:=1 to 6)
Durch den programmverlauf vor diesem teilstück hat der benutzer mindestens 2 dieser variablen auf true gesetzt. Ich möchte jetzt alle auf true gesetzten variablen vergleichen, und zwar deren zahlenwerte (variable[index].zahl:=?).

Wenn alle auf true gesetzten variablen gleich sind, wird ein programmteil aufgerufen, wenn sich mind. einer von den anderen unterscheidet wird ein anderer programmteil aufgerufen. (if-then)

Ich hab mir schon den kopf darüber zerbrochen. Und ihr habt es ja noch schwerer weil ihr euch erst reindeknen müsst.

Ich hoffe trotzdem das mir jemand helfen kann... :lol:

mfg
Helmut

ps: fragt nach wenn irgendwas unklar ist - manchmal versteht man nur selbst seine erklärungen :mrgreen:

[edit=Daniel B]Und ab nach Object Pascal; hat ja was mit Schleifen zutun.[/edit]

Daniel B 23. Nov 2002 21:00

Hallo Helmut,

mach eine Schleife:

Delphi-Quellcode:
for i := 1 to 6 do
begin
  if i <> Deine2Zahlen then //or noch einfügen
  begin
    //Tue hier was
  end
  else
  begin
    //Tue hier was anderes
  end;
end;
Grüsse, Daniel :hi:

Sebastian Nintemann 23. Nov 2002 21:10

Wenn ich dich richtig verstanden habe hast du ein array (variable) mit records drin die je ein Feld Selected und Zahl enthalten? Dann müsste das so gehen:

Delphi-Quellcode:
var
  i,zahl: integer;
begin
  for i := 1 to 6 do
    if variable[i].selected then
      begin
        zahl := variable[i].zahl;
        break
      end;                           //erste Zahl herausfinden
  for i := 1 to 6 do
    if (variable[i].selected) and (variable[i].zahl <> zahl) then
      begin
        tu(irgend,was,wenn);
        die(zahlen,unterschiedlich,sind);    //hier code bei unterschiedlichen zahlen
        exit
      end;
   tuirgendwasanderes  //hier bei gleichen zahlen
end;
Hab ich mir jetzt nur mal so ausgedacht, geht sicher auch andere, vielleicht einfachere Wege :mrgreen:

Gruß, Sebastian

Helmut 23. Nov 2002 21:34

Hi,

hab ichs mir doch gedacht, bei meiner "super" erklärung wirds bestimmt nicht so verstanden wie ich das mir gedacht habe :).

Also, Grotesquery, du hats mich auf eine Idee gebracht. Ich bin grad am überlegen wie ich das umsetze :).

Aber um das nochmal zu klären, hier nochmal eine genaue beschreibung:

Ich habe ein array von records
Code:
wuerfelRecord = record
                 zahl: integer;
                 selected: boolean;
               end;

...
var
wuerfel: array[1..6] of wuerfelRecord;
soo.. (*lufthol* :lol: ) :

wuerfel[] besteht ja aus 6 records. Der "benutzer" hat jetzt mind. 2 dieser records auf wuerfel[index].selected:=true; gesetzt, er kann aber auch alle 6, oder 4 oder so auf true gesetzt haben.

Ich möchte jetzt alle vergleichen die wuerfel[index].selected:=true gesetzt haben, und zwar mit wuerfel[index].zahl(:=integer).

Wenn von allen true-wuerfeln die .zahl-werte sich unterscheiden (nicht ALLE gleich sind), dann kommt ein fehler (msg oder so... is ja jetzt egal..), andernfalls wird ein anderes begin - end; ausgeführt.

Nicht grade verständlicher, oder? :oops:

Naja, ich bin grad am überlegen, Grotesquery hatte ja die idee mit dem übergeben aller "true-zahlen" an eine "zahl". Wenn diese zahl nun ein array wäre könnte ich von allen auf true gesetzten die zahlen an diese zahlen übergeben und dann die arraysdie eine zahl enthalten einfach mit if (zahl[1]=zahl[2] and zahl1[1]=zahl[3] usw.) then ... überprüfen...

gleichmal testen :)

thomasdrewermann 23. Nov 2002 22:02

Hi Helmut,
ich denke von der Logik her sollte diese Umsetzung klappen:

Delphi-Quellcode:
function testewuerfel(wurf: array of wuerfelRecord):boolean;
var i,i1:integer;
begin
result:=true;
for i:=0 to length(wurf)-1 do
        if wurf[i].selected then
                for i1:=0 to length(wurf)-1 do
                        if wurf[i1].selected then
                                if wurf[i].zahl<>wurf[i1].zahl then
                                result:=false;
end;
Der Aufruf funktioniert dann mit:
Delphi-Quellcode:
if testewuerfel(wuerfel) then
begin
//Das was dann passieren soll, wenn alle gleich sind
end else
Showmessage('Alles Falsch!');
PS: Was proggst du gerade?

MFG
Thomas

Helmut 23. Nov 2002 22:23

super, es klappt! :dancer2: :mrgreen:
Also echt ne super lösung - du kannst gedankenlesen :D

Du wolltest ja wissen was ich code:

Ein "würfelspiel". Eigentlich spielt man das mit würfelbecher und 6 würfeln, is ziemlich regelaufwändig (2 seiten regeln! *g*) aber macht ne menge spass. Versteht sich von selbst das ich es dann hier als erstes veröffentliche, bei der super Hilfe dies hier im Forum gibt :spin: . Mal sehn wann ich fertig werde, schätze so in einer woche oder in zweien :)

und danke nochmal! Ich glaube den schwierigsten teil in meinem programm hab ich jetzt sogut wie hinter mir! :coder:

mfg
Helmut


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz