Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 18.06.2018, 01:34   #1
Tynya
Пользователь
 
Регистрация: 06.12.2017
Сообщений: 13
Репутация: 10
По умолчанию Сортировка простым выбором

Добрый вечер!
Возникла такая проблема, требуется отсортировать данные методом простого выбора. Почти все нормально, но возникает проблема с первой строкой, ее просто стирает. Подскажите, пожалуйста, в чем проблема, голова ночью не очень варит+много работы осталось!!
Вот код сортировки по одному критерию:

procedure TForm2.btn1_sort_okClick(Sender: TObject);
type
TInfo=record
name:string[50];
data:string[35];
genre:string[20];
rating:integer;
dlc:string[4];
engine:string[15];
end;
var
i,j,n:Integer; c:TInfo;
begin
if cbb1_sort.ItemIndex=0 then
for i:=0 to strngrd1.rowcount-1 do
begin
n:=i;
for j:=i+1 to strngrd1.rowcount do
if strngrd1.Cells[0,j]<strngrd1.Cells[0,n] then
n:=j;
if n <> i then
begin
c.name:=strngrd1.Cells[0,i];
c.data:=strngrd1.Cells[1,i];
c.genre:=strngrd1.Cells[2,i];
c.rating:=StrToInt(strngrd1.Cells[3,i]);
c.dlc:=strngrd1.Cells[4,i];
c.engine:=strngrd1.Cells[5,i];
strngrd1.Cells[0,i]:=strngrd1.Cells[0,n];
strngrd1.Cells[1,i]:=strngrd1.Cells[1,n];
strngrd1.Cells[2,i]:=strngrd1.Cells[2,n];
strngrd1.Cells[3,i]:=strngrd1.Cells[3,n];
strngrd1.Cells[4,i]:=strngrd1.Cells[4,n];
strngrd1.Cells[5,i]:=strngrd1.Cells[5,n];
strngrd1.Cells[0,n]:=c.name;
strngrd1.Cells[1,n]:=c.data;
strngrd1.Cells[2,n]:=c.genre;
strngrd1.Cells[3,n]:=inttostr(c.rating);
strngrd1.Cells[4,n]:=c.dlc;
strngrd1.Cells[5,n]:=c.engine;
end;
end;
Tynya вне форума   Ответить с цитированием
Старый 18.06.2018, 01:59   #2
Sciv
Профессионал
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Адрес: Курган
Сообщений: 3,219
Репутация: 1231
По умолчанию

Код:

for i:=0 to strngrd1.rowcount-1 do
begin
n:=i;
for j:=i+1 to strngrd1.rowcount do

Для оформления кода используйте тег CODE (символ решётки над полем ввода)

Теперь по сути: значения StringGrid.RowCount хранят действительно количество строк, НО: нумерация их идёт от нуля, соответственно верхняя граница уменьшается на 1 (то есть 0 .. RowCount - 1)

Следовательно, Ваши циклы должны выглядеть так:

Код:

for i:=0 to strngrd1.rowcount - 2 do
begin
n:=i;
for j:=i+1 to strngrd1.rowcount - 1 do

Смотрел код мельком, в саму сортировку не вникал особо.
__________________
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума   Ответить с цитированием
Старый 18.06.2018, 02:03   #3
Tynya
Пользователь
 
Регистрация: 06.12.2017
Сообщений: 13
Репутация: 10
По умолчанию

Как ни странно, но не работает...
Tynya вне форума   Ответить с цитированием
Старый 18.06.2018, 02:05   #4
Tynya
Пользователь
 
Регистрация: 06.12.2017
Сообщений: 13
Репутация: 10
По умолчанию

Так, стоп-с, беру свои слова обратно.
Все работает! Спасибо!!!
Tynya вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка простым выбором qpuTuJlb Общие вопросы Delphi 0 09.11.2013 22:02
Сортировка строк простым выбором datgen Общие вопросы C/C++ 0 25.12.2011 19:41
Сортировка простым выбором vit9i Помощь студентам 1 31.05.2011 20:41
Сортировка простым выбором в Delphi Vlad111 Помощь студентам 0 13.11.2009 11:03
Сортировка простым выбором (метод пузырька)) Sparky Assembler 3 22.09.2009 18:06


21:07.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru