непойму в чем ошибка

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
*Qwerty*
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 10.05.2004 (Пн) 4:01
Откуда: Енакиево

непойму в чем ошибка

Сообщение *Qwerty* » 22.11.2004 (Пн) 15:46

Здравствуйте
Вобщем чтобы все сразу стало на всои места, для начала напишу в чем заключается мое задание:
Сформировать одномерный массив М(29), значение элементов котрого располагается произволным образом в диапазоне от 7 до 9 и округлены до сотых. Сформировать из массива М новый отсортированный массив К по убыванию, в который входят те элементы массива М, у которых величина дробной части больше, чем 2% от значения их индекса в массиве М.
Вывести массивы М и К в виде таблиц с псевдографическими границами(количество строк не более 6, количество столбцов должно быть минимальным и определяется програмно). Индекс каждого элемента таблицы должен быть указан, например М(3)-5.7. Индекс в массиве м изменяется по строке, а в массиве К - по столбцу.

Так вот, составил я такую программу:

Код: Выделить всё
Dim m(29) As Double
Dim drchast As Double
Dim tmp As Variant
Dim i, switch, limit, n As Long
Dim k() As Double
'Formiruem massiv
    For n = 0 To 29
        m(n) = 7 + Rnd() * 2
    Next
'Sortiruem massiv po metodu puzyr`ka
limit = LBound(m)
Do
    switch = UBound(m)
        For i = UBound(m) To limit - 1
            If m(i) < m(i + 1) Then
            tmp = m(i): m(i) = m(i + 1): m(i + 1) = tmp
            switch = 1
            End If
        Next
    limit = switch
Loop While switch < UBound(m)
i = -1
    For n = 0 To 29
        drchast = m(n) - Int(m(n))
        If drchast > 0.02 * n Then
            i = i + 1
            k(i) = m(n)
        End If
    Text1.Text = Text1.Text & "m" & Str(n) & "= " & Str(m(n)) & vbCrLf
    Next
    For n = 0 To i
       Text1.Text = Text1.Text & "k" & Str(n) & "= " & Str(k(n)) & vbCrLf
    Next


И вобщем пишет оно мне, мол "Subscript out of range", выделяя при этом строку "k(i) = m(n)". Непойму почему так? В чем ошибка?

И ещё: в задании сказано, что надо вывести ответ в таблицу с псевдографическими символами, но как это сделать, если в текстбоксе не выводяться псевдографические символы Ascii- вместо них просто вертикальные черточки?

И последнее: как округлить значение переменно до сотых?

Заранее благодарен...
BASIC-программисты – люди меченые, путем насилия или подкупа нас можно заставить работать на другом языке, но думать-то мы все равно будем на BASIC (c) C.Г.Зиновьев

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 22.11.2004 (Пн) 17:47

Насчет 2 последних:
1. Выставь в текстбоксе кегль Terminal
2. Round() - тебе это поможет.

Насчет остального - с формулировками что-то явно не то...

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 22.11.2004 (Пн) 18:15

Относительно основной проблеммы:
ты объявляешь динамический массив k, и соответственно он не имеет ни одного элемента, именно поэтому у тебя вылезает ошибка "Subscript out of range". Перед тем как использовать какой-либо элемент массива, его надо создать. Для этого используется функция ReDim k (тут число или переменная) as ...

вообщем тебе перед строчкой на котороую ругается vb6 надо написать во это:
ReDim Preserve k(i) As Double
в данном случае Preserve означает, что все значения элементов массива будут сохранены

ещё рекомендую в начале процедуры написать Randomize(), а то у тебя при каждом запуске будут одни и те же данные генерироваться функцией Rnd()


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 22

    TopList