Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
 Аватар для Alex99999
1 / 1 / 1
Регистрация: 03.12.2012
Сообщений: 299

Сортировка в StringGrid

01.03.2019, 14:53. Показов 5517. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно сделать такую сортировку строк в StringGrid:
В столбце - 0 1 2 3 0 1 4 5 2 3 4 5
Результат - 0 1 2 3 4 5 0 1 2 3 4 5
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.03.2019, 14:53
Ответы с готовыми решениями:

Сортировка Stringgrid
Добрый вечер. Есть программа, с информации о студентах и количествах их баллах. Помогите пожалуйста сделать сортировку по баллам.

Сортировка 2-х StringGrid
Здравствуйте всем! Как сделать сортировку сразу двух StringGrid, т.е. сортировался первый, а у второго числа остались привязаны к...

StringGrid сортировка
Бросте кто может или напишите простинькою сортировку StringGrid, а то я гуглил и ничего норм не нашол... Сортировка (А->Я) (Я -> А)

45
15 / 14 / 2
Регистрация: 12.02.2015
Сообщений: 95
02.03.2019, 11:29
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Alex99999 Посмотреть сообщение
D1973, да конечно есть главный критерий: изначально это единое целое, которое в результате некоторых манипуляций приобрело такой вид. Поэтому очень важно восстановить именно исходную последовательность строк.
Если условно разделить всё на 3 блока по 6 строк то: в 1 блоке не могут встретиться комбинации из 3 блока и т.д.
Т.е. разрыв блока происходит всегда в конце текущего и начале следующего.
И все-таки серии ...
Работайте через массив.. Привыкайте к хорошему стилю.
Дальше легче будет работать...

Вот просто подсказка
Возьмите листик в клеточку

Нарисуйте ваш массив

Пронумеруйте строки

И напишите словами как оно должно переставляться....
Это не шутки это одна из методик создания алгоритма.

А потом начинайте код писать.

Вам просто нужно пр перестановке переставлять строки по сериям
0
 Аватар для Alex99999
1 / 1 / 1
Регистрация: 03.12.2012
Сообщений: 299
02.03.2019, 12:42  [ТС]
В массив загрузил, а вот со сказанным Вами выше проблемы. Объясните пожалуйста, что значит
Цитата Сообщение от tc2014 Посмотреть сообщение
переставлять строки по сериям
0
15 / 14 / 2
Регистрация: 12.02.2015
Сообщений: 95
02.03.2019, 14:49
Вот смотрите у вас по итогу должны получиться последовательности(серии) от 0 до 5
Значит
1 заносим данные в массив
2 пееставляем строки так что бы получились необходимые ппоследовательности
3 если не горит сделаю пример часа через 4
Сейчас с телефона пишу
0
Модератор
 Аватар для D1973
9951 / 6486 / 2461
Регистрация: 21.01.2014
Сообщений: 27,481
Записей в блоге: 3
02.03.2019, 15:19
Цитата Сообщение от Alex99999 Посмотреть сообщение
изначально это единое целое
Откуда это целое берется?
Цитата Сообщение от Alex99999 Посмотреть сообщение
в результате некоторых манипуляций приобрело такой вид
Дык, может убрать эти манипуляции?
Цитата Сообщение от Alex99999 Посмотреть сообщение
Поэтому очень важно восстановить именно исходную последовательность строк.
А откуда Вы знаете, какова была изначальная последовательность? И зачем именно ее надо было херить, а не копию, к примеру?

Alex99999, это учебная задача или что-то из реальной жизни? Если первое - огласите условие так, как Вы его получили, буква в букву. Если второе - не надо ходить вокруг да около: "некоторые манипуляции" там, "изначально единое целое" и т.д. Четко техзадание сформулируйте!
Все, что по предыдущим Вашим постам может быть предложено - это погон под ответ, но никак не целостный алгоритм, который может выдержать изменение данных, одноразовая поделка...

Добавлено через 16 секунд
Цитата Сообщение от tc2014 Посмотреть сообщение
2 пееставляем строки так что бы получились необходимые ппоследовательности
А я что сделал? Последовательности получены, а толку... - не так, оказывается... А почему не так - не понятно...
0
 Аватар для Alex99999
1 / 1 / 1
Регистрация: 03.12.2012
Сообщений: 299
02.03.2019, 16:17  [ТС]
D1973, из реальной жизни.
- "изначально единое целое" - файл с данными.
- "некоторые манипуляции" - файл передаётся блоками, состоящими из пакетов, где 0,1,2,3,4,5 - номера пакетов в блоке.
Последние пакеты текущего блока могут передаваться вперемешку с начальными пакетами следующего блока.
0
15 / 14 / 2
Регистрация: 12.02.2015
Сообщений: 95
02.03.2019, 17:08
Сделаю выложу сюда
не мучайиесь
на примере будет очевиднее

Э стоп а номера пакетов???)

Добавлено через 6 минут
Точнее блоков чьи это пакеты?
0
 Аватар для Alex99999
1 / 1 / 1
Регистрация: 03.12.2012
Сообщений: 299
02.03.2019, 17:22  [ТС]
Цитата Сообщение от Alex99999 Посмотреть сообщение
Последние пакеты текущего блока могут передаваться вперемешку с начальными пакетами следующего блока.
Номеров блоков нет. Они передаются последовательно.
Т.е. если пришёл второй 0, то это начало 2 блока и т.д.
0
15 / 14 / 2
Регистрация: 12.02.2015
Сообщений: 95
02.03.2019, 17:22
Где брать порядковый номер блока чей это пакет?

И вообще при такой постановке зачем сортировать?

Если для восстановления файла то достаточно будет отсортировать блоки а потом внутри бблоков. Пакеты. Или не сортировать а искать блоки в динамический массиве и потом по мере записи в файл удалять)
а если балуетесь с шифрованием решеткой то так это не делается))))
0
 Аватар для Alex99999
1 / 1 / 1
Регистрация: 03.12.2012
Сообщений: 299
02.03.2019, 17:32  [ТС]
Цитата Сообщение от tc2014 Посмотреть сообщение
то достаточно будет отсортировать блоки а потом внутри блоков.
Вот это и необходимо.
0
15 / 14 / 2
Регистрация: 12.02.2015
Сообщений: 95
02.03.2019, 17:33
Т. Ё. Если пришло 3 пакета второго блока и приходит два четвертых пакета то какой к какому блоку относится?)
0
 Аватар для Alex99999
1 / 1 / 1
Регистрация: 03.12.2012
Сообщений: 299
02.03.2019, 17:58  [ТС]
tc2014,
Цитата Сообщение от tc2014 Посмотреть сообщение
приходит два четвертых пакета то какой к какому блоку относится?)
Первый из двух четвёртых к 1 блоку ну а второй соответственно ко 2.

Добавлено через 14 минут
Ну а вообще два пакета с одинаковыми номерами не могут находиться рядом
0
 Аватар для Alex99999
1 / 1 / 1
Регистрация: 03.12.2012
Сообщений: 299
03.03.2019, 02:21  [ТС]
По идее нужно в массиве найти и скопировать (или переместить) первые идущие 0,1,2,3,4,5 в другой массив (или сразу в грид) потом следующие...
0
15 / 14 / 2
Регистрация: 12.02.2015
Сообщений: 95
03.03.2019, 16:28
вот, задачу конкретизировали ))
сейчас)

Добавлено через 1 час 42 минуты
ха .. так а если не полный набор ...)
0
 Аватар для Alex99999
1 / 1 / 1
Регистрация: 03.12.2012
Сообщений: 299
03.03.2019, 16:36  [ТС]
Цитата Сообщение от tc2014 Посмотреть сообщение
ха .. так а если не полный набор ...)
Конечная серия в любом случае будет не полной...
0
Модератор
 Аватар для D1973
9951 / 6486 / 2461
Регистрация: 21.01.2014
Сообщений: 27,481
Записей в блоге: 3
04.03.2019, 06:05
Цитата Сообщение от Alex99999 Посмотреть сообщение
где 0,1,2,3,4,5 - номера пакетов в блоке.
Пакетов всегда 5? Или каждый раз разное количество?
0
Модератор
 Аватар для D1973
9951 / 6486 / 2461
Регистрация: 21.01.2014
Сообщений: 27,481
Записей в блоге: 3
04.03.2019, 08:23
Лучший ответ Сообщение было отмечено Alex99999 как решение

Решение

Вот решение для предположения, что пакетов - 5.
Delphi
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
function FindInList(SL: TStrings; Value: integer): integer;
var i: integer;
begin
 for i := 0 to SL.Count - 1 do
   if StrToInt(SL.Names[i]) = Value then
    begin
      result := i;
      Exit;
    end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
const Clmn = 1; Min = 0; Max = 5;
var i, k: integer;
    L, Rez: TStringList;
begin
 L := TStringList.Create;
 Rez := TStringList.Create;
 for i := 0 to G.RowCount - 1 do
  L.Add(Format('%s=%s', [G.Cells[Clmn, i], G.Rows[i].CommaText]));
 k := Min;
 while L.Count > 0 do
  begin
   if StrToInt(L.Names[0]) = k then i := 0 else i := FindInList(L, k);
   Rez.Add(L.Strings[i]);
   L.Delete(i);
   inc(k);
   if k > Max then k := Min;
  end;
 for i := 0 to Rez.Count - 1 do
  G2.Rows[i].CommaText := Rez.ValueFromIndex[i];
 L.Free;
 Rez.Free;
end;
Миниатюры
Сортировка в StringGrid  
1
 Аватар для Alex99999
1 / 1 / 1
Регистрация: 03.12.2012
Сообщений: 299
04.03.2019, 17:21  [ТС]
D1973, спасибо огромное. То-что нужно!!!

Добавлено через 13 минут
D1973, а если пакетов будет например - 8, достаточно будет Max:=8 или нет?
0
Модератор
 Аватар для D1973
9951 / 6486 / 2461
Регистрация: 21.01.2014
Сообщений: 27,481
Записей в блоге: 3
04.03.2019, 17:29
Цитата Сообщение от Alex99999 Посмотреть сообщение
достаточно будет Max:=8 или нет?
Ну вообще - да... Но тогда лучше озаботиться и написать отдельно функцию поиска максимального номера пакета... 5-6 лишних строк кода...
0
 Аватар для Alex99999
1 / 1 / 1
Регистрация: 03.12.2012
Сообщений: 299
04.03.2019, 17:31  [ТС]
D1973, всё ок! Работает отлично. Ещё раз спасибо!
0
Модератор
 Аватар для D1973
9951 / 6486 / 2461
Регистрация: 21.01.2014
Сообщений: 27,481
Записей в блоге: 3
04.03.2019, 17:37
Да на здоровье...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.03.2019, 17:37

Сортировка StringGrid
Хочу сделать сортировку строк в таблице StringGrid. Нагуглил вот такой код: http://www.delphisources.ru/pages/faq/base/sg_sort3.html Но...

Сортировка Stringgrid
Такое дело есть Stringgrid куда из файла вносятся данные о покупках. Задав через edit значение нужно оставить в Stringgrid только те...

Сортировка в StringGrid
Сортировать данные по наименованию

Сортировка stringgrid
Есть код, но он сортирует не так как мне нужно procedure StrGrid(aSg : TStringGrid;const aCol :Integer); var SlSort, SlRow :...

Сортировка в Stringgrid
Ребята нужна помощь(срочно) какой код писать что бы в stringgrid сортировать по возрастанию или убыванию помогите :wall:


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru