Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
6 / 6 / 0
Регистрация: 11.05.2013
Сообщений: 31
1

Ошибка IndexOutOfRangeException в присвоении значения массиву

16.01.2016, 21:09. Показов 841. Ответов 12

Author24 — интернет-сервис помощи студентам
Привет, разбираюсь с сигналами в C#.Выходит ошибка:
Необработанное исключение типа "System.IndexOutOfRangeException" в TDL of ACS.exe

Дополнительные сведения: Индекс находился вне границ массива.
Массив x необходим для дальнейшей работы
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
            double A = 0.6;
            double dt = 0.01;
            const int N = 10;
            double f = 0.5;
            double T = 1 / f;
            double F = Math.PI / 4;
            int j = 1;
            double k = 0.5;
            double b = 1;
            double c = 0.3;
            int l = 1;
            double [] x;
            x = new double[N];
            
            for (double i = 1; i < N; ) 
            {
                double y = A * Math.Sin(2*Math.PI*f*i);
                if (y >= 0)
                {
                    y = A;
                }
                else
                {
                    y = 0;
                }
                this.chart1.Series[0].Points.AddXY(i, y);
                x[j] = y;
                j++;
                i = i + dt;
            }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2016, 21:09
Ответы с готовыми решениями:

Segfault при присвоении значения массиву
Доброго времени суток. #include &lt;stdio.h&gt; void del_char(char *str0, const char *str1); /*...

Ошибка в присвоении массиву рандомных чисел в типизированном файле
1. Создать типизированный файл, содержащий 18 целых чисел. Найти сумму первого и второго чисел...

Ошибка 380 при присвоении значения Combobox
выполняю команду ComboBox1.Value = TextBox1.Text &amp; &quot;:&quot; &amp; Chr(9) &amp; TextBox2.Text &amp; Chr(9) &amp;...

Ошибка при присвоении значения из результата запроса
Доброго времени суток всем. Не уверен, что мой вопрос из этой темы, но всё же... Подскажите,...

12
Эксперт .NET
5872 / 4749 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
16.01.2016, 21:21 2
Вот здесь:
C#
1
2
3
x[j] = y;
j++;
i = i + dt;
при каждой итерации переменная цикла i увеличивается на dt = 0.01, а переменная - индекс массива j увеличивается на 1. Когда i становится равным 1.1, j достигает 10 и выходит за границы индексации.
1
6 / 6 / 0
Регистрация: 11.05.2013
Сообщений: 31
16.01.2016, 21:31  [ТС] 3
То есть у меня не получится просто брать значения y и помещать их в массив x с нужной индексацией?
0
Эксперт .NET
5872 / 4749 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
16.01.2016, 21:40 4
Цитата Сообщение от heked93 Посмотреть сообщение
То есть у меня не получится просто брать значения y и помещать их в массив x с нужной индексацией?
Просто нужно согласовать шаг i, шаг j и количество элементов массива.
1
6 / 6 / 0
Регистрация: 11.05.2013
Сообщений: 31
16.01.2016, 21:59  [ТС] 5
Цитата Сообщение от Даценд Посмотреть сообщение
Просто нужно согласовать шаг i, шаг j и количество элементов массива.
Но чтобы согласовать их,мне нужно отказаться от типа double в шаге i
0
Эксперт .NET
5872 / 4749 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
16.01.2016, 22:10 6
Цитата Сообщение от heked93 Посмотреть сообщение
Но чтобы согласовать их,мне нужно отказаться от типа double в шаге i
Необязательно:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double min = 1;
double max = min + dt * 9;
for (double i = min; i < max; i+=dt)
{
    double y = A * Math.Sin(2 * Math.PI * f * i);
    if (y >= 0)
    {
        y = A;
    }
    else
    {
        y = 0;
    }
    this.chart1.Series[0].Points.AddXY(i, y);
    x[j] = y;
}
Но, конечно лучше:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double i = 1;
for (int j = 0; j < 10; j++)
{
    double y = A * Math.Sin(2 * Math.PI * f * i);
    if (y >= 0)
    {
        y = A;
    }
    else
    {
        y = 0;
    }
    this.chart1.Series[0].Points.AddXY(i, y);
    x[j] = y;
    i += dt;
}
1
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,478
16.01.2016, 22:14 7
heked93,
Мне непонятно, почему у Вы в строке 16 сравниваете i с N? В чём физический смысл такого сравнения?
Судя по коду, i - это некая величина (координата?), а N - это количество (точек?). Как их можно сравнивать?

Добавлено через 2 минуты
Даценд,
В первом варианте в строке 15 должно быть "x[j++] = y;"?
1
Эксперт .NET
5872 / 4749 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
16.01.2016, 22:27 8
Цитата Сообщение от Shamil1 Посмотреть сообщение
В первом варианте в строке 15 должно быть "x[j++] = y;"?
Да.
Я в общем то не особо понимаю, чего хочет добиться ТС. Почему точек 10, почему минимальное значение 1, чему равен максимум аргумента.
1
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,478
16.01.2016, 22:29 9
Я тоже не понимаю. ИМХО там сравнение штук с метрами.
0
6 / 6 / 0
Регистрация: 11.05.2013
Сообщений: 31
16.01.2016, 22:29  [ТС] 10
Цитата Сообщение от Shamil1 Посмотреть сообщение
Мне непонятно, почему у Вы в строке 16 сравниваете i с N? В чём физический смысл такого сравнения?
Судя по коду, i - это некая величина (координата?), а N - это количество (точек?). Как их можно сравнивать?
i - это время, N - последняя точка времени, для введения частоты дискретизации при формировании сигнала я использую шаг по времени. Смысл в том, что я формирую прямоугольный импульс только до последней точке на оси времени.
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,478
16.01.2016, 22:32 11
Цитата Сообщение от heked93 Посмотреть сообщение
i - это время, N - последняя точка времени
Значит, i измеряется в секундах.
N - тоже измеряется в секундах.

А в строке 14 ( x = new double[N]; ) Вы задаёте размер массива в секундах?
1
6 / 6 / 0
Регистрация: 11.05.2013
Сообщений: 31
16.01.2016, 22:33  [ТС] 12
Цитата Сообщение от Shamil1 Посмотреть сообщение
Значит, i измеряется в секундах.
N - тоже измеряется в секундах.
А в строке 14 (x = new double[N] Вы задаёте размер массива в секундах?
Все верно
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,478
16.01.2016, 22:43 13
heked93,
Количество элементов в массиве нельзя измерить в секундах.

Предлагаю Вам вместо массива использовать List<double>.
1
16.01.2016, 22:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2016, 22:43
Помогаю со студенческими работами здесь

Ошибка при присвоении значения полям записи
uses crt; type e = record who: string; what: integer; end; z=^e; ...

Ошибка при присвоении значения Range к переменной
Пытаюсь создать массив в котором будут размещены все непустые строки из диапазона А2:102. Sub...

Ошибка при присвоении значения элементу матрицы
пытаюсь сделать умножение матриц при присвоении значения в строке 19 matrix_B = 3;// (rand() %...

Ошибка при присвоении элементу матрицы вычисленного значения
странная ошибка при присвоении элементу матрицы вычисленного значения все вычисления интеграла...

Ошибка при присвоении переменной значения ячейки массива
Ошибку error C2106: '=' : left operand must be l-value выдает на строчке: if (mas!=-1 &amp;&amp; mas!=-1...

Ошибка при присвоении значения элементу массива в функции
Есть такая вот структура: struct stantsia { string st; int hPrib,mPrib, hOtb,mOtb; };...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru