Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Задачи на Visual Basic (VB).

Автор: Rush
Дата сообщения: 15.06.2009 13:36
Kiri4V

Цитата:
на этой строке программа останавливается и пишет "run time error "9" subscript out of range"

Мне думалось, что опшен базе у тебя в единицу установлен. Так как у тебя все циклы перебора массивов с единицы начинались.
Да и подзабыл я васик уже маленько. Так что извиняй.
Автор: Jecstor
Дата сообщения: 16.06.2009 10:33
Помогите пожалйуста:

Вводится строка слов, не менее 5, разделенных точкой с запятой. После нажатия на кнопку “ВЫПОЛНИТЬ” в список Результаты помещаются все слова из введенной строки, состоящие больше, чем из 5 букв, а в поле Количество – количество слов, удовлетворяющих этому условию.
Введенная строка и удовлетворяющие условию слова сохраняются на рабочем листе в ячейках таблицы, располагаясь в соседних столбцах.
Автор: Crazyblind
Дата сообщения: 17.06.2009 21:05
Jecstor

i = 1
a$ = Text1.Text
For m = 1 To Len(a$)
If Mid(a$, m, 1) = ";" Then skobka = skobka + 1
Next
For j = 1 To skobka
b$ = ""
While Mid(a$, i, 1) <> ";"
b$ = b$ + Mid(a$, i, 1)
i = i + 1
Wend
If Len(b$) > 5 Then Text2.Text = Text2.Text + b$+" ": Text3.Text = Val(Text3.Text) + 1
i = i + 1
Next
End Sub

Не совсем понял про таблицу в конце, все сделано в текстовых полях. Если что, извините, буду теперь с вами. Учусь на программиста(в шараге =/), заканчиваю 2ой курс. Задачки порешать всегда полезно.
Автор: Rush
Дата сообщения: 18.06.2009 03:13
Crazyblind

Цитата:
Задачки порешать всегда полезно.

Конечно. Практика - это главное.
Зачем ты заморачиваешься так с текстом? Гораздо проще вычленить слова функцией split.
Примерно так:

Код:
private sub Command1_Click()
dim arrword
dim i as integer, word as string
List1.Clear
arrword = split(Text1.Text, ";")
for i = lbound(arrword) to ubound(arrword)
word = trim$(arrword(i))
if len(word) > 5 then List1.AddItem word
next
Text2.Text = cstr(List1.ListCount)
end sub
Автор: Crazyblind
Дата сообщения: 18.06.2009 04:58
Rush

Мне литературы надо больше читать, функции то split не знал . Вот из-за этого так и заморачиваюсь;). Вот с тобой и буду практиковаться
Автор: Rush
Дата сообщения: 18.06.2009 12:38
Crazyblind

Цитата:
Мне литературы надо больше читать, функции то split не знал

http://forum.ru-board.com/topic.cgi?forum=33&topic=5993&start=680#14
Автор: Crazyblind
Дата сообщения: 18.06.2009 16:30
Rush

Спасибо огромное, кстати программки, не прорешанные на той странице еще актуально порешать?
Автор: Rush
Дата сообщения: 18.06.2009 16:38
Crazyblind
Никто не запрещает. Если вопрос задан - ответ всегда приветствуется.
Автор: dneprcomp
Дата сообщения: 18.06.2009 23:35
Crazyblind

Цитата:
Мне литературы надо больше читать, функции то split не знал

А просто в шапке посмотреть...
Автор: Crazyblind
Дата сообщения: 19.06.2009 11:55
dneprcomp



Цитата:
А просто в шапке посмотреть...


Ну-у, делаю программу из того что знаю. Экзамены вот закончились. Надо будет тут задачки порешать
Автор: dneprcomp
Дата сообщения: 19.06.2009 19:35
Crazyblind
Да я вот об этом.
Цитата:
Мне литературы надо больше читать, функции то split не знал

В шапке же специально стоят ссылки на описание фунций. Еще и по группам отсортированы.
Просто полистать, посмотреть что существует
Автор: Crazyblind
Дата сообщения: 19.06.2009 23:29

Цитата:
В шапке же специально стоят ссылки на описание фунций. Еще и по группам отсортированы.
Просто полистать, посмотреть что существует



!!!Я надеюсь мы сейчас закончим . Я сделал ту программу без функции split, и думал это нормально мучеться с текстом, я же не самоучка, поэтому не знаю всех функций, меня как научили так и делал, после мне Rush показал как сделать то же самое без моих мук, вот я и решил почитать побольше! . Все хватит

Автор: Midbaril
Дата сообщения: 21.06.2009 00:13
Всем доброй ночи! Только месяца 3, как "подключился" к VBasic-у (6-ому), но нижеследующую проблемку не могу решить неделю...
В одной из процедур - обычный математический расчет и промежуточный результат "обрезается" через Format. Имеется внушительный ряд фиксированных значений, одно из которых, в зависимости от промежуточного результата, будет являться конечным результатом задачи. Так вот мне нужно, чтобы из этого ряда подбиралось значение, максимально близкое к промеж-ному рез-ту.
Скажем, имеется ряд из: 1,2; 2; 2,4; 3; 5,1;... Промежут-ый рез-т получился - 2,3. Значит в ответ должно пойти - 2,4.
Как это сделать? Каждое фиксир. значение в Select Case (или в Choose) вписывать...? Это такая громадина получится! И таких математ. процедур несколько...
Автор: dneprcomp
Дата сообщения: 21.06.2009 00:49
Midbaril
Можно к примеру последовательно в цикле делать [значение ряда] - [полученное] с запоминанием предыдущего результата. Внутри этого же цикла помещаем несколько If Then c возможными вариантами соотношений двуx результатов и [значение ряда]. Таких соотношений будет не много.
Автор: Midbaril
Дата сообщения: 21.06.2009 01:43
dneprcomp
Не совсем понял (с моим-то стажем...). Речь о цикле For...Next? Я понимаю, что где-то в программе придется ввести весь ряд фиксир. значений (около 84 штук), но... на сколько понимаю, не в цикл For...Next. Он не поддерживает подобное. У него всего два значения - от сих до сих. Или не так?
Может, пример кода приведете. Может, так попробую и пойму (или не пойму)

Добавлено:
dneprcomp
И потом... Допустим, попыхтел я и создал 84 строки Select Case (или For...Next, или If Then)... Но каким кодом/оператором/функцией подбирать БЛИЖАЙШЕЕ значение из ряда? Вот в чем загвоздка!
Автор: dneprcomp
Дата сообщения: 21.06.2009 04:34
Midbaril
Prototype

Код:
Dim CurentResult as decimal
Dim ResultPrev as decimal
Dim intListCount as integer
intListCount = (сколько надо значений) -1 'k примеру 84
'Объявляем массив и заполняем его значениями ряда
Dim arрList(intListCount) as decimal
arрList(0)=1.2
arрList(1)=2
и т.д.

Dim X as integer

For X = 0 to intListCount

If X=0 then
ResultPrev=[полученное]
end if

CurrentResult = arрList(x) - [полученное]

if CurrentResult = 0 then
[полученное] и есть наиболее близкое значение
ElseIf CurrentResult < 0 then
If X>0 then
сравнить с ResultPrev и решить принимаем или нет и что именно принимаем
End If

ElseIf CurrentResult > 0 then

и т. д.

End If

'в любом случае:
ResultPrev=[полученное]

next x
Автор: Legio
Дата сообщения: 21.06.2009 06:01

Цитата:
Dim intListCount as integer
intListCount = ( ...


Код: Const intListCount As Integer = ( ...
Автор: dneprcomp
Дата сообщения: 21.06.2009 07:03
Legio

Цитата:
Чай, не дотнеты, можно массив и как (1 To ...) объявить
А, собственно, зачем? Пусть лучше к стандартам приучается. Кроме того, в VB6 массивы все-таки с 0 начинаются.
Цитата:
Пробежать массив полностью
Да наверное можно и так. Я же писал - prototype
Цитата:
индекс элемента, у которого он будет минимальным, отдать кому надо после пробега
Примерно так if и действуют. А как без if сравнивать будем? А ну как предыдущее значение было ближе?

Автор: Legio
Дата сообщения: 21.06.2009 07:58

Цитата:
Пусть лучше к стандартам приучается. Кроме того, в VB6 массивы все-таки с 0 начинаются.

Option Base ещё никто не отменял


Цитата:
А, собственно, зачем?

Понятнее. Меньше подробностей в голове держать => меньше путаницы в мыслях.
Автор: Midbaril
Дата сообщения: 21.06.2009 10:45
dneprcomp
Legio
Спасибо за ответы, уважаемые! Но чуть помедленнее... я запису .
Для меня вся эта полемика - темный лес. О массивах, иттерациях, индексах... читаю не первый раз, но не доходит . Да еще и о каких-то стандартах и Option Base говорите... .
Так что попробую постепенно, с того, что предложили, а там видно будет.
Автор: Rush
Дата сообщения: 21.06.2009 11:48
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
Автор: Midbaril
Дата сообщения: 21.06.2009 12:07
Legio


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


Объявляя intListCount как константу, нужно ввести значение. Неужели в скобках должен быть весь перечень фиксир. значений??
Автор: Rush
Дата сообщения: 21.06.2009 12:13
Midbaril

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

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

Добавлено:
без всяких скобок
Автор: Midbaril
Дата сообщения: 21.06.2009 12:18
Rush
Попытался в качестве значения константы ввести arpList(X), выдает ошибку: "Процедура или функция не определена", выделяя arpList
Автор: Rush
Дата сообщения: 21.06.2009 12:29
Midbaril

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

Зачем? Константа на то и константа, что она не меняется. Во-вторых, если тебе надо куда-то вставить значение количества элементов массива, используй ubound(arpList)+1.
Если с 0 начинается.
Что вообще ты там делаешь? Выложи код.
Автор: Midbaril
Дата сообщения: 21.06.2009 12:32
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-у, особенно, по функциям, но ничего не мог найти отдельного по ИНСТРУКЦИЯМ/операторам
Не можешь помочь с этим?
Автор: Rush
Дата сообщения: 21.06.2009 12:43
Midbaril
Так я тебе и написал что константы тем и отличаются от переменных, что не изменяются.

Код: intListCount = 96 - 1
Автор: Midbaril
Дата сообщения: 21.06.2009 13:09
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 приблизится к нулю)?
Автор: Rush
Дата сообщения: 21.06.2009 14:05
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))
Автор: dneprcomp
Дата сообщения: 21.06.2009 18:42
Rush

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

А если =?

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

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940

Предыдущая тема: для Hiper-six (индексы .nsx .smt) хоть что нибудь Опции


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.