Информацию о каждом студенте оформить в программе в виде структуры данных. Совокупность структуры данных объединить в массив. Составить программу, которая обеспечивает ввод полученной информации, вывод ее в виде таблицы. Напечатать таблицу, содержащую номера, фамилии и оценки тех студентов, которые получили хорошие и отличные оценки по программированию, а также подсчитать количество таких студентов. В С++
Answers & Comments
#include <iostream>
#include <string>
#include <iomanip>
#include <windows.h>
#include <cstdlib>
using namespace std;
struct grades {
int math, physics, programming;
};
struct student {
string FIO;
grades grades {0, 0, 0};
};
void writeStrip(int count) {
for (int i = 0; i < count; i++)
cout << "-";
cout << endl;
}
void printAllStudents(student *students, int size) {
int fioWidth = 20;
int gradesWidth = 10;
int numberWidth = 5;
writeStrip(numberWidth + fioWidth + gradesWidth * 3);
cout
<< setw(numberWidth) << "#|"
<< setw(fioWidth) << "ФИО|"
<< setw(gradesWidth) << "Математ.|"
<< setw(gradesWidth) << "Физика|"
<< setw(gradesWidth) << "Програм.|"
<< endl;
writeStrip(numberWidth + fioWidth + gradesWidth * 3);
fioWidth--; gradesWidth--; numberWidth--;
for (size_t i = 0; i < size; i++)
{
cout
<< setw(numberWidth) << i + 1 << "|"
<< setw(fioWidth) << students[i].FIO << "|"
<< setw(gradesWidth) << students[i].grades.math << "|"
<< setw(gradesWidth) << students[i].grades.physics << "|"
<< setw(gradesWidth) << students[i].grades.programming << "|"
<< endl;
}
fioWidth++; gradesWidth++; numberWidth++;
writeStrip(numberWidth + fioWidth + gradesWidth * 3);
}
void printStudentsWithGoodProgramming(student* students, int size) {
int cutSize = 0;
for (size_t i = 0; i < size; i++)
if (students[i].grades.programming > 3)
cutSize++;
student* cutStudents = new student[cutSize];
for (size_t i = 0; i < cutSize; i++)
cutStudents[i] = student();
for (size_t i = 0, j = 0; i < size; i++)
{
if (students[i].grades.programming < 4)
continue;
cutStudents[j] = students[i];
j++;
}
printAllStudents(cutStudents, cutSize);
cout << "Количество: " << cutSize;
delete[] cutStudents;
}
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
cout << "Введите количество учеников, которых хотите добавить в массив: ";
int size = 1;
do {
if (size < 1 || size > 100)
cout << "Неккоректное количество учеников, попробуйте еще раз(от 1 до 100): ";
cin >> size;
} while (size < 1 || size > 100);
student* students = new student[size];
system("cls");
for (size_t i = 0; i < size; i++) {
cout << "Введите ФИО " << (i + 1) << "-го ученика: ";
cin.ignore();
getline(cin, students[i].FIO);
cout << "введите оценку с математики: ";
cin >> students[i].grades.math;
cout << "введите оценку с физики: ";
cin >> students[i].grades.physics;
cout << "введите оценку с программирования: ";
cin >> students[i].grades.programming;
cout << "Данные " << i + 1 << "-го ученика записаны в массив!" << endl;
system("pause");
system("cls");
}
cout << "Все данные обо всех учениках записаны в массив!" << endl;
cout << "Таблица всех учеников:" << endl;
printAllStudents(students, size);
cout << "Таблица учеников и их количество, оценки которых по програмированию больше 3:" << endl;
printStudentsWithGoodProgramming(students, size);
delete[] students;
return 0;
}