امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
کلمات کلیدی
آموزش c و سی پلاس sajjad3011

آموزش C و C++(سی پلاس پلاس) sajjad3011
#11
تابع kbhit()
برای بررسی فشردن یا ضربه زدن(hit یعنی ضربه) یک کلید keyboard(صفحه کلید) بکار می ره.
اگه کلیدی رو فشار دادیم مقدار true رو برگشت میده وگرنه false.
--
مثال :
پروژه ای برای چرخش یک مکعب بسازید ، به طوری که چرخش ادامه یابد تا اینکه کاربر کلیدی را فشار دهد.
(دوستان از قصد این مثال رو آوردم تا در حین فشردن کلید،کمی ذهن شما رو درگیر یک برنامه نویسی سه بعدی در محیط c کرده باشم،اگه مبتدی ها بازم خواستید مطالعه کنید مباحث تبدیل نقطه از مختصات سه بعدی به دو بعدی رو بگید تا درس بدم یا خودتون توی google جستجو کنید و مشکل داشتید سوال کنید.البته توی این مثال تبدیات سه بعدی به دو بعدی نداریمsmiley )
--
کد php:
#include <stdio.h>
#include <dos.h>
#include <graphics.h>
#include <conio.h>

#define    MAGFY    20

class Bline
    
{
    private:
        
int CEN_X,CEN_Y,radius,X,Y,i,j;
    public:
    
void line1(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);

    };

void Bline::line1(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)
{
    
CEN_X = (x1+x2)/+ (x3-x2)/2;
    
CEN_Y = (y1+y2)/+ (y3-y2)/2;
    
//radius = (x1+x2)/2;
    
for(;!kbhit();)
    {
    
delay(300);
    
cleardevice();
    
//1st box
    
line(x1,y1,x2,y2);
    
line(x1,y1-20,x2,y2-20);    //
    
line(x3,y3,x4,y4);
    
line(x3,y3-20,x4,y4-20);    //
    
line(x1,y1,x4,y4);
    
line(x1,y1-20,x4,y4-20);    //
    
line(x2,y2,x3,y3);
    
line(x2,y2-20,x3,y3-20);    //

    //2nd box
    
line(x1,y1,x1,y1-20);
    
line(x2,y2,x2,y2-20);
    
line(x3,y3,x3,y3-20);
    
line(x4,y4,x4,y4-20);

    
//some point which will be moving around 3Dbox
    //line(x2+40,y2-20,x2+40,y2-20);
    //rectangle(x2,y2,x4,y4);

    //1st Quadrant
    
if(x1>CEN_X && y1<CEN_Yx1--,y1--;
    if(
x1==CEN_X && y1<CEN_Yx1--,y1++;
    if(
x1<CEN_X && y1<CEN_Yx1--,y1++;
    if(
x1<CEN_X && y1==CEN_Yx1++,y1++;
    if(
x1<CEN_X && y1>CEN_Yx1++,y1++;
    if(
x1==CEN_X && y1>CEN_Yx1++,y1--;
    if(
x1>CEN_X && y1>CEN_Yx1++,y1--;
    if(
x1>CEN_X && y1==CEN_Yx1--,y1--;

    
//2nd Quadrant
    
if(x2>CEN_X && y2<CEN_Yx2--,y2--;
    if(
x2==CEN_X && y2<CEN_Yx2--,y2++;
    if(
x2<CEN_X && y2<CEN_Yx2--,y2++;
    if(
x2<CEN_X && y2==CEN_Yx2++,y2++;
    if(
x2<CEN_X && y2>CEN_Yx2++,y2++;
    if(
x2==CEN_X && y2>CEN_Yx2++,y2--;
    if(
x2>CEN_X && y2>CEN_Yx2++,y2--;
    if(
x2>CEN_X && y2==CEN_Yx2--,y2--;

    
//3rd Quadrant
    
if(x3>CEN_X && y3<CEN_Yx3--,y3--;
    if(
x3==CEN_X && y3<CEN_Yx3--,y3++;
    if(
x3<CEN_X && y3<CEN_Yx3--,y3++;
    if(
x3<CEN_X && y3==CEN_Yx3++,y3++;
    if(
x3<CEN_X && y3>CEN_Yx3++,y3++;
    if(
x3==CEN_X && y3>CEN_Yx3++,y3--;
    if(
x3>CEN_X && y3>CEN_Yx3++,y3--;
    if(
x3>CEN_X && y3==CEN_Yx3--,y3--;

    
//4th Quadrant
    
if(x4>CEN_X && y4<CEN_Yx4--,y4--;
    if(
x4==CEN_X && y4<CEN_Yx4--,y4++;
    if(
x4<CEN_X && y4<CEN_Yx4--,y4++;
    if(
x4<CEN_X && y4==CEN_Yx4++,y4++;
    if(
x4<CEN_X && y4>CEN_Yx4++,y4++;
    if(
x4==CEN_X && y4>CEN_Yx4++,y4--;
    if(
x4>CEN_X && y4>CEN_Yx4++,y4--;
    if(
x4>CEN_X && y4==CEN_Yx4--,y4--;
    }
}
int main()
{
    
int GD=DETECT,GM;

    
Bline line1;
    
initgraph(&GD,&GM,"c:\tc\bgi");    

//according to your own computer (TC\BIN) Directory


line1.line1(5*MAGFY,7*MAGFY,1*MAGFY,3*MAGFY,3*MAGFY,1*MAGFY,7*MAGFY,5*MAGFY);

    
getch();
    
restorecrtmode();
    
closegraph();
    return 
0;

یادتون نره توی کد ها من فرض کردم turboc در مسیر c: نصب شده :
چون تنظیمات گرفیک رو باید درست به تابع init graph بدیم تا کتابخونه های bgi رو درست بتونه از وی مسیر مربوط شناسایی و بارگذاری کنه:
initgraph(&GD,&GM,"c:\tc\bgi");
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#12
دانلود turbo cpp واسه ویندوز 7 _64 بیتی:
http://www.p30day.com/%D8%AF%D8%A7%D9%86...15216.html

نصب و اجراش کنید. در محیط turbo cpp برای دسترسی به سورس های sample از توام توابع می تونید shift+F1 بزنید تا وارد محیط index بشید و سپس برای دسترسی به برنامه ی نمونه با تابع دلخواه،اسم تابع رو به ترتیب حروف تایپ کنید تا خودکار اشاره گر به روی اون بره. مثلا برای اینکه سورس نمونه ای از تابع circle رو بیابید c و سپپ i و r و c و l و e رو به ترتیپ وارد کنید و سپس بعد از یافتن روی لینک مربوط کلیک کنید تا پنجره ی مثال باز بشه و کد مربوط رو کپی کنید و پنجره ی فعل رو با alt+F3 ببندید و سپس یک برنامه جدید رو new کنید و کد رو paste کنید.
مثال : کدی برای رسم دایره :
کد php:
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int main(void)
{
   
/* request auto detection */
   
int gdriver DETECTgmodeerrorcode;
   
int midxmidy;
   
int radius 100;

   
/* initialize graphics and local variables */
   
initgraph(&gdriver, &gmode"c:\\TurboC3\\BGI");

   
/* read result of initialization */
   
errorcode graphresult();
   if (
errorcode != grOk)  /* an error occurred */
   
{
      
printf("Graphics error: %s\n"grapherrormsg(errorcode));
      
printf("Press any key to halt:");
      
getch();
      exit(
1); /* terminate with an error code */
   
}

   
midx getmaxx() / 2;
   
midy getmaxy() / 2;
   
setcolor(getmaxcolor());

   
/* draw the circle */
   
circle(midxmidyradius);

   
/* clean up */
   
getch();
   
closegraph();
   return 
0;

دقت کنید بعد نصب turbo c ، مسیر C:\TurboC++\Disk\TurboC3 ایجاد میشه.
ولی توی برنامه خودمون دیگه این مسیر طولانی رو نباید بدیم. مسیر رو اینطوری میدیم : C:\\TurboC3
ضمنا علت اینکه دو تا بک اسلش (\\) میاریم اینه که کاراکتر \ داخل رشته ها جزو کاراکترهای کنترلی محسوب میشه و قابل چاپ نیست و برای چاپ کاراکترهای غیر مجاز باید علامت \ رو قبل از خود پ بیاریم تا چاپش کنیم.
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#13
چرخش دایره حول مستطیل با استفاده از فرمولهای مثلثاتی
درخواست کننده: arix
برای این کار از فرمول فیثاغوریس میشه استفاده کرد.
ولی من از فرمول مثلثات بهتون یاد می دم.
نکته: sin و cos توابعی هستند که زاویه رو بر حسب رادیان باید درافت کنند.
ما درجه رو بلدیم و میخوایم دایره رو 360 درجه یا یک دور کامل حول مستطیل بچرخونیم.
برای اینکار باید رابطه رادیان و زاویه رو بلد باشیم.
فرمول تبدیل زاویه به رادیان اینه :
رادیان مساوی هست با : (درجه ضربدر عدد پی ) و حاصل تقسیم بر 180
پس اگه زاویه تتا رو توی برنامه دادیم باید ضربدر 180 و سپس تقسیم بر 3.14 کنیم.
resim
ادامه می دیم.
--
این کد باعث ایجاد یک دایره میشه که حول یک مربع میچرخه.
کاری که می کنم اینه که ابتدا فرض میشه یک دایره رسم کردیم.
سپس دایره قبلی رو با باید پاک کنیم تا اثرش نمونه و یک دایره دیگه ایجاد کنیم که یک درجه حول مربع چرخیده.
--
به طور کلی ما هر بار که دایره جدید رو ایجاد می کنیم باید دایره ی قبلی رو مخفی پاک کنیم.
هر بار یکی به teta اضافه می کنیم و دایره جدید رو با رنگ سبز ایجاد می کنیم.
و چون رنگ پس زمینه سیاه هست. دایره ی قبلی رو با رنگ سیاه پاک می کنیم(به وسیله رسم یک دایره سیاه روی دایره سبز قبلی)

علت اینکه از توابع cleardevice و clearviewport استفاده نمی کنم اینه که ما نمی خوایم کل پس زمینه رو پاک کنیم و پردازش اضافه نمی خوام داشته باشه. پس سعی کردم بهترین برنامه و الگوریتم تمیز خودمو که تست هم کردم براتون بنویسم:

کد php:
#include <graphics.h>
#include <dos.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
//circle Rotate 
//Author : Sajjad3011
//compiler: Turbo C++ windows 7 64bit
int main(void)
{
   
/* request auto detection */
   
int gdriver DETECTgmodeerrorcode;
   
int midx,midy;
   
int radius1 10;
   
int radius2=100;
   
float x1,y1,x2,y2,deltaX,deltaY;

   
/* initialize graphics and local variables */
   
initgraph(&gdriver, &gmode"c:\\TurboC3\\BGI");

   
/* read result of initialization */
   
errorcode graphresult();
   if (
errorcode != grOk)  /* an error occurred */
   
{
      
printf("Graphics error: %s\n"grapherrormsg(errorcode));
      
printf("Press any key to halt:");
      
getch();
      exit(
1); /* terminate with an error code */
   
}

   
clearviewport();
   
midx getmaxx() / 2;
   
midy getmaxy() / 2;

   
x1=midx-10;
   
y1=midy-10;
   
x2=midx+10;
   
y2=midy+10;

   
rectangle(x1,y1,x2,y2);
   
setcolor(getmaxcolor());

   
int teta=0;
   while(!
kbhit())//while keayboard hit
   
{

    
//clear or hide old circle using black color
    
deltaX=radius2*cos((teta*3.14)/180);
    
deltaY=radius2*sin((teta*3.14)/180);
    
setcolor(BLACK);
    
circle(midx+deltaX,midy+deltaY,radius1);

    
//draw new circle
    
teta++;
    
deltaX=radius2*cos((teta*3.14)/180);
    
deltaY=radius2*sin((teta*3.14)/180);
    
setcolor(LIGHTGREEN);
    
circle(midx+deltaX,midy+deltaY,radius1);

    
delay(10);

    if(
teta>360)teta=0;
   }
   
/* draw the circle */


   /* clean up */
   
getch();
   
closegraph();
   return 
0;

خروجی: با اجرای برنامه،دایره شروع به چرخیدن حول مستطیل می کنه و همینطور می چرخه تا یک کلید رو بزنیم و تمام.smiley
resim
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#14
برنامه ای که دو عدد را با استفاده از تابع جمع کند.
مثال : برنامه ای بنویسید که ضرایب معادله ی دو مجهول را دریافت کند سپس جواب ها را به خروجی انتقال دهد.(فرض می کنیم دلتا همیشه مثبت است)
http://s5.picofile.com/file/8160983150/s...l.pdf.html
==
شرط if deta<0 واسه برری دلتا منفی رو نذاشتم خودتون بذارید.
-
اون جزوه قدیمی بود خواستم حذف کنم گفتم بذارم شاید یکی استفاده کرد.(خیلی مبتدی هست)wink
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  دانلود فیلم آموزشی سی پلاس پلاس pfrproject 0 170 2/4/1395، 03:34 صبح
آخرین ارسال: pfrproject
  آموزش برنامه نویسی با سی پلاس پلاس fairsalar 8 2,862 25/5/1391، 07:41 عصر
آخرین ارسال: masuodi



کاربرانِ درحال بازدید از این موضوع: 1 مهمان