ورود

View Full Version : مبتدی: ارایه با پوینتر



disiba
شنبه 29 بهمن 1390, 20:55 عصر
سلام دوستان
من 1 زیربرنامه از اینترنت دانلود کردم ولی چون مبتدی هستم نمیدونم که چطوری باید توی main اونو صدا بزنم . زیربرنامه 1 ماتریس 2 بعدی رو می گیره و بعد از عملیات ماتریس 2 بعدی دیگه ای رو به برنامه اصلی بر میگردونه.

نکته دیگه اینه که min و mout دو بعدی هستند ولی توی زیر برنامه بصورت یک بعدی با اون برخورد میشه .
ممنون میشم که منو راهنمایی کنید
متن زیربرنامه : ( موقع کپی پیست شکل برنامه بهم میریزه )



void mat(double *Min, double *Mout, int actualsize)
{
int i, j, k;
double sum,x;

for(i=0; i<actualsize*actualsize; i++)
{ Mout[i]=Min[i]; }

for(i=0; i<actualsize; i++)
{
j=i*actualsize+i;
if((Mout[j]<1e-12)&&(Mout[j]>-1e-12)){ Mout[j]=1e-12; }
}

if (actualsize <= 1) return;

for (i=1; i < actualsize; i++)
{
Mout[i] /= Mout[0];
}

for (i=1; i < actualsize; i++)
{
for (j=i; j < actualsize; j++)
{
sum = 0.0;
for (k = 0; k < i; k++)
{
sum += Mout[j*actualsize+k] * Mout[k*actualsize+i];
}
Mout[j*actualsize+i] -= sum;
}
if (i == actualsize-1) continue;
for (j=i+1; j < actualsize; j++)
{
sum = 0.0;
for (k = 0; k < i; k++)
{
sum += Mout[i*actualsize+k]*Mout[k*actualsize+j];
}
Mout[i*actualsize+j] = (Mout[i*actualsize+j]-sum) / Mout[i*actualsize+i];
}
}
for ( i = 0; i < actualsize; i++ )
{
for ( j = i; j < actualsize; j++ )
{
x = 1.0;
if ( i != j )
{
x = 0.0;
for ( k = i; k < j; k++ )
{
x -= Mout[j*actualsize+k]*Mout[k*actualsize+i];
}
}
Mout[j*actualsize+i] = x / Mout[j*actualsize+j];
}
}
for ( i = 0; i < actualsize; i++ )
{
for ( j = i; j < actualsize; j++ )
{
if ( i == j ) continue;
sum = 0.0;
for ( k = i; k < j; k++ )
{
sum += Mout[k*actualsize+j]*( (i==k) ? 1.0 : Mout[i*actualsize+k] );
}
Mout[i*actualsize+j] = -sum;
}
}
for ( i = 0; i < actualsize; i++ )
{
for ( j = 0; j < actualsize; j++ )
{
sum = 0.0;
for ( k = ((i>j)?i:j); k < actualsize; k++ )
{
sum += ((j==k)?1.0:Mout[j*actualsize+k])*Mout[k*actualsize+i];
}
Mout[j*actualsize+i] = sum;
}
}
}

rezaricky
یک شنبه 30 بهمن 1390, 12:53 عصر
int main()
{
const int msize=5;
double matris1[msize][msize];
double matris2[msize][msize];
//مقدار دهي به ماتريس
mat((double *) matris1,(double *)matris2,msize);

}

ارایه های دو بعدی هم مثل ارایه های یک بعدی در حافظه اصلی قرار می گیرند،به همین خاطر میتوان با انها مانند ارایه های یک بعدی رفتار کرد

shahmohammadi
یک شنبه 30 بهمن 1390, 17:34 عصر
جالبه.
تا حالا تبديل آرايه هاي چند بعدي به هم رو نديده بودم.