Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //---------------------------------------------------------------------------
- #define _CRT_SECURE_NO_WARNINGS
- #include <vcl.h>
- #include <iostream.h>
- #include <windows.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string>
- #include <tchar.h>
- //---------------------------------------------------------------------------
- #pragma argsused
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- class Students {
- public: AnsiString name, //имя студента
- surname, //фамилия студента
- *subjects; //динамический массив, содержащий в себе названия предметов
- public: int subjCount, //количество предметов
- *mark; //динамический массив, содержащий в себе оценки по предметам
- public: bool excellent; //флаг, определяющий, отличником ли является студент
- //объявление динамических массивов
- public: subjCreate (int subjCount) {
- subjects = new AnsiString[subjCount];
- mark = new int[subjCount];
- excellent=true;
- }
- };
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- //все переменные
- char *nameC, *surnameC, *subjectNameC;
- nameC = new char[20]; //считываемое имя студента
- surnameC = new char[20]; //считываемая фамилия студента
- subjectNameC = new char[20]; //считываемое название предмета
- int n, //количество студентов
- mark, //считываемая оценка
- bmCount=0, //счётчик плохих оценок
- gmCount=0, //счётчик хороших оценок
- subjCount; //количество предметов
- float allProgress=0, //средний балл
- bmPercent, //процент плохих оценок
- gmPercent; //процент хороших оценок
- bool excExist=false; //переменная, определяющая наличие отличников
- //ввод количества учеников и количества предметов данных
- fflush(stdin);
- printf("Введите количество студентов в группе: ");
- cin >> n;
- printf("Введите количество предметов: ");
- cin >> subjCount;
- //создание объекта, состоящего из массива классов Students
- Students *stGroup = new Students[n];
- for (int i = 0; i < n; i++) {
- stGroup[i].subjCreate(subjCount);
- }
- // ввод имен дисциплин
- for (int j = 0; j < subjCount; j++) {
- fflush(stdin);
- printf("Введите название дисциплины №%d: ", j+1);
- cin >> subjectNameC;
- for (int i = 0; i < n; i++) {
- stGroup[i].subjects[j]=subjectNameC;
- }
- }
- //заполнение данных о студентах
- for (int i = 0; i < n; i++) {
- //ввод имени и фамилии
- fflush(stdin);
- printf("\nЗаполнение данных о студенте № %d\nВведите имя: ",i+1);
- cin >> nameC;
- printf("Введите фамилию: ");
- cin >> surnameC;
- stGroup[i].name=nameC;
- stGroup[i].surname=surnameC;
- //ввод оценок
- for (int j = 0; j < subjCount; j++) {
- printf("\nВвод оценок. Допустимые значения - от 0 до 100");
- while(1){
- fflush(stdin);
- printf("\nВведите оценку по дисциплине %s: ", stGroup[i].subjects[j].c_str());
- //проверка, является ли вводимый символ цифрой
- if (!isdigit(getch())) {
- printf("\nВы можете вводить только цифры!");
- continue;
- }
- cin >> mark;
- if (mark<=100 && mark>=0) {
- break;
- }
- printf("Ошибка, введённая оценка не удовлетворяет требованиям!");
- }
- stGroup[i].mark[j]=mark;
- //проверка, является ли студент отличником
- if (stGroup[i].mark[j]<87) {
- stGroup[i].excellent=false;
- }
- //проверка, является ли оценка положительной или отрицательной
- if (stGroup[i].mark[j]<60)
- bmCount++;
- else gmCount++;
- //вычисление общего количества баллов
- allProgress +=stGroup[i].mark[j];
- }
- //проверка, если в группе отличники
- if (stGroup[i].excellent==true) {
- excExist=true;
- break;
- }
- }
- //вычисление процента хороших, плохих оценок, вычисление среднего балла
- bmPercent=((float)(bmCount))/((float)(n*subjCount))*100;
- gmPercent=((float)(gmCount))/((float)(n*subjCount))*100;
- allProgress=((float)(allProgress))/((float)(n*subjCount));
- //вывод среднего балла, количества хороших, плохих оценок, процентного соотн-я
- //хороших, плохих оценок к количеству студентов
- printf("\nСредний балл: %.2f\n", allProgress);
- printf("Количество хороших оценок: %d, их процент: %.2f%\n", gmCount, gmPercent);
- printf("Количество плохих оценок: %d, их процент: %.2f%\n", bmCount, bmPercent);
- //вывод отличников (если имеются)
- if (excExist==true) {
- printf("Отличники:\n");
- for (int i =0; i < n; i++)
- if (stGroup[i].excellent==true)
- printf("%s %s\n", stGroup[i].name, stGroup[i].surname);
- } else
- printf("Отличников в группе не имеется\n");
- //освобождение памяти
- delete[] stGroup;
- system("pause");
- return 0;
- }
- //---------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement