Вопрос № 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 :)
Отвечает: Сухомлин Кирилл Владимирович
Можно использовать готовые динамические массивы.
В 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 - ищите по хелпе. Тем более, что это немного удобней, чем стек.
Отвечает: Форсман Павел Вячеславович
Здравствуйте, OlegMA!
Пожалуйста,уточните вопрос!!!
Дело в том, что в любом случае число считываемых элементов будет конечным. В динамическую память возможно чтение с помощью односвязного (линейного/циклического) и двусвязного списков.
Более сложные динамические структуры, как мне кажется нет смысла описывать, т. к. речь идет всего об одном файле (предполагаю однородный типизированный, но можно переработать алгоритм и для текстового типа файла).
Самое главное - не забудьте по окончании работы разрушить список.
Решение, которое я вам предлагаю, расчитано на чтение чисел типа Integer из файла в односвязный линейный список. При необходимости вместо типа Integer можно применить любой другой тип данных, приемлемый для использования в качетстве структурной единицы типизированного файла.
На этом спешу откланяться, смотрите приложение, - если есть дополнительные вопросы - буду рад ответить.
С уважением П. В. Форсман.
Приложение:
--------- Научить нельзя, но можно попробовать научиться!!!
Отвечает: [PROnet] * St@cK ! N.Nov
Здравствуйте, OlegMA!
Полностью согламен с тем, что коллисество чисел будет конечным.
Я предпочитаю пользоваться стеками , очередями и тп, поскольку это экономит память,
если нада - обращайтесь, могу предоставить подробную инфу с описанием всех библиотек
(естественно с кодами модулей).
--------- Семь бед - один ответ: RESET !!!
Ответ отправил: [PROnet] * St@cK ! N.Nov (статус: 1-ый класс)
Ответ отправлен: 16.05.2006, 23:01