File27. Дан файл целых чисел с элементами $$A_1, A_2, …, A_N$$ ($$N$$ — количество элементов в файле). Заменить исходное расположение его элементов на следующее: $$A_1, A_N, A_2, A_{N-1}, A_3, …$$ .
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
program File27; var S:String; F_in,F_temp: File of Integer; temp,i,i2,len:integer; begin Write('File: '); Readln(S); Assign(F_in,S); Reset(F_in); //узнаём длину файла в элементах len:=0; while (not eof(F_in)) do begin Read(F_in,temp); inc(len); end; Assign(F_temp,'~'+S);//создаём и открываем темповый файл F_temp ReWrite(F_temp); //делаем проходов в кол-ве поливина от длины файла for i2:=1 to (len div 2) do begin Close(F_in); Reset(F_in); //открываем файл заново на чтение и бежим с начала до i:=1; while (not eof(F_in)) and (i<=len-i2+1) do //до последнего элемента который мы должны добавить в темповый файл тоесть до N-i2+1 begin Read(F_in,temp); if i=i2 then Write(F_temp,temp);// когда встречается i2 элемент то пишем его в темповый файл. inc(i); end; write(F_temp,temp);//цикл закончился на N-i2+1 элементе, поэтому пишем его в файл end; if (len mod 2 =1) then //смотрим, если кол-во элементов не чётное, то нам надо дописать ещё один элемент из середины. begin Close(F_in); Reset(F_in); i:=1; while (i<=(len div 2)+1) do//бежим до середины begin Read(F_in,temp); inc(i); end; Write(F_temp,temp);//записываем средний элемент в файл. inc(i); end; Close(F_in); // закрываем файлы Close(F_temp); Erase(F_in); //удаляем исходный файл Rename(F_temp,S); //переименовываем темповый файл, в название исходного end. |
Другие задачи из раздела File можно посмотреть здесь.
Комментарии: