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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2014, 18:53   #1
Nickolay0512
Пользователь
 
Регистрация: 26.10.2013
Сообщений: 54
По умолчанию Подскажите алгоритм решения

Здравствуйте. Вот задача
Дан файл, содержащий некоторый текст. В новый файл записать самую длинную фразу и фразу с наибольшим количеством слов.

Я написал программу, в которой считывал файл в массив символов и потом работал с ним. Преподаватель сказал, что плохо то, что содержимое файла целиком считывается в оперативную память. Это не всегда возможно!
Я решил написать без считывания в массив. И тут возникла проблема. Идей вообще нет. Может кто-нибудь подскажет как быть?

Примечание. Исходный файл к задаче может содержать как латинские, так и русские буквы, на одной строке может находиться несколько фраз, возможно продолжение фразы на следующей строке. Фразы отделяются друг от друга точками, а слова – пробелами и знаками препинания. Последняя фраза в файле может быть без точки в конце.
Nickolay0512 вне форума Ответить с цитированием
Старый 07.10.2014, 20:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Преподаватель сказал, что плохо то, что содержимое файла целиком считывается в оперативную память. Это не всегда возможно!
А что преподаватель расчитывает на 200Гб-айтный файл?
Цитата:
И тут возникла проблема. Идей вообще нет. Может кто-нибудь подскажет как быть?
Создай массив целых чисел. В них записывай позиции символов разделителей фраз (точка полагаю) вместо считывания символов. Короче - сделай карту файла.
А потом по необходимости будешь определять расстояние от одной точки до другой с помошью этого массива и... Соответственно считывать в некий массив, который будешь анализировать на слова.
Массив может быть динамический.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.10.2014, 20:52   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Читаем файл небольшими блоками ищем в блоке конец строки.
Если нет, добавляем весь блок в рабочую строку.
Если есть, добавляем только до конца строки. Потом проверяем - считаем длину строки, количество слов и т.д., если результаты лучше сохраняем строку и счетчики. Сбрасываем рабочую строку (в которую добавляли из буфера) и начинаем по новой, не забывая обработать остаток текста в буфере.

Не идеальный вариант, поскольку требует хранения строк в памяти - можно обойтись вообще без этого.
waleri вне форума Ответить с цитированием
Старый 07.10.2014, 21:01   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Преподаватель сказал, что плохо то, что содержимое файла целиком считывается в оперативную память. Это не всегда возможно!
препод - аццкий тролль! Сделай через mapviewoffile(), затроль препода полностью!
Цитата:
Я решил написать без считывания в массив. И тут возникла проблема.
какая?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.10.2014, 21:06   #5
Nickolay0512
Пользователь
 
Регистрация: 26.10.2013
Сообщений: 54
По умолчанию

Спросил препода. Он имел ввиду, что нельзя читать в строку весь файл, а только одно предложение)
Nickolay0512 вне форума Ответить с цитированием
Старый 07.10.2014, 21:25   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Он имел ввиду, что нельзя читать в строку весь файл, а только одно предложение)
Он гонит! Можно прочитать весь файл. Так ему и передай.
Или пусть докажет обратное - даст файл, содержащий больше одного предложения, из которого нельзя прочитать два предложения.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.10.2014, 21:26   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
даст файл, из которого нельзя прочитать два предложения.
Легко - файл нулевого размера )
Мы так троллили преподов в универе.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.10.2014, 21:45   #8
Nickolay0512
Пользователь
 
Регистрация: 26.10.2013
Сообщений: 54
По умолчанию

имеется ввиду, что в данной задаче так делать нельзя (это просто его прихоть))
Nickolay0512 вне форума Ответить с цитированием
Старый 07.10.2014, 21:49   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Ну читай побайтно тогда, до точки или eof. По-дебильному, конечно, пусть подавится. В реальной работе никогда так не делай. Вот, к примеру, Чикатило так делал. И что? Представь себе - ресстреляли! И поделом!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.10.2014, 21:58   #10
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Нормальная тема, нормальное задание, нормальное ограничение от препода, так что не нужно никого троллить. Прочитали себе фразу из файла, померили длину и количество слов, запомнили. Прочитали следующую фразу, опять померили, если она длиннее или количество слов в ней больше, то её запомнили, а предыдущую фразу выкинули нафиг за ненадобностью. И так весь файл. Память нужно под 3 фразы:
1) Текущая читаемая из файла
2) Самая длинная
3) Самая многословная
и пофиг какого там размера файл и пофиг, что современные компы и гиговый файл слопают за раз, это обучение и тут нет места такому занудству
pu4koff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм решения задачи snpccvs Помощь студентам 8 13.02.2012 22:50
Подскажите пожалуйста алгорим решения savra Помощь студентам 2 21.10.2009 22:15
Алгоритм решения Naruto63 Помощь студентам 6 20.09.2009 22:47
подскажите варианты решения leozay Microsoft Office Excel 10 26.08.2009 21:24
Подскажите алгоритм решения Blad47 Паскаль, Turbo Pascal, PascalABC.NET 1 10.11.2008 19:50