Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2014, 20:57   #1
crancv
 
Регистрация: 12.02.2014
Сообщений: 9
По умолчанию Массив записей

Доброе время.
Есть массив записей :

type Resurses=record
Index:byte;
Kol_vo:uint64;
end;

Massive:array[0..255] of Resurses;

Index - содержат значения от 0 до 255; Допустим это ASCII коды.
Kol_vo - содержат различные значения от 1000 до 10000 обозначающие какое количество соответствующих ASCII кодов содержится в файле ;

Как отсортировать массив (значения Kol_vo) , чтобы значения массива расположились в порядке убывания.
!!!!! Но таким образом, чтобы значения элементов Index тоже отсортировались в соответствии с элементами Kol_vo. !!!!!

Чтобы
было так:
Index Kol_vo
0 15
1 12
2 13
3 20
4 22
5 11

Стало так:
Index Kol_vo
4 22
3 20
0 15
2 13
1 12
5 11
crancv вне форума Ответить с цитированием
Старый 12.02.2014, 21:07   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Index - поле записи. Если сортируете массив по любому полю значения другого поля поменяют свои места вместе с записями, к которым они относятся.
То есть если Вы отсортируете массив по полю Kol_vo, то нужный результат должен быть достигнут без применения дополнительных операций.
Streletz вне форума Ответить с цитированием
Старый 13.02.2014, 06:35   #3
crancv
 
Регистрация: 12.02.2014
Сообщений: 9
По умолчанию

Хорошо, спасибо.Экспериментирую.
Подскажите, пожалуйста, как теперь записать этот массив записей в текстовый файл по убыванию значений Kol_vo.
Таким образом, чтобы сначала слева стояло значение поля Index, а потом, через табуляцию значение поля Kol_vo.

И будьте любезны, как программно высчитать величину энтропии ?
crancv вне форума Ответить с цитированием
Старый 13.02.2014, 07:24   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Подскажите, пожалуйста, как теперь записать этот массив записей в текстовый файл по убыванию значений Kol_vo.
Если отсортировали массив по убыванию, то последовательно обходите массив и пишите в файл строки вида Index Kol_vo. Между значениями полей вставляйте символ табуляции.
В помощь:
Работа с текстовыми файлами
Цитата:
как программно высчитать величину энтропии
Вот пример.
Streletz вне форума Ответить с цитированием
Старый 13.02.2014, 10:54   #5
crancv
 
Регистрация: 12.02.2014
Сообщений: 9
По умолчанию

Спасибо. Суть проблемы в том, что при записи в файл при помощи
for i:=0 to 255 do массив в самом файле оказывается сортированным по полю Index,
т.е. не так как надо. Может посоветуете каким циклом воспользоваться ?
crancv вне форума Ответить с цитированием
Старый 13.02.2014, 11:44   #6
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Суть проблемы в том, что при записи в файл при помощи
for i:=0 to 255 do массив в самом файле оказывается сортированным по полю Index т.е. не так как надо.
Скорее всего, Вы делаете перебор элементов в массиве именно по полю Index, а не по номеру элемента. Обращайтесь к номеру элемента в массиве, а не к полю записи.
Streletz вне форума Ответить с цитированием
Старый 13.02.2014, 22:38   #7
crancv
 
Регистрация: 12.02.2014
Сообщений: 9
По умолчанию

Спасибо, с сортировкой удалось справиться. Но...
Получается что при сортировке записи её поля сортируются независимо друг от друга ???
Вот часть кода :
Код:
uses Utils,Crt;
type Resurses=record
Index:byte;
Kol_vo:uint64;
end;
Massive:array[0..255] of Resurses;

Сортировка :
//Пробуем сортировать массив
for i:=0 to 254 do
for j:=i+1 to 255 do
if (Massive[j].Kol_vo>Massive[i].Kol_vo) then
begin
tmp:=Massive[i].Kol_vo;
Massive[i].Kol_vo:=Massive[j].Kol_vo;
Massive[j].Kol_vo:=tmp;
//Добавлен код для сортировки номеров Index.
tmp:=Massive[i].Index;
Massive[i].Index:=Massive[j].Index;
Massive[j].Index:=tmp;
end;
До тех пор пока не добавил сортировку поля Index в файл записывалось совсем не то что надо.
А это фрагмент записи в файл :
Код:
for i:=0 to 255 do
writeln(Output,Massive[i].Index,chr(9),Massive[i].Kol_vo/Lenght);
Надеюсь сейчас правильно ???

Последний раз редактировалось Stilet; 13.02.2014 в 22:53.
crancv вне форума Ответить с цитированием
Старый 13.02.2014, 23:43   #8
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Надеюсь сейчас правильно ???
В каком смысле правильно? Если в смысле корректности, то это можно относительно достоверно узнать, только протестировав программу. Если результаты её работы соответствуют Вашим требованиям, то можно считать что она работает правильно.

Последний раз редактировалось Streletz; 14.02.2014 в 09:55.
Streletz вне форума Ответить с цитированием
Старый 14.02.2014, 06:46   #9
crancv
 
Регистрация: 12.02.2014
Сообщений: 9
По умолчанию

Спасибо. Это я уже для внутреннего успокоения.
Сейчас пытаюсь разобраться что такое энтропия и как ее высчитать.
crancv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив записей. Rakot568 Помощь студентам 1 25.05.2013 11:49
массив записей cat_gav Общие вопросы C/C++ 0 09.12.2012 16:58
Создать массив записей в соответствии с заданной структурой. Количество записей не больше 10. zulja Паскаль, Turbo Pascal, PascalABC.NET 0 21.05.2012 07:50
Массив записей. GripEnemy Visual C++ 0 05.12.2011 22:34
массив записей qwerty98765 Помощь студентам 3 27.04.2010 19:07