Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Битовый массив, а точнее его объявление... 
:(
    Опции темы
Coder
Дата 23.12.2004, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: нет
Всего: 11



в книге "Жемчужины программирования" (Джон Бентли) описывается идея сортировки неповторяющихся чисел битовым массивом. Предлагается отсортировать телефонные номера США.
Так вот в задаче говорится что на вход поступают положителяные целые числа не превышающие N=10^7. Так вот, как я понимаю, по идее битовой сортировки, необходимо объявить массив типа TBit (0..1) диапозона [Nmin..N]. (например массив для сортировки номеров для моего города имеет вид [30000..49999]). Компилятор (BP 7) не признает числа 10^7. Как быть?
И еще постоянно говорится про неограниченную опереративную память. Я пробовал использовать динамическую, но результат один - ошибка. Может кто сталкивался с проблеммой объявления больших массивов, подскажите пожалуйста (если можно с кодом на Pascal`e). Или посоветуйте каким Pascal компилятором пользоватся, если это из-за него.
PM MAIL   Вверх
Петрович
Дата 23.12.2004, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: нет
Всего: 55



Цитата(Coder @ 23.12.2004, 14:35)
Компилятор (BP 7) не признает числа 10^7. Как быть?

Что значит не признает? Проблема именно с '10^7' или с '9999999'?
Если с последним, то используй тип Longint. Если с первым, то естественно, это ведь не число а выражение с операцией возведения в степень (^) которой нет в Pascal'е.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Coder
Дата 24.12.2004, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: нет
Всего: 11



Я имел в виду "99999...". так как объявить такой массив, далаю так
Код

Const
 n = 10000000; { 10^7 }
type
 TBit = 0..1;  
var
 m : array[1...N] of TBit;


выдает ошибку 23 (Ordinal type expected). так вот как с ней бороться?
PM MAIL   Вверх
chaos
Дата 24.12.2004, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



я делаю обычно так(правда на делфи)
Код

var
 n: Integer;
 dMas: array of Byte;

begin
 readLn(N);
 SetLength(dMas, N);
 ...........................
 Finalize(dMas);
end.
 

Добавлено @ 16:22
А почему бы не использовать действительно БИТОВЫЙ массив:
Код

var
 Bitmap: array [0..999] of Byte;

вот допустим так мы получим 8000 бит и обращатся к каждому через and
Код

function getStateBit(n: Integer): boolean;
var a,b: Byte;
begin
 a:= Bitmap[n div 8];
 b:= n-(n div 8);
 if ((a shl b) and 1) = 0 then getStateBit:= false else getStateBit:=true;
end;



Это сообщение отредактировал(а) chaos - 24.12.2004, 16:30
PM WWW   Вверх
Coder
Дата 25.12.2004, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: нет
Всего: 11



хм... попробуем...
PM MAIL   Вверх
ovr2000
Дата 28.12.2004, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 30.11.2004

Репутация: нет
Всего: нет



Паскаль по умолчанию перечисление конвертит в integer
Посчитаем кол-во памяти 10 млн*2=20Мбайт, не говоря о том, что массив в принипе ограничен 16-битной ссылкой
Т.е. массив должен быть не более 64 кбайта (а не 64к элементов)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0419 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.