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

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

ادامه ی تمرینها تا حدودی پیچیده تر است. اما لازم است آنها را به صورت کامل یاد بگیرید! 


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

*********
 *******
   *****
    ***
      *
برای تحلیل این سوال باید توجه کنیم که 5 خط داریم و در خط صفرم، صفر فاصله و 9 ستاره، در خط یکم، یک فاصله و 7 ستاره، در خط دوم، دو فاصله و 5 ستاره، در خط سوم، سه فاصله و 3 ستاره و در خط چهارم ، چهار فاصله و یک ستاره داریم. 
پس واضح است که حلقه ی بیرونی که تعداد خطوط را نشان میدهد 5 بار تکرار میشود. اما حلقه های درونی( برای فاصله ها و ستاره ها) را چه جور تفسیر کنیم؟

حلقه ی درونی اول که برای رسم فاصله هاست، به تعداد i بار تکرار خواهد شد. ( کافی است به توضیحات بالا کمی توجه کنیم) 
حلقه ی درونی دوم که برای رسم ستاره هاست را می توان به صورت روبه رو با استفاده از یک متغیر کمکی نوشت. به این صورت که متغیر a اول 9 باشد و هر بار 2 تا از آن کم شده و در حلقه ی درونی دوم هر بار a تا ستاره رسم بشود. 
برنامه ی آن به صورت زیر خواهد بود: 
#include <conio.h>
#include <iostream.h>

int main()
{   int a=9;
    for(int i=0;i<5;i++)    //dar kol 5 khat darim
    {
        for(int j=0;j<i;j++)    //rasme fasele ha
        {
            cout<<' ';
        }
        
        for(int j=0;j<a;j++)    //rasme a ta setare
        {
            cout<<'*';
            
        }
        a=a-2;                  // az a 2 ta kam mikonim baraye khate badi
        cout<<endl;
    }
        getch();
        return 0;
}
۳۶ سوال موافقین ۲ مخالفین ۰ ۱۶ آذر ۹۱ ، ۱۸:۰۳
سارا نازاری

 فرض کنید می خواهیم برنامه ای بنویسیم که یک کاراکتر * را در خروجی نمایش دهد. برای این کار به صورت زیر عمل میکنیم:

main()
{
    cout<<"*";
    cout<<endl;
    getch();
}

خب در این برنامه دستور cout تنها یک بار اجرا می شوند. حال فرض کنیم بخواهیم برنامه­ی بالا را به این صورت تغییر دهیم که یک عدد n را از ورودی گرفته و به تعداد آن یعنی n بار کاراکتر * را در خروجی پشت سر هم در یک خط نمایش دهیم.

برنامه بالا به صورت زیر تغییر خواهد یافت:

main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
       cout<<"*";
    }
    cout<<endl;
    getch();
}

تنها تفاوت این برنامه با برنامه ی قبلی در این است که کل کارهای برنامه ی اول را در یک حلقه قرار دادیم که این حلقه به تعداد n اجرا خواهد شد. پس از نمایش n کاراکتر * در خروجی، به ابتدای خط بعدی ( با استفاده از دستور cout<<endl ) می رویم.

خب، حالا فرض کنید میخواهیم دو عدد n و m را از ورودی گرفته و این بار n ستاره را در یک خط نمایش داده و همان خط را m بار تکرار کنیم. یعنی می خواهیم m خط را که در هر خط n ستاره وجود دارد، رسم کنیم.

خب با توجه به برنامه ی قبلی به این نتیجه می رسیم که باید برنامه ی بالا( که کشیدن یک خط از n ستاره است) را m بار تکرار کنیم. تا m خط که هر خط متشکل از n ستاره است را رسم کنیم.

 

برنامه ی بالا به صورت زیر تغییر خواهد کرد:

 main()
{
    int n,m;
    cin>>n>>m;
    for(int j=1;j<=m;j++)
    {
        for(int i=1;i<=n;i++)
        {
           cout<<"*";
        }
        cout<<endl;
    }
    getch();
}

در واقع ما در این برنامه از حلقه ی تو در تو استفاده کرده ایم!

 

توجه کنید که همیشه حلقه ی تو در تو از دو حلقه ی for تشکیل نشده است و می توان به جای for از while  هم استفاده کرد!

 

main()
{
    int n,m,j=0;
    cin>>n>>m;
    while(j<m)
    {
        for(int i=1;i<=n;i++)
        {
           cout<<"*";
        }
        cout<<endl;
        j++;
    }
    getch();
}

در برنامه ی بالا حلقه ی بیرونی را از for به while تغییر داده ایم!

امیدوارم تا اینجای کار به این نتیجه رسیده باشید که در مواقع ضروری از حلقه ی تو در تو استفاده خواهیم کرد و برنامه ی بالا را می توان بدون حلقه ی تو در تو هم نوشت!

 

برای مثال چند نمونه از حلقه های تو در تو را با هم حل خواهیم کرد.

 

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


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

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


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


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

main()
{
    for(int i=1;i<=10;i++)
    {
        for(int j=1;j<=11-i;j++)
        {
            cout<<'*';
        }
        cout<<endl;
    }
    getch();
}


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






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

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

این برنامه را به صورت زیر هم میتوان نوشت( چرا؟)

main()
{
    for(int i=1;i<=10;i++)
    {
        for(int j=1;j<=i-1;j++)
        {
            cout<<' ';
        }
        for(int j=i;j<=11;j++)
        {
            cout<<'*';
        }
        cout<<endl;
    }
    getch();
}

 

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


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

main()
{
    for(int i=1;i<=10;i++)
    {
        for(int j=1;j<=10-i;j++)
        {
            cout<<' ';
        }
        for(int j=1;j<=i;j++)
        {
            cout<<'*';
        }
        cout<<endl;
    }
    getch();
}

برنامه ی بالا را می توان به صورت زیر هم نوشت. ( چرا؟)

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

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



توجه کنید که این سوال ترکیب دو سوال آخر پشت سر هم هست.

برنامه ی آن به صورت زیر نوشته می شود:

main()
{
    for(int i=1;i<=19;i++)   
    {
        if(i<=10)    //rasme 10 khate aval
        {
            for(int j=1;j<=10-i;j++)
            {
                cout<<' ';
            }
            for(int j=1;j<=i;j++)
            {
                cout<<'*';
            }
        }
        else    //rasme 9 khate ba'di
        {
            for(int j=1;j<=i-10;j++)
            {
                cout<<' ';
            }
            for(int j=1;j<=20-i;j++)
            {
                cout<<'*';
            }
        }
        cout<<endl;
    }
    getch();
}

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


جواب سوال به صورت زیر خواهد بود:

int main()
{
    for(int i=1;i<=19;i++)   
    {
        if(i<=10)        //rasme 10 khate aval
        {
            for(int j=1;j<=i;j++)
            {
                cout<<'*';
            }
        }
        else        //rasme 9 khate ba'di
        {
            for(int j=1;j<=20-i;j++)
            {
                cout<<'*';
            }
        }
        cout<<endl;
    }
    getch();
}

 


۳۸ سوال موافقین ۰ مخالفین ۰ ۱۶ آذر ۹۱ ، ۱۵:۵۹
سارا نازاری

مثال 5- برنامه ای بنویسید که  n را از ورودی بگیرد و آرایه ای به طول n بسازد و آن را از ورودی گرفته و آن را چاپ کند. سپس عناصر آرایه را چهار برابر کند و دوباره آن را چاپ کند: 


#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int n;
    cout<<"enter lenght of your array"<<endl;
    cin>>n;
    int arr[n];
    cout<<"enter items of your array"<<endl;
    for(int i=0;i<n;i++)
    {
        cin>>arr[i];
    }
    cout<<endl;
    for(int i=0;i<n;i++)
    {
        cout<<arr[i];
    }
    cout<<endl;
    for(int i=0;i<n;i++)
    {
        
        arr[i]=4*arr[i];
    }
    cout<<endl;
    for(int i=0;i<n;i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
۳۸ سوال موافقین ۰ مخالفین ۰ ۱۴ مهر ۹۱ ، ۱۰:۱۶
سارا نازاری

 فرض کنید بخواهیم نام و سایر مشخصات یک دانش آموز را در حافظه ی کامپیوتر و در متغیر مناسب ذخیره کنیم. برای این کار از یک یا چند متغیر برای ذخیره نواع مختلف عدد و نام( از نوع کاراکتر) استفاده می­کنیم.

حال اگر بخواهیم نام چند دانش آموز را به همراه شماره های دانش آموزی و ... در حافظه ذخیره کنیم چکار کنیم؟

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

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

در هر خانه ی آرایه فقط یک عدد یا یک کاراکتر می­توانیم ذخیره کنیم.

تعریف کلی آرایه به صورت زیر است:

int a[100];
float b[20];
char c[15];

در تعاریف بالا آرایه ی a از نوع عدد صحیح و به طول 100 خانه می باشد. آرایه های b و c هم به ترتیب از نوع اعداد ممیزی و کاراکتری و با تعداد 20 و 15 خانه می باشند.

چند نکته :

1- توجه کنید که در تعریف آرایه داخل علامت [] یا براکت ، تعداد خانه های آرایه و یا طول آرایه را باید قرار دهیم!

2- شماره ی خانه های آرایه از 0 شروع و تا n-1 ( که n طول آرایه می باشد) ادامه پیدا می­کند.

3- شماره ی آخرین خانه ی آرایه n-1 است نه n

4- برای اختصاص یک مقدار به یک خانه از آرایه به صورت زیر عمل میکنیم:

a[10]=14;
 b[3]=7.5;
 c[5]='$';  

5- می­توانیم آرایه را به صورت زیر مقدار دهی اولیه کنیم. فرض کنید می­خواهیم همه­ی خانه­های آرایه دارای مقدار صفر بشوند:

   int a[10]={0};

برای پر کردن همه ی خانه های آرایه دو راه داریم:

راه اول به صورت بالا می­باشد که باید همه­ی مقدیر را یکی یکی بدانیم و به ترتیب در آکولاد قرار دهیم:

int a[10]={1,2,3,0,0,5,4,3,4,2};

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

int main()
{
    int a[10];
    for(int i=0;i<10;i++)
    {
        cin>>a[i];
    }
    getch();
}

 

 

مثال1- برنامه ای بنویسید که 10 عدد را از ورودی گرفته و در آرایه ای به طول 10 ذخیره کند:

 

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    char ch[5];
    for(int i=0;i<=4;i++)
    {
        cin>>ch[i];
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}	

 فایل برنامه


برنامه ی بالا آرایه ی ch را از نوع کاراکتری و به طول 5 می سازد . در حلقه ی for یکی یکی از ورودی کاراکتر میگیرد و در خانه های آرایه میریزد. دقت کنید که حلقه ی for از شماره ی 0 شروع شده و تا شماره ی 4 ادامه پیدا میکند که در کل میشود 5 خانه. 

 

مثال 2- برنامه ی مثال یک را به گونه ای تکمیل کنید که آرایه را پس از دریافت نمایش هم بدهد:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    char ch[5];
    for(int i=0;i<=4;i++)
    {
        cin>>ch[i];
    }
    
    for(int i=0;i<=4;i++)
    {
        cout<<ch[i];
    }
    cout<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
} 

 فایل برنامه


مثال 3- برنامه ی مثال یک را به گونه ای تکمیل کنید که آرایه را پس از دریافت در یک آرایه ی دیگر کپی کند و آرایه ی دوم را نمایش دهد:

 

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    char ch[5],cpy[5];
    for(int i=0;i<=4;i++)
    {
        cin>>ch[i];
    }
    
    for(int i=0;i<=4;i++)
    {
        cpy[i]=ch[i];
    }
    
    for(int i=0;i<=4;i++)
    {
        cout<<cpy[i];
    }
    cout<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

 
مثال 4- برنامه ی مثال یک را به گونه ای تکمیل کنید که آرایه را پس از دریافت در یک آرایه ی دیگر به صورت وارونه کپی کند و آرایه ی دوم را نمایش دهد:


#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    char ch[5],cpy[5];
    for(int i=0;i<=4;i++)
    {
        cin>>ch[i];
    }
    
    for(int i=0;i<=4;i++)
    {
        cpy[4-i]=ch[i];
    }
    
    for(int i=0;i<=4;i++)
    {
        cout<<cpy[i];
    }
    cout<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
  فایل برنامه

 برای تمرین بیشتر به بخش بعدی مراجعه کنید ... 


۲ سوال موافقین ۰ مخالفین ۰ ۱۴ مهر ۹۱ ، ۰۸:۴۸
سارا نازاری

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

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

برای دریافت به ادامه مطلب بروید

 

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

سلام.

خسته نباشید از این همه امتحانی که تا امروز دادید! هرکس دیگه ای جای شما بود از شدت گرمای اون سالن تا اینجای کار کم میآورد، اما شما فرزانه اید و مثل همیشه اصلا کم نیاوردید!!

 

خب، برای امتحان پایان ترمتون چند تا نکته رو باید بگم که شما رو از نگرانی در بیارم:

1- امتحان فقط برنامه نویسیه، پس نگران الگوریتم و فلوچارت نباشید!

 

2- الگوریتمها رو فراموش نکنید!! اونا رو خوب خوب یــــــاد بگیرید نه اینکه حفظ کنید ! که توی امتحان بتونید برنامشون رو بنویسید!

 

3- این امتحان و مدل سوالها خیلی شبیه به سوالای فرزانگان 6 ( سوالای امتحان پایانیشون) خواهد بود. پس سعی کنید با مدل

سوالا آشنا باشید!

 

4- این امتحان هم مثل بقیه امتحانات کامپیوتر شما خواهد بود، سوال جدید میآد اما اصل مطلب رو بهتون درس دادم. توقع سوال تکراری نداشته باشید( اما نمیگم که نمیآد!)

 

5- توقع سوال گلابی هم نداشته باشید!

 

6- ســــــــــخت نگیرید اینقدر به خودتون!

 

7- خیـــــــلی هم آسون نگیرید! ؛)

 

8- منبع امتحان هر چیزیه که به برنامه نویسی ربط داره و شما حتی فقط یه بار در زندگیتون اونو دیدید!! حالا چه سر کلاس گفته باشم چه توی وبلاگ چه از دوستاتون یا بیرون یاد گرفته باشید چه کتاب چه جزوه! یعنی بعدا بهونه نیارید به ما درس نداده بووود!!!

 

9- مثل همیشه موفق و شاد پیروز باشید! منم براتون دعا میکنم! :)

 

 

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

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

 

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

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

 

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