Страница: 1 |
Вопрос: Помогите пожалуйста решить задачу в VBA.. Надежда | Добавлено: 15.09.11 16:21 |
Автор вопроса: ![]() |
Оплата услуг 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" ![]() 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" ![]() 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" ![]() 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" ![]() 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" ![]() 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" ![]() 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 |
|
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 7 |
Web-сайт: Профиль | Цитата | #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 |
|