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

Создать массив из исходного файла, записав в него числа, расположенные в файле между минимальным и максимальным элемента

05.06.2018, 18:43. Показов 935. Ответов 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
Ответы с готовыми решениями:

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

Внести в массив числа, расположенные в файле между минимальным и максимальным элементами
Здравствуйте!хотел бы попросить вас о помощи, а именно с кодом программы для C++ &quot;Создать...

Массив: Внести в массив простые и совершенные числа, расположенные в файле между минимальным и максимальным элементами.
Создать типизированный файл, куда записать n целых чисел. Массив создать из исходного файла. Внести...

Файл: Из данных файла сформировать массив, записав в него числа, расположенные до max и после min элемента
Создать типизированный файл, куда записать n целых чисел. Из исходного файла сформировать массив,...

3
7639 / 6447 / 2940
Регистрация: 14.04.2014
Сообщений: 28,104
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
7639 / 6447 / 2940
Регистрация: 14.04.2014
Сообщений: 28,104
13.06.2018, 20:29 4
Что тут упрощать? И так всё просто.
0
13.06.2018, 20:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2018, 20:29
Помогаю со студенческими работами здесь

Создать массив Y, удалив все элементы в массиве Х, расположенные между его максимальным и минимальным элемента
Задание: Сформировать динамический одномерный массив Х. Создать массив Y, удалив все элементы в...

Удалить из файла все числа, расположенные между максимальным и минимальным значениями
Тип данных в файле должен быть double, нужно удалить максимальные и минимальные значения. Никак не...

Дан массив, содержащий (тип double). Удалить из массива все числа, расположенные между максимальным и минимальным
Не смог найти код на C# или даже что похоже, если у вас есть пример выполнение или сам код, можете...

Массив: Создать одномерный массив, записав в него максимальные элементы каждой строки исходного массива.
Дан двумерный массив(вводится с клавиатуры). Создать одномерный массив, записав в него максимальные...

Создать новый текстовый файл, записав в него перевернутые строки исходного файла
дан текстовый файл.создать новый текстовый файл,записав в него перевернутые строки исходного файла:...

Создать новый файл, записав в него каждую вторую строку исходного файла
Дан текстовый файл,создать новый записав в него каждую вторую строку исходного файла


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

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

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