| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Переопределение массива

Переопределение массива

Ответ
Поиск в этой теме
Непрочитано 03.09.2008, 08:53 #1
Переопределение массива
stas_org
 
Самара
Регистрация: 05.04.2007
Сообщений: 1,199

Здравствуйте! Помогите составить следующий алгоритм: имеется массив типа string, отдельные строки повторяются, но разбросаны друг относительно друга. Требуется рассортировать их таким образом чтобы одинаковые item массива находились рядом.

Пример: Class=("A-I","A-II","A-IV","A-I","A-II","A-IV")
Нужно: Class=("A-I","A-I","A-II","A-II","A-IV","A-IV")
Просмотров: 4516
 
Непрочитано 03.09.2008, 09:13
#2
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Код:
[Выделить все]
(vl-sort '("A-I" "A-II" "A-IV" "A-I" "A-II" "A-IV") '<)
для целых чисел производится удаление дубликатов
Alaspher вне форума  
 
Автор темы   Непрочитано 03.09.2008, 09:16
#3
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


В бейсике такого нет, нужно через переменные, циклы и т.д., вообщем задачка по информатике.
stas_org вне форума  
 
Непрочитано 03.09.2008, 09:22
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Alaspher, разве просто vl-sort сработает? Мне кажется, должно быть нечто типа
Код:
[Выделить все]
(vl-sort (list "a" "b" "c" "e" "d" "a") '(lambda(a b) (< a b)))
Правда, без удаления дубликатов. А если с удалением, то что-то наподобие
Код:
[Выделить все]
((lambda( / res)
(foreach item (vl-sort (list "a" "b" "c" "e" "d" "a") '(lambda(a b) (> a b)))
(if (not (member item res)) (setq res (cons item res)))) res))
---
Добавлено: stas_org, так язык-то можно было и указать.
Добавлено 2: stas_org, мне кажется, я видел несколько реализаций алгоритмов сортировки на vbstreets.com и vbstreets.ru
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.09.2008, 09:38
#5
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Если нет готовой сортировки, то алгоритм примерно такой:

- проходом по массиву найти первое ненулевое значение в массиве
- если таковое ненайдено, то:
- завершить работу с передачей нового массива;
- в противном случае:
- поместить найденное значение во временную переменную;
- пройти до конца массива, сравнивая все ненулевые значения элементов массива с тем значением, которое найдено;
- если обнаружено меньшее значение, то поместить во временную переменную и продолжить проход до конца;
- вторым проходом сравнивать все ненулевые значения массива с найденным наименьшим значением;
- в случае совпадения значения, расширить массив результатов на 1 и поместить значение из временной переменной в новый элемент массива;
- в исходном массиве обнулить найденный элемент;

Примерно так

Кулик Алексей aka kpblc
Код:
[Выделить все]
_$ (vl-sort (list "a" "b" "c" "e" "d" "a") '(lambda(a b) (< a b)))
("a" "a" "b" "c" "d" "e")
и
Код:
[Выделить все]
_$ (vl-sort (list "a" "b" "c" "e" "d" "a") '<)
("a" "a" "b" "c" "d" "e")
абсолютно среднебарабанно
Alaspher вне форума  
 
Автор темы   Непрочитано 03.09.2008, 09:46
#6
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


Я так понял первое ненулевое- это первое неодинаковое?
stas_org вне форума  
 
Автор темы   Непрочитано 03.09.2008, 09:51
#7
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


Временная переменная динамический массив?
stas_org вне форума  
 
Непрочитано 03.09.2008, 09:54
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Alaspher, извини, значит, у меня Mozilla глюканула. Первоначально код был показан в тэгах TEX и без сортировки
stas_org, http://www.google.com/search?q=%D0%B...8,GGLD:ru&aq=t
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.09.2008, 09:54
#9
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Нет, я бы обнулял найденные совпадения, после занесения в массив результатов. Тогда, когда исходный массив будет содержать только пустые значения, это будет критерием для завершения работы функции.
Alaspher вне форума  
 
Непрочитано 03.09.2008, 09:58
#10
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от stas_org Посмотреть сообщение
Временная переменная динамический массив?
Нет, временная переменная содержит одно (в данном случае строковое) значение, динмассивом должен быть массив результатов.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Alaspher, извини, значит, у меня Mozilla глюканула. Первоначально код был показан в тэгах TEX и без сортировки
Не, это я мимо кнопки промазал, а в TEXe апострофы как спецсимволы работают.
Alaspher вне форума  
 
Непрочитано 03.09.2008, 10:08
#11
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Код:
[Выделить все]
For i = 0 To UBound(strArray)
      For j = 0 To UBound(strArray) - 1
         If StrComp(strArray(j), strArray(j + 1), vbTextCompare) = 1 Then
            strTemp = strArray(j)
            strArray(j) = strArray(j + 1)
            strArray(j + 1) = strTemp
         End If
      Next
   Next
Пузырьковая сортировка ))
Vildar вне форума  
 
Автор темы   Непрочитано 03.09.2008, 10:10
#12
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


Цитата:
Сообщение от Alaspher Посмотреть сообщение
Нет, я бы обнулял найденные совпадения, после занесения в массив результатов. Тогда, когда исходный массив будет содержать только пустые значения, это будет критерием для завершения работы функции.
Может без дополнительных массивов можно обойтись, их и так навалом.

kblk респект! что это мы сами не догадались.
stas_org вне форума  
 
Автор темы   Непрочитано 03.09.2008, 10:17
#13
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


Самый огромный РЕСПЕКТ to Vildar
stas_org вне форума  
 
Непрочитано 03.09.2008, 10:35
#14
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


stas_org, я тут не причем ))
и ошибся еще, на ровном месте ((
Так вроде лучше немного:
Код:
[Выделить все]
For i = 1 To UBound(strArray) + 1
      For j = 0 To UBound(strArray) - i
         strj = strArray(j)
         strj1 = strArray(j + 1)
         If StrComp(strArray(j), strArray(j + 1), vbTextCompare) = 1 Then
            strTemp = strArray(j)
            strArray(j) = strArray(j + 1)
            strArray(j + 1) = strTemp
         End If
      Next
   Next
Ко мне никаких претензий потом )))
Vildar вне форума  
 
Автор темы   Непрочитано 03.09.2008, 10:43
#15
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


У меня голова уже не варит разбираться в этих алгоритмах, я просто переменные меняю и все, первый вариант вроде рабочий, протестировал по всякому. Спасибо!
stas_org вне форума  
 
Автор темы   Непрочитано 03.09.2008, 10:49
#16
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


Я вообще делаю копию VetCAD++ инструментами VBA, только в части заполнения спецификаций и формирования ведомости расхода стали, надеюсь скоро в данлоаде появится.
stas_org вне форума  
 
Автор темы   Непрочитано 03.09.2008, 10:57
#17
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


Второй вариант обсолютно то-же самой, только непонятно зачем strj и strj1?
stas_org вне форума  
 
Непрочитано 03.09.2008, 11:23
#18
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Цитата:
Сообщение от stas_org Посмотреть сообщение
Второй вариант обсолютно то-же самой, только непонятно зачем strj и strj1?
Проходок во втором меньше, а -> и быстрее.
А strj и strj1 - так, просто для наглядности.
Vildar вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Переопределение массива

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Представление грунтового массива в виде КЭ модели Simonoff Основания и фундаменты 110 21.08.2007 15:35
Получение текстового массива координат точек. Камыч AutoCAD 5 30.07.2007 12:28
Создание двумерного массива точек DFooz Программирование 1 01.05.2007 23:28
Давление грунтового массива на ограждение Mitya Прочее. Программное обеспечение 1 15.01.2007 18:16