• Предмет: Информатика
  • Автор: melfoy
  • Вопрос задан 5 месяцев назад

Результаты экзаменационной сессии студентов представлены в таблице, создать файл, содержащий данные этой таблицы и выводящий таблицу студентов(их данные), получивших из программирования оценки более 3 в С++
#include
#include
#include
using namespace std;
struct grade {
int math, algebra, programming, os;
};
struct student {
string FIO;
grade grades {0, 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;
writeStrip(fioWidth + gradesWidth * 4);
cout
<< setw(fioWidth) << "FIO|"
<< setw(gradesWidth) << "Math|"
<< setw(gradesWidth) << "Algebra|"
<< setw(gradesWidth) << "Programming|"
<< setw(gradesWidth) << "OS|"
<< endl;
writeStrip(fioWidth + gradesWidth * 4);
fioWidth--; gradesWidth--;
for (size_t i = 0; i < size; i++)
{
cout
<< setw(fioWidth) << students[i].FIO << "|"
<< setw(gradesWidth) << students[i].grades.math << "|"
<< setw(gradesWidth) << students[i].grades.algebra << "|"
<< setw(gradesWidth) << students[i].grades.programming << "|"
<< setw(gradesWidth) << students[i].grades.os << "|"
<< endl;
}
fioWidth++; gradesWidth++;
writeStrip(fioWidth + gradesWidth * 4);
}
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 << "Number: " << cutSize;

delete[] cutStudents;
}
int main() {

cout << "Number of students: ";
int size = 1;
do {
if (size < 1 || size > 100)
cout << "Incorrect number of students: ";
cin >> size;
} while (size < 1 || size > 100);
student* students = new student[size];
for (size_t i = 0; i < size; i++) {
cout << "FIO " << (i + 1) << " student: ";
cin.ignore();
getline(cin, students[i].FIO);
cout << "Enter math grade: ";
cin >> students[i].grades.math;
cout << "Enter physics grade: ";
cin >> students[i].grades.algebra;
cout << "Enter programming grade: ";
cin >> students[i].grades.programming;
cout << "Enter os grade: ";
cin >> students[i].grades.os;
}
cout << "Table of all students:" << endl;
printAllStudents(students, size);
cout << "The table of students who have a grade more than 3 in programming:" << endl;
printStudentsWithGoodProgramming(students, size);
delete[] students;
return 0;
}

Приложения:

Ответы

Ответ дал: Mirox921
0

Код:

#include <iostream>

#include <fstream>

#include <string>

#include <vector>

using namespace std;

int main() {

   // Открытие файла с данными

   ifstream fin("students.txt");

   // Проверка открытия файла

   if (!fin) {

       cerr << "Ошибка открытия файла" << endl;

       return 1;

   }

   // Вектор для хранения данных студентов

   vector<string> students;

   // Считывание данных из файла

   string line;

   while (getline(fin, line)) {

       // Разбиение строки на поля по разделителю ";"

       string name, subject;

       int programming_grade;

       stringstream ss(line);

       getline(ss, name, ';');

       getline(ss, subject, ';');

       ss >> programming_grade;

       // Проверка оценки по программированию

       if (subject == "Программирование" && programming_grade > 3) {

           students.push_back(line);

       }

   }

   // Вывод таблицы данных студентов

   cout << "Список студентов с оценкой по программированию более 3:" << endl;

   for (string student : students) {

       cout << student << endl;

   }

   // Закрытие файла

   fin.close();

   return 0;

}

В этом коде открываем файл "students.txt", считываем данные построчно, проверяем оценки студентов по программированию и добавляем данные нужных студентов в вектор "students". Затем выводим таблицу данных нужных студентов. В конце закрываем файл.

Вас заинтересует