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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 08.03.2009, 11:49   #1
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
Вопрос Проблема ограниченности переменных в Паскале

При создании программ, работающих с большим количеством данных возникает одна проблема: вмещаемость переменных.
К примеру Integer имеет максимальное число 65535 ; String вмещает максимум 254 символа, а массив, состоящий из String вмещает максимум 254 ячейки.
Я где то слышал, что размер можно увеличить используя HEAP- память.
Помогите...........
Вадим Буренков вне форума
Старый 08.03.2009, 12:42   #2
Викдон
Форумчанин
 
Аватар для Викдон
 
Регистрация: 11.11.2008
Сообщений: 161
По умолчанию

Использовать динамическую память..., она выделяется в процессе выполнения программы.
Викдон вне форума
Старый 08.03.2009, 12:59   #3
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

А как именно? Пример можешь привести?
Вадим Буренков вне форума
Старый 08.03.2009, 13:17   #4
Викдон
Форумчанин
 
Аватар для Викдон
 
Регистрация: 11.11.2008
Сообщений: 161
По умолчанию

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

Почитай "Указатели"
К примеру вот

Код:
var a:^integer;
 begin
   new(a);
   a^:=4;
 end.
var a:^integer; {a-будет содержать адрес ячейки в динамической памяти в которой будет хранится челочисленной значение}

Но это просто объявление!! Компилятор еще не выделил под наш указатель участок в памяти.

new(a); {здесь функция new выделяет память и записывает адрес этого участка памяти в указатель а}

теперь указатель а содержит адрес участка памяти..

а^- операция разыменования, т.е мы обращаемся к значению на которое указывает а.

a^:=4;-здесь мы "кладем" значение 4 в нашу ячейку на которую указывает а.

Последний раз редактировалось Викдон; 08.03.2009 в 13:19.
Викдон вне форума
Старый 10.03.2009, 10:07   #5
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Цитата:
Сообщение от Вадим Буренков Посмотреть сообщение
При создании программ, работающих с большим количеством данных возникает одна проблема: вмещаемость переменных.
К примеру Integer имеет максимальное число 65535
32767.
Если нужно больше, есть 32битный LongInt. Если нужно ещё больше, есть 64битный Comp, но я не уверен, что он работает корректно. Comp вроде как считается 64битным целым числом, но операции над ним происходят в сопроцессоре, а в сопроцессоре все числа с плавающей запятой, может получаться погрешность. А может и не получаться. Так или иначе, переменные типа Comp нельзя использовать в качестве индексов массивов, в циклах for.

Цитата:
Сообщение от Вадим Буренков Посмотреть сообщение
String вмещает максимум 254 символа
255.

Цитата:
Сообщение от Вадим Буренков Посмотреть сообщение
Я где то слышал, что размер можно увеличить используя HEAP- память.
Помогите...........
Есть тип данных PChar, аналогичный сишному char*. Есть модуль Strings, содержащий функции для манипуляции этими строками.
Пользоваться ими неудобно, нужно вручную контроллировать выделение памяти, следить, чтобы не было переполнений буфера.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума
Старый 10.03.2009, 10:09   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что размер можно увеличить используя HEAP- память.
Толку, то работать то придется с теми же типами.
Есть правда длинная арифметика, но я уверен что если автор задачу обьяснит найподробнейше, можно просто поменяв стратегию получить нужный результат, как делают все.
I'm learning to live...
Stilet вне форума
Старый 10.03.2009, 14:50   #7
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
Стрелка

Цитата:
Если нужно больше, есть 32битный LongInt.
Я знаю.
В данном случае моя программа открывает файл, и заносит в массив состоящий из 254 элементов типа String (если ставлю 255 пишет ошибку) строчки файла так, что каждый элемент вмещает строчку текста. Проблема в том, что если файл содержит более 254 строк, массива не хватает. Конечно можно создать матрицу (двумерный массив), и при переполнении записывать данные в следующий массив, но зто очень усложнит код в определенных местах программы.
Вадим Буренков вне форума
Старый 10.03.2009, 15:39   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
массив состоящий из 254 элементов
И как это отражается на:
Цитата:
что если файл содержит более 254 строк, массива не хватает?
Что размер массива побольше сделать не хочешь? - тогда буферизируй, или тупо не считывай все в массив, а просто скакай по файлу в поисках нужного элемента.
I'm learning to live...
Stilet вне форума
Старый 10.03.2009, 15:45   #9
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Что размер массива побольше сделать не хочешь?
Если делаю больше 254:
Error 96: Too many variables.
Цитата:
или тупо не считывай все в массив
Проблема в том, что все строки файла должны находиться в памяти.
Вадим Буренков вне форума
Старый 10.03.2009, 15:49   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Если делаю больше 254:
Error 96: Too many variables.
Не понял:
Код:
var a:array[1..10000] of string[254]
Все работает.
Цитата:
что все строки файла должны находиться в памяти.
Хозяин конечно барин, но это не всегда правильное решение.
I'm learning to live...
Stilet вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
здравствуйте, у меня проблема: мне надо решить задачки в паскале, а то допуска не бедет... =|винтик|= Паскаль, Turbo Pascal, PascalABC.NET 5 20.01.2009 18:09
Проблема с графикой в Паскале... bygoga Паскаль, Turbo Pascal, PascalABC.NET 3 20.12.2008 09:55
Срочно! Помогите построить СДНФ на Паскале число переменных задает пользователь stscolt Помощь студентам 1 21.04.2008 22:20
Проблема с масивом в Паскале SeRhy Помощь студентам 2 15.11.2007 20:54