Вопросы о разном или повод ...


Вы здесь: Форумы fantlab.ru > Форум «Трёп на разные темы» > Тема «Вопросы о разном или повод пофлудить!»

Вопросы о разном или повод пофлудить!

 автор  сообщение


магистр

Ссылка на сообщение 17 февраля 2009 г. 23:07  
цитировать   |    [  ] 

цитата benommen

Смысл в том что в нормальном положении будет начинаться с восьмого элемента и 9 элемент заменит 8 и станет 8, а 10 заменит 9 и станет 9...


так в том то и дело, что при таком написании: X(i) = X(m + 1) 9 заменит 8, а дальше опять 9 заменит 9 — m то не поменялась в цикле8-)


магистр

Ссылка на сообщение 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
Пишет что выделенное ошибка...


магистр

Ссылка на сообщение 17 февраля 2009 г. 23:24  
цитировать   |    [  ] 
Если что поясню, мы выбираем не элементы m и создаем новый массив без элемента m и кидаем его в новый лист2, который вконце становится видимым, отсюда и 2 последние строчки...


магистр

Ссылка на сообщение 17 февраля 2009 г. 23:25  
цитировать   |    [  ] 

цитата benommen

Пишет что выделенное ошибка...


начальное k не задано.


магистр

Ссылка на сообщение 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 — и должно работать


миродержец

Ссылка на сообщение 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?


миродержец

Ссылка на сообщение 17 февраля 2009 г. 23:34  
цитировать   |    [  ] 

цитата Kurok

For i = m To n — 1, просто n — и должно работать

Эту-то строку зачем менять?


магистр

Ссылка на сообщение 17 февраля 2009 г. 23:34  
цитировать   |    [  ] 

цитата Kurok

начальное k не задано.

Оно автоматом равно 0

цитата Kurok

По-моему надо в этом:

Думаю мой 2 вариант лучше...


магистр

Ссылка на сообщение 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


миродержец

Ссылка на сообщение 17 февраля 2009 г. 23:37  
цитировать   |    [  ] 

цитата benommen

Оно автоматом равно 0

Но массив B у тебя ведь все равно не динамический?


магистр

Ссылка на сообщение 17 февраля 2009 г. 23:38  
цитировать   |    [  ] 

цитата benommen

Думаю мой 2 вариант лучше...


какой то он сложный, а это не есть гуд для программы.


миродержец

Ссылка на сообщение 17 февраля 2009 г. 23:39  
цитировать   |    [  ] 

цитата Kurok

Да нет — это правильно, но надо вот так:

То, что вы написали — почти правильно (считаем до n-1) :-) То, что написал автор вопроса — нет :-)


магистр

Ссылка на сообщение 17 февраля 2009 г. 23:39  
цитировать   |    [  ] 

цитата Kalkin

1) вероятно, max = X(i-1) имелось в виду.
2) смысл следующей после этого строчки неясен. Вероятно, ты имел в виду m=i-1?

Поменял, все осталось прежним, точнее наврное более правильным...

цитата Kalkin

С B(k) вообще что-то странное. Где у тебя первый раз определяется k?

К по умолчанию равно нулю... С В(к) не так трудно, просто мы выкидываем 8 элемент и заганяем новый массив с 9 элемантами...


магистр

Ссылка на сообщение 17 февраля 2009 г. 23:44  
цитировать   |    [  ] 
Kalkin Kurok С максимумом кувыркаться больше не надо, все правильно и все работает, плюс м равняется 8 как и должно...

цитата Kalkin

Но массив B у тебя ведь все равно не динамический?

Не понял, что значит динамический?

цитата Kurok

какой то он сложный, а это не есть гуд для программы.

Главное для программы — что б она работала, а какая она не важно, я на контрольной по экселю накатал такую програмку по вычислению процентов в банке по интересным депозитам за 1,5 часа, но она работала и мне поставили 5 баллов. Притом она не сложная — 1 элемент ставим на 1 элемент нового списка, 2 на 2, 3 на 3... 8 пропускаем, 9 на место 8, 10 на 9. — все просто...


магистр

Ссылка на сообщение 17 февраля 2009 г. 23:47  
цитировать   |    [  ] 
benommen лучше попробовать K обнулять перед циклом (а возможно даже присвоить -1)8-)


миродержец

Ссылка на сообщение 17 февраля 2009 г. 23:49  
цитировать   |    [  ] 

цитата benommen

Не понял, что значит динамический?

Выделение памяти под элементы массива происходит динамически, в процессе выполнения программы. Впрочем, у тебя все равно массив обычный, статический. Тогда понятно, что он не работает — вначале k = 0 и ты создал пустой массив. Потом ты в него пытаешься что-то записать, естественно, получается бред, так как записывать инфу некуда.


миродержец

Ссылка на сообщение 17 февраля 2009 г. 23:51  
цитировать   |    [  ] 

цитата Kurok

лучше попробовать K обнулять перед циклом

Да толку-то это делать, если массив B сейчас пуст и в него ничего нельзя записать? :-D


магистр

Ссылка на сообщение 17 февраля 2009 г. 23:52  
цитировать   |    [  ] 

цитата Kalkin

Выделение памяти под элементы массива происходит динамически, в процессе выполнения программы. Впрочем, у тебя все равно массив обычный, статический. Тогда понятно, что он не работает — вначале k = 0 и ты создал пустой массив. Потом ты в него пытаешься что-то записать, естественно, получается бред, так как записывать инфу некуда.

Хм. логично...

цитата Kurok

benommen лучше попробовать K обнулять перед циклом (а возможно даже присвоить -1)

Лучше не надо Kalkin уже обьяснил почему...


магистр

Ссылка на сообщение 17 февраля 2009 г. 23:53  
цитировать   |    [  ] 
И что сделать с к что б в него можно было записывать? Может перезаписывать массив уже после цыкла фор ту?


миродержец

Ссылка на сообщение 17 февраля 2009 г. 23:58  
цитировать   |    [  ] 
Хотя бы так: поскольку в массиве B будет массив X без максимального элемента, то в самом начале надо объявить B как массив из n-1 элемента.
Страницы: 123...8182838485...135213531354    🔍 поиск

Вы здесь: Форумы fantlab.ru > Форум «Трёп на разные темы» > Тема «Вопросы о разном или повод пофлудить!»

 
  Новое сообщение по теме «Вопросы о разном или повод пофлудить!»
Инструменты   
Сообщение:
 

Внимание! Чтобы общаться на форуме, Вам нужно пройти авторизацию:

   Авторизация

логин:
пароль:
регистрация | забыли пароль?



⇑ Наверх