منوي اصلي
نوشته هاي پيشين
جستجو
پيوندها
لوگوي وبلاگ
تماس با من
آمار وبلاگ
افراد آنلاين: تعداد بازديدها :
RSS
طراح قالب
Powered By
BLOGFA.COM |
:: معرفی چند تابع کاربردی
با سلام , امروز می خواهم چند تابع جدید را به شما معرفی کنم :
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
|