Free Pascal - zwracanie tablicy

0

Hej,
czy mógłby ktoś powiedzieć w jaki sposób zwrócić tablicę (najlepiej dynamiczną) z funkcji w Free Pascal? Szperałem w google i próbowałem wklepać w program to co tam radzą ale zawsze pojawia się jakiś problem. Dodam ,że funkcja musi znajdować się w module ale to raczej niewiele zmienia ;)

Z góry dzięki za pomoc. Ja już nie mam na to siły...

0

Zobacz ten temat:
http://free-pascal-general.1045716.n5.nabble.com/Dynamic-array-as-return-type-of-functions-td2814605.html

Ktoś zadał takie samo pytanie: "Dynamic array as return type of functions"

0

Tak czytałem to, ale problem już pojawia się w momencie gdy zapisuję np. Result[0]=1 . Wywala mi błąd przy Result. Dlatego chciałem aby mi ktoś napisał to od siebie ;)

0
Haggy napisał(a):

Tak czytałem to, ale problem już pojawia się w momencie gdy zapisuję np. Result[0]=1 . Wywala mi błąd przy Result.

Bo Tobie raczej chodzi o Result[0] := 1;

Dlatego chciałem aby mi ktoś napisał to od siebie ;)

Po pierwsze ktoś już się na ten temat rozpisał i nie ma sensu się powtarzać. Po drugie nie podałeś ani kodu, ani błędu jaki uzyskujesz, więc od siebie mogę napisać, że dzisiaj jest przyjemnie ciepło :P

2

Żeby działało słowo Result, trzeba mieć {$MODE DELPHI} albo {$MODE OBJFPC}. W przeciwnym razie musisz użyć nazwy funkcji zamiast result:

FooBar[0]:=42;

gdzie funkcja nazywa się FooBar().

0

No ok to tak w skrócie ;)
Zadanie polega na napisaniu modułu dot. działań na wektorach. Kod :

type wektor = record
       wymiar : 1..10;
       wspolrzedna : array [1..10] of Integer;
end;

tyle 
      wynik = Array of Real;

function dodawanie (a,b : wektor) : wynik;     // a i b to wektory przesyłane do funkcji

implementation
function dodawanie(a,b : wektor) : wynik ;
var i : Integer;
begin
      SetLength(wynik (*1)(*2), a.wymiar+1);
      for i:=1 to a.wymiar do
      begin
             Result(*3)[i]:=a.wspolrzedna[i]+b.wspolrzedna[i];
      end;
end;

Owy kod się nie kompiluje, wywala jedynie :

(*1) Error : Variable identifier expected
(*2) Error : Variable identifier expected
(*3) Error : Identifier not found "Result"

(*1),(*2),(*3) są jedynie zaznaczonymi miejscami błędów, czegoś takiego w kodzie nie ma ;)

No ok, problem z Result zniknął po podstawieniu nazwy funkcji. Ale nadal pozostaje problem 1 i 2.

dodanie znaczników <code class="delphi"> dla kodu i <quote> dla błędu - fp

2
function dodawanie(const a,b:wektor):wynik;
var i:Integer;
begin
   SetLength(Result,Min(a.wymiar,b.wymiar)+1);
   for i:=0 to Length(Result)-1 do Result[i]:=a.wspolrzedna[i+1]+b.wspolrzedna[i+1];
end;

Dodaj na początku
{$mode objfpc} lub Result zamień na dodawanie, radzę jednak pierwszy sposób.

0

Ok dzięki wielkie :D
Zaskoczyło ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1