Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2010, 08:01   #1
Волк
Форумчанин
 
Аватар для Волк
 
Регистрация: 04.02.2009
Сообщений: 156
Восклицание Массивы

Доброго времени суток!Уважаемые граждане помогите пожалуйста:

С клавиатуры вводится массив X, состоящий из положительных и отрицательных элементов. Сформировать новый массив Y из элементов
массива X, в котором вначале стоят все отрицательные элементы, за ними – нулевые, за ними – все положительные. Порядок следования
сохранить.

Вот в чем проблема я сделал но нужно "порядок следования сохранить".
если эта строчка кому-то не понятно то вот что надо cделать:
Массив X: 0;-5;-11;5;4;0;-20
Массив Y: -5;-11;-20;0;0;5;4
а у меня получается вот такой массив Y:-20;-11;-5;0;0;4;5

Пожалуйста помогите!!Заранее спасибо
Все мы отчасти гении!Но на сколько мы умны настолько же мы и глупы!
Волк вне форума Ответить с цитированием
Старый 14.10.2010, 09:25   #2
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Что бы подсказать надо видеть не результаты, а код.
У тебя массив отсортирован
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 14.10.2010, 09:52   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Не знаю, я учебных задачек не решал, но я бы сделал 3 цикла перебора массива, и перекладывал в порядке нахождения сперва все отрицательные, потом равные нулю, потом соответственно положительные. Раз уж просто тупо сортировка не годится.
Или за два цикла - сперва считаем, чего сколько, потом раскладываем по номерам. Но это кажется алгоритм сложнее получится.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 14.10.2010, 10:31   #4
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

=НАИМЕНЬШИЙ(массив;СТОЛБЕЦ(A1))
vikttur вне форума Ответить с цитированием
Старый 14.10.2010, 10:35   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

а поискать готовое решение не пробовали?
EducatedFool вне форума Ответить с цитированием
Старый 14.10.2010, 10:55   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Вот так и сделано по одной ссылке - несколько циклов перебора...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 14.10.2010, 13:33   #7
Волк
Форумчанин
 
Аватар для Волк
 
Регистрация: 04.02.2009
Сообщений: 156
По умолчанию

я делаю так :
Код:
Option Explicit
Dim Arr1() As Integer
Dim Arr2() As Integer
Dim i, J, tmp As Integer

Private Sub CommandButton1_Click()
On Error GoTo error
 
i = 1

Do While Worksheets(7).Cells(i, 2).Value <> ""
Worksheets(7).Cells(i, 2).Clear 'очищаем 2 колонку
i = i + 1
Loop


' Увелечение размерности массива
ReDim Arr1(1)
ReDim Arr2(1)

i = 1
' Пошло присвоение элементам массива числа из листа
Do While Worksheets(7).Cells(i, 1).Value <> ""
Arr1(i) = Worksheets(7).Cells(i, 1).Value
Arr2(i) = Arr1(i)
i = i + 1
ReDim Preserve Arr1(i) ' Изменение размерности без обнуления
ReDim Preserve Arr2(i)
Loop


'Пошла сортировка
J = 1
tmp = 0

For J = 1 To UBound(Arr2) - 1
  For i = 1 To UBound(Arr2) - 1
    If i <> J Then
      If Arr2(i) > Arr2(J) Then
            tmp = Arr2(J)
        Arr2(J) = Arr2(i)
        Arr2(i) = tmp
      End If
    End If
  Next
Next

'Конец сортировки


' Пошел вывод в лист
For i = 1 To UBound(Arr2) - 1
Worksheets(7).Cells(i, 2) = Arr2(i)
Next i

'Дебаг
Exit Sub
error:
Call Ошибки.error(7)
End Sub
Все мы отчасти гении!Но на сколько мы умны настолько же мы и глупы!
Волк вне форума Ответить с цитированием
Старый 14.10.2010, 14:28   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Так Вам же не нужна сортировка!
Делайте 3 раза цикл присвоения - сперва отрицательные и т.д.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 14.10.2010, 18:27   #9
Волк
Форумчанин
 
Аватар для Волк
 
Регистрация: 04.02.2009
Сообщений: 156
По умолчанию

Hugo121 пожалуйста помоги с кодом. Или кто еще если можете а то просто срочно надо.Плиз
Все мы отчасти гении!Но на сколько мы умны настолько же мы и глупы!
Волк вне форума Ответить с цитированием
Старый 14.10.2010, 19:21   #10
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Можно перебирать элементы и в зависимости от знака добавлять их в конец одной из трех строк, добавляя разделитель после каждого числа, а затем просто сделать Split этих строк
motorway вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09
С++, Массивы, динамические массивы. -Sunshine- Помощь студентам 1 19.04.2010 02:17
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12