PDA

View Full Version : مبتدی: بدست آوردن ستون یک آرایه دو بعدی



sajioo
دوشنبه 17 شهریور 1393, 15:09 عصر
دوستان سلام
شاید این سوال مبتدی به نظر برسه اما من بلدش نبودم
یک آرایه دوبعدی داریم
چطورمی تونیم بدون حلقه به عناصر موجود بر روی یک ستون دسترسی داشته باشیم.
مثلا در زبان سی اگر اشتباه نکنم این کد جواب میده



arr[][0]=22

در کد بالا در ستون صفرم میاد در همه ی خونه هاش عدد 22 رو قرار میده
تو دلفی همین کد چطور نوشته میشه:اشتباه:؟

rahnema1
دوشنبه 17 شهریور 1393, 17:21 عصر
سلام
توی زبان c یا ++c این چنین امکانی وجود نداره. تنها در هنگام اعلان اولیه آرایه و هنگام مقدار دهی اولیه اون میشه مثلا این جور نوشت
int arr[][5]={22};
یک آرایه با یک سطر و 5 ستون درست می کنه و عنصر با اندیس صفر و صفر را مقدار 22 میده و بقیه خانه ها را صفر قرار میده
این شکلی که شما نوشتید بیشتر در خصوص زبانهای تفسیر شده مثل متلب به کار میره اما نکته مهم اینه که پیاده سازی این روشها با استفاده از حلقه در سی پلاس پلاس انجام شده

sajioo
دوشنبه 17 شهریور 1393, 18:06 عصر
پس یعنی تو دلفی ما نمی تونیم هنگام اجرای برنامه ، به طور مثال تمام خانه های اول یک آرایه رو مثلا 2 قرار بدیم. البته بدون حلقه:متفکر:

rahnema1
دوشنبه 17 شهریور 1393, 22:26 عصر
البته در ++c میشه با overload کردن عملگر ها از جمله عملگر [] این کار را انجام داد. در مورد دلفی بذارید اساتید عزیز دلفی کار پاسخ بدهند

در مثال زیر این کار با ++c انجام شده اگرچه هنوز نواقصی در برنامه هست
یکبار یک ماتریس 5 در 6 درست می کنیم و از سطر 2 تا 3 و از ستون 2 تا 3 برابر 7 قرار می دهیم
در مورد دومی ستون دوم مقدار 8 می گیرد

#include <vector>
#include <iostream>
#include <initializer_list>

using namespace std;
struct Matrix
{
typedef vector<vector<int> > matrix;
typedef vector<int> vec;
vec indexmat;
vec indexvec;
matrix mymat;
int ctr=0;
Matrix(int rows,int cols):mymat(matrix(rows,vec(cols))) {}
Matrix& operator[](std::initializer_list<int> il)
{
if(++ctr==1) indexmat=il;
else indexvec=il;
return *this;
}
Matrix& operator=(const int& val)
{
int m1,m2,v1,v2;
if (indexmat.size())
{
m1=indexmat[0];
m2=indexmat[indexmat.size()-1];
}
else
{
m1=0;
m2=mymat.size()-1;
}
if (indexvec.size())
{
v1=indexvec[0];
v2=indexvec[indexvec.size()-1];
}
else
{
v1=0;
v2=mymat[0].size()-1;
}
for(int i=m1; i<=m2; i++)
for(int j=v1; j<=v2; j++)
mymat[i][j]=val;
return *this;
}
friend ostream& operator<<(ostream& stream, Matrix& mtx)
{
for(int i=0; i<mtx.mymat.size(); i++)
{
for(int j=0; j<mtx.mymat[0].size(); j++)
stream<<mtx.mymat[i][j]<<" ";
stream<<endl;
}
return stream;
}
};
int main()
{
Matrix m(5,6);
m[{2,3}][{2,3}]=7;
cout<<m;
Matrix m1(5,6);
m1[ {}][{2}]=8;
cout<<m1;
}

sajioo
دوشنبه 17 شهریور 1393, 22:36 عصر
آیا کلا در دلفی نمیشه از یک آرایه دو بعدی دوتا آرایه ی یک بعدی جدا ساخت؟
برای مثال یک بعد آرایه در یک آرایه یک بعدی قرار بگیره بعد دیگرش در آرایه ی یک بعدی دیگه
میشه؟
البته بدون حلقه:چشمک: