آموزش برنامه نویسی به زبان ++C

این وبلاگ جهت آموزش برنامه نویسی به زبان ++C برای دانش آموزان دبیرستان فرزانگان ایجاد شده است.

برای مطالعه بر روی ادامه مطلب کلیک کنید

 

۱۲ سوال موافقین ۰ مخالفین ۰ ۲۴ ارديبهشت ۹۱ ، ۱۳:۱۴
سارا نازاری

 نوع دیگری از حلقه که از آن در برنامه نویسی استفاده می­شود حلقه­ی شمارشی می­باشد. تفاوت این تکنیک با حلقه­ی شرطی در این است که در حلقه­ی شمارشی از ابتدا می­دانیم که این حلقه چند بار اجرا خواهد شد. در حالی که در مثال­های حلقه شرطی متوجه شدیم که در بسیاری از موارد تعداد دقیق اجرای حلقه­ی شرطی را نمی­دانیم. (مثلا به دست آوردن تعداد ارقام یک عدد)

 

فرمت کلی حلقه ی شرطی به صورت زیر می باشد:

for(مقدار اولیه شمارنده  ; شرط ادامه ; گام حلقه)
{
}

توجه کنید که شرط ادامه به شمارشی گفته می­شود که در صورت برقرار بودن آن، می­توان کارهای درون حلقه را انجام داد. روال این حلقه به این صورت است که در ابتدای دور اول حلقه مقدار متغیر شمارنده برابر با مقدار اولیه قرار می­گیرد. پس از آن شرط چک کی­شود و در صورت برقرار بودن شرط کنتل برنامه به داخل حلقه انتقال داده می­شود و کارهای درون حلقه برای بار اول اجرا خواهند شد. در انتها کنترل دوباره به ابتدای حلقه بازمی­گردد و گام حلقه افزایش می­یابد( یعنی مقدار متغیر شمارنده طبق مقدار گام حلقه افزایش یا کاهش می­یابد) پس از آن شرط دوباره بررسی می­شود و در صورت برقرار بودن شرط کنترل برنامه به درون حلقه انتقال خواهد یافت. این روال تا زمانی که شرط حلقه دیگر برقرار نباشد ادامه خواهد یافت.

 

برنامه­ی زیر ده ستاره را در خروجی نمایش می­دهد:


main()
{
    for(int i = 1 ; i <= 10 ; i++)
    {
       cout << "*";
    }
    getch();
}


برنامه­ی زیر از یک تا صد را در خروجی نمایش می­دهد:


main()
{
    for(int i = 1 ; i <= 10 ; i++)
    {
       cout << i;
    }
    getch();
}

با دقت به این دو برنامه متوجه می­شویم که متغیر شمارنده تعداد دفعات اجرای حلقه را کنترل می­کند و لازمه­ی یک حلقه­ی شمارشی می­باشد. اما در برنامه­ی دوم از متغیر شمارنده بهره برده­ایم و با نمایش مقدار آن در واقع اعداد یک تا ده را نمایش داده­ایم. در واقع شماره­ی دورهای حلقه را چاپ کرده­ایم.

در ادامه به حل چند تمرین از حلقه­ی شمارشی می­پردازیم.

 

مثال 1: برنامه ای بنویسید که ده بار در صفحه عبارن Hello World را نمایش دهد: 


main()
{
    int i;
    for( i = 1 ; i <= 10 ; i++)
    {
        cout << "Hello World! \t";
    }
    getch();
}
خروجی : 


مثال 2: برنامه ای بنویسید که در صفحه خروجی اعداد یک تا 100 را نمایش دهد: 


main()
{
    int i;
    for( i = 1 ; i <= 100 ; i++)
    {
        cout << i << "\t";
    }
    getch();
}



مثال 3: برنامه ای بنویسید که در گرافیک، 20 دایره ی متحدالمرکز را با افزایش شعاع رسم کند: 


main()
{
    int x = 300,y = 300, r = 50;
    initwindow(600, 600);
    
    for(int i = 1 ; i <= 20 ; i++)
    {
        setcolor(i % 16);
        circle(x, y, r);
        r = r + 10;
    }
    
    getch();
}



برنامه ی زیر را اجرا کنید و تفاوت کد و اجرای آن را با برنامه ی بالا بیان کنید: 


main()
{
    int x = 300,y = 300, r = 50;
    initwindow(600, 600);
    
    for(int i = 1 ; i <= 20 ; i++)
    {
        setcolor(i % 16);
        circle(x, y, r);
        delay(150);
        r = r + 10;
    }
    
    getch();
}


مثال 4: برنامه ای بنویسید که در محیط گرافیکی ده بیضی متحدالمرکز توپر را نمایش دهد: 


main()
{
    int x = 400,y = 300, r1 = 350, r2 = 250;
    initwindow(800, 600);
    
    for(int i = 1 ; i <= 20 ; i++)
    {
        setfillstyle(i % 11, i % 16);
        fillellipse(x, y, r1, r2);
        delay(150);
        r1 = r1 - 10;
        r2 = r2 - 10;
    }
    
    getch();
}



مثال 5: برنامه ای بنویسید که در گرافیک ده مستطیل توپر تو در تو را رسم کند: 


main()
{
    int x1 = 100,y1 = 100, x2 = 600, y2 = 500;
    initwindow(800, 600);
    
    for(int i = 1 ; i <= 20 ; i++)
    {
        setfillstyle(i % 11, i % 16);
        bar(x1, y1, x2, y2);
        delay(150);
        
        x2 = x2 - 10;
        y2 = y2 - 10;
        x1 = x1 + 10;
        y1 = y1 + 10;
    }
    
    getch();
}



مثال 6: برنامه ای بنویسید که در گرافیک شکل زیر را نمایش دهد: 



main()
{
    int x1 = 100,y1 = 100, x2 = 200, y2 = 150;
    initwindow(800, 600);
    
    for(int i = 1 ; i <= 20 ; i++)
    {
        setfillstyle(i % 11, i % 16);
        bar(x1, y1, x2, y2);
        delay(150);
        
        x2 = x2 + 10;
        y2 = y2 + 10;
        x1 = x1 + 10;
        y1 = y1 + 10;
    }
    
    getch();
}


مثال 7: برنامه ای بنویسید که در گرافیک شکل زیر را نمایش دهد:



main()
{
    int x = 100,y = 100, r = 50;
    initwindow(800, 600);
    
    for(int i = 1 ; i <= 20 ; i++)
    {
        setfillstyle(i % 11, i % 16);
        fillellipse(x, y, r, r);
        delay(150);
        
        x = x + 10;
        y = y + 10;
    }
    
    getch();
}


مثال 8: برنامه ای بنویسید که در گرافیک شکل زیر را نمایش دهد:



main()
{
    int x = 100,y = 100, r = 50;
    initwindow(800, 600);
    
    for(int i = 1 ; i <= 30 ; i++)
    {
        setcolor(i % 16);
        circle(x, y, r);
        delay(150);
        
        y = y + 10;
    }
    
    getch();
}


مثال 9: برنامه ای بنویسید که در گرافیک شکل زیر را نمایش دهد:


مثال 10: برنامه ای بنویسید که در گرافیک شکل زیر را نمایش دهد:


مثال 11: برنامه ی زیر اعداد یک تا n (که آن را از ورودی میگیرد) را در خروجی نمایش می دهند:


main()
{
    cout << "Please enter a number? \n";  
    int num;
    cin >> num;
    
    for(int i = 1 ; i <= num ; i++)
    {
        cout << i << "\t";
    }
   
    getch();
}

دقت کنید که در این برنامه دستور "n\"  همان کار endl را انجام میدهد.

 

خروجی: 


مثال 12: برنامه ی زیر یک عدد را از ورودی گرفته و مقسوم علیه های آن را نمایش میدهد:


main()
{
    cout << "Please enter a number? \n";  
    int num;
    cin >> num;
    
    for(int i = 1 ; i <= num ; i++)
    {
        if(num % i == 0)
        {
            cout << i << '\t';
        }
    }
    
    getch();
}


مثال 12: برنامه ی زیر یک عدد را از ورودی گرفته و کامل بودن یا نبودن عدد را اعلام کند( عدد کامل عددی است که مجموع همه ی مقسوم علیه های خودش برابر با دو برابر خودش بشود.) 

 

main()
{
    cout << "Please enter a number? \n";  
    int num, sum = 0;
    cin >> num;
    
    for(int i = 1 ; i <= num ; i++)
    {
        if(num % i == 0)
        {
            sum = sum + i;
        }
    }
    
    if(sum == 2 * num)
        cout << "adad kamel ast. ";
    else
        cout << "adad kamel nist. ";
    
    getch();
}

 

مثال 13: برنامه ی زیر یک عدد را از ورودی گرفته و اول بودن یا نبودن عدد را اعلام کند. 


main()
{
    cout << "Please enter a number? \n";  
    int num, sum = 0;
    cin >> num;
    
    for(int i = 1 ; i <= num ; i++)
    {
        if(num % i == 0)
        {
            sum = sum + 1;
        }
    }
    
    if(sum == 2)
        cout << "adad aval ast. ";
    else
        cout << "adad aval nist. ";
    
    getch();
}


مثال 14: برنامه ی زیر دو عدد را از ورودی گرفته و ب.م.م و ک.م.م آن ها را بدست آورده و نمایش دهد: 


main()
{
    cout << "Please enter two number? \n";
    int a, b, c, bmm, kmm;
    cin >> a >> b;

    for(int i = a ; i >= 1 ; i--)
    {
        if(a % i == 0 && b % i == 0)
        {
            bmm = i;
            i = 0;
        }
    }
    kmm = a * b / bmm;

    cout << " B.M.M = "<< bmm << " K.M.M = " << kmm;

    getch();
}


مثال 15: برنامه ای بنویسید که یک عدد n را از ورودی رفته و حاصل جمع n جمله ی اول سری زیر را نمایش دهد:

 

main()
{
    cout << "Please enter a number? \n";  
    float n, s = 0, p = 1;   
    cin >> n;
     
    for(int i = 1 ; i <= n ; i++)
    {
        
        p = p * i;
        s = s + i / p;
    }
    
    cout << "the sum is: " << s << "\n";
   
    getch();
}

   

مثال 16: برنامه ی زیر یک عدد n را از ورودی گرفته و حاصل n جمله ی اول سری زیر را نمایش میدهد:

   

main()
{
    cout << "Please enter a number? \n";  
    float n, s = 0, p = 1, i;   
    cin >> n;
     
    for(i = 1 ; i <= n ; i++)
    {
        s = s + i * i / (i + 1);
    }
    
    cout << "the sum is: " << s << "\n";
    
    getch();
}

 

مثال 17: برنامه ی زیر n را از ورودی گرفته ومجموع  n جمله ی اول سری زیر را نمایش میدهد:

 

main()
{
    cout << "Please enter a number? \n";  
    float n, s = 0, f = 1, i, a, m = 1;    
    cin >> n;
     
    for(i = 1 ; i <= n ; i++)
    {
        a = (m * m) / ((m + 1) * (m + 1));
        s = s + f * a;
        f = f * -1;
        m = m + 2;
    }
    
    cout << "the sum is: " << s << "\n";
   
    getch();
}

توجه کنید که متغیر i فقط حکم شمارنده دارد و از یک تا n میشمرد و کار دیگری با آن انجام نمیدهیم.

سوال: اگر به جای m از i استفاده میکردیم چه اتفاقی رخ میداد؟ ...

   

 

مثال 18: برنامه ی زیر حاصل رشته ی زیر را نمایش میدهد:

نکته: در این برنامه ورودی نداریم!

 

main()
{
    cout << "Please enter a number? \n";  
    float s = 0, f = 1, i;   
     
    for(i = 100 ; i > 0 ; i--)
    {
        s = s + f * (i - (i - 1) / i);
        f = f * -1;
    }
    
    cout << "the sum is: " << s << "\n";
   
    getch();
    
}


 در دست تعمیرات :)  

 

 

۲۲ سوال موافقین ۰ مخالفین ۰ ۲۳ ارديبهشت ۹۱ ، ۱۲:۰۹
سارا نازاری

در تاریخ 24 اردی بهشت به روز شد، مطالعه کنید.

 

۸ سوال موافقین ۰ مخالفین ۰ ۱۳ ارديبهشت ۹۱ ، ۱۹:۱۵
سارا نازاری

برای حرکت در محیط گرافیکی نیازمندیم که حرکت را مانند ساخت فیلم و انیمیشن به چند مرحله تبدیل کنیم... 

 

۱۸ سوال موافقین ۰ مخالفین ۰ ۱۲ ارديبهشت ۹۱ ، ۰۹:۳۸
سارا نازاری

 گاهی در برنامه نویسی نیاز داریم که یک یا چند کار را چندین بار تکرار کنیم. برای این که از نوشتن مجدد خطوط برنامه جلوگیری کنیم از تکنیکی به نام حلقه­های تکرار استفاده می­کنیم.


۱۳۰ سوال موافقین ۰ مخالفین ۰ ۳۱ فروردين ۹۱ ، ۲۳:۰۴
سارا نازاری

نمونه سوال از مبحث شرط و گرافیک می باشد. 

 

۴۷ سوال موافقین ۰ مخالفین ۰ ۱۶ فروردين ۹۱ ، ۱۹:۴۹
سارا نازاری

در این قسمت می توانید سوالات تکمیلی تکنیک شرط را به همراه جواب مشاهده فرمائید. 

 

۲۰ سوال موافقین ۰ مخالفین ۰ ۱۰ فروردين ۹۱ ، ۱۴:۲۷
سارا نازاری

 تا اینجا برنامه هایی که می‌نوشتیم خط به خط اجرا می‌شدند و هیچ خطی از برنامه وجود نداشت که اجرا نشده باشد.

اما گاهی می­خواهیم برنامه­هایی بنویسیم که در شرایط متفاوت نیازمند دستورات متفاوتی هستند.


۸ سوال موافقین ۰ مخالفین ۰ ۱۰ فروردين ۹۱ ، ۱۳:۲۷
سارا نازاری

در این بخش ادامه ی سوالهای ورودی و خروجی که همراه با گرافیک هستند را حل خواهیم کرد

 

۲۳ سوال موافقین ۰ مخالفین ۰ ۰۶ فروردين ۹۱ ، ۱۷:۰۶
سارا نازاری

محیط گرافیکی در زبان ++c با پنجره­ ی خروجی تفاوت دارد. یعنی می­­توان همزمان از هر دوی این پنجره­­ها استفاده کرد.

برای کار در محیط گرافیکی، ابتدا باید کتابخانه­ی مربوط به دستورات گرافیکی را به برنامه اضافه کنیم. یعنی باید در ابتدای برنامه بنویسیم:

#include <graphics.h>

بعد از این کار می­توانیم از دستورات گرافیکی در برنامه استفاده کنیم و دستورات گرافیکی برای برنامه شناخته شده خواهند بود. در ابتدای نوشتن دستورات گرافیکی باید یک پنجره گرافیکی باز کنیم و بعد از آن مجاز به استفاده از دستورات گرفیکی هستیم. برای باز کردن پنجره گرافیکی به صورت زیر عمل می­کنیم:

initwindow (600, 600);

دستور زیر برای شما پنجره گرافیکی به اندازه­ی 600 در 600 پیکسل باز می­کند.

محیط گرافیکی محیطی  است که با مختصات و x و y سر و کار دارد. نقطه­ی (0و0) این محیط در گوشه­ی بالا سمت چپ قرار دارد. در واقع به شکل زیر است که در آن هر چه به راست می­رویم مقدار x  از صفر بیشتر و بیشتر می­شود و هرچقدر از بالا به پائین میرویم مقدار y از صفر بیشتر و بیشتر می­شود.

پس در شکل بالا روابط زیر برقرار است:

x2>x1             ,           y2=y1

x4>x1             ,           y4>y2

x1=x3             ,           y3>y1

در شکل بالا دو خط به دلخواه رسم شده­اند.

خط 1 به 4 از نقطه­ی (50و50) به (450و450) و خط 3 به 2 از نقطه­ی (450و50) به (50و450) رسم شده­اند.

پس صورت کلی استفاده از دستورات به شکل زیر می­ باشد:

برای رسم دایره در محیط گرافیکی از دستور زیر استفاده میکنیم:

#include <graphics.h>
main()
{
    initwindow(500, 500);
    // dastoorate graphici inja neveshte shavand.
    getch();
}

 

در ادامه برخی از دستورات گرافیکی را با هم مرور می­کنیم.

دایره

 دستور زیر برای رسم دایره استفاده می­شود:

circle(x, y, r);

برای رسم دایره به سه عدد احتیاج داریم. دو عدد اول برای نشان دادن مختصات مرکز (x,y) استفاده می­شوند. و عدد سوم r برای نشان دادن طول شعاع استفاده می­شود.

 

مثلا برنامه زیر را ببینید:

main()
{
    initwindow(300, 200);
    circle(100, 100, 75);
    getch();
}

خروجی آن به شکل زیر می­باشد:


در این شکل پنجره­ی گرافیکی به اندازه­ی 300 در 200 پیکسل باز شده است. دایره در مرکز (100و100) به شعاع 75 پیکسل رسم شده است.

مستطیل

 برای رسم مستطیل تو خالی به دو نقطه­ی ابتدایی و انتهایی یک قطر از مستطیل احتیاج داریم و این یعنی چهار عدد:

rectangle(x1, y1, x2, y2);

مثلا برنامه زیر را ببینید:

main()
{
    initwindow(300, 200);
    rectangle(100, 100, 250, 150);
    getch();
}

خروجی آن به شکل زیر می­باشد:

در این شکل پنجره­ی گرافیکی به اندازه­ی 300 در 200 پیکسل باز شده است. مستطیل از نقطه­ی  (100و100) به نقطه­ی (150و250)  رسم شده است.

اگر بخواهید مربع رسم کنید باید از همین دستور استفاده کنید. برای رسم مربع تنها نکته­ای که باید به آن توجه داشته باشید این است که اختلاف x ها برابر با اختلاف  y ها بشود.

main()
{
    initwindow(300, 200);
    rectangle(100, 50, 175, 125);
    getch();
}

خروجی به شکل زیر می­شود:

 

خط

برای رسم یک خط  به مختصات دو نقطه­ی ابتدایی و انتهایی آن خط احتیاج داریم و این یعنی چهار عدد :

line(x1, y1, x2, y2);

مثلا برنامه زیر را ببینید:

main()
{
    initwindow(300, 200);
    line(100, 100, 250, 150);
    getch();
}

خروجی آن به شکل زیر می­باشد:

در این شکل پنجره­ی گرافیکی به اندازه­ی 300 در 200 پیکسل باز شده است. خط از نقطه­ی  (100و100) به نقطه­ی (150و250)  رسم شده است.

 

برای استفاده از رنگ برای تغییر رنگ هر یک از این شکل­ها از دستور زیر استفاده می­کنیم:

setcolor(عدد)

که در داخل پرانتز شماره­ی رنگ مورد نظر را که یکی از اعداد 0 تا 15 را شامل می­شود. هر یک از این اعدا نشان دهنده­ی یک رنگ می­باشند. صفر رنگ سیاه و 15 رنگ سفید می­باشند.

توجه داشته باشید که این قسمت درست مانند نقاشی روی کاغذ می­باشد که ابتدا مداد رنگی را به دست می­گیرید و بعد شکل دلخواه را رسم می­کنید. پس ابتدا از دستور تغییر رنگ استفاده می­کنیم و پس از آن شکل مورد نظر را رسم می­کنیم.

به برنامه­ی زیر دقت کنید:

main()
{
    initwindow(300, 200);
    setcolor(14);
    circle(100, 100, 50);
    setcolor(12);
    rectangle(100, 100, 250, 150);
    setcolor(13);
    line(100, 100, 250, 150);
    getch();
}

خروجی برنامه به صورت زیر می­باشد:


شما دیگر باید بتوانید مختصات­ها را درست قرار بدهید تا بتوانید شکل­هایی به صورت بالا بکشید. در شکل بالا دایره و مستطیل مماس هستند و خط رسم شده قطر مستطیل می­باشد.

تا الان همه­ی شکل­هایی که یاد گرفتید اشکال توخالی بودند. اکنون چند شکل توپر را نیز یاد خواهیم گرفت:

بیضی توپر

برای رسم بیضی توپر از دستور زیر استفاده می­کنیم:

 fillellipse(x, y, r1, r2);

که دو عدد اول مختصات مرکز بیضی و دو عدد بعدی شعاع بزرگ و کوچک بیضی را نشان می­دهند. r1 شعاع افقی و r2 شعاع عمودی می­باشند. پس برای رسم دایره توپر دستوری مجزا نداریم:

 

r1>r2              بیضی خوابیده

r1<r2              بیضی ایستاده

r1=r2              دایره توپر

         

به برنامه­ی زیر توجه کنید:

main()
{
    initwindow(450, 200);
    fillellipse(75, 80, 25, 75);
    fillellipse(200, 80, 75, 25);
    fillellipse(375, 80, 50, 50);
    getch();
}

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


مستطیل توپر

برای رسم مستطیل توپر به دو نقطه­ی ابتدایی و انتهایی یک قطر از مستطیل احتیاج داریم و این یعنی چهار عدد ( دقیقا مشابه دستور رسم مستطیل توخالی)

bar(x1, y1, x2, y2);

مثلا برنامه زیر را ببینید:

main()
{
    initwindow(300, 200);
    bar(100, 100, 250, 150);
    getch();
}

خروجی آن به شکل زیر می­باشد:


در این شکل پنجره­ی گرافیکی به اندازه­ی 300 در 200 پیکسل باز شده است. مستطیل از نقطه­ی  (100و100) به نقطه­ی (150و250)  رسم شده است.

اگر بخواهید مربع توپررسم کنید باید از همین دستور استفاده کنید. برای رسم مربع تنها نکته­ای که باید به آن توجه داشته باشید این است که اختلاف x ها برابر با اختلاف  y ها بشود( درست مانند مربع توخالی)

main()
{
    initwindow(300, 200);
    bar(100, 50, 175, 125);
    getch();
}

خروجی به شکل زیر می­شود:

 


برای رنگی کردن و همچنین انتخاب مدل توپری اشکال توپر از دستور زیر استفاده میشود:

	setfillstyle(p, c);

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

برای رسم یک کمان از از دستور زیر استفاده می­کنیم:

	arc(x1, y1, sa, ea, r);

که دو عدد اول برای مختصات دایره­ای که این کمان بخشی از آن بوده است استفاده می­شوند. دو عدد بعدی برای زاویه شروع و پایان ( از 0 تا 360 درجه) کمان استفاده می­شوند  عدد پنجم هم برای طول شعاع دایره که کمان بخشی از آن بوده است استفاده می­شود.

 

برای رسم مکعب مستطیل از دستور زیر استفاده می­کنیم:

	bar3d(a, b, c, d, e, f);

که این دستور به شش عدد احتیاج دارد. این اعداد به ترتیب مختصات سه نقطه ی چپ بالا،راست پایین و عمق بالا را نشان می­دهند.

برای رسم بیضی تو خالی از دستور زیر استفاده می­کنیم:

	ellipse(x, y, sa, ea, r1, r2);

که دو عدد اول مختصات مرکز بیضی ، دو عدد دوم زاویه شروع و پایان بیضی(می­توان بیضی را لزوما کامل نکشید) و دو عدد آخر شعاع­های بیضی مربوطه می­باشند.

برای استفاده از سایر دستورات به نکات دیگری نیازمندیم که در آینده بیان خواهند شد.

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

 

۳۴ سوال موافقین ۲ مخالفین ۰ ۰۹ اسفند ۹۰ ، ۱۶:۳۰
سارا نازاری