none
Решение уравнений высшей степени RRS feed

  • Вопрос

  • Visual basic, visual studio 2010/

    Где тут ошибка? Почему-то не выдает корень... программа просто зависает в самом конце.
    a и b - отрезок, в котором заключен корень

    Dim n, fa, fc, a, b, c, z, i As Integer
    Dim mas() As Integer

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    fa = 0
    a = InputBox("введите a")
    b = InputBox("b")
    z = InputBox("введите максимальную погрешность")
    n = InputBox("введите степень уравнения")
    ReDim mas(0 To n)
    For Me.i = 0 To n Step 1
    mas(i) = InputBox("Введите" + Str(i) + "-й коэфицент")
    fa = fa + mas(i) * (a ^ i)
    Next i
    Do
    c = (a + b) / 2
    fc = 0
    For Me.i = 0 To n
    fc = fc + mas(i) * (c ^ i)
    Next i

    If fa * fc < 0 Then
    b = c
    Else : a = c

    End If
    Loop While (a + b) / 2 > z
    label1.text = (a + b) / 2

    End Sub
    End Class

    16 января 2012 г. 15:28

Ответы

  • > Где тут ошибка? Почему-то не выдает корень... программа просто зависает в самом конце.


    в Visual Studio нажмите F11, запустится пошаговая отладка (в окне Locals выводятся значения переменных). сможете локализовать ошибку.
       
     

    • Изменено Malobukv 16 января 2012 г. 17:08
    • Помечено в качестве ответа Abolmasov Dmitry 17 января 2012 г. 11:41
    16 января 2012 г. 17:06

Все ответы

  • > Где тут ошибка? Почему-то не выдает корень... программа просто зависает в самом конце.


    в Visual Studio нажмите F11, запустится пошаговая отладка (в окне Locals выводятся значения переменных). сможете локализовать ошибку.
       
     

    • Изменено Malobukv 16 января 2012 г. 17:08
    • Помечено в качестве ответа Abolmasov Dmitry 17 января 2012 г. 11:41
    16 января 2012 г. 17:06
  • Почему зависает не разбирался, а вот в типах переменных есть ошибки: a, b, c не должны объявляться как целые, так как:

     c = (a + b) / 2 - например a=2, b=3 ---> с ДОЛЖНО РАВНЯТСЯ 2,5, но т.к. с у Вас -Integer , то программа округлит до 2. Далее тоже будет округлять : b = c : a = c. Ну и в условии Loop While (a + b) / 2 > z будут накладки (по той же причине). Попробуйте a, b, c объявит как Single.


    Alexandr_Smirnoff
    4 февраля 2012 г. 4:58