سلام دوستان گرامی
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
|