Zachowanie wzoru, przetrzymanie.

0

Cześć!

Mój pierwszy post - więc witam wszystkich !! [browar] v [soczek]

A wracając do sedna sprawy. Piszę projekt i zastanawiam się czy ktoś z Was słyszał o sposobie przechowywania wzoru matematycznego ? Dokładniej mówiąc wyliczam sobie dynamicznie wzór interpolacyjny, ale nie mam pojęcia jak za powiedzmy zmienną x nie podstawiać nic, tym samym nie wykonywać wyliczonego już wzoru. Zwyczajnie chodzi tu o przetrzymanie formuły w celu późniejszego wykonania jej dla innych zmiennych.

</delphi>
0

Nie wiem, czy Cię dobrze rozumiem, ale string?

0

String to jasne jak to zrobić, pytanie jak zrobić to w taki sposób.

Mnie chodzi o to, żeby zachować to w postaci 'do wykonania'. Powiedzmy w jakiejś funkcji. Potem wywołuję:


 oblicz( 12 ); //przy czym parametrem funkcji/procedury jest to co chcę podstawić za niewiadomą.


0

Jeżeli Twoj wzór zwróci jakiś typ danych osbługiwany przez Delphi albo możesz ten typ sam zadeklarować, to
wystarczy funkcja. Na przykład - jak łatwo się domyślić, poniższa funkcja doda Tobie do Parametru liczbę 10.

function Dodaj10(Parametr : integer) : integer;
begin
  Result := Parametr + 10;
end;

Przykład użycia. Chociaż nie wiem czy o takie coś Ci dokładnie chodzi ;/ Typ parametru - też może być inny.

  Caption := IntToStr(Dodaj10(12));
0

olesio wszystko co napisałeś jest jasne. Tylko właśnie nie o to mi chodzi :), byłoby zbyt pięknie gdyby było to tak łatwe...

Ale wracając do tematu. Może napiszę tak na szybko jakiś kod który reprezentowałby to co chcę zrobić.


procedure wyliczWzor(var wzor:*); // typ zm. wzor to * - ponieważ nie do końca wiem co by to miało być.
 begin
  
  { operacje wyliczania wzoru }

  wzor:={wynik tych operacji, powiedzmy x*x + 3*x + 7 } 
   { w linijce wyżej chodzi o zapamiętanie wyliczonego wzoru w celu późniejszego jego użycia}

 end;

procedure obliczWartosci(var wzor:*; var tab:ARRAY[0..9] of byte); // przekazana tu tablica ma w sobie
                                                                   // argumenty dla których chciałbym 
                                                                   // wykonać obliczenia
 begin
  {
     jakaś pętla w której do WZORU który był zapamiętany w parametrze wzor, 
     podstawiam wartości z tablicy
  }
 end;

Mam nadzieję, że ten kawałek kodu rozwieje wszystkie wątpliwości co do tego do czego dążę.
Pozdrowienia.

edit:

Tak ogólnie nie używam Delphi, a TurboPascala

0

Próbujesz osiągnąć coś bardzo zaawansowanego w imperatywnym języku, jakim jest Pascal (czy tam Delphi, C++) który czegoś takiego nie wspiera (i nie ma takiej możliwości). Takie cuda to w językach funkcyjnych, np. Scheme czy Lisp.

Obejściem problemu może być przygotowanie struktury, jakby listy operacji do wykonania (byłaby to tablica/lista/drzewo jakichś rekordów, gdzie każdy rekord to jedno działanie, argument itp.). Potem wywołujesz funkcję, która przyjmuje tę tablicę działań i drugą tablicę parametrów, i w pętli wykonuje wszystkie działania zakodowane w tablicy. Potem zwraca wynik.
Jest to rozwiązanie prostsze, wadą jego jest powolność, jeśli wydajność obliczeń ma znaczenie.

Drugim sposobem byłoby zastosowanie techniki zwanej kompilacją JIT. Polega to na generowaniu w locie kodu wykonywalnego procesora, który będzie obliczał zadane wyrażenie. Metoda arcytrudna, działanie błyskawiczne.

0

Azarien
Dzięki za szybką odpowiedź. Teraz wiem czego szukać i w jakim kierunku się udawać. Wydaje mi się, że na początku wybiorę sposób z tą strukturą ( właśnie o czymś podobnym myślałem, łudziłem się jedynie, że mogę to jakoś prościej zrobić :) )

Dzięki za pomoc.

0

bujda na resorach.. w delphi można zrobić wszystko.. koledze chyba chodziło o to że język nie pozwala wykonać działania w PROSTY sposób NIE MĘCZĄC się niczym.. no bo pewnie.. lepiej skorzystać z gotowego zamiast ruszyć głową.. z kolei zaproponowane metody to nic innego jak "armata na muchę"..

a o notacji polskiej odwrotnej to nie słyszeli? tzw.. ONP... Odwrotna Notacja Polska..
google-> szukaj

0

Twoja odwrotna notacja zawiera się w punkcie pierwszym przeze mnie opisanym.

0

no to jakoś ten Twój "punkt pierwszy" średnio naprowadza na właściwą drogę.. a robi niezły zamęt.. czyli albo jest "takim bardzo zaawansowanym cudem" albo potrzeba zrobić kosmiczną strukturę żeby to wykonać podczas gdy wystarczą dwa stringi i double..

tak czy inaczej szukaj ONP a nie JIT, LISP, SCHEME ani żadnej innej "metody arcytrudnej"..

0

Myślę, że nikt nie odebrał tego w taki sposób, że nie da się tego w Delphi. <B> Azarien</b> pisał o 'obejściu' braku wbudowanej obsługi czegoś takiego. => napisania sobie własnej struktury.

Podał mi pomysł do rozwiązania problemu.

Rozumiem też, że za każdym razem lubisz robić wszystko od początku. Chwała Ci za to. Nie każdy lubi wymyślać od nowa teorie, po to między innymi są fora żeby wymieniać się pomysłami i spostrzeżeniami. Oczywiście nie wszystkie są 'pierwszej klasy' ale to zawsze pomysły i po to mamy gremium użytkowników którzy je ze sobą wymieniają.

Natomiast z tonu twojej wypowiedzi można sądzić, że nie poprawiasz poprzednich pomysłów tylko je wyśmiewasz. Wystarczyłoby napisać, że jest to błędne myślenie i podać rozwiązanie, które twoim zdaniem jest lepsze, bo nie prosiłem o gotowca a o jakieś wskazówki. Dlatego zaraz po przeczytaniu twojego postu poszukałbym w Googlach.

Pozdrowienia.

P.S.

Skromna uwaga. Powinieneś zażyć coś na uspokojenie albo popływać. Odstresujesz się.

0

Nie czytałem całego wątku, więc nie krzyczcie, jeżeli odpowiedź już była.

A gdyby tak użyć typu Variant do przekazywania danych do funkcji ? wtedy można zrobić proste sprawdzenie if VarIsNull then - nic nie rób. W przeciwnym przypadku robisz odpowiednie przekonwertowanie typu np. VarToInt

0

pfff.. a owszem wyśmiewam.. tak jak "inżynier" wyśmiałby pomysł sprowadzenia 5 dźwigów do podniesienia pól kilowej cegły..

co do reszty.. no comment

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