PDA

View Full Version : نحوه تبدیل آرایه 3 بعدی به 1 بعدی



pr0tector
چهارشنبه 03 آبان 1391, 22:42 عصر
سلام دوستان
همونطور که اطلاع دارید حافظه رم یک حافظه یک بعدی می باشد و داده ها به صورت آرایه 1 بعدی ذخیره می شوند،بنابراین ذخیره داده های چند بعدی نیز نهایتا باید تبدیل به یک آرایه یک بعدی شود تا در حافظه رم ذخیره شود (البته ماهیت ارایه هم ادرس هست دیگه، در واقع رابطه خیلی نزدیکی با اشاره گر ها داره ) اما حالا من میخوام برنامه ای بنویسم که یک آرایه 3 بعدی رو بگیره و اون رو توی یک آرایه یک بعدی ذخیره کنه...
درواقع این یک تمرین اضافی هست برای درس زبان ماشین و اسمبلی و بنده مایلم انجامش بدم...
و دلیل مطرح کردن این موضوع هم در اینجا انجام تمرینم نیست (قابل توجه مدیران عزیز!!)
بلکه میخوام روال تبدیل ارایه 3 بعدی به 1 بعدی رو بفهمم چون نوشتن برنامه اش اگه روال کار بدونم کار خاصی نیست...
ایا فرمول خاصی برای اینکار هست.
در ضمن بنده درس ساختمان داده رو نخوندم !
حالا دوستان بزرگوار اگر بنده رو راهنمایی کنن ممنون میشم
اگر آموزش تصویری بگین که خیلی عالی میش و سریع تر به نتیجه میرسم

مسعود اقدسی فام
چهارشنبه 03 آبان 1391, 23:06 عصر
یه فرمول طویل داره که حفظ کردنش از حوصله‌ی من خارجه. من این چیزا رو یا می‌رم از یه مرجع کنکوری می‌خونم، یا اگه حوصله کنم خودم حساب می‌کنم. حفظ نمی‌کنم. اگه کتاب کنکور ساختمان دم دستت باشه اونجا نوشته.

pr0tector
چهارشنبه 03 آبان 1391, 23:11 عصر
دوستان دیگر نظری ندارن آیا؟

اوبالیت به بو
سه شنبه 09 آبان 1391, 14:28 عصر
درود بر شما

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

در روش سطری به ترتیب از سطر صفر شروع به پیمایش و ذخیره کردن عناصر در آرایه یک بعدی می کنید تا سطر n-1



for (int i = 0 ; i <n ; i++) //Rows
for (int j = 0 ; j<k ; k++) //Columns
A[i + j] = Matrix[i,j]; //do ...



در روش ستونی ابتدا ستون صفر، سپس ستون اول و تا ستون k-1


for (int j = 0 ; j <k ; j++) //Columns
for (int i = 0 ; i<n ; i++) //Rows
A[i + j] = Matrix[i,j]; //do ...

لطفا تست کنید و نتیجه رو حتما بگید.

pr0tector
جمعه 12 آبان 1391, 01:05 صبح
درست این روش جواب میده اما من میخوام یه آرایه 3 بعدی رو ذخیره کنم...
که فرمول خاصی هم داشت و پیداش کردم..


x= alfa + [( (i-1)*m*n ) + ( (j-1) * m ) + (k-1)] * beta


m=Col
n=row
alfa=Current address
beta = Size of variable
i,j,k=elemnts index
x=address in 1D array
به هر حال از پاسختون ممنون
و تو سایت هم فایل پروژه تو اسمبلی رو براتون قرار دادم
http://code-project.ir/download_3d_to_1d_array_in_assembly_language/