Даны два файла с числами поменять местами их содержимое использовать вспомогательный файл

Обновлено: 04.07.2024

Под двоичным файлом понимается файл, содержащий элементы одного типа в специальном формате.

В языке Pascal такие файлы называются типизированными и описываются как file of <тип элемента>.

В языке Visual Basic такие файлы называются файлами прямого доступа, и описываются с помощью атрибута Random.

В языке C++ для работы с двоичными файлами надо открывать их в режиме ios_base::binary; для чтения и записи элементов двоичных файлов в языке C++ надо использовать методы read и write со списком параметров вида ((char *)&x, sizeof(x)), где x - переменная, тип которой совпадает с типом элементов двоичного файла.

В языке Java для работы с двоичными файлами удобно использовать класс RandomAccessFile, обеспечивающий прямой доступ к файловым элементам и имеющий встроенные методы для ввода и вывода данных всех стандартных скалярных типов.

Если в задании требуется создать новый файл, то имя создаваемого файла также входит в набор исходных данных и обычно является последним элементом этого набора. Записывать элементы в создаваемые (или модифицируемые) файлы следует с помощью стандартных процедур используемого языка программирования.

Под размером типизированного файла всегда подразумевается количество содержащихся в нем элементов указанного типа (а не количество байтов, как это принято в операционной системе). В заданиях предполагается, что файловые элементы нумеруются от 1.

Если о минимальном размере исходного файла в задании ничего не сказано, то предполагается, что он равен 2 (т. е. файл содержит по крайней мере два элемента). Максимальный размер исходных файлов не устанавливается, поэтому при решении заданий не следует использовать вспомогательные массивы, содержащие все элементы исходных файлов, однако допускается использование вспомогательных файлов.

Двоичные файлы: основные операции

File1 . Дана строка S. Если S является допустимым именем файла, то создать пустой файл с этим именем и вывести True. Если файл с именем S создать нельзя, то вывести False.

File3 . Дано имя файла и вещественные числа A и D. Создать файл вещественных чисел с данным именем и записать в него 10 первых членов арифметической прогрессии с начальным членом A и разностью D:

File4 . Даны имена четырех файлов. Найти количество файлов с указанными именами, которые имеются в текущем каталоге.

File7 . Дан файл целых чисел, содержащий не менее четырех элементов. Вывести первый, второй, предпоследний и последний элементы данного файла.

File8 . Даны имена двух файлов вещественных чисел. Известно, что первый из них существует и является непустым, а второй в текущем каталоге отсутствует. Создать отсутствующий файл и записать в него начальный и конечный элементы существующего файла (в указанном порядке).

File9 . Даны имена двух файлов вещественных чисел. Известно, что один из них (не обязательно первый) существует и является непустым, а другой в текущем каталоге отсутствует. Создать отсутствующий файл и записать в него конечный и начальный элементы существующего файла (в указанном порядке).

File10° . Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке.

File14 . Дан файл вещественных чисел. Найти среднее арифметическое его элементов.

File15 . Дан файл вещественных чисел. Найти сумму его элементов с четными номерами.

File16 . Дан файл целых чисел. Найти количество содержащихся в нем серий (т. е. наборов последовательно расположенных одинаковых элементов). Например, для файла с элементами 1, 5, 5, 5, 4, 4, 5 результат равен 4.

File18 . Дан файл вещественных чисел. Найти его первый локальный минимум (локальным минимумом называется элемент, который меньше своих соседей).

File19 . Дан файл вещественных чисел. Найти его последний локальный максимум (локальным максимумом называется элемент, который больше своих соседей).

File20 . Дан файл вещественных чисел. Найти общее количество его локальных экстремумов, т. е. локальных минимумов и локальных максимумов (определения локального минимума и локального максимума даны в заданиях File18 и File19).

File21 . Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных максимумов исходного файла в порядке возрастания (определение локального максимума дано в задании File19).

File22 . Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных экстремумов исходного файла в порядке убывания (определение локального экстремума дано в задании File20).

File23 . Дан файл вещественных чисел. Создать файл целых чисел, содержащий длины всех убывающих последовательностей элементов исходного файла. Например, для исходного файла с элементами 1.7, 4.5, 3.4, 2.2, 8.5, 1.2 содержимое результирующего файла должно быть следующим: 3, 2.

File24 . Дан файл вещественных чисел. Создать файл целых чисел, содержащий длины всех монотонных последовательностей элементов исходного файла. Например, для исходного файла с элементами 1.7, 4.5, 3.4, 2.2, 8.5, 1.2 содержимое результирующего файла должно быть следующим: 2, 3, 2, 2.

File25° . Дан файл вещественных чисел. Заменить в нем все элементы на их квадраты.

File26 . Дан файл вещественных чисел. Поменять в нем местами минимальный и максимальный элементы.

File28 . Дан файл вещественных чисел. Заменить в файле каждый элемент, кроме начального и конечного, на его среднее арифметическое с предыдущим и последующим элементом.

File29 . Дан файл целых чисел, содержащий более 50 элементов. Уменьшить его размер до 50 элементов, удалив из файла необходимое количество конечных элементов.

File30 . Дан файл целых чисел, содержащий четное количество элементов. Удалить из данного файла вторую половину элементов.

File31 . Дан файл целых чисел, содержащий более 50 элементов. Уменьшить его размер до 50 элементов, удалив из файла необходимое количество начальных элементов.

File32 . Дан файл целых чисел, содержащий четное количество элементов. Удалить из данного файла первую половину элементов.

File33 . Дан файл целых чисел. Удалить из него все элементы с четными номерами.

File34 . Дан файл целых чисел. Удалить из него все отрицательные числа.

File35 . Дан файл целых чисел, содержащий менее 50 элементов. Увеличить его размер до 50 элементов, записав в начало файла необходимое количество нулей.

File36 . Дан файл целых чисел. Удвоить его размер, записав в конец файла все его исходные элементы (в том же порядке).

File37 . Дан файл целых чисел. Удвоить его размер, записав в конец файла все его исходные элементы (в обратном порядке).

File38 . Дан файл целых чисел. Продублировать в нем все элементы с нечетными номерами.

File40 . Дан файл целых чисел. Заменить в нем каждый элемент с четным номером на два нуля.

File41° . Дан файл целых чисел. Заменить в нем каждое положительное число на три нуля.

Обработка нетипизированных двоичных файлов

File42 . Даны два файла произвольного типа. Поменять местами их содержимое.

File43° . Дан файл произвольного типа. Создать его копию с новым именем.

File44 . Даны три файла одного и того же типа, но разного размера. Заменить содержимое самого длинного файла на содержимое самого короткого.

File45 . Даны три файла одного и того же типа, но разного размера. Заменить содержимое самого короткого файла на содержимое самого длинного.

Работа с несколькими числовыми файлами. Файлы-архивы

File48° . Даны три файла целых чисел одинакового размера с именами SA, SB, SC и строка SD. Создать новый файл с именем SD, в котором чередовались бы элементы исходных файлов с одним и тем же номером:

File50° . Даны два файла вещественных чисел с именами S1 и S2, элементы которых упорядочены по возрастанию. Объединить эти файлы в новый файл с именем S3 так, чтобы его элементы также оказались упорядоченными по возрастанию.

File51 . Даны три файла вещественных чисел с именами S1, S2 и S3, элементы которых упорядочены по убыванию. Объединить эти файлы в новый файл с именем S4 так, чтобы его элементы также оказались упорядоченными по убыванию.

File53 . Дана строка S, целое число N (> 0) и файл-архив целых чисел, содержащий данные из нескольких файлов в формате, описанном в задании File52. Восстановить из файла-архива файл с номером N и сохранить его под именем S. Если файл-архив содержит данные из менее чем N файлов, то оставить результирующий файл пустым.

File54 . Дана строка S и файл-архив целых чисел, содержащий данные из нескольких (не более шести) файлов в формате, описанном в задании File52. Для каждого из файлов, содержащихся в архиве, найти среднее арифметическое всех его элементов (вещественное число) и записать найденные числа (в том же порядке) в файл вещественных чисел с именем S.

File56 . Дана строка S, целое число N (> 0) и файл-архив целых чисел, содержащий данные из нескольких файлов в формате, описанном в задании File55. Восстановить из файла-архива файл с номером N и сохранить его под именем S. Если файл-архив содержит данные из менее чем N файлов, то оставить результирующий файл пустым.

Символьные и строковые файлы

Строковым файлом называется двоичный файл, элементами которого являются текстовые строки.

При выполнения заданий на языке C++ следует считать, что элементы строковых файлов имеют тип char[80].

File58° . Дан символьный файл, содержащий по крайней мере один символ пробела. Удалить все его элементы, расположенные после первого символа пробела, включая и этот пробел.

File59 . Дан символьный файл, содержащий по крайней мере один символ пробела. Удалить все его элементы, расположенные после последнего символа пробела, включая и этот пробел.

File60 . Дан символьный файл, содержащий по крайней мере один символ пробела. Удалить все его элементы, расположенные перед первым символом пробела, включая и этот пробел.

File61° . Дан символьный файл, содержащий по крайней мере один символ пробела. Удалить все его элементы, расположенные перед последним символом пробела, включая и этот пробел.

File62 . Дан символьный файл. Упорядочить его элементы по возрастанию их кодов.

File63° . Дано целое число K (> 0) и строковый файл. Создать два новых файла: строковый, содержащий первые K символов каждой строки исходного файла, и символьный, содержащий K-й символ каждой строки (если длина строки меньше K, то в строковый файл записывается вся строка, а в символьный файл записывается пробел).

File64 . Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наименьшей длины (в том же порядке).

File65 . Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наибольшей длины (в обратном порядке).

File66 . Дан строковый файл. Создать новый строковый файл, в котором строки из исходного файла располагались бы в лексикографическом порядке, т. е. по возрастанию кодов их символов, начиная с первого символа.

File69 . Дан строковый файл, содержащий даты в формате, описанном в задании File67. Создать новый строковый файл, содержащий все летние даты из исходного файла (в том же порядке). Если даты с требуемым временем года в файле отсутствуют, то оставить результирующий файл пустым.

File70 . Дан строковый файл, содержащий даты в формате, описанном в задании File67. Создать новый строковый файл, содержащий все зимние даты из исходного файла (в обратном порядке). Если даты с требуемым временем года в файле отсутствуют, то оставить результирующий файл пустым.

File71 . Дан строковый файл, содержащий даты в формате, описанном в задании File67. Найти строку, содержащую самую раннюю весеннюю дату. Если даты с требуемым временем года в файле отсутствуют, то вывести пустую строку.

File72 . Дан строковый файл, содержащий даты в формате, описанном в задании File67. Найти строку, содержащую самую позднюю осеннюю дату. Если даты с требуемым временем года в файле отсутствуют, то вывести пустую строку.

File73 . Дан строковый файл, содержащий даты в формате, описанном в задании File67. Создать новый строковый файл, в котором даты из исходного файла располагались бы в порядке убывания.

Использование файлов для работы с матрицами

В заданиях данной подгруппы используются дополнительные понятия теории матриц. Приведем определения этих понятий.

Квадратная матрица A называется верхнетреугольной, если все ее элементы, лежащие ниже главной диагонали, равны нулю (определение главной диагонали см. в задании Matrix80):

AI,J = 0, I > J.

Квадратная матрица A называется нижнетреугольной, если все ее элементы, лежащие выше главной диагонали, равны нулю:

AI,J = 0, I < J.

Квадратная матрица A называется трехдиагональной, если равны нулю все ее элементы, не лежащие на главной диагонали и на двух диагоналях, примыкающих к главной:

File74° . Даны два целых числа I, J и файл вещественных чисел, содержащий элементы квадратной матрицы (по строкам). Вывести элемент матрицы, расположенный в I-й строке и J-м столбце (строки и столбцы нумеруются от 1). Если требуемый элемент отсутствует, то вывести 0.

File75 . Дан файл вещественных чисел, содержащий элементы квадратной матрицы (по строкам). Создать новый файл, содержащий элементы матрицы, транспонированной к исходной.

File77 . Даны два целых числа I, J и файл вещественных чисел, содержащий элементы прямоугольной матрицы (по строкам), причем первый элемент файла содержит количество столбцов матрицы. Вывести элемент матрицы, расположенный в I-й строке и J-м столбце (строки и столбцы нумеруются от 1). Если требуемый элемент отсутствует, то вывести 0.

File78 . Дан файл вещественных чисел, содержащий элементы прямоугольной матрицы (по строкам), причем первый элемент файла содержит количество столбцов матрицы. Создать новый файл той же структуры, содержащий матрицу, транспонированную к исходной.

File80 . Дан файл вещественных чисел, содержащий элементы верхнетреугольной матрицы (по строкам). Создать новый файл, содержащий элементы ненулевой части данной матрицы (по строкам).

File81 . Дан файл вещественных чисел, содержащий элементы нижнетреугольной матрицы (по строкам). Создать новый файл, содержащий элементы ненулевой части данной матрицы (по строкам).

File82 . Дан файл вещественных чисел, содержащий элементы трехдиагональной матрицы (по строкам). Создать новый файл, содержащий элементы ненулевой части данной матрицы (по строкам).

File86 . Дан файл вещественных чисел, содержащий ненулевую часть верхнетреугольной матрицы (по строкам). Создать новый файл, содержащий все элементы данной матрицы (по строкам).

File87 . Дан файл вещественных чисел, содержащий ненулевую часть нижнетреугольной матрицы (по строкам). Создать новый файл, содержащий все элементы данной матрицы (по строкам).

File88 . Дан файл вещественных чисел, содержащий ненулевую часть трехдиагональной матрицы (по строкам). Создать новый файл, содержащий все элементы данной матрицы (по строкам).

16. Дан текстовый файл . Переписать в новый файл все его строки , вставив в конец каждой строки ее номер .

17. Дан текстовый файл . Переписать в новый файл все его строки , вставив в конец каждой строки количество символов в ней .

18. Дан текстовый файл . Переписать в новый файл все его строки , длина которых больше заданного числа .

19. Дан текстовый файл . Переписать в новый файл все его строки четной длины .

20. Дан текстовый файл . Переписать в новый файл все его строки , удалив из них символы , стоящие на четных местах .

1. Дан файл f, компонентами которого являются целые числа . Переписать все четные числа в файл g, нечетные – в файл h.

2. Дан файл f, компонентами которого являются целые числа . Переписать все отрицательные числа в файл g, положительные – в файл h.

3. Даны два файла с числами . Поменять местами их содержимое ( использовать вспомогательный файл ).

4. Даны два файла с числами . Получить новый файл , каждый элемент которого равен сумме соответствующих компонентов заданных файлов ( количество компонентов в исходных файлах одинаковое ).

5. Даны два файла с числами . Получить новый файл , каждый компонент которого равен наибольшему из соответствующих компонентов заданных файлов ( количество компонентов в исходных файлах одинаковое ).

6. Даны два файла с числами . Получить новый файл , каждый компонент которого равен среднему арифметическому значению соответствующих компонентов заданных файлов ( количество компонентов в исходных файлах одинаковое ).

7. Даны два файла с числами . Получить новый файл , записав в него сначала все положительные числа из первого файла , потом все отрицательные числа из второго .

8. Даны два файла с числами . Получить новый файл , записав в него сначала все четные числа из первого файла , потом все нечетные числа из второго .

9. Даны два файла с числами . Получить новый файл , в котором на четных местах будут стоять компоненты , которые стоят на четных местах в первом файле , а на нечетных – компоненты , которые стоят на нечетных во втором ( количество компонентов в исходных файлах одинаковое ).

10. Дан файл f, компонентами которого являются символы . Переписать в файл g все знаки препинания файла f, а в файл h – все остальные символы файла f.

11. Дан файл f, элементами которого являются символы . Переписать в файл g все цифры файла f, а в файл h – все остальные символы файла f.

12. Даны два символьных файла . Выяснить , совпадают ли символы в файлах попарно . Если нет , получить номер первого элемента , в котором эти файлы отличаются .

13. Дан файл , компонентами которого являются целые числа . Переписать в новый файл сначала все отрицательные компоненты из первого , потом все положительные .

14. Дан файл , компонентами которого являются символы . Создать новый файл таким образом , чтобы на четных местах у него стояли компоненты , стоящие на нечетных в первом файле , и наоборот .

15. Дан файл , компонентами которого являются числа . Число компонент файла делится на два . Создать новый файл , в который будет записываться наименьшее из каждой пары чисел первого файла .

Стр . 213 из 510

16. Дан файл , компонентами которого являются числа . Число компонент файла является четным . Создать новый файл , в который будет записываться среднее арифметическое из каждой пары чисел первого файла .

17. Дан файл , компонентами которого являются символы . Переписать все символы в новый файл в обратном порядке .

18. Даны два файла с одинаковым количеством компонент , компонентами которых являются натуральные числа . Создать новый файл , в который будут записываться числа по следующему правилу : берется первое число из первого файла и первое из второго ; если одно из них делится нацело на другое , то их частное записывается в новый файл ; затем берется второе число из первого и второе число из второго и т . д .

19. Дан файл , компонентами которого являются символы . Переписать в новый файл все символы , которым в первом файле предшествует данная буква .

20. Дан файл , компонентами которого являются символы . Переписать в новый файл все символы , за которыми в первом файле следует данная буква .

Самостоятельная работа №6

Используя Интернет и дополнительную литературу :

1) изучите возможности использования байтовых потоков : классы BufferedStream и MemoryStream;

2) изучите возможности использования двоичных потоков : классы BinaryWriter и BinaryReader.

Если задано целое число n и две битовые позиции p1 и p2 внутри него, поменяйте местами биты в указанных позициях. Указанные позиции начинаются с младшего разряда (lsb). Например, позиция для lsb равна 0.

Примеры:

Мы настоятельно рекомендуем вам свернуть браузер и попробовать это в первую очередь.

Ниже приведена реализация вышеуказанной идеи.


// Эта функция меняет бит в позициях p1 и p2 на целое число n

int swapBits(unsigned int n, unsigned int p1, unsigned int p2)

unsigned int bit1 = (n >> p1) & 1;

unsigned int bit2 = (n >> p2) & 1;

unsigned int x = (bit1 ^ bit2);

/ * Верните бит xor в исходное положение * /

два набора поменялись местами * /

unsigned int result = n ^ x;


/ * Программа драйвера для проверки вышеуказанной функции * /

int res = swapBits(28, 0, 3);

printf ( "Result = %d " , res);

// Java-программа для замены битов в целое число


// Эта функция меняет бит на
// помещаем p1 и p2 в целое число n

static int swapBits( int n, int p1, int p2)

int bit1 = (n >> p1) & 1 ;

int bit2 = (n >> p2) & 1 ;

int x = (bit1 ^ bit2);

/ * Поместить бит xor обратно в

их исходные позиции * /

номер так, чтобы

два набора поменялись местами * /

int result = n ^ x;

public static void main (String[] args)

int res = swapBits( 28 , 0 , 3 );

System.out.println ( "Result plain">+ res);


// Этот код предоставлен ajit ..

def swapBits(n, p1, p2):

«Положите бит XOR обратно в их

так что два набора поменялись местами

res = swapBits( 28 , 0 , 3 )

print ( "Result plain">, res)


// Эта функция меняет бит на позиции
// p1 и p2 в целом числе n

static int swapBits( int n, int p1, int p2)

int bit1 = (n >> p1) & 1;

int bit2 = (n >> p2) & 1;

int x = (bit1 ^ bit2);

/ * Поместить бит xor обратно в

их исходные позиции * /

номер так, чтобы

два набора поменялись местами * /

int result = n ^ x;

static public void Main ()

int res = swapBits(28, 0, 3);

Console.WriteLine( "Result plain">+ res);


// Этот код предоставлен akt_mit


Выход:

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

maaGames

т.е. незачем менять "содержимое", можно просто файлы переименовать/переместить.

hawkkiller

С помощью метода renameTo?Можете имеенно про код сказать, долго пытаюсь, не выходит.

maaGames

hawkkiller

maaGames, Можете пожалуйста развёрнуто ответить? Что не пытаюсь сделать, не работает. Постоянно в полях error,что странно, ведь условии path.exists() должно выполняться. Почему никто не может дать полного ответа, что самому приходиться догадываться что вы имели ввиду.У меня как-будто какой-то баг, оно не переименовывает файлы с помощью renameTo().

hawkkiller

val p1 = File("C:\\myfile.txt")
val p2 = File("C:\\mynewfile.txt\"")

var b = p2.renameTo(p1)
if(b) textView.text = "YES!"
else textView.text = "NOPE!"
Сделал вот такую проверочку и всегда NOPE!

maaGames

hawkkiller, val p2 это ошибка форматирования или двойная кавычка в конце имени и правда присутствует?
в приведённом коде p2 переименовывается в p1, соответственно и NOPE, что файла p2 не существует.

hawkkiller

maaGames, насколько я понимаю, сейчас метод move() уже не работает или устарел, даже добавив библиотеку java.nio.file.Files не работает.Не сочтите за наглость и доставучесть, но как мне, допустим поменять два файла названиями?У меня просто есть тесты на espresso и там сначала 2 недействительных имен файлов вводится, а потом уже которые есть

maaGames

hawkkiller,
сперва проверить, что оба файла существуют. Если оба существуют, то p1 переименовывается в любое временное название, p2 переименовывается в название p1, потом временное название переименовывается в p2. Т.е. нельзя сразу переименовать p1 в p2, потмоу что p2 уже существует.

hawkkiller

val path1 = File(
Environment.getExternalStorageDirectory(),
"$filepath")
val path2 = File(
Environment.getExternalStorageDirectory(),
"$filepath2")

var some_file= File(Environment.getExternalStorageDirectory(), "промежуточный")
some_file.renameTo(path1)
if(path1.exists()) path1.renameTo(path2)
>
else filepath.setText("error", TextView.BufferType.EDITABLE)
if(path2.exists()) path2.renameTo(some_file)
>
else filepath2.setText("error", TextView.BufferType.EDITABLE)

>
Сделал вот так, но всё равно не проходит тесты, всё время error.Что может быть причиной?

hawkkiller

5f1712e09419c402093672.jpg


Про метод move()

maaGames

hawkkiller, Не нужно создавать временный файл. Нужно переименовать существующий во временный. т.е. никакой some_file не нужен, нужно лишь имя.
path1.renameto("временный");
path2.renameTo(filepath1);
path1.renameto(filepath2);

move ещё два аргумента содержит с путём исходного и путём целевого файла. Странн, что без аргументов компилируется.

hawkkiller


А так ругается на String, вместо File! .

А тут на EditText вместо File! . Казалось бы, лёгкая задача, но либо лыжы не едут, либо я ..

Читайте также: