Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
spectrum988
0 / 0 / 1
Регистрация: 24.10.2013
Сообщений: 47
#1

Сортировать в СтрингГрид по двум столбцам - C++

27.05.2014, 22:03. Просмотров 284. Ответов 1
Метки нет (Все метки)

Приветствую всех участников форума.
У меня имеется StringGrid в первом столбце находятся текстовые данные во втором числовые.
Нужно отсортировать по возрастанию данные таблицы причем меняется местами должны два столбца.

Вот моя проба,но здесь я пробовал просто отсортировать 2 столбец.Программа компилируется но при нажатии на кнопку форма с StringGrid не появляется,а выбивает ошибку.
Код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
int n=StringGrid1->RowCount-1;
int *a,r;
a=new int[n];
for(i=0; i<=n;i++)
 a[i]=StrToInt(StringGrid1->Cells[2][i]);
for (i = 0; i <n-1;i++)
 for (j = i+1; j <n;j++)
  if (a[i] > a[j])
   {
   r = a[i];
   a[i] = a[j];
   a[j] = r;
   }
for (int i=0; i<StringGrid1->RowCount-1; i++)StringGrid1->Cells[2][i]=IntToStr(a[i]);
}
Посоветуйте пожалуйста может какой другой алгоритм на основе этого.

Добавлено через 1 час 6 минут
Немного переделанный метод,но плохо сортирует.
C++
1
2
3
4
5
6
7
8
9
10
11
int n=StringGrid1->RowCount-2;
AnsiString r;
for (i=1;i<n-1;i++)
 for (j=i+1;j<n;j++)
  if (StringGrid1->Cells[1][i]>StringGrid1->Cells[1][j])
   {
   r=StringGrid1->Cells[1][i];
   StringGrid1->Cells[1][i]=StringGrid1->Cells[1][j];
   StringGrid1->Cells[1][j]=r;
   }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2014, 22:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировать в СтрингГрид по двум столбцам (C++):

Сортировать коллекцию структур по двум элементам - C++
struct compareNodesXy { bool operator()(Node6&amp;a,Node6&amp;b){ return a.x == b.y &amp;&amp; a.y==b.x; } ...

Сортировка по двум столбцам - MS Access
Необходимо отсортировать таблицу &quot;Покупатели&quot; по возрастанию в алфавитном порядке названий городов, а среди городов в алфавитном порядке по...

Поиск по двум столбцам БД. - Visual Basic
Допустим что в *.mdb файле есть 2 столбца: Фамилия и Телефон. А на форме(в VB)ОДНА кнопка: поиск. Как сделать, чтобы поиск производился...

Сортировка по двум столбцам - MySQL
Пишу: SELECT * FROM(SELECT * FROM `geo_regions` ORDER BY `name` ASC) a ORDER BY `country_id` ASC Выводит: А мне нужно что-бы...

Поиск по двум столбцам - PHP БД
Есть две кнопки и два ввода, один запрос ищет номер машины, другой номер паспорта, как обьеденить 2 запроса в одну кнопку? &lt;?php if...

Поиск по двум столбцам - Delphi
Подскажите, пожалуйста, что не так в коде? procedure Tdm.filterDogovorExecute(Sender: TObject); var str:string; begin if...

1
Prgrm101
3 / 3 / 3
Регистрация: 08.04.2014
Сообщений: 20
27.05.2014, 22:19 #2
Может так, правда, немного калично
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
   int i,j,max,count=SpinEdit1->Value;
   AnsiString buf;
   for(i=0;i<count;i++)
    {
    max=i;
    for(j=i+1;j<count;++j)
     if (StringGrid1->Cells[0][max]>StringGrid1->Cells[0][j]) {
       max=j;
     }
     if (i!=max) {
     buf=StringGrid1->Cells[0][max];
     StringGrid1->Cells[0][max]=StringGrid1->Cells[0][i];
     StringGrid1->Cells[0][i]=buf;
     buf=StringGrid1->Cells[1][max];
     StringGrid1->Cells[1][max]=StringGrid1->Cells[1][i];
     StringGrid1->Cells[1][i]=buf;
     }
    }
    int *a= new int[count];
    for(int i=0;i<count;i++)
      a[i]=StrToInt(StringGrid1->Cells[1][i]);
 
    buf=StringGrid1->Cells[0][0];
    for(i=1;i<count;++i)
     if (StringGrid1->Cells[0][i]==buf) {
                      j=i-1;
                      while(i<count && StringGrid1->Cells[0][i]==buf)
                        ++i;
                      buf=StringGrid1->Cells[0][i];
                      //ShowMessage(IntToStr(j)+" "+IntToStr(i));
                      for(int k=j;k<i;++k)
                        {
                         max=k;
                         for(int l=k+1;l<i;++l)
                          if (a[max]>a[l]) {max=l;}
                         if (k!=max) {
                           int buf1=a[k];
                           a[k]=a[max];
                           a[max]=buf1;
                         }
                        }
 
     }
     else buf=StringGrid1->Cells[0][i];
 
    for(int i=0;i<count;++i)
      StringGrid1->Cells[1][i]=IntToStr(a[i]);
 
    delete []a;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2014, 22:19
Привет! Вот еще темы с ответами:

Сортировка по двум столбцам - VBA
Всем привет. Я в VBA новичок, есть одно задание: Есть таблица рейсов аэропорта. Нужно сортировать таблицу по столбцу B(откуда) и...

Фильтрация по двум столбцам - Delphi БД
Например пишу в Edit1 и фильтровать по одному столбцу(откуда выезжаете) и в edit2 и фильтровать по второму столбцу (куда выезжаете) как...

Запрос сразу двум столбцам БД - PHP
Привет админы форума. у меня возник такой вопрос: 1) есть таблица USERS в нем первый столбец - admin -значение 0 (если 1 то станет...

Сортировка по двум столбцам в DataGridView - C#
Знаю, что тема уже кучу раз поднималась, но я так и не понял, как там что работает... Пока нашел эту тему, но опять же не разобрался что...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru