Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 19.10.2019
Сообщений: 5

Сортировка элементов списка

19.10.2019, 14:52. Показов 796. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, у меня есть список, в нём есть 5 фамилий и эти 5 фамилий нужно отсортировать по количеству символов в строке(от большего к меньшему).
Пример фамилий:
ХХХ
ХХХХ
Х
ХХ
Х
И их нужно отсортировать в такой порядке:
ХХХХ
ХХХ
ХХ
Х
Х

Также в список можно добавлять другие элементы и нужно чтобы они тоже были сразу отсортированы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.10.2019, 14:52
Ответы с готовыми решениями:

Сортировка отрицательных элементов односвязного списка
Вообщем так: нужно создать список односвязный, и отсортировать только отрицательные элементы. Не могу понять, в чём проблема? По логике...

Сортировка списка из составных элементов по частям этих элементов
Отсортируйте список участников олимпиады: 1) По убыванию набранного балла. 2) При равных значения балла - по фамилии в...

Сортировка элементов списка
При нажатии на кнопку элементы списка сортируются по возрастанию. Как это сделать?

7
 Аватар для kotAV
142 / 108 / 57
Регистрация: 15.09.2017
Сообщений: 425
19.10.2019, 15:22
Dodgie,
Pascal
1
2
3
4
5
6
7
8
9
10
11
begin
  var фамилии := new string[5](
    'ХХХ',
    'ХХХХ',
    'Х',
    'ХХ',
    'Х'
  );
  фамилии.Sort((x, y) -> y.Length - x.Length);
  фамилии.PrintLines
end.
0
0 / 0 / 0
Регистрация: 19.10.2019
Сообщений: 5
19.10.2019, 16:09  [ТС]
Не,не, дело в том, что это всё нужно организовать командами списка.
Вот допустим процедура добавления в список какой-либо фамилии:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
procedure Add(Stroka: string);
begin
  New(pnew); pnew^.fam := Stroka; 
  ID := ID + 1;
  pnew^.Id := ID; 
    if head = nil then
     begin
       pnew^.Next := nil; head := pnew;
     end
  else begin
    ppred := nil; 
    pcur := head;
    while (Stroka > pcur^.fam) and (pcur^.next <> nil) do
    begin
      ppred := pcur;
      pcur := pcur^.next;
    end;
    
    if (pcur^.next = nil) and (Stroka > pcur^.fam)
    then begin
      ppred := pcur; pnew^.next := nil;
    end
    else pnew^.next := pcur;
    if ppred = nil
      then head := pnew
    else ppred^.next := pnew;
  end; 
 end;
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
19.10.2019, 18:01
Цитата Сообщение от Dodgie Посмотреть сообщение
сё нужно организовать командами списка.
Ну вот:
Pascal
1
2
3
4
5
6
7
8
9
10
begin
  var L := New List<string>;
  L.Add('xxx');
  L.Add('YYYY');
  L.Add('z');
  L.Add('AA');
  L.Add('b');
  
  L.Println.OrderBy(s->s.Length).Println;
end.
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,361
19.10.2019, 23:25
JuriiMW, List в .NET это динамический массив, ему 100% связный список нужен, ну и понятно что свой(и сортировка своя).
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
20.10.2019, 05:27
Вот только через указатели такой список точно не сделать.
Строки это ссылочные типы, поэтому если строка находится в записи на которую указывает только указатель (нет полноценных .Net ссылок) - эту строку может в любой момент удалить. В таком случае при попытки чтения её значения получается или мусор, или ошибка AccessViolationException.

Происходит это не очень часто, но когда от такого падает - выловить ошибку нереально (и без особых атрибутов - даже блок try эту ошибку не словит).

В данном языке если уже делать свои велосипедные связные списки (стандартный, не на массиве, тоже есть, это LinkedList) - то через классы.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
type
  MyLinkedList = class
    v: string;
    L,R: MyLinkedList;
    
    constructor(v: string) :=
    self.v := v;
    
    function AddSorted(nv: string): MyLinkedList;
    begin
      if nv.Length<self.v.Length then
      begin
        Result := new MyLinkedList(nv);
        Result.R := self;
        self.L := Result;
      end else
      begin
        Result := self;
        var curr := self;
        
        while true do
          if curr.R=nil then
          begin
            curr.R := new MyLinkedList(nv);
            curr.R.L := curr;
            exit;
          end else
          if curr.R.v.Length >= nv.Length then
          begin
            var res := new MyLinkedList(nv);
            res.R := curr.R;
            curr.R.L := res;
            curr.R := res;
            res.L := curr;
            exit;
          end else
            curr := curr.R;
        
      end;
    end;
    
    function Enumerate: sequence of string;
    begin
      var last := self;
      
      repeat
        yield last.v;
        last := last.R;
      until last=nil;
      
    end;
    
  end;
  
function ToMyLinkedList(self: sequence of string): MyLinkedList; extensionmethod;
begin
  var enm: IEnumerator<string> := self.GetEnumerator;
  if not enm.MoveNext then exit;
  
  Result := new MyLinkedList(enm.Current);
  while enm.MoveNext do
    Result := Result.AddSorted(enm.Current);
  
end;
 
begin
  var l := ReadSeqString(ReadlnInteger('кол-во начальных элементов')).ToMyLinkedList;
  
  while true do
  begin
    Writeln('='*20);
    l.Enumerate.PrintLines;
    l := l.AddSorted(ReadString('следующий элемент:'));
  end;
  
end.
1
0 / 0 / 0
Регистрация: 19.10.2019
Сообщений: 5
28.10.2019, 19:46  [ТС]
Кидаю полностью код программы, кто-то может всё-таки знает как
это сделать? Может просто поменять алфавитную сортировку на эту сортировку... но я хз как это сделать (
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
type
  PElement = ^TypeElement;TypeElement = record
    Fam: string;
    Id: integer;
    Next: PElement;
  end;
 
var
  head, pcur, pnew, ppred: PElement; ID, DopCount: integer;
 
procedure Add(Stroka: string);
begin
  New(pnew); pnew^.fam := Stroka; 
  ID := ID + 1;
  pnew^.Id := ID; 
    if head = nil then
     begin
       pnew^.Next := nil; head := pnew;
     end
  else begin
    ppred := nil; 
    pcur := head;
    while (Stroka > pcur^.fam) and (pcur^.next <> nil) do
    begin
      ppred := pcur;
      pcur := pcur^.next;
    end;
    
    if (pcur^.next = nil) and (Stroka > pcur^.fam)
    then begin
      ppred := pcur; pnew^.next := nil;
    end
    else pnew^.next := pcur;
    if ppred = nil
      then head := pnew
    else ppred^.next := pnew;
  end; 
 end;
 
procedure Print;
begin
  pCur := Head;
  while pCur <> nil do
  begin
    writeln(pCur^.Id, ' ', pCur^.fam); pCur := pCur^.Next;
  end; 
end;
 
procedure Find(stroka: string);
var
  p: integer;
begin
  p := 0;
  pcur := head;
  DopCount := 0;
  while pcur <> nil do
  begin
    if pcur^.fam = stroka
    then begin
      p := pcur^.ID; writeln(p);
      DopCount := DopCount + 1;
    end;
    pcur := pcur^.next;
  end;
  if p = 0
    then writeln('Нет такого элемента!');
end;
 
procedure Delete(FamDel: string);
begin
  ppred := nil; 
  pcur := head;
  while (pcur^.next <> nil) and (pcur^.fam <> FamDel) do
  begin
    ppred := pcur;
    pcur := pcur^.next;
  end;
  
  if (pcur^.fam = FamDel)
  then begin
    if (pCur^.next = nil)
    then begin
      if pCur = head
        then head := pcur^.next
      else ppred^.next := nil;
      Writeln('Элемент ', pcur^.fam, ' № ', pcur^.Id, ' удален!'); Dispose(pcur);
    end
    else begin
      if pcur = head
        then head := pcur^.next
      else ppred^.next := pcur^.next;
      Writeln('Элемент ', pcur^.fam, ' № ', pcur^.Id, ' удален!'); 
      Dispose(pcur);
         end; 
      end
  else Writeln('Такого элемента нет!');
end;
 
procedure Check;
var
  stroka: string; menu: integer;
begin
  Add('Аверин'); 
  Add('Бабанов'); 
  Add('Ветров'); 
  Add('Ключерев'); 
  Add('Петров'); 
  menu := 0;
  
  while menu <> 5 do
  begin
    writeln(' ');
    writeln('ВВЕДИТЕ НОМЕР ДЕЙСТВИЯ:'); 
    writeln('------------------------');
    writeln('1) Просмотреть список'); 
    writeln('2) Добавить элемент'); 
    writeln('3) Удалить элемент'); 
    writeln('4) Поиск по списку'); 
    writeln('5) Закрыть список');
    writeln(' ');
    write('Команда номер: '); readln(menu); writeln(' ');
    
    case menu of
      1: Print;
      
      2:
        begin
          Writeln('Введите добавляемый элемент:'); 
          Readln(stroka);
          Add(stroka);
        end;
      
      3:
        begin
          writeln('Введите фамилию:'); 
          readln(stroka); 
          Delete(stroka);
        end;
      
      4:
        begin
          writeln('Введите фамилию:'); 
          readln(stroka); 
          find(stroka);
        end;
      
      5:
        begin
          exit; 
        end;
     end; 
  end;
end;
 
 
begin
  Head := nil;
  ID := 5000;
  Check;
end.
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
29.10.2019, 00:05
Я уже скинул код. И объяснил почему с record это категорически нельзя делать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.10.2019, 00:05
Помогаю со студенческими работами здесь

Сортировка элементов списка
сортировка элементов списка sorting_1(, ).

Сортировка списка по типу элементов
Помогите пожалуйста... есть список Фигур - List&lt;Figure&gt; list; в нем наследованные объекты класса квадрат, круг и прямоугольник; ...

Сортировка списка комбинационных элементов
Доброго времени суток. Преподаватель дал задание описать базовый класс Element (Элемент) и производный от него класс Combine...

Сортировка элементов двунаправленного списка
Помогите пожалуйста! Есть двунаправленный список. Как организовать сортировку двунаправленного списка по табельному номеру? Элементы...

Сортировка элементов списка по дате
Подскажите как сделать сортировку по дате а то что то не нашел. public class NewsModels { public NewsModels() ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru