Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массивы более 64 кБ 
:(
    Опции темы
Джесси
Дата 3.9.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте! Помогите пожалуйста!
Как мне решить такую задачу: необходимо создать массив, содержащий 2 миллиона чисел типа integer . Скажите это реально? smile 
PM MAIL   Вверх
Alexeis
Дата 3.9.2006, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Джесси, на каком паскале? (компилятор)
Под Windows это и так должно получатся, под дос гораздо сложнее, поскольку программа написанная под дос не может превышать 640кб в реальном режиме. А вот если перейти в защищеный режим и использовать драйвер верхней памяти, то можно. Но тоже будет заморочка, поскольку к данным массива придется обращатся через "окно" в 64кБ. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Джесси
Дата 4.9.2006, 06:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня Паскаль версия 7.1. Можно хоть какой-то намек на решение моей проблемы? smile 
PM MAIL   Вверх
albertn
Дата 4.9.2006, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Джесси @ 4.9.2006,  06:06)
У меня Паскаль версия 7.1. Можно хоть какой-то намек на решение моей проблемы? smile

Есть вариант использовать файлы. Если время не критично, то может помочь.
PM WWW ICQ   Вверх
Alexeis
Дата 4.9.2006, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Джесси @  4.9.2006,  06:06 Найти цитируемый пост)
У меня Паскаль версия 7.1
 Turbo Pascal 7.1 или Borland Pascal 7.1?

Это сообщение отредактировал(а) alexeis1 - 4.9.2006, 09:00


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Джесси
Дата 4.9.2006, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Turbo Pascal 7.1. А если через файлы, то как? Все равно ведь при описании массива нужно указывать размер... smile 
PM MAIL   Вверх
Snowy
Дата 4.9.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Создай файл нужного размера.
Размер файла = кол-во элементов * SizeOf(integer)
PM MAIL   Вверх
Alexeis
Дата 4.9.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



тогда в памяти это невозможно, а с файлом просто можно написать фукции типа
Код не проверял но думаю смысл понятен
Код

type 
  Tfilearray = record
                  f : file of integer;
                  name : String;
                  initialized : boolean
                end;

var
  mas1 : Tfilearray;

procedure Initfilearray(var mas : Tfilearray; filename : String);
begin
  mas.name :=  filename;
  assign(mas.f,  filename);
  Rewrite(f);
  initialized := true;
end;

procedure Closefilearray(var mas : Tfilearray);
begin
  Close(mas.f);
  erase(mas.f);
  initialized := false;
end;

function getInteger(var mas : Tfilearray; index : integer) : Integer;
var
  t : integer;
begin
   seek(mas.f, index);
   read(mas.f, t);
   getInteger := t;
end;

procedure setInteger(var mas : Tfilearray; index : integer; value : Integer);
begin
   seek(mas.f, index);
   write(mas.f,  value);
end;

Begin
 Initfilearray(mas1, 'mas.tmp');
 setInteger(mas1, 2, 16);
 Closefilearray(mas1);
end;


Это сообщение отредактировал(а) alexeis1 - 4.9.2006, 17:10


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Джесси
Дата 4.9.2006, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мне компилятор выдает: Error 102: File not assigned. Может я что-то не так понимаю. И еще я запуталась: где в программе используется функция Getinteger?  smile 
PM MAIL   Вверх
dumb
Дата 4.9.2006, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Джесси, а скажи пожалуйста, зачем тебе 2М int'ов?

alexeis1 тебе привел лишь пример использования этих функций - использовать их должна уже ты.
PM MAIL   Вверх
Джесси
Дата 4.9.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Уж поймите меня правильно. Мне поставили задачу и я должна в ней разобраться и выполнить. А спросить что-то не у кого. Поэтому я обратилась к вам. Объясните пожалуйста, почему та программа не создает файл? В функции я разобралась, что там к чему. Вот только с файлом как-то не очень понятно... Уж простите меня за назойливость, но мне больше не к кому обратиться...  smile 
PM MAIL   Вверх
Alexeis
Дата 4.9.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Нашел старичка BP7.0 smile  и вот что у меня получилось
Код

program mas;
uses crt;
type
  Tfilearray = record
                  f : file of integer;
                  name : String;
                  initialized : boolean
                end;

var
  mas1 : Tfilearray; {переменная масива}
  int  : longint;
  i    : longint;

procedure Initfilearray(var mas : Tfilearray; filename : String);
begin
  mas.name :=  filename;
  assign(mas.f,  filename);
  Rewrite(mas.f);                    {создаем файл}
  mas.initialized := true;
end;

procedure Closefilearray(var mas : Tfilearray);
begin
  Close(mas.f);        {закрываем файл}
  erase(mas.f);        {удаляем файл}
  mas.initialized := false;
end;

function getInteger(var mas : Tfilearray; index : longint) : Integer;
var
  t : integer;
begin
   seek(mas.f, index); {смещаемся к нужному элементу}
   read(mas.f, t);         {читаем его из файла}
   getInteger := t;
end;

procedure setInteger(var mas : Tfilearray; index : longint; value : Integer);
begin
   seek(mas.f, index);
   write(mas.f,  value); {записываем его в файл}
end;

Begin
 clrscr;
 int := 0;
 Initfilearray(mas1, 'mas.tmp');
 for i := 1000000 to 1200000
 do
   setInteger(mas1, i, i mod 32000); {заполняем массив некоторыми числами}

 for i := 1199900 to 1200000
 do
   begin
     int := GetInteger(mas1, i); {считываем сотню чисел из массива}
     writeln('value is ',int);    {выводим их на экран}
   end;

 Closefilearray(mas1); {удаляем файл и уничтожаем массив}
 readkey; {ждем нажатия любой клавиши}
end.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Джесси
Дата 4.9.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за подсказку! Кажется я поняла. smile  Если возникнут проблемы мне можно будет еще раз к вам обратиться?
PM MAIL   Вверх
Alexeis
Дата 4.9.2006, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Конечно, для этого форум и существует.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

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

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


 




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


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

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