Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
ATAMAH
Надо Каждые 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я
У меня есть подозрение, что здесь -
write(f2,p);

ты все время пишешь в одно и тоже место. Seek(f2,...) поставь
ATAMAH
Я переписал теперь она работает при кратных n а как менять остальные!

То есть ппредположим дан файл 1 2 3 4 5 6 7 8 при n=3 должны получить 3 2 1 6 5 4 8 7!! А как поменять 8 и 7?
ATAMAH
Народ подскажите плиз завтра зачет!!!!!!!!
andriano
По условию длина файла должна быть кратна N. При несовпадении имеем неопределенность - опиши, как программа должна реагировать на такое несовпадение, в условии этого нет.
ATAMAH
пРОГРАММА ДОЛЖНА МЕНЯТЬ Каждые н компаненты!! Файл не обязательно кратен н. Обясню на примере
Еслидан файл 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
"На примере" не надо. Надо четко сформулировать условие. Без этого решить задачу невозможно.
Из условия "ДОЛЖНА МЕНЯТЬ Каждые н компаненты" следует, что файл ОБЯЗАТЕЛЬНО должен быть кратен N. Иначе "Каждые н компанент" никак не получится.
Т.е. за тобой - корректное условие: что надо сделать.
ATAMAH
Вот седня так преподавтель и объяснил на этом же примере!! Менять местами н компаненты оставшие компоненты которые будут меньше этого числа то же надо переписать в обратном порядке. Так?
andriano
Тогда следует подсчитать количество этих оставшихся и переставлять их местами, исходя именно из этого количества, а не из N.
Т.е. в твоем случае меняем по 3 шт. пока это возможно, а затем обнаруживаем, что осталось только 2 и меняем их так, как если бы N было равно 2.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.