IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Работа с файлами...
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской

Репутация: -  0  +


Короче задание такое: Создать файл, заполненный целочисленными яислами в диапозоне [-100;100]. Удалить из файла все положительные числа!

У меня короче получаеться вот что: ввожу например 5, т.е. это генирируется 5 чисел. И получается что действие происходит только над четными элементами файла(начиная с 0-го). Например есть числа -10 -11 10 10 -15, то в результате останеться -10 и -15, а -11 куда-то пропадает... помогите... что я только не перепробывал сделать - не получается!

program  _7_14;    
uses crt;
var f : file of integer;
i,n,a : integer;
begin clrscr;
randomize;
assign(f,'myfile.dat');
rewrite(f);
writeln('n=');
read(n);
for i:=1 to n do begin
a:=random(200)-100;
write(f,a);
end;
seek(f,0);
while not eof(f) do begin
read(f,a);
write(a,' ');
end;
seek(f,0);
while not eof(f) do begin
read(f,a);
if a>0 then seek(f,filepos(f)+1)
else begin
write(f,a);
writeln(a,' ');
end;
end;
end. close(f);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
И получается что действие происходит только над четными элементами файла(начиная с 0-го)
Угу... А почему - сам виноват:
while not eof(f) do begin
read(f,a);
if a>0 then seek(f,filepos(f)+1) { <--- Вот тут ошибка }
else begin
write(f,a);
writeln(a,' ');
end;
end;

(ты уже прочел число из файла, значит указатель передвинулся на следующий элемент автоматически. Зачем ты передвигаешь его еще дальше? Ну, и потом... Тебе надо не напечатать все числа, кроме положительных, а удалить положительные из файла. Этого ты даже не пытаешься сделать... А нужно для этого всего навсего завести еще одну переменную LastNeg, которая будет хранить смещение последнего правильного НЕположительного числа в файле. Идешь дальше, как только встретил очередное отрицательное - записал его на эту, сохраненную позицию и увеличил ее на 1... А в самом конце - Truncate(LastNeg), чтобы отсечь все лишнее)

Кстати, у тебя файл не закрывается... Предпоследнего End-а не должно быть...

Добавлено через 1 мин.
Цитата
Мне кажется,тут лучше использовать тип text.
С чего бы? Чтоб места занимал больше? Или потому что кто-то не умеет работать с ДРУГИМИ файлами? Мне вот вообще кажется, что на другом языке эта задача решается проще, и что? Это не повод советовать автору писать не на Паскале...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 58
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 26.11.2008 23:19) *

завести еще одну переменную LastNeg, которая будет хранить смещение последнего правильного НЕположительного числа в файле.

что-то я вот это предложение не понял=)) особенно " хранить смещение последнего правильного НЕположительного числа в файле"....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Akella   Работа с файлами...   26.11.2008 19:58
Unconnected   Мне кажется,тут лучше использовать тип text.   26.11.2008 20:18
volvo   Угу... А почему - сам виноват: while not eof(f) do…   26.11.2008 20:19
Akella   завести еще одну переменную LastNeg, которая буд…   26.11.2008 20:37
volvo   Смотри: { ... заполнил файл ... } reset(f); { Пер…   26.11.2008 21:24
Akella   огромное спасибо, все понятно мне разжевали....   29.11.2008 19:39
Akella   а как мне посчитать конечную сумму получившихся ци…   2.12.2008 15:52
volvo   Каких цифр? У тебя нет никаких цифр, у тебя есть ч…   2.12.2008 16:04
Akella   мне надо посчитать сумму кодов, которыми зашифрова…   2.12.2008 16:10
volvo   Повторяю: числа не зашифрованы ничем. Это просто п…   2.12.2008 16:23
Akella   ВОТ задание так в карточки написано: Найти конечн…   2.12.2008 16:32
volvo   От тебя, как видно, хотят, чтобы ты научился работ…   2.12.2008 16:41
Akella   я так делал, но у меня ошибка 200... что это такое…   2.12.2008 16:42
Ozzя   Help (Ctrl + F1) по слову blockread Вам окажет нео…   2.12.2008 16:52
Akella   Помогите сделать похожую задачу, все тоже самое то…   16.12.2008 18:19
volvo   Значит, что-то начал делать? Можно посмотреть, как…   16.12.2008 18:49
Akella   прога зависала из-за условия, потому что оно зацик…   16.12.2008 18:56
volvo   Akella, смотри как это делается: var f: file of …   16.12.2008 20:22
Akella   спасибо, но мне чуток по другому надо, повторяющие…   18.12.2008 18:03
Akella   Помогите, что я не правильно написал? :wacko: Зад…   19.12.2008 16:49
volvo   После того как записал в файл все нужные тебе числ…   19.12.2008 17:25
Akella   ааааааааааааа я понял, блин я даже и не додумался…   19.12.2008 19:02
Akella   извините за оформление(торопился). Вопрос: почему …   19.12.2008 20:23
volvo   assign(g,'test.dat'); reset(g,1); {…   19.12.2008 20:28
Akella   почему же тогда у меня в другой проге работает и с…   19.12.2008 20:31
volvo   Значит, говори, что тебе нужно... Контрольная сумм…   19.12.2008 20:53
Akella   в этой проге мне считает, а почему в проге выше не…   19.12.2008 20:55
volvo   И что это? Ты на вопрос ответь, а не подсовывай чт…   19.12.2008 21:02
Akella   я затупил, и скорее всего препод тоже..... извиняю…   19.12.2008 21:04


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 4.05.2024 19:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name