تبليغاتX
C++ برنامه نویسی کاربردی به زبان
C++ Learning
:: معرفی چند تابع کاربردی 

با سلام , امروز می خواهم چند تابع جدید را به شما معرفی کنم :

1. clreol : این تابع تمام کاراکترها که بعد از مکان نما قرار دارد را تا آخر آن خط پاک میکند بدون آنکه موقعیت مکان نما تغییر کند . علت اینکه من از تابع cptintf در مثال زیر استفاده کردم این است که توابع clreol - clrscr و getch هر سه در کتابخانه Conio.H هستند و تابع cprintf هم در این کتابخانه است و دیگر از printf استفاده نکردم همچنین یکی دیگر از مزیت های cprintf این است که برای چاپ text های رنگی در خروجی از این تابع استفاده می شود , در حالیکه printf چنین امکانی را در اختیارمان قرار نمی دهد . در زیر مثالی ارائه شده تا مفهوم تابع clreol را بهتر متوجه شوید :

#include <stdlib.h>

int main(void)

{
   clrscr();
   textcolor(10);
   cprintf("The function CLREOL clears all characters from the\r\n");
   cprintf("cursor position to the end of the line within the\r\n");
   cprintf("current text window, without moving the cursor.\r\n");
   cprintf("Press any key to continue . . .");
   gotoxy(14,4);
   getch();

   clreol();

   getch();
   return 0;
}


2 . delline : این تابع سبب می شود که خطی که مکان نما (Cursor) در آن قرار دارد حذف شود . برای تفهیم بیشتر به مثال زیر توجه کنید :

#include <stdlib.h>
int main(void)
{
   clrscr();
   textcolor(12);
   cprintf("The function DELLINE deletes the line containing the\r\n");
   cprintf("cursor and moves all lines below it one line up.\r\n");
   cprintf("DELLINE operates within the currently active text\r\n");
   cprintf("window.  Press any key to continue . . .");
   gotoxy(1,2);
/* Move the cursor to the second line and first column */
  
getch();

   delline();

   getch();
   return 0;
}


3 . insline : با استفاده از این تابع می توان یک خط خالی در بالای مکانی که مکان نما قرار دارد ایجاد کرد . به مثال زیر توجه کنید :

#include <stdlib.h>
int main(void)
{
   clrscr();
   textcolor(12);
   cprintf("The function DELLINE deletes line containing the\r\n");
   cprintf("cursor and moves all lines below it one line up.\r\n");
   cprintf("DELLINE operates within the currently active text\r\n");
   cprintf("window.  Press any key to continue . . .");
   gotoxy(1,2);
/* Move the cursor to the second line and first column */
  
getch();

   delline();

   getch();
   return 0;
}

 (*) Header هر سه تابع بالا می باشد .


4 . textmode : این تابع نوع نمایش text در صفحه نمایش را کنترل می کند . مقادیر قابل پذیرش این تابع را در جدول زیر مشاهده می کنید .

ثابت
مقدار عددی
نوع حالت
LASTMODE
-1
Previous text mode
40 columns
BW40
0
Black and white
40 columns
C40
1
Color
80 columns
BW80
2
Black and white
80 columns
C80
3
Color
80 columns
MONO
7
Monochrome
43 columns
C4350
64
EGA and VGA
50 columns

:: چگونگی عملکرد این تابع را میتوانید در مثال زیر ببینید :

#include <stdlib.h>
int main(void)
   {
    clrscr();
    textmode(BW40);
    textcolor(12);
    cprintf("Textmode >>>> (BW40)");
    getch();


    textmode(BW80);
    textcolor(10);
    cprintf("Textmode >>>> (BW80)");
    getch();

    textmode(C40);
    textcolor(11);
    cprintf("Textmode >>>> (C40)");
    getch();

    textmode(MONO);
    textcolor(14);
    cprintf("Textmode >>>> (MONO)");
    getch();

    return 0;
   }


 :: معرفی چند تابع برای تبدیل انواع داده ها :

نام تابع
شرح وظیفه
Header مورد نیاز
atof
برای تبدیل یک رشته به عدد اعشاری
Atoi
تبدیل رشته به عددی از نوع Integer
Atol
تبدیل رشته به عددی از نوع Long
ecvt and fcvt
تبدیل عدد اعشاری به رشته
gcvt
تبدیل عدد اعشاری به رشته
strtod
تبدیل رشته به عدد اعشاری از نوع Double
strtol
تبدیل رشته به عددی از نوع Long
_strtold
تبدیل رشته به long double
strtoul
تبدیل رشته به unsigned long

 


|+| نوشته شده توسط پژمان رودخانه ای در دوشنبه بیستم تیر 1384 و ساعت 2:20  
:: طراحی برنامه های فارسی در ++C 

شاید برای خیلی از شما دوستان پیش آمده باشد که بخواهید در برنامه هایی که با زبانهایی مثل Q-Basic یا ++C / C و یا Pascal می نویسید پیام ها و یا منوها فارسی باشند خوب این کار , کار مشکلی نیست فقط کافیست مراحل زیر را به درستی انجام دهید . خوب ابتدا چند برنامه ی فارسی ساز DOS را به شما معرفی میکنم 1. Vegaf.com : که این برنامه فقط محیط داس را آماده نمایش برنامه هایی میکند که زبان فارسی نوشته شده اند  2. ُSepand : توسط این برنامه می توانید مستقیماً در محیط برنامه نویسی فارسی تایپ کنید (مثلا هر وقت می خواهید که فارسی بنویسید کافیست که کلید Scroll Lock از کیبرد را فعال کنید) 3. برنامه F.com : این برنامه هم تمام کارهای Sepand  را انجام می ده ( خوب جالب بدانید که نویسنده دو برنامه اخیر یعنی Sepand و F.com یک نفر است یعنی وحید علیمردانی ) خوب لینک دانلود این برنامه ها رو هم براتون گذاشتم برای در یافت اینجا کلیک کنید.

در ضمن در اینجا هم یه روشی رو بهتون مگم تا هر وقتی که ویندوز بالا میاد محیط داس فارسی باشه یعنی قابلیت نمایش متن های فارسی رو داشته باشه و به اصطلاح فونتها خرچنگ قورباغه نباشه برای این کار از منوی Start روی Run کلیک کنید و در کادر ورودی cmd را تایپ کرده و Ok کنید ( منظورم این است که وارد Dos Prompt شوید ) حالا فرمان های زیر را در خط فرمان بنویسید :

Drive:\ ......\ .....>cd\

drive:\>c:

c:\>edit c:\Autoexec.bat

در این حالت محیط ویرایش DOS ظاهر می شود خوب در آخرین خط رفته و در یک خط خالی مسیر ی را که فایل Vegaf.com در آن قرار دارد را در آن تایپ کنید( مانند زیر ) , بهتر است که آن فایل را در درایو C کپی کنید اکنون تغییرات اعمال شده را ذخیره کرده و خارج شوید .

c:\vegaf.com

خوب در اینجا یک بار سیستم را Restart کنید . بعد از بالا آمدن سیستم Dos فارسی شده است ( همانطور که میدانیم محتویات فایل Autoexec.bat در هر بار بالا آمدن سیستم اجرا می شود )

خوب حالا می رسیم که چطور تو محیط برنامه نویسی مورد نظر فارسی بنویسیم : باید قبل از اینکه وارد زبان برنامه نویسی مورد نظر شوید یکی از فارسی نویسهای Sepand و F.com را اجرا کنید و بدون اینکه از Dos خارج شوید پاسکال,سی و یا هر و یا هر زبان دیگر را اجرا کنید ( برای اینکه در Dos راحتر کار کنید از برنامه معروف NC استفاده کنید )

|+| نوشته شده توسط پژمان رودخانه ای در دوشنبه سیزدهم تیر 1384 و ساعت 2:26  
:: رسم چند شکل جالب در محیط گرافیکی 

با همین چند خط کد کوتاه اشکال زیبایی در محیط گرافیکی ایجاد می شود , تنها با تغییر برخی اندازه ها اشکال جدیدی خلق می شود . برای این دو برنامه کوتاه فکر نکنم نیازی به هیج توضیحی باشد چون در هر کتاب آموزش C/C++ درباره برنامه نویسی در محیط گرافیکی مطلب گفته شده (تنها نکته لازم به ذکر این است که مسیرگرافیکی کتابخانه مبدل گرافیکی c++ درست داده شود مثلاً مسیر گرافیکی C++ من "C:\\tc\\bgi" می باشد , حواستان باشد که باید از \\ استفاده کنید نه از \ . )

Program 1 :

/*
########################################
#  WWW  : cpp.blogfa.com               #
#         Released on July 2005        #
########################################
*/
//Essential Library
#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>


int main(void)
   {
    int gdriver = DETECT;
    int gmode,errorcode,a,b,s;
    float k,x,y,i,j;
    float pi = 3.14159;
    initgraph(&gdriver,&gmode,"c:\\tc\\bgi");
    errorcode = graphresult();
    if ( errorcode != grOk)
     {
     exit(1);
     }
    s = 0;
    setcolor(12);
    do {
        i = 38+100*cos(pi*s/190);
        j = 175+100*sin(pi*s/190);
        x = (int)i;
        y = (int)j;
        circle(x+s,y,(int)y/6);
        s=s+3;
       } while (s<550);
     getch();
     closegraph();
// Return into text mode
    
return 0;
   }
//End of program

Program 2 :

/*
########################################
#  WWW  : cpp.blogfa.com               #
#         Released on July 2005        #
########################################
*/
//Essential Library

#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>

int main(void)
   {
     int gdriver = DETECT;
     int gmode,errorcode,i;
     initgraph( &gdriver, &gmode,
"c:\\tc\\bgi");
     errorcode = graphresult();
     if (errorcode != grOk)
      {
      exit(
1);
      }

     setcolor(
10);
     i=
0;

     do{
         i=i+
1+(int)i/10;
         line(
120+i,i,520-i,i);
         line(
120+i,400-i,520-i,400-i);
         line(
520-i,400-i,520-i,i);
         line(
120+i,i,120+i,400-i);
       } while (i<
200);

     getch();
     closegraph();
//Return into text mode
    
return 0;//End of Programm
  
}

 

|+| نوشته شده توسط پژمان رودخانه ای در دوشنبه سیزدهم تیر 1384 و ساعت 1:44  
:: طراحی منوی گرافیکی 

این برنامه یک نوع منو را در محیط گرافیک C++ ارائه می کند که توسط آقای Vivek Patel نوشته شده . کد این برنامه بسیار روان است و در اغلب موارد همراه با توضیح می باشد :


/*########################################
  #  Programmer : Vivek Patel            #  
  #  Release at Site : cpp.blogfa.com    #
  #  mail : 
cpp.blogfa@gmail.com        #
  ########################################*/

#include <iostream.h>
#include <conio.h>
#include <dos.h>
#include <graphics.h>

//Menu Global Item
#define pixTOrc(x) (8*(x-1))  //convert pixel into row and col format
#define INC 5  //Increment Distance Between Menu Items
#define ROW 15 //Row Value for Menu Item
#define COL 8 //Column Value for Menu Item
#define MAXITEM 5 //Total menu items

// To display the Inventory Main menu options
typedef char option[15];
option mainMenu[]= {
  "NEW",
  "OPEN",
  "SAVE",
  "ABOUT ME",
  "CLOSE"
};


// Function to displays all the menu prompt messages from the pointer array of option a[]
void normalvideo(int x,int y,char *str)
{
    x=pixTOrc(x);
    y=pixTOrc(y);
    outtextxy(x,y,str);
}

// Function to move the cursor on the menu prompt with a reverse video color
void reversevideo(int x,int y,char *str)
{
x=pixTOrc(x);
y=pixTOrc(y);
setcolor(YELLOW);  //Selected Item
sound(400);
delay(100);
nosound();
outtextxy(x,y,str);
setcolor(WHITE); //Unselected Item
sound(500);
delay(100);
nosound();
}


//Keep Track of which arrow key is pressed
char menu()
{
settextstyle(TRIPLEX_FONT,HORIZ_DIR,3);
setcolor(WHITE);  //Initial Menu Item Color
int i,done;
for(i = 1; i < MAXITEM; i++)
  normalvideo(COL, (i*INC)+ROW, mainMenu[i]);

reversevideo(COL,ROW, mainMenu[0]);
i = done = 0;
do
{
/**Status Bar Logic**/
//Message will be displayed as status bar guide-line
setfillstyle(SOLID_FILL,BLUE);
settextstyle(SMALL_FONT,HORIZ_DIR,5);
bar(pixTOrc(2),pixTOrc(52.5),pixTOrc(75),pixTOrc(55));
setcolor(LIGHTCYAN);
switch(i){
case 0 : outtextxy(pixTOrc(5),pixTOrc(52.75),"New --> Create New file");
break;
case 1 : outtextxy(pixTOrc(5),pixTOrc(52.75),"Open --> Open Existing file");
break;
case 2 : outtextxy(pixTOrc(5),pixTOrc(52.75),"Save --> Save file");
break;
case 3 : outtextxy(pixTOrc(5),pixTOrc(52.75),"About Me --> Programmer : Vivek Patel");
break;
case 4 : outtextxy(pixTOrc(5),pixTOrc(52.75),"Close the Program --> BYE C U");
break;
}
/**status Bar ends**/

//Restore Orignal Color and Font Setting
setcolor(WHITE);
settextstyle(TRIPLEX_FONT,HORIZ_DIR,3);

ssss int key = getch();
switch (key)
{

case 00:
key = getch();
switch (key)
{
case 72:
normalvideo(COL, (i*INC)+ROW, mainMenu[i]);
i--;
if (i == -1)
i = MAXITEM-1;
reversevideo(COL,(i*INC)+ROW,mainMenu[i]);
break;
case 80:
normalvideo(COL, (i*INC)+ROW, mainMenu[i]);
i++;
if (i == MAXITEM)
i = 0;
reversevideo(COL, (i*INC)+ROW, mainMenu[i]);
break;
}
break;
case 13:
done = 1;
}
}
while (!done);
return(i+49);
}


//Advertise Screen will displayed to utilize empty screen area
//It can be utilize for some effective...work
void advertise(){
setcolor(BLUE);
outtextxy(pixTOrc(30),pixTOrc(20),"URL  : cpp.blogfa.com");
outtextxy(pixTOrc(30),pixTOrc(26),"Mail : cpp.myblog@gmail.com");
setcolor(YELLOW);
}


/* The function is used to display the main menu*/
//Actual code for all the menu utility resides in this
//Function...
void control_menu()
{
     char choice;
do
{
choice = menu();
switch (choice)
{
   case '1':    //New
setcolor(BLUE);
outtextxy(pixTOrc(40),pixTOrc(15),"New");
advertise();
getch();
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(pixTOrc(28),pixTOrc(14),pixTOrc(75),pixTOrc(50));
advertise();
break;

   case '2':    //Open
setcolor(BLUE);
outtextxy(pixTOrc(40),pixTOrc(15),"Open");
advertise();
getch();
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(pixTOrc(28),pixTOrc(14),pixTOrc(75),pixTOrc(50));
advertise();
break;

   case '3':    //Save
setcolor(BLUE);
outtextxy(pixTOrc(40),pixTOrc(15),"Save");
advertise();
getch();
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(pixTOrc(28),pixTOrc(14),pixTOrc(75),pixTOrc(50));
advertise();
break;

   case '4':    //Modify the status of item in inventory
setcolor(BLUE);
outtextxy(pixTOrc(40),pixTOrc(15),"About Me");
advertise();
getch();
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(pixTOrc(28),pixTOrc(14),pixTOrc(75),pixTOrc(50));
advertise();
break;

   case '5':    //Close the program
setcolor(BLUE);
outtextxy(pixTOrc(40),pixTOrc(15),"CLOSE");
advertise();
delay(1000);
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(pixTOrc(28),pixTOrc(14),pixTOrc(75),pixTOrc(50));
advertise();
goto out;
   }
  } while (choice != MAXITEM);
out:
}



void main()
{
int i,j;

int gd=DETECT,gm=0;
initgraph(&gd,&gm,"c:\\tc\\bgi\\");

///code as space holder\\\\\
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(0,0,640,480);

setcolor(DARKGRAY);
rectangle(0,0,639,480);
rectangle(1,1,638,479);
setcolor(BLACK);
rectangle(2,1,637,478);
rectangle(3,1,636,477);

settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
setcolor(BLUE);
outtextxy(pixTOrc(8),pixTOrc(2),"  MENU  -->>  (Simple Style) ");

setfillstyle(HATCH_FILL,DARKGRAY);
for(i=15,j=70;i<40||j>40;i++,j--){
bar(pixTOrc(8),pixTOrc(7),pixTOrc(i),pixTOrc(7.5));
delay(10);
bar(pixTOrc(j),pixTOrc(7),pixTOrc(70),pixTOrc(7.5));
delay(20);
}

bar(pixTOrc(7),pixTOrc(14),pixTOrc(25),pixTOrc(50));

///code as space holder\\\\\

//Calling Menu
control_menu();

closegraph();
}

|+| نوشته شده توسط پژمان رودخانه ای در یکشنبه دوازدهم تیر 1384 و ساعت 3:4  
:: الگوریتم های کاربردی 1 

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

در اینجا می خوام به دو سوال که برام Mail زده بودید جواب بدم :

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

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

 /*########################################
  #  WWW  : cpp.blogfa.com               #
  #  mail : mail:
cpp.blogfa@gmail.com   #
  ########################################*/
 
#include <stdio.h>
#include <conio.h>
#include <time.h>

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 <stdio.h>
#include <conio.h>
#include <dos.h>

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); }

|+| نوشته شده توسط پژمان رودخانه ای در شنبه یازدهم تیر 1384 و ساعت 12:42  
:: الگوریتم برج هانوی 

برج هانوی , معمایی است که از سه میله و 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 <stdio.h>
 #include <conio.h>
 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
	}
     }



|+| نوشته شده توسط پژمان رودخانه ای در شنبه یازدهم تیر 1384 و ساعت 1:47  
بالا