c++ Действия с значениями элементов вектора
Доброго всем времени суток.
Мне нужна помощь, чтобы дописать код этого задания:
Разработать приложение для работы с данными, которые хранятся в контейнере-векторе и вводятся пользователем до тех пор, пока не будет выполнено условие прекращения ввода. Каждый элемент вектор является набором данных, содержащий фамилию студента и оценки по 3-м предметам «Программирование», «Инженерная графика», «Компьютерная логика», которые задаются пользователем.
Необходимо по определенному правилу R в зависимости от содержимого набора вычислить определенный результат, а также скопировать в новый вектор данные, выбранные из стартового по правилу запроса Q.
Отобразить содержимое стартового вектора (набор данных каждого элемента в новой строке из указанием номера в массиве), результат вычислений с указанием правила и содержание результирующего вектора (набор данных каждого элемента в новой строке с указанием номера в массиве) из указанием соответствующего правила запроса.
Правило R: вычислить количество студентов, имеющих одинаковые оценки по любым двум предметов
Правило Q: выбрать студентов, худшая оценка которых из трех предметов не менее 7
Вот набросок кода:
#include <iostream>
#include <vector>
using namespace std;
struct base
{
char surname[25]; // поле-фамилия
int mark1, mark2, mark3; // поле-оценка
};
int main()
{
base item; // переменнная для сохранения элемента
vector<base> vect; // создание пустого вектора элементов
int count=0; // счётчик введённых элементов
char ch; // символ для ответа на вопрос продолжения
while(true) // бесконечный цикл
{
cout<<"Do you want to input a data of student? (y/n)"; // вопрос о продолжении ввода
cin>>ch; // ввод ответа
if(ch!='y'&&ch!='Y') // если ответ "нет"
break; // прекращение цикла ввода
count++; // увеличение счётчика элементов
cout<<count<<endl; // вывод номера текущего элемента
cout<<"Input surname:"; // запрос ввода фамилии
cin>>item.surname; // ввод фамилии
cout<<"Input mark of Programming:"; // запрос ввода оценки по программированию
cin>>item.mark1;// ввод оценки
cout<<"Input mark of Computer Logic:"; // запрос ввода оценки по компъютерной логике
cin>>item.mark2;// ввод оценки
cout<<"Input mark of Engineer Graphic:";// запрос ввода оценки по инженерной графике
cin>>item.mark3; // ввод оценки
vect.push_back(item); // добавление в вектор этих элементов
}
cout<<"start:"<<endl;
int bally=0;//счётчик рассчёта колличества одинаковых оценок
for (int i=0; i < vect.size(); i++) // перебор всех элементов с привязкой к фактическому размеру
return 0;
}
Ответы (1 шт):
#include <iostream> // ввод-вывод
#include <vector> // вектор
#include <string> // строки
using namespace std;
bool low_seven(const int& f_mark, const int& s_mark, const int& t_mark) {
if (f_mark >= 7 && s_mark >=7 && t_mark >= 7) { // сравниваем оценки. Если самая худшая должна быть больше или равна 7, значит все оценки больше или равны 7.
return true;
} else {
return false;
}
}
bool compare_marks(const int& f_mark, const int& s_mark, const int& t_mark) {
// функция сравнения оценок. Если среди них есть две одинаковые, возвращает true
if (f_mark==s_mark || f_mark==t_mark || s_mark==tmark) { // если две оценки одинаковые
return true;
} else { // иначе
return false;
}
}
struct student {
string surname; // строка с фамилией
int mark1, mark2, mark3; // оценки
}
int main() {
unsigned int studsame = 0; // студенты с двумя одинаковыми оценками
vector<student> studlist; // список студентов
student Student; // элемент-структура
unsigned int count = 0; // количество элементов
char ch; // символ ответа на вопрос
while (true) {
cout << "Do you want write info about student? ";
cin >> ch;
if (ch=='y' || ch=='Y') { // если ответ положительный
count++; // увеличиваем счетчик
cout << count << endl; // вывод номера текущего элемента
cout << "Write surname: "; // запрос на ввод фамилии
cin >> Student.surname;
cout << "Input mark of Programming: "; // запрос на оценку по программированию
cin >> Student.mark1; // ввод оценки по программированию
cout << "Input mark of Computer Logic: "; // запрос на оценку по компьютерной логике
cin >> Student.mark2; // ввод оценки по компьютерной логике
cout << "Input mark of Engineer graphic: "; // запрос на ввод оценки по компьютерной графике
cin >> Student.mark3; // ввод оценки по компьютерной графике
studlist.push_back(Student); // добавляем студента в список
} else {
break;
}
}
for (unsigned int i=0; i<studlist.size(); i++) { // цикл для подсчета по условию R
bool issame; // переменная для определения, одинаковы ли оценки
issame = compare_marks(studlist.at(i).mark1, studlist.at(i).mark2, studlist.at(i).mark3); // сравниваем оценки
if (issame) {
studsame++;
}
}
for (unsigned int jk=0; jk<studlist.size(); jk++) { // Цикл для подсчета по условию Q
bool notsmall; // переменная для определения, низкая ли оценка
notsmall = low_seven(studlist.at(jk).mark1, studlist.at(jk).mark2, studlist.at(jk).mark3); // определяем, низкая ли оценка
if (notsmall) {
string goodstudent = studlist.at(jk).surname; // фамилия студента с хорошими оценками. Что с ней делать: вывести на экран, или что-то ещё, вы не указывали.
}
}
return 0;
}