Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача

Автор: ATAMAH 25.12.2007 18:24

Надо Каждые N компонент файла F1 переписать в обратном порядке. Число N запрашивается с клавиатуры.


type tFile=file of integer;
procedure vvod (var f:tFile);
var i:integer;
Begin
rewrite(f);
while random(20)<>0 do
begin
i:=100-random(50);
write(f,i);
end;
close(f);
end;
procedure vivod(var f:tFile);
var i:integer;
begin
reset(f);
while not eof(f) do
begin
read(f,i);
write(i:4);
end;
close(f);
end;

var f1,f2:tFile;
i,k,n,p:integer;
begin
randomize;
assign(f1,'1.dat');
assign(f2,'2.dat');
vvod(f1);
vivod(f1);
writeln;
writeln('enter komponetu');
readln(n);
reset(f1);
rewrite(f2);
repeat
while p<>filesize(f1) do
begin
for i:=n+p downto 1+p do
begin
seek(f1,i-1);
read(f1,k);
write(f2,k);
end;
p:=p+n;
end;
close(f1); close(f2);
erase(f1);
rename(f2,'1.dat');
vivod(f1);
readln;
end.


Но не работает подскажите как можно исправить!! Чтоб заработало!! Плиз

Автор: Ozzя 25.12.2007 18:32

У меня есть подозрение, что здесь -

write(f2,p);

ты все время пишешь в одно и тоже место. Seek(f2,...) поставь

Автор: ATAMAH 25.12.2007 18:34

Я переписал теперь она работает при кратных n а как менять остальные!

То есть ппредположим дан файл 1 2 3 4 5 6 7 8 при n=3 должны получить 3 2 1 6 5 4 8 7!! А как поменять 8 и 7?

Автор: ATAMAH 25.12.2007 19:45

Народ подскажите плиз завтра зачет!!!!!!!!

Автор: andriano 25.12.2007 20:59

По условию длина файла должна быть кратна N. При несовпадении имеем неопределенность - опиши, как программа должна реагировать на такое несовпадение, в условии этого нет.

Автор: ATAMAH 25.12.2007 21:27

пРОГРАММА ДОЛЖНА МЕНЯТЬ Каждые н компаненты!! Файл не обязательно кратен н. Обясню на примере
Еслидан файл 1 2 3 4 5 6 7 8 и мы вводим н=3 то должны получить файл 3 2 1 6 5 4 и 8 7 если водим н=4 то получаем 4 3 2 1 8 7 6 5! При н =3 меняет местами все до 6 а потом выдает ошибку!! Ошибка чтеня с диска! Вот сдесь и загвостка

Автор: andriano 25.12.2007 21:38

"На примере" не надо. Надо четко сформулировать условие. Без этого решить задачу невозможно.
Из условия "ДОЛЖНА МЕНЯТЬ Каждые н компаненты" следует, что файл ОБЯЗАТЕЛЬНО должен быть кратен N. Иначе "Каждые н компанент" никак не получится.
Т.е. за тобой - корректное условие: что надо сделать.

Автор: ATAMAH 25.12.2007 21:42

Вот седня так преподавтель и объяснил на этом же примере!! Менять местами н компаненты оставшие компоненты которые будут меньше этого числа то же надо переписать в обратном порядке. Так?

Автор: andriano 26.12.2007 13:20

Тогда следует подсчитать количество этих оставшихся и переставлять их местами, исходя именно из этого количества, а не из N.
Т.е. в твоем случае меняем по 3 шт. пока это возможно, а затем обнаруживаем, что осталось только 2 и меняем их так, как если бы N было равно 2.