Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Visual Basic (VB).

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

NEOMATRIX



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


Данный топик предназначен только для обсуждения типовых задач на Visual Basic.
Обсуждение задач на VBA (а именно, Excel, Word, Access) строго запрещено!
Пишите в соответствующих топиках.

 
Родственные топики:
  • Excel VBA - часть 1, часть 2 - все вопросы по Excel VBA туда
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • VBScript - программирование "удобняшек" на VBScript
  • QBasic - типовые задачи на QBasic
     
  • Date Time Functions In Visual Basic
  • VB6's Trig, Math, Financial, Boolean, and Random functions
  • Visual Basic 6 String Functions
  • VB6 Number System Functions (Hex, Oct, Etc)
  • VB6's DateAdd function
     
  • Functions (Visual Basic)
  • Keywords and Members by Task
  • Visual Basic Reference
     
  • Visual Basic String Manipulation Tutorials
     
  • Top 10 Visual Basic Sins

     
    Учебники:
    Visual Basic для студентов и школьников. Культин Н. (2010)
    Занимательное программирование на Visual Basic.NET. Климов А. (2005)
    Visual Basic в задачах и примерах. Сафронов (2009)
    Visual Basic 2012 на примерах. Зиборов В. (2012)

  • Всего записей: 202 | Зарегистр. 29-12-2004 | Отправлено: 19:30 16-11-2005 | Исправлено: XPerformer, 10:07 28-10-2014
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Shattrath
    Похоже, что на Form_Load объект List1 еще не существует.
    Попробуйте добавлять значения на Form_Initialize
    PS. А зачем команда Cls стоит между ивентами? Может ошибка из-за нее?

    Код:
    End Sub  
    Cls
    Private Sub Form_Load()  

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 20:46 28-02-2011
    katkat13

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    .

    Всего записей: 8 | Зарегистр. 24-04-2008 | Отправлено: 11:47 11-03-2011
    Depthh

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди кто может подсказать решение задачи по ВБ..я в этом не силен..но нужно срочно.Если есть знающие люди..прошу помоч..
    1.    Выбрать вариант задания из табл.  7.3.-1.
    2.    Получить числовое выражение  конечной суммы и конечного произведения для выражения  f1 (пределы изменения параметра i и значение переменной х выбрать произвольно с учетом области допустимых значений).
    3.    Выполнить операцию подстановки значения переменной (k) в выражение f2 (k - выражение на которое заменяется переменная х).  
    4.    Рассчитать численное значение выражения f2 с использованием функций символьного процессора с 5-ю знаками точности (значения переменных, входящих в состав данного выражения, выбрать самостоятельно).  
    5.    Получить символьное выражение производной от функции f(х)=f3, а затем вычислить значение данной производной в произвольной точке, принадлежащей области допустимых значений.
    6.    Получить символьное выражение интеграла от функции f(х)=f3 и вычислить значение определенного интеграла (пределы интегрирования выбрать самостоятельно).
    7.    Произвести разложение выражения f3 на сомножители, а затем выполнить обратную операцию – упростить полученное выражение.
    8.    Определить полиномиальные коэффициенты выражения f3.
     
     
     
    Вот сам пример: f1= (3x-1)^i
    f2=4(1-k^(1/2))ln(k)-10     k=z
    f3=4(1+x(1/2))ln(x)-10
    f4=x^2*sqrt(cos(x))
     
     
    буду очень блпгодарен..367726499...это ICQ.если кторешится помочь несчастному студенту.спишемся..для дальнейшей помощи в учебе.в долгу не останусь.

    Всего записей: 1 | Зарегистр. 15-03-2011 | Отправлено: 18:44 15-03-2011
    r55Hitman

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
     
    есть такая таблица, юзер вводит 3 значения в стандартный виндовский GUI (три текст бокса 3 значения: нач высота нач диаметр и конечная высота)
    программа в зависимости от данных юзера выдает трудоемкость (зеленые числа)
     
    сам пытался через иф зен го ту, но очень объемный текст получается(
    и также через масивы но ниче толком не придумал, помогите пожалуйста

    Всего записей: 5 | Зарегистр. 30-10-2009 | Отправлено: 16:35 04-04-2011 | Исправлено: r55Hitman, 16:36 04-04-2011
    Legio



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    r55Hitman
    Табличными значениями лучше оперировать в табличном редакторе -- который Excel.
     
    Далее, принципиально избавиться от сложности не получится -- либо будет сложно заполнять исходные данные для простой проверки (а такую можно сделать), либо будет сложная проверка.
     

    Цитата:
    сам пытался через иф зен го ту, но очень объемный текст получается(

    Лучше через трёхэтажный Select Case
    Код будет несколько понятнее.
     

    Цитата:
    и также через масивы но ниче толком не придумал, помогите пожалуйста

    Простым и тривиальным способом через массивы завести вряд ли получится. Надо трёхмерный массив объявлять; для каждого измерения либо свой набор констант, либо свой Enum; а потом всё равно будет трёхэтажный If/Select Case.
     
     
    И о простой проверке -- навскидку придумался вариант с коллекциями, но не думаю, что им стоит пользоваться (хоть он и работает)
    Подробнее...

    Всего записей: 695 | Зарегистр. 01-08-2003 | Отправлено: 19:33 04-04-2011 | Исправлено: Legio, 06:24 05-04-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    r55Hitman, Legio, или я чего-то не понял, или...
     
    ... тут ведь обыкновенный трехмерный массив. Значения элементов не вычисляются. Забиваются раз и навсегда. Разве задача стоит заполнить массив? Задача сделать из него выборку. В чем тут-то проблема? Первое измерение - высота заготовки, второе - диаметр, третье - высота поковки. Действительных значений всего 122 (глазами считал).
     
    Dim vArray(1 to 7, 1 to 10, 1 to 7)  
    и погнали 122 строки :) Это в четыре раза меньше, чем код Legio.  
     
    Бзв, Legio, может быть это дацзыбао в море спрятать?
     
     
     

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 20:03 04-04-2011
    Legio



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    asbo

    Цитата:
    может быть это дацзыбао в море спрятать?

    Хорошая штука, давно было интересно, как такое делается
     

    Цитата:
    ... тут ведь обыкновенный трехмерный массив.

    Ну так всё равно будет условие на три уровня вложенности, чтобы получить элемент массива.

    Всего записей: 695 | Зарегистр. 01-08-2003 | Отправлено: 06:30 05-04-2011 | Исправлено: Legio, 06:34 05-04-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Legio, я знал, что понравится :) (это про море)
     
    Это про код. Думал, дальше понятно будет :) Памяти-то сейчас немеряно, так? Так.
    Вот и делаем:  
    Dim vArray(100 to 400, 40 to 400, 40 to 200)  
    vArray(200, 125, 80) = 0.091
    Дальше рассказывать? :)

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 08:35 05-04-2011 | Исправлено: asbo, 08:37 05-04-2011
    r55Hitman

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asbo, Legio
    спасибо за идеи
    не сочтите за слабоумного) я asbo понял так
    задать всю трудоемкость (зеленые числа) через пересечения, НО юзер же может ввести не целое значение? т.е. надо задать округление, которое будет округлять не просто до целого значения, а до определенного числа (пример юзер вводить диаметр заготовки: 42,6 (мм) и перед тем как искать это пересечение надо округлить до 60мм?

    Всего записей: 5 | Зарегистр. 30-10-2009 | Отправлено: 16:09 05-04-2011 | Исправлено: r55Hitman, 16:10 05-04-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    r55Hitman
    * не сочтите за слабоумного
     - да упаси Господь :)
     
    Если это сортамент, то вольностей быть не должно. Если же это просто ориентировочная эмпирическая таблица, то тут уж Вам флаг в руки. Так ведь можно дойти и до интерполяции результатов... Идите от простого к сложному.
     
    Я бы реализовал, для начала, самый простой вариант - с жестко заданным набором значений... Скажем, три листбокса с .LimitToList = True Пусть юзер на первых порах уж сам округляет до ближнего целого. Тем более, что выбор - на экране. Если на выходе ноль - возврат.  
     
    Потом можно сделать массивы разрешаемых соответствий. Используя их можно ограничивать списки только допустимыми величинами. Ну, и далее, и далее... :)

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 16:34 05-04-2011
    PALbICH

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет!  
    Прошу помощи. Есть следующий код в VBA в Outlook 2007:

    Код:
     
    Option Base 1
    Dim i
    Dim Equip()
     
    Sub macro1()
    Equip = Array("C1", "C2", "C3")
    Dim myMail As Outlook.MailItem
    For i = 1 To UBound(Equip)
    Set myMail = Application.CreateItemFromTemplate("C:\Users\...\Templates\template.oft")
    myMail.Subject = "test" + Equip(i)
    myMail.Display
    Next
    End Sub
     

    В результате на основе одного шаблона создается и открывается 3 письма с разными темами testС1, testС2 и testС3.  
     
    Теперь надо в теле каждого из них найти комбинацию "Eq No" (она изначально есть в шаблоне) и заменить ее на:
    - "Eq No C1" в первом письме
    - "Eq No C2" во втором письме
    - "Eq No C3" в третьем письме
     
    Подскажите, как это сделать?
     
    Спасибо!

    Всего записей: 11 | Зарегистр. 11-09-2009 | Отправлено: 06:18 03-06-2011
    Legio



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    PALbICH
    Если я правильно понимаю то, что набингилось -- надо копаться в одном из трёх body MailItem'а ( .Body / .HTMLBody / .RTFBody ).

    Всего записей: 695 | Зарегистр. 01-08-2003 | Отправлено: 06:39 03-06-2011 | Исправлено: Legio, 06:39 03-06-2011
    PALbICH

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А как в нем копнуть? Если представите это в виде строчки кода (или двух), буду очень благодарен.
     
    Добавлено:
    что-то вроде такого:  

    Код:
     
    for each чего-то in myMail.Body
    if найдено Eq No then заменить его на Eq No C1
    next
     

    ?
     
    Если да, то как это по вэбэа'сски?
     
    Добавлено:
    Нашел. Вот так.
    dim sTemp
    А внутрь вышеуказанного цикла добавляем:

    Код:
     
    sTemp = "Eq No " + Equip(i)
    myMail.HTMLBody = Replace(myMail.HTMLBody, "Eq No", sTemp)
     

    И все работает. Спасибо, что натолкнули!

    Всего записей: 11 | Зарегистр. 11-09-2009 | Отправлено: 08:58 03-06-2011 | Исправлено: PALbICH, 10:36 03-06-2011
    PALbICH

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Снова прошу помощи. В Outlook 2007 есть входящее письмо с содержимым вида:
     
    1
     
     
    Temperature alarm
    65С
     
    2
     
     
    Ok
     
    3
     
     
    Temperature alarm
    68С
     
    Надо произвести поиск в теле письма по слову "Temperature" и каждый раз, когда это слово найдено, записывать в текстовую переменную 3 строки:
    1) строчку за 3 строки перед той, в которой найдено слово "Temperature"
    2) саму строчку, в которой найдено слово "Temperature"
    3) следующую за ней строчку
     
    Т.е. в результате по вышеприведенному примеру письма должно получиться 2 переменные (или строковый массив):
     
    1-я переменная:  
     
    1
    Temperature alarm
    65С
     
    2-я переменная:  
     
    3
    Temperature alarm
    65С
     
    Как это сделать? В голове крутится что-то вроде такого:

    Код:
     
    If InStr(myMail.HTMLBody, "Temperature") > 0 Then
    ....
    End If
     

    Но тут, найти-то найдешь, а как потом сделать запись нужных строк до и после найденной в переменные? Может какой другой оператор вместо InStr использовать?

    Всего записей: 11 | Зарегистр. 11-09-2009 | Отправлено: 13:41 07-06-2011
    Legio



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Во-первых, не очень понятно, чего вы так к .HTMLBody привязались. В .Body должен быть plaint-text, с ним куда удобнее работать -- как минимум из-за того, что нет html-разметки. (Разве что Outlook только одно из трёх свойств заполняет...)
    Во-вторых, не очень понятно, что означают эти три переменные -- что письма три? что в теле письма temperature может встречаться больше одного раза?
     
    Допустим, что в каждом отдельно взятом письме temperature может встретиться не более одного раза. И что письмо в .Body всё-таки есть. Тогда навскидку можно попровать как-то так:

    Код:
        Dim splitBody() As String
        splitBody = Split(myMail.Body, vbCrLf) 'бьём тело письма в массив строк
         
        Dim i As Integer
        For i = 0 To UBound(splitBody)
            'если в текущей строке встретилось temperature -- выходим из цикла
            If (splitBody(i) Like "*Temperature*") Then Exit For
        Next i
         
        Dim someVar As String 'переменная для хранения результата
         
        ' тут механизм простой -- если индекс цикла (i) вышел за
        ' верхнюю границу массива, значит temperature не было
        ' найдено и ловить в этом MailItem'е нечего
        If (i <= UBound(splitBody)) Then
             
            someVar = vbNullString 'на всякий случай
             
            'если существует строчка "за 3 строчки до той", добавляем её к результату
            If (i > 3) Then someVar = someVar & splitBody(i - 3) & vbCrLf
                 
            'добавляем строчку с многострадальной temperature
            someVar = someVar & splitBody(i) & vbCrLf
             
            'если существует следующая строчка, добавляем её к результату
            If (i < UBound(splitBody)) Then someVar = someVar & splitBody(i + 1)
             
        End If
     

    Всего записей: 695 | Зарегистр. 01-08-2003 | Отправлено: 18:35 07-06-2011 | Исправлено: Legio, 18:35 07-06-2011
    PALbICH

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Большое спасибо, очень помогли!

    Всего записей: 11 | Зарегистр. 11-09-2009 | Отправлено: 13:54 08-06-2011
    PALbICH

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста, есть ли в VBA готовая функции или код, делающие выделение номера сети и узла из IP-адреса по маске?  
    Можно конечно написать код с разложением в двоичку, накладыванием маски на адрес и т.д., но может это уже решено и существует типовая функция или код?
     
    Например:
     
    Исходные данные:
    IP-адрес: 192.168.0.102
    Маска: 255.255.255.252
     
    Необходимо получить:
    Номер сети: 192.168.0.100
    Номер узла: 2

    Всего записей: 11 | Зарегистр. 11-09-2009 | Отправлено: 20:05 21-07-2011
    blaro



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    PALbICH
    Насколько я помню это простая бинарная операция XOR. Делишь IP на 4 сегмента и между ними XOR.

    ----------
    Оптимистично смотрю на мир глазами убийцы.

    Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 20:13 21-07-2011
    Legio



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Гугл ничего не подсказал, но на скорую руку слепилось что-то вроде такого:

    Код:
     
        MsgBox (255 And 192) & _
            "." & (255 And 168) & _
            "." & (255 And 0) & _
            "." & (252 And 102)
        MsgBox ((252 And 102) Xor 102)
         
        'или оно же, но через исходные данные
        Dim ip As String, mask As String
        ip = "192.168.0.102"
        mask = "255.255.255.252"
        MsgBox (CByte(Split(mask, ".")(0)) And CByte(Split(ip, ".")(0))) & _
            "." & (CByte(Split(mask, ".")(1)) And CByte(Split(ip, ".")(1))) & _
            "." & (CByte(Split(mask, ".")(2)) And CByte(Split(ip, ".")(2))) & _
            "." & (CByte(Split(mask, ".")(3)) And CByte(Split(ip, ".")(3)))
         
        MsgBox ((CByte(Split(mask, ".")(3)) And CByte(Split(ip, ".")(3))) Xor CByte(Split(ip, ".")(3)))
     

    Думаю, что не так сложно "облагородить" это в отдельную функцию/процедуру, которая бы принимала два текстовых параметра и возвращала чаемое каким-нибудь понятным способом.

    Всего записей: 695 | Зарегистр. 01-08-2003 | Отправлено: 05:53 22-07-2011
    PALbICH

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо!

    Всего записей: 11 | Зарегистр. 11-09-2009 | Отправлено: 11:35 22-07-2011
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Visual Basic (VB).


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru