0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 1
1

C++ Запись и чтение(вывод на экран) в бинарный файл

04.03.2018, 15:23. Показов 6466. Ответов 1
Метки нет (Все метки)

Помогите переделать, пожалуйста, чтоб была запись именно в бинарный файл, то есть используя fread и fwrite

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*Разработайте процедуру, заполняющую файл “A” произвольным количеством случайных 
вещественных чисел DOUBLE в диапазоне от -100.0 до 100.0.
Разработайте процедуру выводящие на экран данные из произвольного файла, типизированного типом данных DOUBLE. Проверьте её работоспособность на файле “A”.
Разработайте процедуру, декомпозирующую файл из первого задания следующем образом: 
целая часть значений передаётся в файл “B”, дробная направляется в файл “С”.
Разработайте процедуру, объединяющую целую и дробную части из файлов “B” и “C” (см. 
задание 3) в файл “D”.
Разработайте процедуру, позволяющую вывести содержание файла “A” в обратной последовательности и сохраните полученные данные в файл “E”*/
 
 
#include <iostream>
#include <fstream>
#include <time.h>
#include <windows.h>
#include <string>
#include <math.h>
using namespace std;
 
double tmp, result, c, c2;
int x, b;
string line;
string buff1, buff2;
int main() {
    
//-----------Запись в файл----------------------------------
    setlocale(LC_ALL, "Russian");
    
    ofstream aout, bout, fout; // файлы а, в, с
    aout.open("A.bin", ios::binary);
    bout.open("B.bin", ios::binary);
    fout.open("C.bin", ios::binary);
    srand(time(0));
    x = rand()%50; //генерация чисел для цикла
    
    for (int i=0; i<x; i++) 
    {
        tmp = rand()%2000-1000;
        result = tmp/10;
        aout << result << "\t";
        b = (int) result; 
        bout << b << "\t"; 
        c = modf(result, &c2); 
        fout << c << "\t";  
    }
    aout.close(); 
    bout.close(); 
    fout.close(); 
//------------------------------------------------------------
    
    
//----------- чтение файла-----------------------------
    cout << "Результаты записи в A.bin: " << endl;
    
    ifstream aop("A.bin");
    if (aop.is_open())
    {
    while (!aop.eof())
    {
        getline (aop, line);
        cout << line << endl;
    }
    aop.close();    
   }
   else cout << "Ошибка" << endl;
   
   cout << endl;
//  --------------------------------------
   cout << "Результаты записи целой части из файла А.bin в файл B.bin: " << endl;
    
    ifstream bop("B.bin");
    if (bop.is_open())
    {
    while (!bop.eof())
    {
        getline (bop, line);
        buff1 = line;
        cout << line << endl;       
    }
    bop.close();
    
   }
   else cout << "Ошибка" << endl;
   cout << endl;
//--------------------------------------------------
   cout << "Результаты записи дробной части из файла А.bin в файл С.bin: " << endl;
    
    ifstream cop("C.bin");
    if (cop.is_open())
    {
    while (!cop.eof())
    {
        getline (cop, line);
        buff2 = line;
        cout << line << endl;
    }
    cop.close();
    
   }
   else cout << "Ошибка" << endl;   
   cout << endl;  
   
//-----Слияние----------------------------------------   
ofstream plus;
plus.open("D.bin", ios::binary);
plus << buff1 << "\n\n" << buff2;
plus.close();
//-------------------------------------------------------
 
cout << "Результаты слияния B.bin и C.bin в файле D.bin: " << endl;
    
    ifstream openf("D.bin");
    if (openf.is_open())
    {
    while (!openf.eof())
    {
        getline (openf, line);
        cout << line << endl;
    }
    openf.close();
    
   }
   else cout << "Ошибка" << endl;   
   cout << endl;
   
   
//-------------Реверс------------------------------------------  
    ifstream in("A.bin");
    ofstream out("E.bin");
    string a;
    while (getline(in, a))
    {
        for (int i = a.length(); i--;)
        {
            out << a[i];
        }
        out << endl;
    }
    in.close();
    out.close();
// ------------------------------------------------------------------           
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2018, 15:23
Ответы с готовыми решениями:

Сохранение стека в бинарный файл и чтение-вывод на экран из него
Хотел сделать сохранение стека в бинарный файл и чтение-вывод на экран из его же. Набросал код :...

Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран
1.Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран...

Чтение и запись в бинарный файл
Ребят nомогите мне nожалуйста. Я хочу nрочитать бинарный файл , в котором заnисаны данные в виде...

Чтение и запись в бинарный файл
Добрый день! Помогите разобраться. Надо записать информацию в бинарник, а потом прочесть из него...

1
473 / 425 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
04.03.2018, 23:34 2
Не понятно, что подразумевается под "Слиянием", но исходя из представленного кода сделал аналогично ему.
Позволил себе немного обернуть в функции, но по желанию можно все вынести в main как было.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream>
#include <fstream>
#include <time.h>
#include <windows.h>
#include <string>
#include <math.h>
 
using namespace std;
 
#define type_int 1
#define type_double 2
 
void WriteOnFile(int n)
{
    ofstream afout("A.bin", ios_base::out | ios_base::binary),
             bfout("B.bin", ios_base::out | ios_base::binary),
             cfout("C.bin", ios_base::out | ios_base::binary);
 
    srand(time(NULL));
 
    for (int i = 0; i < n; i++)
    {
        double tmp = rand() % 2000 - 1000, result = tmp / 10, temp, c = modf(result, &temp);
        int b = (int)result;
        afout.write((char *)&result, sizeof(result));
        bfout.write((char *)&b, sizeof(b));
        cfout.write((char *)&c, sizeof(c));
    }
    afout.close();
    bfout.close();
    cfout.close();
}
 
void ReadFile(string file_name, int type)
{
    cout << "Чтение файла: " << file_name << endl;
    ifstream fin(file_name, ios_base::in | ios_base::binary);
    if (fin.is_open())
    {
        switch (type)
        {
        case type_int:
            int x;
            while (fin.read((char*)&x, sizeof(x)))
            {
                cout << x << "\t";
            }
            break;
        case type_double:
            double y;
            while (fin.read((char*)&y, sizeof(y)))
            {
                cout << y << "\t";
            }
            break;
        }
        cout << endl;
        fin.close();
    }
    else cout << "Ошибка при открытии: " << file_name << endl;
}
 
void Merge(string first_file_name, string second_file_name)
{
    ofstream dout("D.bin", ios_base::out | ios_base::binary);
             
    ifstream bfin("B.bin", ios_base::in | ios_base::binary),
             cfin("C.bin", ios_base::in | ios_base::binary);
    
    if (bfin.is_open() && cfin.is_open())
    {
        int x;
        double y;
        while (bfin.read((char*)&x, sizeof(x)))
        {
            y = (double)x;
            dout.write((char*)&y, sizeof(y));
        }       
        while (cfin.read((char*)&y, sizeof(y)))
        {
            dout.write((char*)&y, sizeof(y));
        }
        bfin.close();
        cfin.close();
        dout.close();
    }
    else cout << "Возникла ошибка чтения файла(ов) во время слияния" << endl;
}
 
void Reverse(string file_name)
{
    ifstream ain("A.bin", ios_base::in | ios_base::binary);
    ofstream eout("E.bin", ios_base::out | ios_base::binary);
 
    if (ain.is_open())
    {
        double x;
        ain.seekg(0, ios_base::end);
        int length = ain.tellg(), n = 1;
        while (n <= length / sizeof(double))
        {
            ain.seekg((length / sizeof(double) - n++) * sizeof(double), ain.beg);
            ain.read((char*)&x, sizeof(x));
            eout.write((char*)&x, sizeof(x));
        }
        ain.close();
        eout.close();
    }
    else cout << "Ошибка при открытии: " << file_name << endl;
}
 
int main() {
 
    //-----------Запись в файл----------------------------------
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));
    int x = rand() % 50; //генерация чисел для цикла
    WriteOnFile(x);
 
    //----------- чтение файла-----------------------------
    cout << "Результаты записи в A.bin: " << endl;
 
    ReadFile("A.bin", type_double);
    cout << "Результаты записи целой части из файла А.bin в файл B.bin: " << endl;
    ReadFile("B.bin", type_int);
    cout << "Результаты записи дробной части из файла А.bin в файл С.bin: " << endl;
    ReadFile("C.bin", type_double);
 
    //-----Слияние----------------------------------------  
    Merge("B.bin", "C.bin");
    //-------------------------------------------------------
 
    cout << "Результаты слияния B.bin и C.bin в файле D.bin: " << endl;
    ReadFile("D.bin", type_double);
 
    //-------------Реверс------------------------------------------  
    Reverse("A.bin");
    ReadFile("E.bin", type_double);
    // ------------------------------------------------------------------           
    return 0;
}
Добавлено через 5 минут
Если слияние есть образование "Целая часть"."Дробная часть", то функция Merge будет выглядеть следующим образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Merge(string first_file_name, string second_file_name)
{
    ofstream dout("D.bin", ios_base::out | ios_base::binary);
             
    ifstream bfin("B.bin", ios_base::in | ios_base::binary),
             cfin("C.bin", ios_base::in | ios_base::binary);
    
    if (bfin.is_open() && cfin.is_open())
    {
        int x;
        double y;
        while (bfin.read((char*)&x, sizeof(x)))
        {
            cfin.read((char*)&y, sizeof(y));
            y += (double)x;
            dout.write((char*)&y, sizeof(y));
        }       
        bfin.close();
        cfin.close();
        dout.close();
    }
    else cout << "Возникла ошибка чтения файла(ов) во время слияния" << endl;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2018, 23:34
Помогаю со студенческими работами здесь

Чтение и запись в бинарный файл
Записываю текст из Memo в бинарный файл, потом в другой программе пытаюсь считать текст из этого...

Запись/чтение бинарный файл
Подскажите, пожалуйста, где можно посмотреть оптимальный пример о записи и чтении списка объектов...

Чтение и запись в бинарный файл
Мой код должен решать следующую задачу: Даны два файла f 1 и f 2. Файл f 1-это инвентарный файл,...

Запись в бинарный файл и чтение из него
Нужно записать в бинарный файл блоки, каждый по 512 байт. Структура блока: Слово Число. На слово...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru