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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VBScript - разделитель целой и дробной части
    Необходимо из XML считать параметр (формата #.#) и умножить его на 1.39
    Получаю так  

    Код:
     x = Node.getAttribute("x")  
     
    Дальше начинаются проблемы:
    x - string, но CInt(х) не работает из-за точки.  
    Можно, конечно, отсечь всё что за запятой через Left, но как то ... не красиво  
     
     

    Всего записей: 159 | Зарегистр. 29-07-2005 | Отправлено: 22:32 17-04-2006
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zoric
    А почему использован именно CInt() ? Умножаем на десятичную дробь. Если приводим к Integer, то теряем точность. Надо использовать CDec()

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 23:10 17-04-2006
    Troitsky



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

    Цитата:
    CInt(х) не работает из-за точки

    Не в точке дело. Если x - строка, то прежде чем функцию CInt применять, по идее нужно эту строку в число перевести:
    Код:
    CInt(Val(x))


    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 09:37 18-04-2006
    zoric

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

    Цитата:
    Надо использовать CDec()


    Цитата:
    Если x - строка, то прежде чем функцию CInt применять, по идее нужно эту строку в число перевести:
     CInt(Val(x))

     
    1. CDec тоже не работает
    2. Val в VBScript НЕТ!
    3. Я же и говорю - проблема в точке.  

    Код:
    CInt(1,987987) = 2
    CInt(1.987987) = Несоответствие типа 'CInt'
     
    Писать что ли функцию Mult(x, y)?

    Код:
    Заменить в x точку на запятую
    Преобразовать строку в число
    Умножить на у
    Преобразовать в строку
    Заменить запятую на точку
    Возвратить результат
     
     
     
    Или может как-то возможно в скрипте заменить "разделитель целой и дробной части"
     

    Всего записей: 159 | Зарегистр. 29-07-2005 | Отправлено: 12:07 18-04-2006 | Исправлено: zoric, 12:10 18-04-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    zoric
    Эта тема по типовым задачам на VB. Тема по VBScript тут. Ты же постил уже там, зачем сюда перешел?
     
    Разделителем целой и дробной части является точка, а не запятая и в этом плане твой код
    Код:
    CInt(1.987987) = Несоответствие типа 'CInt'
    работает нормально и без ошибок. Ошибки наоборот возникают когда запятая там фигурирует. Возможно вся соль в региональных настройках, может еще в чем.
     
    В любом случае можно воспользоваться функцией Replace:
    Код:
    Replace("1,987987", ",", ".")


    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 20:27 18-04-2006 | Исправлено: Troitsky, 20:29 18-04-2006
    zoric

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

    Цитата:
     CInt(1.987987) = Несоответствие типа 'CInt'
    работает нормально и без ошибок. Ошибки наоборот возникают когда запятая там фигурирует. Возможно вся соль в региональных настройках, может еще в чем.  

    Ну конечно в них. У меня (как и у большинства тех, кто будет использовать мой скрипт) - Россия. И ошибка вылазит как раз из-за точки.
     
    Свою ф-ию я уже написал:

    Код:
    Function Mult(x, y)
        x = Replace (x, ".", ",")
        x = CDbl(x)
        'x = x * y
        If x <> 0 Then  
            x = FormatNumber ((x * y), 5, -2, -2, 0)
        End If
        x = CStr (x)
        Mult = Replace (x, ",", ".")  
    End Function
     
     
    Но ИМХО должно быть какое-то другое решение проблемы. Прежде чем постить искал в сети "разделитель целой и дробной части" Сразу же нашёл несколько  подобных тем. И везде - Replace.
    Чёрти что. А если у юзера стоит En - засовывать в ф-ию проверку, какие там региональные настройки. Лезть в рееестр, только для того что-бы перемножить 2 числа.
    Может я неправильно читаю xml? Как-то можно указать, что здесь - число, а не строка.

    Цитата:
     Эта тема по типовым задачам на VB. Тема по VBScript тут.  

    Извиняюсь. Решил, что вопрос подходит и для VB.

    Всего записей: 159 | Зарегистр. 29-07-2005 | Отправлено: 12:41 19-04-2006
    Troitsky



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

    Цитата:
    Ну конечно в них. У меня (как и у большинства тех, кто будет использовать мой скрипт) - Россия. И ошибка вылазит как раз из-за точки.

    У меня тоже российские региональные настройки и в качестве разделителя целой и дробной части задана запятая, но от этого ничего не меняется - скрипт благополучно работает с точкой, но не с запятой.
    Для чистоты эксперимента пробовал настройки менять - та же петрушка, скрипт в качестве десятичного разделителя понимает только точку.
    Мне вообще кажется, что на программном уровне кроме точки ничего и быть не может, ведь запятая - это признак перечисления параметров функции.
    Кстати, подобного рода и сообщение об ошибке выводится в случае использования запятой: "Недопустимое число аргументов...".
     
    Добавлено:
    Если у тебя смена региональных настроек делу помогает, можешь программно менять ключ реестра HKEY_CURRENT_USER\Control Panel\International\sDecimal, в котором прописан десятичный разделитель Windows.

    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 19:07 19-04-2006
    zoric

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Может дело в системе - у меня ХР

    Всего записей: 159 | Зарегистр. 29-07-2005 | Отправлено: 20:34 19-04-2006
    Troitsky



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

    Цитата:
    Может дело в системе - у меня ХР

    У меня тоже WinXP SP2 русская.
    Может от версии vbscript.dll зависит? У меня 5.6.0.8820. У тебя такая же? Хотя, не должно вроде бы...
    Я даже не знаю. Поспрашивай в топике по VBScript, может там что подскажут.

    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 21:36 20-04-2006 | Исправлено: Troitsky, 21:37 20-04-2006
    ShIvADeSt



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

    Цитата:
    Но ИМХО должно быть какое-то другое решение проблемы. Прежде чем постить искал в сети "разделитель целой и дробной части" Сразу же нашёл несколько  подобных тем. И везде - Replace.  
    Чёрти что. А если у юзера стоит En - засовывать в ф-ию проверку, какие там региональные настройки. Лезть в рееестр, только для того что-бы перемножить 2 числа.

    Вообще то самое правильное решение это как раз заменить запятую на точку, если у юзверя стоит енглиш, то там и так по умолчанию точка разделитель, то есть реплейс ничего не заменит ибо и так все норм

    Цитата:
    Если у тебя смена региональных настроек делу помогает, можешь программно менять ключ реестра HKEY_CURRENT_USER\Control Panel\International\sDecimal, в котором прописан десятичный разделитель Windows.

    зачем менять, его проще считать оттуда и в процедуре Replace вместо "," засунуть это значение, тогда даже если разделителем будет пробел, он все равно заменится на точку.

    ----------
    И создал Бог женщину... Существо получилось злобное, но забавное...

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:28 21-04-2006
    zoric

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

    Цитата:
     зачем менять, его проще считать оттуда и в процедуре Replace вместо "," засунуть это значение, тогда даже если разделителем будет пробел, он все равно заменится на точку.
     

    А вот это мысль!
    Но всё равно - я возмущён! Похоже на операцию на гландах.

    Всего записей: 159 | Зарегистр. 29-07-2005 | Отправлено: 20:51 21-04-2006
    Alex Dyler

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Учусь на 1 курсе института, информатик задал задачу на зачет, которую нужно написать на VBA,
    долго читал самоучитель ( информатик не дай бог никому) все что я понял это: сначала нужно задать
    массив чисел, затем поставить перебор чисел от 100 до 110, поставить оператор условного перехода If_Else и вывести Input Box для ввода N, но беда никак
    не могу собрать все в программу. Если кто знает помогите . Заранее безмерно благодарен за любую помощь. А вот собственно задача:
     
    Дана матрица А с 2 столбцами и N строками. Считать, что элементы этой матрицы являются случайными целыми числами от 100*N до 110*N. Первый элемент каждой строки матрицы А представляет один из 10 эталонных размеров некоторого сложного изделия, а второй - фактический размер конкретного такого изделия. Начиная с первой строки , выводить абсолютные величины разностей эталонного и фактического размеров, заканчивая процесс, если абсолютныя величина разности превысила 0,01.

    Всего записей: 1 | Зарегистр. 29-04-2006 | Отправлено: 10:50 29-04-2006
    zelinski



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Где можно скачать "Справку" для русифицированного VB 6.0? Как её установить? На VB 6.0 при изменении содержимого DriveListBox не изменяется содержимое DirListBox и в свою очередь при изменении содержимого DirListBox не изменяется содержимое  
    FileListBox. Что и куда надо добавить, чтобы содержимое FileListBox тут же изменялось при изменении содержимого  DirListBox содержимое которого тут же изменялось при изменении содержимогоDirListBox? А вообще-то хотелось, чтобы все файлы с  
    расширениями "txt" и "doc" из FileListBox при нажатии CommandButton, копировались в определённую папку.

    Всего записей: 471 | Зарегистр. 24-04-2003 | Отправлено: 07:07 01-05-2006
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zelinski
    Используй свойство Path в событии _Change. Примеры:
    dirList.Path = dirList.List(dirList.ListIndex)
    dirList.Path = drvList.Drive
    filList.Path = dirList.Path
     
    для фильтровки можно использовать
    filList.Pattern = "*.txt; *.doc"
     

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 07:33 01-05-2006
    hana

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    здраствуйте!!!
    препод задал т...задачу,ничего н6е объясняя!!!даже не знаю как подойти!!помогите пожалуйста!!!на окружности раставлено 20 точек .за ход разрешается соединить любые 2-ве из них отрезком не перес6екающим отрезков, проведенных ранее, проигрывает тот кто не может сделать ход!

    Всего записей: 1 | Зарегистр. 10-05-2006 | Отправлено: 15:37 10-05-2006
    Koshta

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Поможите безрукому.Задача элементарная, но не по мне.
     
    На ветвление
     
    Составить программу, которая для заданного числа X определяет, принадлежит ли X отрезку [A, B].  
     
    Пожалуйста.

    Всего записей: 3 | Зарегистр. 11-05-2006 | Отправлено: 18:34 11-05-2006
    Iceman82



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Koshta
    Например, можно так:

    Цитата:
     
    Dim A As Integer
    Dim B As Integer
    Dim X As Integer
     
    A = CInt(TextBox1.Text)
    B = CInt(TextBox2.Text)
    X = CInt(TextBox3.Text)
     
    If (X >= A) And (X <= B) Then
          MsgBox("X принадлежит отрезку [A,B]")
    Else
          MsgBox("X НЕ принадлежит отрезку [A,B]")
    End If
     

    З.Ы. Но вообще, было бы не плохо, если бы ты сообщал, в каком виде должна быть конечная программа (да и для какой версии VB тоже)

    Всего записей: 48 | Зарегистр. 10-02-2005 | Отправлено: 00:52 12-05-2006 | Исправлено: Iceman82, 16:23 12-05-2006
    Koshta

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо!
     
     
    Ну вот например вылазиет вопрос-введите число
    потом введите A в промежутке от А до B
    потом введите B в промежутке от А до B
     
     
    если принадлежит то выскакиевае что мол пренадлежит.
    VB кажись 6 с половиной

    Всего записей: 3 | Зарегистр. 11-05-2006 | Отправлено: 11:35 12-05-2006
    Iceman82



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Koshta
    Ну смотри, если тебе надо это сделать с графическим интерфейсом, то берешь форму, кидаешь на нее три TextBox'a, и какую нибудь кнопку (Command) и в обработчике события нажатия на эту кнопку пишешь то, что я уже писал выше.
    А если тебе все-таки надо, чтобы это работало в консоли в диалоговом режиме, тогда код должен быть примерно следующим (например):

    Цитата:
     
    Module Module1
        Sub Main()
            Dim A As Integer, B As Integer, X As Integer
     
            Console.Write("Введите число X: ")
            X = Console.ReadLine()
            Console.Write("Введите начало отрезка A: ")
            A = Console.ReadLine()
            Console.Write("Введите конец отрезка B: ")
            B = Console.ReadLine()
     
            If (X >= A) And (X <= B) Then
                MsgBox(X & " принадлежит отрезку [" & A & "," & B & "]")
            Else
                MsgBox(X & " НЕ принадлежит отрезку [" & A & "," & B & "]")
            End If
        End Sub
    End Module
     

    Правда, я работаю с VB.NET, поэтому функции ввода-вывода (Console.ReadLine и Console.Write) у тебя могут и не работать, но ведь в этой программе это и не так важно, правда?
     
    З.Ы. Если честно, я просто не знаю, как работает ввод-вывод в консоли в VB6.

    Всего записей: 48 | Зарегистр. 10-02-2005 | Отправлено: 16:33 12-05-2006
    Koshta

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

    Всего записей: 3 | Зарегистр. 11-05-2006 | Отправлено: 17:18 12-05-2006
    Открыть новую тему     Написать ответ в эту тему

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