ورود

View Full Version : مشکل در محاسبه ی آدرس حاقظه در آرایه



Joyebright
شنبه 30 دی 1391, 23:24 عصر
دوستان یه سوال باهاش مواجه شدم که می خواست آدرس یک location در آرایه که به صورت ستونی ذحیره شده بود رو بدست بیاریم .اینم خود آرایه :int A[10][5]

حالا برای بدست آوردن آدرس نیاز داریم تعداد سطر ها رو بدست بیاریم ، تعداد سطرها برابر با 11 هستن یا 10 ، به نظر من باید 11 باشه اما اگه 11 درنظر بگیرم جواب تو گزینه ها نیست و 10 جواب تو گزینه ها هست؟!

بد نیست سوالو کامل مطرح کنم :آدرس پایه برابر با 50 سایز integer(2) آنگاه عنصر A[3][2] در چه محلی ذخیره شده است.

مسعود اقدسی فام
یک شنبه 01 بهمن 1391, 08:17 صبح
وقتی A به صورت ده سطر و پنج ستون تعریف شده، یعنی سطرهای صفر تا نه و ستون‌های صفر تا چهار رو داره.
برای عنصر سه و دو. باید سه سطر رو کامل طی کنید (صفر و یک و دو) و سطر سه عناصر صفر و یک رو هم رد بشید تا به اول عنصر دو برسید. پس پونزده تا دو بایتی برای سه سطر اول (سی بایت) و دو تا دو بایتی برای دو عنصر اول سطر سه (جهار بایت) با عدد 50 جمع می‌شه که نتیجه می‌شه 84. این عدد آدرس شروع عنصر سطر شماره 3 و ستون شماره 2 هستش.

Joyebright
یک شنبه 01 بهمن 1391, 15:03 عصر
ممنون جواب شما در گزینه ها هست، اما فقط یه سوال دارم تعداد چقدر است؟
اما من تعجب می کنم چرا طبق فرمول

Base+((j-L(2))*(rows)+(i-L(1))*Byte

جواب شما که همون 84 تا باشه نمیاد!

مسعود اقدسی فام
یک شنبه 01 بهمن 1391, 16:33 عصر
A = Base + ( ( r - 1 ) * ColumnCount + c - 1 ) * Length


که منظور از ColumnCount تعداد کل ستون‌ها و منظور از r و c شماره سطر و ستون محل مورد نظر هستش. البته توجه داشته باشید که مثلا سطر 2 سطر سوم در زبان برنامه‌نویسی ++C حساب می‌شه. یعنی r = 3 باید باشه. همینطور در مورد c.

Joyebright
یک شنبه 01 بهمن 1391, 22:58 عصر
A = Base + ( ( r - 1 ) * ColumnCount + c - 1 ) * Length


که منظور از ColumnCount تعداد کل ستون‌ها و منظور از r و c شماره سطر و ستون محل مورد نظر هستش. البته توجه داشته باشید که مثلا سطر 2 سطر سوم در زبان برنامه‌نویسی ++C حساب می‌شه. یعنی r = 3 باید باشه. همینطور در مورد c.



لطفاٌ تعداد سطرها را بگید؟

به نظر من سوالی که من مطرح کردم فرمولش این نیست شما اومدین فرمول ذخیره آرایه به روش سطری نوشتید در صورتی که سوال مربوط به آرایه ستونی است!

Joyebright
سه شنبه 03 بهمن 1391, 13:12 عصر
کسی می تونه جواب منو بده؟

مسعود اقدسی فام
سه شنبه 03 بهمن 1391, 20:17 عصر
A = Base + ( ( c - 1 ) * RowCount + r - 1 ) * Length


البته دیگه جواب 84 نمی‌شه. اگه اشتباه نکنم 74 می‌شه.

Joyebright
چهارشنبه 04 بهمن 1391, 20:44 عصر
A = Base + ( ( c - 1 ) * RowCount + r - 1 ) * Length


البته دیگه جواب 84 نمی‌شه. اگه اشتباه نکنم 74 می‌شه.




ممنونم بازم مرسی که وقت گذاشتیدو جواب دادید اگه امکان داره بگید تعداد سطرها یا همون rowcount شما چقدر است؟

مسعود اقدسی فام
پنج شنبه 05 بهمن 1391, 11:21 صبح
مثلا اگه [a[4][3 تعریف بشه rowCount همون چهار هستش. چون وقتی روی ستون دوم هستید یعنی کل اندازه ستون اول (تعداد سطرها که چهار تاست) و یه مقدار دیگه از بالا به پایین ستون دوم رو حرکت می‌کنید.

Joyebright
پنج شنبه 05 بهمن 1391, 15:20 عصر
مثلا اگه [a[4][3 تعریف بشه rowCount همون چهار هستش. چون وقتی روی ستون دوم هستید یعنی کل اندازه ستون اول (تعداد سطرها که چهار تاست) و یه مقدار دیگه از بالا به پایین ستون دوم رو حرکت می‌کنید.

ممنونم اما فکر می کنم row count آرایه ای که گفتید 5 باشه چون اگه a[0..4][0..3]s باشه بنابراین داریم:
4-0+1=5