1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
После того как записал в файл все нужные тебе числа, лучше сделать так:
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); { Все, пишем туда куда надо введенное число } { И выводишь файл на печать для проверки }
извините за оформление(торопился). Вопрос: почему не считает контрольную сумму получившихся элементов? Не понимаю, в другой программе все работало....
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.
Значит, говори, что тебе нужно... Контрольная сумма - понятие растяжимое... Можно назвать так сумму элементов, можно - CRC файла, да мало ли что еще...
в этой проге мне считает, а почему в проге выше не работает я не знаю...
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.
И что это? Ты на вопрос ответь, а не подсовывай что-то что "работает"... Насчет того, работает это или нет - большой вопрос, у меня и первый твой код работает... ЧТО СЧИТАЕТ он?