تبلیغات
دبیرستان استعداد های درخشان شهید بهشتی کاشان - برج هانوی (3)

برج هانوی (3)

یکشنبه 11 اردیبهشت 1390 09:06 ب.ظ   نویسنده : علیرضا خادم      


ادامه ی برج هانوی در ادامه ی مطلب

        • برنامه برج هانوی به زبان c:
      • #include <stdlib.h>

        #include <conio.h>

        #define COUNT 8

        enum Bar{L,C,R};

        struct disk{int Size,Color;}; 

        struct stack{int i; disk *Disks;};

        void transfer(int,Bar,Bar,Bar);

        void init(); // Init bars

        void MoveDisk(Bar from,Bar to);

        void DrawBars();

        stack Bars[3]={ {0,{0}} ,{0,{0}}, {0,{0}} };

        int main(void)

        {

         textmode(C4350);

         clrscr();

         init();

         DrawBars();

         transfer(COUNT,L,R,C);

         getch();

         return 0;

        }

        char ConvertBarEnum2Char(Bar E){

         char r=0;

         switch (E) {

         case L: r='L'; break;

         case C: r='C'; break;

         case R: r='R'; break;

         }

         return r;

        }

        void msg(Bar from,Bar to){

         gotoxy(25,4);

         textattr(15|16*0);

         cprintf("Press anykey to move from %c to %c",ConvertBarEnum2Char(from),ConvertBarEnum2Char(to));

         gotoxy(37,5);

         cprintf("Esc = Exit");

        }

        void transfer(int n,Bar from,Bar to,Bar temp){

        if(n>0){

         transfer(n-1,from,temp,to);

         msg( from, to);

         MoveDisk(from,to);

         transfer(n-1,temp,to,from);

         }

        }

        void init(){   

        Bars[L].Disks=new disk[COUNT];

        for(int i=0;i<COUNT;i++){

                Bars[L].Disks[i].Size=COUNT-i+1;

                Bars[L].Disks[COUNT-i-1].Color=i+1;

        }

        Bars[L].i=COUNT-1;

        Bars[R].Disks=new disk[COUNT];

        for(i=0;i<COUNT;i++){

                Bars[R].Disks[i].Size=0;

                Bars[R].Disks[i].Color=0;

        }

        Bars[R].i=-1;

        Bars[C].Disks=new disk[COUNT];

        for(i=0;i<COUNT;i++){

                Bars[C].Disks[i].Size=0;

                Bars[C].Disks[i].Color=0;

        }

        Bars[C].i=-1;

        }

        void MoveDisk(Bar from,Bar to){

        char kb=getch();   

        if(kb==27) exit(1);

        Bars[to].Disks[++(Bars[to].i)]= Bars[from].Disks[(Bars[from].i)--];

        clrscr();

        DrawBars();

        }

        void me(){   

        char c;

        for(int i=0;str[i];i++){

        c=i%14+1;

        if(c==1)c=2;

        textattr(c|16);

        cprintf("%c",str[i]);

        }

        }

        void DrawBars(){

        int n=0;

        for(int j=0;j<3;j++){

                for(int i=0;i<=Bars[j].i;i++){

                        gotoxy(1+j*27,24-i);

                        textattr(Bars[j].Disks[i].Color|16*0);

                        for(n=0;n<28 && n-13<Bars[j].Disks[i].Size ;n++){

                                if(n<14-Bars[j].Disks[i].Size)

                                        cprintf("%s"," ");

                                else

                                        cprintf("%s","ـ");

                        }

                }

                textattr(15|16*0);

                for(n=0;n<15;n++){

                        gotoxy(1+j*27+13,n+10);

                        cprintf("%s","؛");

                }

        }

        gotoxy(5,28);

        me();       

        }


آخرین ویرایش: - -
دیدگاه ها ()
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر

درباره وبلاگ


  • این وبلاگ متعلق به دانش آموزان دبیرستان شهید بهشتی سمپاد کاشان میباشد. هر مطلبی اعم از مطالب علمی روز و اخبار مدرسه را اینجا میتوانید پیدا کنید.
    تاریخ تولد وبلاگ: 4 بهمن 1389

نویسندگان

  • علیرضا خادم(59)