2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Сортировка таблицы Delphi
Сообщение23.06.2013, 21:59 


09/04/13
20
Помогите ,пожалуйста, разобраться с кодом ..( В общем я могу описать, но понять каждую строчку не могу)..
Код:
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 


17/07/13
16
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 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group