Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Gregori7
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 10
1

Отсортировать таблицу по столбцу "Табельный номер"

11.07.2017, 03:06. Просмотров 816. Ответов 10
Метки нет (Все метки)

Надо отсортировать таблицу(все строки) по столбцу "Табельный номер". Помогите хоть чем-то, укажите на ошибки.
Вот, что есть.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, Menus;
 
type
  TArray = Array [3..3, 1..14]of Integer;
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure N1Click(Sender: TObject);
  private
    { Private declarations }
  public
  A:TArray;
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
var
  i : integer;
begin
  for i := 1 to 14 do
  begin
    StringGrid1.Cells[0, i] := IntToStr(i);
    StringGrid1.Cells[0, 0] := 'Номер';
    StringGrid1.Cells[1, 0] := 'ФИО';
    StringGrid1.Cells[2, 0] := 'Дата рождения';
    StringGrid1.Cells[3, 0] := 'Табельный номер';
//здесь так же заполняю все остальные ячейки
 
 
  end;
end;
 
 
 
procedure booblesort(var A: TArray; min, max: Integer);
const j=3;
var i, tmp, n: Integer;
Sort: Boolean;
begin
Sort:=True;
n:=0;
while Sort do
  begin
   Sort:=False;
   for i:=1 to max-1-n do
     if A[j,i]>A[j,i+1] then
       begin
         Sort:=True;
         tmp:=A[j,i];
         A[j,i]:=A[j,i+1];
         A[j,i+1]:=tmp;
       end;
   n:=n+1;
  end;
end;
 
procedure TForm1.N1Click(Sender: TObject);
var i: integer;
begin
booblesort(A, 0, High(A));
for i:=0 to High(A) do
end;
 
end.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2017, 03:06
Ответы с готовыми решениями:

В каждом слове текста замените "а" на букву "е", если "а" стоит на четном месте, и заменить букву "б" на сочетание "ак",
В каждом слове текста замените "а" на букву "е", если "а" стоит на четном...

Из слов "Работа", "крест", "тон" составить фразу "Кто не работает, тот не ест" и определить ее длину
Из слова "Работа","крест","тон" составить фразу:"Кто не работает, тот не ест" и...

На форме располагаются компоненты: редактор Edit; линейка ScrollBar; радионабор с опциями "Цветы", "Деревья", "Рыбы", "Звери"
Доброго времени суток, 2 курс 2 семестр, пришли, препод раздал задачи, сказал...

Тысячные числа исправлять к примеру с "1200" на "1 200", "12000" на "12 000" и т.д
Собственно числа исправлять к примеру с "1200" на "1 200", "12000" на "12 000",...

В слове Х перед каждой буквой "к", которой предшествует буква "с", вставить букву "н"
Привет всем) вот условие задачи:В слове Х перед каждой буквой "к", которой...

10
qwertehok
2309 / 2213 / 602
Регистрация: 29.08.2013
Сообщений: 14,796
11.07.2017, 06:54 2
Цитата Сообщение от Gregori7 Посмотреть сообщение
укажите на ошибки.
на ошибки тебе компилятор укажет

Цитата Сообщение от Gregori7 Посмотреть сообщение
Надо отсортировать таблицу
может быть добавить все записи в массив, отсортировать массив и потом вывести в таблицу?
массив это быстрее чем грид перерисовывать
0
AHBAR
239 / 239 / 167
Регистрация: 05.04.2013
Сообщений: 1,111
11.07.2017, 07:45 3
Цитата Сообщение от Gregori7 Посмотреть сообщение
укажите на ошибки
ваша первая ошибка - не обрамил код тэгами DELPHI, а без подсветки синтаксиса читать ваш код как бы не комильфо
0
Gregori7
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 10
11.07.2017, 14:30  [ТС] 4
Ошибок не выдает, но и не сортируется.
Да, наверное, можно через массив, но и хотелось бы знать, что тут все-таки не так.
0
Puporev
Модератор
55100 / 42349 / 29249
Регистрация: 18.05.2008
Сообщений: 100,073
11.07.2017, 14:41 5
Во первых зачем у Вас двумерный массив?
Нужно объявить типы
Delphi
1
2
3
4
5
6
7
type zap=record
                 nom:integer;
                 fio:string[20];
                 drz:sting[10];
                 tnm:integer;
                 end;
TArray=array of zap;
Создать массив, выделив память и заполнив значения полей
Сортировка
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure sort(var A: TArray;n:Integer); //n размер массива
var i,j: Integer;
    tmp: zap;
begin
for i:=0 to n-2 do
for j:=i+1 to n-1 do
if A[i].tnm>A[j].tnm then
 begin
  tmp:=A[i];
  A[i]:=A[j];
  A[j]:=tmp;
 end;
end;
0
krapotkin
3446 / 3048 / 1052
Регистрация: 14.04.2014
Сообщений: 14,773
Записей в блоге: 15
11.07.2017, 14:42 6
что такое Array[3..3] ??
O_O

как сортировка МАССИВА перекликается с заполнением STRINGGRID ??
умные цифры сами поймут, что они должны прочитать себя в гриде и встать на свои места в массиве?
ну и процедура сортировки пОзырьком мягко говоря неверна
возьмите хотя бы в википедии. не говоря уж о гугл "делфи сортировка массива"
0
Gregori7
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 10
11.07.2017, 15:48  [ТС] 7
Большое спасибо.
"Создать массив, выделив память и заполнив значения полей" - т.е. в массив переходят значения столбца, сортируются и переходят обратно? Как? Строки должны отсортироваться как раз по этому столбцу.
0
D1973
Модератор
3580 / 2579 / 1261
Регистрация: 21.01.2014
Сообщений: 10,857
Записей в блоге: 3
Завершенные тесты: 1
11.07.2017, 15:58 8
Цитата Сообщение от Gregori7 Посмотреть сообщение
т.е. в массив переходят значения столбца
нет, в массив попадают значения всех ячеек каждой строки. Вы смотрели, что Вам Puporev написал? Каждая строка таблицы помещается в структуру, далее создается массив структур, размер которого равен количеству значимых строк таблицы. А далее просто сортируем этот массив структур по какому-то полю (в Вашем случае - по полю "Табельный номер")...
0
krapotkin
3446 / 3048 / 1052
Регистрация: 14.04.2014
Сообщений: 14,773
Записей в блоге: 15
11.07.2017, 15:58 9
в массив из грида переходят значения всех, а не одного столбца.
только от fio:string[20]; нужно оставить просто fio:string; и с остальными строками так же
а потом ключевой момент - массив показать обратно в grid
0
Puporev
Модератор
55100 / 42349 / 29249
Регистрация: 18.05.2008
Сообщений: 100,073
11.07.2017, 16:09 10
Лучший ответ Сообщение было отмечено Gregori7 как решение

Решение

Если хочется сортировать таблицу и поле табельный номер типа string, то так

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
    tmp:string;
begin
for i:=1 to StringGrid1.RowCount-2 do
for j:=i+1 to StringGrid1.RowCount-1 do
if StringGrid1.Cells[3,i]>StringGrid1.Cells[3,j] then
 begin
  tmp:=StringGrid1.Rows[i].Text;
  StringGrid1.Rows[i].Text:=StringGrid1.Rows[j].Text;
  StringGrid1.Rows[j].Text:=tmp;
 end;
end;
1
Gregori7
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 10
11.07.2017, 17:37  [ТС] 11
Огромное спасибо! Вы меня просто спасли!
0
11.07.2017, 17:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2017, 17:37

Дана строка. Заменить все буквы "м" на "н". Заменить все вхождения сочетаний букв "про" на "нет"
2.Дана строка. 1) Заменить все буквы м на н. 2) Заменить все вхождения...

Выдать номер позиции заданной строки, в которой впервые встречается буква "в"
Выдать номер позиции заданной строки, в которой впервые встречается буква...

Замените в слове Х все буквы "а" на сочетание "ку", а сочетание "ку" на букву "б"
Написать программу, заменяющую в слове Х все буквы "а" на сочетание "ку", а...


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

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

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