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

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

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

 
 Ответить  Открыть новую тему 
> Типизированные файлы
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Женский
Реальное имя: Сафиуллина Алёна

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


Есть задача: дан типизированный файл целых чисел, содержащий чётное количество элементов. Удалить из данного файла первую половину элементов.
Вот если бы нужно было удалить вторую половину, то я бы даже не заморачивалась... А так у меня вот какой бред вышел:

var
f,f1: file of integer;
i,c,s:integer;

begin
s:=0;

assign(f,'C:\pas\asd3.bin');
rewrite(f);

write(f,21);
write(f,0);
write(f,-76);
write(f,90);
write(f,78);
write(f,45);
write(f,90);
write(f,43);
close(f);

reset(f);
read(f,c);

while not eof(f) do
begin
read(f,c);
s:=s+1;
writeln©;
end;
seek(f,s-1);
truncate(f);
reset(f);

read(f,c);
close(f);
readln;
end.


truncate, я где-то видела, что усекает размер файла до текущей позиции. Можно ли так вообще делать в этом случае?


--------------------
Жизнь похожа на собачью упряжку: если не идёшь впереди, то всё время видишь одно и то же...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Вот если бы нужно было удалить вторую половину, то я бы даже не заморачивалась...
Вот... В правильном направлении мыслишь. Значит, что надо сделать? Ну конечно, скопировать данные из второй половины в первую. и потом-таки сделать Truncate... Только ты не так копируешь. Смотри:

reset(f);
seek(f, filesize(f) div 2); { <--- устанавливаем курсор на середину }
write_pos := 0; { <--- Куда будем переписывать... Начинаем с самого начала файла }

{ Пока не конец файла }
read(f, c); save_pos := filepos(f);
seek(f, write_pos); write(f, c); { Записали прочитанное число в начало }
inc(write_pos); { продвинули указатель }
seek(f, save_pos); { восстановили, откуда читали... }
{
конец файла? прекрасно, выходим из цикла,
ставим курсор на (filesize div 2) и делаем truncate
}

 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Женский
Реальное имя: Сафиуллина Алёна

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


Спасибо! Я думала над вариантом, чтобы скопировать, только у меня это не получалось...

Добавлено через 15 мин.
А что значит эта ошибка?: (она постоянно вылазит...)


Эскизы прикрепленных изображений
Прикрепленное изображение

--------------------
Жизнь похожа на собачью упряжку: если не идёшь впереди, то всё время видишь одно и то же...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Кто-то (или что-то) блокирует объектный файл.

Такое иногда бывает, если ты отлаживаешь программу (пошаговый прогон, точки останова, ну, в общем пользуешься Debugger-ом), и не останавливая этого Дебаггера пытаешься перекомпилировать программу. Сначала сделай Program Reset (Ctrl+F2). а потом перекомпилируй... Ну, и посмотри в процессах через TaskManager, если exe-шник запущен, то вряд ли тебе удастся пересобрать программу, надо его сначала снять с выполнения.

Была еще ошибка Error While linking, о ней тоже много говорилось на форуме, она достала в свое время. Из-за нее я отказался от IDE, и перешел на SciTE... smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Женский
Реальное имя: Сафиуллина Алёна

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


Хм.. Паскаль заглючил, пришлось переписывать программу... Теперь он выдаёт ошибку сразу на rewrite(f);
Что это значит?

Добавлено через 1 мин.
У меня виндоус даже удалить файл с программой не даёт, говорит, что она либо используется, либо у меня прав нет... Пришлось переделывать...


Эскизы прикрепленных изображений
Прикрепленное изображение

--------------------
Жизнь похожа на собачью упряжку: если не идёшь впереди, то всё время видишь одно и то же...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Я ж предупреждал тебя насчет кириллицы в пути, правда?

Добавлено через 1 мин.
Цитата
У меня виндоус даже удалить файл с программой не даёт, говорит, что она либо используется, либо у меня прав нет...
На этот случай есть программа Unlocker Assistant. которая показывает, кто залочил программу, и снимает блокировку в большинстве случаев.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Женский
Реальное имя: Сафиуллина Алёна

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


Ну да, было дело) Но до этого все программы, которые я сначала сохраняла на рабочий стол до полной отладки, нормально работали... Кстати, ещё одна ошибка, которая у меня периодически проскакивает.. Скриншота нету, но когда эта ошибка появляется, я нажимаю окей (ничего не подозревая) и вся программа стирается вместе с её сохранением. Что это может быть? Глюк паскаля?


--------------------
Жизнь похожа на собачью упряжку: если не идёшь впереди, то всё время видишь одно и то же...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Женский
Реальное имя: Сафиуллина Алёна

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


Вот конечный результат задачи, вроде бы работает):

var
f: file of integer;
i,c,s,write_pos,save_pos:integer;

begin
s:=0;

assign(f,'C:\pas\asd3.bin');
rewrite(f);

write(f,21);
write(f,0);
write(f,-76);
write(f,90);
write(f,78);
write(f,45);
write(f,90);
write(f,43);
close(f);

reset(f);
read(f,c);
write(f,c);

seek(f, filesize(f) div 2);
write_pos := 0;

while not eof(f) do
begin
read(f, c);
save_pos:=filepos(f);
seek(f,write_pos);
write(f, c);
inc(write_pos);
seek(f, save_pos);
end;

seek(f,filesize(f) div 2);
truncate(f);
seek(f,0);
while not eof(f) do
begin
read(f,c);
writeln©;
end;
readln;
end.




--------------------
Жизнь похожа на собачью упряжку: если не идёшь впереди, то всё время видишь одно и то же...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
Глюк паскаля?
Глюк IDE Паскаля, если точнее. Потому что в сообщении, которое тебе показывается, явно написано, что произошла внутренняя ошибка и IDE будет закрыта (там еще какой-то сигнал упоминается, то ли 111 то ли 117, не помню уже). В 2.4.2 этот баг вроде пофиксили, я его не встречал ни разу с момента выхода новой версии.

Обнови FPC, твоя 2.2.4 устарела smile.gif

Добавлено через 5 мин.
Цитата
вроде бы работает):
Вроде бы. Но write_pos и save_pos должны быть описаны как LongInt, а не как integer. Иначе при больших файлах (больше чем 32К) в зависимости от режима компиляции может быть разное поведение.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Eichhorn @ 12.01.2011 15:03) *
Но до этого все программы, которые я сначала сохраняла на рабочий стол до полной отладки,
ой, ой... какой бардак...
напомнило мне живых белок, которые закапывают орехи, которые не могу съесть - а потом большинство из них не находят наверняка.. Я часто вижу эту картину, прогуливаясь по универу ))

Цитата
нормально работали... Кстати, ещё одна ошибка,
Вот это мне особенно понравилось! smile.gif Даже еще раз процитирую:
нормально работали... Кстати, ещё одна ошибка lol.gif

Цитата
которая у меня периодически проскакивает.. Скриншота нету, но когда эта ошибка появляется, я нажимаю окей (ничего не подозревая) и вся программа стирается вместе с её сохранением. Что это может быть?
"когда я иду по стройке, и мне говорят: надень каску, тут падают кирпичи - я киваю (ничего не подозревая) и потом почему-то каждый раз просыпаюсь в больнице. Что это может быть? Мерещится?
smile.gif))

Дорогая Белка, заведи себе отдельную ДИРЕКТОРИЮ, а в ней - ПОДДИРЕКТОРИИ для КАЖДОЙ ЗАДАЧИ. Запускай Паскаль В ТОЙ ПОДДИРЕКТОРИИ. А сообщения все ЧИТАЙ ПЕРЕД НАЖАТИЕМ "ОК".

не обижайся )) посмотри на себя со стороны ))

Кстати - вот мы всем тут говорим, как всякие там циклы и условия делать. А как организовать работу - об этом очень редко проскакивает.. Но, если начать это говорить - не поймут no1.gif . Убегут на другой форум, где им все на блюдечке. И ничему не научатся..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Женский
Реальное имя: Сафиуллина Алёна

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


Спасибо! Исправлю)


--------------------
Жизнь похожа на собачью упряжку: если не идёшь впереди, то всё время видишь одно и то же...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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