[ Toni @ 04.12.2001. 00:15 ] @
Ako nekoga zanima moze da pogleda koliko je to ustvari posla. Ako neko ne znam hanojska kula je na tibetu i recheno je kada se ona slozi doci ce smak sveta. Postoje 3 stuba i na jednom ima 64 diska. Znachi manji na vecem nesme obrnuto. I sada trebaju svi ti diskovi sa jednosh stapa da se prebace na drugi ali nikada nesme da se stavi veci na manji disk. Evo moje resenje ;) Neko moze da compajlira u exe pa da pozove iz dosa hanoj.exe > hanoj.txt chini mi se da se tako sve upisuje u fajl davidite koliko tu poteza ima :) A da nekazem da oni to rade napamet i da greshe i da edan disk prebacuju otprilike jedan dan ;)

Code:

Program Hanojska_Kula;
  var
    brojdiskova,b:Longint;
    SA,NA,POM:Byte;
  Procedure PREBACI(N,SA,NA,POM:integer);
    Begin
      IF N>1
        THEN Begin
               b:=b+1;
               PREBACI(N-1,SA,POM,NA);
               Write('Û',SA,'->',NA);
               PREBACI(N-1,POM,NA,SA);
             END;
    END;
  Begin
    b:=0;
    Writeln;
    Write('Unesi broj diskova: ');Readln(brojdiskova);
    Write('Unesi na kojem su stubu diskovi [1-3]: ');Readln(SA);
    IF (SA>3) or (SA<1) THEN HALT;
    Write('Unesi na koji stub treba da se sloze diskovi [1-3]: ');Readln(NA);
    IF (SA=NA) or (NA>3) or (NA<1) THEN HALT;
    Write('Pomocu kogi stuba treba da se prebace diskovi [1-3]: ');Readln(POM);
    IF (SA=NA) or (SA=POM) or (NA=POM) or (POM>3) or (POM<1) THEN HALT;
    PREBACI(brojdiskova,SA,NA,POM);
    Writeln;
    Writeln('Diskovi su prebaceni u ',b,' poteza');
    readln;
  END.



program ispisuje samo potese tipa 1>2 to znachi sa prvog na drugi disk.
kada ce taj smak sveta :)
[ kajla @ 21.12.2001. 19:12 ] @
Ama nisi morao da se mučiš da pišeš program. Fromula za izračunavanje broja poteza je 2^n-1 gde je n broj diskova. Do ove formule se lako može doći, zapravo ako ti za n diskova treba x koraka (prebacivanja) onda ti za n+1 disk treba 2x+1 koraka, x koraka da prebacis n diskova na pomoćnu iglu, zatim 1 korak da prebaciš najveći disk na srednju iglu, i još x da prebaciš n diskova sa pomoćne igle na srednju. Indukcijom se može proveriti da se broj koraka određen formulom 2^n-1.

poz.
[ Toni @ 22.12.2001. 12:28 ] @
Citat:
kajla:
Ama nisi morao da se mučiš da pišeš program. Fromula za izračunavanje broja poteza je 2^n-1 gde je n broj diskova. Do ove formule se lako može doći, zapravo ako ti za n diskova treba x koraka (prebacivanja) onda ti za n+1 disk treba 2x+1 koraka, x koraka da prebacis n diskova na pomoćnu iglu, zatim 1 korak da prebaciš najveći disk na srednju iglu, i još x da prebaciš n diskova sa pomoćne igle na srednju. Indukcijom se može proveriti da se broj koraka određen formulom 2^n-1.

poz.


ovaj znam ja to sve :)
ali ovaj program neizrachunava broj koraka nego ispisuje SVE korake :)
[ kajla @ 24.12.2001. 16:39 ] @
Znam video sam negde slican program...

poz.
[ random @ 24.12.2001. 19:15 ] @
Možda u udžbeniku iz Struktura Podataka za III godinu ETF-a? ;o)
[ shaDy @ 24.12.2001. 22:11 ] @
video sam ja takav u zbirci za prog za III razred srednje.
Cabarkapa
[ kajla @ 25.12.2001. 14:04 ] @
Citat:
shaDy:
video sam ja takav u zbirci za prog za III razred srednje.
Cabarkapa

Da,da Milan Cabarkapa mislim da sam u njegovoj knjizi to video.

poz.
[ Toni @ 21.02.2002. 23:10 ] @
a pa chaby je meni bio razredi u Matematichkoj :)

ono kod njega sam pocheo hehe

mnogo gotivan tip ;)
[ Mario @ 22.02.2002. 01:21 ] @
program hanojska_kula;
var br_diskova:integer,
procedure hanoj(n,sa,na,pom:integer);
begin
if n>0 then
begin
hanoj(n-1,sa,pom,na);
write(sa,'->',na);
hanoj(n-1,pom,na,sa);
end;
end;
begin
writeln('unesi broj diskova');
readln(br_diskova);
hanoj(br_diskova,1,3,2);
end.