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



BeitragVerfasst: Do 07.05.09 09:01 
Hallo miteinander,

ich will ein array an meine function übergeben, aber ich hab irgendwo einen Syntaxfehler und komme nicht dahinter :X Ich hoffe mir kann jemand helfen, bin zwar schon über www.delphi-forum.de/...function+%FCbergeben gestolpert,das hat mich aber leider nicht weitergebracht :(

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:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function BinSuche(l,r:extended; x:integer; var a: TMyArray):boolean;   //die deklaration meiner funktion
    Var
     m:integer;

   begin
     While (l<=r) do
        begin
           m:=TRUNC((l+r)/2);
           writeln(m);
           writeln(l,r,a[10]);
           if x=a[m] then result:=true;
           if x<a[m] then BinSuche(m+1,r,a,x)
           else BinSuche(l,m-1,a:Tmyarray,x);
           readln;
        end;
       if l>r then result:=false;
      end;

Type
  TmyArray : array[1..10of integer;   //mein array als typ deklariert
Var
x,i:integer;
l,r:extended;
gefunden:boolean;
a:Tmyarray;                             //mein eigentliches array
begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }
  x:=7;                                          
  l:=1;                                          
  r:=10;                                         
  for i:= TRUNC(l) to TRUNC(r) do a[i]:=i;       

  gefunden:=BinSuche(l,r,a,x);         //der funktionsaufruf (ist hier auch ein fehler drin ?)

  if gefunden then writeln('Die Zahl',x,'wurde gefunden');
  if not gefunden then writeln('Die gesucht Zahl ist nicht vorhanden');

  readln;


end.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Do 07.05.09 09:16 
Vielleicht hilft es, den Type vor der Funktion, wo er verwendet wird, zu definieren.

_________________
PROGRAMMER: A device for converting coffee into software.
Platinum Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 07.05.09 11:03 
Nein,leider auch nicht :(
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Do 07.05.09 11:05 
Hallo,

kann es sein, dass du deine Parameter nicht kennst :lol: . Vielleicht solltest du mal die Variablen bennen.
user profile iconPlatinum hat folgendes geschrieben Zum zitierten Posting springen:
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:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function BinSuche(l{1.},r{2.}:extended; x{3.}:integer; var a{4.}: TMyArray):boolean;   //die deklaration meiner funktion
    Var
     m:integer;
   begin
     While (l<=r) do
        begin
           m:=TRUNC((l+r)/2);
           writeln(m);
           writeln(l,r,a[10]);
           if x=a[m] then result:=true;
           if x<a[m] then BinSuche(m+1,r,a,x)
           else BinSuche(l,m-1,a:Tmyarray,x);
           readln;
        end;
       if l>r then result:=false;
      end;

Type
  TmyArray : array[1..10of integer;   //mein array als typ deklariert
Var
x,i:integer;
l,r:extended;
gefunden:boolean;
a:Tmyarray;                             //mein eigentliches array
begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }
  x:=7;                                          
  l:=1;                                          
  r:=10;                                         
  for i:= TRUNC(l) to TRUNC(r) do a[i]:=i;       

//  gefunden:=BinSuche(l{1.},r{2.},a{3.},x{4.});         //der funktionsaufruf (ist hier auch ein fehler drin ?)
  gefunden:=BinSuche(l{1.},r{2.},x{3.},a{4.});         //der funktionsaufruf (ist hier auch ein fehler drin ?)

//Das kann man auch anders schreiben
  if gefunden then 
    writeln('Die Zahl',x,'wurde gefunden')
  else
    writeln('Die gesucht Zahl ist nicht vorhanden');

  readln;

end.


Edit: Noch ein Style-Update :wink: .
Platinum Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 07.05.09 16:50 
x] Vor lauter Code die Variablen nicht mehr sehn ;)

Danke sehr, konnte meinen Code vervollständingen und noch 2 Fehler entdecken ;) Falls jemand zufällig über Google hier rein stolpert: Binäre, rekursive Suche in Delphi

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:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

Type
TmyArray = array[1..10of integer;
Var
x,i:integer;
l,r:extended;
gefunden:boolean;
a:Tmyarray;


function BinSuche(l,r:extended; x:integer; var a: TMyArray):boolean;   
    Var
     m:integer;
     gefunden2:boolean;
   begin

     While (l<=r) and not gefunden2 do
        begin
           m:=TRUNC((l+r)/2);
           writeln('Wert der Mitte: ',m);
           if x=a[m] then gefunden2:=true;
           if x>a[m] then
               begin
                 l:=m+1;
                 BinSuche(l,r,x,a)
               end
             else
               begin
                 r:=m-1;
                 BinSuche(l,r,x,a);
               end;
        end;
       if l>r then result:=false;

       if gefunden2=true then result:=true;
      end;


begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }
  x:=7;                                          
  l:=1;                                          
  r:=10;                                         
  for i:= TRUNC(l) to TRUNC(r) do a[i]:=i;

  gefunden:=BinSuche(l,r,x,a);


  if gefunden = true then
    writeln('Die Zahl "',x,'" wurde gefunden')
  else
    writeln('Die gesucht Zahl ist nicht vorhanden');

  readln;

end.
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Do 07.05.09 23:09 
Das ist aber ganz schön falsch:
ausblenden Delphi-Quelltext
 
55:
56:
57:
58:
59:
60:
61:
62:
{ ... }
if gefunden = true then
    writeln('Die Zahl "',x,'" wurde gefunden')
  else
    writeln('Die gesucht Zahl ist nicht vorhanden');

  readln;

end.

Richtig wäre:
ausblenden Delphi-Quelltext
 
55:
56:
57:
58:
59:
60:
61:
62:
{ ... }
if gefunden then
    writeln('Die Zahl "',x,'" wurde gefunden')
  else
    writeln('Die gesucht Zahl ist nicht vorhanden');

  readln;

end.

Dazu schau dir am Besten mal das hier an. Und um dich mal etwas zu demoralisieren: Damit hast du einen typischen Anfängerfehler gemacht :P :wink: .

P.S.: Nimms nicht so ernst, am Anfang haben wir das alle mal gemacht. :wink:
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19336
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 07.05.09 23:46 
Ich verstehe vor allem nicht so recht wie man darauf überhaupt kommt, denn wenn ich normal spreche, dann mache ich das ja auch nicht. :gruebel:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Schau mal unabhängig vom Programmieren. Welchen dieser beiden Sätze wirst du dann sagen:
  • Wenn "das Wetter ist schön" wahr ist, dann werde ich heute Fußball spielen gehen.
  • Wenn das Wetter schön ist, dann werde ich heute Fußball spielen gehen.
Na? Wirst du wirklich den ersten Satz nehmen? ;-)
Eben, genau das ist aber das, was du in Delphi geschrieben hast...
Nichtdestotrotz sind Fehler ja am Anfang normal, ich habe dafür andere gemacht. :mrgreen:
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 08.05.09 00:24 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Ich verstehe vor allem nicht so recht wie man darauf überhaupt kommt, denn wenn ich normal spreche, dann mache ich das ja auch nicht. :gruebel:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Schau mal unabhängig vom Programmieren. Welchen dieser beiden Sätze wirst du dann sagen:
  • Wenn "das Wetter ist schön" wahr ist, dann werde ich heute Fußball spielen gehen.
  • Wenn das Wetter schön ist, dann werde ich heute Fußball spielen gehen.
Na? Wirst du wirklich den ersten Satz nehmen? ;-)
Eben, genau das ist aber das, was du in Delphi geschrieben hast...
Nichtdestotrotz sind Fehler ja am Anfang normal, ich habe dafür andere gemacht. :mrgreen:


ich hab den fehler auch gemacht und ich glaube es kommt daher weil man alle anderen abfragen mit = macht.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Platinum Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 08.05.09 16:11 
hm..,ok ;) merk ich mir für die zukunft :] (aber das programm macht bereits was es soll, von daher bin ich schon glücklich :D)

In der funktion hab ichs aber richtig gemacht x]