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

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

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

 
 Ответить  Открыть новую тему 
> Как упорядочить данные по возрастанию?, пример для массива записей
Romtek
сообщение 29.06.2004 18:13
Сообщение #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

 



- Текстовая версия 27.04.2024 12:34
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"