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

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

03.04.2019, 21:50. Показов 3701. Ответов 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
2356 / 1459 / 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
2356 / 1459 / 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
2356 / 1459 / 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
2356 / 1459 / 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
2356 / 1459 / 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
2356 / 1459 / 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
2356 / 1459 / 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
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru