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 عصر
احتمالاً استاد شما آقای هنرمند نیست ؟
از شانس من باشه که شما استاد هنرمندی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.