Здравствуйте!
Да, вы правы, если количество чисел неизвестно, лучше использовать `std::vector`, так как он может динамически изменять свой размер. Однако, если вы хотите сначала попробовать с фиксированным массивом, это тоже возможно.
Вот пример кода на C++, который считывает числа из двух файлов, объединяет их и записывает в третий файл в отсортированном порядке. Я начну с реализации на основе фиксированного массива, как вы предложили:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
void readNumbersFromFile(const std::string& filename, int* arr, int& count, int maxSize) {
std::ifstream file(filename);
if (!file) {
std::cerr << "Error opening file: " << filename << std::endl;
return;
}
while (count < maxSize && file >> arr[count]) {
count++;
}
file.close();
}
int main() {
const int maxSize = 20;
int arr[maxSize * 2]; // Ожидаем, что у нас будет не более 40 чисел
int count = 0;
readNumbersFromFile("File_A.txt", arr, count, maxSize);
readNumbersFromFile("File_B.txt", arr + count, count, maxSize);
// Теперь у нас есть числа в массиве arr
// Сортируем массив
std::sort(arr, arr + count);
// Записываем отсортированные числа в новый файл
std::ofstream outputFile("File_C.txt");
if (!outputFile) {
std::cerr << "Error opening output file." << std::endl;
return 1;
}
for (int i = 0; i < count; ++i) {
outputFile << arr[i] << std::endl;
}
outputFile.close();
std::cout << "Numbers have been read from File_A and File_B and written to File_C sorted." << std::endl;
return 0;
}
```
### Объяснение кода:
1. **Чтение чисел из файла:**
- Функция `readNumbersFromFile` отвечает за чтение целых чисел из файла. Она принимает название файла, массив, в который будут записываться числа, количество уже прочитанных чисел и максимальный размер массива.
- В данной функции используется `ifstream` для открытия файла и чтения чисел до тех пор, пока не достигнут максимальный размер массива.
2. **Основная программа:**
- В основном функции создается массив фиксированного размера, состоящий из 40 элементов (20 чисел из каждого файла).
- Сначала считываются числа из `File_A`, затем из `File_B` (дописываются в массив).
- Далее массив сортируется с использованием функции `std::sort`.
- Отсортированные числа записываются в `File_C`.
### Использование векторов
Если вы хотите использовать векторы (что рекомендуется, если количество чисел может быть больше 40), вы можете изменить код следующим образом:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
void readNumbersFromFile(const std::string& filename, std::vector<int>& numbers) {
std::ifstream file(filename);
if (!file) {
std::cerr << "Error opening file: " << filename << std::endl;
return;
}
int number;
while (file >> number) {
numbers.push_back(number);
}
file.close();
}
int main() {
std::vector<int> numbers;
readNumbersFromFile("File_A.txt", numbers);
readNumbersFromFile("File_B.txt", numbers);
std::sort(numbers.begin(), numbers.end());
std::ofstream outputFile("File_C.txt");
if (!outputFile) {
std::cerr << "Error opening output file." << std::endl;
return 1;
}
for (const int& number : numbers) {
outputFile << number << std::endl;
}
outputFile.close();
std::cout << "Numbers have been read from File_A and File_B and written to File_C sorted." << std::endl;
return 0;
}
```
В этом варианте мы используем `std::vector` для хранения чисел, что позволяет избежать проблем с фиксированным размером массива и делает ваш код более гибким.
Надеюсь, это поможет вам выполнить вашу задачу! Если у вас есть дополнительные вопросы, не стесняйтесь обращаться.