تبلیغات
برنامه نویسی C++ - آموزش و سورس برنامه ی سی پلاس پلاس - مطالب اردیبهشت 1389
برترین پیشنهاد

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

بزرگترین پایگاه آموزش سی پلاس پلاس و سورس تمام برنامه های آن

File:Selection sort animation.gif
تابع مرتب سازی انتخابی(Selection Sort) که متوسط عملکرد آن О(n²)  است:

void selectionSort(int arr[], int len)
{
    int i, j, minIndex, tmp;
    for (i = 0; i < len - 1; i++)
   {
       minIndex = i;
        for (j = i + 1; j < len; j++)
            if (arr[j] < arr[minIndex])
                minIndex = j;
      if (minIndex != i)
      {
            tmp = arr[i];
         arr[i] = arr[minIndex];
            arr[minIndex] = tmp;

      }

   }

}

//end


File:Bubble sort animation.gif

الگوریتم مرتب سازی حبابی که متوسط عملکرد آن O(n2) است:


void BubbleSort(int temp[], int len)
{
    int i, j, item;
    for(i=len-1;i>0;i--)
        for(j=0;j<i;j++)
            if(temp[j]>temp[j+1])
            {
                item=temp[j];
                temp[j]=temp[j+1];
                temp[j+1]=item;
            }
}


//end


مرتب سازی آرایه ها (Sort):

عمل مرتب سازی در کامپیوتر، عمل بسیار مهمی محسوب میشود و بسیاری از روش های مرتب سازی باید بر روی آرایه ها انجام شود، از این رو الگوریتم های بسیاری برای مرتب سازی آرایه ها طراحی شده است. این الگوریتم ها از الگوریتم های ساده تا پیچیده طراحی شده اند و هم اکنون نیز تحقیقات برای بهبود روش های مرتب سازی ادامه دارد.

برای مرتب سازی آرایه یک بعدی، روش های مختلفی همچون روش مرتب سازی حبابی (Bubble Sort)، انتخابی (Selection Sort)، سریع (Quick Sort)، درجی (Insertion Sort)، ادغامی (Merge Sort) و ... وجود دارد که در تمامی روش های فوق تفاوت در روش مقایسه و جابجایی است، که باعث شده الگوریتم های متفاوتی تولید شوند.
در این بین الگوریتم مرتب سازی حبابی بسیار ساده و قابل فهم است.

در پست های آینده، توابع اکثر روش های مرتب سازی گذاشته خواهد شد.


آرایه یک بعدی به عنوان آرگومان تابع:

در زبان c++ همانگونه که میتوانیم انواع متغیر ها را به عنوان آرگومان
به یک تابع ارسال کنیم، آرایه ها نیز میتوانند به عنوان آرگومان به توابع ارسال شوند. برای ارسال آرایه به تابع، باید نام آرایه به عنوان آرگومان ذکر شود. اگر آرایه به عنوان آرگومان تابع باشد، پارامتر معادل آن میتواند بصورت زیر تعریف شود:
1. آرایه با طول مشخص
2. آرایه با طول نامشخص که در این صورت بهتر است طول آرایه به آرگومان دیگری منتقل شود.
3. اشاره گر که میتوان اشاره گری به یک آرایه تعریف نمود.(در جلسات آینده با اشاره گر ها کاملا آشنا خواهید شد.)

شکل کلی ارسال آرایه به توابع:

void f1(int x[]);
void f2(int x[], int len);

void main()
{
    int x[10];
    f1(x);
    f2(x,10);
}
void f1(int x[10])
{
    ...
}
void f2(int x[], int len)
{
    ...
}

//end


مقدار دهی اولیه به آرایه تک بعدی:

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

مثال:

int x[3] = {10};
int x[3] = {10, 20};
int x[3] = {10, 20, 30};

//end

خالی گذاشتن بُعد آرایه هنگام تعریف:

در زبان c++ در آرایه های یک بعدی فقط به شرطی میتوان بعد آرایه را خالی گذاشت که هنگام تعریف آن مقدار دهی نماییم، در غیر این صورت خطا خواهیم داشت.

مثال درست:

int x[] = {10, 20, 30};

//end



سورس برنامه ای که از کاربر میپرسد روز اول سال چند شنبه است و براساس آن، چند شنبه بودن n امین روز سال را محاسبه میکند:

#include <iostream.h>

void main()
{
    int x,y,c;
    cout<<"avalin ruze sal chand shanbe ast?"<<endl<<"0=shanbe, 1=yek shanbe, 2=doshanbe, 3=seshanbe, 4=charshanbe, 5=panjshanbe, 6=jome"<<endl;
    cin>>x;
    cout<<"chandomin ruze sal made nazar ast?"<<endl;
    cin>>y;
    c=(y+x-1)%7;
    cout<<"javab: ";
    switch(c)
    {
        case 0:cout<<"shanbe";break;
        case 1:cout<<"yekshanbe";break;
        case 2:cout<<"doshanbe";break;
        case 3:cout<<"seshanbe";break;
        case 4:cout<<"charshanbe";break;
        case 5:cout<<"panjshanbe";break;
        case 6:cout<<"jome";break;
    }

}

//end


حالا که آرایه ها رو معرفی کردیم، سورس یک برنامه ی جالب و معروف میزارم که الگوریتمشو خودم نوشتم.
این برنامه که اسمش مربع جادویی هست، ابتدا تعداد سطر و ستون رو که باید عددی فرد باشه از کاربر میگیره و بعد مربع رو درست میکنه.
تو این مربع جمع اعداد هر سطر، ستون و ضربدری با هم برابره و هم چنین ضربدر چپ به راست، هر دفعه عددش یک واحد کم میشه. مثال(3X3):

8     1     6
3     5     7
4     9     2


ادامه مطلب(کد برنامه)

آرایه های یک بعدی:
تاکنون داده های ورودی و بقیه داده های مورد نیاز را در متغیر ها و ثابت ها ذخیره میکردیم. اما اگر تعداد ورودی ها زیاد باشد، نیاز داریم تعداد زیادی متغیر را تشکیل دهیم که این کار باعث میشود روند عملیات برنامه نویسی بسیار پیچیده شود. بنابراین برای جلوگیری از این مشکلات میتوانیم از امکان تعریف آرایه ها در زبان ++C بهره مند شویم.
آرایه ها خانه های پشت سر هم در حافظه هستند که همگی از یک نوع و با یک نام و با شماره های خانه متفاوت(اندیس آرایه) هستند.

روش تعریف آرایه یک بعدی:

;[طول آرایه]نام آرایه     نوع آرایه

روش تعریف یک آرایه یک بعدی که به آن لیست (List) هم میگویند به صورت فوق است. در این روش دقت میکنیم که نوع آرایه می تواند از انواع داده ها(Data Types) قابل استفاده در زبان ++C باشد و نام انتخابی برای آرایه چون یک شناسه است، باید از قوائد تولید شناسه در زبان ++C تبعیت کند.

نکته: محل هر عضو از آرایه توسط شماره(اندیس) که در [] می گذاریم، مشخص میشود.

نکته: اندیس شروع آرایه در زبان ++C صفر میباشد یعنی شماره گذاری خانه های آرایه از 0 شروع میشود و خانه ی اول آرایه اندیس 0 دارد.

نکته: در زبان ++C اسم آرایه آدرس خانه ی اول آرایه است.


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

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


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

قالب های تابع(function template):
در توابع عم نام اگر تعداد آرگومان ها یکسان باشد و بدنه ی اجرایی تابع نیز به یک شکل باشد و فقط توابع در نوع بازگشتی و نوع آرگومانها تفاوت داشته باشند، می توان به جای نوشتن هر تابع از یک قالب تابع استفاده کرد. به شکل زیر و با کلمه ی کلیدی template:



template <class T>
T A ( T1, T2, ...)
{
    ...
}

//end
در بالا منظور از T هر نوع داده ای(مانند int) و از A نام تابع است. هم چنین T1, T2, ... آرگومان های تابع هستند.


  • کل صفحات:2  
  • 1
  • 2
  •