N> Funkcja Ackermanna oraz Sudana

0

Witam.
Mam do was <font size="4">wielka </span>prosbe.
Otoz w wolnym czasie czytam sobie artykuly z tego portalu poniewaz na studiach programujemy.
Brne powoli do przodu ale niestety moj cwiczeniowiec jest popaprany i na zaliczeniu mamy napisac programy na kartkach i jak on wpisze do kompilatora to maja dzialac. Jak nie to nie zalicza sie przedmiotu.

Jest jednak sposob aby go ominac, wystarczy napisac porzadniejszy program i oddac go razem z "dokumentacja".
Dostalem zadanie zrobic 2 funkcje matematyczne w jednym programie Delphi.
Funkcje Ackermanna [ uzywajac tablic matematycznych ] oraz
Funkcje Sudana [ http://pl.wikipedia.org/wiki/Funkcja_Sudana ]
Zamiast Funkcji Sudana moze byc inna tylko nie Fibonacciego
[ z zastosowanie rekurencji ]

Bardzo bylbym wdzieczny jakby ktos napisal mi ten program oraz w miare prosto wytlumaczyl o co chodzi, zebym mogl napisac dokumentacje. Sam chcialem napisac ten program ale troche wykraczaja ponad moje umiejetnosci.
PS.
Jak ktos zdecyduje sie pomoc prosze "nie szalec", zeby chodz troche przypominalo prace amatora :)

Pozdrawiam, sim

0

Ja jestem matmy noga, więc nie pomoge, ale jak nie chce się Tobie nic samodzielnie pokombinować to pisz w
dziale Offtopic - Praca, proponując tam cenę za wykonanie zadania za Ciebie. A w ogóle co to za wykładowca,
co każe pisać tylko na kartce. Zapomnisz gdzieś średnika to kompilator nie skompiluje, a on wtedy nie zaliczy?
EDIT: dla M maksymalnie równego trzy rekurencyjna funkcja jest pod poniższym adresem, nawet nie szukałeś.
http://rosettacode.org/wiki/Ackermann_Function#Pascal

0

Hmm.... zatrzymalem sie na tym i nie chce mi sie to kompilowac.

var
  Form1: TForm1;
code: integer;
NUM, a : cardinal;


implementation

{$R *.dfm}

function Ack(M, N: cardinal): cardinal;
begin
  if M = 0 then Ack := N+1
  else if N = 0 then Ack := Ack(M-1, 1)
  else Ack := Ack(M-1, Ack(M, N-1))

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  NUM := 1;
  if ParamCount=1 then
    val(ParamStr(1),NUM,Code);
  a := Ack(3, NUM);
ListBox1.Items.Add('Ack(3,',NUM,'): ',a)
end;

end.

poza tym srednio to rozumiem, czy moze ktos mi wytlumaczyc cokolwiek ?
Jezeli bedzie dzialac funkcja to z reszta sobie poradze ( mam taka nadzieje ).

Pozdrawiam.

0

Musisz myśleć [!!!] A nie na ślepo wklejać kod. Ta funkcja odczytuje ParamStr(1) czyli pierwszy parametr z
jakim zostanie uruchomiona aplikacja. Przerób sobie kod tak aby aplikacja działała pod konsolą albo jak już
chcesz mieć okienkową to wczytuj liczbę z pola edycyjnego. Przecież na tej stronie co podałem dla funkcji
Ackermana jest gotowy kod wystarczy skompilować pod konsolą. A co do funkcji Sudana to kombinowałem
co nieco, ale mi nie wyszło, zadałem pytanie na inym forum o przykład implementacji tej funkcji i cisza ;/

0

Mam teraz problem przy wypisaniu czegokolwiek do listboxa.
Przechodzi normalny tekst ale juz zmienna nie chce.

var
  Form1: TForm1;
   m, n, zmienna	: Integer;

dalej~~~~

   for n := 0 to 6 do
      for m := 0 to 3 do
      ackermann(m,n);
      zmienna:= zmienna+1;
ListBox1.Items.Add('blabla',' ',zmienna);

ListBox1.Items.Add('blabla'); to przejdzie
ale juz
ListBox1.Items.Add(zmienna);

I gdzie tu jest blad ?
Juz nie mowie o calym

ListBox1.Items.Add('A(', m, ',', n, ') = ', ackermann(m,n));

Wolalem programowanie w turbo pascalu ;/

0

Poczytaj najpierw podstawy, a nie bieżesz się za programowanie i nie myślisz w ogóle, to może i w ogóle ów
programowanie sobie daruj. Jakiego typu masz zmiennĄ? Przecież to jest liczba. Jak chcesz dodac liczbę tam
gdzie dodaje się tekst (lub zmienną string) to przecież musisz przekonwertować ją na tekst funkcją IntToStr
najpierw poczytaj IntToStr ech, ręce opadają, tak jest jak olewasz wykłady.

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