![]() |
|
Модераторы: bsa |
![]()
|
|
| гостья |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 9.6.2008 Репутация: нет Всего: нет |
1.реализовать с использованием позиционирования указателя в текстовом файле и массива указателей, без загрузки самого текстового файла в память:
Программа ищет в тексте Си-программы самый внутренний блок (для простоты начало и конец блока располагаются в отдельных строчках), присваивает ему номер и " выкусывает" основного текста, заменяя его ссылкой на этот номер. Затем по заданному номеру блока производится его вывод на экран, в тексте блока при этом должна присутствовать строка вида " #БЛОК nnn" при наличии вложенного блока. (Процедуру " выкусывания" блоков рекомендуется реализовать при помощи " выкусывания" указателей на строки вложенного блока в файле и замене их на отрицательное число -n, где n-номер, присвоенный блоку). 2.Файл содержит односвязный список. Элемент списка содержит файловый указатель на следующий и строку - запись переменной длины. В начале файла - указатель на первый элемент списка. Реализовать функции просмотра списка и включения строки по номеру. (двоичные файлы) |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
гостья, что такое "выкусывание" я так и не понял. Такого термина нет.
А в остальном все относительно просто. Заводишь переменную "текущая глубина вложенности". Читаешь файл посимвольно (fgetc). Как только встречаешь символ '{' - добавляешь в список блоков новый блок, с указанием текущей глубины вложенности, а так же текущей позиции в файле (pos = fseek(f, 0, SEEK_CUR); ), и увеличиваешь текущую глубину вложенности... Когда встречаешь символ '}', то уменьшаешь текущую глубину вложенности и записываешь в поле "конец" последнего блока в списке текущую позицию в файле. Когда тебе надо вывести блок N, то берешь его из списка, перемещаешься в начало блока, которое ты сохранила, (fseek(f, pos, SEEK_SET) ), затем читаешь и выводишь на экран "конец" - pos + 1 символов... |
|||
|
||||
| гостья |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 9.6.2008 Репутация: нет Всего: нет |
bsa, "выкусывание" обозначает, что внутренний блок, должен быть удалён из основного текста. И не подскажешь, как заменить блок ссылкой на номер?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
гостья, скажи, как заменить три страницы книги на бумажку с указанием номеров этих страниц, без вырывания и добавления чего-либо в книгу?
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |