Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Нужна помощь


Автор: Глупышка 28.6.2006, 14:29
Народ! Я только начала осваивать программирование на языке Visual Basic for Application... Очень нужна ваша помощь! smile  Как выглядит программа "упорядочить отрицательные элементы А(10)"...? smile  Напишите, если не трудно..? =)) 

Автор: mihanik 28.6.2006, 15:31
Глупышка!
Приведи, пожалуйста, весь текст задачи, которую ты решаешь.
И потом... Visual Basic for Application - это широкое понятие...
Ты в чём пишешь? В Ехеле? В Аксессе? В Ворде?
 

Автор: cardinal 28.6.2006, 15:42
Модератор: Название темы должно отражать ее суть! 

Автор: Глупышка 28.6.2006, 16:04
В Excele... smile 
А задача именно так и звучит: упорядочить отрицательные элементы А(10)... smile   

Автор: mihanik 28.6.2006, 16:21
Элементы массива откуда брать?
Они расположены ла листе?
Вводятся с клавиатуры?
Считываются из файла?
В каком порядке упорядочивать (возрастание/убывание)?
Задачу понимаю так...
Есть некоторый массив. В нём есть несколько отрицательных элементов.
Упорядочивать только отрицательные элементы, не трогая с места остальные...
 

Автор: Глупышка 28.6.2006, 16:26
Цитата(mihanik @ 28.6.2006,  16:21)
Есть некоторый массив. В нём есть несколько отрицательных элементов.
Упорядочивать только отрицательные элементы, не трогая с места остальные...

Скорее всего так... smile 
Мне просто дали задание.. вот в такой формулировке.. и всё... smile 
Видимо, массив А(10) соержит какие-то числа (и положительные, и отрицательные) и нужно упорядочить только отрицательные... smile  

Автор: ~FoX~ 28.6.2006, 16:36
Код

Dim a(10) As Integer ' сам массив
Dim i, j, k As Integer 'для циклов
Dim tmp As Integer 'для перестановки ячеек
Randomize Timer ' говорим генератору что он работает от таймера
  For i = 1 To 10 'заполняем массив
    a(i) = -10 + (Rnd * 20)  'числами от -10 до  10
  Next i
  
For j = 1 To 9 'сортируем методом пузырьуа
  For k = J To 10
     If (a(j) < 0) And (a(j) < a(k)) Then ' если число отрицательное (<0) и первое число меньше второго  a(j) < a(k)
       tmp = a(j)  ' то меняем их местами
       a(j) = a(k)
       a(k) = tmp
     End If
  Next k
Next j
  
  
  For i = 1 To 10
    Debug.Print a(i) ' выводим результат
  Next i



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

Автор: Глупышка 28.6.2006, 16:38
А что такое Randomize Timer, Rnd  и tmp..? smile  

Автор: ~FoX~ 28.6.2006, 16:45
Я там поправил чуть
randomize timer - для генерации случайного числа от таймера - чтоб не повторялись при перезапуске
rnd - сам гениратор случайных чисел
tmp - просто для того чтоб переставить элдименты массива - называется сортировка пузыркем  - в твоем случае камушком  

Автор: mihanik 28.6.2006, 16:55
Итак...
Формулирую условие.
На первом листе в столбце A содержиться 10 чисел (в ячейках с А2 по А11)
Рядом находиться кнопка, по нажатию на которую всё и начинается...

Код

Attribute VB_Name = "Module1"

Private Sub CommandButton1_Click()
Dim intNegativeCount As Integer ' количество отрицательных элементов массива
Dim dblMassive(10) As Double    ' Массив для временного хранения отрицательных элементов
Dim dblTmp As Double            ' Временная переменная для "Пузырька"
Dim I As Integer, II As Integer ' Переменные для циклов

' Считаем сначала все отрицательные элементы во временный массив.
    intNegativeCount = 0
    For I = 1 To 10
        If Val(Sheets(1).Cells(1 + I, 1).Value) < 0 Then
            intNegativeCount = intNegativeCount + 1
            dblMassive(intNegativeCount) = Val(Sheets(1).Cells(1 + I, 1).Value)
        End If
    Next I

    MsgBox intNegativeCount

' Если intNegativeCount < 2, то сортировать смысла не имеет, и мы посто завершаем работу процедуры..
    If intNegativeCount < 2 Then Exit Sub

' Сортируем Массив "пузырьком", ну, например, по возрастанию...
    For I = 1 To intNegativeCount - 1
        For II = 1 To intNegativeCount - 1
            If dblMassive(II) > dblMassive(II + 1) Then
                dblTmp = dblMassive(II)
                dblMassive(II) = dblMassive(II + 1)
                dblMassive(II + 1) = dblTmp
            End If
        Next II
    Next I
    
' А теперь пробегаем по массиву, и если в нём находим отрицательный элемент,
' то заменяем его очередным элементом массива...

    II = 2
    For I = 1 To intNegativeCount
        While Val(Sheets(1).Cells(II, 1).Value) >= 0
            II = II + 1
        Wend
        Sheets(1).Cells(II, 1).Value = dblMassive(I)
        II = II + 1
    Next I
    
End Sub


 

Автор: Глупышка 28.6.2006, 17:03
Как всё сложно.. smile  А проще нельзя..? smile  Для такие как я... smile  
(С самыми элементарными операторами, переменными, без кнопок.. на 1 листе...)... 

Автор: mihanik 28.6.2006, 17:05
М-да-а-а...

Глупышка!

Тебе надо задачу решить, или показать какая ты гламурненькая?

Разбирайся уже!!!
Задача-то решена!
 

Автор: Глупышка 28.6.2006, 17:40
mihanik, решена.. smile  но не так, как мы обычно на парах решали.. smile  Да и объяснить я не смогу... smile 
Так что... smile  

Автор: cardinal 28.6.2006, 18:17
Добейся того, чтобы все заработало, как ты считаешь нужным, а потом построчно пытайся понять, что и как происходит. Если что непонятно спрашивай! 

Автор: ~FoX~ 29.6.2006, 08:03
Цитата(Глупышка @  28.6.2006,  18:40 Найти цитируемый пост)
 но не так, как мы обычно на парах решали.

Хмм....а как вы на парах решали? Примерчик приведи, а мы посмотрим.....Хотя то что тут написали элиментарно и вполне подойдет для любова учереждения. 
[off]
К стати
Цитата

' Сортируем Массив "пузырьком", ну, например, по возрастанию...
    For I = 1 To intNegativeCount - 1
        For II = 1 To intNegativeCount - 1
            If dblMassive(II) > dblMassive(II + 1) Then


Очень странный пузырек
[/off] 

Автор: mihanik 29.6.2006, 08:33
~FoX~ 
Цитата

Очень странный пузырек


Ну... Жизнь вообще странная штука....

Но, ведь, работает же! smile 
 

Автор: ~FoX~ 29.6.2006, 10:08
[offtop]
Гы, ну вобщем то конечно работает, только вот лишние разы ты пробегаешь по массиву
http://algolist.manual.ru/sort/bubble_sort.php
[/offtop] 

Автор: mihanik 29.6.2006, 10:15
~FoX~ !

Ну... Да!

Я рассудил так...
1. человек только-только учиться.
2. Этот НЕОПТИМИЗИРОВАННЫЙ вариант пузырька студенты на занятиях изучают первым, а уже потом его модифицируют и доводят до ума.

Т.е. я опустился до уровня Глупышки и постарался говорить на более-менее понятном языке.

Нес па?

Или больше так не делать? 

ЗЫ.
По-моему Глупышка уже "отвалилась" от этой темы. smile 
Может и нам её закрыть? smile  

Автор: Akina 29.6.2006, 10:37
Цитата(mihanik @  29.6.2006,  11:15 Найти цитируемый пост)
Может и нам её закрыть? 

Ок. По заявкам трудящихся...

PS. Чего я эту тему раньше пропустил? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)