Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: VBA - определить стороны прямоугольного треугольни Добавлено: 06.07.11 16:19  

Автор вопроса:  Spetznaz | ICQ: 5552600 
задано 2 катета - найти гипотенузу
задан катет и гипотенуза - найти второй катет
гипотенуза не может быть меньше катета
предусмотреть:
гашение меток в поле ввода-выводы для несуществующего варианта;
переверка факта ввода числа, а не текста или 0.
Формат вывода результат - 2 знака после запятой.
запретить ввод значений в поле вывода результата.
клавише ЕНТЕР присв. функц. "выполнить", ЕСК=отменить

Польз. форме присвоить имя "ТЕСТПРОГ".

решение выглядит примерно так:
Private Sub CommandButton1_Click()

Dim A As Single ' 1 katet
Dim B As Single ' 2 katet
Dim C As Single ' gipotenuza

A = TextBox1.Text
B = TextBox2.Text
C = TextBox3.Text

Function СторонаТреугольника (Optional A, Optional В, Optional С)
If Not (IsMissing(A)) And Not (IsMissing(В)) Then
СторонаТреугольника = Sqr(А^2 + В^2)
End If
If Not (IsMissing(A)) And Not (IsMissing(C)) Then
СторонаTреугольника = Sqr(С^2 – A^2)
End If
If Not (IsMissing(B)) And Not (IsMissing(C)) Then
Сторонатреугольника = Sqr (C^2 – B^2)
End If
EndFunction

TextBox4.Text = Сторонатреугольника

End Sub

помогите исправить ошибки,
этот код работает неправильно.

Ответить

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

Номер ответа: 1
Автор ответа:
 Дмит



Вопросов: 11
Ответов: 160
 Web-сайт: dimit.pochta.ru
 Профиль | | #1
Добавлено: 07.07.11 15:36
Ну для начала:
  1. Private Sub CommandButton1_Click()
  2. Dim A As Single ' 1 katet
  3. Dim B As Single ' 2 katet
  4. Dim C As Single ' gipotenuza
  5.  
  6. A = Val(TextBox1.Text)
  7. B = Val(TextBox2.Text)
  8. C = Val(TextBox3.Text)
  9.  
  10. If A > 0 And B > 0 Then
  11.     TextBox3.Text = Sqr(A ^ 2 + B ^ 2)
  12. ElseIf A > 0 And C > 0 Then
  13.     TextBox2.Text = Sqr(C ^ 2 - A ^ 2)
  14. ElseIf B > 0 And C > 0 Then
  15.     TextBox1.Text = Sqr(C ^ 2 - B ^ 2)
  16. Else: Beep
  17. End If
  18.  
  19. End Sub
  20.  
  21. Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  22. Select Case KeyAscii
  23.     Case 48 To 57, 46
  24.     Case Else: KeyAscii = 0: Beep
  25. End Select
  26. End Sub
  27. Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  28. Select Case KeyAscii
  29.     Case 48 To 57, 46
  30.     Case Else: KeyAscii = 0: Beep
  31. End Select
  32. End Sub
  33. Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  34. Select Case KeyAscii
  35.     Case 48 To 57, 46
  36.     Case Else: KeyAscii = 0: Beep
  37. End Select
  38. End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Поша



Вопросов: 1
Ответов: 3
 Профиль | | #2 Добавлено: 09.07.11 22:24
Первая ошибка - IsMissing работает только с типом данных Variant.

Вторая ошибка не инструментальная, а лгическая - не хватает обработки пользовательского поведения.
А если он введет и A, и B, и C?
Или не введет ничего?
Или A = 10, а В = 0?
Или B = 10, а С = фу14 (обтыкался человек)?
И т.д.

Я бы начал со второй.

Ответить

Страница: 1 |

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



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