Неправильно считает при использовании метода Thread - C#

Узнай цену своей работы

Формулировка задачи:

При выполнении выдаёт ошибку " Индекс находился вне границ массива.". Хотя насколько я понимаю он не должен выходить за рамки массива. Подскажите пожалуйста в чем проблема?
Листинг программы
  1. using System;
  2. using System.Windows.Forms;
  3. using System.Threading;
  4. using System.Diagnostics;
  5.  
  6. namespace testparallel
  7. {
  8. public partial class Form1 : Form
  9. {
  10. public Form1()
  11. {
  12. InitializeComponent();
  13. }
  14. double I;
  15. private void button1_Click_1(object sender, EventArgs e)
  16. {
  17. string a_s = textBox1.Text,
  18. b_s = textBox2.Text,
  19. n_s = textBox3.Text;
  20. int a = Convert.ToInt32(a_s),
  21. b = Convert.ToInt32(b_s),
  22. n = Convert.ToInt32(n_s);
  23. double[] x;
  24. x = new double[n+1];
  25. double h = (b - a) / n;
  26. for (int i = 0; i <= n; i++)
  27. {
  28. x[i] = a + (i * h);
  29. }
  30. textBox6.Clear();
  31. integral(x, n);
  32. }
  33. public void integral(double [] x, int n)
  34. {
  35. Stopwatch st = new Stopwatch();
  36. st.Start();
  37. for (int i = 1; i <= n; i++)
  38. {
  39. I += ((x[i] * x[i]) / 2.0) - ((x[i - 1] * x[i - 1]) / 2.0);
  40. }
  41. st.Stop();
  42. TimeSpan ts = st.Elapsed;
  43. string s = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
  44. label1.Text = Convert.ToString(s);
  45. textBox4.Text += Convert.ToString(I);
  46. }
  47. double S=0;
  48. private void button2_Click(object sender, EventArgs e)
  49. {
  50. string a_s = textBox1.Text,
  51. b_s = textBox2.Text,
  52. n_s = textBox3.Text;
  53. int a = Convert.ToInt32(a_s),
  54. b = Convert.ToInt32(b_s),
  55. n = Convert.ToInt32(n_s);
  56. double[] x;
  57. x = new double[n];
  58. double h = (b - a) / n;
  59. for (int i = 0; i <= n; i++)
  60. {
  61. x[i] = a + (i * h);
  62. }
  63. textBox6.Clear();
  64. int_p(x,n);
  65. textBox6.Text = Convert.ToString(S);
  66. }
  67. public void int_p(double[] x, int n)
  68. {
  69. int g = x.Length;
  70. int t = n;
  71. Thread[] th = new Thread[n + 1];
  72. Stopwatch st = new Stopwatch();
  73. st.Start();
  74. for (int j = 1; j <= n; j++)
  75. {
  76. th[j] = new Thread(() => {
  77. S += ((x[j] * x[j]) / 2.0) - ((x[j - 1] * x[j - 1]) / 2.0);
  78. });
  79. }
  80. for (int j = 1; j <= n; j++)
  81. th[j].Start();
  82. for (int j = 1; j <= n; j++)
  83. th[j].Join();
  84. st.Stop();
  85. TimeSpan ts = st.Elapsed;
  86. string s = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
  87. label2.Text = Convert.ToString(s);
  88. }
  89. }
  90. }

Решение задачи: «Неправильно считает при использовании метода Thread»

textual
Листинг программы
  1. for (int i = 0; i < n; i++)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы