IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Как упорядочить данные по возрастанию?, пример для массива записей
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 303
Пол: Мужской
Реальное имя: Роман

Репутация: -  2  +


Программа показывает как отсортировать массив записей по возрасту.
Так можно упорядочить любую структуру данных. Надо только позаботиться о том, по какому критерию надо сортировать.
По убыванию? Пожалуйста! Поменяйте знак в процедуре Compare.

Код
program SortRec;

const N = 4;
type
   TInfo = record
     Age:  integer; { возраст }
     Name: string [20];
   end;

   List = array [1..N] of TInfo; { массив записей содержит возраст и имя }

{ сравнивать по возрасту }
function Compare (T1,T2: TInfo): integer;
begin
     if T1.Age > T2.Age then Compare := 1
     else if T1.Age = T2.Age then Compare := 0
     else Compare := -1
end;

procedure QuickSort (var A: List; Lo, Hi: Integer);
var
  i,j: integer;
  x, y: TInfo;

procedure Sort (l, r: Integer);
begin
     repeat
           x := A[(l+r) shr 1];
           i := l; j := r;
           repeat
                 while Compare( A[i], x ) < 0 do inc(i);
                 while Compare( A[j], x ) > 0 do dec(j);
                 if i <= j then
                 begin
                      y := A[i]; A[i] := A[j]; A[j] := y;
                      inc(i); dec(j);
                 end;
           until i > j;

           if l < j then Sort (l, j);
           l := i;
     until l >= r;
end;

begin
      Sort (Lo,Hi);
end; {QuickSort}

var
  Data: List;
  I: Integer;

begin { Main }

      { здесь заполнение массива записей }

      QuickSort (Data, 1, N); { сортировка массива записей от 1-й до N-й записи }

      { здесь вывод на экран массива записей }

end.


Если надо вывести список людей по алфавитному порядку, то здесь немного сложнее.

Код
function strcomp(Key1, Key2: String): Integer;
var i,m,c: integer;
begin
     c:=0;
     m:=length(Key1);
     if m>length(Key2) then m:=length(Key2);
     for i:=1 to m do
     begin
          c:=ord(Key1[i])-ord(Key2[i]);
          if c<>0 then break;
     end;
     strcomp:=c
end;


М
Программа выведена из FAQ-а, т.к. в функции strcomp была обнаружена ошибка...
Подробности - здесь: Задача на слова



--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.03.2024 9:07
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name