Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array abfragen (https://www.delphipraxis.net/89470-array-abfragen.html)

rambospike 31. Mär 2007 16:59


Array abfragen
 
Hallo,

ich schreibe gerade an einem Programm, welches Roulettezahlen auswertet.
Ich habe dabei folgendes Problem:

Ich habe ein Array Zahl[1..400] angelegt.
Hierein werden fortlaufend Zahlen geschrieben.
Jetzt möchte ich abfragen, ob eine oder mehrere Zahlen schon in dem Array stehen.

Kann ich nun beispielsweise prüfen, ob die Zahl 12 und 14 in einer der Arrays steht, ohne das ich wie unten jedes einzelne Array abfrage?

So habe ich es bisher gemacht:

if Zahl[1] = 12 then...
if Zahl[2] = 12 then...
if Zahl[3] = 12 then...
...
...
...
if Zahl[400] = 12 then...

Das muss doch auch einfacher gehen.
Vielen Dank für eure Hilfe


herzliche Grüße von

rambospike

Jelly 31. Mär 2007 17:22

Re: Array abfragen
 
Mit einem Array hast Du keine direkte Suchfunktion, das musst Du schon zu Fuss machen. Aber natürlich solltest Du die Suche in eine for-Schleife legen... Etwa so:
Delphi-Quellcode:
type
  TRouletteArray = array [1..40] of integer ;

var
  Zahl : TRouletteArray ;

function FindInArray (SearchFor : integer ; InArray : TRouletteArray) : integer ;
begin
     for Result := low(InArray) to high(InArray) do begin
         if InArray[Result] = SearchFor then
             exit ;
     end ;
     Result := -1 ;
end ;
FindInArray liefert dir dann den Index zurück, an der die suchende Zahl steht. Wird keine Zahl gefunden, so liefert die Funktion -1 zurück.

Hawkeye219 31. Mär 2007 17:29

Re: Array abfragen
 
Hi,

wenn das Array immer sortiert ist, könntest du die Anzahl der Vergleichsoperationen durch die Verwendung einer binären Suche reduzieren. Benötigst du die doppelten Einträge? Falls nicht, könntest du über den Einsatz von Mengen (Sets) nachdenken:

Delphi-Quellcode:
var
  Menge : set of 0..36;

begin
  Menge := []; // Menge löschen
  Include (Menge, 17); // Zahl 17 hinzufügen
  Exclude (Menge, 17); // Zahl 17 entfernen
  if (17 in Menge) then ... // Abfrage
end;
Wenn dich nur die Häufigkeit der Zahlen interessiert, wäre vielleicht folgende Deklaration besser:

Delphi-Quellcode:
var
  Anzahl : array [0..36] of Integer;
Anstatt die Zahlen in das Array einzutragen inkrementierst du nur den zugehörigen Zähler. Ob eine Zahl überhaupt vorgekommen ist, kannst du so direkt ablesen.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:03 Uhr.

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