Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Paare finden (https://www.delphipraxis.net/61012-paare-finden.html)

synex 15. Jan 2006 20:14


Paare finden
 
Hallo allerseits,

ich habe folgendes Problem:
ich will bei 5 vorgegebenen Werten herausfinden, ob sich ein oder zwei paare darunter befinden. Also ob sich zwei Werte gleichen bzw 2x2 Werte.
Wie kann ich das am gescheitesten machen, wenn nicht mit einer ewig langen if-then Anweisung?

Gruß, synex

idontwantaname 15. Jan 2006 20:22

Re: Paare finden
 
wenn es wirklich nur 5 werte sind, dann kannst du es so machen (ungetestet)
Delphi-Quellcode:
const
  arr: array[0..4] of Integer = (1, 2, 3, 4, 2);
var
  x, y: Integer;
  pairs: Boolean;
begin
  pairs := False;
  for x := Low(arr) to High(arr) do
    for y := Low(arr) to High(arr) do
      if(arr[x] = arr[y]) and (x <> y) do
        pairs := True; //Hier könnte man die Werte auch noch abspeichern, usw....
end;
Ansonsten, wenn es viel mehr werte sind, kannst du die werte erstmal sortieren (Tutorial: Sortier-Algorithmen I + II) und dann die liste durchgehen und schauen, ob der nächste wert gleich dem aktuellen ist

Amateurprofi 16. Jan 2006 11:42

Re: Paare finden
 
[quote="idontwantaname"]wenn es wirklich nur 5 werte sind, dann kannst du es so machen (ungetestet)
Delphi-Quellcode:
const
  arr: array[0..4] of Integer = (1, 2, 3, 4, 2);
var
  x, y: Integer;
  pairs: Boolean;
begin
  pairs := False;
  for x := Low(arr) to High(arr) do
    for y := Low(arr) to High(arr) do
      if(arr[x] = arr[y]) and (x <> y) do
        pairs := True; //Hier könnte man die Werte auch noch abspeichern, usw....
end;
Besser wäre dann
Delphi-Quellcode:
for x:=Low(arr) to High(arr)-1 do
   for y:=x+1 to High(arr) do
      if arr[x]=arr[y] then ...
  • Das funktioniert auch (hinter IF ... muß ein THEN folgen (nicht DO))
  • Das reduziert den Aufwand erheblich (die innere Schleife wird nicht n^2 mal durchlaufen,
    sondern nur n/2*(n-1) mal, wobei n die Anzahl der Elemente in arr ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 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