
Заполнить двоичный файл целыми числами из интервала [-3000; 8000]. Количество компонент файла
вводится с клавиатуры. Поменять местами в файле первый нечетный по значению компонент и последний четный. 1) Тест для работы 2) Написать простой алгоритм 3) Код программы 4) Скрин шот 5) Заключение (какие логические ошибки) Сделать нужно на С++

Ответы на вопрос

#include <ctime>
using namespace std;
int main() {
int n,m;
FILE *fpt;
cout<<"n = "; cin>>n;
fpt=fopen("input.dat","wb");
srand(time(NULL));
// запись файла
for (int i=0; i<n; i++) {
m=rand()%8000-3000;
cout<<m<<" ";
fwrite(&m,sizeof(int),1,fpt);
}
cout<<endl;
fclose(fpt);
fpt=fopen("input.dat","rb+");
int indf=0,indl=0,vf=0,vl=0,k=0;
// чтение файла
while (fread(&m,sizeof(int),1,fpt)!=0) {
k++;
if (!(m%2==0) && (indf==0)) { indf=k-1; vf=m; }
if ((!m==0) && (m%2==0)) { indl=k-1; vl=m; }
}
cout<<"first odd = "<<vf<<" index = "<<indf<<endl;
cout<<"last even = "<<vl<<" index = "<<indl<<endl;
// обмен первого нечетного и последнего четного
if (indf>0) {
fseek(fpt,sizeof(int)*indf,SEEK_SET);
fwrite(&vl,sizeof(int),1,fpt);
}
if (indl>0) {
fseek(fpt,sizeof(int)*indl,SEEK_SET);
fwrite(&vf,sizeof(int),1,fpt);
}
fclose(fpt);
system("pause");
return 0;
}
n = 6
4368 2733 1112 2620 1941 753
first odd = 2733 index = 1
last even = 2620 index = 3



Заполнение двоичного файла целыми числами из интервала [-3000; 8000]
Для заполнения двоичного файла целыми числами из интервала [-3000; 8000] и изменения местами первого нечетного по значению компонента и последнего четного компонента в файле, можно использовать следующий алгоритм:
1. Запросить количество компонент файла с клавиатуры. 2. Создать двоичный файл и открыть его для записи. 3. Сгенерировать случайные целые числа из интервала [-3000; 8000] и записать их в файл в указанном количестве компонент. 4. Закрыть файл. 5. Открыть файл для чтения и записи. 6. Найти первый нечетный по значению компонент и последний четный компонент в файле. 7. Поменять их местами. 8. Закрыть файл.
Пример простого алгоритма
1. Запросить количество компонент файла с клавиатуры. 2. Создать двоичный файл и открыть его для записи. 3. Сгенерировать случайные целые числа из интервала [-3000; 8000] и записать их в файл в указанном количестве компонент. 4. Закрыть файл. 5. Открыть файл для чтения и записи. 6. Найти первый нечетный по значению компонент и последний четный компонент в файле. 7. Поменять их местами. 8. Закрыть файл.
Пример кода программы на языке С++
```cpp
#include
int main() { int numComponents; std::cout << "Введите количество компонент файла: "; std::cin >> numComponents;
std::ofstream file("binary_file.bin", std::ios::binary); if (!file) { std::cout << "Ошибка открытия файла!" << std::endl; return 1; }
// Запись случайных целых чисел в файл
for (int i = 0; i < numComponents; i++) {
int randomNumber = rand() % 11001 - 3000; // Генерация чисел из интервала [-3000; 8000]
file.write(reinterpret_cast
file.close();
std::fstream fileRW("binary_file.bin", std::ios::binary | std::ios::in | std::ios::out); if (!fileRW) { std::cout << "Ошибка открытия файла!" << std::endl; return 1; }
// Поиск первого нечетного по значению компонента и последнего четного компонента
std::vector
auto firstOdd = std::find_if(components.begin(), components.end(), [](int num) { return num % 2 != 0; }); auto lastEven = std::find_if(components.rbegin(), components.rend(), [](int num) { return num % 2 == 0; });
if (firstOdd != components.end() && lastEven != components.rend().base()) { std::iter_swap(firstOdd, lastEven); }
// Запись измененных компонент обратно в файл
fileRW.seekp(0);
for (const auto& comp : components) {
fileRW.write(reinterpret_cast
fileRW.close();
std::cout << "Файл успешно обработан." << std::endl;
return 0; } ```
Заключение
В данной программе на языке C++ реализован алгоритм для заполнения двоичного файла целыми числами из интервала [-3000; 8000] и замены местами первого нечетного по значению компонента и последнего четного компонента в файле. Программа сначала генерирует случайные числа и записывает их в файл, затем находит нужные компоненты и меняет их местами. Результат сохраняется обратно в файл.
Логические ошибки: - В программе не предусмотрена обработка ошибок при открытии файла. Если файл не может быть открыт для записи или чтения, программа просто выводит сообщение об ошибке и завершается. Желательно добавить обработку таких ошибок и сообщения об ошибке для пользователя. - В программе не проверяется, что количество компонент файла, введенное пользователем, не превышает максимально возможное количество компонентов в файле. Желательно добавить проверку на допустимый диапазон количества компонентов. - В программе не предусмотрена обработка случая, когда в файле нет нечетных или четных компонентов. В этом случае программа не будет менять местами компоненты. Желательно добавить проверку на наличие нечетных и четных компонентов перед их обменом.
Примечание: Предоставленные источники не содержат информации, которая может быть использована для данного ответа.


Топ вопросов за вчера в категории Информатика








Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili