Tablica jako wynik funkcji.

0

Witam, chcę zwrócić tablicę jako wynik funkcji, kod który napisałem uruchamia cmd i je za chwile zamyka pomimo readln; dodanego na końcu.

program tab_f;

{$APPTYPE CONSOLE}

uses
  SysUtils;

// procedury i funkcje tu:

type
TIntegerArray = array of Integer;

var
  i:  integer;
  tab: TIntegerArray;
function wypelnij_tab(tablica:TIntegerArray)  : TIntegerArray;
var
  i:integer;
begin
  for i:=0 to 10 do
  begin
  tablica[i]:=1;
  end;
  result:=tablica;
end;

begin
wypelnij_tab(tab);
for i:=1 to 10 do
  begin
    writeln(tab[i]);
  end;
writeln('');
readln;

end.
1

a gdzie SetLength?

1
szopenfx napisał(a):

a gdzie SetLength?
Poza tym tablice dynamiczne indeksowane są od 0 więc dlaczego pętle
for i:=1 to 10 do tak w ogóle to zdecydowanie lepiej zastosować pętle
for i:=Low(tab) to High(tab) do

0

jeżeli poprawię pętlę to pozostałe rzeczy są poprawnie? chcę zrozumieć zwracanie tablicy przez funkcję, na razie wiem, że podałem jako zmienną do funkcji tablicę i zwracam wynik typem tablicowym ale nie wiem dlaczego to nie chciało działać.h

0

@szopenfx już napisał musisz ustalić rozmiar tablicy funkcją SetLength (przed pierwszym odwołaniem się do niej). Poza tym w ten sposób funkcją wypelnij_tab nie możesz zwrócić tablicy, ponieważ nie ma ona ustalonego rozmiaru zrób może procedure wypelnij_tab(var tablica:TIntegerArray) ; no i na końcu działania programu (lub gdy przestaniesz już korzystać z tej tablicy) kosmetycznie zmień rozmiar tablicy na 0.

1

Trzeba zastosować się do porad poprzedników. A przede wszystkim zanim zacznie się zadawać jakieś pytania na forum, to przeczytać jakieś kursy albo choćby kompendium Delphi na stronie 4p. Bez znajomości elementarnych podstaw języka, daleko nie zajdziesz. A co do kodu, to jeżeli już się upierasz przy stosowaniu funkcji ( chociaż takie rzeczy jak tablica lepiej zwracać przykładową procedurą, tak jak podał @kAzek ). Ja bym to zakodował jak poniżej. A i jeżeli nie umiesz porządnie formatować kodu to skorzystaj z: http://olesio.eu/jcf - wystarczy wypakować i ustawić, a później używać. A i kod w delphi wstawiamy w tagi delphi. Poza tym moduł SysUtils przy tym kodzie, co podałeś - jest zbędny.

program tab_f;

{$APPTYPE CONSOLE}

type
  TIntegerArray = array of Integer;

function WypelnijTab : TIntegerArray;
var
  I : integer;
begin
  SetLength(Result, 10);
  for i := Low(Result) to High(Result) do
  begin
    Result[I] := 1;
  end;
end;

var
  I : integer;
  Tab : TIntegerArray;
begin
  Tab := WypelnijTab;
  for I := Low(Tab) to High(Tab) do
  begin
    Writeln(Tab[I]);
  end;
  Readln;
end.
0

czytam poradnik od Was, i w 2 rozdziale są funkcje, procedury i tablice. chciałem to jakoś połączyć, próbowałem różnych kombinacji, a tego akurat tam nie było. dziękuję za pomoc.

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