Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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

К выполнению лабораторной работы №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; } }



<== предыдущая лекция | следующая лекция ==>
Статьи из периодических изданий | Чтение данных из двоичного файла
Поделиться с друзьями:


Дата добавления: 2017-03-18; Мы поможем в написании ваших работ!; просмотров: 295 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Люди избавились бы от половины своих неприятностей, если бы договорились о значении слов. © Рене Декарт
==> читать все изречения...

2477 - | 2272 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.