Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: вопрос по рисованию Добавлено: 02.08.08 21:48  

Автор вопроса:  ньюбик
здравствуйте. возникла проблема при рисовании графика функции косеканса. среда VB6. вот код:
Dim x
Const pi = 3.14159265
Private Sub Command1_Click()
For x = -2 * pi To 2 * pi Step 0.01
    y = 1 / Sin(x)
    Line -(x, y)
Next x
End Sub

Private Sub Form_Load()
Me.ScaleLeft = -2 * pi
Me.ScaleTop = -5
Me.ScaleHeight = 10
Me.ScaleWidth = 4 * pi
End Sub

выдаёт ошибку "переполнение". почему?
секанс(1 / Cos(x)) ВБ рисует замечательно!
помогите разобраться, пожалуйста

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 02.08.08 23:03
Потому что синус -2*Pi равен 0, а при делении на число, почти точно равное 0, возникает переполнение. В случае же косинуса из-за шага 0.01 значение, настолько же близкое к нулю, не возникает.

Ответить

Номер ответа: 2
Автор ответа:
 ньюбик



Вопросов: 4
Ответов: 10
 Профиль | | #2 Добавлено: 03.08.08 01:52
ну, косинус тоже принимает значения равные нулю, и ничего, вполне нормально делится в секансе. более того, ВБ обрабатывает такие ошибки, как деление на ноль!такое возникло бы, если знак "/" поменять на "\"...а шаг 0.01 всего лишь отвечает за качество прорисовки графика, если его убрать - то ошибка останется

Ответить

Номер ответа: 3
Автор ответа:
 ньюбик



Вопросов: 4
Ответов: 10
 Профиль | | #3 Добавлено: 03.08.08 01:57
нда...странно. 1/sin(-2*pi+a) рисует нормально..но как тогда обойти ошибку переполнения?и что бы график был прорисован нормально, без аргумента "а"??

Ответить

Номер ответа: 4
Автор ответа:
 ньюбик



Вопросов: 4
Ответов: 10
 Профиль | | #4 Добавлено: 03.08.08 02:07
хм..вообще-то если 1/sin(-2*pi+a) то график рисуется без ошибок..но как обойти переполнение без аргумента "а"?

Ответить

Номер ответа: 5
Автор ответа:
 ньюбик



Вопросов: 4
Ответов: 10
 Профиль | | #5 Добавлено: 03.08.08 02:07
хм..вообще-то если 1/sin(-2*pi+a) то график рисуется без ошибок..но как обойти переполнение без аргумента "а"?

Ответить

Номер ответа: 6
Автор ответа:
 ньюбик



Вопросов: 4
Ответов: 10
 Профиль | | #6 Добавлено: 03.08.08 02:14
пардон:( за дублирование:(
вообще-то в визуал бейсике всё что-то очень как-то не так!цикл for...next для х по разному отображается:
для х = -10*pi to 2* pi - выдаёт ошибку, для х = -1110 * pi... всё в порядке, для х = -99 * pi - тоже нормально...

Ответить

Номер ответа: 7
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #7
Добавлено: 03.08.08 02:37
ньюбик, зайди в настройки VB и на первой вкладке отметь "Require variable Declaration"
чтобы в каждом файле вверху автоматически вставлялось "Option Explicit", и ты уже начал наконец объявлять переменные.

При том в данном случае нужно указать еще и типы переменных (вообще нужно это делать всегда)

Кароче. Меняй ";Dim x" на
Option Explicit
Dim x As Single, y As Single
у меня всё работает

Ответить

Номер ответа: 8
Автор ответа:
 ньюбик



Вопросов: 4
Ответов: 10
 Профиль | | #8 Добавлено: 03.08.08 11:13
спасибо за помощь:)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам