автор |
сообщение |
Kurok
магистр
|
17 февраля 2009 г. 23:07 [нажмите здесь чтобы увидеть текст поста]
|
цитата benommen Смысл в том что в нормальном положении будет начинаться с восьмого элемента и 9 элемент заменит 8 и станет 8, а 10 заменит 9 и станет 9...
так в том то и дело, что при таком написании: X(i) = X(m + 1) 9 заменит 8, а дальше опять 9 заменит 9 — m то не поменялась в цикле
|
|
|
benommen
магистр
|
17 февраля 2009 г. 23:21 [нажмите здесь чтобы увидеть текст поста]
|
Решил поменять способ выкидывания числа, смотрите теперь так: Option Explicit Dim X(), n, max, m, i, B(), k
Private Sub Form_Load() n = 10 ReDim X(n), B(k) X = Array(-100, 12, 24, -3, 25, 0, 34, 56, -13, 7) For i = 1 To n List1.List(i — 1) = X(i — 1) Next i End Sub
Private Sub Command1_Click() max = -10000 For i = 1 To n If X(i — 1) > max Then max = X(i) m = i + 1 End If Next i Text1.Text = max Text2.Text = m End Sub
Private Sub Command2_Click() For i = 1 To n If i <> m Then k = k + 1 B(k) = X(i) List2.List(i — 1) = B(k) End If Next i List2.Visible = True Label5.Visible = True End Sub Пишет что выделенное ошибка...
|
|
|
benommen
магистр
|
17 февраля 2009 г. 23:24 [нажмите здесь чтобы увидеть текст поста]
|
Если что поясню, мы выбираем не элементы m и создаем новый массив без элемента m и кидаем его в новый лист2, который вконце становится видимым, отсюда и 2 последние строчки...
|
|
|
Kurok
магистр
|
|
Kurok
магистр
|
17 февраля 2009 г. 23:29 [нажмите здесь чтобы увидеть текст поста]
|
По-моему надо в этом:
цитата benommen Private Sub Command2_Click() — загрузка выкидания максимального числа способом ссужения списка. For i = m To n — 1 X(i) = X(m + 1) Next i n = n — 1 End Sub
заменить X(i) = X(m + 1) на X(i) = X(i + 1) , а вот здесь — For i = m To n — 1, просто n — и должно работать
|
|
|
Kalkin
миродержец
|
17 февраля 2009 г. 23:32 [нажмите здесь чтобы увидеть текст поста]
|
цитата benommen Private Sub Command1_Click() max = -10000 For i = 1 To n If X(i — 1) > max Then max = X(i) m = i + 1 End If Next i Text1.Text = max Text2.Text = m End Sub
1) вероятно, max = X(i-1) имелось в виду. 2) смысл следующей после этого строчки неясен. Вероятно, ты имел в виду m=i-1? Ну на худой конец m=i, хотя я бы не советовал (перегонять из одного отсчета в другой важную переменную — только путать самого себя) Предыдущий вариант этой функции был лучше. С B(k) вообще что-то странное. Где у тебя первый раз определяется k?
|
|
|
Kalkin
миродержец
|
|
benommen
магистр
|
|
Kurok
магистр
|
17 февраля 2009 г. 23:37 [нажмите здесь чтобы увидеть текст поста]
|
цитата Kalkin вероятно, max = X(i-1) имелось в виду.
Да нет — это правильно, но надо вот так:
цитата Private Sub Command1_Click() max = -10000 For i = 0 To n If X(i) > max Then max = X(i) m = i End If Next i Text1.Text = max Text2.Text = m + 1 End Sub
n задаётся равной 9, а не 10
|
|
|
Kalkin
миродержец
|
|
Kurok
магистр
|
|
Kalkin
миродержец
|
17 февраля 2009 г. 23:39 [нажмите здесь чтобы увидеть текст поста]
|
цитата Kurok Да нет — это правильно, но надо вот так:
То, что вы написали — почти правильно (считаем до n-1) То, что написал автор вопроса — нет
|
|
|
benommen
магистр
|
17 февраля 2009 г. 23:39 [нажмите здесь чтобы увидеть текст поста]
|
цитата Kalkin 1) вероятно, max = X(i-1) имелось в виду. 2) смысл следующей после этого строчки неясен. Вероятно, ты имел в виду m=i-1?
Поменял, все осталось прежним, точнее наврное более правильным...
цитата Kalkin С B(k) вообще что-то странное. Где у тебя первый раз определяется k?
К по умолчанию равно нулю... С В(к) не так трудно, просто мы выкидываем 8 элемент и заганяем новый массив с 9 элемантами...
|
|
|
benommen
магистр
|
17 февраля 2009 г. 23:44 [нажмите здесь чтобы увидеть текст поста]
|
Kalkin Kurok С максимумом кувыркаться больше не надо, все правильно и все работает, плюс м равняется 8 как и должно...
цитата Kalkin Но массив B у тебя ведь все равно не динамический?
Не понял, что значит динамический?
цитата Kurok какой то он сложный, а это не есть гуд для программы.
Главное для программы — что б она работала, а какая она не важно, я на контрольной по экселю накатал такую програмку по вычислению процентов в банке по интересным депозитам за 1,5 часа, но она работала и мне поставили 5 баллов. Притом она не сложная — 1 элемент ставим на 1 элемент нового списка, 2 на 2, 3 на 3... 8 пропускаем, 9 на место 8, 10 на 9. — все просто...
|
|
|
Kurok
магистр
|
|
Kalkin
миродержец
|
17 февраля 2009 г. 23:49 [нажмите здесь чтобы увидеть текст поста]
|
цитата benommen Не понял, что значит динамический?
Выделение памяти под элементы массива происходит динамически, в процессе выполнения программы. Впрочем, у тебя все равно массив обычный, статический. Тогда понятно, что он не работает — вначале k = 0 и ты создал пустой массив. Потом ты в него пытаешься что-то записать, естественно, получается бред, так как записывать инфу некуда.
|
|
|
Kalkin
миродержец
|
|
benommen
магистр
|
17 февраля 2009 г. 23:52 [нажмите здесь чтобы увидеть текст поста]
|
цитата Kalkin Выделение памяти под элементы массива происходит динамически, в процессе выполнения программы. Впрочем, у тебя все равно массив обычный, статический. Тогда понятно, что он не работает — вначале k = 0 и ты создал пустой массив. Потом ты в него пытаешься что-то записать, естественно, получается бред, так как записывать инфу некуда.
Хм. логично...
цитата Kurok benommen лучше попробовать K обнулять перед циклом (а возможно даже присвоить -1)
Лучше не надо Kalkin уже обьяснил почему...
|
|
|
benommen
магистр
|
|
Kalkin
миродержец
|
17 февраля 2009 г. 23:58 [нажмите здесь чтобы увидеть текст поста]
|
Хотя бы так: поскольку в массиве B будет массив X без максимального элемента, то в самом начале надо объявить B как массив из n-1 элемента.
|
|
|