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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Midbaril

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dneprcomp
    Legio
    Спасибо за ответы, уважаемые! Но чуть помедленнее... я запису .
     Для меня вся эта полемика - темный лес. О массивах, иттерациях, индексах... читаю не первый раз, но не доходит . Да еще и о каких-то стандартах и Option Base говорите... .
     Так что попробую постепенно, с того, что предложили, а там видно будет.

    Всего записей: 15 | Зарегистр. 21-06-2009 | Отправлено: 11:45 21-06-2009
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Midbaril

    Цитата:
    О массивах, иттерациях, индексах... читаю не первый раз, но не доходит .

    Массив - набор переменных одного типа, объединенных одинаковым именем с порядковыми номерами (индексами). Итерация - в данном случае означает одно выполнение цикла.

    Цитата:
    Да еще и о каких-то стандартах и Option Base говорите...  

    Стандарт в VB в контексте данного разговора - нумерация массивов начинается с 0. То есть, первый элемент массива имеет порядковый номер 0, второй - 1 и т.д.
    Option Base 1 как раз и меняет это значение по умолчанию на 1. И нумерация массивов начинается тогда с единицы.
     
     
    Добавлено:
    Также нижний индекс конкретного массива можно задать явно.
    Например, не dim arr(9), а dim arr(1 to 10) или dim arr(7 to 16).
    Во всех этих случаях массив будет содержать 10 элементов, но отсчет индексов будет начинаться соответственно с 0, 1 и 7

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 12:48 21-06-2009
    Midbaril

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

    Цитата:
    Код:Const intListCount As Integer = (...)

     
    Объявляя intListCount как константу, нужно ввести значение. Неужели в скобках должен быть весь перечень фиксир. значений??

    Всего записей: 15 | Зарегистр. 21-06-2009 | Отправлено: 13:07 21-06-2009
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Midbaril

    Цитата:
    Объявляя intListCount как константу, нужно ввести значение.

    Здесь вводится общее количество фиксированных значений
     
    Добавлено:
    без всяких скобок

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 13:13 21-06-2009
    Midbaril

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rush
    Попытался в качестве значения константы ввести arpList(X), выдает ошибку: "Процедура или функция не определена", выделяя arpList

    Всего записей: 15 | Зарегистр. 21-06-2009 | Отправлено: 13:18 21-06-2009
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Midbaril

    Цитата:
    Попытался в качестве значения константы ввести arpList(X

    Зачем? Константа на то и константа, что она не меняется. Во-вторых, если тебе надо куда-то вставить значение количества элементов массива, используй ubound(arpList)+1.
    Если с 0 начинается.
    Что вообще ты там делаешь? Выложи код.

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 13:29 21-06-2009
    Midbaril

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rush
    Кусок кода таков:
     
    Const intListCount As Integer = 96
    intListCount = 96 - 1
    'Объявляем массив и заполняем его значениями ряда
    Dim arрList(intListCount) As Single
    arрList(0) = 1
    arрList(1) = 1.1
    ...
     
    Так теперь выделяет выражение "intListCount =" и заявляет:
     
    Ошибка компиляции:
    Назначение в константу не разрешено
     
     
    Добавлено:
    что за ерунда! Пытаюсь минуту спустя внести дополнение к сказанному, а сайт обзывается Флудем, подозревает в создании новой темы и не отправляет сообщение. Мол, подождите 5 минут. Да еще и предлагает зарегистрироваться. Что, еще раз!?
     
    Rush
    В инете полно литературы по VBasic-у, особенно, по функциям, но ничего не мог найти отдельного по ИНСТРУКЦИЯМ/операторам
    Не можешь помочь с этим?

    Всего записей: 15 | Зарегистр. 21-06-2009 | Отправлено: 13:32 21-06-2009
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Midbaril
    Так я тебе и написал что константы тем и отличаются от переменных, что не изменяются.

    Код:
    intListCount = 96 - 1
    эта строчка лишняя. напиши просто
    Код:
    Const intListCount As Integer = 95
     
     
     
    Добавлено:
    Midbaril

    Цитата:
    но ничего не мог найти отдельного по ИНСТРУКЦИЯМ/операторам

    http://msdn.microsoft.com/ru-ru/library/sh9ywfdk.aspx

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 13:43 21-06-2009
    Midbaril

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rush
    Кусок кода в предыдущем ответе - не ответ на твою просьбу о коде. Это из-за фокусов сайта, несинхронность.
    Часть кода такова:
    *********
    Select Case a6
    ...
    Case 9.5 * 10 ^ -3 To 9.499 * 10 ^ -6
    a6 = a6 * 10 ^ 3
    lblcc.Caption = Format$(a6, "#") + " мкФ"
    End Select
     
    Dim CurentResult As Single
    Dim X As Integer
    Const intListCount As Integer = 96
    ' Объявляем массив и заполняем его значениями ряда
    Dim arрList(intListCount) As Single
    arрList(0) = 1
    arрList(1) = 1.1
    ...
    arрList(94) = 8200
    arрList(95) = 9100
     
    For X = 0 To intListCount
    If X = 0 Then
    End If
     
    CurrentResult = arрList(X) - a6
    If CurrentResult = 0 Then
    '[полученное] и есть наиболее близкое значение
    ElseIf CurrentResult < 0 Then
    If X > 0 Then
    'сравнить с a6 и решить принимаем или нет и что именно принимаем
    End If
    ElseIf CurrentResult > 0 Then
    End If
    Next X
     
    End Sub
    ********
    код с массивом и If...Then получил от dneprcomp, но у меня сомнения по этим строчкам:
     
    For X = 0 To intListCount
    If X = 0 Then
    End If
     
    и вопрос по тому, КАК потом подходящий элемент массива вывести в окончательный результат задачи (когда разница arрList(X) - a6 приблизится к нулю)?

    Всего записей: 15 | Зарегистр. 21-06-2009 | Отправлено: 14:09 21-06-2009
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Midbaril

    Цитата:
    Const intListCount As Integer = 96  

    В принципе, совсем ни к чему. Можно объявить размер явно.

    Цитата:
    arрList(95) = 9100  
     
    For X = 0 To intListCount  

    За arрList(95) должен идти 96. Так как размер массива у тебя равен 97(0-96). Или уменьши на единицу intListCount.
    Дальше лучше так:

    Код:
     
    dim numindex as integer
    dim ResultPrev as single
    ResultPrev = abs(arрList(0) - a6)
    numindex = 0
    if ResultPrev <> 0 then
       for x = 1 to intListCount
          CurrentResult = abs(arрList(x) - a6)
          if CurrentResult = 0 then
             numindex = x
             exit for
          elseif CurrentResult < ResultPrev then
             ResultPrev = CurrentResult
             numindex = x
          end if
       next
    end if
    text1.text = cstr(arрList(numindex))
     
    Здесь значение выводится в текстбокс. Куда надо - выбери сам...

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 15:05 21-06-2009 | Исправлено: Rush, 15:10 21-06-2009
    dneprcomp



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

    Цитата:
    if ResultPrev <> 0 then

    А если =?
     
    Добавлено:
    А если ResultPrev еще не инициализирован?

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 19:42 21-06-2009
    Midbaril

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rush
    dneprcomp
    Спасибо вам! Работает! Теперь буду копать - как это работает. For...Next всегда меня сбивал с толку. Вроде все понятно, а через 5 минут - ни в одной извилине!
    И отдельное спасибо, Rush, за ссылку на MSDN!

    Всего записей: 15 | Зарегистр. 21-06-2009 | Отправлено: 20:29 21-06-2009
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dneprcomp

    Цитата:
    А если =?  


    Цитата:
    А если ResultPrev еще не инициализирован?

    А в код посмотреть?
    ResultPrev = abs(arрList(0) - a6) или это тебе ни о чем не говорит?
    Если =, то естественно arрList(numindex) = arрList(0)
     
    Я офигел. Объяснять такие очевидные вещи, вроде, опытному человеку...
     
    Добавлено:
    Midbaril
    Кстати, если у тебя в массиве arрList значения последовательно растут, а не вразброс, то перед next можно вписать такую строчку:

    Код:
    if x <> numindex then exit for
     
    Чтобы не делать лишних проходов цикла.

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 01:02 22-06-2009
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rush
    Офигел, не офигел...  
    Во-первых, не обратил внимания. А во-вторых, что это такое - a6 ?

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 09:45 22-06-2009
    Midbaril

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dneprcomp
    a6 - это одна из переменных. Как раз тот самый, промежуточный результат. Просто, ты увидел кусок кода и тебе с ней не понятно (либо ты привык переменные называть более полно)
     
    Добавлено:
    Rush
    dneprcomp
    Кстати, может поделитесь некоторыми мыслями по одному поводу?
     Начал свое путешествие в программировании с VB-6 (portable). Русифицировал (найденный русификатор оказался некорректен). Написал не одну программульку, удачные (для начала), интерес не пропал.
     Неделю назад поставил почти весь Visual Studio 2008 Rus %). Весь потому, что не мог понять - ЧТО мне оттуда нужно, а чего не нужно. Ставил только ради VB-6 и возможности конвертировать код в нормальный ЕХЕ-дистрибутив.
     Проблемка, в которой вы мне помогли (еще раз вам спасибо!) позволила мне продвигаться дальше. Так вот... Вчера скопировал код в VB-2008 и этот навороченный умник выдал мне 24 ошибки в написании кода! Как в Ворде, подчеркнул строки волнистой линией и всем ошибкам дал одно название "Недопустимый оператор для пространства имен".
    Подчеркнул объявления переменных в Option Explicit, ВСЕ первые строки начала процедур (типа Private Sub mnuAbout_Click())! Ну чем ему не угодила эта строка с вызовом "О программе"?!?
    Дал в справке поиск "Недопустимый оператор для пространства имен"... Единственное, что я понял после этого, что или придется забыть о VB-2008, или переходя на него, переучиваться заново, С НУЛЯ!

    Всего записей: 15 | Зарегистр. 21-06-2009 | Отправлено: 09:20 23-06-2009
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Midbaril
    VB6 и VB.NET из Visual Studio 2008 очень разные вещи, несмотря на одинаковое название. Так что напрямую код от VB6 вставить в VB.NET нельзя. Только если этот код элементарен и короток. Скажем, код "Hello, World" возможно воспримется корректно.
    Логика работы программ осталась таже. Синтаксис достаточно близок к VB6. Особено именно начиная с VS 2008. Приемы програмирования другие. Взаимоотношения между элементами/блоками кода происходят по другому.

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 21:01 23-06-2009
    Zahi



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Посмотрите http://rapidshare.com/files/248776524/TubingWizard.exe
    это макро для solid edge http://www.barhamsoftware.com/SE_Tools/index.htm
    нужно подредактировать фаил, а то он глючит.

    Всего записей: 480 | Зарегистр. 15-04-2003 | Отправлено: 12:00 26-06-2009
    Midbaril

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dneprcomp
    Вообще-то, я ничего не говорил о VB.NET . Код вставлял именно в VB (в VStudio 2008)

    Всего записей: 15 | Зарегистр. 21-06-2009 | Отправлено: 22:05 26-06-2009
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Midbaril
    Нет в Visual Studio 2008 просто VB. Только VB.NET
    И не будет
     
    Добавлено:
    Начиная с 2003 все VB версии только .NET

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 01:27 27-06-2009
    maratino



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    помогите отключить вертикальное выделение
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim addr As String
        Dim x As Variant
        Dim rng, c, r, cll As String
           
        If NoEvents Then Exit Sub
        If Target.Cells.Count > 1 Then Exit Sub
        addr = ActiveCell.Address()
        x = Split(addr, "$")
        c = x(1)
        r = x(2)
        rng = c & ":" & c & "," & r & ":" & r
        Range(rng).Select
        cll = c & r
        Range(cll).Activate
    End Sub

    Всего записей: 58 | Зарегистр. 11-03-2007 | Отправлено: 13:04 04-07-2009 | Исправлено: maratino, 13:05 04-07-2009
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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