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

Двоичные и текстовые файлы

05.06.2018, 18:43. Показов 813. Ответов 3
Метки нет (Все метки)

Задание: Создать двоичный файл и записать в него n целых чисел. Создать массив из исходного файла, записав в него числа, расположенные в файле между минимальным и максимальным элементами и записать эти числа в текстовый файл.
Должно быть 2 программы: 1-ая создает двоичный файл и записывает в него информацию, а вторая считывает из этого файла информацию, обрабатывает и заносит числа в текстовый файл.

Мой код:
1)
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
//Создание и запись в файл
#include <iostream>
#include <fstream>
 
using namespace std;
 
//создание файла и заполнение его массиво из n элементов
 
void CreateFile(char *fileName, int N)
{
int a;
 ofstream f;
 f.open(fileName,ios::out | ios::binary);
 for(int i = 0; i < N; ++i)
 {
     cout<<"a= ";
     cin>>a;
     f<<a<<"\t";
 }
 f.close();
}
 
int main()
{
    setlocale(LC_ALL,"russian");
    int N;
    char *FileName = "C:\\Users\\я\\Desktop\\input";
    cout<<"Введите количество элементов массива : ";
    cin>>N;
    CreateFile(FileName,N);
    cout<<"Массив записан";
    return 0;
}

2)
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
//Чтение информации из двоичного файла и обработка информации, после чего запись в текстовый файл
#include <iostream>
#include <fstream>
 
using namespace std;
 
int Search_Max_in_File(char *fileName,int N)
{
FILE *f;
int a;
int maximum,max_i;
f=fopen(fileName,"rb");
int i = 0;
fseek(f,i*sizeof(int),SEEK_SET);
fread(&a,sizeof(a),1,f);
maximum = a; max_i = 0;
for(i = 1; i < N ; i++)
{
 
fseek(f,i*sizeof(int),SEEK_SET);
fread(&a,sizeof(a),1,f);
if(a > maximum)
{
maximum = a;
max_i = i;
}
}
fclose(f);
return max_i;
}
 
int Search_Min_in_File(char *fileName, int N)
{
FILE *f;
int a;
int minimum,min_i;
f=fopen(fileName,"rb");
int i = 0;
fseek(f,i*sizeof(int),SEEK_SET);
fread(&a,sizeof(a),1,f);
minimum = a; min_i = 0;
for(i = 1; i < N ; i++)
{
 
fseek(f,i*sizeof(int),SEEK_SET);
fread(&a,sizeof(a),1,f);
if(a < minimum)
{
minimum = a;
min_i = i;
}
}
fclose(f);
return min_i;
}
void CreateFile(char *fileName, int N)
{
FILE *f;
int a;
f=fopen(fileName,"wb");
for(int i = 0; i < N ; i++)
{
cout«"a=";
cin»a;
fwrite(&a,sizeof(int),1,f);
}
fclose(f);
}
 
void CreateFileOutput(char *fileName, int N,int* array)
{
ofstream f;
f.open(fileName);
for(int i=0;i<N;i++)
{
f«array[i]«"\t";
}
f.close();
}
 
void ReadFileOutput(char *fileName, int N)
{
cout«endl;
cout«"OUTPUT"«endl;
ifstream f;
int a;
f.open(fileName);
if (f)
{
for(int i = 0; i < N; i++)
{
f»a;
cout«a«"\t";
}
f.close();
}
else cout«"File not found"«endl;
}
 
void ReadFile(char *fileName, int N)
{
FILE *f;
int a;
f=fopen(fileName,"rb");
for(int i = 0; i < N ; i++)
{
fseek(f,i*sizeof(int),SEEK_SET);
fread(&a,sizeof(int),1,f);
cout«a«" ";
}
fclose(f);
}
 
void Read_Required_Array_in_File(char *fileName,char *OUTPUT, int N)
{
FILE *f;
FILE *g;
int a;
int *array;
array=new int[Search_Min_in_File(fileName,N)+N-1-Search_Max_in_File(fileName,N)];
int counter = 0;
int counter_for_array = 0;
f=fopen(fileName,"rb");
for(int i = 0; i < Search_Min_in_File(fileName,N) ; i++)
{
 
fseek(f,i*sizeof(int),SEEK_SET);
fread(&a,sizeof(a),1,f);
array[i] = a;
counter_for_array++;
}
 
for(int i = Search_Max_in_File(fileName,N)+1; i < N ; i++)
{
 
fseek(f,i*sizeof(int),SEEK_SET);
fread(&a,sizeof(a),1,f);
array[Search_Min_in_File(fileName,N)+counter] = a;
counter++;
counter_for_array++;
}
cout«endl;
cout«"ARRAY"«endl;
for(int j = 0; j < counter_for_array; j++)
{
 
cout«"a["«j«"] = "«array[j]«" ";
}
fclose(f);
CreateFileOutput(OUTPUT, counter_for_array,array);
ReadFileOutput(OUTPUT,counter_for_array);
}
 
int main()
{
char *FileName = "C:\\Users\\я\\Desktop\\input";
char *OUTPUT = "C:\\Users\\я\\Desktop\\output.txt";
int N;
 
printf("Enter the amount of numbers : N=");
scanf("%d",&N);
CreateFile(FileName,N);
ReadFile(FileName,N);
cout«endl;
Read_Required_Array_in_File(FileName,OUTPUT,N);
return 0;
}
Помогите с кодом
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2018, 18:43
Ответы с готовыми решениями:

нужно переделать код (из Файлы текстовые (FILE*) в Файлы текстовые (потоки))
вот задание для программы: 6. Задан текстовый файл input.txt. Требуется определить строки этого...

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

Двоичные файлы
У меня есть код программы работающий с текстовыми файлами, #include &lt;iostream&gt; #include &lt;conio.h&gt;...

Двоичные файлы
Здравствуйте. Кому не сложно, помогите, пожалуйста, решить задачу. Не забуду сказать &quot;спасибо&quot;. ...

3
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
05.06.2018, 19:34 2
read()/write() и fstream используй.
0
11 / 0 / 0
Регистрация: 09.04.2018
Сообщений: 48
13.06.2018, 16:42  [ТС] 3
Задание: Создать двоичный файл и записать в него n целых чисел. Создать массив из исходного файла, записав в него числа, расположенные в файле между минимальным и максимальным элементами и записать эти числа в текстовый файл.
Программу,создающую и записывающую информацию в файл я создала, основная программа:
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
#include <iostream>
#include <fstream>
#include <stdio.h>
 
using namespace std;
 
void ReadFile(char *fileName, int *min_i,int *max_i,int *N)
{
   int a;
   int min,max;
   int count=0;
   ifstream f;
   f.open(fileName,ios::in | ios::binary);
   if(f)
   {
       while(!f.eof())
       {
           f>>a;
           if(f.eof())break;
           if(count==0){max = a;*max_i=count;min=a;*min_i=count;}
           else
           {
               if (max < a){max = a;*max_i = count;}//поиск индекса максимального элемента
               if (min > a){min = a;*min_i = count;}//поиск индекса минимального элемента
 
           }
           cout<<a<<"\t";
           ++count;
       }
       f.close();
       *N = count;
   }
   else cout<<"файл не существует";
}
 
void PrintArray(int *a,int N)
{
   for(int i = 0; i < N; ++i)
   {
       cout<<"a["<<i<<"] = "<<a[i]<<"\t";
   }
}
 
void DefineArrays(char *fileName, int *minArr,int *maxArr,int min_i,int max_i,int N)//заполняет оба массива
{
   int a;
   ifstream f;
   int count = 0;
   int I,J;
   I=J=0;//индексы для заполненри массивов
   f.open(fileName,ios::in | ios::binary);
   if(f)
   {
       while(!f.eof())
       {
           f>>a;
           if(f.eof())break;
           if(count < min_i)
           {
               minArr[I++]=a;
           }
           if(count > max_i)
           {
               maxArr[J++]=a;
           }
           ++count;
       }
       f.close();
   }
   else cout<<" Файл не существует";
}
 
void CreateFileOutput(char *fileName,int *minArr,int *maxArr,int min_i,int max_i,int N) //заполнение текстового файла
{
 ofstream f;
 f.open(fileName,ios::out );
 f<<"Массив чисел до минимального\n";
 for(int i = 0; i < min_i; ++i)
 {
     f<<minArr[i]<<"\t";
 }
 f<<endl<<"Массив чисел после максимального \n";
 for(int i = 0; i < N - max_i - 1; ++i)
 {
     f<<maxArr[i]<<"\t";
 }
 f.close();
}
 
 
int main()
{
    int min_i,max_i,N; //переменные для хранения количества индексов минимального и маскимального элементов соответственно
    N=min_i=max_i=0;
    int *minArr,*maxArr;
    setlocale(LC_ALL,"russian");
    char *FileName = "C:\\input";
    char *Output = "C:\\output";
    ReadFile(FileName,&min_i,&max_i,&N);
    minArr = new int[min_i];//выделение памяти для массива элементов до минимального
    maxArr = new int[N-max_i-1];//выделение памяти для массива элементов после максимального
    DefineArrays(FileName,minArr,maxArr,min_i,max_i,N);
    cout<<endl<<"массив элементов до минимального: "<<endl;
    PrintArray(minArr,min_i);
    cout<<endl<<"массив элементов после максимального: "<<endl;
    PrintArray(maxArr,N-max_i-1);
    CreateFileOutput(Output,minArr,maxArr,min_i,max_i,N);
    return 0;
}
Помогите немного упростить, сложно для понимания
0
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
13.06.2018, 20:29 4
Что тут упрощать? И так всё просто.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2018, 20:29
Помогаю со студенческими работами здесь

двоичные файлы
дан файл целых чисел. Создать два новых файла, первый из которых содержит положительные числа из...

Двоичные файлы
Работа с двоичными файлами. Создать файл, состоящий из n вещественных чисел. Вывести на экран все...

Двоичные (бинарные ) файлы С++
Помогите, пожалуйста, переделать эту же программу (она рабочая) только для двоичного (бинарного )...

MFC и двоичные файлы
У меня есть двоичный файл. Мне необходимо считать его в приложение и вывести в виде простыни...


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

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

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