Программирование на C / C++ / Лабораторная работа №31 / laba 8
.doc
Задание: Строка таблицы данных содержит следующую информацию о первокурсниках: фамилия, имя, отечество, группа, количество баллов, набранных на вступительных экзаменах.
Требуется найти: перечень групп, в которых максимальное количество студентов, набравших максимальное количество баллов.
Считывание исходного файла с клавиатуры, вывод на экран.
Сортировка:
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