نقطه ی زین اسبی در برنامه نویسی مشابه نقطه ی زین اسبی در ریاضات است که همه اسم آن را در ریاضی عمومی ۲ میشنوند.
نقطه ی زین اسبی در برنامه نویسی (saddle point): به زبان ساده اگر در یک آرایه ی دو بعدی (ماتریس) نقطه ای داشته باشیم که در سطر خودش کمترین مقدار و در ستون خودش بیشترین مقدار را داشته باشد آن را نقطه ی زین اسبی میگویند.
برای مثال عدد ۳ که با *مشخص شده, نقطه ی زین اسبی است.
۱ ۲ ۳ ۲
۵ ۵ ۴ *۳
۲ ۰ ۱ ۲
نکته: یک ماتریس ممکن است نقطه ی زین اسبی نداشته باشد یا بیش از یکی داشته باشد پس در تشخیص نقطه ی زین اسبی باید تمام نقاط بررسی شوند.
هدف از ارائه ی این سوال آشنایی با آرایه ی دوبعدی پویا و تابع است.
ورودیهای تابع به ترتیب اشاره گر به ابتدای آرایه ی دو بعدی, اندازه ی ابعاد آرایه و طول و عرض نقطه ای که زین اسبی بودن آن را بررسی میکنیم.
یعنی روش حل به این شکل است که به ازای هر i و j که به عنوان دو ورودی در آرگومان تابع قرار میگیرند مینیمم بودن مقدار در سطر i ام و ماکزیمم بودنش در ستون j ام بررسی میشود.
#include <iostream> using namespace std; int issaddle(int **table, int x, int y, int i, int j) { bool is_max=true, is_min=true; for (int k = 0; k < y; k++) { if (table[i][k] < table[i][j]) { is_min = false; return 0; } } for (int k = 0; k < x; k++){ if (table[k][j] > table[i][j]) { is_max = false; return 0; } } return 1; } int main(void){ int **table; bool none = true; int x, y; cout<<"Enter dimensions:"<<endl<<"x= "; cin>>x; cout<<"y= "; cin>>y; table = new int * [x]; for (int i = 0; i < x; i++) { table[i] = new int [y]; } cout<<"enter the values in turn using space between them."<<endl; for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { cin>>table[i][j]; } } cout<<endl<<"----------"<<endl; for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { if (issaddle(table, x, y, i, j)==1) { cout<<"table["<<i<<"]["<<j<<"]="<<table[i][j]<<endl; none = false; } } } if (none) { cout<<"there is no saddle point in the table."<<endl; } cin.get(); }