Funkcje...

0

Dobralem siem ostatnio do takiego tricka, ze mozna sobie tworzyc procedury, ktore majom jako parametr zmiennom dowolnego typu. Ale ja kce zawsze wiecej... Nio wiec problem jest postawiony tak: napisac funkcje, ktora w zaleznosci od ustawienia zmiennej typu Boolean, np :

W = true, wiec A daje w wyniku zmiennom string.
W = False, wiec A daje w wyniku zmiennom Integer;

Licze ze ktos moze odpowie.Poprzednie posty pozostaly dlugo puuste. COKOLWIEK!!!!
--Delphi 4

Skysh The God, Your Slave

0

Skysh w dniu 26.3.2002 14:6 napisal:
Dobralem siem ostatnio do takiego tricka, ze mozna sobie tworzyc procedury, ktore majom jako parametr zmiennom dowolnego typu. Ale ja kce zawsze wiecej... Nio wiec problem jest postawiony tak: napisac funkcje, ktora w zaleznosci od ustawienia zmiennej typu Boolean, np :
&gt
&gtW = true, wiec A daje w wyniku zmiennom string.
&gtW = False, wiec A daje w wyniku zmiennom Integer;
&gt
&gtLicze ze ktos moze odpowie.Poprzednie posty pozostaly dlugo puuste. COKOLWIEK!!!!
&gt
&gt
&gt--
&gtDelphi 4
&gt
&gtSkysh The God, Your Slave

problem mozesz ominac inaczej, niech procedura daje w wyniku zarowno integera i stringa, a w zaleznosci od zniennej typu boolean bedziesz dalej wykorzystywal tylko jedna z nich, albo niech wynikiem procedury bedzie wskaznik do integera lub stringa w zaleznosci od tego jaki parametr dostala procedura--Delphi 5 (paskal is good too)

0

Tak, wiem...Tyle ze mi jest potrzebne dokladnie to...Moge zrobic cos podobnego chyba procedurom, uzywajonc vara i overload, ale mi chodi dokladnie o funkcje i dwa typy wynikow. Czy jest to mozliwe???--Delphi 4

Skysh The God, Your Slave

0

Skysh, obawiam sie ze zmienna Result moze miec tylko jeden typ.

Moglby to byc typ wariantowy, do ktorego funkcja wpisywalaby (w zaleznosci od wartosci W) integera lub stringa, ale zeby uzyc wyniku musialbys rozpoznac jego typ wariantowy i albo zrobic VarToStr albo zrzutowac na integer.--Pawel

Delphi6

0

Mozesh mi napisac sampla jka to zrobic?
--Delphi 4

Skysh The God, Your Slave

0

Funkcje A zrobilem zagniezdzona w procedurze ButtonClick, co oczywiscie nie jest konieczne. W zalezy od CheckBoxa.

PS. Nie znasz typu Variant?

procedure TForm1.Button1Click(Sender: TObject);

function A(inp : integer; W :Boolean) : Variant;

begin
if W then Result:=IntToStr(inp)
else Result:=inp;
end;

var
i:integer;
V:variant;

begin
i:=Random(20);
V:=A(i, CheckBox1.Checked);
if VarType(V)=varString then
Label1.Caption:='String '+VarToStr(V)
else
if VarType(V)=varInteger then
Label1.Caption:='Integer '+IntToStr(integer(V))
else
Label1.Caption:='Error';
end;

--Pawel

Delphi6

0

Oczywiscie linia z 'Error' nie jest potrzebna bo A nie da w wyniku niczego oprocz integer lub string.--Pawel

Delphi6

0

Thnx. Nie dokladnie o to mi chodilo, ale takich trickow nie znalem. Czlowiek uczy siem cale zycie...Thnx jeszcze raz...--Delphi 4

Skysh The God, Your Slave

0

Korekta (tez sie ucze...):

if VarType(V)=varString then
Label1.Caption:='String '+V
else
if VarType(V)=varInteger then
Label1.Caption:='Integer '+IntToStr(V);

  • tak wystarczy - taka jest uroda typu Variant. Ale ma tez on swoje ciemne strony... nalezy do nich kiepska wydajnosc.

Aha, jeszcze jedno: uzycie VarToStr(V) zamiast podstawienia V zabezpiecza przed bledem jesli watosc V jest Null.--Pawel

Delphi6

0

mozna sprobowac zrobic cos takiego:

stworzyc nowy typ rekordowy np. StrInt

type
StrInt = record
s: string;
i: integer;

wtedy mozna tak stworzyc procedure:

procedure nazwa( ... var wy: StrInt);

wtedy wydobycie wyniku obojetnie czy w postaci string czy integer nie bedzie juz chyba problemem :)

pozdrawiam
--Zuk

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