Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 171
от 19.05.2006, 22:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 184, Экспертов: 45
В номере:Вопросов: 1, Ответов: 4


Вопрос № 43036: Добрый день эксперты. Вот надо мне с файла считать числа. Количество неизвестно. Я так думая что надо както с динамической памятью, но как?...

Вопрос № 43.036
Добрый день эксперты. Вот надо мне с файла считать числа. Количество неизвестно. Я так думая что надо както с динамической памятью, но как?
Отправлен: 14.05.2006, 22:23
Вопрос задал: OlegMA (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, OlegMA!
Смотря что Вам нужно с этими числами сделать. Если Вам просто нужно просуммировать эти числа или сделать еще какие-то операции со всеми (или некоторыми) числами по очереди, то можно обойтись и без динамических переменных, если же Вам нужно одновременное присутствие всех чисел в памяти, то тут уже без динамических переменных не обойтись.
Если у вас первый случай, то можно просто считывать числа в одну и ту же переменную по очереди. (см. в приложении Пример №1)
Если же второй случай, то можно почитать тут:
http://algolist.manual.ru/ds/basic/simple_list.php
Или найти информацию по стеку или очереди.

Приложение:

---------
Ответы на все вопросы - на сайте www.ya.ru :)

Ответ отправил: Устинов Сергей Евгеньевич (статус: 9-ый класс)
Ответ отправлен: 14.05.2006, 23:05

Отвечает: Сухомлин Кирилл Владимирович
Можно использовать готовые динамические массивы.
В Delphi, например, можно написать:
var a: array of integer;
...
SetLength(a, 10);
Вообще, выделение памяти - вещь дорогостоящая по производительности, поэтому лучше изменять размеры не каждый раз, а реже:
var
a: array of integer;
a_num: integer;
...
if (Length(a) - 1 = a_num) then SetLength(a, a_num + 10);
А если имеется ввиду обычный Pascal, то даже там должны быть какие-то классы типа TDynamicArray - ищите по хелпе. Тем более, что это немного удобней, чем стек.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: 4-ый класс)
Ответ отправлен: 15.05.2006, 01:14

Отвечает: Форсман Павел Вячеславович
Здравствуйте, OlegMA!
Пожалуйста,уточните вопрос!!!
Дело в том, что в любом случае число считываемых элементов будет конечным. В динамическую память возможно чтение с помощью односвязного (линейного/циклического) и двусвязного списков.
Более сложные динамические структуры, как мне кажется нет смысла описывать, т. к. речь идет всего об одном файле (предполагаю однородный типизированный, но можно переработать алгоритм и для текстового типа файла).
Самое главное - не забудьте по окончании работы разрушить список.
Решение, которое я вам предлагаю, расчитано на чтение чисел типа Integer из файла в односвязный линейный список. При необходимости вместо типа Integer можно применить любой другой тип данных, приемлемый для использования в качетстве структурной единицы типизированного файла.
На этом спешу откланяться, смотрите приложение, - если есть дополнительные вопросы - буду рад ответить.
С уважением П. В. Форсман.

Приложение:

---------
Научить нельзя, но можно попробовать научиться!!!

Ответ отправил: Форсман Павел Вячеславович (статус: 1-ый класс)
Ответ отправлен: 15.05.2006, 23:19

Отвечает: [PROnet] * St@cK ! N.Nov
Здравствуйте, OlegMA!
Полностью согламен с тем, что коллисество чисел будет конечным.
Я предпочитаю пользоваться стеками , очередями и тп, поскольку это экономит память,
если нада - обращайтесь, могу предоставить подробную инфу с описанием всех библиотек
(естественно с кодами модулей).
---------
Семь бед - один ответ: RESET !!!
Ответ отправил: [PROnet] * St@cK ! N.Nov (статус: 1-ый класс)
Ответ отправлен: 16.05.2006, 23:01


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.32 от 03.05.2006
Яндекс Rambler's Top100

В избранное