kostenloser Webspace werbefrei: lima-city


[Delphi] Was ist denn hier Falsch???

lima-cityForumProgrammiersprachenDelphi & Pascal

  1. Autor dieses Themas

    k**********k

    Hallo,
    Ich hab mal wieder ein Problem und zwar folgendes:

    Das sind ausschnitte meines @uelltextes:


    var

    primzahlen,ausgabearray: array of integer;
    arrayhigh,i: integer;



    function showprim: array;
    begin
    setlength(ausgabearray,high(primzahlen))
    for i := 0 to high(primzahlen) do begin
    ausgabearray:=primzahlen;
    end
    result:=ausgabearray;
    end


    So jetzt bekomme ich aber immer diese Fehlermeldung:

    [Error] dbase.dpr(47): Identifier expected but 'ARRAY' found

    Kann es sein das ich als Rückgabewert der Funktion kein Array angebn kann?

    mfg Ketchup
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t*****b

    1. Solltest du dir die Grundlagen von Delphi genauer aneignen. Du hast bisher ziemlich viele Fragen in diesem Forum gestellt, die sich (fast) alle selbst beantworten lassen, wenn man die Grundlagen von Delphi beherrscht. Das ist nichts gegen dich persönlich, sondern in deiner eigenen Interesse (ist doch auch besser, wenn du nicht bei jedem Miniproblem ein Forum fragen musst).

    2. Besser ist es, globale Variablen möglichst zu vermeiden und Variablen und Konstanten, die nur für eine Funktion oder Prozedur brauchst, solltest du auch in dieser deklarieren. Anstatt dass du deine Funktion auf einen globalen Array zugreift, solltest du den Array über Parameter an diese übermitteln. Ausnahme: der Array muss für was auch immer global deklariert sein, aber wenn möglich dann solltest du das vermeiden. Das gleiche gilt für arrayhigh und i.

    3. Du brauchst in der Funktion keinen Rückgabewert, wenn du sowieso mit globalen Arrays arbeitest.

    Ich weiß ja nicht was du mit dem Programm vor hast, vlt. folgendes?:

    var
      ...
      primzahlen, ausgabearray: array of integer;
    
    ...
    
    procedure showprim;
    var
      i: Integer;
    begin
      for i := 0 to length(primzahlen) do
      begin
        ausgabearray[i] := high(primzahlen[i]);
      end;
    end;
  4. Wichtig wäre auch das die Schleife nicht von 0 bis length(array) läuft sondern von 0 bis length(array)-1.

    Gruß Tobi
  5. Kann man Arrays überhaupt über Funktionen übergeben?
    Ich dachte immer das man das nicht kann.
    Zudem wie trueweb schon beschrieben hat:
    Variablen lokal deklarieren. Der Hintergrund dazu ist, dass du bei komplexeren Programmen eine Ellenlange Litanei an globalen Variablen hast, die 1. unnötig Speicher belegen und 2. wenn man mal die Initialisierung vergisst solche Variablen ziemlichen Unsinn produzieren können.
  6. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.


    Kann man Arrays überhaupt über Funktionen übergeben?
    Ich dachte immer das man das nicht kann.


    Meinst du, ob man Arrays als Ergebnis einer Funktion zurückgeben kann? Ja das geht, wieso auch nicht? Du brauchst nur die Funktion entsprechen deklarieren, den dem "Ergebnis-Array" nur die richtige Länge und die reichtigen Werte zuweisen!

    z.B.:

    function GebeArrayZurueck : Array of Integer
    var
    i: Integer;
    begin
    SetLength(Result, 5);
    for i := 0 to 4 do
    Result := i;
    end;
  7. r*****r


    Wichtig wäre auch das die Schleife nicht von 0 bis length(array) läuft sondern von 0 bis length(array)-1.

    Gruß Tobi


    dafür gibts dann doch wohl High(array) ;)
  8. Hallo Ketchup,

    Du kannst eine Funktion mit einem Arraytyp deklarieren.
    Das Wort ARRAY ist aber kein Bezeichner für einen Arraytyp, das beleidigt den Compiler.

    Also deklarierst du zuerst einen Array Typ und verwendest ihn dann bei der Definition der Funktion.

    Burgis Vorschlag funktioniert nicht, er enthält 3 Fehler:
    Er versucht die Funktionsdeklaration ebenfalls mit ARRAY,
    er weist result 5 mal einen Wert zu, und nur der letzte würde zurückgegeben werden, wenn ..,
    er weist dem Result einer Arrayfunktion einen Integerwert zu.

    Der Vorschlag von trueweb ist ungünstig, da er mit globalen Variablen arbeitet, wo es sich sehr einfach vermeiden olässt.

    Der folgende Vorschlag funktioniert. Es wird gezeigt, wie eine Arrayfunktion deklariert wird. Und es ist zu sehen, wie du Arrays in eine Prozedur (bei Funktion ist es gleich) hinein kommen und wie sie aus einer Funktion heraus kommen.

    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;
    
    type
      tIntArr = array of integer;    // Hier wird ein Arraytyp deklariert
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Private-Deklarationen }
        function GebeArrayZurueck(): tintarr;
        procedure showarray(inarray:tintarr);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.DFM}
    
    function Tform1.GebeArrayZurueck(): tIntArr;
    var
    i: Integer;
    begin
    SetLength(Result, 5);
    for i := 0 to 4 do
    Result[i]:=i+1000;
    end;
    
    procedure Tform1.showarray(inarray:tIntArr);
    var i:integer;
    begin;
    for i := 0 to high(inarray) do
      memo1.lines.add(inttostr(i)+': '+inttostr(inarray[i]));
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var ix:tIntArr;
    begin
    ix:=gebearrayzurueck;
    showarray(ix);
    end;
    
    end.

  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!