ورود

View Full Version : آرایه ها و ترتیب مارپیچی



Asiandesign
جمعه 01 آذر 1392, 17:24 عصر
سلام دوستان من یه برنامه ای نیخوام بنویسم مشکل دارم توش.
من یه آرایه 2 بعدی 5*5 دارم.
و از [0][0]array تا [5][5]array از اعداد 1 تا 25 تشکیل شده است. یعنی این :




1(0[0]) 2(0[1]) 3(0[2]) 4(0[3]) 5(0[4])


6(1[0]) 7(1[1]) 8(1[2]) 9(1[3]) 10(1[4])

11(2[0]) 12(2[1]) 13(2[2]) 14(2[3]) 15(2[4])

16(3[0]) 17(3[1]) 18(3[2]) 19(3[3]) 20(3[4])

21(4[0]) 22(4[1]) 23(4[2]) 24(4[3]) 25(4[4])



ولی میخوام اینطوری نمایش داده بشه یعنی به صورت مارپیچ:

1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9


از عدد 1 شروع بشه و بیاد و به صورت مارپیچ به داخل بیاد و تموم بشه - ممنون میشم امروز این کد روبدین چون خیلی لازممه

کدی که من نوشتم :

#include<iostream>
using namespace std;
int main()
{
int array[5][5];
int r=0;
for (int j=0;j<5;j++)
{
for (int i=0;i<5;i++)
{
r=r+1;
array[j][i]=r;
}


}
for (int j=0;j<5;j++)
{
for (int i=0;i<5;i++)
{
cout<<array[j][i]<<" ";
}
cout<<endl;
}

}

storm_saeed
جمعه 01 آذر 1392, 18:09 عصر
یعنی اول به ترتیب 1 تا 25 رو مقدار دهی کردی بعد میخوای مقداراش شبیه شکل بالا بشه؟

Asiandesign
جمعه 01 آذر 1392, 18:23 عصر
نه دوست عزیز نمیخوام به صورت مربع 5 در 5 چاپ بشه - یعنی نمایشش اینطوریه ولی جای مقادیرفرق داره - به خروجی نهایی که گذاشتم دقت کنید - از یک شروع شده به 5 رسیده بعدش اومده اونطوری پایین از 6 تا 9 بعدش برگشته و از 9 تا 13 شده و اومده از 13 تا 16 شده و برگشته به داخل یعنی مانند شکلی که میزارم

113133

Asiandesign
جمعه 01 آذر 1392, 18:27 عصر
یعنی اول به ترتیب 1 تا 25 رو مقدار دهی کردی بعد میخوای مقداراش شبیه شکل بالا بشه؟

بله - شکلشو گذاشتم میتونی ببینی

SilverLearn
جمعه 01 آذر 1392, 19:42 عصر
دوست عزیز از کد زیر استفاده نمایید :



void PrintArrayInSprial(int* squareArr, int size )
{
int level = (size + 1) >> 1;

int k = 0;

while(k < level){
int i = k;
int j = k;

while(j < size - k){
cout << setw(5) << squareArr[i * size + j];
j++;
}

j--;
i++;

while(i < size - k){
cout << setw(5) << squareArr[i * size + j];
i++;
}

i--;
j--;

while(j > k - 1){
cout << setw(5) << squareArr[i * size + j];
j--;
}

j++;
i--;

while(i > k){
cout << setw(5) << squareArr[i * size + j];
i--;
}
k ++;
}

cout << endl;
}

void PrintArray(int* squareArr, int size )
{
cout << "The array is" << endl;
for(int i = 0; i < size; ++i){
for(int j = 0; j < size; ++j){
cout << setw(5) << squareArr[i * size + j];
}
cout << endl;
}
cout << endl;

}

void IntializeArrayInSprial(int* squareArr, int size )
{
int level = (size + 1) >> 1;

int k = 0;
int m = 0;

while(k < level){
int i = k;
int j = k;

while(j < size - k){
squareArr[i * size + j] = m++;
j++;
}

j--;
i++;

while(i < size - k){
squareArr[i * size + j] = m++;
i++;
}

i--;
j--;

while(j > k - 1){
squareArr[i * size + j] = m++;
j--;
}

j++;
i--;

while(i > k){
squareArr[i * size + j] = m++;
i--;
}

k ++;
}
}


int main(int argc, char* argv[])
{
int* squareArr;

for(int i = 1; i < 6; ++i){
squareArr = new int[i * i];
IntializeArrayInSprial(squareArr, i);
PrintArray(squareArr, i);
PrintArrayInSprial(squareArr, i);

delete[] squareArr;
cout << "------------------------" << endl;
}

return 0;
}

Asiandesign
جمعه 01 آذر 1392, 19:57 عصر
دوست عزیز از کد زیر استفاده نمایید :



void PrintArrayInSprial(int* squareArr, int size )
{
int level = (size + 1) >> 1;

int k = 0;

while(k < level){
int i = k;
int j = k;

while(j < size - k){
cout << setw(5) << squareArr[i * size + j];
j++;
}

j--;
i++;

while(i < size - k){
cout << setw(5) << squareArr[i * size + j];
i++;
}

i--;
j--;

while(j > k - 1){
cout << setw(5) << squareArr[i * size + j];
j--;
}

j++;
i--;

while(i > k){
cout << setw(5) << squareArr[i * size + j];
i--;
}
k ++;
}

cout << endl;
}

void PrintArray(int* squareArr, int size )
{
cout << "The array is" << endl;
for(int i = 0; i < size; ++i){
for(int j = 0; j < size; ++j){
cout << setw(5) << squareArr[i * size + j];
}
cout << endl;
}
cout << endl;

}

void IntializeArrayInSprial(int* squareArr, int size )
{
int level = (size + 1) >> 1;

int k = 0;
int m = 0;

while(k < level){
int i = k;
int j = k;

while(j < size - k){
squareArr[i * size + j] = m++;
j++;
}

j--;
i++;

while(i < size - k){
squareArr[i * size + j] = m++;
i++;
}

i--;
j--;

while(j > k - 1){
squareArr[i * size + j] = m++;
j--;
}

j++;
i--;

while(i > k){
squareArr[i * size + j] = m++;
i--;
}

k ++;
}
}


int main(int argc, char* argv[])
{
int* squareArr;

for(int i = 1; i < 6; ++i){
squareArr = new int[i * i];
IntializeArrayInSprial(squareArr, i);
PrintArray(squareArr, i);
PrintArrayInSprial(squareArr, i);

delete[] squareArr;
cout << "------------------------" << endl;
}

return 0;
}


دوست عزیز ممنون از کدی که نوشتی اما این کد باید به شکلی ساده نوشته شود - چون این کد به صورت پروژه به استاد تحویل میشه که نمیتونم این کدهایی رو که شما نوشتی براش تشریح کنم چون چیزایی هستن که نخوندمک
و اینکه ما
حلقه ها و آرایه ها رو خوندیم و هیچ توابع یا فانکشن ها و شیگرایی اصلا نخوندیم . ممنون

SilverLearn
جمعه 01 آذر 1392, 20:01 عصر
این فقط استفاده از اشاره گرها هستش که به احتمال زیاد فکر کنم تا الان باید خونده باشینا....

و همچنین استفاده از فانکشن...

Asiandesign
جمعه 01 آذر 1392, 20:04 عصر
این فقط استفاده از اشاره گرها هستش که به احتمال زیاد فکر کنم تا الان باید خونده باشینا....

و همچنین استفاده از فانکشن...

نه فانکشن ها رو نخوندیم - استاد این پروژه رو با استفاده از حلقه و آرایه ها خواسته.
اگر میشود خوشحال میشم کد بهینه رو قرار بدید. بازم ممنون

SilverLearn
جمعه 01 آذر 1392, 20:07 عصر
پس لینک زیر رو ببینید می تونه خیلی بهتون کمک کنه


http://www.geeksforgeeks.org/print-a-given-matrix-in-spiral-form/

Asiandesign
جمعه 01 آذر 1392, 20:30 عصر
پس لینک زیر رو ببینید می تونه خیلی بهتون کمک کنه


http://www.geeksforgeeks.org/print-a-given-matrix-in-spiral-form/

ممنون یه مورد داشت که میتونست به من کمک کنه که اونم مرتب سازی آرایه ها بود یعنی خروجی منو مرتب کرده و به صورت کوچیک به بزرگ نشون میداد.

SilverLearn
جمعه 01 آذر 1392, 20:35 عصر
خوب دو تا لینک زیر رو هم امتحان کنید :

http://cperea.com/programming/print-numbers-in-a-spiral-in-c/

http://stackoverflow.com/questions/726756/print-two-dimensional-array-in-spiral-order/7949751#7949751

Asiandesign
جمعه 01 آذر 1392, 20:47 عصر
آره این به دید میخوره ولی از خوش نمیشه استفاده کرد چون چیزایی توش استفاده کرده که نمیشه به استاد دادش - و در ضمن یه سوال cout چرا کار نمیکنه من کتابخانه iostram رو هم دادم

SilverLearn
جمعه 01 آذر 1392, 20:51 عصر
خوب این ها مثال هایی بود که شما نحوه نوشتن برنامتون رو دریابید و خودتون باید نسبت به چیزی که میخواین تغییرش بدین ...

iostram درست نیست
iostream درست هست

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

Asiandesign
جمعه 01 آذر 1392, 20:56 عصر
خوب این ها مثال هایی بود که شما نحوه نوشتن برنامتون رو دریابید و خودتون باید نسبت به چیزی که میخواین تغییرش بدین ...

iostram درست نیست
iostream درست هست

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

آق ببخشید درسته من std رو ننوشته بودم - شرمنده

Asiandesign
جمعه 01 آذر 1392, 21:08 عصر
و این که
vector<vector<int> > matrix = createMatrix(size);
این کد رو نمی فهمم

farhad14
جمعه 01 آذر 1392, 21:58 عصر
احتمالاً استاد شما آقای هنرمند نیست ؟

Asiandesign
جمعه 01 آذر 1392, 22:25 عصر
احتمالاً استاد شما آقای هنرمند نیست ؟

از شانس من باشه که شما استاد هنرمندی