Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Array an Function übergeben


Platinum - Do 07.05.09 09:01
Titel: Array an Function übergeben
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 http://www.delphi-forum.de/viewtopic.php?t=69886&highlight=array+function+%FCbergeben gestolpert,das hat mich aber leider nicht weitergebracht :(


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 - Do 07.05.09 09:16

Vielleicht hilft es, den Type vor der Funktion, wo er verwendet wird, zu definieren.


Platinum - Do 07.05.09 11:03

Nein,leider auch nicht :(


Regan - 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:

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 - 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


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 - Do 07.05.09 23:09

Das ist aber ganz schön falsch:

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:

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 [http://www.delphi-forum.de/viewtopic.php?p=548760#548760] an. Und um dich mal etwas zu demoralisieren: Damit hast du einen typischen Anfängerfehler [http://www.delphi-treff.de/tutorials/objectpascal/programmierung-mit-boolean-werten/page/4/] gemacht :P :wink: .

P.S.: Nimms nicht so ernst, am Anfang haben wir das alle mal gemacht. :wink:


jaenicke - 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 - 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


Platinum - 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]