PDA

View Full Version : آموزش: کمک! (ماتریس)



h_zamani
یک شنبه 04 بهمن 1388, 21:59 عصر
سلام بچه ها
این یه برنامه هست که یک سری مقادیر اولیه میگیره و با توجه به شرایط سطر و ستون به وسیله ی اون مقادیر اولیه یک ماتریس مینویسه.مشکل برنامه اینه وقتی برای سطر و ستون شرط میگذارم نمی تونه مقادیری رو به آرایه های متناظر اون سطر و ستونها نسبت بده.:ناراحت:
ممنون میشم اگه کمک کنید کد برنامه را درست کنم .:لبخندساده:


int R, L, M, C, S , row=0, clmn=0, i, j;
float Z=1 , up , down;
Console.Write("how many points for right side?");
R = Convert.ToInt32(Console.ReadLine());
Console.Write("how many points for left side?");
L = Convert.ToInt32(Console.ReadLine());
Console.Write("how many points for middle?");
M = Convert.ToInt32(Console.ReadLine());
Console.Write("how many points on erect lines?");
C = Convert.ToInt32(Console.ReadLine());
Console.Write("how many rows between up and down?");
S = Convert.ToInt32(Console.ReadLine());
Console.Write("what is potential of up brede?");
up = Convert.ToInt32(Console.ReadLine());
Console.Write("what is potential of down brede?");
down = Convert.ToInt32(Console.ReadLine());

float[,] a = new float[row, clmn];
float[,] b = new float[row, clmn];
row = S + C + 1;
clmn = R + M + L - 2;
for (i = 0; i < row; ++i)
for (j = 0; j < clmn; ++j)
{
if ((j == L - 1) ||( j == L - M - 2))
Z = (up - down) / (row - (2 * C) + 1);
else
Z = (up - down) / (row - C);
}
for (i = 0; i < row; ++i)
for (j = 0; j < clmn; ++j)
{
if ((j >= 0 && j < L - 1) || (j >= L + M - 3 && j < clmn))
{

a[i, j] = up + (C - i - 1)*Z;
}
else if ((j == L )|| (j == L + M - 2))
{
if (i >= 0 && i < C)
a[i, j] = 0;
else if (i >= C && i < row - C)
a[i, j] = up + (C - i - 1) * Z;
else
a[i, j] = down;
}
else
{
if (i >= 0 && i < row - C + 1)
a[i, j] = up - (i * Z);
else
a[i, j] = 0;
}

for (int s = 0; s < row; ++s)
{
for (int r = 0; r < clmn; ++r)
{
Console.Write("{0}\t", a[s, r]);
}
Console.WriteLine("\n");
}
}

SMRAH1
یک شنبه 04 بهمن 1388, 22:51 عصر
سلام
متغیر های row و clmn رو باید قبل از تخصیص آرایه A و b ،تنظیم کنی.
در ضمن از تور رفتگی ها (indent) برای نمایش مناسب برنامه استفاده کن (تا حداقل خودت بفهمی چی رو کجا نوشتی).
برنامه تصحیح شده به این شکل است :


int R, L, M, C, S , row=0, clmn=0, i, j;
float Z=1 , up , down;
Console.Write("how many points for right side?");
R = Convert.ToInt32(Console.ReadLine());
Console.Write("how many points for left side?");
L = Convert.ToInt32(Console.ReadLine());
Console.Write("how many points for middle?");
M = Convert.ToInt32(Console.ReadLine());
Console.Write("how many points on erect lines?");
C = Convert.ToInt32(Console.ReadLine());
Console.Write("how many rows between up and down?");
S = Convert.ToInt32(Console.ReadLine());
Console.Write("what is potential of up brede?");
up = Convert.ToInt32(Console.ReadLine());
Console.Write("what is potential of down brede?");
down = Convert.ToInt32(Console.ReadLine());

row = S + C + 1;
clmn = R + M + L - 2;
float[,] a = new float[row, clmn];
float[,] b = new float[row, clmn];
for (i = 0; i < row; ++i)
for (j = 0; j < clmn; ++j)
{
if ((j == L - 1) ||( j == L - M - 2))
Z = (up - down) / (row - (2 * C) + 1);
else
Z = (up - down) / (row - C);
}
for (i = 0; i < row; ++i)
for (j = 0; j < clmn; ++j)
{
if ((j >= 0 && j < L - 1) || (j >= L + M - 3 && j < clmn))
a[i, j] = up + (C - i - 1)*Z;
else if ((j == L )|| (j == L + M - 2))
{
if (i >= 0 && i < C)
a[i, j] = 0;
else if (i >= C && i < row - C)
a[i, j] = up + (C - i - 1) * Z;
else
a[i, j] = down;
}
else
{
if (i >= 0 && i < row - C + 1)
a[i, j] = up - (i * Z);
else
a[i, j] = 0;
}

for (int s = 0; s < row; ++s)
{
for (int r = 0; r < clmn; ++r)
Console.Write("{0}\t", a[s, r]);
Console.WriteLine("\n");
}
}

موفق باشید

h_zamani
یک شنبه 04 بهمن 1388, 23:11 عصر
دوست گرامی ولی متاسفانه این فقط یک سطر را نشون میده!

SMRAH1
دوشنبه 05 بهمن 1388, 11:39 صبح
سلام
من که دقیقا نمودونم این الگوریتم چیه و هر کدام از متغیر ها چه معنی دارند (و کلا برنامه می خواد چکار کنه).
راه نمایی دفعه قبل هم به خاطر یک اشکال کوچک در منطق برنامه بود.
اگر اطلاعات تکمیلی بگذارید بهتر میشه کمکتون کرد.
موفق باشید