Ввод данных случайным образом

К выполнению лабораторной работы №2.

Тема: «Создание ООП обработки массивов данных сложной структуры».

Задание на ЛР2совпадает с заданием на ЛР1, но дополнительно

1) должна быть написана отдельная функция сохранения исходных данных в файлах на диске (текстовом и двоичном);

2) спроектировать выполнение пунктова) и б)индивидуального задания так,чтобыисходные данные могли считываться как из двоичного файла , так и вводиться с клавиатуры (для этого следует создать отдельные функции);

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

Пример индивидуального задания:

Имеются сведенияо результатах сдачи сессии студентами группы:

Фамилия студента и оценки за 3 экзамена.

Требуется: а) для каждого студента найти средний балл за сессию;

б) по каждому предмету найти средний балл группы, а также процент отличников и процент не сдавших экзамен студентов с указанием названий предметов.

Пример оформления программного кода:

// Подключение стандартных библиотек:

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<string.h>

#include<iostream.h>

#include<io.h>

struct Zap{ char Fam[10]; //Фамилия студента

int Bal[3]; //Оценки за сессию

float SRED; }; //Средний балл

struct Rec{ char Naz[15]; //Название предмета

float PR[3];}; //Средний балл и искомые %-ты

//****************************

Class PRED{//Описание класса для работы с предметами

friend class STUD;

Rec* P;

int N;

public:

void Input(); //Ввод названий предметов

void Print(); //Вывод результата

PRED(int k){N=k; P=new Rec[k];}

~PRED(){delete []P;}

};

//Описание функций класса PRED:

void PRED::Input(){//Ввод названий предметов:

for(int i=0;i<N;i++){

cout<<"\n Input nazv. predmeta : "<<i+1<<"). ";cin>>P[i].Naz;

for(int j=0;j<3;j++)P[i].PR[j]=0;

}}

///Вывод результата:

void PRED::Print(){ FILE *f=stdout; int k;

do{ fprintf(f,"\n---------------------------------------------------");

fprintf(f,"\n N Nazvanie SR_Bal Proc_5 Proc_2 ");

fprintf(f,"\n---------------------------------------------------");

for(int i=0;i<N;i++){

fprintf(f,"\n%4d). %15.14s",i+1,P[i].Naz);

for(int j=0;j<3;j++)fprintf(f," %8.2f",P[i].PR[j]);

}

fprintf(f,"\n---------------------------------------------------");

k=0;

if(f==stdout){cout<<"\n Save in file Predmet.txt ? (1-Yes, 0-No): ";

cin>>k;if(k)f=fopen("Predmet.txt","wt");}

else fclose(f);

}while(k); }

//************************************

Class STUD{//Описание класса для работы со студентами

Zap* Mas;

int kol; //количество студентов в группе

public:

void Input(); //Ввод исходных данных

void Input_con(int n); //Ввод данных с клавиатуры

void Input_RND(int n); //Ввод данных случайным образом

void Input_FL(); //Ввод данных из файла

void Input_bin(FILE*); //Чтение данных из двоичного файла

void Action(); //Выполнение пункта а) задания

void Print_SR(); //Вычисления ср.баллов по предметам

void Print_table(FILE*); //Вывод таблицы результата

void Write_bin(FILE*); //Запись данных в двоичный файл

void Print_Sort(); //Вывод результата сортировки

int Save(); //Сохранение результата работы

void Sort_Pole(int);//Сортировка данных

void Punkt_B(PRED&); //Выполнение пункта б) задания

STUD(){kol=0;} //Конструктор класса

~STUD(){delete []Mas;} //Деструктор класса

};

//Описание функций класса STUD:

 

Ввод исходных данных

void STUD::Input(){ int i,N;

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(N);break;

case 2:Input_RND(N);break;

case 3:Input_FL();

} }

Ввод данных из файла

void STUD::Input_FL(){FILE* ft; int L; char NF[15];

//------------------------------------------

do{cout<<"\n Input File Name bin-file: ";cin>>NF;

ft=fopen(NF,"rb");

if(!ft){cout<<"\n File -> no exist!";break;}

Input_bin(ft); fclose(ft);L=0;

}while(L); }

Чтение данных из двоичного файла

void STUD::Input_bin(FILE* f){ Zap z;

if(kol)delete []Mas;

int i=fileno(f);

long L=filelength(i);

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);

cout<<"\n Press any key...";getch(); }

Ввод данных с клавиатуры

void STUD::Input_con(int n){ Zap z;

if(n>kol){ if(kol) delete []Mas; kol=n; Mas=new Zap[n]; }

for(int i=0;i<n;i++){

printf("\n %d). Input FAM: ",i+1); cin>>z.Fam;

for(int j=0;j<3;j++){

printf(" Input BAL %d: ",j+1); cin>>z.Bal[j];

}

z.SRED=0; Mas[i]=z; } }

Ввод данных случайным образом

void STUD::Input_RND(int n){ Zap z; int i,j;

char st[]="QWERTYUIOPASDFGHJKLZXCVBNM";

int k,L=strlen(st);

if(n>kol){ if(kol) delete []Mas; kol=n; Mas=new Zap[n]; }

randomize();

for(i=0;i<n;i++){ k=random(7);

for(j=0;j<2+k;j++) z.Fam[j]=st[random(L)];

z.Fam[j]='\0';

for(j=0;j<3;j++)z.Bal[j]=1+random(5);

z.SRED=0; Mas[i]=z; } }