Лидеры рейтинга

ID: 226425

Konstantin Shvetski

Мастер-Эксперт

1097

Россия, Северодвинск


ID: 401284

Михаил Александров

Академик

419

Россия, Санкт-Петербург


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

397

Россия, пос. Теплоозёрск, ЕАО


ID: 137394

Megaloman

Мастер-Эксперт

330

Беларусь, Гомель


ID: 165461

Лангваген Сергей Евгеньевич

Советник

99

Россия, Московская обл.


ID: 400669

epimkin

Профессионал

50


ID: 400484

solowey

Профессор

44


8.1.6

02.01.2021

JS: 2.2.2
CSS: 4.2.0
jQuery: 3.5.1


 

Создание программ на языках Pascal, Delphi и Lazarus.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)


Gluck
Статус: 7-й класс
Рейтинг: 354
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 228
puporev
Статус: Профессор
Рейтинг: 32
 

Перейти к консультации №:
 

Консультация онлайн # 199802
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: Ericsson (Посетитель)
Дата: 07.12.2020, 12:30
Поступило ответов: 1

Здравствуйте! Прошу помощи в следующем вопросе:
Есть таблица stringgrid, помогите сделать сортировку. Выдать список по заданной пользователем стране и количеству дней выше введенных пользователем, отсортированный по сумма к оплате.

Delphi

-----
Прикрепленное изображение (кликните по картинке для увеличения):

Состояние: Консультация закрыта

Здравствуйте, Ericsson!

Код Delphi 6:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    StringGrid2: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
    ListData:TStringList;
    ChangeBox,ChangeEdit:boolean;
    procedure SortGrid;
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
  procedure TForm1.SortGrid;
    var
      a,b,c:integer;
      d:string;
    begin
      a:=StrToInt(Form1.Edit1.Text);
      Form1.StringGrid1.Visible:=false;
      Form1.StringGrid2.Top:=Form1.StringGrid1.Top;
      Form1.StringGrid2.Left:=Form1.StringGrid1.Left;
      Form1.StringGrid2.Width:=Form1.StringGrid1.Width;
      Form1.StringGrid2.Height:=Form1.StringGrid1.Height;
      Form1.StringGrid2.ColCount:=Form1.StringGrid1.ColCount;
      Form1.StringGrid2.RowCount:=0;
      for c:=1 to Form1.StringGrid1.RowCount-1 do
        begin
          if(Form1.StringGrid1.Cells[2,c]=Form1.ComboBox1.Items[Form1.ComboBox1.ItemIndex])and
            (a<=StrToInt(Form1.StringGrid1.Cells[3,c])) then
            begin
              Form1.StringGrid2.RowCount:=Form1.StringGrid2.RowCount+1;
              for b:=0 to form1.StringGrid1.ColCount-1 do
                Form1.StringGrid2.Cells[b,Form1.StringGrid2.RowCount-1]:=Form1.StringGrid1.Cells[b,c];
            end;
        end;
        Form1.StringGrid2.Visible:=true;
        ShowMessage('sorting');
        for a:=1 to Form1.StringGrid2.RowCount-2do
          for b:=a+1 to Form1.StringGrid2.RowCount-1do
            if StrToFloat(Form1.StringGrid2.Cells[8,a])<StrToFloat(Form1.StringGrid2.Cells[8,b])then
              for c:=0 to Form1.StringGrid2.ColCount-1 do
                begin
                  d:=Form1.StringGrid2.Cells[c,a];
                  Form1.StringGrid2.Cells[c,a]:=Form1.StringGrid2.Cells[c,b];
                  Form1.StringGrid2.Cells[c,b]:=d;
                end;
    end;
  procedure TForm1.FormCreate(Sender: TObject);
    var
      a:double;
      i,j:integer;
      s:string;
    begin
      s:='D:\CAT\_my\201207.txt';
      ListData:=Tstringlist.Create;
      ListData.Clear;
      ListData.Sorted:=false;
      ListData.LoadFromFile(s);
      Form1.StringGrid1.RowCount:=ListData.Count+1;
      Form1.StringGrid1.Visible:=false;
      Form1.StringGrid2.Visible:=false;
      for i:=0 to ListData.Count-1 do
        begin
          s:=ListData.Strings[i]+' ';
          j:=0;
          while length(s)>0 do
            begin
              while s[1]=' 'do delete(s,1,1);
              Form1.StringGrid1.Cells[j,i+1]:=copy(s,1,pos(' ',s)-1);
              delete(s,1,pos(' ',s));
              inc(j);
            end;
          a:=StrToInt(Form1.StringGrid1.Cells[3,i+1])*
            (StrToInt(Form1.StringGrid1.Cells[5,i+1])*StrToInt(Form1.StringGrid1.Cells[7,i+1])+
            0.7*StrToInt(Form1.StringGrid1.Cells[6,i+1])*StrToInt(Form1.StringGrid1.Cells[7,i+1])
            );
          Form1.StringGrid1.Cells[8,i+1]:=Format('%f',[a]);
        end;
      ListData.Clear;
      Form1.StringGrid1.Visible:=true;
      ListData.Sorted:=true;
      for i:=1 to Form1.StringGrid1.RowCount-1 do
        if not ListData.Find(Form1.StringGrid1.Cells[2,i],j) then
          ListData.Add(Form1.StringGrid1.Cells[2,i]);
      Form1.ComboBox1.Items.BeginUpdate;
      Form1.ComboBox1.Clear;
      Form1.ComboBox1.Items.AddStrings(ListData);
      Form1.ComboBox1.Items.EndUpdate;
      ListData.Free;
      Form1.ChangeBox:=false;
      Form1.ChangeEdit:=false;
    end;
  procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
       if ChangeEdit then SortGrid else ChangeBox:=true;
    end;
  procedure TForm1.Edit1Change(Sender: TObject);
    begin
      if ChangeBox then SortGrid else ChangeEdit:=true;
    end;
  procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if not( Key in ['0'..'9',#13] )then Key:=#0;
    end;
end.


Содержимое базы данных:
Цитата: 201207.txt
1 101 Россия 4 Иванов 1 0 5000
2 102 Россия 5 Пертров 2 1 4500
3 103 Япония 10 Сидоров 3 1 3000
4 104 Турция 8 Журавлев 4 1 2000
5 105 Турция 7 Попов 5 2 2500
6 106 Турция 6 Сидоров 3 1 3500
7 107 Чехия 9 Попов 1 1 4500
8 108 Чехия 5 Иванов 2 2 5500
9 109 Нигерия 11 Петров 3 1 6000
10 110 Япония 5 Иванов 1 1 2000
11 111 Япония 21 Пертров 2 2 2500
12 112 Китай 2 Сидоров 3 1 3500
13 113 Нигерия 5 Журавлев 1 1 6500
14 114 Россия 4 Попов 2 2 5500


Удачи!


Консультировал: Зенченко Константин Николаевич (Старший модератор)
Дата отправки: 08.12.2020, 14:25

5
нет комментария
-----
Дата оценки: 08.12.2020, 15:18

Рейтинг ответа:

+1

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.