محاسبه و نمایش همسایه های خانه وسط ماتریس - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

محاسبه و نمایش همسایه های خانه وسط ماتریس

+1 امتیاز

سلام.

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

 

c++, الگوریتم, هوش مصنوعی

سوال شده مهر 14, 1393  بوسیله ی parisa (امتیاز 46)   6 8 12
ویرایش شده دی 30, 1393 بوسیله ی haniye sarbazi

1 پاسخ

+2 امتیاز

سلام

امیدوارم این کد بتونه براتون مفید باشه

#include <iostream>
#include <conio.h>
#define ROW  9
#define COLUMN  9
using namespace std;

int n_cmpl(int &);                  //تعیین تعداد چرخش کامل حول درونی ترین خانه ماتریس
void print_a1( int, int, int [][COLUMN]);  //دسترسی به خانه های اطراف درونی ترین خانه(وقتی که به چرخش کامل نیاز است)
void print_a2( int, int, int, int[][COLUMN]); //دسترسی به خانه های اطراف درونی ترین خانه(زمانی که به چرخش کامل نیاز نیست)
int _tmain(int argc, _TCHAR* argv[])
{
	int a[ROW][COLUMN] = 
	
	{   
		{ 69, 70, 71, 72, 73, 74, 75, 76, 77}, 
        { 68, 40, 41, 42, 43, 44, 45, 46, 78}, 
        { 67, 39, 19, 20, 21, 22, 23, 47, 79}, 
        { 66, 38, 18,  6,  7,  8, 24, 48, 80}, 
        { 65, 37, 17,  5,  0,  1,  9, 25, 49}, 
        { 64, 36, 16,  4,  3,  2, 10, 26, 50}, 
        { 63, 35, 15, 14, 13, 12, 11, 27, 51}, 
        { 62, 34, 33, 32, 31, 30, 29, 28, 52}, 
        { 61, 60, 59, 58, 57, 56, 55, 54, 53}
		
	}; 

    int andis = (int)ROW / 2;             //محاسبه اندیس درونی ترین خانه ماتریس
	
	int number;                           //ذخیره تعداد همسایه ها برای جست و جو
	cout << "Please enter your number: ";
	cin >> number;                        //خواندن تعداد همسایه ها

	int __cmpl = n_cmpl(number);          //ذخیره تعداد چرخش های کامل حول درونی ترین خانه ماتریس 
    int __half = number;                  //تعداد خانه هایی که باید جست و جو گردد اما به یک چرخش کامل نمیرسد
	
	if(__cmpl > 0)                 
	{
		for(int i = 1; i <= __cmpl; ++i)  //فراخوانی و ارسال اعداد به تفکیک، به تابع دسترسی به حول درونی ترین خانه اول 1 بعد 2 و ...
		{
			 print_a1(andis, i, a);       //i = 1 print ===> 1 2 3 4 5 6 7 8    i = 2 print ===> 9 10 11 12 ... 24
		}
	}
    
	if(__half > 0)
	{
       print_a2(andis, __cmpl + 1, __half, a);
	}

	getch();
	return 0;
}
//***********************************************
//***********************************************


int n_cmpl(int &n)
{
	   int x = 1		      //تعیین تعداد خانه های هر دور 8 * 1 => 8 , 8 * 2 => 16 , 8 * 3 => 24 x => 1, 2, 3, ...
	   , ncmpl = 0;           //ذخیره تعداد دورهای کامل

	   while(n >= x * 8)
	   {
		  n = (n) - (x * 8);  //تعداد خانه های هر چرخش کامل از تعداد همسایه هایی که باید گردش
			  ++ncmpl;        //پیدا کند کم میشود، n = 24, x = 1 ==>>  24 - 1 * 8 => n = 16, ncmpl = 1(یک دور کامل)
		  ++x;			      //n = 16, x = 2 ==> 16 - 2 * 8 => n = 0, ncmpl = 2(دو دور کامل)
	   }
   return ncmpl;
}
//***********************************************
//***********************************************


void print_a1(int ads, int dk, int a[][COLUMN])
{ 

	int cmpl, row, column, counter = 0;
	
	cmpl = dk;          //dk ==> i نماد هر چرخش کامل    
	row = ads;          //ads ==> andis    اندیس درونی ترین خانه ارایه
	column = ads;

    column += cmpl;
/*------------------------------------------*/ //چاپ همسایه ی نیمه سمت راست خانه مورد نظر
	
	counter  = 0;
    while(counter <= cmpl)
	{
		cout << a[row + counter][column] << " ";
		++counter;
	}
/*------------------------------------------*/ //چاپ همسایه های سمت پایین خانه مورد نظر
	
	counter = 1;
    row += cmpl;
    while(counter <=  cmpl * 2)
	{
        cout << a[row][column - counter] << " ";
		++counter;
	}
/*------------------------------------------*/  //چاپ همسایه ها ی سمت چپ خانه مورد نظر
	
	counter = 1;
	column -= cmpl * 2;
	while(counter <= cmpl * 2)
	{
		cout << a[row - counter][column] << " ";
		++counter;
	}
/*-----------------------------------------*/    //چاپ همسایه های بالای خانه مورد نظر
	 
	counter = 1;
	row -= cmpl * 2;
	while(counter <= cmpl * 2)
	{
		cout << a[row][column + counter] << " "; //افزایش اندیس ستون در اینجا لحاظ نگردیده بود که در شرط پایین در قسمت "ویرایش" لحاظ گردیده است
		++counter;
	}
/*-----------------------------------------*/    //چاپ نیمی از همسایه های راست خانه مورد نظر
	
	if(cmpl - 1 != 0)
	{
		counter = 1;
			column += cmpl * 2;                  //ویرایش           
			while(counter <= (cmpl - 1))
			{
				cout << a[row + counter][column] << " ";
				++counter;
			}
	}
		return ;
}
//*******************************************
//*******************************************


void print_a2(int ads, int dk, int dn, int a[][COLUMN])
{ 

	int cmpl, row, column, counter = 0;
	
	cmpl = dk;        //ds ==> i نماد هر چرخش کامل
	row = ads;        //ads ==> andis اندیس درونی ترین خانه آرایه
	column = ads;

    column += cmpl;
/*------------------------------------------*/ //چاپ همسایه ی نیمه سمت راست خانه مورد نظر
	
	counter  = 0;
    while(counter <= cmpl)
	{
		cout << a[row + counter][column] << " ";
		++counter;
		
		--dn;
		if(dn == 0)
		  break;
	}
/*------------------------------------------*/ //چاپ همسایه های سمت پایین خانه مورد نظر
	
	if(dn > 0)
	{
		counter = 1;
		row += cmpl;
		while(counter <=  cmpl * 2)
		{
			cout << a[row][column - counter] << " ";
			++counter;
			
			--dn;
			if(dn == 0)
			break;
		}
	}
/*------------------------------------------*/ //چاپ همسایه ها ی سمت چپ خانه مورد نظر
	
	if(dn > 0)
	{
		counter = 1;
		column -= cmpl * 2;
		while(counter <= cmpl * 2)
		{
			cout << a[row - counter][column] << " ";
			++counter;
			
			--dn;
			if(dn == 0)
			break;
		}
	}
/*-----------------------------------------*/ //چاپ همسایه های بالای خانه مورد نظر
	
	if(dn > 0)
	{
		counter = 1;
		row -= cmpl * 2;
		while(counter <= cmpl * 2)
		{
			cout << a[row][column + counter] << " ";
			++counter;

			--dn;
			if(dn == 0)
			break;
		}
	}
/*-----------------------------------------*/ //چاپ همسایه های نیمه راست خانه مورد نظر
	
	if(dn > 0)
	{
		 if(cmpl - 1 > 0)
		 {
			counter = 1;
				column += cmpl * 2;
				while(counter <= (cmpl - 1))
				{
					cout << a[row + counter][column] << " ";
					++counter;

					--dn;
					if(dn == 0)
					break;
				}
	     }
	}

		return ;
}

 

پاسخ داده شده مهر 16, 1393 بوسیله ی امیدوار (امتیاز 872)   21 63 76
ویرایش شده مهر 18, 1393 بوسیله ی امیدوار
...