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..11] of 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..4] of 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.
Stread hat folgendes geschrieben : |
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.
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
Stread hat folgendes geschrieben : |
Ich kann ja schlecht jede Zeile fragen. |
Doch, was du daran nicht verstehst. Und so viele Zeilen waren das ja auch nicht.
Stread hat folgendes geschrieben : |
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
Chemiker 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!