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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Работа с файлами...
сообщение
Сообщение #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); { Все, пишем туда куда надо введенное число }
{ И выводишь файл на печать для проверки }

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


Пионер
**

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

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


ааааааааааааа я понял, блин я даже и не додумался с конца начать=))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Гость






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


Пионер
**

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

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


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

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

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


Гость






Цитата
все равно не считает, то что нужно!
Значит, говори, что тебе нужно... Контрольная сумма - понятие растяжимое... Можно назвать так сумму элементов, можно - CRC файла, да мало ли что еще...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Гость






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


Пионер
**

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

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


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

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

 





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