Форум программистов, компьютерный форум CyberForum.ru

Записать исходные данные на диск в виде текстовых и двоичных файлов - C++

Восстановить пароль Регистрация
 
Polls
0 / 0 / 0
Регистрация: 09.02.2014
Сообщений: 15
09.02.2014, 16:14     Записать исходные данные на диск в виде текстовых и двоичных файлов #1
Имеются сведения по студентам: студент, балл в расчете на одного человека за каждый год из последних 5-ти лет. Найти для каждого студента средний балл за все пять лет и год, когда балл был максимальным
Студентов у которых баллы в течении 5-ти лет постоянно увеличивался, и студента с максимальным средним годовым балам за пять лет.

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



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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<io.h>
#include<string.h>
#include<iostream.h>
//----------------------------------
int N_Max(int* A,int N){
//----------------------------------
int i,k=0;
for(i=1;i<N;i++)if(A[k]<A[i])k=i;
return k;              }
//----------------------------------
float SR_Mas(int* A,int N){
//----------------------------------
float S=0;
for(int i=0;i<N;i++)S+=A[i];
if(N)S/=N;
return S;                 }
//----------------------------------
void Str_RND(char* s,int M){
//----------------------------------
char st[]="QWERTYUIOPASDFGHJKLZXCVBNM";
int j,k,L=strlen(st);
k=rand()%M;
for(j=0;j<2+k;j++)s[j]=st[rand()%L];
​​  s[j]='\0';   }
//----------------------------------
int Nom_Pole(){ int i,p; char s[8];
//----------------------------------
do{
cout<<"\n Input nomer polya (1 - 8) for sorting (OR 0 - Exit): ";
gets(s);
p=atoi(s);
}while((p<0)||(p>8));
return p;       }
//----------------------------------
//  Структура данных:
//----------------------------------
struct Zap{ char Fam[10];
           int Bal[4];
​    float SRED;
           int Max;
           int Nom; };
//----------------------------------
int Sravnenie(Zap A,Zap B,int p){
//----------------------------------
int b;
switch(p){
case 1:b=strcmp(A.Fam,B.Fam)<0;break;
case 2:case 3:case 4:case 5:
      b=A.Bal[p-2]<B.Bal[p-2];break;
case 6:b=A.SRED<B.SRED;break;
case 7:b=A.Max<B.Max;break;
case 8:b=A.Nom<B.Nom;break;
        }
return b;                       }
//-------------------------------------------------
int Input(Zap* Mas,int n);                    // 0
//-------------------------------------------------
void Input_con(Zap* Mas,int n);               // 1
void Input_RND(Zap* Mas,int n);               // 2
int Input_bin(FILE* f,Zap* Mas);              // 3
void Print_table(FILE *ft,Zap* Mas,int kol);  // 4
void Action(Zap* Mas,int kol);                // 5
void Sortirovka(Zap* Mas,int kol,int p);      // 6
int Save(Zap* Mas,int kol);                   // 7
void Write_bin(FILE* f, Zap* Mas, int kol);   // 8
//-------------------------------------------------
int Input(Zap* Mas){ int N,i;char NF[15];     // 0
//-------------------------------------------------
FILE * ft;
do{ 
cout<<"\n Input data from :";
cout<<"\n 1- Consol, 2- RND, 3- File, 0- Exit: -> "; cin>>i;
if(!i)exit(0);
if(i<3){cout<<"\n Input kol-vo zapisei: "; cin>>N;}
switch(i){
case 1:Input_con(Mas,N);break;           // 1
case 2:Input_RND(Mas,N);break;           // 2
case 3:N=0;
      cout<<"\n Input File Name: ";cin>>NF;
     ft=fopen(NF,"rb");
     if(!ft){cout<<"\n File -> no exist!";break;}
      N=Input_bin(ft,Mas); fclose(ft);  // 3
         }
 }while(N==0);
return N;         }
//==================================================
void main(){ int N,p; clrscr();
//==================================================
Zap* Stud;
N=Input(Stud); // 0
//-----------------------------------
Print_table(stdout,Stud,N);// 4
Action(Stud,N);            // 5
Print_table(stdout,Stud,N);// 4
//-----------------------------------
while(p=Nom_Pole()){
Sortirovka(Stud,N,p);      // 6
Print_table(stdout,Stud,N);// 4
Save(Stud,N);      }       // 7
             }
//==================================================
//- Описания функций:  ----------------------
void Input_con(Zap* Mas,int kol){ Zap z;     // 1
//------------------------------------------------
for(int i=0;i<kol;i++){
printf("\n %d). Input FAM: ",i+1); cin>>z.Fam;
for(int j=0;j<4;j++){
printf("     Input BAL %d: ",j+1); cin>>z.Bal[j];
                    }
z.SRED=0; z.Max=0; z.Nom=0; Mas[i]=z; } }
//------------------------------------------------
void Input_RND(Zap* Mas,int n){ Zap z;       // 2
//------------------------------------------------
int i,j;
srand(1);
for(i=0;i<n;i++){ Str_RND(z.Fam,8);
for(j=0;j<4;j++)z.Bal[j]=1+rand()%15;
z.SRED=0; z.Max=0; z.Nom=0;
Mas[i]=z;       }       }
//-----------------------------------------------
int Input_bin(FILE* f,Zap* Mas){             //3
//-----------------------------------------------
int i=fileno(f);
long L=filelength(i);
int kol=L/sizeof(Zap);
cout<<"\n Kol-vo zapisei="<<kol;
Mas=new Zap[kol];
for(i=0;i<kol;i++)fread(Mas+i,sizeof(Zap),1,f);
return kol;                  }
//---------------------------------------------------------
void Print_table(FILE *ft,Zap* Mas,int kol){int i,j;  // 4
//---------------------------------------------------------
if(ft==stdout)clrscr();
fprintf(ft,"\n ----------1---------2------3------4-------5------6--------7----8---");
fprintf(ft,"\n   N      Fam        B1     B2     B3      B4    SRED     Max  Nom");
fprintf(ft,"\n -------------------------------------------------------------------");
for(i=0;i<kol;i++){ fprintf(ft,"\n %2d). %10s ",i+1,Mas[i].Fam);
for(j=0;j<4;j++)fprintf(ft," %5d ",Mas[i].Bal[j]);
if(Mas[i].Nom>0)fprintf(ft," %8.2f %6d %4d",
Mas[i].SRED,Mas[i].Max,Mas[i].Nom);
                   }
fprintf(ft,"\n -------------------------------------------------------------------");
cout<<"\n Press any key for continue ..."; getch();
                       }
//--------------------------------------------------
void Action(Zap* Mas,int kol){ int i,j;       // 5
//--------------------------------------------------
for( i=0;i<kol;i++){
j=N_Max(Mas[i].Bal,4);
Mas[i].Nom=j+1;
Mas[i].Max=Mas[i].Bal[j];
Mas[i].SRED=SR_Mas(Mas[i].Bal,4);
                  }}
//--------------------------------------------------
void Sortirovka(Zap* Mas,int kol,int p){      // 6
//--------------------------------------------------
int i,j,f,c; Zap z;
cout<<"\n Increasing (A-Z)? (1-Yes, 0-No): "; cin>>c;
for(i=0;i<kol;i++)for(j=i+1;j<kol;j++){
                 f=Sravnenie(Mas[i],Mas[j],p);
                 if(c)f=!f;
                 if(f){z=Mas[i];Mas[i]=Mas[j];Mas[j]=z;}
     вЂ‹вЂ‹вЂ‹               }}
//---------------------------------------------
int Save(Zap* Mas, int kol){              // 7
//---------------------------------------------
FILE* ft; int L; char NF[15];
cout<<"\n Save in File: 1 - txt, 2 - bin ? (0 - No): ";cin>>L;
if(L>0){cout<<"\n Input File Name: ";cin>>NF;}
switch(L){
case 1:ft=fopen(NF,"wt"); Print_table(ft,Mas,kol);fclose(ft);break;
case 2:ft=fopen(NF,"wb"); Write_bin(ft,Mas,kol); fclose(ft); // 8
         }
return L;       }
//------------------------------------------------
void Write_bin(FILE* f, Zap* Mas, int kol){ // 8
//------------------------------------------------
for(int i=0;i<kol;i++)fwrite(Mas+i,sizeof(Zap),1,f);
cout<<"\n File *.bin is ready! "; getch();}
Добавлено через 1 час 59 минут
Как переделать этот код под свою задачу?

Добавлено через 1 час 16 минут
...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2014, 16:14     Записать исходные данные на диск в виде текстовых и двоичных файлов
Посмотрите здесь:

Использование типизированных и двоичных файлов. C++
Ввод/вывод двоичных файлов C++
C++ Помогите пожалуйста!Написать программу, используя только побитовые операции. Представить исходные данные и/или результаты в двоичном виде
C++ Помогите пожалуйста!Написать программу, используя только побитовые операции. Представить исходные данные и/или результаты в двоичном виде
C++ Запись и чтение двоичных файлов
Записать данные двух бинарных файлов в один C++
Как получить исходные данные из 10-й строки файла? C++
C++ Переписать код с использованием двоичных файлов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 05:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru