آموزش آرایه یک بعدی و دو بعدی در c - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

آموزش آرایه یک بعدی و دو بعدی در c

+2 امتیاز

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

دانايى سرآمد همه خوبی‏ها و نادانى سرآمد همه بدی‏هاست.

http://www.pcobux.pcomoney.com/?r=306669713

سوال شده بهمن 1, 1392  بوسیله ی jahadgar (امتیاز 380)   24 41 54
ویرایش شده اردیبهشت 12, 1393 بوسیله ی jahadgar

2 پاسخ

+2 امتیاز
 
بهترین پاسخ
آرایه مجموعه ای از متغیرهاست که در کنار هم میان و استفاده کردن ازشونُ برای ذخیره کردن اطلاعات راحت میکنه ، بنا به نیاز میتونیم از هرنوع متغیری استفاده کنیم و هر عضو آرایه دقیقا خواص همون نوع متغیر رو داره. تعریف آرایه :
int example[100]  ; 
string example[10][5] ;

و یک ارایه ی 10 تایی برای مثال از کلید دسترسی 0 شروع میشه  و با 9 تموم میشه

char a[10] ;
a[0] ; // first one
a[9] ; // last one

آرایه دو بعدی :

آرایه دو بعدی هم به بیانی یعنی داخل هر عضو آرایه آرایه ی دیگه ای تعریف کنیم که تشکیل یک جدول رو میده و محدودیتی برای تعداد بُعد های ارایه نیست ولی ممکنه گیج کننده بشه.

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

ارایه های پویا :

ارایه هایی هستن که به هر تعداد که نیاز باشه میشه ازشون ساخت و کار کردن باهاشون خیلی راحت تره و مشکل اشغال حافظه هم ندارن مثلا وکتور

vector <int> v ;
/*some function of vector*/
v.push_back() ;
v.erase() ;
v.size();
v.empty();
v.remove();

map:

در انواع آرایه ی بالا کلید دسترسی به هر خانه ی آرایه فقط یک عدد بود ولی در ارایه میشود هر چیزی باشد

map <string ,int> m ; // string is key and int is value

 

پاسخ داده شده بهمن 1, 1392 بوسیله ی Elyas74 (امتیاز 1,144)   6 14 27
انتخاب شد اردیبهشت 5, 1393 بوسیله ی jahadgar
+5 امتیاز

آرایه : محلی برای ذخیره چند متغیر یکسان که تعدادشون ثابته .

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

ساخت آرایه 

type arr_name[ arr_size];

مثلا

int a[3]

 

مقدار دهی

مقدار دهی به آرایه رو میشه هم موقع تعریف انجام داد هم بعد از تعریف

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

for(int i=0;i<3;i++)

   a[i]=i;

a[2]=12;

,....

خوندن اطلاعات از ارایه :

arr_name[index];

مثلا

int temp=a[2];

 

گرفتن حافظه برای آرایه زمان اجرا

توی روش هایی که در بالا گفتم برای ساختن آرایه باید قبل از کامپایل کد سایز آرایه مشخص باشه

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

    type *arr_name=(type*)malloc(sizeof(type)*arr_size);

 

کاری که malloc  میکنه اینه که به اندازه پارامتر ورودیش که یک عدد هست برای ما حافظه میگیره  sizeof(type)*arr_size

و از اون جایی که حافظه ای که بر میگردونه از نوع void*  هست قبل از گزاشتن داخل arr_name   باید تبدیل بشه به type*  ( پرانتز قبل از (malloc

نکته ای که هست بعد از استفاده از آرایه ای که با malloc  براش حافظه گرفته شده باید اون رو پاک کرد با free

free(arr_name);

 

 

مقدار اولیه دادن به این آرایه هم مثل قبله

البته یک راه سریعتر هم برای مقدار 0 دادن به کل آرایه می تونه استفاده از memsetباشه

#include <stdio.h>

#include <stdlib.h>

#include <memory.h>

int main()

{

    const int SIZE=5;

    int *a=(int*)malloc(sizeof(int)*sz);

    memset(a,0,sizeof(int)*SIZE);

   

    for(int i=0;i<sz;i++)

        printf("%d\n",a[i]);

    return 0;

 

ارسال آرایه 1 بعدی به تابع

به یکی از 2 شکل زیر می تونی عمل کنی

void func(int arr[],const int SIZE)
{
}

// ya

void func(int *arr,const int SIZE)
{

}

//estefade :

int a[4];

func(a,4);

 

آرایه 2 بعدی :

آرایه 2 بعدی یعنی یک آرایه یک بعدی که داخل هر خونش یک  آرایه یک بعدی دیگه قرار داره (  به صورت یک جدول هم میشه در نظر گرفت )

شکل زیر نشون دهنده یک آرایه 2 بعدیه 3*5 هستش .

 

ساختن آرایه 2 بعدی :

type arr_name[rows][cols];

مثلا شکل بالا تعریفش به این شکل میشه :

int a[5][3]; 

مقدار اولیه دادن به آرایه 2 بعدی :

برای مثدار دادن هم کاری که باید انجام بشه شبیه همون آرایه یک بعدیه 

 int a[2][3]={{2,1,3},{3,5,7}};

    for(int i=0;i<2;i++)
    {
        for(int j=0;j<3;j++)
            a[i][j]=3;
    }
    
    a[1][2]=32;
    
    a[0][0]=11;
    
    a[0][2]=2;
    
    ....

:

 

گرفتن حافظه برای آرایه 2 بعدی زمان اجرا :


    int **a;

    a=(int**)malloc(sizeof(int*)*4);
    for(int i=0;i<4;i++)
    {
        a[i]=(int*)malloc(sizeof(int)*2);
    }

 

کد بالا یک آرایه 4*2 میسازه .

چون از malloc استفاده شده بعد از اسفاده از آرایه باید آرایه پاک هم بشه به این شکل :

پاک کردن  :

    for(int i=0;i<4;i++)
    {
        free(arr_name[i]);
    }

    free(arr_name);

 

ارسال به تابع :

void func(int arr[][5],const int rows)
{
}

// ya

void func(int **arr,const int rows,const int cols)
{

}

لینک های مرتبط :

http://www.7khatcode.com/search?q=%D8%A2%D8%B1%D8%A7%DB%8C%D9%87

پاسخ داده شده بهمن 5, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
...