اطلاعیه

Collapse
No announcement yet.

آرایه ها

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    آرایه ها

    سلام
    چند سوال در مورد ارایه ها در ++C دارم ممنون میشم جواب بدید
    روش تعریف ارایه های چند بعدی و ارایه هایی که اندازه انها قابل تغییر هست ؟
    اگر بخواهیم عناصر دو ارایه چند بعدی از نوع رشته ایی را که هر عنصر ان حاوی یک رشته باشد را با هم مقایسه کنیم به چه صورت عمل کنیم؟ مثلا محتویات دو عنصر از ارایه های
    [2][1]Array1 را با [1][2]Array2 مقایسه کنیم
    ممنون

    #2
    پاسخ : آرایه ها

    روش تعریف ارایه های چند بعدی و ارایه هایی که اندازه انها قابل تغییر هست ؟
    اگر بخواهیم عناصر دو ارایه چند بعدی از نوع رشته ایی را که هر عنصر ان حاوی یک رشته باشد را با هم مقایسه کنیم به چه صورت عمل کنیم؟ مثلا محتویات دو عنصر از ارایه های
    [2][1]Array1 را با [1][2]Array2 مقایسه کنیم
    سلام دوستان
    خب با کسب اجازه از صاحب نظران برنامه نویسی C++ عرض میکنم.

    روش تعریف آرایه های چند بعدی . مثلا:

    int arr[10][12][13]


    خب اگه دقت کنی در نحو زبان های خانواده ی سی مفاهیم اولیه ی کمی وجود داره که میشه اونا رو با یه کم دقت بسط داد.
    مثلا به مثال بالا دقت کن:
    اول یه ارایه ی 10 تایی از نوع int داریم . خب؟

    int arr[10]

    حالا یه آرایه ی 12 تایی از نوع آرایه ی اول داریم. (یعنی هر خونه ی ارایه ی دوم ، یه ارایه از نوع ارایه ی اوله)

    int arr[10][12]

    بعد هم یه آرایه ی 13 تایی از نوع آرایه ی دوم داریم. (یعنی هر خونه ی ارایه ی سوم ، یه ارایه از نوع ارایه ی دومه)

    int arr[10][12][13]

    پس دیده میشه که قاعده ی جدیدی وجود نداره و از همون قاعده ی ارایه های تک بعدی استفاده شده.

    خب برا تعریف آرایه های با اندازه ی متغیر با فرض اینکه منظور شما اینه که وسط کار اندازه رو تغییر بدیم ، میتونیم از قابلیتی که در سی وجود داره و تو c++ هم میشه ازش استفاده کرد استفاده کرد:

    int *arr=(int*) malloc(12);


    خب کد بالا کار همون new رو میکنه که تو c++ اضافه شده. ولی خویش اینه که هم تو س کار میکنه و هم اینکه فضاهایی که با این روش تخصیص داده میشه با یه تابع دیگه به اسم realloc قابل بسطه.

    arr=(int*) realloc(arr,32);

    خب دستور بالا مقدار فضای تخصیص داده شده به آرایه رو به 32 کاراکتر افزایش میده.
    البته دقت کن که این دو دستور مقدار فضای تخصیص داده شده رو به بایت میگیرن و شما خودت باید محسابه کنی که چند بایت نیاز داری.
    مثلا برا آرایه ی int که جدیدش 4 بایتیه (نه 2بایت) که 12 عضویه باید 48 بایت تخصیص داد.

    بعد از اتمام کار برا آزاد کردن فضای تخصیصی از تابع free استفاده میشه:

    free(arr);


    دقت کن که این دو تابع برای آرایه های near هستن نه far. (اگه نمیدونی چیه نمیخواد توجه کنی)

    اگه منظورت چیز دیگه ای بو بفرما تا توضیح بدم.
    Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

    دیدگاه


      #3
      پاسخ : آرایه ها

      سلام
      ای بابا در مورد سوال آخری یادم رفت بنویسم:
      [2][1]Array1 را با [1][2]Array2 مقایسه کنیم
      خب باتوجه به اینکه آرایه های ما رشته ای هستن پس باید 3 بعدی باشن.
      چون دو یه بعدش برا رشته بودن صرف میشه و دو بعدشو شما نیاز داری.
      خب برای این منظور شما باید از فایل هدر string استفاده کنید. توابعی که در این هدر وجود دارن بدرد این منظور میخورن.
      مثلا strcmp که string compare هست و از نامش معلومه چیکار میکنه.
      این تابع با آرایه های کاراکتری که همون رشته ها هستن کار میکنه و اونا رو با هم مقایسه میکنه .
      چند بعدی بودن آرایه ی رشته ای هم هیچ پیچیدگی توکار ایجاد نمیکنه. فقط باید از عناصر آرایه که رشته هستن استفاده کنی. همین.
      خب چندتا از توابعو معرفی میکنم که بدردت میخوره.
      strcmp==string compare
      stricmp==case insensitive string compare
      strncmp==first n characters string compare
      strnicmp==case insensitive first n characters string compare

      خب دو تابع اول برا مقایسه ی کل دو رشته ای هستند که در ارگومان می گیرند و دو تابع دوم برای مقایسه ی n کاراکتر اول دو رشته ی آرگومان هستند.

      دو تابع اول دو آرگومان رشته ای میگیرند .
      دو تابع دوم دو ارگومان رشته ای و یک ارگومان int میگیرند. (ارگومان سوم که int است همان n است که در بالا توضیح دادم)

      تابع اول و سوم بصورت case sensitive با رشته ها برخورد میکنند.
      تابع دوم و چهارم بصورت case insensitive با رشته ها برخورد میکنند.
      case sensitivity یعنی اینکه حروف کوچک و بزرگ انگلیسی در مقایسه متفاوتند. (توابع اول و سوم)

      خب مقدار بازگشتی از این توابع int است که اگر رشته ی اول از دوم بزرگتر باشد مثبت و اگر کوچکتر باشد منفی و اگر برابر باشد صفر است.


      Upload your files Here. Great Azeri Resumable File Host: http://endir.az/index.php?lang=5

      دیدگاه

      لطفا صبر کنید...
      X