2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Сортировка таблицы Delphi
Сообщение23.06.2013, 21:59 
Помогите ,пожалуйста, разобраться с кодом ..( В общем я могу описать, но понять каждую строчку не могу)..
Код:
procedure TForm9.SgSort(StrGrid: TStringGrid; SortColumn: integer);
function Uslovie(s2, s1: string): boolean;
var vl1, vl2:Extended;
begin
if tryStrtoFloat(s1,vl1) and tryStrtoFloat(s2,vl2) then
Result:= vl1 > vl2 else Result:= s1 > s2;
end;
var i, j, k: integer;
sTemp: string;
begin
with StrGrid do
for i := FixedRows to RowCount-2 do
for j := i + 1 to RowCount-1 do
if Uslovie(Cells[SortColumn, i], Cells[SortColumn, j]) then
for k := FixedCols to ColCount-1 do
begin
sTemp:= Cells[k, i];
Cells[k, i]:= Cells[k, j];
Cells[k, j]:= sTemp;
end;
end;

 
 
 
 Re: Сортировка таблицы Delphi
Сообщение19.07.2013, 00:43 
Pilyla в сообщении #739728 писал(а):
Помогите ,пожалуйста, разобраться с кодом ..( В общем я могу описать, но понять каждую строчку не могу)..

код: [ скачать ] [ спрятать ]
Используется синтаксис Delphi
procedure TForm9.SgSort(StrGrid: TStringGrid; SortColumn: integer); //объявляется процедура, относящаяся к классу TForm9, под названием SgSort и принимающая на вход 2 параметра - StrGrid типа TStringGrid (сортируемая таблица) и SortColumn типа integer (сортируемый столбец)

function Uslovie(s2, s1: string): boolean; //в области видимости этой процедуры объявляется функция под названием Uslovie и принимающая на вход 2 параметра - s2 и s1 типа string
var vl1, vl2:Extended; //в области видимости этой функции объявляются 2 переменных - vl1 и vl2 типа Extended
begin //начало функции
  if tryStrtoFloat(s1,vl1) and tryStrtoFloat(s2,vl2) then //если строки s1 и s2 можно перевести в действительные числа, поместив при этом результат в переменные vl1 и vl2, то...
    Result:= vl1 > vl2 else Result:= s1 > s2; //... возвращаем результат сравнения чисел, иначе возвращаем результат сравнения строк
end; //конец функции

var i, j, k: integer; //в области видимости процедуры объявляются 3 переменных i, j и k типа integer...
    sTemp: string; //...и еще 1 переменная sTemp типа string
begin //начало процедуры
  with StrGrid do //дальнейшие имена переменных, если этих переменных не существует, компилятор будет пытаться идентифицировать как свойства таблицы StrGrid
    for i := FixedRows to RowCount-2 do //цикл с изменением переменной i от номера первой "нефикисированной" строки до номера предпоследней строки
      for j := i + 1 to RowCount-1 do //цикл, вложенный в предыдущий, с изменением переменной j от значения переменной i до номера последней строки
        if Uslovie(Cells[SortColumn, i], Cells[SortColumn, j]) then //происходит вызов функции Uslovie, которая, как было разобрано, возвращает результат сравнения двух переданных в нее строк (или чисел, преобразованных из этих строк, при возможности такого преобразования); в функцию передается содержимое ячеек таблицы из сортируемого столбца с номером строк i и j соответственно; если первая строка (или преобразованное из нее число) меньше второй строки (или преобразованного из нее числа), то выполняется код до поставленного мною знака %
          for k := FixedCols to ColCount-1 do //цикл с изменением переменной k от номера первого "нефикисированного" столбца до номера последнего столбца
          begin //начало цикла
            sTemp:= Cells[k, i]; //в переменную sTemp записывается содержимое ячейки из столбца k, строки i
            Cells[k, i]:= Cells[k, j]; //в ячейку в столбце k, строке i записывается содержимое ячейки из столбца k, строки j
            Cells[k, j]:= sTemp; //в ячейку в столбце k, строке i записывается значение переменной sTemp
          end; //конец цикла
      // %  
end; //конец процедуры
 

Не думаю, что вам поможет такая построчная интерпретация кода :-)

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group