Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
1

Как упорядочить массив возрастающих чисел?

20.10.2017, 16:15. Показов 1186. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть массив чисел, в котором большинство чисел расположены в порядке возрастания, но в середине есть значения, которые нужно исключить:
Исходный массив:
VB.NET
1
Dim arrSource() As Integer = {10, 20, 30, 40, 0, 10, 60, 70, 80, 90}
должно получиться:
VB.NET
1
Dim arrDest() As Integer = {10, 20, 30, 40, 60, 70, 80, 90}
то есть из середины массива нужно выбросить значения 0 и 10 (они нарушают возрастающую последовательность) ну и "обрезать" массив на количество исключённых элементов если это возможно.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2017, 16:15
Ответы с готовыми решениями:

Создайте массив, который состоит из 15 разных чисел. Упорядочить массив по спаданию
Создайте массив, который состоит из 15 разных чисел. Упорядочить массив по спаданию

Ввести массив из 5 чисел. Упорядочить массив и вывести данные в окно.
Ввести массив из 5 чисел. Упорядочить массив и вывести данные в окно. После нажатия клавиши <...

Дан массив Х из 100 вещественных чисел. Упорядочить массив X по неубыванию
Помогите пожалуйста решить задачу. Я написал текст программы, но видимо в нем чего-то не хватает,...

Дан одномерный массив целых чисел, содержащий n элементов. Упорядочить массив по возрастанию
Дан одномерный массив целых чисел, содержащий n элементов (n вводится с клавиатуры, массив...

13
Модератор
Эксперт .NET
4205 / 3288 / 498
Регистрация: 27.01.2014
Сообщений: 6,041
20.10.2017, 16:33 2
jkrnd, а обязательно использовать массив такого типа?
Почему не юзаете List(Of Integer) с ним очень удобно работать и такие задачки решаются в два счета.

или Array принципиален?

Добавлено через 2 минуты
первое это определить "те самые значения". это не сложно. Числа идут в порядке возрастания. проверяя каждое следующее и сравнивая его с предыдущим, смотрите чтоб оно было больше предыдущего, если меньше - удаляем... и так далее...
2
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
20.10.2017, 17:46  [ТС] 3
Yury Komar, в моём случае Array принципиален. Алгоритм понятен, с реализацией пока не получается. Спасибо, будем думать.
0
117 / 110 / 31
Регистрация: 05.04.2014
Сообщений: 224
20.10.2017, 18:00 4
Если нужно из arrSource в arrDest
VB.NET
1
2
3
4
5
6
7
8
        Dim arrSource() As Integer = {10, 20, 30, 40, 0, 10, 60, 70, 80, 90}
        Dim arrDest(0)
        For i = 0 To arrSource.Count - 1
            If arrDest(arrDest.Count - 1) < arrSource(i) Then
                If i > 0 Then ReDim Preserve arrDest(arrDest.Count)
                arrDest(arrDest.Count - 1) = arrSource(i)
            End If
        Next
Или создать arrDest с размером arrSource, считать количество скопированных чисел, а затем обрезать arrDest
1
1589 / 662 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
20.10.2017, 19:17 5
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

VB.NET
1
2
3
4
5
6
7
8
9
10
        Dim arrSource() As Integer = {10, 20, 30, 40, 0, 10, 60, 70, 80, 90}
        Dim pred As Integer
        arrSource = arrSource.Where(Function(El, Ind)
                                        If (Ind = 0) OrElse (pred < El) Then
                                            pred = El
                                            Return True
                                        Else
                                            Return False
                                        End If
                                    End Function).ToArray
2
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
20.10.2017, 19:26  [ТС] 6
Step_UA, То что надо! Но я совсем не понимаю как это работает. А если в массиве 150 000 элементов, а не 10, этот алгоритм скорость не скушает?
0
1589 / 662 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
20.10.2017, 19:29 7
не скушает))
1
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
20.10.2017, 19:42  [ТС] 8
Step_UA, это рекурсия называется?

Добавлено через 7 минут
Step_UA, а если вместо массива integer будет массив структур, первый элемент которой имеет тип Integer?
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
Structure AData
        Public t As Int32
        Public v0 As Single
        Public v1 As Single
        Public v2 As Single
        Public v3 As Single
        Public v4 As Single
        Public v5 As Single
        Public v6 As Single
        Public v7 As Single
    End Structure
Public elem(150000) As AData
0
1589 / 662 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
20.10.2017, 20:18 9
Нет, рекурсия это когда из функции при определенных условиях вызывается эта же функция ...
where отбирает элементы для которых функция возвращает true
В функцию передается значение элемента и его индекс. Переменная pred хранит значение последнего отобранного элемента.
Для первого элемента или если он больше pred сохраняем его значение в переменной pred и возвращаем true - элемент подходит
В противном случае false - элемент не подходит
Результат перечисления переводим в массив (toArray)

Добавлено через 6 минут
Цитата Сообщение от jkrnd Посмотреть сообщение
вместо массива integer будет массив структур, первый элемент которой имеет тип Integer?
В функцию будет передаваться элемент - сравнивайте с требуемым элементов структуры

Добавлено через 27 минут
Вариант для экономии памяти, если массив занимает "неприличный" ее объем ))
VB.NET
1
2
3
4
5
6
7
8
9
10
        Dim arrSource() As Integer = {10, 20, 30, 40, 0, 10, 60, 70, 80, 90}
        Dim pred As Integer, saveInd As Integer = 0
        For Each El As Integer In arrSource
            If saveInd = 0 OrElse pred < El Then
                arrSource(saveInd) = El
                pred = El
                saveInd += 1
            End If
        Next
        If saveInd < arrSource.Count Then ReDim Preserve arrSource(saveInd - 1)
... возможно следует добавить проверку, чтобы не перезаписывать элемент массива, если он не сдвигается к началу
1
1530 / 1478 / 322
Регистрация: 03.10.2012
Сообщений: 1,518
20.10.2017, 20:37 10
Цитата Сообщение от Step_UA Посмотреть сообщение
VB.NET
1
(Function(El, Ind)
Step_UA, не уверен на все 100, но по-моему должно работать и без индекса, не могу сейчас проверить, ну, т.е. так
VB.NET
1
2
3
4
5
6
7
8
arrSource = arrSource.Where(Function(El)
                                        If pred < El Then
                                            pred = El
                                            Return True
                                        Else
                                            Return False
                                        End If
                                    End Function).ToArray
1
1589 / 662 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
20.10.2017, 20:50 11
MrCrown, будет и так работать, но только для случая когда pred изначально меньше первого элемента массива, т.е.
VB.NET
1
dim pred=arrSource(0)-1
Добавлено через 4 минуты
jkrnd, таки второй вариант работает быстрее ))
1
Модератор
Эксперт .NET
4205 / 3288 / 498
Регистрация: 27.01.2014
Сообщений: 6,041
21.10.2017, 14:42 12
мне вот что интересно, как в данном случае передается элемент именно в аргумент EL, а индекс в IND? или там более чем эти два значения передать и нельзя? ну у студии, глянуть не могу, но интересно.
1
1589 / 662 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
21.10.2017, 14:55 13
Цитата Сообщение от Yury Komar Посмотреть сообщение
как в данном случае передается элемент именно в аргумент EL, а индекс в IND? или там более чем эти два значения передать и нельзя?
Всего две реализции функции: передается элемент массива или элемент и его индекс.
2
Модератор
Эксперт .NET
4205 / 3288 / 498
Регистрация: 27.01.2014
Сообщений: 6,041
21.10.2017, 15:52 14
Step_UA, так и думал спасибо...
1
21.10.2017, 15:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2017, 15:52
Помогаю со студенческими работами здесь

Дан массив 15 целых чисел на отрезке [-5;5]. Упорядочить массив, удалив повторяющиеся элементы
Дан массив 15 целых чисел на отрезке . Упорядочить массив, удалив повторяющиеся элементы.

Ввести массив из 12 целых чисел. Найти первое значение элемента, равное нулю и упорядочить массив
Ввести массив из 12 целых чисел. Найти первое значение элемента, равное нулю и упорядочить массив...

Задан массив чисел в двоичной системе счисления. Упорядочить элементы массива по убыванию. Определить сумму чисел
Задан массив чисел в двоичной системе счисления. Упорядочить элементы массива по убыванию....

Максимальная последовательность возрастающих чисел
Поиогите, пож-та, написать код: Дан одномерный массив, в нём найти максимальную последовательность...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru