Einzelnen Beitrag anzeigen

Delphinus1

Registriert seit: 20. Nov 2018
2 Beiträge
 
#1

Vergleich von zwei eindimensionalen Arrays

  Alt 21. Mär 2019, 21:24
Hallo

Ich bin dabei, meine Lazarus- bzw. Pascalkenntnisse aufzufrischen und habe ein Problem, was ich mir selber nicht wirklich erklären kann. Zunächst einmal kurz die Info: ich habe schon mehrere Foren und Webseiten durchsucht und zwar ähnliche Themen gefunden, aber eine Lösung für mein Problem hat es mir nicht gebracht...

Mein Ziel: ein Programm, mit dem ich zwei zufällige eindimensionale Arrays vom Typ integer vergleichen kann.
Mein Ansatz: ich generiere über zwei Buttons jeweils ein Array (ja man könnte es auch mit einem Button machen, aber das spielt erstmal keine Rolle ) mit 5 unterschiedlichen Zahlen zwischen 0 und 10.

Als Beispiel mal einer der beiden Buttons (der andere dann eben mit j statt i):

Code:
procedure TForm1.b_arraycreate1Click(Sender: TObject);
begin
   randomize;
   for i := 1 to 5 do
      arr1[i] := random(10);
end;
(Hinweis dazu: die Variablen i und j sowie die Arrays arr1[i] und arr2[j] habe ich global deklariert.
Code:
var
  Form1: TForm1;
  arr1: array[0..5] of integer;
  arr2: array[0..5] of integer;
  i,j:integer;
)

Soweit, so gut. Ich habe die jeweilige Belegung der Arrays auch zum Test, ob die beiden Arrays wirklich immer wieder per Knopfdruck zufällig generiert werden, in ein Memofeld ausgeben lassen. DAS funktioniert noch.

Jetzt aber das Problem, der Vergleich beider Arrays.
Ziel: ich möchte per Knopfdruck ein Ausgabefenster erhalten, das mir mitteilt, ob eine Zahl in beiden Arrays vorkommt und falls ja, an welcher Stelle in Array 1 und an welcher Stelle in Array 2.

Hier mein Code dazu:

Code:
procedure TForm1.b_vergleichClick(Sender: TObject);
var v:boolean;
begin

for i := 1 to 5 do begin
       for j := 1 to 5 do begin
           if  arr1[i] = arr2[j]
                then
                    begin
                         v:=true;
                    end
                else
                    begin
                         v:=false;
                    end;
       end;
end;

if v = true
     then
         begin
              ShowMessage('Es gibt eine Übereinstimmung in beiden Arrays! Es handelt sich um den Wert ' +IntToStr(arr1[i])+ ', der sich in Array 1 an Position ' +IntToStr(i)+ ' und in Array 2 an Position ' +IntToStr(j)+ ' befindet.');
         end
     else
     begin
          ShowMessage('Es gibt keine Übereinstimmung in beiden Arrays. Generiere doch einfach zwei neue Arrays!');
    end
end;
Lazarus kriegt das auch problemlos kompiliert, nur leider zeigt der mir - egal wie die Arrays bestückt sind - an, dass es keine Übereinstimmung gibt. Auch wenn beide Übereinstimmungen haben. Noch bekloppter: wenn ich das "else" mit der Anzeige für fehlende Übereinstimmung rausnehme, funktioniert das (mehr schlecht als recht, da das Fenster nach Knopfdruck nur erscheint, wenn die Arrays gleiche Elemente enthalten) plötzlich.

Ich habe wirklich absolut keine Ahnung, woran das liegen könnte und ich würde mich sehr freuen, wenn mir hier jemand helfen könnte
Egal, ob ja oder nein, vielen Dank schon mal für's Lesen

Liebe Grüße
Delphinus
  Mit Zitat antworten Zitat