تبليغاتX
یافته های من در علم کامپیوتر
به نام خداوند جان و خرد که از این برتر اندیشه بر نگذرد
 

سلام به همه د.ستان عزیز.

امیدوارم سالی پـر از شادی و نشاط و موفقیت داشته باشید و هر روزتون بهتر از دیروز باشه.

منم تلاش می کنم وبلاگ بهتر از پارسال باشه ومطالب به روز تری توش بزارم.

راستی عیدی ما فراموش نشه اگرم دوست ندارید عیدی بدین همون نظرو بدین ما به جای عیدی از شما قبول می کنیم .

ساله خوبی داشته باشین....

 

 

|+| نوشته شده توسط گرد آفرید در چهارشنبه بیست و نهم اسفند 1386  |
  چگونه می توان زمان جاری سیستم را نشان داد

سلام دوستان گرامی

1. چگونه می توان زمان جاری سیستم را نشان داد :

این کد زمان جاری سیستم را در خروجی چاپ می کند

 /*########################################
  #  WWW  : cpp.blogfa.com               #
  #  mail : mail:
cpp.blogfa@gmail.com  
#
  ########################################*/
 
#include
#include
#include

int
main()
  {
    clrscr();

    struct tm * Current_Time ;
    time_t lt;
    lt = time (NULL);
    Current_Time = localtime(<);

    textcolor(13);
    cprintf(asctime(Current_Time));
    getch();
    return 0;
}

 

2. چگونه می توان از وقف ها در زبان C++ استفاده کرد ؟

خوب بد نیست اینجا کمی هم درباره وقفه ها صحبت کنیم . وقفه ها سیگنال هایی هستند که از برنامه های در حال اجرا و یا دستگاه های جانبی کامپیوتر (چاپگر و مونیتور و موس و . . .) در خواست می شود , وقتی وقفه ای اتفاق می افتد اجرای برنامه به تعویق افتاده محتویات ثباتهای CS و IP در پشته نگهداری شده و کنترل روال پاسخگو یی به این وقفه منتقل می شود . پس از پاسخگو یی به وقفه مورد نظر محتویات CS و IP از پشته ها بازیابی می شود. تعداد 256 وقفه وجود دارد که هر یک دارای زیر برنامه و توابع مخصوص به خود می باشند که می تواند اعمال مختلفی را انجام دهند . لیست وقفه ها را می توانید در مراجع اصلی زبان اسمبلی و با جستجو در اینترنت پیدا کنید .

خوب در زبان C/C++ برای اجرای وقفه ها ابتدا ثباتهای مورد نیاز مقدار دهی شده و بع با استفاده از تابع زیر اجرا می شود

int ( int intnum , union REGS *in , union REGS *out )

union : یونیونها یک قالب داده می باشد که می تواند انواع مختلفی از داده ها را در خود نگهداری کند و فقط یک نوع داده را می تواند در یک زمان نگهداری کند و این همان تفاوت union با struct ها می باشد , struct ها می تواند در یک زمان چند نوع داده مختلف را نگهداری کند (int , long , double , char)

خوب برای تفهیم بهتر مثالی در زیر آورده شده که که با استفاده از وقفه صفحه نمایش را پاک کره و مکان نما را به مکان (0و0) انتال می دهد :

/*########################################

  #  WWW  : cpp.blogfa.com               #

  ########################################*/

 

#include

#include

#include

 

void clear_screen(void);//define function

void move_xy(int x,int y);//define function

 

int main()

   {

  

   int x,y;

   printf(" This is a test \n");

   getch();

   clear_screen();// Call Function

   move_xy(0,0);//call move_xy function

   getch();

   return 0;

   }

 

 /* Body of clear screen function */

 void clear_screen(void)

   {

     union REGS r ;

     r.h.ah = 6;

     r.h.al = 0;

     r.h.ch = 0;

     r.h.cl = 0;

     r.h.dh = 23;

     r.h.dl = 79;

     r.h.bh = 7;

     int86(0x10, &r, &r);

  }

 

 /* Body of move_xy function */

 void move_xy(int x,int y)

   {

    union REGS r;

    r.h.ah = 2;

    r.h.bh = 0;

    r.h.dh = x;

    r.h.dl = y;

    int86(0x10, &r, &r);

   }

 

 

3. چگونه یک Progress Bar را در محیط Text پیاده سازی کنیم ؟

 

        for (i = 0;i < 80;i ++)

        {

               gotoxy (wherex(),21);

               cprintf ("کاراکتر مورد نظر");

               delay (50);

        }

:: الگوریتم برج هانوی 

برج هانوی , معمایی است که از سه میله و N دیسک با اندازه های متفاوت . فرض شود که اگر دیسکی روی یک میله باشد , فقط دیسکی که قطر آن کوچکتر است می تواند بالای آن قرار گیرد مسئله چنین است که هر بار فقط یک دیسک انتقال یابد .

را حل : این مسئله با استفاده از یک الگوریتم باز گشتی حل می شود .

-اگر فقط یک دیسک باشد آنگاه آن را به میله مورد نظر انتقال می دهیم .

-اگر n > 1 باشد ; برای این کار n-1 دیسک بالای میله 1 را به میله 2 انتقال می دهیم . حالا دیسک پایینی میله 1 را ثابت باقی می ماند . حال دیسک باقیمانده در در میله 1 را به میله 3 منتقل میکنیم . سرانجام بار دیگر بصورت بازگشتی الگوریتم را فرا خانده تا n - 1 دیسک میله دو را به 3 منتقل کند .

اکنون موفق شدیم n دیسک را از میله 1 به 3 منقل کنیم .

این مسئله در درسهایی مانند ساختمان گسسته و ساختمان داده مورد بحث وبررسی قرار می گیرد .

 

 

/*

  Algorithmic solution is as follows

 

  1)  if TopN==1, move the single disc from A to C and stop.

  2)  Move the top n-1 discs from A to B, using C as Inter.

  3)  Move the remaining disc from A to C.

  4)  Move the n-1 discs from B to C, using A as destination(dest).

*/

 

 #include

 #include

 void tower(int,char,char,char); /*prototype*/

 int main()

   {

   int ndisk;

   clrscr();

   printf("\n Enter number of disks <<<::: ");

   scanf("%d",&ndisk);

   tower(ndisk,'A','B','C');  /*Calling Function*/

   getch();

   return 0;

 

   } /* End of program */

 

   /********************************************/

 

   // src = Source | aux = Auxiliry | dest = Destination

   void tower(int topN, char src,char aux,char dest)

     {

     if(topN == 1)

       {

       printf("\n Disk 1 from %c to %c ",src,dest);

       }

     else

       {

        tower(topN-1,src,dest,aux); //src to aux

        printf("\n Disk %d from %c to %c ",topN,src,dest);

        tower(topN-1,aux,src,dest); //aux to dest

        }

     }

 

 

 

 

 



#
include <iostream>
#
include <cstdlib>
#
include <conio.h>
#
include <cmath>

typedef char* Peg;
void move(Peg A, Peg B);
void transfer(size_t N, Peg A, Peg B, Peg C);
void get_disk_num(int &iNum);


int main()
{
while(1)
{
std::cout << "\t\t\tHanoi Towers Puzzle Solver" << std::endl << std::endl;
std::cout << "Enter number of disc on the first peg (enter -1 to quit): ";
int iDiskNum, iStepNum;
get_disk_num(iDiskNum);
if(iDiskNum == -1)
{
std::cout << "hope you enjoyed using these program!" << std::endl;
break;
}
else
{
iStepNum = pow(2, iDiskNum) - 1;
std::cout << "the shortest solution can be reach in " << iStepNum << " steps" << std::endl;
std::cout << "press any key to show the solution...";
getch();
std::cout << std::endl;
transfer(iDiskNum, "Peg1", "Peg2", "Peg3");
system("pause");
system("cls");
}
}
return 0;
}

//
tedade jabejayi diskha
void move(Peg A, Peg B)
{
std::cout << "move top most disc from " << A << " to " << B << std::endl;
}

//
chegonegiye harekate diskhara namayesh midahad
void transfer(size_t N, Peg A, Peg B, Peg C)
{
if(N > 0)
{
//
enteghale avalin N - 1 disk be "B"
transfer(N - 1, A, C, B);

//
enteghale akharin disk be "C"
move(A, C);

//
enteghale dickhaye "B" be"C",
transfer(N - 1, B, A, C);
}
}

void get_disk_num(int &iNum)
{
std::cin >> iNum;
if(iNum != -1 && iNum < 1)
{
std::cout << "please notice that the number of disc needs to be an integer bigger than 0" << std::endl;
std::cout << "number of disc on the first peg: ";
get_disk_num(iNum);
}
}

 

|+| نوشته شده توسط گرد آفرید در چهارشنبه پانزدهم اسفند 1386  |
 
 
بالا