Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620

Добавление сортировки

03.04.2019, 21:50. Показов 3875. Ответов 98
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
не хватает процедуры сортировки имён в алфавитном порядке...
вот сама программа
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
//Uses Crt;
type
  TPElem = ^TElem;
  TElem = record
    Data : string;
      Left,Right: TPElem;
  end; 
  
var
  T,S : TPElem;
  i,k:byte;
  N:string;
  
procedure AddToTree( var T: TPElem; N:string); {ВВОД}
begin
  if T = nil then begin
    New(T);
    T^.Data := N;
     T^.Left := nil;
     T^.Right := nil;
   Exit; end; 
  if N < T^.Data then
     AddToTree(T^.Left, N)
  else 
     AddToTree(T^.Right, N);
end; 
// //
function Search(T:TPElem; N:string):TPElem; {ПОИСК}
var
P:TPElem;  
begin
  if T=nil then  
     begin
       Search:=nil;  
       exit; 
     end;
  if N=T^.Data then 
    P:=T 
     else 
       if N < T^.Data then
          P:=Search(T^.Left,N) 
       else     {иначе }
         P:=Search(T^.Right,N); 
  Search:=P;
end;
// //
procedure Lkp(T:TPElem);  {ВЫВОД}
begin
  if T=nil then 
   exit;    
  Lkp(T^.Left);  
  write('  ',T^.Data);
  Lkp(T^.Right);  
end;
// //
 begin
    while true do
    begin
        writeLn('Выберите действие');
        writeLn('1 - Добавление');
        writeLn('2 - Поиск'); 
        writeLn('5 - Вывод');
        writeLn('6 - Очистка');
        writeLn('7 - Exit');
       var ans := ReadLnString('Ваш выбор:').Trim;
      if ans.Length > 0 then
        case ans[1] of
            '1' :          {ВВОД}
             begin
             // ClrScr;
               Write('Задайте количество сотрудников: ');
               Readln(k);
              for i := 1 to k do
                begin
                 Write('Введите имя: ');
                 Readln(N);
                 AddToTree(T,N);
                end; 
             end;
         '2': begin      {ПОИСК}
               writeln('Имя для поиска');
               readln(N);
               S:=Search(T,N);
                  if S <> nil then
                    writeln('Найден')
                  else writeln('Такого элемента нет!');
              end;
    '5' :begin         {ВЫВОД}
      //  ClrScr;
    Write('Список: ');
    if T = nil then
    writeln('пуст... ')
    else begin
        Lkp(T);
        writeln;
       end; end;
        '6' : begin
              T:=nil;
     //         ClrScr;
              writeln('Список очищен... ');
              end;
          '7' : exit
        end;  
    end;
end.
есть у кого нибудь хотя бы пример? хоть посмотреть как такая процедура выглядит, а то везде только массивы да списки.... а как в дереве такое выглядит, нигде не пишется и не объясняется, опять надо у бога спрашивать...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.04.2019, 21:50
Ответы с готовыми решениями:

Разработайте рекурсивную процедуру сортировки последовательности методом быстрой сортировки Хоара
Помогите!!!! Дана последовательность чисел a1, a2, ... , an. Разработайте рекурсивную процедуру сортировки последовательности методом...

Написать программу сортировки массива с помощью алгоритма внешней сортировки
1. Дан текстовый файл, в котором записана последовательность целых чисел. Написать программу сортировки массива с помощью алгоритма внешней...

Расставить элементы массива в порядке возрастания методом сортировки выбором и сортировки простыми вставками
Здрасьте еще раз!С прошедшим вас праздником! я глупая и бестолковая опять пришла к вам на спасение. задачка вот простенькая, но вся...

98
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
27.04.2019, 18:46  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Пс Посмотреть сообщение
я могу ошибаться,но что-то подобное реализуется с помощью Thread,копайте в эту сторону.
чё-то не то, выдаёт многопоточность везде
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
27.04.2019, 22:03
Нет, Thread это потоки, а реализовано это в HashSet и Dictionary.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
27.04.2019, 22:16  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
HashSet и Dictionary
а где этому обучиться можно с нуля?
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
27.04.2019, 22:45
Объяснение основных моментов:

Я расскажу про HashSet, потому что Dictionary работает по тем же принципам, только ещё сопоставляет с каждым ключём - значение. И начну я с теории:

В HashSet хранится массив бакетов (в переводе с англ. - вёдер). Каждый бакет - это массив элементов, у хеш-кодов которых - последние несколько бит одинаковые.

На этом теория закончилась ;)



Теперь, допустим имеется такой код:
Pascal
1
2
3
4
5
6
7
8
9
10
begin
  var hs := new HashSet<integer>(8);
  
  hs += 5;
  hs += 8;
  hs += 13;
  
  hs.Contains(13).Println;
  
end.
integer.GetHashCode возвращает само число, поэтому с ним проще объяснить.
Число переданное в конструктор - это кол-во бакетов. Вообще, его сначала увеличивает до ближайшей степени двойки. Но я уже передал степень двойки (8=2^3), поэтому его не изменит. А 9, к примеру, заменило бы на 16.



5 в 2-ичной СС выглядит как 101. 8 это 2^3, поэтому у 5 возьмёт последние 3 бита, по сути не изменив её. Готовое число - это номер бакета, то есть 5 засунет в бакет #5

Дальше идёт 8, которое в 2-ичной СС выглядит как 1000. Когда у него берёт последние 3 бита - получается 0, то есть его засунет в бакет #0 (они нумеруются с 0).

Дальше 13, в 2СС 1101. От него берёт последние 3 бита и получается 5. То есть его тоже засунет в бакет #5.

Вы могли заметить - когда у n берут последние 3 бита, результат выходит n mod 8. Это действительно так, но побитовые маски работают быстрее чем mod, поэтому используют именно их.



Дальше у нас проверка .Contains. Именно тут и творится магия, ради которой создавались все эти бакеты. Без бакетов - пришлось бы проверить все 3 добавленных числа на равенство тринадцати. Но теперь, вместо этого - опять производится та операция над хеш-кодом. Берётся последние 3 бита, получаем номер бакета, снова #5. И теперь проверяем только в бакете #5.

В данном случае это 2 проверки, но в обычной ситуации - это маловероятно. Обычно, элементы более равномерно расползаются по бакетам, и тогда проверка вообще только 1, вне зависимости от того - сколько всего элементов в хашсете.

Но, кроме всего прочего, равномерность расположения элементов - может зависеть от выбранной функции GetHashCode. Когда дело заходит про нахождение хеш-кода записи, содержащей 3 integer - обычно математически находят специальные "волшебные" числа, которые при проведении специальных операций - дают самый хороший хеш-код. Но это уже гуглите сами.



Но, не думайте что я объяснил всё. Я ужасно упростил, чтоб можно было изложить человеческим языком, а не тем что вы находили до этого.
А так - и в HashSet, и в Dictionary полно дополнительных плюшек. Но, теперь, имея базовую информацию - вам должно быть легче понять сухой текст, и вот теперь его пора читать.

И напоследок - я оставлю вам во вложениях сорсы HashSet и Dictionary. (в Desktop.rar)
Но, лучше будет если вы их достанете сами, я, к примеру, использовал DotPeek. Ато, он ещё подсвечивает всё, и с ним удобно искать информацию в большой файле с кодом (там куча полезных действий под ПКМ).
Вложения
Тип файла: rar Desktop.rar (15.9 Кб, 1 просмотров)
1
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
27.04.2019, 22:50  [ТС]
а что-за .cs файлы? чем их открыть?
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
27.04.2019, 22:53
Это исходный код на C#. Открываются - любым текстовым редактором. Но как я и сказал, лучше открыть чем то вроде DotPeek-а, так вам легче будет в них разобраться.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
27.04.2019, 23:38  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
Это исходный код на C#
а паскаля нет случайно? ниразу просто C# не видил
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
27.04.2019, 23:43
Содержимое процедур и функции выглядит практически строчка - в строчку с паскалем (по крайней мере если писать в .Net стиле в паскале, вместо того говнокода что у вас обычно).

Но, я в вас верю, вы не раз доказывали что у вас мозги на достаточном уровне, чтоб в подобном разобраться))

И - я таким образом C# вообще изучил, декомпилируя программы написанные на паскале (DotPeek всегда переводит IL в C# при декомпиляции). Для багребортов время от времени надо было. Хотя хз можно ли сказать изучил, раз отличие от паскаля только в объявлении типов и их методов. А там изучать нечего.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
27.04.2019, 23:59  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
DotPeek
что-то он не открывает эти файлы

Добавлено через 1 минуту
О, а abc паскаль открыл
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
28.04.2019, 00:03
Цитата Сообщение от ololo111 Посмотреть сообщение
что-то он не открывает эти файлы
их надо не из папки открывать, а в нём в поиске забивать.

Или, лучше, сделайте .pas файл, такой:
Pascal
1
2
3
4
begin
  var hs := new HashSet<byte>;
  var d := new Dictionary<byte,word>;
end.
Откомпилируйте и удалите .pdb

Затем, киньте полученный .exe в DotPeek, откройте декомпилированный файл основной программы, зажмите Ctrl и тыкните на HashSet или Dictionary. Вот я именно так получил исходники которые кинул вам.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
28.04.2019, 16:58  [ТС]
получается если у меня список слов, то мне надо каждое слово списка перевести в числовой вид через 'Val' процедуру, а полученные значения записать в массив... потом эти числа из массива обработать по определённой формуле, и занести их в хэш-таблицу? или так же при вводе каждого слова сделать перевод в числовой вид через 'Val', и сразу же полученное значение обработать по формуле и записать в хэш-таблицу?

Добавлено через 35 секунд
пока у меня только такая идея, и я не знаю правильно это или нет...

Добавлено через 21 минуту
чё-то не то

Добавлено через 1 минуту
в паскале можно вообще слово из букв перевести в цифровое значение?

Добавлено через 2 минуты
код каждой буквы слова сложить, и вывести их сумму например

Добавлено через 5 минут
или можно сразу взять введённое слово и пустить его по формуле?
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,254
28.04.2019, 17:01
Цитата Сообщение от ololo111 Посмотреть сообщение
через 'Val'
можно и через
Pascal
1
i := StrToInt(s); // Строку в целое число
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
28.04.2019, 17:11  [ТС]
Ошибка времени выполнения: Входная строка имела неверный формат.
Pascal
1
2
Readln(Y);  
      i:=StrToInt(Y);
Y - у меня слово типа string.... i - integer...
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
28.04.2019, 18:33
Цитата Сообщение от ololo111 Посмотреть сообщение
получается если у меня список слов, то мне надо каждое слово списка перевести в числовой вид через 'Val' процедуру
А .GetHashCode для кого? Он же уже готовый. А строку содержащую что то кроме цифр, или слишком длинную - в число вы не переведёте.

Цитата Сообщение от Пс Посмотреть сообщение
можно и через
Если уже говорить про то как правильно - то i := s.ToInteger;

ololo111, а вы вообще можете и HashSet использовать, вместо создания велосипедов.

Добавлено через 13 минут
Цитата Сообщение от Sun Serega Посмотреть сообщение
А строку содержащую что то кроме цифр, или слишком длинную - в число вы не переведёте.
С помощью встроенных читалок числа из строки*
Но вы правильно придумали:
Цитата Сообщение от ololo111 Посмотреть сообщение
код каждой буквы слова сложить, и вывести их сумму например
Идея хорошая, пример ужасный. Коды букв надо не складывать а проводить специальные математические операции, иначе бакеты будут неравномерно заполнятся. Но, как я и сказал ранее - тут уже надо читать сухие тексты, про то, как вычислять хеш-код, так чтоб он был хорошим.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
28.04.2019, 20:21  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
можете и HashSet использовать, вместо создания велосипедов
да мне как раз и надо создать велосипед, причём с минимальными коллизиями

Добавлено через 21 минуту
получается мне надо взять отдельно каждый символ введённого имени, перевести его в код символа, можно и сложить, и потом по этой формуле из экселя =(A1*0,61-ЦЕЛОЕ(A1*0,61))*100 перевести в хэш-таблицу....
только мне досихпор про хэш не ясно, это как отдельный список с зашифрованными данными идёт? или как массив

Добавлено через 19 минут
Pascal
1
2
3
4
5
6
7
8
9
10
function Code(const Y: String): integer;
var
  i: integer;
begin;
  Result:=0;
  for i:=0 to Length(Y)-1 do begin;
    Result:=(Result+ord(Y[i+1]));
    end;
 writeln(Result);
  end;
Введите имя: пика
4321

как-то так?

Добавлено через 17 минут
Pascal
1
2
3
4
5
6
7
8
9
10
11
function Hash(const Y: String): real;
var
  i: integer;
begin;
  Result:=0;
  for i:=0 to Length(Y)-1 do begin;
    Result:=(Result+ord(Y[i+1]));
    end;
   Result:=Round((Result*0.61-Int(Result*0.61))*100);
 writeln(Result);
  end;
Введите имя: Анон
56

О, теперь по моей формуле кодирует, как и требовал препод, хэш из 2х значного целого числа

Добавлено через 2 минуты
только у меня результат с каждым именем перезаписывается и не заносится в хэш таблицу, да?

Добавлено через 57 минут
ладно, хватит на сегодня, а то уже голова болит....
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
28.04.2019, 20:29
Цитата Сообщение от ololo111 Посмотреть сообщение
const Y: String
зачеееееееем. вы с вашим const создаёте ссылку на ссылку, делая доступ к символам в 2 раза медленнее.

Цитата Сообщение от ololo111 Посмотреть сообщение
ord(Y[i+1])
ord медленно работает. Замените на word.
1
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,254
28.04.2019, 21:00
ololo111,
Цитата Сообщение от ololo111 Посмотреть сообщение
Ошибка времени выполнения: Входная строка имела неверный формат.
PascalВыделить код
1
2
Readln(Y); *
* * * i:=StrToInt(Y);
Y - у меня слово типа string.... i - integer...
ну конечно он не сработает.
Например:
Pascal
1
2
3
4
5
6
7
8
var
  s: string := '4';
  i: integer := 5;
 
begin
  writeln(s + i);  //Вывод: 45
  writeln(s.ToInteger + i);  //Вывод: 9
end.
1
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
28.04.2019, 23:32  [ТС]
Цитата Сообщение от Пс Посмотреть сообщение
ну конечно он не сработает.
Например:
оно только числа считывает, ясно
0
257 / 149 / 70
Регистрация: 29.07.2018
Сообщений: 1,254
29.04.2019, 07:10
ololo111, Да
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
29.04.2019, 19:55  [ТС]
ребят, а как саму хэш-таблицу создавать? просто делать обычный массив, и заносить в него все коды хэша?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.04.2019, 19:55

Добавление сортировки
дана задача, основное написанно но нет сортировки... Разработать программу формирования ведомости об успеваемости студентов. Каждая...

Добавление времени сортировки
Доброго времени суток. Я начинающий. Столкнулся с проблемой, не могу разобраться никак со вставкой таймеров. Мне необходимо вставить время...

Добавление сортировки в готовый код
Здрасвтвуйте. Помогите пожалуйста. Нужно сформированный массив перед выводом на экран упорядочить по возрастанию. program lab3a; ...

Добавление кнопки сортировки в проект
Помогите добавить кнопку сортировки в проект, которая будет сортировать фамилии абонентов в алфавитном порядке. Заранее спасибо.

Добавление флага в алгоритм сортировки способом пузырька (С++)
Всем добрый вечер. Помогите пожалуйста добавить флажок в этот алгоритм. Идея – если при выполнении метода пузырька не было обменов,...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru