Autor Beitrag
Platinum
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 01.05.09 10:02 
Guten morgen miteinander ;)

Ich möchte eine Binäre Suche Programmieren, die mir gleichzeitig den kleinsten Index der gesuchten Zahl ausgibt (d.h. an wievielter Position die gesuchte Zahl steht). Im Prinzip sollte es funktionieren, aber irgendwie findet der Algorithmus meine Zahl manchmal nicht, obwohl sie vorhanden ist :(

Kann jemand über meinen Code fliegen und ggf. den Fehler zeigen ? Ich kopier den zur Sicherheit mal zusammen mit den deklarationen,so könnt ihr ihn einfach einfach Copy&pasten und selber ausprobieren :)

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
Var
  a:array[1..10of integer;
  x,mi:integer;
  l,r:extended;
  gefunden:boolean;

begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }

  x:=7;    // das ist die gesucht zahl
  l:=1;    // die linke Grenze
  r:=10;   // die rechte Grenze
  gefunden:=false;

  for mi:= 1 to TRUNC(r) do    // hier füllen wir unser array mit zufälligen zahlen
    begin
       randomize;
       a[mi]:=random(10)+1;
       writeln(mi,'.) ', a[mi]);
    end;

   while l<=r do
     begin
       i:=i+1;
       //writeln((TRUNC((l+r)/2)));
       mi:=(TRUNC((l+r)/2));
       if x<a[mi] then r:=mi-1 else l:=mi+1;
     end;

     if x=a[mi] then
         begin
           writeln('Die gesucht Zahl ist vorhanden und befindet sich an der ',mi,' ten Stelle.');
           writeln('Die gesuchte Zahl lautet: ',x);
           gefunden:=true;
         end;
     if gefunden=false then writeln('Zahl ist nicht vorhanden');


Vielen Dank im vorraus :)
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 01.05.09 10:08 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
  
  gefunden:=false;

  while (l<=r) and Not Gefunden do begin   // ÄNDERUNG
    i := i + 1;
    mi := (TRUNC((l+r)/2));
    if x = a[mi] then                      // NEU
      Gefunden := True                     // NEU
    else if x<a[mi] then 
      r := mi - 1 
    else 
      l := mi + 1;
  end;

  if Gefunden then  begin                  // ÄNDERUNG
    writeln('Die gesucht Zahl ist vorhanden und befindet sich an der ',mi,' ten Stelle.');
    writeln('Die gesuchte Zahl lautet: ',x);
  end
  else
     writeln('Zahl ist nicht vorhanden');  // ÄNDERUNG

_________________
Na denn, dann. Bis dann, denn.
Platinum Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 01.05.09 10:29 
Danke, jetzt funzt es ;)