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