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

Классы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определение максимальной площади http://www.cyberforum.ru/cpp-beginners/thread376542.html
Доброго все времени суток! Есть 2 луча исходящие из одной точки, угол между ними 90. Есть также 2 отрезка a и b. Необходимо найти такое расположение этих отрезков, чтобы получился четырехугольник максимальной площади... причем положения находить необязательно достаточно вычислить площадь... Задача взята отсюда Если кто знает какие-нибудь теоремы на эту тему подскажите пожалста. #include...
C++ Перегрузка операторов Мне нужно определить тип name_and_adress. Потом перегрузить для него операторы << и >> и скопировать поток объектов name_and_adress. У меня есть перегрузка операторов и пример ее использования, но мне нужно переделать для моего типа #include"stdafx.h"; #include<iostream> using namespace std; struct info { char *name; double val; char *units; http://www.cyberforum.ru/cpp-beginners/thread376540.html
Вывести на экран информацию о самом высоком мосте. C++
Условие: Сделать структуру в виде функции, Мосты. Название, высота, длинна. Вывести на экран информацию о самом высоком, мосте. Вод код что сам сделал. #include<iostream> #include<string> using namespace std; const int n=3; void InArray(); void OutArray();
C++ Вычисление стоимости телефонного разговора
Ребят, всем привет. C++. помогите пожалуйста написать программу, это задача на цикличность: Написать программу, которая вычисляет стоимость междугороднего телефонного разговора. Исходными данными для программы являются код города и длительность разговора. Ниже приведены коды некоторых городов и стоимость 1 мин. разговора. Город - Код -Цена 1 мин. (руб.) Владивосток - 423 - 5,85 ...
C++ считывание английского текста с клавиатуры в си++ Borland http://www.cyberforum.ru/cpp-beginners/thread376510.html
написать программу которая считывает английский текст с клавиатуры и выводит его на экран изменив регистр символов на противоположный
C++ Среди цифр введенной строки распечатать ту, которая появлялась чаще других. Если таких цифр было несколько, распечатать ту, что встречалась первой Среди цифр введенной строки распечатать ту, которая появлялась чаще других. Если таких цифр было несколько, распечатать ту, что встречалась первой На Cи подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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/32d87e...3b0c19c4d3b573
 
Текущее время: 22:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru