Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Помогите пожалуйста решить задачу в VBA.. Надежда Добавлено: 15.09.11 16:21  

Автор вопроса:  Максим | ICQ: 411726506 
Оплата услуг Internet осуществляется по трём тарифам: дневному, вечернему и ночному. Ночной тариф определяется временем суток от 0 до 5 часов; дневной от 8 до 18 часов. Тарифы разные, их значения известны. Услугами Internet за сутки воспользовались N клиентов. Время использования, а следовательно вид тарифа и продолжительность пользования каждого клиента известны. Определите среднюю стоимость единицы времени пользования Internet.

Ответить

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

Номер ответа: 1
Автор ответа:
 Максим



ICQ: 411726506 

Вопросов: 1
Ответов: 4
 Профиль | | #1 Добавлено: 15.09.11 19:58
так то есть решение но не правильно оформленно и врёт немного

Private Sub Command1_Click()
k = Val(Text1.Text)
s = 0
d = Val(Text2.Text)
v = Val(Text3.Text)
n = Val(Text4.Text)
pn = 0
pp = 0
p1 = 0
For i = 1 To k
tn = InputBox("Введите начальное время", "Ввод данных";)
tk = InputBox("Введите конечное время", "Ввод данных";)
tn2 = TimeValue(tn)
tk2 = TimeValue(tk)
 
 If "0:0:0" < tn2 And tn2 < "5:0:0" And "08:0:0" < tk2 And tk2 < "18:0:0" Then
pn = DateDiff("s", tn2, "5:0:0";) * n / 3600 + 3 * v + 0 * d
pp = DateDiff("s", "8:0:0", tk2) * d / 3600
pn = pn + pp
 End If
 
 If "0:0:0" < tn2 And tn2 < "5:0:0" And "18:0:0" < tk2 And tk2 < "24:0:0" Then
pn = DateDiff("s", tn2, "5:0:0";) * n / 3600 + 3 * v + 10 * d
pp = DateDiff("s", "18:0:0", tk2) * v / 3600
pn = pn + pp
 End If
 
If "5:0:0" < tn2 And tn2 < "8:0:0" And "18:0:0" < tk2 And tk2 < "24:0:0" Then
pn = DateDiff("s", tn2, "8:0:0";) * v / 3600 + 10 * d
pp = DateDiff("s", "18:0:0", tk2) * v / 3600
pn = pn + pp
 End If
 
 If "8:0:0" < tn2 And tn2 < "18:0:0" And "18:0:0" < tk2 And tk2 < "24:0:0" Then
pn = DateDiff("s", tn2, "18:0:0";) * d / 3600 + DateDiff("s", "18:0:0", tk2) * v / 3600
 End If

  If "18:0:0" < tn2 And tn2 < "24:0:0" And "18:0:0" < tk2 And tk2 < "24:0:0" Then
pn = DateDiff("s", tn2, tk2) * v / 3600
 End If
  
  If "5:0:0" < tn2 And tn2 < "8:0:0" And "08:0:0" < tk2 And tk2 < "18:0:0" Then
pn = DateDiff("s", tn2, "8:0:0";) * v / 3600
pp = DateDiff("s", "8:0:0", tk2) * d / 3600
pn = pn + pp
 End If
  
    If "08:0:0" < tn2 And tn2 < "18:0:0" And "08:0:0" < tk2 And tk2 < "18:0:0" Then
pn = DateDiff("s", tn2, tk2) * d / 3600
 End If
  
  If "0:0:0" < tn2 And tn2 < "5:0:0" And "5:0:0" < tk2 And tk2 < "8:0:0" Then
pn = DateDiff("s", tn2, "5:0:0";) * n / 3600
pp = DateDiff("s", "5:0:0", tk2) * v / 3600
pn = pn + pp
 End If
 
 If "5:0:0" < tn2 And tn2 < "8:0:0" And "5:0:0" < tk2 And tk2 < "8:0:0" Then
pn = DateDiff("s", tn2, tk2) * v / 3600
 End If
 
 If "0:0:0" < tn2 And tn2 < "5:0:0" And "0:0:0" < tk2 And tk2 < "5:0:0" Then
pn = DateDiff("s", tn2, tk2) * n / 3600
 End If
 
p = DateDiff("s", tn2, tk2)
s = s + p
p1 = p1 + pn
Next i

Form1.Print pn
Form1.Print s / 3600
x = p1 / s * 3600
Form1.Print x

End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Максим



ICQ: 411726506 

Вопросов: 1
Ответов: 4
 Профиль | | #2 Добавлено: 15.09.11 19:59
Ща не спалил что есть слово код

Ответить

Номер ответа: 3
Автор ответа:
 Максим



ICQ: 411726506 

Вопросов: 1
Ответов: 4
 Профиль | | #3 Добавлено: 15.09.11 19:59
  1. Private Sub Command1_Click()
  2. k = Val(Text1.Text)
  3. s = 0
  4. d = Val(Text2.Text)
  5. v = Val(Text3.Text)
  6. n = Val(Text4.Text)
  7. pn = 0
  8. pp = 0
  9. p1 = 0
  10. For i = 1 To k
  11. tn = InputBox("Введите начальное время", "Ввод данных")
  12. tk = InputBox("Введите конечное время", "Ввод данных")
  13. tn2 = TimeValue(tn)
  14. tk2 = TimeValue(tk)
  15.  
  16.  If "0:0:0" < tn2 And tn2 < "5:0:0" And "08:0:0" < tk2 And tk2 < "18:0:0" Then
  17. pn = DateDiff("s", tn2, "5:0:0") * n / 3600 + 3 * v + 0 * d
  18. pp = DateDiff("s", "8:0:0", tk2) * d / 3600
  19. pn = pn + pp
  20.  End If
  21.  
  22.  If "0:0:0" < tn2 And tn2 < "5:0:0" And "18:0:0" < tk2 And tk2 < "24:0:0" Then
  23. pn = DateDiff("s", tn2, "5:0:0") * n / 3600 + 3 * v + 10 * d
  24. pp = DateDiff("s", "18:0:0", tk2) * v / 3600
  25. pn = pn + pp
  26.  End If
  27.  
  28. If "5:0:0" < tn2 And tn2 < "8:0:0" And "18:0:0" < tk2 And tk2 < "24:0:0" Then
  29. pn = DateDiff("s", tn2, "8:0:0") * v / 3600 + 10 * d
  30. pp = DateDiff("s", "18:0:0", tk2) * v / 3600
  31. pn = pn + pp
  32.  End If
  33.  
  34.  If "8:0:0" < tn2 And tn2 < "18:0:0" And "18:0:0" < tk2 And tk2 < "24:0:0" Then
  35. pn = DateDiff("s", tn2, "18:0:0") * d / 3600 + DateDiff("s", "18:0:0", tk2) * v / 3600
  36.  End If
  37.  
  38.   If "18:0:0" < tn2 And tn2 < "24:0:0" And "18:0:0" < tk2 And tk2 < "24:0:0" Then
  39. pn = DateDiff("s", tn2, tk2) * v / 3600
  40.  End If
  41.   
  42.   If "5:0:0" < tn2 And tn2 < "8:0:0" And "08:0:0" < tk2 And tk2 < "18:0:0" Then
  43. pn = DateDiff("s", tn2, "8:0:0") * v / 3600
  44. pp = DateDiff("s", "8:0:0", tk2) * d / 3600
  45. pn = pn + pp
  46.  End If
  47.   
  48.     If "08:0:0" < tn2 And tn2 < "18:0:0" And "08:0:0" < tk2 And tk2 < "18:0:0" Then
  49. pn = DateDiff("s", tn2, tk2) * d / 3600
  50.  End If
  51.   
  52.   If "0:0:0" < tn2 And tn2 < "5:0:0" And "5:0:0" < tk2 And tk2 < "8:0:0" Then
  53. pn = DateDiff("s", tn2, "5:0:0") * n / 3600
  54. pp = DateDiff("s", "5:0:0", tk2) * v / 3600
  55. pn = pn + pp
  56.  End If
  57.  
  58.  If "5:0:0" < tn2 And tn2 < "8:0:0" And "5:0:0" < tk2 And tk2 < "8:0:0" Then
  59. pn = DateDiff("s", tn2, tk2) * v / 3600
  60.  End If
  61.  
  62.  If "0:0:0" < tn2 And tn2 < "5:0:0" And "0:0:0" < tk2 And tk2 < "5:0:0" Then
  63. pn = DateDiff("s", tn2, tk2) * n / 3600
  64.  End If
  65.  
  66. p = DateDiff("s", tn2, tk2)
  67. s = s + p
  68. p1 = p1 + pn
  69. Next i
  70.  
  71. Form1.Print pn
  72. Form1.Print s / 3600
  73. x = p1 / s * 3600
  74. Form1.Print x
  75.  
  76. End Sub

Ответить

Номер ответа: 4
Автор ответа:
 mic



Вопросов: 0
Ответов: 7
 Web-сайт: mickonsul.narod.ru
 Профиль | | #4
Добавлено: 25.09.11 13:54
Интересно, что при явной оплате по дневному тарифу, например с 12:00 до 13:00 выводится оплата по ночному тарифу.
Отладчик кода показывает, что платеж вычисляется и в ветке:

If "08:0:0" < tn2 And tn2 < "18:0:0" And "08:0:0" < tk2 And tk2 < "18:0:0" Then
    pn = DateDiff("s", tn2, tk2) * d / 3600
End If

и в ветке:

If "0:0:0" < tn2 And tn2 < "5:0:0" And "0:0:0" < tk2 And tk2 < "5:0:0" Then
    pn = DateDiff("s", tn2, tk2) * n / 3600
End If

VB воспринимает 12:00 как 0:00 (13:00 как 1:00)!

Ответить

Страница: 1 |

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



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