puszek Opublikowano 5 Maja 2005 Zgłoś Opublikowano 5 Maja 2005 Mam zadanko z pascala rozwiązac wieze hanoi rekurencyjnie i przedstawic sposób działania w trybie graficznym. Kod: program Wieze_Hanoi; uses graph; var karta,tryb,n,ilK,ypocz,gr,j:integer; t :array[1..3,1..12] of integer; tw:array[1..3] of integer; procedure przeloz_krazek(skad, dokad : integer); begin tw[dokad]:=tw[dokad]+1; t[dokad,tw[dokad]]:=t[skad,tw[skad]]; setFillStyle(1,black); setColor(black); bar(skad*200*110-100,ypocz-tw[skad]*gr,t[skad,tw[skad]]*j,gr); t[skad,tw[skad]]:=0; tw[skad]:=tw[skad]-1; setFillStyle(1,t[dokad,tw[dokad]]); bar(dokad*110-100,ypocz-tw[dokad]*gr,t[dokad,tw[dokad]]*j,gr); readLn; end; procedure przeloz(ile, skad, dokad, roboczy : integer); begin if ile=1 then przeloz_krazek(skad, dokad) else begin przeloz(ile-1, skad, roboczy, dokad); przeloz_krazek(skad, dokad); przeloz(ile-1, roboczy, dokad, skad) end; end; begin writeln('podaj ilosc krazkow'); readln(ilk); detectgraph(karta,tryb); initgraph(karta, tryb,''); writeln('Nacisnij dowolny klawisz'); gr:=30; j:=19-ilK; ypocz:=430; for n:=1 to ilK do t[1,n]:=ilK-n+1; tw[1]:=ilK; for n:=1 to tw[1] do begin setfillstyle(1,t[1,n]); bar((1*110-100)+10*n,ypocz-(n*gr),(1*180)-10*n,ypocz-(n*gr)-gr); end; readLn; przeloz(ilK,1,3,2); closeGraph; end. Mam tyle. Program rysuje prostokaty ale ma problem z rysowaniem ich po kazdym następnym ruchu nie wiem jak temu zaradzić i proszę o pomoc. Z góry dzieki Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
koparka Opublikowano 6 Maja 2005 Zgłoś Opublikowano 6 Maja 2005 jak to robisz ze wklejasz kod tutaj na forum? da sie go jakos skopiowac z kompilatora i wkleic tutaj? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
puszek Opublikowano 6 Maja 2005 Zgłoś Opublikowano 6 Maja 2005 (edytowane) jak to robisz ze wklejasz kod tutaj na forum? da sie go jakos skopiowac z kompilatora i wkleic tutaj? 1429297[/snapback] Poprostu otwieram paskalowski plik (nazwa.pas) w notatniku i kopiuje (ctrl+c ) i wklejam to tutaj do postu. :lol: Proste prawda. Edytowane 6 Maja 2005 przez puszek Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
koparka Opublikowano 6 Maja 2005 Zgłoś Opublikowano 6 Maja 2005 wlasnie nie dawno na to wpadlem :) ale dzieki :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
nightstalker Opublikowano 5 Marca 2006 Zgłoś Opublikowano 5 Marca 2006 (edytowane) Odkopuje temat :P Dostałem takie zadanko na laborkach. Znalazłem w sieci gotowy algorytm, ale go za bardzo nie rozumiem. Poza tym przedstawia on tylko kolejnosc wykonywanych ruchów, a ja chce zeby pokazywal stan stosu przed i po kazdym ruchu. Nie wiem czy powinienem robić to na tablicach, czy jakos inaczej... To co przed chwilą napisalem macie tutaj: program zadanie5;{$APPTYPE CONSOLE}uses SysUtils;type stos = array[1..100] of byte;var nA,nB,nC,i,n:integer; A,B,C:stos;function hanoi(nA,nB,nC,n:integer):integer;begin// chcialem tu zastosowac rekurencje, ale jeszcze nie wykombinowalem jakie jej zadac warunki...end;begin randomize; writeln('Podaj N:'); readln(n); for i:=1 to n do A[i]:=i; writeln(' A B C'); writeln('==============='); for i:=1 to n do writeln(A[i]:4,B[i]:4,C[i]:4); hanoi(1,0,0,n); readln;end. A to co znalazlem w sieci tutaj: program Z6;{$APPTYPE CONSOLE}uses SysUtils;var t:array [1..5] of char; i:byte;procedure Hanoi(A, B, C:char; n:byte);begin If n<>0 Then begin Hanoi(A, C, B, n-1); write(t[n],'=>'); t[n]:=C; writeln(t[n]); Hanoi(B, A, C, n-1) end;End;begin for i:=1 to 5 do t[i]:='A'; Hanoi('A','B','C',5); readln;end. Jakieś sugestie ? Teraz zabieram się za stos, bo nie znam tego typu, a wlasnie z nim mi sie problem wiezy hanoi kojarzy. Nie moge też zrozumieć czemu w programach jakie znajduje w sieci jest tylko jedna tablica i trzy zmienne, a nie 3 tablice, albo chociaz jedna 3-wymiarowa... UPDATE! No więc tak... Napisalem już działający program ale dalej go do końca nie rozumiem. Poprostu działa on wg. założen "zabawy" w Hanoi... Wyjasni mi to ktos wreszcie ? Moze chociaz odesle do odpowiedniej literatury ? program Project2;{$APPTYPE CONSOLE}uses SysUtils;var n,ilK,j:integer; t :array[1..3,1..12] of integer; tw:array[1..3] of integer;procedure rysuj(n:integer);var i:integer;begin writeln(' A B C'); writeln('==============='); for i:=n downto 1 do writeln(t[1,i]:4,t[2,i]:4,t[3,i]:4);end;procedure przeloz_krazek(skad, dokad : integer);var i:integer;begin tw[dokad]:=tw[dokad]+1; t[dokad,tw[dokad]]:=t[skad,tw[skad]]; t[skad,tw[skad]]:=0; tw[skad]:=tw[skad]-1; rysuj(ilK); readLn;end;procedure przeloz(ile, skad, dokad, roboczy : integer);begin if ile=1 then przeloz_krazek(skad, dokad) else begin przeloz(ile-1, skad, roboczy, dokad); przeloz_krazek(skad, dokad); przeloz(ile-1, roboczy, dokad, skad) end;end;begin writeLn('Wciskaj enter i obserwuj co sie dzieje...'); ilK:=5; j:=19-ilK; j:=19-ilK; for n:=1 to ilK do t[1,n]:=ilK-n+1; tw[1]:=ilK; rysuj(ilK); przeloz(ilK,1,3,2);end. Edytowane 5 Marca 2006 przez nightstalker Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...