نمایش نتایج 1 تا 14 از 14

نام تاپیک: مشکل با ارایه در C

  1. #1

    مشکل با ارایه در C

    با سلام به تمامی دوستان

    من یه سوالی داشتم در مورد ارایه ها سوالم این بود که ما زمانی که
    توی ویبی یه آرایه تعریف می کردیم بعد میشد تو برنامه اون رو redim کرد
    می خواستم بدونم توی زبان C به چه صورت انجام میشه؟

    ممنون

  2. #2

    نقل قول: مشکل با ارایه در C

    سلام من vb بلد نیست باتوجه به این

    redim= کلمه کليدي براي تعريف آرايه هاي ديناميکي


     int* r=new int[4];


    شاید منظور شما این باشه
    Kernel Mode Developer
    RootKitSMM@Yahoo.com

  3. #3

    نقل قول: مشکل با ارایه در C

    توی ویبی یه آرایه تعریف می کردیم بعد میشد تو برنامه اون رو redim کرد
    فکر کنم منظورتون تغییر سایز آرایه باشه ، که تو ++C آرایه ها معمولا به دو نوع تعریف میشوند :

    1. Fixed Static
    2. Dynamic

    حالت اول به این معنا نیست که سایز آرایه محدود است ، شما در این حالت میتوانید هر سایزی مجاز برای
    آرایه انتخاب کنید 10 ، 700 ، 1000 و ... ولی دیگر وقتی آرایه سایزش مشخص شد ، قابل تغییر نخواهد بود .

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

    ولی این قابلیت برای Vector ها وجود دارد که شما میتوانید سایزی برای آن در نظر گرفته و بعد آنرا تغییر
    دهید که اینکار با متود resize انجام میشود ./

    موفق باشید ./






  4. #4

    نقل قول: مشکل با ارایه در C

    نمی دونم redim کارش چیه چون این دو با هم فرق دارن

    growable array, resizable array=Dynamic array

    dynamically-allocated array
    Kernel Mode Developer
    RootKitSMM@Yahoo.com

  5. #5

    نقل قول: مشکل با ارایه در C

    نمی دونم redim کارش چیه چون این دو با هم فرق دارن
    ما هم نگفتیم یکی هستن ، تک تک بررسی کردیم !
    ببینید دوست عزیز ، اگه از لحاظ تئوری وار بریم جلو ، میشه آرایه ها رو به 4 الی 5 بخش تقسیم کرد ،
    از جمله : Dynamic,Fixed Stack Dynamic,Fixed Heap Dynamic,Fixed Stack Static, ...
    ولی همه اینها که در همه زبانها پیاده سازی نشده اند و در زبان ++C,C دو نوع معمول وجود دارد که در بالا
    ذکر کردم !
    در ضمن در همین لینک ویکی شما گفته بنده دیده میشه :
    C++‎'s std::vector is an implementation of dynamic arrays






  6. #6

    نقل قول: مشکل با ارایه در C

    نقل قول نوشته شده توسط Salar Ashgi مشاهده تاپیک
    فکر کنم منظورتون تغییر سایز آرایه باشه ، که تو ++C آرایه ها معمولا به دو نوع تعریف میشوند :

    1. Fixed Static
    2. Dynamic

    حالت اول به این معنا نیست که سایز آرایه محدود است ، شما در این حالت میتوانید هر سایزی مجاز برای
    آرایه انتخاب کنید 10 ، 700 ، 1000 و ... ولی دیگر وقتی آرایه سایزش مشخص شد ، قابل تغییر نخواهد بود .

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

    ولی این قابلیت برای Vector ها وجود دارد که شما میتوانید سایزی برای آن در نظر گرفته و بعد آنرا تغییر
    دهید که اینکار با متود resize انجام میشود ./

    موفق باشید ./
    ممنون دوستان که پاسخ دادید

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

    لطفآ هر دو روش رو بگو هم حالت Runtime هم حالت Resize

    البته من C کار می کنم ++C کار نکردم

    ممنون

  7. #7

    نقل قول: مشکل با ارایه در C

    برای تغییر اندازه آرایه
    دوست عزیز ، من در بالا ذکر کردم ، اینکار بطور پیش فرض برای آرایه ها در ++C,C ممکن نیست ، ولی اگه
    با STL یا (Standard Template Library) آشنایی داشته باشید ، گفتم میتونید از Vector ها استفاده کنید ./
    یه مثال :
    http://www.cplusplus.com/reference/stl/vector/resize/
    --------------------
    البته من C کار می کنم ++C کار نکردم
    بارها من این نکته رو گفتم ، اینطور فکر نکنید که ++C یه زبان و یه دنیاست و C یه دنیای دیگر !
    این دو مکمل یکدیگرند ! جدای اینکه ++C تکمیل یافته C میباشد ./
    آخرین ویرایش به وسیله Salar Ashgi : شنبه 20 شهریور 1389 در 19:22 عصر دلیل: این پست به دلیل تکراری بودن به طور خودکار ادغام شده است.






  8. #8

    نقل قول: مشکل با ارایه در C

    نقل قول نوشته شده توسط Salar Ashgi مشاهده تاپیک
    ما هم نگفتیم یکی هستن ، تک تک بررسی کردیم !
    ببینید دوست عزیز ، اگه از لحاظ تئوری وار بریم جلو ، میشه آرایه ها رو به 4 الی 5 بخش تقسیم کرد ،
    از جمله : Dynamic,Fixed Stack Dynamic,Fixed Heap Dynamic,Fixed Stack Static, ...
    ولی همه اینها که در همه زبانها پیاده سازی نشده اند و در زبان ++C,C دو نوع معمول وجود دارد که در بالا
    ذکر کردم !
    در ضمن در همین لینک ویکی شما گفته بنده دیده میشه :

    من پستم رو زمانی نوشتم که pageام رو reload نکرده بودم و ان زمان پست شما رو ندیده بودم


    به قول خودتون :موفق باشید ./

    آخرین ویرایش به وسیله Salar Ashgi : شنبه 20 شهریور 1389 در 22:03 عصر
    Kernel Mode Developer
    RootKitSMM@Yahoo.com

  9. #9

    نقل قول: مشکل با ارایه در C

    به قول خودتون :موفق باشید ./
    موفقیت همه دوستان برنامه نویس ، آرزوی قلبی ماست و ما به این افتخار میکنیم !






  10. #10
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491

    نقل قول: مشکل با ارایه در C

    می خواستم بدونم توی زبان C به چه صورت انجام میشه؟
    در C یا سی++ آرایه‌های خام (raw arrays) (یا ایجاد شده بر روی stack یا ایجاد شده بر روی free store)، تغییر اندازه نمی‌دهند. شما اگر آرایه‌ای را با اندازهٔ x ایجاد کنید، هیچگاه نمی‌توانید اندازهٔ آن را تغییر دهید. بنابراین، به عنوان راه حل، یک آرایهٔ جدید با طول جدید ایجاد می‌کنند و سپس اعضای موجود را از آرایهٔ قبلی در آرایهٔ جدید کپی کرده و آرایهٔ قبلی را نابود می‌کنند. در VB نیز اینکار صورت می‌گیرد اما بطور غیر مستقیم و دور از چشم برنامه‌نویس.

    بنابراین، برای تغییر طول آرایه، باید یک آرایهٔ جدید را با طول جدید ایجاد کرده و اعضای آرایهٔ قبلی را در آرایهٔ جدید به ترتیب کپی کنید، سپس آرایهٔ قبلی را نابود کنید. در سی++ کلاس vector این کار را توسط تابع resize برای شما انجام می‌دهد، در زبان C نیز اینکار توسط تابع realloc صورت می‌گیرد، یا بدون استفاده از این تابع:


    int* x = (int*)calloc(sizeof(int), 5);
    x[0]=1;
    x[1]=2;
    x[2]=3;
    x[3]=4;
    x[4]=5;
    int* y = (int*)calloc(sizeof(int), 10);
    memcpy(y, x, sizeof(int) * 5);
    free(x);
    x = y;
    y = NULL;
    x[5]=6;
    x[6]=7;
    x[7]=8;
    x[8]=9;
    x[9]=10;

  11. #11

    نقل قول: مشکل با ارایه در C

    ممنون PC2st

    من از این کد استفاده میکنم
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
    int main() {
    int* array;
    int n, i;
    printf("Enter the number of elements: ");
    scanf("%d", &n);
    array = (int*) malloc(n*sizeof(int));
    for (i=0; i<n; i++) {
    printf("Enter number %d: ", i);
    scanf("%d", &array[i]);
    }


    حالا اگه بخوام همین رو به صورت دو بعدی در بیارم چه جوریه ؟

    ممنون

  12. #12
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491

    نقل قول: مشکل با ارایه در C

    حالا اگه بخوام همین رو به صورت دو بعدی در بیارم چه جوریه ؟
    برای اینکار باید برعکس همین کار را انجام دهید!! یعنی آرایهٔ دوبعدی را بصورت آرایهٔ یک‌بعدی (معمولی) مورد استفاده قرار دهید، باتوجه به اینکه آرایه‌های دوبعدی در حقیقت (نحوهٔ چینش اعضای آنها در حافظه) همان آرایه‌های تک‌بعدی هستند، پس برای ایجاد یک آرایهٔ دو بعدی به اندازهٔ m در n خواهیم داشت:
    array = (int*) malloc(m*n*sizeof(int));
    برای دسترسی به تمام اعضای این آرایه بر اساس اعضای موجود در سطر i ام و سطر j ام:
    array[i*(m+1)+j]
    i از صفر تا m-1 و j از صفر تا n-1 (حداکثر طول آرایهٔ array برابر با m*n است)
    بطور مثال برای دسترسی به عضو موجود در سطر اول (0) و ستون سوم (2) می‌نویسیم:
    array[0*(m+1)+2] //array[0][2]

  13. #13

    نقل قول: مشکل با ارایه در C

    ممنون

    میشه شکل کلی کد رو بذارید من مبتدیم

    ممنون

  14. #14
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491

    نقل قول: مشکل با ارایه در C

    #include <stdlib.h>
    #include <stdio.h>

    int main() {
    int* array;
    int m, n, i, j, x;
    printf("Enter the number of elements: ");
    scanf("%d", &m);
    scanf("%d", &n);
    array = (int*) malloc(m*n*sizeof(int));
    for (i=0; i<m; i++) {
    for (j=0; j<n; j++) {
    printf("Enter number %d, %d: ", i, j);
    scanf("%d", &array[i*(m + 1)+j]);
    }}
    for (x=0; x<m*n; ++x) {
    printf("%d: %d\n",x, array[x]);
    }
    }

قوانین ایجاد تاپیک در تالار

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