Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Arrays vergleichen


Stread - So 22.02.09 16:46
Titel: Arrays vergleichen
Hi
Ich möchte gerne ein Programm schreiben welches 5 per Checkbox angeklickte Zahlen und 5 Random Zahlen vergleicht.

Für die Checkboxen habe ich bisjetzt das

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm12.Button3Click(Sender: TObject);
var checked: array [0..11of Integer;
  i: Integer;
begin
for i := 0 to 11 do
checked[i]:=0;
if Checkbox1.Checked=true then
begin
checked[0]:=1;
end;
if Checkbox2.Checked=true then
begin
checked[1]:=2;
end;

Das geht bis checked[11] weiter.

Und für die 5 Random Zahlen das hier


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm12.Button4Click(Sender: TObject);
var randomzahl: array [0..4of Integer;
begin
  randomize;
  randomzahl[0]:=random(5)+1;
  randomzahl[1]:=random(5)+1;

Und hier geht es bis randomzahl[4] weiter.

Wie kann ich nun vergleichen welche Zahlen richtig waren und wie kann ich die richtigen Zahlen in ein Edit Feld eintragen?


jaenicke - So 22.02.09 17:11

Du machst es dir viel zu schwer...

Statt zu fragen was du an dem eigentlich viel einfacheren Quelltext aus dem vorigen Thread nicht verstehst, machst du dir lieber das Leben schwer und schreibst viel mehr Code als nötig.

Und das Thema, dass

Delphi-Quelltext
1:
if Checkbox1.Checked=true then                    
falsch ist, hatten wir glaube ich auch schon, oder?
Mehr dazu steht hier:
http://www.delphi-treff.de/tutorials/objectpascal/programmierung-mit-boolean-werten/page/4/


Stread - So 22.02.09 18:33

Super. Dank deiner Hilfe bin ich schon viel weiter.
Bei meinem anderem Thread hast du ja selbst gesagt dass ich es nicht verstehe obwohl ich es solange probiert habe. Und da man mir nicht den Quelltext geben wollte probiere ich es jetzt halt auf dieses andere weise in der Hoffnung das man mir bei dem hier hilft.
Ich dachte dieser Ansatz ist einfacher. Wenn wir mal den einen Anfängerfehler weglassen, ist das so falsch?


jaenicke - So 22.02.09 19:00

Naja, falsch ist das abgesehen von dem "=true" nicht gerade, aber du musst so für jede CheckBox den selben Code schreiben. Das macht es eben sehr aufwendig und unübersichtlich.

user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
Bei meinem anderem Thread hast du ja selbst gesagt dass ich es nicht verstehe obwohl ich es solange probiert habe.
Ja, du hast aber auch nicht gefragt was etwas macht. Ich weiß ja nicht, was du daran nicht verstanden hast, wie soll ich es dann erklären?
Ich hatte ja geschrieben: Frag was du nicht verstehst...

Jedenfalls musst du danach das Array durchgehen und vergleichen, ob das andere Array an der Stelle auch ein Häkchen hatte. Bei jeder Fundstelle erhöhst du die Anzahl, am Ende hast du dann die Anzahl der Übereinstimmungen.


Stread - So 22.02.09 19:10

Ich kann ja schlecht jede Zeile fragen. Am besten wäre es gewesen wenn einer mir den richtigen Quelltext zu dem anderen Thread gegeben hätte und nicht immer nur gesagt was ich machen soll oder nur ein Beispeil und ich absolut keine Ahnung habe wie denn.
Und da ich noch ein Anfänger bin ist das "du musst nur die Arrays vergleichen" ja genau das Problem. Ich habe keine Ahnung wie man das macht.


Chemiker - So 22.02.09 19:19

Hallo Stread,

Crossposts: http://forum.delphi-treff.de/showthread.php?p=187116#post187116

Bis bald Chemiker


Stread - So 22.02.09 19:30

Danke Chemiker :zustimm: Wäre mir ohne dich garnicht aufgefallen :zwinker:
Ich dachte dass mir wenigstens irgendwo geholfen wird aber ihr mögt mich anscheinend alle nicht :|


jaenicke - So 22.02.09 19:35

user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
Ich kann ja schlecht jede Zeile fragen.
Doch, was du daran nicht verstehst. Und so viele Zeilen waren das ja auch nicht.

user profile iconStread hat folgendes geschrieben Zum zitierten Posting springen:
Und da ich noch ein Anfänger bin ist das "du musst nur die Arrays vergleichen" ja genau das Problem. Ich habe keine Ahnung wie man das macht.
Indem du jeden Eintrag vergleichst:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  IdenticalEntries: Integer;
begin
  IdenticalEntries := 0
  for i := 0 to High(Array1) do
    if Array1[i] = Array2[i] then
      Inc(IdenticalEntries);
Mit der for-Schleife gehst du jeden Eintrag durch. Wenn der Eintrag in beiden Arrays übereinstimmt, dann erhöhst du die Variable IdenticalEntries. Am Ende steht dann in dieser Variablen die Anzahl der identischen Einträge.

Was user profile iconChemiker meinte:
Es ist nicht gerade höflich, wenn man Crossposts nicht angibt. Schließlich könnte es sein, dass man sich Mühe macht das selbe zu schreiben, was in einem anderen Forum schon jemand geschrieben hat.
Wenn man dort nachschauen kann, weil man die Posts untereinander verlinkt, dann ist das zwar auch nicht gern gesehen, aber in Ordnung.
// EDIT:
Und darum ist den anderer Post jetzt auch geschlossen, in dem Forum ist das nämlich in den Regeln verboten, Crossposts nicht anzugeben.


jaenicke - So 08.03.09 20:30

Ich dachte eigentlich, dass du dich noch einmal melden würdest. Ich hatte auch eine Lösung gebastelt. Die hänge ich jetzt einmal an, ich habe gerade wieder an den Thread gedacht.


Stread - So 08.03.09 20:57

Hey danke das du noch daran gedacht hast. :zustimm: Da ich leider nicht soviel Zeit hatte habe ich es mit vielen if Abfragen gemacht und habe es dann dabei gelassen. Ich zeig das lieber nicht. :wink:

Ich habe es mir kurz angeschaut und muss sagen: Top Danke, aus dem Programm werde ich noch viel lernen können.