Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 304
от 20.06.2006, 02:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 180, Экспертов: 28
В номере:Вопросов: 4, Ответов: 5


Вопрос № 46164: Как посчитать значения арксинуса и арккосинуса числа?...
Вопрос № 46214: Как удалить строку в Excel с VB 6 ? Так не удаляет. Dim objExcel As Excel.Application Set objExcel = New Excel.Application objExcel.Visible = True objExcel.SheetsInNewWorkbook = 1 objExcel.Workbooks.Open ("C:B1ж.xl...
Вопрос № 46243: Сабж состоит в следующем, имеется модуль написаный в Visual Basic под Access,в нем содержится функция первоодящая числовое выражение в строку. У мя извечные проблемы с написанием алгоритмов,посему HELP!Помогите пожалуйста написать алгоритм - мне ...
Вопрос № 46254: Пишу на VB 6.0. Прочитал статью про использование Winsock. Выбрал протокол UDP для своего приложения. Программа работает с локальной сетью. IP адрес сервера надо указывать явно. А если он изменится? Решил сканировать сеть в поисках сервера. Только ка...

Вопрос № 46.164
Как посчитать значения арксинуса и арккосинуса числа?
Отправлен: 14.06.2006, 05:57
Вопрос задал: Coupler (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: AlexanderZh
Здравствуйте, Coupler!

Secant Sec(X) = 1 / Cos(X)
Cosecant Cosec(X) = 1 / Sin(X)
Cotangent Cotan(X) = 1 / Tan(X)
Inverse Sine Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Inverse Cosine Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Inverse Secant Arcsec(X) = Atn(X / Sqr(X * X – 1)) + Sgn((X) – 1) * (2 * Atn(1))
Inverse Cosecant Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) – 1) * (2 * Atn(1))
Inverse Cotangent Arccotan(X) = Atn(X) + 2 * Atn(1)
Hyperbolic Sine HSin(X) = (Exp(X) – Exp(-X)) / 2
Hyperbolic Cosine HCos(X) = (Exp(X) + Exp(-X)) / 2
Hyperbolic Tangent HTan(X) = (Exp(X) – Exp(-X)) / (Exp(X) + Exp(-X))
Hyperbolic Secant HSec(X) = 2 / (Exp(X) + Exp(-X))
Hyperbolic Cosecant HCosec(X) = 2 / (Exp(X) – Exp(-X))
Hyperbolic Cotangent HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) – Exp(-X))
Inverse Hyperbolic Sine HArcsin(X) = Log(X + Sqr(X * X + 1))
Inverse Hyperbolic Cosine HArccos(X) = Log(X + Sqr(X * X – 1))
Inverse Hyperbolic Tangent HArctan(X) = Log((1 + X) / (1 – X)) / 2
Inverse Hyperbolic Secant HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Inverse Hyperbolic Cosecant HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Inverse Hyperbolic Cotangent HArccotan(X) = Log((X + 1) / (X – 1)) / 2
Logarithm to base N LogN(X) = Log(X) / Log(N)

Ответ отправил: AlexanderZh (статус: 8-ой класс)
Ответ отправлен: 14.06.2006, 08:39
Оценка за ответ: 4
Комментарий оценки:
Попробуйте по формуле Arcsin(X) = Atn(X / Sqr(-X * X + 1)) посчитать значение arcsin(1) или arcsin(-1). Я понимаю, что проблему можно решить с помощью элементарного условия, но все же...


Вопрос № 46.214
Как удалить строку в Excel с VB 6 ?

Так не удаляет.
Dim objExcel As Excel.Application
Set objExcel = New Excel.Application
objExcel.Visible = True
objExcel.SheetsInNewWorkbook = 1
objExcel.Workbooks.Open ("C:B1ж.xls")
objExcel.ActiveSheet.Cells(35).Delete
objExcel.Quit
Set objExcel = Nothing

С уважением Александр.
Отправлен: 14.06.2006, 16:30
Вопрос задал: Гробенюк Александр Александрович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Коляка Вадим
Здравствуйте, Гробенюк Александр Александрович!

Dim objExcel As Excel.Application
Set objExcel = New Excel.Application
objExcel.Visible = True
objExcel.SheetsInNewWorkbook = 1
objExcel.Workbooks.Open ("C:1.xls")
objExcel.Rows("10:10").Select
objExcel.Selection.Delete Shift:=xlUp
'Удаляет 10-ю строку
Set objExcel = Nothing

Как совет на будующее - все нужно сделать програмно, сделайте средствами экселя, записав ваши действия как макрос. В нем потом все что надо )
Ответ отправил: Коляка Вадим (статус: 2-ой класс)
Ответ отправлен: 14.06.2006, 16:40


Вопрос № 46.243
Сабж состоит в следующем, имеется модуль написаный в Visual Basic под Access,в нем содержится функция первоодящая числовое выражение в строку.
У мя извечные проблемы с написанием алгоритмов,посему HELP!Помогите пожалуйста написать алгоритм - мне нужна именно блок схема
Текст модуля(все откоментировал):
Attribute VB_Name = "NTF"
Option Compare Database

'Функция преобразует заданное чсило в строковое представление:
Public Function NumToField(Num As String) As String
Dim t, Razr, Fl, L, Zap As Integer
Dim M(11, 7), R(11), Result, MyTemp, rt As String
Fl = 0
Result = ""
'Задание элементов массива, хранящего данные о названиях чисел:
M(0, 1) = " рублей"
M(1, 1) = " один рубль"
M(2, 1) = " два рубля"
M(3, 1) = " три рубля"
M(4, 1) = " четыре рубля"
M(5, 1) = " пять рублей"
M(6, 1) = " шесть рублей"
M(7, 1) = " семь рублей"
M(8, 1) = " восемь рублей"
M(9, 1) = " девять рублей"
M(0, 2) = " "
M(1, 2) = " "
M(2, 2) = " двадцать"
M(3, 2) = " тридцать"
M(4, 2) = " сорок"
M(5, 2) = " пятьдесят"
M(6, 2) = " шестьдесят"
M(7, 2) = " семьдесят"
M(8, 2) = " восемьдесят"
M(9, 2) = " девяносто"
M(0, 3) = " "
M(1, 3) = " сто"
M(2, 3) = " двести"
M(3, 3) = " триста"
M(4, 3) = " четыреста"
M(5, 3) = " пятьсот"
M(6, 3) = " шестьсот"
M(7, 3) = " семьсот"
M(8, 3) = " восемьсот"
M(9, 3) = " девятьсот"
M(0, 4) = " тысяч"
M(1, 4) = " одна тысяча"
M(2, 4) = " две тысячи"
M(3, 4) = " три тысячи"
M(4, 4) = " четыре тысячи"
M(5, 4) = " пять тысяч"
M(6, 4) = " шесть тысяч"
M(7, 4) = " семь тысяч"
M(8, 4) = " восемь тысяч"
M(9, 4) = " девять тысяч"
M(0, 5) = " "
M(1, 5) = " "
M(2, 5) = " двадцать"
M(3, 5) = " тридцать"
M(4, 5) = " сорок"
M(5, 5) = " пятьдесят"
M(6, 5) = " шестьдесят"
M(7, 5) = " семьдесят"
M(8, 5) = " восемьдесят"
M(9, 5) = " девяносто"
M(0, 6) = " "
M(1, 6) = " сто"
M(2, 6) = " двести"
M(3, 6) = " триста"
M(4, 6) = " четыреста"
M(5, 6) = " пятьсот"
M(6, 6) = " шестьсот"
M(7, 6) = " семьсот"
M(8, 6) = " восемьсот"
M(9, 6) = " девятьсот"
R(1) = " десять"
R(2) = " одинадцать"
R(3) = " двенадцать"
R(4) = " тринадцать"
R(5) = " четырнадцать"
R(6) = " пятнадцать"
R(7) = " шеснадцать"
R(8) = " семнадцать"
R(9) = " восемнадцать"
R(10) = " девятнадцать"
Fl = 0
Result = ""
MyTemp = Num
Zap = 0

'Выделение целой части числа (рублей):
If InStr(1, MyTemp, ",") <> 0 Then
L = InStr(1, MyTemp, ",") - 1
Zap = 1
Else: L = Len(MyTemp)
End If

'Анализ целой части поразрядно. Сответственно каждому разряду определяется строка:
For Razr = 1 To L
If Fl <> 1 Then
t = Val(Mid(MyTemp, Razr, 2))
If ((t > 9) And (t < 20)) And ((L - Razr + 1 = 5) Or (L - Razr + 1 = 2)) Then
If L - Razr + 1 = 2 Then Result = Result + R(t - 9) + " рублей"
If L - Razr + 1 = 5 Then Result = Result + R(t - 9) + " тысяч"
Fl = 1
Else
t = Val(Mid(MyTemp, Razr, 1))
Result = Result + M(t, L - Razr + 1)
End If
Else: Fl = 0
End If
Next Razr

'Добавление копеек к строке (копейки остаются цифрами):
If Zap = 1 Then
rt = Mid(MyTemp, InStr(1, MyTemp, ",") + 1, 2)
t = Val(rt)
If t < 10 Then t = t * 10
rt = Str(t)
Else: rt = " 00"
End If
Result = Result + rt + " коп."
Mid(Result, 2) = Format(Mid(Result, 2, 1), ">")

NumToField = Result 'Возвращение результата работы функции
End Function

Добавлено Сегодня, 19:48
Господа ну очень надо,помогите пожалуйста,заранее благодарен!
Отправлен: 14.06.2006, 21:07
Вопрос задал: Dronskiy (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Puma
Здравствуйте, Dronskiy!
Честно, я не знаю зачем Вам самому писать такую функцию.
На сайте microsoft есть готовый пример. Его можно адаптировать к любому приложению MS Office.
Пример в приложении.

Приложение:

---------
Куда б я ни пошел, оно со мною: на форумах, в e-mail иль в ICQ. Мое ИМХО могучею скалою поддержит точку зрения мою.

Ответ отправил: Puma (статус: Практикант)
Ответ отправлен: 14.06.2006, 21:36

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Dronskiy!

В приложении привожу исходник рабочей dll.
Преобразование целых чисел в строку.
Входные параметры:
Sum целое число для преобразования, от 0 до 999999999999
Male род единицы измерения "М", "Ж", "С"
S1 наименование для 1, "рубль"
S2 наименование для 2, "рубля"
S5 наименование для 5 и более, "рублей"

Возвращается текстовая строка.

Примерный алгоритм основной программы:
( Начало )
|
[ S="" ]
|
[ b=false ]
|
< Sum>999999999 >
| |
нет да
| |
| [s=pr(CLng(Int(Sum/1000000000 ) ), "М", "миллиард", "миллиарда", "миллиардов" )]
| |
| [Sum = Sum - CLng(Int(Sum / 1000000000 ) * 1000000000 )]
| |
| [b=true]
| |
-----|------
< Sum>999999 >
| |
нет да
| |
| [s=s & pr(CLng(Int(Sum / 1000000 ) ), "М", "миллион", "миллиона", "миллионов" )]
| |
| [Sum = Sum - CLng(Int(Sum / 1000000 ) * 1000000 )]
| |
| [b=true]
| |
-----|------
< Sum>999 >
| |
нет да
| |
| [s=s & pr(CLng(Int(Sum / 1000000 ) ), "Ж", "тысяча", "тысячи", "тысяч" )]
| |
| [Sum = Sum - CLng(Int(Sum / 1000 ) * 1000 )]
| |
| [b=true]
| |
-----|------
< b=true or Sum>0 >
| |
нет да
| |
| < Sum>0 >_____
| | |
| нет да
| | |
| | [ s = s & " " & pr(CLng(Sum ), Male, s1, s2, s5 ) ]
| | |
| | [b=true]
| | |
| [ s = s & " " & s5 ] |
| | |
| ---------|------------
--------|-----------
|
< b=false >
| |
нет да
| |
| [ s = pr(0, Male, s1, s2, s5 ) ]
| |
------|------
/ PreobRus = s /
|
( Конец )
Составление блок-схем в текстовом формате проблематично, но попробовал сделать.
Для подпрограммы такой же принцип составления построчно.

Для преобразования денежных значений можно вызывать примерно так:
nnn=137853.56
s=""
s=Preobrus( int( nnn ) , "М" , "рубль" , "рубля" , "рублей" )
s=s & " " & Preobrus( clng(right(str( nnn*100 ),2 ) ) , "Ж" , "копейка" , "копейки" , "копеек" )

Я написал преобразования для русского и украинского языков. Создал dll и зарегистрировал обе в системе.

С уважением.

Приложение:

Ответ отправил: Филатов Евгений Геннадьевич (статус: 3-ий класс)
Ответ отправлен: 14.06.2006, 22:30


Вопрос № 46.254
Пишу на VB 6.0. Прочитал статью про использование Winsock. Выбрал протокол UDP для своего приложения. Программа работает с локальной сетью. IP адрес сервера надо указывать явно. А если он изменится? Решил сканировать сеть в поисках сервера. Только какой диапазон IP-адресов надо охватывать? Все IP - сильно накладно. У меня в локальной сети выделяются IP число.число.*.* (65536 вариантов). А может быть такое, что в локальной сети меняются второй и четвёртый октеты? Какой диапазон сети охватить? Можно предоставить пользователю указать диапазоны, но не все знают, что такое IP, хотелось бы иметь автомат поиска. И ещё - по UDP программа забивает выбранный порт под себя, как определить свободный порт и где можно почитать про работу с UDP на VB 6.0 подробно или на другом языке?
Отправлен: 14.06.2006, 22:16
Вопрос задал: Александр А.А. (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: PsySex
Здравствуйте, Александр А.А.!
У Вас что большая локалка? Обычно в средней локале хватает 192.168.0.* , т.е. всего 255 вариантов. И еще если в Вашей локалке есть сервер с запущенной DNS службой, то проще обращаться по имени компьютера, а точнее получать IP машины через имя машины.
Ответ отправил: PsySex (статус: Студент)
Ответ отправлен: 14.06.2006, 23:18


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное