Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Классы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определение максимальной площади http://www.cyberforum.ru/cpp-beginners/thread376542.html
Доброго все времени суток! Есть 2 луча исходящие из одной точки, угол между ними 90. Есть также 2 отрезка a и b. Необходимо найти такое расположение этих отрезков, чтобы получился четырехугольник...
C++ Перегрузка операторов Мне нужно определить тип name_and_adress. Потом перегрузить для него операторы << и >> и скопировать поток объектов name_and_adress. У меня есть перегрузка операторов и пример ее использования, но... http://www.cyberforum.ru/cpp-beginners/thread376540.html
Вывести на экран информацию о самом высоком мосте. C++
Условие: Сделать структуру в виде функции, Мосты. Название, высота, длинна. Вывести на экран информацию о самом высоком, мосте. Вод код что сам сделал. #include<iostream> #include<string>...
C++ Вычисление стоимости телефонного разговора
Ребят, всем привет. C++. помогите пожалуйста написать программу, это задача на цикличность: Написать программу, которая вычисляет стоимость междугороднего телефонного разговора. Исходными...
C++ считывание английского текста с клавиатуры в си++ Borland http://www.cyberforum.ru/cpp-beginners/thread376510.html
написать программу которая считывает английский текст с клавиатуры и выводит его на экран изменив регистр символов на противоположный
C++ Среди цифр введенной строки распечатать ту, которая появлялась чаще других. Если таких цифр было несколько, распечатать ту, что встречалась первой Среди цифр введенной строки распечатать ту, которая появлялась чаще других. Если таких цифр было несколько, распечатать ту, что встречалась первой На Cи подробнее

Показать сообщение отдельно
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
02.11.2011, 12:23
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <numeric>
#include <array>
 
class TStudent
{
public:
   static const size_t notes_numb = 3;
   typedef std::array<short, notes_numb> notes_holder;
 
   TStudent(const std::string& sur_, const std::string& f_name, const std::string& l_name,
            const notes_holder& arr):
      surname(sur_), first_name(f_name), last_name(l_name), notes(arr)
   {
   }
   const std::string get_surname() const
   {
      return surname;
   }
   const std::string get_first_name() const
   {
      return first_name;
   }
   const std::string get_last_name() const
   {
      return last_name;
   }
   const notes_holder get_notes() const
   {
      return notes;
   }
   double get_middle_note() const
   {
      return static_cast<double>(std::accumulate(notes.begin(), notes.end(), 0)) / notes_numb;
   }
private:
   std::string surname;
   std::string first_name;
   std::string last_name;
   notes_holder notes;
};
 
std::ostream& operator << (std::ostream& os, const TStudent& stud)
{
   os << "First name: " << stud.get_first_name() << " Surname: " << 
   stud.get_surname() << " Last name: " << stud.get_last_name() << std::endl;
   os << "Notes: ";
   TStudent::notes_holder notes = stud.get_notes();
   std::copy(notes.begin(), notes.end(), std::ostream_iterator<short>(os, ","));
   os << std::endl;
   os << "Middle note: " << stud.get_middle_note() << std::endl;
   return os;
}
 
class TGroup
{
public:
   typedef std::vector<TStudent> students_holder;
   TGroup(const students_holder& hold):
      students(hold)
   {
   }
   const students_holder get_students() const
   {
      return students;
   }
   const students_holder find_by_surname(const std::string& pattern) const
   {
      students_holder result;
      std::for_each(students.begin(), students.end(), [&result, pattern](const TStudent& stud)
      {
         if (stud.get_surname().find(pattern) != std::string::npos)
         {
            result.push_back(stud);
         }
      });
      return result;
   }
   const students_holder find_by_max() const
   {
      students_holder result;
      short max_prog = std::max_element(students.begin(), students.end(), [](const TStudent& first, const TStudent& second)
      {
         return first.get_notes()[0] < second.get_notes()[0];
      })->get_notes()[0];
      std::for_each(students.begin(), students.end(), [&result, max_prog](const TStudent& stud)
      {
         if (stud.get_notes()[0] == max_prog)
         {
            result.push_back(stud);
         }
      });
      return result;
   }
private:
   students_holder students;
};
 
std::ostream& operator << (std::ostream& os, const TGroup& gr)
{
   TGroup::students_holder students = gr.get_students();
   std::for_each(students.begin(), students.end(), [&os](const TStudent& stud)
   {
      os << stud << std::endl;
   });
   return os;
}
 
int main()
{
   TStudent::notes_holder first_notes;
   first_notes.fill(5);
   TStudent::notes_holder second_notes;
   second_notes.fill(4);
   TStudent::notes_holder third_notes;
   third_notes.fill(5);
   TGroup::students_holder students = 
   {
      (TStudent("Ivanov", "Ivan", "Ivanovich", first_notes)),
      (TStudent("Vasilied", "Vasilii", "Vasilievich", second_notes)),
      (TStudent("Ivanova", "Maria", "Sidorovna", third_notes))
   };
   TGroup gr(students);
   std::cout << gr << std::endl;
   TGroup::students_holder finded_by_surname = gr.find_by_surname("Iva");
   std::cout << finded_by_surname << std::endl;
   TGroup::students_holder finded_by_prog_max = gr.find_by_max();
   std::cout << finded_by_prog_max << std::endl;
}
Правда std::array не слишком удачно я использовал, но переписывать лень.

http://liveworkspace.org/code/32d87e30ca0192d5263b0c19c4d3b573
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru