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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Работа с файлами...
volvo
сообщение 19.12.2008 13:25
Сообщение #21


Гость






После того как записал в файл все нужные тебе числа, лучше сделать так:

  reset(f);
seek(f,filesize(f));

X := 0; write(f, X); { <--- Пишем 0 в самый конец файла, увеличивая его размер }
seek(f, filepos(f) - 2); { <--- Устанавливаем указатель на число, с которого начнем перемещение }
{ Это как раз то самое число, которое было последним в файле, }
{ пока туда не записали 0 }

{
А дальше - все просто: читаем число, при этом указатель сам перемещается
на следующую позицию в файле, туда прочитанное число и пишем, указатель
опять перемещается еще дальше, а мы его перебрасываем на 3 (!!!) позиции
назад, чтобы на следующем круге начать перемещение на одну позицию раньше.

Повторять, пока не дойдем до нужной позиции
}
while filepos(f) >= N do begin
read(f, x); write(f, x);
seek(f, filepos(f) - 3);
end;

seek(f, N); write(f, M); { Все, пишем туда куда надо введенное число }
{ И выводишь файл на печать для проверки }

 К началу страницы 
+ Ответить 
Akella
сообщение 19.12.2008 15:02
Сообщение #22


Пионер
**

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

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


ааааааааааааа я понял, блин я даже и не додумался с конца начать=))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Akella
сообщение 19.12.2008 16:23
Сообщение #23


Пионер
**

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

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


извините за оформление(торопился). Вопрос: почему не считает контрольную сумму получившихся элементов? Не понимаю, в другой программе все работало....
uses crt;
var f: file of integer;
g : file;
i, X, Y, N, buf, sum: integer;
pos, curr: longint;
found: boolean;
begin clrscr;
randomize;
assign(f, 'test.dat'); rewrite(f);
write('vvedite chislo elementov faila N=');
readln(N);
for i := 1 to N do begin
X := random(10);
write(X,' ');
write(f, X);
end;
writeln;
reset(f); pos := 0;
while not eof(f) do begin
read(f, X);
curr := filepos(f);
seek(f, 0);
found := false;
while filepos(f) < pos do begin read(f, Y);
if Y = X then found := true;
end;
if not found then begin
seek(f, pos);
write(f, X);
inc(pos);
end;
seek(f, curr);
end;
seek(f, pos); truncate(f);
reset(f);
while not eof(f) do begin
read(f, X);
write(X:3);
end;
writeln;
close(f);
assign(g,'test.dat');
reset(g,1);
sum:=0;
while not eof(g) do begin
blockread(g,buf,1);
sum:=sum + ord(buf);
end;
write('kontrolnaya summa ravna ',sum);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.12.2008 16:28
Сообщение #24


Гость






assign(g,'test.dat');       
reset(g,1); { <--- После вот такого открытия }
надо как минимум сделать buf не Integer-ом, а Char-ом (или Byte, неважно, но размером в один байт), потому что и читаешь ты тоже
blockread(g,buf,1); { <--- Один блок }
 К началу страницы 
+ Ответить 
Akella
сообщение 19.12.2008 16:31
Сообщение #25


Пионер
**

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

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


почему же тогда у меня в другой проге работает и считает, да и типы по моему одинаковые...

все равно не считает, то что нужно!

Сообщение отредактировано: Akella - 19.12.2008 16:33
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.12.2008 16:53
Сообщение #26


Гость






Цитата
все равно не считает, то что нужно!
Значит, говори, что тебе нужно... Контрольная сумма - понятие растяжимое... Можно назвать так сумму элементов, можно - CRC файла, да мало ли что еще...
 К началу страницы 
+ Ответить 
Akella
сообщение 19.12.2008 16:55
Сообщение #27


Пионер
**

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

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


в этой проге мне считает, а почему в проге выше не работает я не знаю...
program  _7_14;    
uses crt;
var f : file of integer;
g : file;
i,n,a,CurrPos,LastNeg,sum,buf : integer;
begin
clrscr;
randomize;
assign(f,'myfile.dat');
rewrite(f);
write('vvedite kolichestvo sluchainih chisel n=');
read(n);
for i:=1 to n do begin
a:=random(200)-100;
write(f,a);
end;
seek(f,0);
gotoxy(1,3);
write('sluchainie chisla');
gotoxy(1,5);
while not eof(f) do begin
read(f,a);
write(a,' ');
end;
reset(f);
LastNeg := -1;
while not eof(f) do begin
read(f, a);
if a < 0 then begin
CurrPos := FilePos(f);
inc(LastNeg);
Seek(f, LastNeg);
write(f, a);
Seek(f, CurrPos);
end;
end;
Seek(f, LastNeg + 1);
Truncate(f);
reset(f);
gotoxy(1,7);
write('posle udaleniya polojitelnih chisel');
gotoxy(1,9);
while not eof(f) do begin
read(f,a);
write(a,' ');
end;
close(f);
assign(g,'myfile.dat');
reset(g,1);
sum:=0;
while not eof(g) do begin
blockread(g,buf,1);
sum:=sum + ord(buf);
end;
gotoxy(1,11);
write('kontrolnaya summa = ',sum);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.12.2008 17:02
Сообщение #28


Гость






И что это? Ты на вопрос ответь, а не подсовывай что-то что "работает"... Насчет того, работает это или нет - большой вопрос, у меня и первый твой код работает... ЧТО СЧИТАЕТ он?
 К началу страницы 
+ Ответить 
Akella
сообщение 19.12.2008 17:04
Сообщение #29


Пионер
**

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

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


я затупил, и скорее всего препод тоже..... извиняюсь... mega_chok.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 14.09.2025 23:54
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"