Pomozecie (^@^@^@)

0

Mam tak :

Type Typ = record
a,b,c : real;
end;
TypDyn = Typ;

function pierwsza(A : Typ):Typ;
function druga(A : Typ):TypDyn;
function trzecia(A : TypDyn):TypDyn;
function czwarta(A : TypDyn):Typ;

1.Czy istnieje mozliwosc wyciagniecia adresu funkcji jesli jest typu Typ ?
2.Czy da sie np przekazac funkcje pierwszą jako parametr do trzeciej lub czwartej ? 3.Wiem ze operator '@' wyciaga adres funkcji, czy np poprawny jest zapis @funkcja() ???
4.Ktora z powyzszych definicji jest nalepsza waszym zdaniem pod kątem pozniejszego wykorzystania (mam na mysli przekazywanie funkcji do funkcji) ???
Dodam ze w moim przykladzie tego nie widac ale do funkcji musze przekazywac b. duze parametry, takie, ze jak bym przekazal je w sposob jak w funkcji pierwszej lub drugiej to otrzymuje komunikat o przepelnieniu stosu (EStackOverFlow).
5.Czy operator </sup> jest mozliwy do wykorzystania przy funkcjach (funkcja() lub funkcja() a moze (funkcja())^) ?????

0

lepiej wez sie za C++, z tego co wiem tam o wiele latwiej byloby rozwiazac twoj problem :)

Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking

0

swietna rada : )

a i jeszcze chcialem zapytac bo mam zmienne takie

Type mat = array [1..255,1..255] of real;
dynmat = ^mat;

Var a,b,c,d : dynmat;

Zmiennym przydzielam pamiec procedurą New() i jak zwalniam potem przy FormDestroy to mi wyskakuje wyjątek EAccesViolation, ale tylko wtedy jak uzyje zmiennych w programie jak ich nie ruszam (czyli tylko uruchomie program utworze zmienne i zamkne program) to wyjatek nie wyskakuje. Wie ktos moze dlaczego tak jest ?Aha jak skasuje linijki zwalniające pamiec (Dispose) to wyjatek nie wyskakuje : ) Pamietam ze moj informatyk kiedy tukl ze wazna jest kolejnosc tworzenia zmiennych, tylko nie pamietam czy nalezy zwalniac w takiej kolejnosci jak sie je tworzylo czy w odwrotnej A moze mam uzyc czegos innego niz New() i Dispose(), moze GetMeme()i FreeMem() ????????????????

0

Problem prawdopodobnie tkwi w tym jak uzywsz tych wskaznikow.
Przykladowo:

New(A);
New(B);
A:=B;

przy takim odwolyawniu sie do zmiennych przy Dipose(A)
wyskoczy blad. Prawidlowo powinno byc

New(A);
New(B);
A:=B;

Nie ma znaczenia w jakiej kolejnosci usuwasz zmienne.
Spotkalem sie tez zaleceniem aby wskazniki usuwac w
taki sposob:

Dispose(A);
A:=nil;

koniecznie w tej kolejnosci.
Nie sprawdzalem tego wiec nie jestem pewien czy dziala.

--Pozdrawiam
Ojciec (Delphi 5 Enterprise)

0

o dzieki dzieki Ojciec, naprawde zajebiscie mi pomogles. Nie jestem jakims tam programistą moze dlatego nie wiedzialem o tym podstawianiu adresow (chociaz jak sie w sumie zatanowic to nawet tak jest logiczniej). Błędy ktore mi wyskakiwaly juz nie wyskakują. Jeszcze raz dziękuje.

Wiem ze to moze nachalne ale nie powiedzial bys mi jeszcze czy prawidlowo jest zatem podstawiac do zmiennej dynamicznej w taki sposób:

Type Typ = Integer; {przyklad}
DynTyp = Integer;

Var a : DynTyp;

function fun(x : real):DynTyp;

New(a);
a := fun(5);
Dispose(a);

czy lepiej sie tego ustrzegac i nie robic takich funkcji tylko np

function fun(x:real):typ;
a</sup> := fun(5);

Krążą mi po głowie domysły że ten drugi sposób jest bardziej poprawny no ale nie jestem pewien.

Z gory dziekuje za odpowiedz

0

Spoko, to nie jest nachalne, forum jest od tego zeby pytac.
Masz racje, ten drugi sposob jest poprawny. Znaczek ^ jest to tzw. operator rozwiazujący (czy jakos tak ), ktory powoduje zwrocenie wartosci danego typu. Jezeli chodzi o twoje pytanie na poczatku postu:
Zamiesc kompletny, przykladowy kod to postram ci sie pomoc (ale nic nie obiecuje). :-) --Pozdrawiam
Ojciec (Delphi 5 Enterprise)

0

wlasnie wkleilem ten kod ale zorientowalem sie ze mozna to rozwiązac tak jak pisales w pierwszym poscie. Po prostu nie podstawiac adresu funkcji do zmiennej dynamicznej tylko wstawic wartosc zwracaną przez funckje do zmiennej (w sensie pod adres przez nią wskazywany)

function xxx : TDynTyp

czyli nie tak

x := @xxx; (bo tak i tak nie dziala : ) )

tylko po prostu tak

x^ := xxx;

A jednak te zmienne nie są takie trudne jak je malują : )

dzieki raz jeszcze, zapraszam na {browar}

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