Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка 
:(
    Опции темы
VOX
Дата 24.2.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Здравствуйте!
Вот ссылка на мой проект
Код

http://www.sendspace.com/file/96m363



Значит делаю сортировку, а сортирует вот так:
1
10
11
12
13
14
15
16
17
18
19
2
20
22
23
24
26
27
28
29
3
30
31
32
33
34
35
37
38
39
4
40
41
42
43
44
45
46
47
48
49
5
50
51
52
53
54
55
56
57
58
59
6
60
61
62
63
64
65
66
67
68
69
7
70
71
72
73
74
8
9
----------------------------------------
Подскажите как реализовать человеческую сортировку.
Спасибо!


PM MAIL   Вверх
Soah
Дата 24.2.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 2
Всего: 54



Цитата(VOX @  24.2.2009,  13:33 Найти цитируемый пост)
Значит делаю сортировку

может код покажите smile 

вы что сравниваете строки?
PM MAIL   Вверх
Dmi3ev
Дата 24.2.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Цитата

может код покажите smile 

вы что сравниваете строки?

я покажу)))
скачал архив, вот что там VOX написал:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "DateUtils.hpp"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
 
#pragma link "trayicon"
#pragma link "XPManifest"
#pragma resource "*.dfm"
TForm1 *Form1;
int cHour, cMinute;     // время на индикаторе
int alrHour, alrMinute; // время сигнала
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    cHour = HourOf( Now() );
    Label4->Caption = IntToStr(cHour);
    cMinute = MinuteOf( Now() );
    Label5->Caption = (cMinute);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        ListBox1->Items->Add(Edit1->Text);
        Edit1->Clear();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
        ListBox1->Sorted = 1;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button4Click(TObject *Sender)
{
        ListBox1->Clear();        
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button5Click(TObject *Sender)
{
        ListBox1->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
        ListBox1->Items->SaveToFile("myfile.txt");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{
        ListBox1->Items->LoadFromFile("myfile.txt");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender)
{
        ListBox1->Items->Delete(ListBox1->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
    int l = Edit1->Text.Length();
    for(int i = 0; i < ListBox1->Count; ++i)
    {
        if(ListBox1->Items->Strings[i].SubString(1,l)==Edit1->Text)
        {
            //ListBox1->SetFocus();
            ListBox1->ItemIndex=i;
            break;
        }
    }
}
// Функция обратной сортировки
int __fastcall MyComp(TStringList *pList,int pI1, int pI2)
{
    if (pList->Strings[pI1] > pList->Strings[pI2]) return -1;
    if (pList->Strings[pI1] < pList->Strings[pI2]) return 1;
    return 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
        TStringList *list = new TStringList;
        list->Sorted = 0;
        list->CaseSensitive = 0; // без чувствительности к регистру
        list->Text = Memo1->Text; // к примеру
        list->CustomSort(MyComp);
        Memo1->Text = list->Text; // ; ))
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button9Click(TObject *Sender)
{
        Form1->Close(); // закрыть форму приложения
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ListBox2Click(TObject *Sender)
{
        Form1->Close(); // закрыть форму приложения
}
//---------------------------------------------------------------------------


void __fastcall TForm1::N3Click(TObject *Sender)
{
        Form1->Close(); // закрыть форму приложения
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N6Click(TObject *Sender)
{
        Form1->Close(); // закрыть форму приложения
}
//---------------------------------------------------------------------------


void __fastcall TForm1::N4Click(TObject *Sender)
{
        ListBox1->Items->LoadFromFile("myfile.txt");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N5Click(TObject *Sender)
{
        ListBox1->Items->SaveToFile("myfile.txt");
        
}
//---------------------------------------------------------------------------


Это сообщение отредактировал(а) Dmi3ev - 24.2.2009, 13:45


--------------------

PM MAIL   Вверх
VOX
Дата 24.2.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



аммм.... Ну там часики вставил ))) 
а вообще речь идет о ListBox1
----------------------------------------------
Вот там и сортирует как то неправильно
PM MAIL   Вверх
Soah
Дата 24.2.2009, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 2
Всего: 54



Цитата(Soah @  24.2.2009,  13:39 Найти цитируемый пост)
вы что сравниваете строки?

Цитата(Dmi3ev @  24.2.2009,  13:43 Найти цитируемый пост)
 
if (pList->Strings[pI1] > pList->Strings[pI2]) return -1;    
if (pList->Strings[pI1] < pList->Strings[pI2]) return 1;    
return 0;

а надо сравнивать числа
Код

if (atoi(pList->Strings[pI1]) > atoi(pList->Strings[pI2])) return -1;    
if (atoi(pList->Strings[pI1]) < atoi(pList->Strings[pI2])) return 1;    
return 0;

PM MAIL   Вверх
VOX
Дата 24.2.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Если вы про это:
--------------------------------------------------------
Код

// Функция обратной сортировки
int __fastcall MyComp(TStringList *pList,int pI1, int pI2)
{
    if (pList->Strings[pI1] > pList->Strings[pI2]) return -1;
    if (pList->Strings[pI1] < pList->Strings[pI2]) return 1;
    return 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
        TStringList *list = new TStringList;
        list->Sorted = 0;
        list->CaseSensitive = 0; // без чувствительности к регистру
        list->Text = Memo1->Text; // к примеру
        list->CustomSort(MyComp);
        Memo1->Text = list->Text; // ; ))
}
//---------------------------------------------------------------------------
То это обратная сортировка, для Мемо1
А криво сортирует в ListBox1


Добавлено через 12 минут и 29 секунд
в общем попробывал, выдало ряд ошибок:
Код

[C++ Error] Unit1.cpp(141): E2034 Cannot convert 'AnsiString' to 'const char *'
[C++ Error] Unit1.cpp(141): E2342 Type mismatch in parameter '__s' (wanted 'const char *', got 'AnsiString')
[C++ Error] Unit1.cpp(142): E2096 Illegal structure operation

PM MAIL   Вверх
Soah
Дата 24.2.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 2
Всего: 54



VOX, может код покажешь, именно сортировку.
Ты же не хочешь чтобы я дал тебе ссылку на страницу с 100 миллиардов сток, и сказал посмотри, ответ там есть.
Цени наше и своё время.

Это сообщение отредактировал(а) Soah - 24.2.2009, 14:09
PM MAIL   Вверх
VOX
Дата 24.2.2009, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Я понял, прошу прощения!
вот кодес:
Код

void __fastcall TForm1::Button2Click(TObject *Sender)
{
        ListBox1->Sorted = 1;
}

---------------------

PM MAIL   Вверх
Soah
Дата 24.2.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 2
Всего: 54



Код

void sortListBoxItems(TStrings* items)
{
    for (int i = 0; i < items->Count-1; ++i)
        for (int j = i; j  < items->Count; ++j)
            if(StrToInt(items->Strings[i]) > StrToInt(items->Strings[j])) 
            {
                AnsiString temp = items->Strings[i];
                items->Strings[i] = items->Strings[j];
                items->Strings[j] = temp;
            }
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    sortListBoxItems(ListBox1->Items);
}

PM MAIL   Вверх
VOX
Дата 24.2.2009, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Странно, но при клике на кнопку - никакой реакции :(

Добавлено через 2 минуты и 38 секунд
Код

http://www.sendspace.com/file/rdhf1d

вот сам проект (ваш кодес в конце)
закрепил за 10 кнопкой
PM MAIL   Вверх
Soah
Дата 24.2.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 2
Всего: 54



Цитата(VOX @  24.2.2009,  14:17 Найти цитируемый пост)
 ListBox1->Sorted = 1;

зачем тебе это, замени на
Цитата(Soah @  24.2.2009,  14:47 Найти цитируемый пост)
sortListBoxItems(ListBox1->Items);


З.Ы. Как присоеденить файл к своему сообщению
З.З.Ы какие числа вводишь ?

upd
Если нужно добавлять в сортировочном варианте, тогда можно так
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ListBox1->Items->Add(Edit1->Text);
    TStrings* items =  ListBox1->Items;

    for (int i = 0; i < ListBox1->Items->Count-1; ++i)
        if(StrToInt(items->Strings[i]) > StrToInt(items->Strings[items->Count-1]))
        {
            AnsiString temp = items->Strings[i];
            items->Strings[i] = items->Strings[items->Count-1];
            items->Strings[items->Count-1] = temp;
        }

    Edit1->Clear();
}


Это сообщение отредактировал(а) Soah - 24.2.2009, 15:39
PM MAIL   Вверх
VOX
Дата 24.2.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



вот эти числа
-----------------------
Код

1
10
11
12
13
14
15
16
17
18
19
2
20
22
23
24
26
27
28
29
3
30
31
32
33
34
35
37
38
39
4
40
41
42
43
44
45
46
47
48
49
5
50
51
52
53
54
55
56
57
58
59
6
60
61
62
63
64
65
66
67
68
69
7
70
71
72
73
74
8
9


Добавлено через 6 минут и 27 секунд
Первый код:
Код

void sortListBoxItems(TStrings* items)
{
    for (int i = 0; i < items->Count-1; ++i)
        for (int j = i; j  < items->Count; ++j)
            if(StrToInt(items->Strings[i]) > StrToInt(items->Strings[j])) 
            {
                AnsiString temp = items->Strings[i];
                items->Strings[i] = items->Strings[j];
                items->Strings[j] = temp;
            }
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    sortListBoxItems(ListBox1->Items);
}

-----------------------
вот он прекрасно работает!
Спасибо!
вот только как 
сортед = 1;
повлиял? я его снес, но он ведь за кнопкой закреплен,
до ее нажатие код не действителен, т.е. никак не влияет на ход программы...
PM MAIL   Вверх
Soah
Дата 24.2.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 2
Всего: 54



Цитата(VOX @  24.2.2009,  15:39 Найти цитируемый пост)
повлиял? я его снес, но он ведь за кнопкой закреплен,

прочитай в справке что означает свойство Sorted,
чтобы ListBox сортировался не обязательно нажимать на кнопку,
достаточно присвоить свойству Soorted значение true один раз.
PM MAIL   Вверх
Dmi3ev
Дата 24.2.2009, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Цитата

if (atoi(pList->Strings[pI1]) > atoi(pList->Strings[pI2])) return -1;    
if (atoi(pList->Strings[pI1]) < atoi(pList->Strings[pI2])) return 1;    
return 0;

конечно тут будет ошибка, AnsiString надо в char конвертнуть с помощью 
.c_str();
а так можно придумать много чего, хотя бы даже вот так:
Код

//...
#include <vector.h>
#include <algorithm>
//...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListBox1->Clear();
ListBox1->Items->LoadFromFile("D:\\1.txt");

vector<int> v;
for (int i=0; i<ListBox1->Items->Count; i++)
 v.push_back(StrToInt(ListBox1->Items->Strings[i]));
sort(v.begin(), v.end());

Memo1->Clear();
for (int i=0; i<v.size(); i++)
 Memo1->Lines->Add(IntToStr(v[i]));
}

хоть так делай...


--------------------

PM MAIL   Вверх
VOX
Дата 25.2.2009, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Я всё понял, спасибо, работает!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0951 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.