Консультация № 177796
10.04.2010, 17:01
0.00 руб.
0 35 2
Создать массив структур. Каждая структура состоит из таких элементов: факультет, курс, группа, фамилии студентов, экзаменационные оценки. Реализовать запросы, определив: 1) факультет и курс, на котором средний балл не меньше 3.5.

Я создала структуру,вводятся данные,но с выводом что-то не то...и помогите, пожалуйста, реализовать первый запрос.
Очень надеюсь на Вашу помощь.
Заранее спасибо!

Приложение:
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<iomanip> //библиотека манипуляторов ввода-вывода
using namespace std;
int n;
//////////////////////////// структура //////////////////////////////////

struct student //структура данных про студентов

{
char faculty[10];
int cousre;
char group[10];
char fio[10];
int estimation[20]; //оценки
};
int i,j;
//////////////////////////////// Ввод данных ///////////////////////////////////

void input()

{ student fam[10]; //массив студентов
char answer_stud; //параметр окончания ввода данных про студента
{
i=0;
{
cout<<"student\’s surname"<<endl;
cin>>fam[i].fio;
cout<<"student\’s faculty"<<endl;
cin>>fam[i].faculty;
cout<<"student\’s cousre"<<endl;
cin>>fam[i].cousre;
cout<<"student\’s group"<<endl;
cin>>fam[i].group;
cout<<"student\’s estimation"<<endl;
cout<<"\n"<<endl<<"\nInput number of estimations: ";
cin>>n;
for(int i=0;i<n;i++) //заполнение массива оценок
cin>>fam[i].estimation[n];
cout<<"any students else? y/n"<<endl;
answer_stud=getch();
i++;
}
getch();
}
}
//////////////////////////// вывод данных ///////////////////////

void read()
{
student fam;
for(j=0;j<i;j++)
{
cout<<"surname------faculty----cousre-----group-----estimation"<<endl;
cout.setf(ios::left); //виравнивание данных на экране слева
cout<<" "<<
setw(10)<<fam.fio<<setw(12)<<fam.faculty<<
setw(14)<<fam.cousre<<fam.group<<fam.estimation[20]<<endl;

getch();

}
}
void sred() {
float sum=0; //сумма баллов каждого студента
int k=0;
int i=0;
student fam;
student s,tmp[10],student_tmp[10];
for (i=0;i<j;i++) ;
{
student[i].estimation+=tmp[j].estimation;
strcpy(student[i].fio, tmp[j].fio);
}
student[i].estimation[20]=float(tmp[j].estimation[20])/n;
i++;
}
}

//////////////////////////////////// главная программа /////////////////////////////

int main() {
while (1) {
system("cls");
cout<<" MENU \n"<<endl;
cout<<"1. Database input by keyboard."<<endl;
cout<<"2. Read. "<<endl;
cout<<endl;
int key;
cout<< "Choosen menu item:";
cin>>key;
switch(key)
{ case 1: {input();break;}
case 2: {read();break;}
default: {cout<<"Try another time...";getch();break;}
}
}
}

Обсуждение

давно
Академик
320937
2216
10.04.2010, 21:54
общий
sagajda:
Можно ли в ответе переделать Ваш работающий код? Или требуется "вписаться" в тот текст, который Вы выложили?
давно
Академик
320937
2216
10.04.2010, 21:57
общий
Valeraja:
Цитата: 243211
если это приводит к путанице то лучше что б переменных было меньше
Вы их боитесь, переменных?
Неизвестный
10.04.2010, 23:36
общий
lamed, можно переделать...только использовать стандартный С++ (желательно без всяких "наворотов")...
Буду благодарна любой помощи.
Неизвестный
10.04.2010, 23:48
общий
Valeraja, то что я уберу кавычку и \, никак не влияет на вывод данных!
Неизвестный
11.04.2010, 00:53
общий
кавычку тоже надо убрать,а с выводом проблемы потому что нечего выводить
Неизвестный
11.04.2010, 01:16
общий
Почему нечего выводить? Я ввожу данные, а когда нажимаю 2 пункт меню (вывод)...то выводится только шапка таблички без данных.
Неизвестный
11.04.2010, 01:21
общий
Я об этом и говорю.
Неизвестный
11.04.2010, 01:41
общий
А по идее то должны выводится введенные данные.
Неизвестный
11.04.2010, 01:57
общий
Вы что то на мудрили в функции input.Перепишите её заного.Облегчите програму не много.для такой задачи этого всего что вы там написали не надо.В вашей структуре нет даных.

Убедитесь,скомпилируйте вот это

#include <cstdlib>
#include <iostream>

using namespace std;
struct a{
char b[10];};
int main(int argc, char *argv[])
{
a c;
cin>>c.b;
cout<<c.b<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}
Неизвестный
11.04.2010, 02:12
общий
Првильно, изначально данных нет - структура пустая....но когда я заполняю массив данных...то соответсвенно я его могу и просмотреть потом...вот с этим и проблема - не отображаются введенные данные.
Неизвестный
11.04.2010, 02:19
общий
почему вы массив оценок заполняете через for?
Неизвестный
11.04.2010, 05:08
общий
14.04.2010, 20:56
это ответ
Здравствуйте, sagajda.

Я немного всё переделал так что б работалопривожу код.Если что то будет не ясно спрашивайте.Програма записывает вструктуру даные и выводит или всю базу или по запросу а точнее нужно ввести бал и выдаёт студента.Всё остальное думаю вы с лёгкостью сами доделаете.Удачи.

Приложение:
#include<iostream>
#include <stdio.h>
using namespace std;

int i=0,a=1,b=0;

struct student{
char faculty[10];
char cousre[10];
char group[10];
char fio[10];
char fac[10];};

student fam[100];
int estimation[10];

void input();
void read();
void zapros();
void z();
int main()
{
int aa;
cout<<"Input: 1"<<" "<<"Read: 2"<<endl;
scanf("%i[1,2]",&aa);
if(aa == 1) metka:input();
if(aa == 2) metka1:read();
metka3:cout<<"Vsia baza: 2 , Vyjti: 3 , Dopolnit: 4 , Zapros: 5\n"<<"Nevvodit bukvy!!!"<<endl;
scanf("%i[2,3,4,5]%c",&aa);
if(aa >= 2 && aa<= 5){
if(aa == 2) goto metka1;
if(aa == 3) goto metka2;
if(aa == 4) {i++;goto metka;}
if(aa == 5) {zapros();goto metka3;}
metka2:return EXIT_SUCCESS;}
else {cout<<"Vvedion nerazresonyj simvol!"<<"\n";goto metka3;}
}
void input()
{
cout<<"student surname"<<endl;
cin>>fam[i].fio;
cout<<"student faculty"<<endl;
cin>>fam[i].faculty;
a=0;
cout<<"student cousre"<<endl;
cin>>fam[i].cousre;
cout<<"student group"<<endl;
cin>>fam[i].group;
cout<<"student estimation\n"<<"Vvesti ocenku!!!"<<endl;
cin>>estimation[i];
z();
}
void read()
{
cout<<"surname--faculty--cousre--group--estimation"<<endl;
for(int j=i;j>=0;j--){
cout<<fam[j].fio<<" "<<fam[j].faculty<<" "<<fam[j].cousre<<" "<<fam[j].group<<" "<<estimation[j]<<endl;}
}

void zapros()
{
for(int ii=0;ii<i;ii++){
if(strcoll(fam[ii].faculty,fam[i].faculty) == 0) {a++;}}
if(a == 0) {strcpy(fam[b].fac,fam[i].faculty);b++;a=1;}
//---------------------------------------------------------------------------------------------------------
double c=0;int sciot=0;
for(int jj=0;jj<b;jj++){
for(int jjj=0;jjj<=i;jjj++){
if(strcoll(fam[jj].fac,fam[jjj].faculty) == 0){
c+=estimation[jjj];sciot++;}}
if(c/sciot >= 3.5) {
cout<<"Srednij ball"<<c/sciot<<" Fakultet "<<fam[jj].fac<<"\n";c=0;sciot=0;}}
}
void z(){
for(int ii=0;ii<i;ii++){
if(strcoll(fam[ii].faculty,fam[i].faculty) == 0) {a++;}}
if(a == 0) {strcpy(fam[b].fac,fam[i].faculty);b++;a=1;}
}
давно
Академик
320937
2216
11.04.2010, 15:08
общий
Valeraja:
В задании требуется.
Реализовать запросы, определив: 1) факультет и курс, на котором средний балл не меньше 3.5.
. Ваша программа в ответе этого не делает. Если это Ваш промежуточный вариант - советую убрать его в мини-форум, доделать программу и после этого вернуть в ответ. К тому же меню у автора вопроса сделано лучше.
Неизвестный
11.04.2010, 15:12
общий
Автору не получалось с выводом данных в чём я и помог.Меню можно переделать как хочеш и формат вывода тоже.Автор просил реализовать первый вывод.
давно
Академик
320937
2216
11.04.2010, 15:14
общий
sagajda:
Для вычисления среднего балла по паре: "факультет-курс" можно пойти двумя путями.
Во-первых, можно создать дополнительную структуру {факультет, курс, суммарная_оценка}, создать новый массив структур, заполнить его из массива студентов и проходом по нему выявить нужные строки.
Во-вторых, можно отсортировать массив студентов по двум полям {факультет-курс} и после этого проходом по этому же массиву студентов выдать нужные строки.
Вычислительная сложность во втором случае выше, но программа понятней, так как нет новых сущностей.
Что выбираете?
давно
Академик
320937
2216
11.04.2010, 15:20
общий
Valeraja:
Это делается в мини-форуме.
В рассылку мини-форум не попадает, а попадает только вопрос и ответ (в данном случае ответ неверный). Таким образом, у читателей рассылки создается впечатление, что на нашем сайте нет компетентных специалистов. Вне зависимости от уровня, автор ответа (в отличие от сообщения в мини-форуме) еще и представляет все сообщество RFPRO. Поэтому ответ надо исправлять, пока модераторы его не сняли.
/* и "до кучи" - goto уберите */
Неизвестный
11.04.2010, 15:27
общий
Я создала структуру,вводятся данные,но с выводом что-то не то...и помогите, пожалуйста, реализовать первый запрос.
Очень надеюсь на Вашу помощь.
Заранее спасибо!

Ответ верный.Ну если что пусть поставит единицумне.Оценки никто не отменял ещё.И пусть у читатетелей рассылки складывается правильное впечатление.
Неизвестный
11.04.2010, 15:34
общий
Вот еще переделала код:

Код:
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<iomanip>
using namespace std;

int i=0;
int n;
//ñòðóêòóðà
struct student{
char faculty[10];
char cousre[10];
char group[10];
char fio[10];
int estimation[10];};

student fam[10];
//îöåíêè

void input();
void read();
//void zapros();

//////////////////////////////////// главная программа /////////////////////////////

int main() {
while (1) {
system("cls");
cout<<" MENU \n"<<endl;
cout<<"1. Database input by keyboard."<<endl;
cout<<"2. Read. "<<endl;
cout<<endl;
int key;
cout<< "Choosen menu item:";
cin>>key;
switch(key)
{ case 1: {input();break;}
case 2: {read();break;}
default: {cout<<"Try another time...";getch();break;}
}
}
}
void input()
{
char answer_stud;
{
i=0;
{
cout<<"student surname"<<endl;
cin>>fam[i].fio;
cout<<"student faculty"<<endl;
cin>>fam[i].faculty;
cout<<"student cousre"<<endl;
cin>>fam[i].cousre;
cout<<"student group"<<endl;
cin>>fam[i].group;
cout<<"students estimation"<<endl;
cout<<"\n"<<endl<<"\nInput number of estimations: ";
cin>>n;
for(int i=0;i<n;i++) //заполнение массива оценок
cin>>fam[i].estimation[n];
cout<<"any students else? y/n"<<endl;
answer_stud=getch();
i++;
}
getch();
}

}
void read()
{
cout<<"surname--faculty--cousre--group--estimation"<<endl;
for(int j=i;j>=0;j--){
cout<<fam[j].fio<<" "<<fam[j].faculty<<" "<<fam[j].cousre<<" "<<fam[j].group<<" ";
for (int i=0;i<n;i++)
cout<<fam[j].estimation[n]<<" "; }
getch();
}


Теперь проблема с выводом массива оценок...подскажите, что делаю не так...

lamend, отдаю предпочтение больше первому способу: создание дополнительной структуры {факультет, курс, суммарная_оценка}...
давно
Академик
320937
2216
11.04.2010, 15:47
общий
sagajda:
Правильно: lamed. Завтра к вечеру будет ответ.
Неизвестный
11.04.2010, 16:11
общий
Я не понемаю почему так привязались к этому циклу.Нельзя обьявлять две такие же самые переменные в програме.А в этом случае переменая обьявлена два раза и ещё два раза увеличивается на единицу за цикл.В моём ответе каждый индекс массива это отдельный студент или тот же если захотите.Проходим по индексам и собираем статистику.И обьясните мне что значит средний бал не меньше 3.5.Это отдельному студенту?И определить на каком он курсе?
Неизвестный
11.04.2010, 16:32
общий
lamed:
Огромное Вам спасибо!
Буду ждать ответа!
Неизвестный
11.04.2010, 16:37
общий
Valeraja:
Нет, средний бал не студента.
Нужен факультет и курс, на котором средний балл не меньше 3.5.
давно
Академик
320937
2216
12.04.2010, 13:43
общий
sagajda:
Посмотрите, пожалуйста.
Код:

#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
//#include<string.h>
#include<iomanip>

using namespace std;

const int marks = 20; // число оценок
const int size = 10; // максимальное число студентов /* размер массива */
struct TStudent //структура данных про студентов
{
char faculty[10];
int course;
char group[10];
char fio[10];
int curr_marks; // количество выставленных оценок
int estimation[marks]; //оценки
};
int n; // число студентов
TStudent v[size]; // массив студентов

void input();
void print();
void query();

/*
void sred() {
float sum=0; //сумма баллов каждого студента
int k=0;
int i=0;
student fam;
student s,tmp[10],student_tmp[10];
for (i=0;i<j;i++) ;
{
student[i].estimation+=tmp[j].estimation;
strcpy(student[i].fio, tmp[j].fio);
}
student[i].estimation[20]=float(tmp[j].estimation[20])/n;
i++;
}
}
*/

int main()
{
int key = 1;
while (key!=0)
{
system("cls");
cout << " MENU" << endl << endl;
cout << "0. Exit." << endl;
cout << "1. Database input by keyboard." << endl;
cout << "2. Print. " << endl;
cout << "3. Query. " << endl;
cout << endl;
cout << "Choosen menu item:";
cin >> key;
switch(key)
{
case 0:
cout << "I'll be back" << endl;
break;
case 1:
if (n<size)
input();
else
cout << "There no places, sorry" << endl;
break;
case 2:
print();
break;
case 3:
query();
break;
default:
cout << "Try another time...";
getch();
break;
}
}
return 0;
}

void input()
{
cout<<"student's surname"<<endl;
cin>>v[n].fio;
cout<<"student's faculty"<<endl;
cin>>v[n].faculty;
cout<<"student's course"<<endl;
cin>>v[n].course;
cout<<"student's group"<<endl;
cin>>v[n].group;
cout<<"student's estimation"<<endl<<endl<<endl<<endl;
cout<<"Input number of estimations: ";
cin>>v[n].curr_marks;
if (v[n].curr_marks<0 || v[n].curr_marks>marks)
v[n].curr_marks = 0;
for(int i=0;i<v[n].curr_marks;i++) //заполнение массива оценок
cin>>v[n].estimation[i];
n++;
}

void print()
//////////////////////////// вывод данных ///////////////////////
{
for(int i=0; i<n; i++)
{
cout<<"surname------faculty----cousre-----group-----estimation"<<endl;
cout.setf(ios::left); //выравнивание данных на экране слева
cout<<setw(10)<<v[i].fio
<<setw(12)<<v[i].faculty
<<setw(14)<<v[i].course
<<v[i].group<<':';
for (int j=0; j<v[i].curr_marks; j++)
cout<<v[i].estimation[j]<<';';
cout << endl;
}
getch();
}

void query()
{
;
}


Несколько вопросов.
1. Указатели (ссылки) Вы изучали?. В этом случае можно отказаться от глобальных переменных /* см. замечание Verena */
2. В какой момент будем создавать список {факультет-курс} : при вводе данных (в фоновом режиме) или при расчете?
3. По кнопке "ввод" вводится одна запись. Так?
4. В структуру добавлено поле "количество оценок". Если не устраивает, тогда невведенные оценки заполняем "нулями" и, соответственно, анализируем только ненулевые.
5. Как должны выглядеть обе распечатки?
Неизвестный
13.04.2010, 01:44
общий
Даже не знаю, что сказать...Огромное спасибо Вам!!!

1) да,с укзателями знакома
2) при расчете
3) лучше зациклить ввод
4) количество оценок - это даже хорошо, что добавлено - так нагляднее.
давно
Академик
320937
2216
13.04.2010, 12:32
общий
sagajda:
Немного "зашился". Ответ будет в четверг. Если еще какие-то пожелания будут - давайте.
Неизвестный
13.04.2010, 23:40
общий
lamed:
Да мне не к спеху. Уже, вроде бы, всё обсудили - пожеланий нет!
Неизвестный
14.04.2010, 08:49
общий
О смотрю тут дядя не спит.Выкладываю свой вариант.Для общего развития.Не советую тут что то менять,потом трудно будет настроить логику.Я два дня ошибку на единицу искал.Ну в структуре поля канечно меняйте на какие надо если названия длинные.Програма выводит средний бал и факультет.Если надо будет можно и курс добавить.Все вычисления делает функция запрос.Там где написано не водить символы лучше их не вводить потому что слетает програма.Сам факт ввода с консоли символов в целочисленую переменую завершает програму и ничего тут не сделать.По крайней мере я решения не нашёл.Так что смысла менять меню я не вижу.
Т


#include<iostream>
#include <stdio.h>
using namespace std;

int i=0,a=1,b=0;

struct student{
char faculty[10];
char cousre[10];
char group[10];
char fio[10];
char fac[10];};

student fam[100];
int estimation[10];

void input();
void read();
void zapros();
void z();
int main()
{
int aa;
cout<<"Input: 1"<<" "<<"Read: 2"<<endl;
scanf("%i[1,2]",&aa);
if(aa == 1) metka:input();
if(aa == 2) metka1:read();
metka3:cout<<"Vsia baza: 2 , Vyjti: 3 , Dopolnit: 4 , Zapros: 5\n"<<"Nevvodit bukvy!!!"<<endl;
scanf("%i[2,3,4,5]%c",&aa);
if(aa >= 2 && aa<= 5){
if(aa == 2) goto metka1;
if(aa == 3) goto metka2;
if(aa == 4) {i++;goto metka;}
if(aa == 5) {zapros();goto metka3;}
metka2:return EXIT_SUCCESS;}
else {cout<<"Vvedion nerazresonyj simvol!"<<"\n";goto metka3;}
}
void input()
{
cout<<"student surname"<<endl;
cin>>fam[i].fio;
cout<<"student faculty"<<endl;
cin>>fam[i].faculty;
a=0;
cout<<"student cousre"<<endl;
cin>>fam[i].cousre;
cout<<"student group"<<endl;
cin>>fam[i].group;
cout<<"student estimation\n"<<"Vvesti ocenku!!!"<<endl;
cin>>estimation[i];
z();
}
void read()
{
cout<<"surname--faculty--cousre--group--estimation"<<endl;
for(int j=i;j>=0;j--){
cout<<fam[j].fio<<" "<<fam[j].faculty<<" "<<fam[j].cousre<<" "<<fam[j].group<<" "<<estimation[j]<<endl;}
}

void zapros()
{
for(int ii=0;ii<i;ii++){
if(strcoll(fam[ii].faculty,fam[i].faculty) == 0) {a++;}}
if(a == 0) {strcpy(fam[b].fac,fam[i].faculty);b++;a=1;}
//---------------------------------------------------------------------------------------------------------
double c=0;int sciot=0;
for(int jj=0;jj<b;jj++){
for(int jjj=0;jjj<=i;jjj++){
if(strcoll(fam[jj].fac,fam[jjj].faculty) == 0){
c+=estimation[jjj];sciot++;}}
if(c/sciot >= 3.5) {
cout<<"Srednij ball"<<c/sciot<<" Fakultet "<<fam[jj].fac<<"\n";c=0;sciot=0;}}
}
void z(){
for(int ii=0;ii<i;ii++){
if(strcoll(fam[ii].faculty,fam[i].faculty) == 0) {a++;}}
if(a == 0) {strcpy(fam[b].fac,fam[i].faculty);b++;a=1;}
}
Неизвестный
14.04.2010, 20:27
общий
Valeraja:
Внести изменения в Ваш ответ?
Неизвестный
14.04.2010, 20:29
общий
Да,так будет лучше.Спасибо.
давно
Академик
320937
2216
15.04.2010, 10:43
общий
это ответ
Здравствуйте, sagajda. Ответ в приложении. Code::Blocks/G++. Старался не сильно изменять идеологию Вашей программы. Для расчета и печати факультета и курса по условию все-таки выбрал предварительную сортировку, так как метод проще понять и, соответственно, сдать преподавателю. Несмотря на тестирование, возможно, что-то упустил. Проверьте, пожалуйста.


Приложение:
// RFPRO. Вопрос 177796
// Создать массив структур. Каждая структура состоит из таких элементов:
// факультет, курс, группа, фамилии студентов, экзаменационные оценки.
// Реализовать запросы, определив факультет и курс, на котором средний балл не меньше 3.5.
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<iomanip>

using namespace std;

const int marks = 20; // число оценок
const int size = 10; // максимальное число студентов /* размер массива */
struct TStudent //структура данных про студентов
{
char faculty[10];
int course;
char group[10];
char fio[10];
int curr_marks; // количество выставленных оценок
int estimation[marks]; //оценки
};

struct TCollege
{
TStudent v[size];
int n; // текущее число студентов
};

void exchange(TStudent& s1, TStudent& s2);
bool gt(const TStudent& s1, const TStudent& s2); // greater
void input(TCollege& c, const int marks);
void print(const TCollege& c);
void query(const TCollege& c, const float level);
void sort(TCollege& c);

int main()
{
TCollege c;
c.n=0;
int key = 1; // выбранная позиция меню
while (key!=0)
{
system("cls");
cout << " MENU" << endl << endl;
cout << "0. Exit." << endl;
cout << "1. Database input by keyboard." << endl;
cout << "2. Print. " << endl;
cout << "3. Query. " << endl;
cout << endl;
cout << "Choosen menu item:";
cin >> key;
switch(key)
{
case 0:
cout << "I'll be back" << endl;
break;
case 1:
input(c, marks);
break;
case 2:
print(c);
break;
case 3:
sort(c);
query(c, 3.5);
break;
default:
cout << "Try another time...";
getch();
break;
}
}
return 0;
}

void exchange(TStudent& s1, TStudent& s2)
{
TStudent tmp = s1;
s1=s2;
s2=tmp;
}

bool gt(TStudent& s1, TStudent& s2)
{
int val = strcmp(s1.faculty,s2.faculty);
return (val==1 || val==0 && s1.course>s2.course);
}

void input(TCollege& c, const int marks)
{
char ans='y';
while (ans=='y')
if (c.n<size)
{
cout<<"student's surname ";
cin>>c.v[c.n].fio;
cout<<"student's faculty ";
cin>>c.v[c.n].faculty;
cout<<"student's course ";
cin>>c.v[c.n].course;
cout<<"student's group ";
cin>>c.v[c.n].group;
cout<<"student's estimation"<<endl;
cout<<"Input number of estimations ";
cin>>c.v[c.n].curr_marks;
if (c.v[c.n].curr_marks<0 || c.v[c.n].curr_marks>marks)
c.v[c.n].curr_marks = 0;
for(int i=0;i<c.v[c.n].curr_marks;i++) //заполнение массива оценок
cin>>c.v[c.n].estimation[i];
++c.n;
cout<<"continue(y/n)";
cin>>ans;
}
else
cout << "There are no places for new students, sorry"<< endl;
}

void print(const TCollege& c)
// вывод данных
{
cout<<"surname---faculty--course---group-----estimation"<<endl;
for(int i=0; i<c.n; i++)
{
cout.setf(ios::left); //выравнивание данных на экране слева
cout<<setw(10)<<c.v[i].fio
<<setw(12)<<c.v[i].faculty
<<setw(7)<<c.v[i].course
<<setw(9)<<c.v[i].group;
for (int j=0; j<c.v[i].curr_marks; j++)
cout<<c.v[i].estimation[j]<<';';
cout << endl;
}
getch();
}

void query(const TCollege & c, const float level)
{
// в упорядоченном по факультету и курсу массиве отбираем
// факультеты и курсы, для которых средний балл не ниже level
int sum = 0;
int count = 0;
char faculty[20]="";
int course=0;
int i=0;
float avg;

cout << "faculty course sum count avg" << endl;

while (i<c.n)
{
if (strcmp(c.v[i].faculty, faculty)!=0 || c.v[i].course!=course)
{
avg = static_cast<float>(sum)/count;
if (avg>=level)
{
cout.setf(ios::left);
cout << setw(10) << faculty
<< setw(9) << course
<< setw(6) << sum
<< setw(7) << count
<< setw(5) << avg << endl;
}
sum=0;
count=0;
strcpy(faculty, c.v[i].faculty);
course = c.v[i].course;
}

for (int j=0; j<c.v[i].curr_marks; ++j)
{
sum += c.v[i].estimation[j];
++count;
}

++i;
}
avg = static_cast<float>(sum)/count;
if (avg>=level)
{
cout.setf(ios::left);
cout << setw(10) << faculty
<< setw(9) << course
<< setw(6) << sum
<< setw(7) << count
<< setw(5) << avg << endl;
}
getch();
}

void sort(TCollege& c)
{ // сортировка "пузырьком по факультету и курсу
for (int i=0; i<c.n-1; ++i)
for (int j=c.n-1; j>i; --j)
if (gt(c.v[j-1], c.v[j]))
exchange(c.v[j-1], c.v[j]);
}
Форма ответа