Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить проблему, пожалуйста!

| StAnger | Ученик (156), на голосовании 1 год назад
ошибка возникает на втором вхождении в цикл while, Индекс за пределами диапазона - C#


ОШИБКУ пишет вот в этой строке: dataGridView1.Rows[i].Cells[1].Value = Convert.ToString(yt);

Сам код:
k = dataGridView1.ColumnCount = 2;


if (k != 0)
{
for (i = 0; i < k; i++)
{
dataGridView1.Columns.Clear();
}

dataGridView1.Columns.Add("X", "X");
dataGridView1.Columns.Add("Y", "Y");


dataGridView1.Rows.Add(Math.Ceiling(((xk - xn) / xh) + 1));
dataGridView1.Rows[0].Cells[0].Value = Convert.ToString(" x");
dataGridView1.Rows[0].Cells[1].Value = Convert.ToString(" y");


x = xn;
ymax = -1.8e307; ymin = 1.8e307;
while (x <= xk)
{

if (x <= 0) { y = Math.Log10(Math.Abs(x + 1)) + Math.Sqrt(3 * Math.Abs(x)); }
else
if (x <= a) { y = Math.Sin(x * x + 3 * x); }
else
if (x > a) { y = (Math.Log10(Math.Abs(x)) * Math.Log10(Math.Abs(x))) + Math.Sqrt(x + 3); }

dataGridView1.Rows[i].Cells[0].Value = Convert.ToString(x);

yt = Math.Ceiling(y * 100) / 100;

dataGridView1.Rows[i].Cells[1].Value = Convert.ToString(yt);


if (y > ymax) ymax = Math.Ceiling(y * 100) / 100;
if (y < ymin) ymin = Math.Ceiling(y * 100) / 100;
x += xh;

}

textBox5.Text = Convert.ToString(ymax);
textBox6.Text = Convert.ToString(ymin);
}
}
else
{
MessageBox.Show("Заполните пожалуйста данные", "Ошибка ввода данных",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
Голосование за лучший ответ
нетц Профи (528) 1 год назад
k = dataGridView1.ColumnCount = 2;

if (k != 0)
{
for (i = 0; i < k; i++)
{
dataGridView1.Columns.Clear();
}

dataGridView1.Columns.Add("X", "X");
dataGridView1.Columns.Add("Y", "Y");

dataGridView1.Rows.Add(Math.Ceiling(((xk - xn) / xh) + 1));
dataGridView1.Rows[0].Cells[0].Value = Convert.ToString("x");
dataGridView1.Rows[0].Cells[1].Value = Convert.ToString("y");

x = xn;
ymax = -1.8e307;
ymin = 1.8e307;
i = 1; // Установка i=1 вместо i=0

while (x <= xk)
{
if (x <= 0)
{
y = Math.Log10(Math.Abs(x + 1)) + Math.Sqrt(3 * Math.Abs(x));
}
else if (x <= a)
{
y = Math.Sin(x * x + 3 * x);
}
else if (x > a)
{
y = (Math.Log10(Math.Abs(x)) * Math.Log10(Math.Abs(x))) + Math.Sqrt(x + 3);
}

dataGridView1.Rows[i].Cells[0].Value = Convert.ToString(x);

yt = Math.Ceiling(y * 100) / 100;

dataGridView1.Rows[i].Cells[1].Value = Convert.ToString(yt);

if (y > ymax)
ymax = Math.Ceiling(y * 100) / 100;
if (y < ymin)
ymin = Math.Ceiling(y * 100) / 100;
x += xh;
i++;
}

textBox5.Text = Convert.ToString(ymax);
textBox6.Text = Convert.ToString(ymin);
}
else
{
MessageBox.Show("Заполните пожалуйста данные", "Ошибка ввода данных",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
| StAnger |Ученик (156) 1 год назад
не помогло. Есть еще варианты?
Похожие вопросы