Файлы.Удаление отрицательного числа, В файле целых чисел, если перед положительным числом стоит отрицательн |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Файлы.Удаление отрицательного числа, В файле целых чисел, если перед положительным числом стоит отрицательн |
BSS |
21.03.2010 22:56
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Реальное имя: Серёга Репутация: 0 |
Помогите пожалуйста решить задачу:
В файле целых чисел, если перед положительным числом стоит отрицательное, то удалить это отрицательное число |
Ozzя |
22.03.2010 11:26
Сообщение
#2
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
Ну, сначала, наверное, прочитать литературу по этой теме, например тут - http://zeus.sai.msu.ru:7000/programming/bp70_lr/lr14.shtml#2
Затем, попробовать написать свой вариант. И, тогда, если будут какие-то непонятки. ;) Уже и спросить. |
BSS |
26.03.2010 1:37
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Реальное имя: Серёга Репутация: 0 |
Спасибо за полезную информацию, но хотелось бы видеть грамотное решение, чтобы его потом детально разобрать
|
volvo |
26.03.2010 2:40
Сообщение
#4
|
Гость |
Цитата хотелось бы видеть грамотное решение, чтобы его потом детально разобрать Да не надо тебе ничего разобрать, не болтай. Сдать тебе надо решение, вот и весь сказ... Я вон вижу, как ты изо всех решений, которые существуют в сети, выбрал самые бредовые для соседней темы (про Фибоначчи). Разобраться ему надо... Сейчас прям... Чего ж там не разбирался? Уж что-что, а тема чисел Фибоначчи замусолена так, что не найти грамотную рекурсивную реализацию может только слепой. |
BSS |
26.03.2010 3:13
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Реальное имя: Серёга Репутация: 0 |
Ткните пальцем
|
BSS |
18.04.2010 23:44
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Реальное имя: Серёга Репутация: 0 |
ну как реализовать проверку и удаление?
program p11; Сообщение отредактировано: BSS - 18.04.2010 23:45 |
Lapp |
19.04.2010 2:30
Сообщение
#7
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
ну как реализовать проверку и удаление? Заведи два файла: f1 и f2. Один для чтения, а во второй пиши по мере чтения (используй для него временное имя, типа 'file.tmp'). Когда встретится отрицательное перед положительным - пропускай запись. В конце удали входной файл, а временный переименуй в него. Можно это проделать и с одним файлом, но так проще.-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
BSS |
19.04.2010 8:27
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Реальное имя: Серёга Репутация: 0 |
Спасибо, но я не пойму, как мне в файле определить, что отрицательное число стоит перед положительным?
|
Ozzя |
19.04.2010 9:13
Сообщение
#9
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
reset(f); Проверено на последовательности: 0 -3 1 -2 1 0 -3 1 1 -3 Ответы: 1 1 То есть, найдены 3-й и предпоследний элементы. Возможные косяки ищите сами. Сообщение отредактировано: Ozzя - 19.04.2010 9:15 |
BSS |
19.04.2010 9:39
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Реальное имя: Серёга Репутация: 0 |
reset(f); Проверено на последовательности: 0 -3 1 -2 1 0 -3 1 1 -3 Ответы: 1 1 То есть, найдены 3-й и предпоследний элементы. Возможные косяки ищите сами. Спасибо |
TarasBer |
19.04.2010 10:13
Сообщение
#11
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Цитата Код while not eof(f) do begin seek(f,i); seek(f,i+1); ... inc(i) end Ну так-то уж не надо издеваться... -------------------- |
Ozzя |
19.04.2010 10:40
Сообщение
#12
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
Цитата Ну так-то уж не надо издеваться... А в каком месте издевательство? |
TarasBer |
19.04.2010 10:53
Сообщение
#13
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Файл - это кусок данных с последовательным доступом.
seek, насколько я знаю это ведь отнюдь не переход по массиву, особенно если файл фрагментирован. Хорошо, если запоминаются текущая и предыдущая позиции и они не вычисляются, но так ли это? Не скрыт ли тут алгоритм маляра? -------------------- |
Ozzя |
19.04.2010 11:48
Сообщение
#14
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
Исходное задание гласит:
Цитата В файле целых чисел Цитата Файл - это кусок данных с последовательным доступом. seek, насколько я знаю это ведь отнюдь не переход по массиву, особенно если файл фрагментирован. Литературу читать не пробовали? Тут, например: http://zeus.sai.msu.ru:7000/programming/bp70_lr/lr14.shtml#2 |
TarasBer |
19.04.2010 12:04
Сообщение
#15
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> Литературу читать не пробовали?
Пробовал, не помогает. > Однако к типизированным и нетипизированным файлам можно организовать прямой доступ с помощью стандартной процедуры Sееk, которая перемещает текущую позицию файла к заданному элементу. И чё? Я этого не знаю? Так вот, как выглядит этот самый процесс перемещения к заданному элементу для фрагментированного файла? Файл - это не кусок оперативной памяти, к которому сразу можно обратиться по адресу. -------------------- |
Ozzя |
19.04.2010 12:08
Сообщение
#16
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
Цитата Так вот, как выглядит этот самый процесс перемещения к заданному элементу для фрагментированного файла? А я откуда знаю? И Паскаль этого не знает. Точнее, ему это поровну. Вызывает соответствующую функцию ОС. Цитата Файл - это не кусок оперативной памяти, к которому сразу можно обратиться по адресу. К любой компоненте типизированного файла можно обратиться по её номеру. |
volvo |
19.04.2010 12:10
Сообщение
#17
|
Гость |
TarasBer, не бери на себя функции ОС, договорились? Это ее прерогатива, и она без тебя как-нибудь (получше, чем ты, поверь) разберется, как именно ей организовать переход к следующей записи файла. А то вот таких советов понаслушаются, и начинают писать "оптимизированные" программы. Которые потом, с выходом новой ФС, либо тормозят, либо вообще валятся. Потому что "то что было хорошо для FAT, для NTFS - смерть..." (почти С)
И не надо придумывать и додумывать задание. Там ничего не говорилось о степени фрагментированности файла и его размерах. Иначе я тебе дам вводную, при которой ты можешь даже и не пытаться решить эту задачу. Хочешь? Или поверишь на слово? |
TarasBer |
19.04.2010 13:33
Сообщение
#18
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> А я откуда знаю? И Паскаль этого не знает.
Тогда почему вы так уверены в том, что это достаточно эффективный метод? > К любой компоненте типизированного файла можно обратиться по её номеру. Это к массиву так можно, за несколько тактов. А к файлу? Я, знаешь ли, могу тоже самое сказать про связный список - типа к каждому его элементу можно обратиться по номеру. Ну да, можно, не спорю, но нужно ли? Файл по структуре к чему ближе - к массиву или к связному списку? Я не знаю. > TarasBer, не бери на себя функции ОС, договорились? А я не беру. И даже стараюсь использовать по минимуму. Просто я не понимаю, зачем каждый раз вызывать сложную операцию перехода к другой позиции. Меня не устраивает подход "работает же вроде, чё ещё надо", потому что с таким подходом надо идти на АвтоВАЗ работать. Я не знаю, как система делает переход к позиции, возможно, что разработчики системы посчитали лишним запоминать предыдущее положение, и каждый вызов Seek будет делать прогон всех фрагментов файла с самого начала, и я не знаю, работает ли Seek за O(1) или за O(n), я не хочу об этом думать. Я лучше отдельно запомню предыдущую переменную, и не буду думать про эти вещи. И я не знаю, как оно работает, и вы не знаете, но я не такой доверчивый. Я предпочитаю сначала узнать, что это за хрень и что и как она делает, а потом уже применять. -------------------- |
Lapp |
19.04.2010 19:53
Сообщение
#19
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Я в принципе согласен с Тарасом. Зачем постоянно позиционировать, если можно просто читать подряд и запоминать предыдущее значение?..
Read(f,i); Я что-то упускаю?.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
19.04.2010 21:52
Сообщение
#20
|
Гость |
Цитата Я что-то упускаю?.. Исходный файл:0, -3, 11, -2, 1, 0, -3, 10, 1, -3, 5 После прогона твоего алгоритма: Running "f:\programs\test.exe" Упускаешь... Я делал так (запись в файл заменена, для тестирования, на вывод на консоль): prev := -1; TarasBer, Цитата И я не знаю, как оно работает, и вы не знаете А что, Вам известно больше, чем мне о том, что знаю я? Я бы не стал говорить об этом. Я - не студент, который пользуется методичками преподавателей. У меня есть доступ и к более серьезной документации, работа такая...Цитата я не хочу об этом думать нельзя работать ВООБЩЕ нигде, Вам не кажется? Мое мнение о Вас РЕЗКО изменилось после таких заявлений. Больше в дискуссии с Вами я вступать не намерен. Не хотите - не думайте. Bye... |
Текстовая версия | 18.05.2024 5:28 |