Скачиваний:
20
Добавлен:
02.05.2014
Размер:
285.18 Кб
Скачать

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

Требуется найти: перечень групп, в которых максимальное количество студентов, набравших максимальное количество баллов.

Считывание исходного файла с клавиатуры, вывод на экран.

Сортировка:

1)Сортировка групп, в которых максимальное количество студентов, набравших максимальное количество баллов, в алфавитном порядке. Вывод на экран и в файл.

2)Сортировка фамилий, имен, отчеств в алфавитном порядке.

Вывод на экран и в файл.

3)Сортировка всех групп в алфавитном порядке. Вывод на

экран и в файл.

4)Сортировка по количеству баллов в порядке убывания.

Вывод на экран и в файл.

Цель работы: Изучение сортировки массивов структур и файловых потоков.

Блок-схема главной программы:

i=0

нет

Блок-схема подпрограммы 1:

m=0

m++

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Чтение из файла «test.txt»

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

нет

да

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Чтение из файла «test.txt»

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Блок-схема подпрограммы 2:

Блок-схема подпрограммы 3:

Блок-схема подпрограммы 4:

l=l-1

да

нет

Блок-схема подпрограммы 7:

Блок-схема подпрограммы 8:

Блок-схема подпрограммы 9:

Программа:

#include<iostream.h>

#include<fstream.h>

#include<string.h>

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#include<iomanip.h>

const int l=31;

struct fio

{

char fam[l];

char im[l];

char ot[l];

};

struct student

{

fio f;

char gr[l];

int col;

};

struct gruppa

{

char gr[l];

int ng;

};

ifstream in;

ofstream out;

void inputstfile(student s[],int &m);

void outputst(student s[],int m);

void outputstfile(student s[],int m);

void outputgrfile(gruppa z[], int m);

void alfsortgr(gruppa z[],int m);

void sortgr(gruppa z[], int m);

void alfsortfio(student s[], int m);

void sortcol(student st[], int m);

//Podprogramma 1//

void inputstfile(student s[],int &m)

{

m=0;

in>>s[m].f.fam>>s[m].f.im>>s[m].f.ot>>s[m].gr>>s[m].col;

while (in.good())

{

m++;

in>>s[m].f.fam>>s[m].f.im>>s[m].f.ot>>s[m].gr>>s[m].col;

}

}

//Podprogramma 2//

void outputst(student s[],int m)

{ int i;

for(i=0;i<m;i++)

{

cout<<setw(14)<<setiosflags(ios::left)<<s[i].f.fam

<<setw(11)<<setiosflags(ios::left)<<s[i].f.im

<<setw(15)<<setiosflags(ios::left)<<s[i].f.ot

<<setw(6)<<setiosflags(ios::left)<<s[i].gr

<<setw(10)<<setiosflags(ios::left)<<s[i].col<<endl;

if((i+1)%10==0) getch();

} getch();

}

//Podprogramma 3//

void outputstfile (student s[], int m)

{int i;

out<<"familiya "<<"imya "<<"otchestvo "<<"gruppa "<<"Kolichestvo ballov"<<endl;

for(i=0;i<m;i++)

out<<setw(14)<<setiosflags(ios::left)<<s[i].f.fam

<<setw(11)<<setiosflags(ios::left)<<s[i].f.im

<<setw(15)<<setiosflags(ios::left)<<s[i].f.ot

<<setw(6)<<setiosflags(ios::left)<<s[i].gr

<<setw(10)<<setiosflags(ios::left)<<s[i].col<<endl;

}

//Podprogramma 4//

void outputgrfile(gruppa z[], int m)

{int i,max1;

max1=z[0].ng;

for(i=0;i<m;i++)

if (z[i].ng>=max1) max1=z[i].ng;

out<<"gruppa "<<"kolichestvo studentov MAX "<<endl;

for(i=0;i<m;i++)

if (z[i].ng==max1) {out<<setw(6)<<setiosflags(ios::left)<<z[i].gr

<<setw(10)<<setiosflags(ios::left)<<z[i].ng<<endl;}

}

//Podrogramma 5//

void alfsortfio(student s[],int m)

{int i,l,fl;

student t;

l=m-1;

do

{ fl=0;

for(i=0;i<l;i++)

{

if(strcmp(s[i].f.fam,s[i+1].f.fam)>0)

{

t=s[i];

s[i]=s[i+1];

s[i+1]=t;

fl=1;

}

else if(strcmp(s[i].f.fam,s[i+1].f.fam)==0)

if(strcmp(s[i].f.im,s[i+1].f.im)>0)

{

t=s[i];

s[i]=s[i+1];

s[i+1]=t;

fl=1;

}

else if(strcmp(s[i].f.im,s[i+1].f.im)==0)

if(strcmp(s[i].f.ot,s[i+1].f.ot)>0)

{

t=s[i];

s[i]=s[i+1];

s[i+1]=t;

fl=1;

}

}

l--;

} while(fl==1);

}

//Podprogramma 6//

void alfsortgr(student s[],int m)

{int fl,i,l;

student t;

l=m-1;

do

{ fl=0;

for(i=0;i<l;i++)

{

if(strcmp(s[i].gr,s[i+1].gr)>0)

{

t=s[i];

s[i]=s[i+1];

s[i+1]=t;

fl=1;

}

else if(strcmp(s[i].gr,s[i+1].gr)==0)

if(strcmp(s[i].f.fam,s[i+1].f.fam)>0)

{

t=s[i];

s[i]=s[i+1];

s[i+1]=t;

fl=1;

}

else if(strcmp(s[i].f.fam,s[i+1].f.fam)==0)

if(strcmp(s[i].f.im,s[i+1].f.im)>0)

{

t=s[i];

s[i]=s[i+1];

s[i+1]=t;

fl=1;

}

else if(strcmp(s[i].f.im,s[i+1].f.im)==0)

if(strcmp(s[i].f.ot,s[i+1].f.ot)>0)

{

t=s[i];

s[i]=s[i+1];

s[i+1]=t;

fl=1;

}

}

l--;

} while(fl==1);

}

//Podprogramma 7//

void outputgrmax(gruppa z[],int m)

{int i,max1;

max1=z[0].ng;

cout<<" \n";

cout<<"Tablichka grupp.\n";

for(i=0;i<m;i++)

if (z[i].ng>=max1) max1=z[i].ng;

for(i=0;i<m;i++)

{ if (z[i].ng==max1)

cout<<setw(6)<<setiosflags(ios::left)<<z[i].gr

<<setw(10)<<setiosflags(ios::left)<<z[i].ng<<endl;

if((i+1)%10==0) getch();

}

}

//Podrogramma 8//

void sortcol(student s[], int m)

{int fl,i,l;

student t;

l=m-1;

do

{ fl=0;

for(i=0;i<l;i++)

{if(s[i].col<s[i+1].col)

{t=s[i];

s[i]=s[i+1];

s[i+1]=t;

fl=1;

}

if(s[i].col==s[i+1].col)

if(strcmp(s[i].gr,s[i+1].gr)>0)

{

t=s[i];

s[i]=s[i+1];

s[i+1]=t;

fl=1;

}

}

l--;

}while(fl==1);

}

//Podrogramma 9//

void sortgr(gruppa z[], int m)

{int i,l,fl;

gruppa t;

l=m-1;

do

{

fl=0;

for(i=0;i<l;i++)

{if(strcmp(z[i].gr,z[i+1].gr)>0)

{

t=z[i];

z[i]=z[i+1];

z[i+1]=t;

fl=1;

}

}

l--;

} while(fl==1);

}

//Glavnaya programma//

const int N=100;

void main()

{

student a[N];

gruppa b[N];

int n,i,j,k,fl,max;

char file[l];

cout<<endl<<"imya faila:";

cin>>file;

in.open(file);

if (in==NULL) {

cout<<"fail ne naiden";

getch;

exit(1);

}

inputstfile(a,n);

in.close();

outputst(a,n);

max=a[0].col;

k=0;

for(i=1;i<n;i++)

if (a[i].col>max) max=a[i].col;

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

if (a[i].col==max)

{fl=1;

for(j=0;j<k;j++)

if(strcmp(a[i].gr,b[j].gr)==0)

{fl=0;

b[j].ng++;

}

if (fl==1)

{strcpy(b[k].gr,a[i].gr);

b[k].ng=1;

k++;

}

}

cout<<"Uporyadochnyi massiv GRUPPMAX v alfavitnom poryadke:\n";

sortgr(b,k);

outputgrmax(b,k);

out.open("result1.txt");

if(out==NULL) {

cout<<"File ne sozdan";

getch();

exit(1);

}

outputgrfile(b,k);

out.close();

alfsortfio(a,n);

cout<<" \n";

cout<<"Uporyadochnyi massiv FIO v alfavitnom poryadke:\n";

outputst(a,n);

out.open("result2.txt");

if(out==NULL) {

cout<<"File ne sozdan";

getch();

exit(1);

}

outputstfile(a,n);

out.close();

cout<<" \n";

cout<<"Uporyadochnyi massiv po kolichestvu ballov:\n";

sortcol(a,n);

outputst(a,n);

out.open("resultst.txt");

if(out==NULL) {

cout<<"File ne sozdan";

getch();

exit(1);

}

outputstfile(a,n);

out.close();

alfsortgr(a,n);

cout<<" \n";

cout<<"Uporyadochnyi massiv grupp v alfavitnom poryadke:\n";

outputst(a,n);

out.open("result3.txt");

if(out==NULL) {

cout<<"File ne sozdan";

getch();

exit(1);

}

outputstfile(a,n);

out.close();

}

Тест:

Имя файла: test.txt

File: test.txt

Ivanov Petr Sergeevich MO 87

Kutlubaeva Kamila Yulaevna IVT 87

Kurochkin Ivan Vasilevich VM 78

Gabbasova Alfiya Ilgizovna IVT 84

Duzenko Olga Petrovna ACOI 87

Bashirov Ramil Salavatovich IVT 75

Garifullin Ildar Maratovich VM 87

Samoilov Fedor Nicolaevich IVT 87

Lastov Aleksey Viktorovich MO 87

Chinchik Maksim Anatolievich IVT 76

Gareeva Regina Radikovna IVT 87

Mochalkin Pavel Aleksandrovich CAPR 78

Gates Bill Microsoftovich MO 0

Ganeev Rinat Rashitovich ACOI 78

Shiyapova Svetlana Salavotovna CAPR 85

Ascarov Aidar Muratovich ACOI 87

Blinov Pavel Sergeevich IVT 65

Vasiliev Evgeniy Gavrilovich VM 65

Rednikova Ekaterina Dmitrievna CAPR 87

Disketkin Flash Modemovich ACOI 79

Bureeva Kceniya Mihailovna VM 76

Mustafina Adelya Ramilevna CAPR 78

Yudina Anastasiya Valerievna MO 73

Murtazin Bulat Ravilevich CAPR 54

Starosvetskiy Artem Vadimovich ACOI 87

Shiyapova Alina Salavotovna CAPR 82

Shiyapova Karina Salavotovna CAPR 82

Vasiliev Evgeniy Benediktovich MO 87

Упорядоченный в алфавитном порядке массив групп, в которых максимальное количество студентов, набравших максимальное количество баллов.

File: result1.txt

Uporyadochnyi massiv GRUPPMAX v alfavitnom poryadke:

gruppa kolichestvo studentov MAX

ACOI 3

IVT 3

MO 3

Упорядоченный массив фамилий, имен и отчеств в алфавитном порядке.

File: result2.txt

familiya imya otchestvo gruppa Kolichestvo ballov

Ascarov Aidar Muratovich ACOI 87

Bashirov Ramil Salavatovich IVT 75

Blinov Pavel Sergeevich IVT 65

Bureeva Kceniya Mihailovna VM 76

Chinchik Maksim Anatolievich IVT 76

Disketkin Flash Modemovich ACOI 79

Duzenko Olga Petrovna ACOI 87

Gabbasova Alfiya Ilgizovna IVT 84

Ganeev Rinat Rashitovich ACOI 78

Gareeva Regina Radikovna IVT 87

Garifullin Ildar Maratovich VM 87

Gates Bill Microsoftovich MO 0

Ivanov Petr Sergeevich MO 87

Kurochkin Ivan Vasilevich VM 78

Kutlubaeva Kamila Yulaevna IVT 87

Lastov Aleksey Viktorovich MO 87

Mochalkin Pavel Aleksandrovich CAPR 78

Murtazin Bulat Ravilevich CAPR 54

Mustafina Adelya Ramilevna CAPR 78

Rednikova Ekaterina Dmitrievna CAPR 87

Samoilov Fedor Nicolaevich IVT 87

Shiyapova Alina Salavotovna CAPR 82

Shiyapova Karina Salavotovna CAPR 82

Shiyapova Svetlana Salavotovna CAPR 85

Starosvetskiy Artem Vadimovich ACOI 87

Vasiliev Evgeniy Benediktovich MO 87

Vasiliev Evgeniy Gavrilovich VM 65

Yudina Anastasiya Valerievna MO 73

Упорядоченный массив групп в алфавитном порядке.

File: result3.txt

familiya imya otchestvo gruppa Kolichestvo ballov

Ascarov Aidar Muratovich ACOI 87

Disketkin Flash Modemovich ACOI 79

Duzenko Olga Petrovna ACOI 87

Ganeev Rinat Rashitovich ACOI 78

Starosvetskiy Artem Vadimovich ACOI 87

Mochalkin Pavel Aleksandrovich CAPR 78

Murtazin Bulat Ravilevich CAPR 54

Mustafina Adelya Ramilevna CAPR 78

Rednikova Ekaterina Dmitrievna CAPR 87

Shiyapova Alina Salavotovna CAPR 82

Shiyapova Karina Salavotovna CAPR 82

Shiyapova Svetlana Salavotovna CAPR 85

Bashirov Ramil Salavatovich IVT 75

Blinov Pavel Sergeevich IVT 65

Chinchik Maksim Anatolievich IVT 76

Gabbasova Alfiya Ilgizovna IVT 84

Gareeva Regina Radikovna IVT 87

Kutlubaeva Kamila Yulaevna IVT 87

Samoilov Fedor Nicolaevich IVT 87

Gates Bill Microsoftovich MO 0

Ivanov Petr Sergeevich MO 87

Lastov Aleksey Viktorovich MO 87

Vasiliev Evgeniy Benediktovich MO 87

Yudina Anastasiya Valerievna MO 73

Bureeva Kceniya Mihailovna VM 76

Garifullin Ildar Maratovich VM 87

Kurochkin Ivan Vasilevich VM 78

Vasiliev Evgeniy Gavrilovich VM 65

Упорядоченный массив по количеству баллов.

File: resultst.txt

familiya imya otchestvo gruppa Kolichestvo ballov

Ascarov Aidar Muratovich ACOI 87

Duzenko Olga Petrovna ACOI 87

Starosvetskiy Artem Vadimovich ACOI 87

Rednikova Ekaterina Dmitrievna CAPR 87

Gareeva Regina Radikovna IVT 87

Kutlubaeva Kamila Yulaevna IVT 87

Samoilov Fedor Nicolaevich IVT 87

Ivanov Petr Sergeevich MO 87

Lastov Aleksey Viktorovich MO 87

Vasiliev Evgeniy Benediktovich MO 87

Garifullin Ildar Maratovich VM 87

Shiyapova Svetlana Salavotovna CAPR 85

Gabbasova Alfiya Ilgizovna IVT 84

Shiyapova Alina Salavotovna CAPR 82

Shiyapova Karina Salavotovna CAPR 82

Disketkin Flash Modemovich ACOI 79

Ganeev Rinat Rashitovich ACOI 78

Mochalkin Pavel Aleksandrovich CAPR 78

Mustafina Adelya Ramilevna CAPR 78

Kurochkin Ivan Vasilevich VM 78

Chinchik Maksim Anatolievich IVT 76

Bureeva Kceniya Mihailovna VM 76

Bashirov Ramil Salavatovich IVT 75

Yudina Anastasiya Valerievna MO 73

Blinov Pavel Sergeevich IVT 65

Vasiliev Evgeniy Gavrilovich VM 65

Murtazin Bulat Ravilevich CAPR 54

Gates Bill Microsoftovich MO 0

Соседние файлы в папке Лабораторная работа №31