PDA

View Full Version : سوال: ایجاد اندیسهای زوج در آرایه



kh1387
یک شنبه 24 خرداد 1388, 23:20 عصر
با سلام
چگونه می توان آرایه ای تعریف کرد که دارای اندیسهای زوج یا فرد یا اندیسهای دلخواه باشه؟
در زبان برنامه نویسی C یا C++
متشکرم

tdkhakpur
دوشنبه 25 خرداد 1388, 01:53 صبح
سلام
آرایه خودش به معنی صف هست و خودتون میدونید که یک صف در هر جای دنیا همون صفی هست که از یک شمارش شده و تا نقطه nام ادامه پیدا میکند.
ولی شما در طراحی الگوریتم میتوانید اندیکسهای فرد را برای یک کار خاص و اندیکسهای زوج را برای کار دیگر در نظر بگیرید.
موفق باشید.

Keyhan Clever
دوشنبه 25 خرداد 1388, 09:41 صبح
یعنی چی ؟
یا سوالتون زیاد ساده یا زیاد پیچیده
یعنی منظورتون اینه که یک آرایه فقط دارای خانه های زوج باشه ؟
مثلا آرایه اگر آرایه a رو داشته باشین
a[3] بی معنی باشه ؟
اگر هم منظورتون اینه که چجوری از فقط خونه های زوج آرایه یا فقط خونه های فرد اون استفاده کنین این که دیگه معلومه با استفاده از حلقه ها
مثلا :


int a[5] ;




int b;


for (b=0 ; b<5 ; b++)
{
if (b/2 = 0)
a[b] کارهای مورد نظر توسط

if (b/2 != 0)

a[b] کارهای مورد نظر توسط

}

Keyhan Clever
دوشنبه 25 خرداد 1388, 09:51 صبح
سلام
آرایه خودش به معنی صف هست و خودتون میدونید که یک صف در هر جای دنیا همون صفی هست که از یک شمارش شده و تا نقطه nام ادامه پیدا میکند.
در ضمن آرایه تو ++C از یک شروع نمیشه
از صفر شروع میشه و تا نقطه n ختم میشه

kh1387
دوشنبه 25 خرداد 1388, 11:50 صبح
متشکرم از همه دوستان که بنده رو یاری کردید.
منظورم رو واضحتر میگم
ببینید در پاسکال داریم:

max=8
a:array[-max+1..max-1]
این آرایه از خونه -7 تا 7 رو پیاده سازی میکنه
خب در زبان C چطوری این رو بنویسیم.
همینطور تولید اندیسهای زوج یا فرد
امیدوارم سؤالم این دفعه واضح باشه
متشکرم

tdkhakpur
دوشنبه 25 خرداد 1388, 13:02 عصر
در ضمن آرایه تو ++C از یک شروع نمیشه
از صفر شروع میشه و تا نقطه n ختم میشه
سلام
دوست عزیز از من ایراد گرفتی که چی بشود شما اول آن چیزی رو که من نوشتم قشنگ بخوان بعد نظر بده . من یک مثال برای این دوستمون زدم.
شما وقتی می روید برای صف نانوایی اگر به شما بگویند نفر چندم هستی میگویید نفر صفر هستم.
برای نظر دادن هیچ وقت عجله نکن اون یک مثال بود من زده بود.
کامیاب باشید.

tdkhakpur
دوشنبه 25 خرداد 1388, 13:06 عصر
متشکرم از همه دوستان که بنده رو یاری کردید.
منظورم رو واضحتر میگم
ببینید در پاسکال داریم:

max=8
a:array[-max+1..max-1]
این آرایه از خونه -7 تا 7 رو پیاده سازی میکنه
خب در زبان C چطوری این رو بنویسیم.
همینطور تولید اندیسهای زوج یا فرد
امیدوارم سؤالم این دفعه واضح باشه
متشکرم
ببینید باز هم این مثال شما مشکل شما رو حل نمیکند.
داخل c کد شما شبیه زیر هست


#define max 8
int ay[max*2];

اصلا ارتباطی به ساختن اندیکس زوج یا فرد ندارد
موفق باشید.

kh1387
دوشنبه 25 خرداد 1388, 13:54 عصر
با سلام
اصلا بذارید راحت بگم
کسی میدونه چطوری میشه یه آرایه ساخت با اندیسهای -7و-6و-5-و-4و-3و-2و-1و0و1و2و3و4و5و6و7
خواهش می کنم فقط دوستانی که در این زمینه متبحرند پاسخ بدهند.
متشکرم

Yasersadegh
دوشنبه 25 خرداد 1388, 15:40 عصر
کسی میدونه چطوری میشه یه آرایه ساخت با اندیسهای -7و-6و-5-و-4و-3و-2و-1و0و1و2و3و4و5و6و7
سلام دوست عزيز
به نظر من در سي يه همچين چيزي وجود نداره و تو زبان سي همونطور كه دوستانمون گفتن آرايه ها از 0 شروع ميشه!!:چشمک: حالا نمي گم كه غير ممكنه و اصلا نميشه ولي بهتره كه شما مشكلت رو بگي و اينكه برايه چي يه همچين كاري مي خواي بكني شايد دوستان راه حل ديگه اي براي شما پيشنهاد دادند!!:چشمک:
بازم به نظر من اگر يه همچين كاري برات واجبه و بايد حتما به اين روش عمل كني راه چاره نوشتن يه كلاس جديد هست كه در اون آرايه ها به اين شكل كار كنند، كه نوشتن كلاسش كار سختي هم نيست و به راحتي مي تونيد بنويسيد!!:لبخندساده:
ضمنا اگر تويه اينترنت هم بگرديد احتمالا مي تونيد كلاسش رو پيدا كنيد!!:لبخندساده:

tdkhakpur
دوشنبه 25 خرداد 1388, 16:56 عصر
با سلام
اصلا بذارید راحت بگم
کسی میدونه چطوری میشه یه آرایه ساخت با اندیسهای -7و-6و-5-و-4و-3و-2و-1و0و1و2و3و4و5و6و7
خواهش می کنم فقط دوستانی که در این زمینه متبحرند پاسخ بدهند.
متشکرم
سلام
عزیز من این کار شما بی معنی هست ببینید 1- یا -7 برای شما عددی منفی هست ولی داخل اندیکس آرایه به معنی عددیست مثبت و خیلی بزرگ.
دیگه چرا دنبال استاد میگردید همه این رو میدونند.
موفق باشید.

emad4000
پنج شنبه 28 خرداد 1388, 10:20 صبح
خود C همچین امکانی رو نداره
شما یا باید همونجوری که Yasersadegh گفتن یه کلاس جدید تعریف کنی و همچین operator ی براش تعریف کنی یا اینکه یه متد مبدل اندیس بنویسی
این دومی راحتتره ، فقط یه اسم متد قبل همه اندیس هات میاد :لبخندساده:



int f(int index)
{
return i+7;
}

...

cout<<arr[f(-7)];

kh1387
پنج شنبه 28 خرداد 1388, 11:51 صبح
خود C همچین امکانی رو نداره
شما یا باید همونجوری که Yasersadegh گفتن یه کلاس جدید تعریف کنی و همچین operator ی براش تعریف کنی یا اینکه یه متد مبدل اندیس بنویسی
این دومی راحتتره ، فقط یه اسم متد قبل همه اندیس هات میاد :لبخندساده:



int f(int index)
{
return i+7;
}

...

cout<<arr[f(-7)];

با سلام
متشکرم از پاسختان
اما این متدی که شما تعریف کردید، اعداد 0 و 7 و ... کلا مضرب هفت رو بر میگردونه
بازهم متشکرم

emad4000
جمعه 29 خرداد 1388, 13:51 عصر
با سلام
متشکرم از پاسختان
اما این متدی که شما تعریف کردید، اعداد 0 و 7 و ... کلا مضرب هفت رو بر میگردونه
بازهم متشکرم

سلام
اولا من منظورم كلي بود
شما مي تونين متد رو به هر شكل كه نيازه تعريف كنين
مثلا حتي مي تونيد از يه HashMap استفاده كنيد و براي هر انديس ورودي يه انديس خاص رو برگردونين و هزار روش ديگر
دوما متدي كه من نوشتم براي انديس هاي -7 الي بي نهايت جواب ميده (البته تو مثالم اشتباها به جاي index نوشتم i)
موفق باشيد

Keyhan Clever
شنبه 30 خرداد 1388, 10:38 صبح
سلام
دوست عزیز از من ایراد گرفتی که چی بشود شما اول آن چیزی رو که من نوشتم قشنگ بخوان بعد نظر بده . من یک مثال برای این دوستمون زدم.
شما وقتی می روید برای صف نانوایی اگر به شما بگویند نفر چندم هستی میگویید نفر صفر هستم.
برای نظر دادن هیچ وقت عجله نکن اون یک مثال بود من زده بود.
کامیاب باشید.
ببخشید
اصلا نمیتونستم ناراحتتون کنم
شرمنده ولی برنامه نویسی رو با نانوایی اشتباه گرفتید
فقط برای اطلاع عرض کردم که بدونین ++C نویس ها شاتر نیستن و ++C هم تنور نیست

SamaPic
شنبه 30 خرداد 1388, 10:59 صبح
با سلام.
دوست من به نظر من بهترین راه استفاده از map است.که البته فکر کنم توربو همچین چیزی نداشت.
ولی ساختش خیلی سخت نیست.

حامد مصافی
شنبه 30 خرداد 1388, 11:15 صبح
چنین امکانی به صورت مستقیم موجود نیست. اما می توانید به سادگی آن را پیاده سازی کنید. به شبه کد زیر توجه کنید.



public class Arr
{
int _arr[50];

public Arr();

public void setItem(int index, int value);
public int Iten(int index);

}

public Arr::Arr()
{
}

public int Arr::Iten(int index)
{
return _arr[index / 2];
}

public void Arr::setItem(int index, int value);
{
_arr[index / 2] = value;
}