Предмет: Информатика, автор: denis12541

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

Ответы

Автор ответа: srzontmp
0
#include <iostream>
#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

Похожие вопросы
Предмет: Русский язык, автор: lukanovad76