Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2007, 15:50   #1
Юрии Александрович
 
Аватар для Юрии Александрович
 
Регистрация: 11.11.2007
Сообщений: 6
По умолчанию Задача на файл в паскале

Суть задачи в следущем Каждые N компонент файла F1 переписать в обратном порядке. Число N запрашивается с клавиатуры.
то есть если дан файл 1 2 3 4 5 6 7 8 и ввести n=3 то должны получить
3 2 1 6 5 4 8 7 !!
Вот программа но она меняет если n кратное то есть не меняет 7 и 8 как сделать подскажите чтоб она их тоже меняла
Код:
uses crt;
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
clrscr;
randomize;
assign(f1,'1.dat');
assign(f2,'2.dat');
vvod(f1);
vivod(f1);
writeln;
writeln('enter komponetu');
readln(n);
reset(f1);
rewrite(f2);
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.
Ребята помогите завтра зачет!!
"Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо"


Бил Гейтс

Последний раз редактировалось Юрии Александрович; 25.12.2007 в 15:53.
Юрии Александрович вне форума Ответить с цитированием
Старый 25.12.2007, 19:50   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Мне кажется без вспомогательного массива не обойтись, потому что при нечетном N проиходит четная, т.е. симметричная перестановка.
Вот простой пример с числами как можно это сделать с помощью вспомогательного массива:
Код:
uses crt;
var a,b:array[1..10] of integer;
    n,i:integer;
begin
clrscr;
write('n=');readln(n);
for i:=1 to 10 do
   begin
     a[i]:=i;
     write(a[i],' ');
   end;
readln;
for i:=1 to n do
b[i]:=a[n-i+1];
for i:=n+1 to 10 do
b[i]:=a[i];
for i:=1 to 10 do
write(b[i],' ');
readln;
end.
Или вот пример с файлами и строками. Здесь нужно переставить слова в предложениии с заду на перед. В принципе тоже самое.
Код:
uses crt;
var F,R:text;
    s,s1:string;
    i,k:integer;
    s2:array[1..100] of string;
begin
  clrscr;
  assign(F,'First.txt');
  reset(f);
  assign(R,'Reset.txt');
  rewrite(R);
  while not eof(F) do
     begin
       read(F,s);
     end;
k:=1;
for i:=1 to length(s) do begin
if s[i]=' ' then k:=k+1 else s2[k]:=s2[k]+s[i];
end;
for i:=k downto 1 do begin
s1:=s1+s2[i]+' ';
end;
write(R,s1);
close(F);
close(R);
end.

Последний раз редактировалось puporev; 25.12.2007 в 19:57.
puporev вне форума Ответить с цитированием
Старый 26.12.2007, 16:30   #3
Юрии Александрович
 
Аватар для Юрии Александрович
 
Регистрация: 11.11.2007
Сообщений: 6
По умолчанию

Спасибо но исправил сам свой код как надо без масива
"Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо"


Бил Гейтс
Юрии Александрович вне форума Ответить с цитированием
Старый 26.12.2007, 17:08   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

А не покажете как выкрутились, а то я пол-дня тренировался, но так и не сделал, можно в личку или в почту.
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на Паскале stscolt Помощь студентам 1 29.04.2008 20:52
задача в паскале __k1ll3r__ Помощь студентам 3 27.12.2007 05:41