Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.
Закрыт 2 года назад.
```C#
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Calculator
{
/// <summary>
/// Description of Form1.
/// </summary>
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
void PictureBox1Paint(object sender, PaintEventArgs e)
{
}
void graphics()
{
const double PI = 3.14159256;
double shag = 0.1;
double mashtab = 30;
int fillHeight = 150;
int fillWight = 500;
int otstup = 0;
Graphics g = this.CreateGraphics();
Pen pen = new Pen(Color.Black);
Pen pe = new Pen(Color.Red);
int n = Convert.ToInt32(4*PI/shag);
Point[] pointSin = new Point[n];
int p = int.Parse(textBox3.Text);
for(double i = 0; i < 4 * PI; i += shag)
{
pointSin[p] = new Point(Convert.ToInt32(i*mashtab+otstup),
Convert.ToInt32(Math.Sin(i)*mashtab+(fillHeight / 2) + otstup));
p++;
}
g.DrawCurve(pe, pointSin);
g.DrawLine(pen, 250, 0, 250, 500);
g.DrawLine(pen, 0, 250, 500, 250);
}
void Button1Click(object sender, EventArgs e)
{
graphics();
}
}
}
помогити... заранее спасибо)
Приветствую Alexey Kosarev. Субъективно конечно, но для начала - когда вылетает та или иная ошибка, попробуй её загуглить. Если не удалось, то обращайся на форумы или специализированные сайты, но обязательно указывайте:
Скопировал Ваш код и проверил, у меня выбило ошибку:
Обращу внимание, что при вводе p = 5
, то во время работы Вашего цикла, происходит реально выход за границы массива. Массив имеет 126 элементов
, а p = 130
.
Решение, возможно не верное(добавил в цикл проверку на выход за границы массива).
void graphics()
{
const double PI = 3.14159256;
double shag = 0.1;
double mashtab = 30;
int fillHeight = 150;
int fillWight = 500;
int otstup = 0;
Graphics g = this.CreateGraphics();
Pen pen = new Pen(Color.Black);
Pen pe = new Pen(Color.Red);
int n = Convert.ToInt32(4 * PI / shag);
double test = 4 * PI;
Point[] pointSin = new Point[n];
int p = int.Parse(textBox1.Text);
for (double i = 0; i <= 4 * PI && p < n; i += shag) // добавляем проверку, не выходит ли наш индекс за границы массива.
{
pointSin[p] = new Point(Convert.ToInt32(i * mashtab + otstup),
Convert.ToInt32(Math.Sin(i) * mashtab + (fillHeight / 2) + otstup));
p++;
}
g.DrawCurve(pe, pointSin);
g.DrawLine(pen, 250, 0, 250, 500);
g.DrawLine(pen, 0, 250, 500, 250);
}
Обращу внимание, у Вас 126 элементов, при вводе P
у Вас P = введеному числу
, и P++
будет выполняться пока i <= 4 * PI
.
По этому у Вас P
всегда выходил за границы массива.
Проверка на P < N
- не лучшее решение, но решает Вашу проблему.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
используюNet Framework (compact Edition) для мобильного приложения
Работаю над задачей перевода формата даты ячейки Excel-я в python datetime форматНашел на английском stackoverflow подходящую реализацию перевода C# формата...
Пробовал сам сделать, но C# не может, такие большие числа обрабатывать правильноНа Python все ок работает