شيفت دادن در آرايه

pa_darya

Member
در ++cدر آرايه ها چگونه يک خانه ميتوان به راست شيفت داد به طور مثال اگر آرايه ما باشد
5 4 3 2 1 بعد از شيفت به صورت مقابل شود4 3 2 1 5 برنامه را نوشتم ولی تمامی خانه ها را 1 می کند

#include<iomanip.h>
#include<iomanip.h>
void shift(int[],int);
const int arraysize=10;
int a[arraysize]={1,2,3,4,5,6,7,8,9,10};
int main()
{
cout<<"the array is:\n";
for(int i=0;i<arraysize;i++)
cout<<a<<setw(5);
cout<<endl;
shift(a,arraysize);
cout<<"the shift array is:\n";
for(int j=0;j<arraysize;j++)
cout<<a[j]<<setw(5);
return 0;
}
void shift(int b[],int sizeofarray)
{
for(int j=0;j<sizeofarray;j++)

if(j!=9)
b[j+1]=a[j];
else if(j==9)
b[0]=a[9];

}
 

the_king

مدیرکل انجمن
برای نوشتن کد تان در فروم حتما آنرا با استفاده از تگ
code.gif
قرار دهید تا هم خوانایی آن حفظ شود و هم چپ به راست نمایش یابد.

نکته اول :
در تابع ()shift قرار بود که با استفاده از پارامتر sizeofarray طول آرایه b را مشخص کنید، پس نباید بصورت مستقیم از
عدد 9 به عنوان آخرین اندیس آرایه استفاده می کردید، همچنین بکار گیری آرایه a درست نیست چون تابع را از حالت
عمومی به یک نسخه اختصاصی برای a تبدیل می کند.

نکته دوم :
در بکار گیری شرط else نیازی به چک کردن نبود، وقتی شرط "j برابر 9 نیست" برقرار نباشد پس حتما j برابر 9 است و نیازی
به یک if اضافه نیست.

نکته سوم :
الگوریتم تان نادرست بود. عناصر آرایه b بجز عنصر آخر بایستی با ترتیب آخر به اول شیف پیدا می کردند وگرنه در هر شیف
داده های بعدی را تخریب می کنیم. شما از اول به آخر شیف دادید.

کد:
#include<iomanip.h>
#include<iomanip.h>

void shift(int[],int);
const int arraysize=10;
int a[arraysize]={1,2,3,4,5,6,7,8,9,10};

int main()
{
	cout<<"the array is:\n";
	for(int i=0;i<arraysize;i++)
		cout<<a[i]<<setw(5);
	cout<<endl;
	shift(a,arraysize);
	cout<<"the shift array is:\n";
	for(int j=0;j<arraysize;j++)
		cout<<a[j]<<setw(5);
	return 0;
}

void shift(int b[],int sizeofarray)
{
	int last=b[sizeofarray-1];
	for(int j=sizeofarray-1;j>0;j--)
		b[j]=b[j-1];
	b[0]=last;
}
 

جدیدترین ارسال ها

بالا