Структура STUDENT, записи упорядочены по возрастанию среднего балла, вывод на дисплей фамилий студентов имеющих оценки 4 и 5

О задаче:
[свернуть]

По книге:C/C++ Программирование на языке высокого уровня: Учебник для вузов
Автор книги: Павловская Татьяна Александровна
Задача на тему: Структуры — (на странице 144)
Вариант задачи: 2 — (на странице 145)’ style=’default’ collapse_link=’true’]
Условия задачи:
[свернуть]

1.Описать структуру с именем STUDENT, содержащую следующие поля:
[свернуть]

  • NAME – фамилия и инициалы;
  • GROUP – номер группы;
  • SES – успеваемость( массив из 5 элементов).

‘ style=’default’ collapse_link=’true’]

2. Написать программу, выполняющую следующие действия:
[свернуть]

  • ввод с клавиатуры данных в массив STUD1, состоящий из десяти структур типа STUDENT; записи должны быть упорядочены по возрастанию среднего балла;
  • вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 4 и 5;
  • если таких студентов нет, вывести соответствующее сообщение.

‘ style=’default’ collapse_link=’true’]

Листинг(исходник) программы:
[свернуть]

#include <iostream> 
#include <ctype.h> 
#include <conio.h> 
#include <locale> 
using namespace std; 

struct STUDENT { 
char NAME[30]; 
int GROUP; 
double SES[5]; 
}; 

void main() 
{ 
setlocale(LC_ALL,"Rus"); 

const int N = 10; 
STUDENT* STUD1 = new STUDENT[N];	// Выделение памяти под N числа структур типа STUDENT 

//--------------------- 
//Заполнение структур 
for(int i(0); i<N; i++) 
{ 
cin.get(); 
cout<<"Введите имя и инициалы студента: "; 
cin.getline(STUD1[i].NAME,30,\'\\n\'); 
cout<<"Введите номер группы студента: "; 
cin>>STUD1[i].GROUP; 
cout<<"Введите 5 оценок без пробела: "; 
for(int j(0); j<5; j++) cin>>STUD1[i].SES[j]; 
system("cls"); 
} 

//------------------------------------------------------------ 
//Сортировка массива структур по возрастанию, среднего балла студента 
double* simple_average = new double[N]; 
for( int i(0); i < N; i++) simple_average[i] = 0; // Обнуляем значения массива 

for(int i(0); i<N; i++) 
for(int j(0); j<5; j++) 
{ 
simple_average[i] += STUD1[i].SES[j];	// Нахождение суммы баллов студента 
if(j == 4) simple_average[i] /= 5.0; // Нахождение среднего арифметического баллов студента 
} 

for(int i(0); i<N; i++) 
for(int j(0); j<N; j++) 
if(simple_average[j] > simple_average[i]) // Сортировка по возрастанию среднего балла 
{ 
swap(simple_average[j],simple_average[i]); //Обмен среднего ариф-го 
swap(STUD1[j],STUD1[i]);	// Обмен структур 
} 

delete [] simple_average;	// Освобождаем память 

//----------------------------------------------------------- 
//Вывод студентов 
bool live = false; 
for(int i(0); i<N; i++) // Проходим по всем структурам 
{ 
for(int j(0); j<5; j++) 
{ 
if( STUD1[i].SES[j] == 4.0 || STUD1[i].SES[j] == 5.0 )	// Вывод информации о студентах у которых есть оценки 4 и 5 
{ 
cout<<"Фамилия: "; 
for( int sName(0); sName < (int)strlen(STUD1[i].NAME); sName++)	// Проверка строки имени на пробел 
{ 
if( isspace(STUD1[i].NAME[sName]) ) break; 
else cout<<STUD1[i].NAME[sName]; 
} 
cout<<"\\t\\tНомер группы: "<<STUD1[i].GROUP<<endl; 

live = true;	// Меняем флаг, обозначающий существование студентов с оценками 4 и 5 
break;	//Останавливаем внутренний цикл и переходим к следующей стректуре для поиска оценок 
} 
} 
} 
if(!live) cout<<"Студентов с оценками 4 и 5 не найдено!"; 

delete [] STUD1;	//Освобождаем память от структур 
_getch(); 
}

‘ style=’default’ collapse_link=’true’]

Автор:Павел Кадыров

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *