<?xml version="1.0" encoding="utf-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Форум программистов и сисадминов Киберфорум - Блоги - acmades</title>
		<link>https://www.cyberforum.ru/blogs/457043/</link>
		<description>КиберФорум - форум программистов, системных администраторов, администраторов баз данных, компьютерный форум, форум по электронике и бытовой технике, обсуждение софта. Бесплатная помощь в решении задач по программированию и наукам, решение проблем с компьютером, операционными системам</description>
		<language>ru</language>
		<lastBuildDate>Wed, 09 Sep 2026 02:54:37 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>https://www.cyberforum.ru//cyberstatic.net/images/misc/rss.jpg</url>
			<title>Форум программистов и сисадминов Киберфорум - Блоги - acmades</title>
			<link>https://www.cyberforum.ru/blogs/457043/</link>
		</image>
		<item>
			<title>С++ «Неделя четвертая - Исключения - Работа с сервером времени» #24</title>
			<link>https://www.cyberforum.ru/blogs/457043/4894.html</link>
			<pubDate>Thu, 24 Aug 2017 11:35:15 GMT</pubDate>
			<description>*Задание:* 
Вам дана функция string AskTimeServer(), про которую известно следующее: 
* в процессе...</description>
			<content:encoded><![CDATA[<div><b>Задание:</b><br />
Вам дана функция string AskTimeServer(), про которую известно следующее:<ul><li>в процессе своей работы она обращается по сети к удалённому серверу, запрашивая текущее время;</li>
<li>если обращение к серверу прошло успешно, функция возвращает текущее время в виде строки;</li>
<li>если в процессе обращения к серверу возникла сетевая проблема, функция выбрасывает исключение system_error;</li>
<li>функция может выбрасывать другие исключения, чтобы сообщить о других проблемах.</li>
</ul>Используя функцию AskTimeServer, напишите класс TimeServer со следующим интерфейсом:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="263165307"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="263165307" style="height: 126px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
</pre></td><td class="de1"><pre class="de1"><span class="kw2">class</span> TimeServer <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; string GetCurrentTime<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="kw2">private</span><span class="sy4">:</span>
&nbsp; string LastFetchedTime <span class="sy1">=</span> <span class="st0">&quot;00:00:00&quot;</span><span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Метод GetCurrentTime должен вести себя так:<ul><li>он должен вызвать функцию AskTimeServer, записать её результат в поле LastFetchedTime и вернуть значение этого поля;</li>
<li>если AskTimeServer выбросила исключение system_error, метод GetCurrentTime должен его поймать и вернуть текущее значение поля LastFetchedTime. Таким образом мы скрываем от пользователя сетевые проблемы, возвращая значение, которое было получено при последнем успешном обращении к серверу;</li>
<li>если AskTimeServer выбросила другое исключение, метод GetCurrentTime должен пробросить его дальше, потому что в рамках класса TimeServer мы не знаем, как обрабатывать проблемы, не связанные со сбоями сети.</li>
</ul><br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="702850581"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="702850581" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;exception&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
&nbsp;
string AskTimeServer<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="coMULTI">/* Для тестирования повставляйте сюда код, реализующий различное поведение этой функции:</span>
<span class="coMULTI">&nbsp; &nbsp; * нормальный возврат строкового значения</span>
<span class="coMULTI">&nbsp; &nbsp; * выброс исключения system_error</span>
<span class="coMULTI">&nbsp; &nbsp; * выброс другого исключения с сообщением.</span>
<span class="coMULTI">&nbsp; &nbsp; */</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw2">class</span> TimeServer <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; &nbsp; string GetCurrentTime<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LastFetchedTime <span class="sy1">=</span> AskTimeServer<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> LastFetchedTime<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">catch</span> <span class="br0">&#40;</span><span class="kw4">const</span> std<span class="sy4">::</span><span class="me2">system_error</span><span class="sy3">&amp;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> LastFetchedTime<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">catch</span> <span class="br0">&#40;</span>...<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">throw</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* Реализуйте этот метод:</span>
<span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * если AskTimeServer() вернула значение, запишите его в LastFetchedTime и верните</span>
<span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * если AskTimeServer() бросила исключение system_error, верните текущее значение</span>
<span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; поля LastFetchedTime</span>
<span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; * если AskTimeServer() бросила другое исключение, пробросьте его дальше.</span>
<span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; */</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
<span class="kw2">private</span><span class="sy4">:</span>
&nbsp; &nbsp; string LastFetchedTime <span class="sy1">=</span> <span class="st0">&quot;00:00:00&quot;</span><span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co1">// Меняя реализацию функции AskTimeServer, убедитесь, что это код работает корректно</span>
&nbsp; &nbsp; TimeServer ts<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> ts.<span class="me1">GetCurrentTime</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw2">catch</span> <span class="br0">&#40;</span>exception<span class="sy3">&amp;</span> e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Exception got: &quot;</span> <span class="sy1">&lt;&lt;</span> e.<span class="me1">what</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Даже комментировать нечего ))))</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4894.html</guid>
		</item>
		<item>
			<title>С++ «Неделя четвертая - Исключения - Калькулятор обыкновенных дробей» #23</title>
			<link>https://www.cyberforum.ru/blogs/457043/4893.html</link>
			<pubDate>Thu, 24 Aug 2017 11:27:20 GMT</pubDate>
			<description>*Задание:* 
Ссылка на прошлое задание (https://www.cyberforum.ru/blogs/457043/blog4892.html) 
Итак,...</description>
			<content:encoded><![CDATA[<div><b>Задание:</b><br />
<a href="https://www.cyberforum.ru/blogs/457043/blog4892.html">Ссылка на прошлое задание</a><br />
Итак, теперь у нас с вами есть полноценный тип для представления обыкновенных дробей: класс Rational интегрирован в язык с помощью перегрузки операторов и не позволяет выполнять некорректные операции за счёт выбрасывания исключений. Давайте на основе класса Rational создадим простой калькулятор для обыкновенных дробей.<br />
<br />
Вам надо написать программу, которая считывает из стандартного ввода одну строку в формате ДРОБЬ_1 операция ДРОБЬ_2. ДРОБЬ_1 и ДРОБЬ_2 имеют формат X/Y, где X — целое, а Y — целое неотрицательное число. операция — это один из символов '+', '-', '*', '/'.<br />
<br />
Если ДРОБЬ_1 или ДРОБЬ_2 является некорректной обыкновенной дробью, ваша программа должна вывести в стандартный вывод сообщение &quot;Invalid argument&quot;. Если считанная операция — это деление на ноль, выведите в стандартный вывод сообщение &quot;Division by zero&quot;. В противном случае выведите результат операции.<br />
Пример<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="70147446"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="70147446" style="height: 94px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
</pre></td><td class="de1"><pre class="de1"><span class="kw2">stdin</span> &nbsp; &nbsp; &nbsp; <span class="kw2">stdout</span>
<span class="nu0">1</span><span class="sy2">/</span><span class="nu0">2</span> <span class="sy2">+</span> <span class="nu0">1</span><span class="sy2">/</span><span class="nu0">3</span> &nbsp; <span class="nu0">5</span><span class="sy2">/</span><span class="nu0">6</span>
<span class="nu0">1</span><span class="sy2">/</span><span class="nu0">2</span> <span class="sy2">+</span> <span class="nu0">5</span><span class="sy2">/</span><span class="nu0">0</span> &nbsp; Invalid argument
<span class="nu0">4</span><span class="sy2">/</span><span class="nu0">5</span> <span class="sy2">/</span> <span class="nu0">0</span><span class="sy2">/</span><span class="nu0">8</span> &nbsp; Division by zero</pre></td></tr></table></div></td></tr></tbody></table></div><b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="768317150"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="768317150" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;exception&gt;</span>
<span class="co2">#include &lt;sstream&gt;</span>
<span class="co2">#include &lt;cmath&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;map&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw2">class</span> Rational <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; &nbsp; Rational<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; num <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; den <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; Rational<span class="br0">&#40;</span><span class="kw4">int</span> numerator, <span class="kw4">int</span> denominator<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>denominator <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">throw</span> <span class="nu0">1</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>denominator <span class="sy1">&lt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>numerator <span class="sy1">&lt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator <span class="sy1">=</span> <span class="kw3">abs</span><span class="br0">&#40;</span>denominator<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numerator <span class="sy1">=</span> <span class="kw3">abs</span><span class="br0">&#40;</span>numerator<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator <span class="sy1">=</span> <span class="kw3">abs</span><span class="br0">&#40;</span>denominator<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numerator <span class="sy1">=</span> numerator <span class="sy2">-</span> <span class="nu0">2</span> <span class="sy2">*</span> numerator<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>numerator <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> nod <span class="sy1">=</span> Nod<span class="br0">&#40;</span><span class="kw3">abs</span><span class="br0">&#40;</span>numerator<span class="br0">&#41;</span>, <span class="kw3">abs</span><span class="br0">&#40;</span>denominator<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; num <span class="sy1">=</span> numerator <span class="sy2">/</span> nod<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; den <span class="sy1">=</span> denominator <span class="sy2">/</span> nod<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Numerator<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> num<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Denominator<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> den<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span>
&nbsp; &nbsp; <span class="kw4">int</span> num<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> den<span class="sy4">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw4">int</span> Nod<span class="br0">&#40;</span><span class="kw4">int</span> a, <span class="kw4">int</span> b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>a <span class="sy1">&gt;</span> <span class="nu0">0</span> <span class="sy3">&amp;&amp;</span> b <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>a <span class="sy1">&gt;</span> b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a <span class="sy2">%</span><span class="sy1">=</span> b<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b <span class="sy2">%</span><span class="sy1">=</span> a<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="co1">//while</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> a <span class="sy2">+</span> b<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
<span class="kw4">bool</span> operator <span class="sy1">==</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy3">&amp;&amp;</span> <span class="br0">&#40;</span>a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">true</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
Rational operator <span class="sy2">+</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> p <span class="sy1">=</span> <span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy2">+</span> <span class="br0">&#40;</span>b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> q <span class="sy1">=</span> a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">return</span> Rational<span class="br0">&#40;</span>p, q<span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
Rational operator <span class="sy2">-</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> p <span class="sy1">=</span> <span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy2">-</span> <span class="br0">&#40;</span>b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> q <span class="sy1">=</span> a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">return</span> Rational<span class="br0">&#40;</span>p, q<span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
Rational operator <span class="sy2">*</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> Rational<span class="br0">&#40;</span><span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy2">*</span>b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>, <span class="br0">&#40;</span>a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy2">*</span>b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
Rational operator <span class="sy2">/</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">throw</span> <span class="nu0">2</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">return</span> Rational<span class="br0">&#40;</span><span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>, <span class="br0">&#40;</span>a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
istream<span class="sy3">&amp;</span> operator <span class="sy1">&gt;&gt;</span> <span class="br0">&#40;</span>istream<span class="sy3">&amp;</span> stream, Rational<span class="sy3">&amp;</span> r<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> p, q<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>stream <span class="sy1">&gt;&gt;</span> p <span class="sy3">&amp;&amp;</span> stream.<span class="me1">ignore</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="sy3">&amp;&amp;</span> stream <span class="sy1">&gt;&gt;</span> q<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; r <span class="sy1">=</span> <span class="br0">&#123;</span> p, q <span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> stream<span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
ostream<span class="sy3">&amp;</span> operator <span class="sy1">&lt;&lt;</span> <span class="br0">&#40;</span>ostream<span class="sy3">&amp;</span> stream, <span class="kw4">const</span> Rational<span class="sy3">&amp;</span> r<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; stream <span class="sy1">&lt;&lt;</span> r.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;/&quot;</span> <span class="sy1">&lt;&lt;</span> r.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">return</span> stream<span class="sy4">;</span>
<span class="br0">&#125;</span>
<span class="kw4">bool</span> operator <span class="sy1">&gt;</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">/</span> <span class="br0">&#40;</span><span class="kw4">double</span><span class="br0">&#41;</span>a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy1">&gt;</span> <span class="kw4">double</span><span class="br0">&#40;</span>b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">/</span> <span class="br0">&#40;</span><span class="kw4">double</span><span class="br0">&#41;</span>b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
<span class="kw4">bool</span> operator <span class="sy1">&lt;</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">/</span> <span class="br0">&#40;</span><span class="kw4">double</span><span class="br0">&#41;</span>a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy1">&lt;</span> <span class="br0">&#40;</span>b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">/</span> <span class="br0">&#40;</span><span class="kw4">double</span><span class="br0">&#41;</span>b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw2">try</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; Rational a, b<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">char</span> ch<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> a <span class="sy1">&gt;&gt;</span> ch <span class="sy1">&gt;&gt;</span> b<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ch <span class="sy1">==</span> <span class="st0">'+'</span><span class="br0">&#41;</span> <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> a <span class="sy2">+</span> b<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>ch <span class="sy1">==</span> <span class="st0">'-'</span><span class="br0">&#41;</span> <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> a <span class="sy2">-</span> b<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>ch <span class="sy1">==</span> <span class="st0">'*'</span><span class="br0">&#41;</span> <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> a <span class="sy2">*</span> b<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> a <span class="sy2">/</span> b<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw2">catch</span> <span class="br0">&#40;</span><span class="kw4">int</span> f<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//ловим исключения по номеру</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>f <span class="sy1">==</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Invalid argument&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Division by zero&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Простенькое задание</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4893.html</guid>
		</item>
		<item>
			<title>С++ «Неделя четвертая - Исключения - Исключения в классе Rational» #22</title>
			<link>https://www.cyberforum.ru/blogs/457043/4892.html</link>
			<pubDate>Thu, 24 Aug 2017 11:18:46 GMT</pubDate>
			<description>Продолжаю курс: «Основы разработки на C++: белый пояс» 
Простое *задание*: 
Ссылка на предыдущее...</description>
			<content:encoded><![CDATA[<div>Продолжаю курс: «Основы разработки на C++: белый пояс»<br />
Простое <b>задание</b>:<br />
<a href="https://www.cyberforum.ru/blogs/457043/blog4890.html">Ссылка на предыдущее задание</a><br />
Вспомним класс Rational, который мы реализовали в задачах, посвящённых перегрузке операторов. Там специально говорилось, что в тестах объекты класса Rational никогда не создаются с нулевым знаменателем и никогда не выполняется деление на ноль. Настало время избавиться от этого ограничения и научиться обрабатывать нулевой знаменатель и деление на ноль. В этой задаче вам предстоит это сделать.<br />
<br />
Поменяйте реализацию конструктора класса Rational так, чтобы он выбрасывал исключение invalid_argument, если знаменатель равен нулю. Кроме того, переделайте реализацию оператора деления для класса Rational так, чтобы он выбрасывал исключение domain_error, если делитель равен нулю.<br />
<br />
Напомним, что вам надо реализовать интерфейс<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="622095975"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="622095975" style="height: 158px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
</pre></td><td class="de1"><pre class="de1"><span class="kw2">class</span> Rational <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; Rational<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; Rational<span class="br0">&#40;</span><span class="kw4">int</span> numerator, <span class="kw4">int</span> denominator<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
&nbsp; <span class="kw4">int</span> Numerator<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span><span class="sy4">;</span>
&nbsp; <span class="kw4">int</span> Denominator<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>и оператор деления для класса Rational<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="405880021"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="405880021" style="height: 46px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
</pre></td><td class="de1"><pre class="de1">Rational operator <span class="sy2">/</span> <span class="br0">&#40;</span><span class="kw4">const</span> Rational<span class="sy3">&amp;</span> lhs, <span class="kw4">const</span> Rational<span class="sy3">&amp;</span> rhs<span class="br0">&#41;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="304017176"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="304017176" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="coMULTI">/*Неделя четвертая - Исключения - Исключения в классе Rational*/</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;exception&gt;</span>
<span class="co2">#include &lt;sstream&gt;</span>
<span class="co2">#include &lt;cmath&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw2">class</span> Rational <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; &nbsp; Rational<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; num <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; den <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; Rational<span class="br0">&#40;</span><span class="kw4">int</span> numerator, <span class="kw4">int</span> denominator<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>denominator <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">throw</span> invalid_argument<span class="br0">&#40;</span><span class="st0">&quot;invalid_argument&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>denominator <span class="sy1">&lt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>numerator <span class="sy1">&lt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator <span class="sy1">=</span> <span class="kw3">abs</span><span class="br0">&#40;</span>denominator<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numerator <span class="sy1">=</span> <span class="kw3">abs</span><span class="br0">&#40;</span>numerator<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator <span class="sy1">=</span> <span class="kw3">abs</span><span class="br0">&#40;</span>denominator<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numerator <span class="sy1">=</span> numerator <span class="sy2">-</span> <span class="nu0">2</span> <span class="sy2">*</span> numerator<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>numerator <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> nod <span class="sy1">=</span> Nod<span class="br0">&#40;</span><span class="kw3">abs</span><span class="br0">&#40;</span>numerator<span class="br0">&#41;</span>, <span class="kw3">abs</span><span class="br0">&#40;</span>denominator<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; num <span class="sy1">=</span> numerator <span class="sy2">/</span> nod<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; den <span class="sy1">=</span> denominator <span class="sy2">/</span> nod<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Numerator<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> num<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Denominator<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> den<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span>
&nbsp; &nbsp; <span class="kw4">int</span> num<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> den<span class="sy4">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw4">int</span> Nod<span class="br0">&#40;</span><span class="kw4">int</span> a, <span class="kw4">int</span> b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>a <span class="sy1">&gt;</span> <span class="nu0">0</span> <span class="sy3">&amp;&amp;</span> b <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>a <span class="sy1">&gt;</span> b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a <span class="sy2">%</span><span class="sy1">=</span> b<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b <span class="sy2">%</span><span class="sy1">=</span> a<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="co1">//while</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> a <span class="sy2">+</span> b<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
Rational operator <span class="sy2">/</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">throw</span> domain_error<span class="br0">&#40;</span><span class="st0">&quot;domain_error&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">return</span> Rational<span class="br0">&#40;</span><span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>, <span class="br0">&#40;</span>a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
istream<span class="sy3">&amp;</span> operator <span class="sy1">&gt;&gt;</span> <span class="br0">&#40;</span>istream<span class="sy3">&amp;</span> stream, Rational<span class="sy3">&amp;</span> r<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co1">//if (stream) return stream;</span>
&nbsp; &nbsp; <span class="kw4">int</span> p, q<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>stream <span class="sy1">&gt;&gt;</span> p <span class="sy3">&amp;&amp;</span> stream.<span class="me1">ignore</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="sy3">&amp;&amp;</span> stream <span class="sy1">&gt;&gt;</span> q<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; r <span class="sy1">=</span> <span class="br0">&#123;</span> p, q <span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> stream<span class="sy4">;</span>
<span class="br0">&#125;</span>
ostream<span class="sy3">&amp;</span> operator <span class="sy1">&lt;&lt;</span> <span class="br0">&#40;</span>ostream<span class="sy3">&amp;</span> stream, <span class="kw4">const</span> Rational<span class="sy3">&amp;</span> r<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; stream <span class="sy1">&lt;&lt;</span> r.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;/&quot;</span> <span class="sy1">&lt;&lt;</span> r.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">return</span> stream<span class="sy4">;</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; Rational r<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">0</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Doesn't throw in case of zero denominator&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">1</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw2">catch</span> <span class="br0">&#40;</span>invalid_argument<span class="sy3">&amp;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">auto</span> x <span class="sy1">=</span> Rational<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">2</span><span class="br0">&#41;</span> <span class="sy2">/</span> Rational<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Doesn't throw in case of division by zero&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">2</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw2">catch</span> <span class="br0">&#40;</span>domain_error<span class="sy3">&amp;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;OK&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>С исключениями вроде просто всё</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4892.html</guid>
		</item>
		<item>
			<title><![CDATA[С++ «Неделя четвертая - Работа с текстовыми файлами и потоками - Выполнение операций "естественным" образом» #21]]></title>
			<link>https://www.cyberforum.ru/blogs/457043/4890.html</link>
			<pubDate>Tue, 22 Aug 2017 19:37:18 GMT</pubDate>
			<description>Класс Rational. Сначала чуть не запутался. Буду показывать уже готовое решение без промежуточных...</description>
			<content:encoded><![CDATA[<div>Класс Rational. Сначала чуть не запутался. Буду показывать уже готовое решение без промежуточных файлов.<br />
<b>Вот еще задача: </b><br />
Общее описание<br />
<br />
В этой задаче вам надо разработать класс для представления рациональных чисел и внедрить его в систему типов языка С++ так, чтобы им можно было пользоваться естественным образом. Задание состоит из нескольких частей. К каждой части приложен файл с заготовкой программы, который имеет следующую структуру<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="350677398"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="350677398" style="height: 190px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
&nbsp;
<span class="co1">// Комментарии, которые говорят, что именно нужно реализовать в этой программе</span>
&nbsp;
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co1">// Набор юнит-тестов для вашей реализации</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;OK&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Вам нужно, не меняя тело функции main, реализовать то, что предложено в комментариях, так, чтобы ваша программа выводила на экран сообщение OK. Функция main содержит ряд юнит-тестов, которые проверяют правильность вашей реализации. Если эти тесты находят ошибку в вашей реализации, то вместо OK программа выведет подсказку о том, что именно работает неправильно.<br />
<br />
Когда ваша программа начнёт выводить OK, можете отправлять свой файл на проверку. Ваша реализация будет тестироваться на другом, более полном наборе тестов. То есть, если ваша программа выводит OK, то это не даёт гарантии, что ваша реализация будет принята тестирующей системой. В случае неудачной посылки тестирующая система также выдаст вам подсказку о том, какая именно часть реализации работает неправильно.<br />
<br />
Внимательно изучите набор юнит-тестов для каждой заготовки решения. Тесты описывают требования, предъявляемые к вашей реализации, которые могут быть не указаны в условии задач<br />
<br />
Часть 1<br />
<br />
В первой части вам надо реализовать класс Rational, который представляет собой рациональное число вида p/q, где p целое, а q натуральное. Он должен иметь следующий интерфейс:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="406739191"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="406739191" style="height: 158px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
</pre></td><td class="de1"><pre class="de1"><span class="kw2">class</span> Rational <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; Rational<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; Rational<span class="br0">&#40;</span><span class="kw4">int</span> numerator, <span class="kw4">int</span> denominator<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
&nbsp; <span class="kw4">int</span> Numerator<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span><span class="sy4">;</span>
&nbsp; <span class="kw4">int</span> Denominator<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span><span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Класс Rational должен гарантировать, что p/q — это несократимая дробь. Например, код<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="854242598"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="854242598" style="height: 62px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
</pre></td><td class="de1"><pre class="de1">Rational r<span class="br0">&#40;</span><span class="nu0">4</span>, <span class="nu0">6</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> r.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> <span class="st0">'/'</span> <span class="sy1">&lt;&lt;</span> r.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>должен выводить «2/3» — именно поэтому мы делаем Rational классом, а не структурой. Структура позволила бы нарушить этот инвариант:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="241543399"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="241543399" style="height: 126px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
</pre></td><td class="de1"><pre class="de1"><span class="kw4">struct</span> Rational <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> numerator, denominator<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
Rational r<span class="br0">&#123;</span><span class="nu0">2</span>, <span class="nu0">3</span><span class="br0">&#125;</span><span class="sy4">;</span>
r.<span class="me1">numerator</span> <span class="sy1">=</span> <span class="nu0">6</span><span class="sy4">;</span> <span class="co1">// Нарушен инвариант несократимости</span></pre></td></tr></table></div></td></tr></tbody></table></div>Список требований, предъявляемых к реализации интерфейса класса Rational:<br />
<ol style="list-style-type: decimal"><li>Конструктор по умолчанию должен создавать дробь с числителем 0 и знаменателем 1.</li>
<li>При конструировании объека класса Rational с параметрами p и q должно выполняться сокращение дроби p/q (здесь вам может пригодиться решение задачи «Наибольший общий делитель»).</li>
<li>Если дробь p/q отрицательная, то объект Rational(p, q) должен иметь отрицательный числитель и положительный знаменатель.</li>
<li>Если дробь p/q положительная, то объект Rational(p, q) должен иметь положительные числитель и знаменатель (обратите внимание на случай Rational(-2, -3)).</li>
<li>Если числитель дроби равен нулю, то знаменатель должен быть равен 1.</li>
</ol>Гарантируется, что ни в одном из тестов, на которых будет тестироваться ваша реализация, не будет знаменателя, равного нулю.<br />
<br />
Часть 2<br />
<br />
Реализуйте для класса Rational операторы ==, + и - так, чтобы операции с дробями можно было записывать естественным образом. Например, следующий код должен быть валидным:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="846028657"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="846028657" style="height: 94px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
</pre></td><td class="de1"><pre class="de1"><span class="kw4">const</span> Rational r <span class="sy1">=</span> Rational<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">2</span><span class="br0">&#41;</span> <span class="sy2">+</span> Rational<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">3</span><span class="br0">&#41;</span> <span class="sy2">-</span> Rational<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">4</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="kw1">if</span> <span class="br0">&#40;</span>r <span class="sy1">==</span> Rational<span class="br0">&#40;</span><span class="nu0">7</span>, <span class="nu0">12</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;equal&quot;</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Часть 3<br />
<br />
Аналогично предыдущей части, реализуйте операторы * и /. Например, следующий код должен быть валидным:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="558144588"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="558144588" style="height: 94px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
</pre></td><td class="de1"><pre class="de1"><span class="kw4">const</span> Rational r <span class="sy1">=</span> Rational<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">2</span><span class="br0">&#41;</span> <span class="sy2">*</span> Rational<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">3</span><span class="br0">&#41;</span> <span class="sy2">/</span> Rational<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">4</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="kw1">if</span> <span class="br0">&#40;</span>r <span class="sy1">==</span> Rational<span class="br0">&#40;</span><span class="nu0">2</span>, <span class="nu0">3</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;equal&quot;</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Гарантируется, что ни в одном из тестов, на которых будет тестироваться ваша реализация, не будет выполняться деление на ноль.<br />
<br />
Часть 4<br />
<br />
В этой части вам нужно реализовать операторы ввода и вывода для класса Rational. В результате у вас должен работать, например, такой код<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="24185604"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="24185604" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1">Rational r<span class="sy4">;</span>
<span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> r<span class="sy4">;</span>
<span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> r<span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Наконец, вам нужно реализовать возможность использовать объекты класса Rational в качестве элементов контейнера set и ключей в контейнере map. Пример:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="707470142"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="707470142" style="height: 126px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
</pre></td><td class="de1"><pre class="de1">set<span class="sy1">&lt;</span>Rational<span class="sy1">&gt;</span> rationals<span class="sy4">;</span>
rationals.<span class="me1">insert</span><span class="br0">&#40;</span>Rational<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
rationals.<span class="me1">insert</span><span class="br0">&#40;</span>Rational<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">3</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
map<span class="sy1">&lt;</span>Rational, string<span class="sy1">&gt;</span> name<span class="sy4">;</span>
name<span class="br0">&#91;</span>Rational<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#93;</span> <span class="sy1">=</span> <span class="st0">&quot;одна вторая&quot;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="420053800"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="420053800" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;sstream&gt;</span>
<span class="co2">#include &lt;cmath&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;set&gt;</span>
<span class="co2">#include &lt;map&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw2">class</span> Rational <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; &nbsp; Rational<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//конструктор по умолчанию</span>
&nbsp; &nbsp; &nbsp; &nbsp; num <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; den <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; Rational<span class="br0">&#40;</span><span class="kw4">int</span> numerator, <span class="kw4">int</span> denominator<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>denominator <span class="sy1">&lt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//постепенно все проверяем, что пришло на вход</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>numerator <span class="sy1">&lt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//и следим за отрицательностью</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator <span class="sy1">=</span> <span class="kw3">abs</span><span class="br0">&#40;</span>denominator<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numerator <span class="sy1">=</span> <span class="kw3">abs</span><span class="br0">&#40;</span>numerator<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator <span class="sy1">=</span> <span class="kw3">abs</span><span class="br0">&#40;</span>denominator<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numerator <span class="sy1">=</span> numerator <span class="sy2">-</span> <span class="nu0">2</span> <span class="sy2">*</span> numerator<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>numerator <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; denominator <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//обязательно сократим дробь, если можно</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> nod <span class="sy1">=</span> Nod<span class="br0">&#40;</span><span class="kw3">abs</span><span class="br0">&#40;</span>numerator<span class="br0">&#41;</span>, <span class="kw3">abs</span><span class="br0">&#40;</span>denominator<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; num <span class="sy1">=</span> numerator <span class="sy2">/</span> nod<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; den <span class="sy1">=</span> denominator <span class="sy2">/</span> nod<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Numerator<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span> <span class="br0">&#123;</span> <span class="co1">//тут просто возвращаем значения</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> num<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Denominator<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span> <span class="br0">&#123;</span> <span class="co1">//и тут</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> den<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span>
&nbsp; &nbsp; <span class="kw4">int</span> num<span class="sy4">;</span> <span class="co1">//поле числитель</span>
&nbsp; &nbsp; <span class="kw4">int</span> den<span class="sy4">;</span> <span class="co1">//и знаменатель</span>
&nbsp;
&nbsp; &nbsp; <span class="kw4">int</span> Nod<span class="br0">&#40;</span><span class="kw4">int</span> a, <span class="kw4">int</span> b<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//маленькая функция нахождения делителя</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>a <span class="sy1">&gt;</span> <span class="nu0">0</span> <span class="sy3">&amp;&amp;</span> b <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>a <span class="sy1">&gt;</span> b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a <span class="sy2">%</span><span class="sy1">=</span> b<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b <span class="sy2">%</span><span class="sy1">=</span> a<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="co1">//while</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> a <span class="sy2">+</span> b<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
<span class="kw4">bool</span> operator <span class="sy1">==</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//перезгузим оператор ==</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy3">&amp;&amp;</span> <span class="br0">&#40;</span>a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">true</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
Rational operator <span class="sy2">+</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//и тут перегрузим, и дальше тоже</span>
&nbsp; &nbsp; <span class="kw4">int</span> p <span class="sy1">=</span> <span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy2">+</span> <span class="br0">&#40;</span>b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> q <span class="sy1">=</span> a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">return</span> Rational<span class="br0">&#40;</span>p, q<span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
Rational operator <span class="sy2">-</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> p <span class="sy1">=</span> <span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy2">-</span> <span class="br0">&#40;</span>b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> q <span class="sy1">=</span> a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">return</span> Rational<span class="br0">&#40;</span>p, q<span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
Rational operator <span class="sy2">*</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> Rational<span class="br0">&#40;</span><span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy2">*</span>b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>, <span class="br0">&#40;</span>a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy2">*</span>b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
Rational operator <span class="sy2">/</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> Rational<span class="br0">&#40;</span><span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>, <span class="br0">&#40;</span>a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">*</span> b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
istream<span class="sy3">&amp;</span> operator <span class="sy1">&gt;&gt;</span> <span class="br0">&#40;</span>istream<span class="sy3">&amp;</span> stream, Rational<span class="sy3">&amp;</span> r<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//возвращать будем ссылку на поток</span>
&nbsp; &nbsp; <span class="co1">//if (stream) return stream;</span>
&nbsp; &nbsp; <span class="kw4">int</span> p, q<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>stream <span class="sy1">&gt;&gt;</span> p <span class="sy3">&amp;&amp;</span> stream.<span class="me1">ignore</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="sy3">&amp;&amp;</span> stream <span class="sy1">&gt;&gt;</span> q<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; r <span class="sy1">=</span> <span class="br0">&#123;</span> p, q <span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> stream<span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
ostream<span class="sy3">&amp;</span> operator <span class="sy1">&lt;&lt;</span> <span class="br0">&#40;</span>ostream<span class="sy3">&amp;</span> stream, <span class="kw4">const</span> Rational<span class="sy3">&amp;</span> r<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; stream <span class="sy1">&lt;&lt;</span> r.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;/&quot;</span> <span class="sy1">&lt;&lt;</span> r.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">return</span> stream<span class="sy4">;</span>
<span class="br0">&#125;</span>
<span class="kw4">bool</span> operator <span class="sy1">&gt;</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">/</span> <span class="br0">&#40;</span><span class="kw4">double</span><span class="br0">&#41;</span>a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy1">&gt;</span> <span class="kw4">double</span><span class="br0">&#40;</span>b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">/</span> <span class="br0">&#40;</span><span class="kw4">double</span><span class="br0">&#41;</span>b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
<span class="kw4">bool</span> operator <span class="sy1">&lt;</span> <span class="br0">&#40;</span>Rational a, Rational b<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//обязательно нужно это дело перегрузить, для использования в map и set</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>a.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">/</span> <span class="br0">&#40;</span><span class="kw4">double</span><span class="br0">&#41;</span>a.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy1">&lt;</span> <span class="br0">&#40;</span>b.<span class="me1">Numerator</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">/</span> <span class="br0">&#40;</span><span class="kw4">double</span><span class="br0">&#41;</span>b.<span class="me1">Denominator</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">const</span> set<span class="sy1">&lt;</span>Rational<span class="sy1">&gt;</span> rs <span class="sy1">=</span> <span class="br0">&#123;</span> <span class="br0">&#123;</span> <span class="nu0">1</span>, <span class="nu0">2</span> <span class="br0">&#125;</span>,<span class="br0">&#123;</span> <span class="nu0">1</span>, <span class="nu0">25</span> <span class="br0">&#125;</span>,<span class="br0">&#123;</span> <span class="nu0">3</span>, <span class="nu0">4</span> <span class="br0">&#125;</span>,<span class="br0">&#123;</span> <span class="nu0">3</span>, <span class="nu0">4</span> <span class="br0">&#125;</span>,<span class="br0">&#123;</span> <span class="nu0">1</span>, <span class="nu0">2</span> <span class="br0">&#125;</span> <span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>rs.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="nu0">3</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Wrong amount of items in the set&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">1</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; vector<span class="sy1">&lt;</span>Rational<span class="sy1">&gt;</span> v<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> x <span class="sy4">:</span> rs<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v.<span class="me1">push_back</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>v <span class="sy3">!</span><span class="sy1">=</span> vector<span class="sy1">&lt;</span>Rational<span class="sy1">&gt;</span><span class="br0">&#123;</span> <span class="br0">&#123;</span><span class="nu0">1</span>, <span class="nu0">25</span><span class="br0">&#125;</span>, <span class="br0">&#123;</span> <span class="nu0">1</span>, <span class="nu0">2</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span> <span class="nu0">3</span>, <span class="nu0">4</span> <span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Rationals comparison works incorrectly&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">2</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; map<span class="sy1">&lt;</span>Rational, <span class="kw4">int</span><span class="sy1">&gt;</span> count<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy2">++</span>count<span class="br0">&#91;</span><span class="br0">&#123;</span><span class="nu0">1</span>, <span class="nu0">2</span><span class="br0">&#125;</span><span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy2">++</span>count<span class="br0">&#91;</span><span class="br0">&#123;</span><span class="nu0">1</span>, <span class="nu0">2</span><span class="br0">&#125;</span><span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy2">++</span>count<span class="br0">&#91;</span><span class="br0">&#123;</span><span class="nu0">2</span>, <span class="nu0">3</span><span class="br0">&#125;</span><span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>count.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="nu0">2</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Wrong amount of items in the map&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">3</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;OK&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Писать комментарии долгое дело однако. Иногда неохота, иногда мало времени.</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4890.html</guid>
		</item>
		<item>
			<title>С++ «Неделя четвертая - Работа с текстовыми файлами и потоками - Список студентов» #20</title>
			<link>https://www.cyberforum.ru/blogs/457043/4889.html</link>
			<pubDate>Tue, 22 Aug 2017 19:06:11 GMT</pubDate>
			<description>Продолжаю курс «Основы разработки на C++: белый пояс» 
Новое *задание:* 
Определите структуру...</description>
			<content:encoded><![CDATA[<div>Продолжаю курс «Основы разработки на C++: белый пояс»<br />
Новое <b>задание:</b><br />
Определите структуру «Студент» со следующими полями: имя, фамилия, день, месяц и год рождения. Создайте вектор из таких структур, заполните его из входных данных и затем по запросам выведите нужные поля.<br />
<br />
<b>Формат ввода</b><br />
<br />
Первая строка содержит одно целое число N от 0 до 10000 — число студентов.<br />
<br />
Далее идут N строк, каждая из которых содержит две строки длиной от 1 до 15 символов — имя и фамилию очередного студента, и три целых числа от 0 до 1000000000 — день, месяц и год рождения.<br />
<br />
Следующая строка содержит одно целое число M от 0 до 10000 — число запросов.<br />
<br />
Следующие M строк содержат строку длиной от 1 до 15 символов — запрос, и целое число от 0 до 1000000000 — номер студента (нумерация начинается с 1).<br />
<br />
<b>Формат вывода</b><br />
<br />
Для запроса вида <b>name K</b>, где K от 1 до N, выведите через пробел имя и фамилию K-го студента.<br />
<br />
Для запроса вида <b>date K</b>, где K от 1 до N, выведите через точку день, месяц и год рождения K-го студента.<br />
<br />
Для остальных запросов выведите <b>bad request</b>.<br />
<br />
Пример ввода<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="976775330"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="976775330" style="height: 158px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
</pre></td><td class="de1"><pre class="de1"><span class="nu0">3</span>
Ivan Ivanov <span class="nu0">1</span> <span class="nu0">1</span> <span class="nu0">1901</span>
Petr Petrox <span class="nu0">2</span> <span class="nu0">2</span> <span class="nu0">1902</span>
Alexander Sidorov <span class="nu0">3</span> <span class="nu0">3</span> <span class="nu0">1903</span>
<span class="nu0">3</span>
name <span class="nu0">1</span>
date <span class="nu0">3</span>
mark <span class="nu0">5</span></pre></td></tr></table></div></td></tr></tbody></table></div>Пример вывода<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="270239293"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="270239293" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1">Ivan Ivanov
3.3.1903
bad request</pre></td></tr></table></div></td></tr></tbody></table></div><b>Мой решение:</b><br />
Важно было найти все случаи при которых выводится <b>bad request</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="149351800"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="149351800" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
&nbsp;
<span class="kw4">struct</span> Student <span class="br0">&#123;</span> <span class="co1">//простая структура</span>
&nbsp; &nbsp; string Name<span class="sy4">;</span>
&nbsp; &nbsp; string Soname<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Day<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Month<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Year<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> n, m<span class="sy4">;</span>
&nbsp; &nbsp; string name<span class="sy4">;</span>
&nbsp; &nbsp; string soname<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> day<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> month<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> year<span class="sy4">;</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span>Student<span class="sy1">&gt;</span> vec<span class="sy4">;</span> <span class="co1">//вектор &quot;студентов&quot;</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> n<span class="sy4">;</span> считываем число
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> n<span class="sy4">;</span> <span class="sy2">++</span>i<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//и n раз ...</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> name <span class="sy1">&gt;&gt;</span> soname <span class="sy1">&gt;&gt;</span> day <span class="sy1">&gt;&gt;</span> month <span class="sy1">&gt;&gt;</span> year<span class="sy4">;</span> <span class="co1">//считываем данные</span>
&nbsp; &nbsp; &nbsp; &nbsp; vec.<span class="me1">push_back</span><span class="br0">&#40;</span><span class="br0">&#123;</span> name, soname, day, month, year <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//и вносим в вектор</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> m<span class="sy4">;</span> <span class="co1">//затем еще число</span>
&nbsp; &nbsp; string command<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> key<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> j <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> j <span class="sy1">&lt;</span> m<span class="sy4">;</span> <span class="sy2">++</span>j<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//и повторяем m раз</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> command <span class="sy1">&gt;&gt;</span> key<span class="sy4">;</span> <span class="co1">//считаем команду и ключ</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>vec.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&lt;</span> key <span class="sy3">||</span> key <span class="sy1">&lt;=</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если ключ меньше размера вектора или меньше нуля</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;bad request&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//пишем, что это не хорошо</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>command <span class="sy1">==</span> <span class="st0">&quot;name&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если команда - Имя</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> vec<span class="br0">&#91;</span>key <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">Name</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span> <span class="sy1">&lt;&lt;</span> vec<span class="br0">&#91;</span>key <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">Soname</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//вывод имени</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>command <span class="sy1">==</span> <span class="st0">&quot;date&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если команда - Дата</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> vec<span class="br0">&#91;</span>key <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">Day</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;.&quot;</span> <span class="sy1">&lt;&lt;</span> vec<span class="br0">&#91;</span>key <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">Month</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;.&quot;</span> <span class="sy1">&lt;&lt;</span> vec<span class="br0">&#91;</span>key <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">Year</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//вывод даты</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="co1">//в остальных случаях</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;bad request&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//всё плохо</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4889.html</guid>
		</item>
		<item>
			<title>С++ «Неделя четвертая - Работа с текстовыми файлами и потоками - Работа с файлами» #19</title>
			<link>https://www.cyberforum.ru/blogs/457043/4888.html</link>
			<pubDate>Tue, 22 Aug 2017 18:51:42 GMT</pubDate>
			<description>Потоки прикольная штука. Вот новое *задание*: 
В этом задании вам предстоит написать две небольшие...</description>
			<content:encoded><![CDATA[<div>Потоки прикольная штука. Вот новое <b>задание</b>:<br />
В этом задании вам предстоит написать две небольшие программы. Каждый пункт - отдельная задача, решение отправляйте в поле с соответствующим номером.<br />
Часть 1<br />
<br />
Ваша программа должна считать содержимое файла input.txt и напечатать его на экран без изменений. Гарантируется, что содержимое файла input.txt заканчивается переводом строки.<br />
<br />
Пример<br />
input.txt<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="390228814"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="390228814" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1">Kepp calm
<span class="kw2">and</span>
learn C<span class="sy2">++</span></pre></td></tr></table></div></td></tr></tbody></table></div>stdout<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="306560775"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="306560775" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1">Kepp calm
<span class="kw2">and</span>
learn C<span class="sy2">++</span></pre></td></tr></table></div></td></tr></tbody></table></div>Часть 2<br />
<br />
Снова считайте все содержимое файла input.txt, но на этот раз выведите его в файл output.txt . Точно так же гарантируется, что содержимое файла input.txt заканчивается переводом строки.<br />
<br />
Пример<br />
input.txt<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="42608803"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="42608803" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1">Kepp calm
<span class="kw2">and</span>
learn C<span class="sy2">++</span></pre></td></tr></table></div></td></tr></tbody></table></div>output.txt<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="430292706"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="430292706" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1">Kepp calm
<span class="kw2">and</span>
learn C<span class="sy2">++</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="425300632"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="425300632" style="height: 270px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;fstream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
&nbsp;
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; ifstream input<span class="br0">&#40;</span><span class="st0">&quot;input.txt&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; string line<span class="sy4">;</span>
&nbsp; &nbsp; ofstream output<span class="br0">&#40;</span><span class="st0">&quot;output.txt&quot;</span>, ios<span class="sy4">::</span><span class="me2">app</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>getline<span class="br0">&#40;</span>input, line<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> line <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="co1">//закомментируем эту строку, для 2 части</span>
&nbsp; &nbsp; &nbsp; &nbsp; output <span class="sy1">&lt;&lt;</span> line <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="co1">//закомментируем эту строку, для 1 части</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>В продолжение темы:<br />
<b>Задание:</b><br />
В файле input.txt записаны вещественные числа, по одному на строчку. На стандартный вывод напечатайте эти числа в том же порядке, по одному на строке, но сделайте так, чтобы у каждого из них было ровно три знака после десятичной точки (округление производится по стандартным правилам, т.е. 0.1234 округляется до 0.123, а 0.1235 до 0.124).<br />
Пример ввода<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="11656636"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="11656636" style="height: 126px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
</pre></td><td class="de1"><pre class="de1"><span class="nu0">5</span>
<span class="nu16">0.34567</span>
<span class="nu16">10.4</span>
<span class="nu16">3.33353</span>
<span class="nu16">3.333</span>
<span class="nu16">3.3</span></pre></td></tr></table></div></td></tr></tbody></table></div>Пример вывода<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="72416020"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="72416020" style="height: 126px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
</pre></td><td class="de1"><pre class="de1"><span class="nu16">5.000</span>
<span class="nu16">0.346</span>
<span class="nu16">10.400</span>
<span class="nu16">3.334</span>
<span class="nu16">3.333</span>
<span class="nu16">3.300</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="622418663"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="622418663" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;fstream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;iomanip&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
&nbsp;
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; ifstream input<span class="br0">&#40;</span><span class="st0">&quot;input.txt&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//входной поток из файла</span>
&nbsp; &nbsp; string line<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>getline<span class="br0">&#40;</span>input, line<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//пока не кончатся строки</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//тут я порылся в инете(с мыслью конвертировать строки в число), и нашел интересность ниже</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">double</span> dline <span class="sy1">=</span> <span class="kw3">atof</span><span class="br0">&#40;</span>line.<span class="me1">c_str</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//любопытная штукенция для конвертации</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> fixed <span class="sy1">&lt;&lt;</span> setprecision<span class="br0">&#40;</span><span class="nu0">3</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//как положено, 3 знака после точки</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> dline <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
<span class="co1">//или можно было так</span>
<span class="coMULTI">/*int main() {</span>
<span class="coMULTI">&nbsp; &nbsp; ifstream input(&quot;input.txt&quot;);</span>
<span class="coMULTI">&nbsp; &nbsp; double line;</span>
<span class="coMULTI">&nbsp; &nbsp; cout &lt;&lt; fixed &lt;&lt; setprecision(3);</span>
<span class="coMULTI">&nbsp; &nbsp; while (input) {</span>
<span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; input &gt;&gt; line;</span>
<span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; cout &lt;&lt; line &lt;&lt; endl;</span>
<span class="coMULTI">&nbsp; &nbsp; }</span>
<span class="coMULTI">&nbsp; &nbsp; return 0;</span>
<span class="coMULTI">}*/</span></pre></td></tr></table></div></td></tr></tbody></table></div>И ещё <b>задание:</b><br />
В первой строке файла input.txt записаны два числа N и M. Далее в файле находится таблица из N строк и M столбцов, представленная в формате CSV (comma-separated values). Такой формат часто используется для текстового представления таблиц с данными: в файле несколько строк, значения из разных ячеек внутри строки отделены друг от друга запятыми. Ваша задача — вывести данные на экран в виде таблицы, размер ячейки которой равен 10, соседние ячейки отделены друг от друга пробелом. После последней ячейки пробела быть не должно. Гарантируется, что в таблице будет ровно N строк и M столбцов, значение каждой из ячеек — целое число.<br />
Пример ввода<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="667590057"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="667590057" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1"><span class="nu0">2</span> <span class="nu0">3</span>
<span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">3</span>
<span class="nu0">4</span>,<span class="nu0">5</span>,<span class="nu0">6</span></pre></td></tr></table></div></td></tr></tbody></table></div>Пример вывода<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="10021240"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="10021240" style="height: 62px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
</pre></td><td class="de1"><pre class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">2</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">3</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">4</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">5</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">6</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="414140480"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="414140480" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;fstream&gt;</span>
<span class="co2">#include &lt;iomanip&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; ifstream input<span class="br0">&#40;</span><span class="st0">&quot;input.txt&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; string lines<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> N, M<span class="sy4">;</span>
&nbsp; &nbsp; <span class="co1">//подумал. что надо сначала перевести первые 2 параметра из строки в число и сначала сделал так...</span>
&nbsp; &nbsp; <span class="coMULTI">/*getline(input, lines, ' '); //взять строку до пробела</span>
<span class="coMULTI">&nbsp; &nbsp; N = atoi(lines.c_str()); //перевести её в число</span>
<span class="coMULTI">&nbsp; &nbsp; getline(input, lines); //взять оставшееся и</span>
<span class="coMULTI">&nbsp; &nbsp; M = atoi(lines.c_str());*/</span> <span class="co1">//тоже перевести в число</span>
&nbsp; &nbsp; <span class="co1">//но оказалось можно и проще</span>
&nbsp; &nbsp; input <span class="sy1">&gt;&gt;</span> N <span class="sy1">&gt;&gt;</span> M<span class="sy4">;</span> <span class="co1">// )))))</span>
&nbsp; &nbsp; input.<span class="me1">ignore</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//еще перевод строки остался, его игнорируем(иначе выведется)</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy1">=</span> N<span class="sy4">;</span> i <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span><span class="sy2">--</span>i<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> z <span class="sy1">=</span> M<span class="sy4">;</span> z <span class="sy1">&gt;</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="sy2">--</span>z<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getline<span class="br0">&#40;</span>input, lines, <span class="st0">','</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> setw<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> lines <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; getline<span class="br0">&#40;</span>input, lines<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> setw<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> lines <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Продолжение смотрите в блоге...</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4888.html</guid>
		</item>
		<item>
			<title>С++ «Неделя четвертая - Структуры и классы - Структура LectureTitle» #18</title>
			<link>https://www.cyberforum.ru/blogs/457043/4887.html</link>
			<pubDate>Tue, 22 Aug 2017 18:13:36 GMT</pubDate>
			<description>Началась четвертая неделя обучения. Структуры и классы.  
*Задание:* 
Дана структура LectureTitle:...</description>
			<content:encoded><![CDATA[<div>Началась четвертая неделя обучения. Структуры и классы. <br />
<b>Задание:</b><br />
Дана структура LectureTitle:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="640852533"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="640852533" style="height: 110px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
</pre></td><td class="de1"><pre class="de1"><span class="kw4">struct</span> LectureTitle <span class="br0">&#123;</span>
&nbsp; string specialization<span class="sy4">;</span>
&nbsp; string course<span class="sy4">;</span>
&nbsp; string week<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Допишите конструктор и структуры Specialization, Course, Week так, чтобы объект LectureTitle можно было создать с помощью кода<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="725075429"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="725075429" style="height: 110px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
</pre></td><td class="de1"><pre class="de1">LectureTitle title<span class="br0">&#40;</span>
&nbsp; &nbsp; Specialization<span class="br0">&#40;</span><span class="st0">&quot;C++&quot;</span><span class="br0">&#41;</span>,
&nbsp; &nbsp; Course<span class="br0">&#40;</span><span class="st0">&quot;White belt&quot;</span><span class="br0">&#41;</span>,
&nbsp; &nbsp; Week<span class="br0">&#40;</span><span class="st0">&quot;4th&quot;</span><span class="br0">&#41;</span>
<span class="br0">&#41;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>но нельзя было с помощью следующих фрагментов кода:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="245336783"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="245336783" style="height: 302px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="de1"><pre class="de1">LectureTitle title<span class="br0">&#40;</span><span class="st0">&quot;C++&quot;</span>, <span class="st0">&quot;White belt&quot;</span>, <span class="st0">&quot;4th&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
LectureTitle title <span class="sy1">=</span> <span class="br0">&#123;</span><span class="st0">&quot;C++&quot;</span>, <span class="st0">&quot;White belt&quot;</span>, <span class="st0">&quot;4th&quot;</span><span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
LectureTitle title <span class="sy1">=</span> <span class="br0">&#123;</span><span class="br0">&#123;</span><span class="st0">&quot;C++&quot;</span><span class="br0">&#125;</span>, <span class="br0">&#123;</span><span class="st0">&quot;White belt&quot;</span><span class="br0">&#125;</span>, <span class="br0">&#123;</span><span class="st0">&quot;4th&quot;</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
LectureTitle title<span class="br0">&#40;</span>
&nbsp; &nbsp; Course<span class="br0">&#40;</span><span class="st0">&quot;White belt&quot;</span><span class="br0">&#41;</span>,
&nbsp; &nbsp; Specialization<span class="br0">&#40;</span><span class="st0">&quot;C++&quot;</span><span class="br0">&#41;</span>,
&nbsp; &nbsp; Week<span class="br0">&#40;</span><span class="st0">&quot;4th&quot;</span><span class="br0">&#41;</span>
<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
LectureTitle title<span class="br0">&#40;</span>
&nbsp; &nbsp; Specialization<span class="br0">&#40;</span><span class="st0">&quot;C++&quot;</span><span class="br0">&#41;</span>,
&nbsp; &nbsp; Week<span class="br0">&#40;</span><span class="st0">&quot;4th&quot;</span><span class="br0">&#41;</span>,
&nbsp; &nbsp; Course<span class="br0">&#40;</span><span class="st0">&quot;White belt&quot;</span><span class="br0">&#41;</span>
<span class="br0">&#41;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="144168301"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="144168301" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">struct</span> Specialization <span class="br0">&#123;</span>
&nbsp; &nbsp; string value<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw2">explicit</span> Specialization<span class="br0">&#40;</span>string new_val<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; value <span class="sy1">=</span> new_val<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
<span class="kw4">struct</span> Course <span class="br0">&#123;</span>
&nbsp; &nbsp; string value<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw2">explicit</span> Course<span class="br0">&#40;</span>string new_val<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; value <span class="sy1">=</span> new_val<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
<span class="kw4">struct</span> Week<span class="br0">&#123;</span>
&nbsp; &nbsp; string value<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw2">explicit</span> Week<span class="br0">&#40;</span>string new_val<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; value <span class="sy1">=</span> new_val<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
<span class="kw4">struct</span> LectureTitle <span class="br0">&#123;</span>
&nbsp; &nbsp; string specialization<span class="sy4">;</span>
&nbsp; &nbsp; string course<span class="sy4">;</span>
&nbsp; &nbsp; string week<span class="sy4">;</span>
&nbsp; &nbsp; LectureTitle<span class="br0">&#40;</span>Specialization new_s, Course new_c, Week new_w<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; specialization <span class="sy1">=</span> new_s.<span class="me1">value</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; course <span class="sy1">=</span> new_c.<span class="me1">value</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; week <span class="sy1">=</span> new_w.<span class="me1">value</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>8-)<br />
И ещё небольшое <b>заданьице</b>:<br />
Реализуйте рассказанный на лекции класс Function, позволяющий создавать, вычислять и инвертировать функцию, состоящую из следующих элементарных операций:<ul><li>прибавить вещественное число x;</li>
<li>вычесть вещественное число x.</li>
</ul>При этом необходимо объявить константными все методы, которые по сути такими являются.<br />
<br />
Пример:<br />
Код<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="291829524"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="291829524" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="kw4">struct</span> Image <span class="br0">&#123;</span>
&nbsp; <span class="kw4">double</span> quality<span class="sy4">;</span>
&nbsp; <span class="kw4">double</span> freshness<span class="sy4">;</span>
&nbsp; <span class="kw4">double</span> rating<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
<span class="kw4">struct</span> Params <span class="br0">&#123;</span>
&nbsp; <span class="kw4">double</span> a<span class="sy4">;</span>
&nbsp; <span class="kw4">double</span> b<span class="sy4">;</span>
&nbsp; <span class="kw4">double</span> c<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
Function MakeWeightFunction<span class="br0">&#40;</span><span class="kw4">const</span> Params<span class="sy3">&amp;</span> params,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">const</span> Image<span class="sy3">&amp;</span> image<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; Function function<span class="sy4">;</span>
&nbsp; function.<span class="me1">AddPart</span><span class="br0">&#40;</span><span class="st0">'-'</span>, image.<span class="me1">freshness</span> <span class="sy2">*</span> params.<span class="me1">a</span> <span class="sy2">+</span> params.<span class="me1">b</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; function.<span class="me1">AddPart</span><span class="br0">&#40;</span><span class="st0">'+'</span>, image.<span class="me1">rating</span> <span class="sy2">*</span> params.<span class="me1">c</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">return</span> function<span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">double</span> ComputeImageWeight<span class="br0">&#40;</span><span class="kw4">const</span> Params<span class="sy3">&amp;</span> params, <span class="kw4">const</span> Image<span class="sy3">&amp;</span> image<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; Function function <span class="sy1">=</span> MakeWeightFunction<span class="br0">&#40;</span>params, image<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">return</span> function.<span class="me1">Apply</span><span class="br0">&#40;</span>image.<span class="me1">quality</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">double</span> ComputeQualityByWeight<span class="br0">&#40;</span><span class="kw4">const</span> Params<span class="sy3">&amp;</span> params,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">const</span> Image<span class="sy3">&amp;</span> image,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">double</span> weight<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; Function function <span class="sy1">=</span> MakeWeightFunction<span class="br0">&#40;</span>params, image<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; function.<span class="me1">Invert</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">return</span> function.<span class="me1">Apply</span><span class="br0">&#40;</span>weight<span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; Image image <span class="sy1">=</span> <span class="br0">&#123;</span><span class="nu0">10</span>, <span class="nu0">2</span>, <span class="nu0">6</span><span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp; Params params <span class="sy1">=</span> <span class="br0">&#123;</span><span class="nu0">4</span>, <span class="nu0">2</span>, <span class="nu0">6</span><span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> ComputeImageWeight<span class="br0">&#40;</span>params, image<span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> ComputeQualityByWeight<span class="br0">&#40;</span>params, image, <span class="nu0">46</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Вывод<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="101207170"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="101207170" style="height: 62px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
</pre></td><td class="de1"><pre class="de1"><span class="nu0">36</span>
<span class="nu0">20</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="538586344"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="538586344" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="co2">#include &lt;algorithm&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="coMULTI">/*struct Image {</span>
<span class="coMULTI">&nbsp; &nbsp; double quality;</span>
<span class="coMULTI">&nbsp; &nbsp; double freshness;</span>
<span class="coMULTI">&nbsp; &nbsp; double rating;</span>
<span class="coMULTI">};</span>
&nbsp;
<span class="coMULTI">struct Params {</span>
<span class="coMULTI">&nbsp; &nbsp; double a;</span>
<span class="coMULTI">&nbsp; &nbsp; double b;</span>
<span class="coMULTI">&nbsp; &nbsp; double c;</span>
<span class="coMULTI">};*/</span>
<span class="kw2">class</span> FunctionPart <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; &nbsp; FunctionPart<span class="br0">&#40;</span><span class="kw4">char</span> new_operation, <span class="kw4">double</span> new_value<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; value <span class="sy1">=</span> new_value<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; operation <span class="sy1">=</span> new_operation<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">double</span> Apply<span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">double</span><span class="sy3">&amp;</span> sourse_value<span class="br0">&#41;</span> <span class="kw4">const</span><span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>operation <span class="sy1">==</span> <span class="st0">'+'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> sourse_value <span class="sy2">+</span> value<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> sourse_value <span class="sy2">-</span> value<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">void</span> Invert<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>operation <span class="sy1">==</span> <span class="st0">'+'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operation <span class="sy1">=</span> <span class="st0">'-'</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operation <span class="sy1">=</span> <span class="st0">'+'</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span>
&nbsp; &nbsp; <span class="kw4">char</span> operation<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">double</span> value<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
<span class="kw2">class</span> Function <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; &nbsp; <span class="kw4">void</span> AddPart<span class="br0">&#40;</span><span class="kw4">char</span> operation, <span class="kw4">double</span> value<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; parts.<span class="me1">push_back</span><span class="br0">&#40;</span><span class="br0">&#123;</span> operation, value <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">double</span> Apply<span class="br0">&#40;</span><span class="kw4">double</span> value<span class="br0">&#41;</span> <span class="kw4">const</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> FunctionPart<span class="sy3">&amp;</span> part <span class="sy4">:</span> parts<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value <span class="sy1">=</span> part.<span class="me1">Apply</span><span class="br0">&#40;</span>value<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> value<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">void</span> Invert<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>FunctionPart<span class="sy3">&amp;</span> part <span class="sy4">:</span> parts<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; part.<span class="me1">Invert</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; reverse<span class="br0">&#40;</span>begin<span class="br0">&#40;</span>parts<span class="br0">&#41;</span>, end<span class="br0">&#40;</span>parts<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span>FunctionPart<span class="sy1">&gt;</span> parts<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>и <b>добавление к предыдущему заданию</b>:<br />
Добавьте в класс Function из задачи «Обратимая функция» обработку умножения ('*') и деления ('/'). Гарантируется отсутствие элементарных операций умножения и деления на 0.<br />
Пример<br />
Код<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="433682120"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="433682120" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="kw4">struct</span> Image <span class="br0">&#123;</span>
&nbsp; <span class="kw4">double</span> quality<span class="sy4">;</span>
&nbsp; <span class="kw4">double</span> freshness<span class="sy4">;</span>
&nbsp; <span class="kw4">double</span> rating<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
<span class="kw4">struct</span> Params <span class="br0">&#123;</span>
&nbsp; <span class="kw4">double</span> a<span class="sy4">;</span>
&nbsp; <span class="kw4">double</span> b<span class="sy4">;</span>
&nbsp; <span class="kw4">double</span> c<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
Function MakeWeightFunction<span class="br0">&#40;</span><span class="kw4">const</span> Params<span class="sy3">&amp;</span> params,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">const</span> Image<span class="sy3">&amp;</span> image<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; Function function<span class="sy4">;</span>
&nbsp; function.<span class="me1">AddPart</span><span class="br0">&#40;</span><span class="st0">'*'</span>, params.<span class="me1">a</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; function.<span class="me1">AddPart</span><span class="br0">&#40;</span><span class="st0">'-'</span>, image.<span class="me1">freshness</span> <span class="sy2">*</span> params.<span class="me1">b</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; function.<span class="me1">AddPart</span><span class="br0">&#40;</span><span class="st0">'+'</span>, image.<span class="me1">rating</span> <span class="sy2">*</span> params.<span class="me1">c</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">return</span> function<span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">double</span> ComputeImageWeight<span class="br0">&#40;</span><span class="kw4">const</span> Params<span class="sy3">&amp;</span> params, <span class="kw4">const</span> Image<span class="sy3">&amp;</span> image<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; Function function <span class="sy1">=</span> MakeWeightFunction<span class="br0">&#40;</span>params, image<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">return</span> function.<span class="me1">Apply</span><span class="br0">&#40;</span>image.<span class="me1">quality</span><span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">double</span> ComputeQualityByWeight<span class="br0">&#40;</span><span class="kw4">const</span> Params<span class="sy3">&amp;</span> params,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">const</span> Image<span class="sy3">&amp;</span> image,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">double</span> weight<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; Function function <span class="sy1">=</span> MakeWeightFunction<span class="br0">&#40;</span>params, image<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; function.<span class="me1">Invert</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">return</span> function.<span class="me1">Apply</span><span class="br0">&#40;</span>weight<span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; Image image <span class="sy1">=</span> <span class="br0">&#123;</span><span class="nu0">10</span>, <span class="nu0">2</span>, <span class="nu0">6</span><span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp; Params params <span class="sy1">=</span> <span class="br0">&#123;</span><span class="nu0">4</span>, <span class="nu0">2</span>, <span class="nu0">6</span><span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> ComputeImageWeight<span class="br0">&#40;</span>params, image<span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> ComputeQualityByWeight<span class="br0">&#40;</span>params, image, <span class="nu0">52</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Вывод<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="58215186"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="58215186" style="height: 62px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
</pre></td><td class="de1"><pre class="de1"><span class="nu0">72</span>
<span class="nu0">5</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="439326087"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="439326087" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="co2">#include &lt;algorithm&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw2">class</span> FunctionPart <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; &nbsp; FunctionPart<span class="br0">&#40;</span><span class="kw4">char</span> new_operation, <span class="kw4">double</span> new_value<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; value <span class="sy1">=</span> new_value<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; operation <span class="sy1">=</span> new_operation<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">double</span> Apply<span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">double</span><span class="sy3">&amp;</span> sourse_value<span class="br0">&#41;</span> <span class="kw4">const</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>operation <span class="sy1">==</span> <span class="st0">'+'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> sourse_value <span class="sy2">+</span> value<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>operation <span class="sy1">==</span> <span class="st0">'-'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> sourse_value <span class="sy2">-</span> value<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>operation <span class="sy1">==</span> <span class="st0">'*'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> sourse_value <span class="sy2">*</span> value<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> sourse_value <span class="sy2">/</span> value<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">void</span> Invert<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>operation <span class="sy1">==</span> <span class="st0">'+'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operation <span class="sy1">=</span> <span class="st0">'-'</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>operation <span class="sy1">==</span> <span class="st0">'-'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operation <span class="sy1">=</span> <span class="st0">'+'</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>operation <span class="sy1">==</span> <span class="st0">'*'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operation <span class="sy1">=</span> <span class="st0">'/'</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operation <span class="sy1">=</span> <span class="st0">'*'</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span>
&nbsp; &nbsp; <span class="kw4">char</span> operation<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">double</span> value<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
<span class="kw2">class</span> Function <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; &nbsp; <span class="kw4">void</span> AddPart<span class="br0">&#40;</span><span class="kw4">char</span> operation, <span class="kw4">double</span> value<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; parts.<span class="me1">push_back</span><span class="br0">&#40;</span><span class="br0">&#123;</span> operation, value <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">double</span> Apply<span class="br0">&#40;</span><span class="kw4">double</span> value<span class="br0">&#41;</span> <span class="kw4">const</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> FunctionPart<span class="sy3">&amp;</span> part <span class="sy4">:</span> parts<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value <span class="sy1">=</span> part.<span class="me1">Apply</span><span class="br0">&#40;</span>value<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> value<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">void</span> Invert<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>FunctionPart<span class="sy3">&amp;</span> part <span class="sy4">:</span> parts<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; part.<span class="me1">Invert</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; reverse<span class="br0">&#40;</span>begin<span class="br0">&#40;</span>parts<span class="br0">&#41;</span>, end<span class="br0">&#40;</span>parts<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span>FunctionPart<span class="sy1">&gt;</span> parts<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Далее работа с потоками...</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4887.html</guid>
		</item>
		<item>
			<title>С++ «Неделя третья - Введение в структуры и классы - Имена и фамилии» #17</title>
			<link>https://www.cyberforum.ru/blogs/457043/4886.html</link>
			<pubDate>Mon, 21 Aug 2017 14:29:59 GMT</pubDate>
			<description>Третья неделя обучения на coursera.org (http://coursera.org) 
Структуры и классы - интересная тема....</description>
			<content:encoded><![CDATA[<div>Третья неделя обучения на <a rel="nofollow noopener noreferrer" href="http://coursera.org" target="_blank" title="http://coursera.org">coursera.org</a><br />
Структуры и классы - интересная тема. Некоторые задания долго разбирал.<br />
<br />
Для начала маленькое <b>задание</b>:<br />
Реализуйте класс, поддерживающий набор строк в отсортированном порядке. Класс должен содержать два публичных метода:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="405336514"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="405336514" style="height: 206px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="de1"><pre class="de1"><span class="kw2">class</span> SortedStrings <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; <span class="kw4">void</span> AddString<span class="br0">&#40;</span><span class="kw4">const</span> string<span class="sy3">&amp;</span> s<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co1">// добавить строку s в набор</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> GetSortedStrings<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co1">// получить набор из всех добавленных строк в отсортированном порядке</span>
&nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span>
&nbsp; <span class="co1">// приватные поля</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Пример:</b><br />
Код<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="216199555"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="216199555" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="de1"><pre class="de1"><span class="kw4">void</span> PrintSortedStrings<span class="br0">&#40;</span>SortedStrings<span class="sy3">&amp;</span> strings<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> string<span class="sy3">&amp;</span> s <span class="sy4">:</span> strings.<span class="me1">GetSortedStrings</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> s <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span><span class="sy4">;</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; SortedStrings strings<span class="sy4">;</span>
&nbsp; 
&nbsp; strings.<span class="me1">AddString</span><span class="br0">&#40;</span><span class="st0">&quot;first&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; strings.<span class="me1">AddString</span><span class="br0">&#40;</span><span class="st0">&quot;third&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; strings.<span class="me1">AddString</span><span class="br0">&#40;</span><span class="st0">&quot;second&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; PrintSortedStrings<span class="br0">&#40;</span>strings<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; 
&nbsp; strings.<span class="me1">AddString</span><span class="br0">&#40;</span><span class="st0">&quot;second&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; PrintSortedStrings<span class="br0">&#40;</span>strings<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; 
&nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Вывод<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="471456165"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="471456165" style="height: 62px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
</pre></td><td class="de1"><pre class="de1">first second third
first second second third</pre></td></tr></table></div></td></tr></tbody></table></div><b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="34906487"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="34906487" style="height: 318px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="co2">#include &lt;algorithm&gt;</span>
&nbsp;
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
&nbsp;
<span class="kw2">class</span> SortedStrings <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; <span class="kw4">void</span> AddString<span class="br0">&#40;</span><span class="kw4">const</span> string<span class="sy3">&amp;</span> s<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; v.<span class="me1">push_back</span><span class="br0">&#40;</span>s<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//добавим строку</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> GetSortedStrings<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; sort<span class="br0">&#40;</span>begin<span class="br0">&#40;</span>v<span class="br0">&#41;</span>, end<span class="br0">&#40;</span>v<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//отсортируем вектор строк</span>
&nbsp; &nbsp; <span class="kw1">return</span> v<span class="sy4">;</span> <span class="co1">//и вернем вектор</span>
&nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span>
&nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> v<span class="sy4">;</span> <span class="co1">//так будут строки храниться</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Следующее задание: Имена и фамилии</b><br />
Реализуйте класс для человека, поддерживающий историю изменений человеком своих фамилии и имени.<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="129069570"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="129069570" style="height: 254px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="de1"><pre class="de1"><span class="kw2">class</span> Person <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; <span class="kw4">void</span> ChangeFirstName<span class="br0">&#40;</span><span class="kw4">int</span> year, <span class="kw4">const</span> string<span class="sy3">&amp;</span> first_name<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co1">// добавить факт изменения имени на first_name в год year</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; <span class="kw4">void</span> ChangeLastName<span class="br0">&#40;</span><span class="kw4">int</span> year, <span class="kw4">const</span> string<span class="sy3">&amp;</span> last_name<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co1">// добавить факт изменения фамилии на last_name в год year</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; string GetFullName<span class="br0">&#40;</span><span class="kw4">int</span> year<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co1">// получить имя и фамилию по состоянию на конец года year</span>
&nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span>
&nbsp; <span class="co1">// приватные поля</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Считайте, что в каждый год может произойти не более одного изменения фамилии и не более одного изменения имени. При этом с течением времени могут открываться всё новые факты из прошлого человека, поэтому года&#769; в последовательных вызовах методов ChangeLastName и ChangeFirstName не обязаны возрастать.<br />
<br />
Гарантируется, что все имена и фамилии непусты.<br />
Строка, возвращаемая методом GetFullName, должна содержать разделённые одним пробелом имя и фамилию человека по состоянию на конец данного года.<br />
Если к данному году не случилось ни одного изменения фамилии и имени, верните строку &quot;Incognito&quot;.<br />
Если к данному году случилось изменение фамилии, но не было ни одного изменения имени, верните &quot;last_name with unknown first name&quot;.<br />
Если к данному году случилось изменение имени, но не было ни одного изменения фамилии, верните &quot;first_name with unknown last name&quot;.<br />
<br />
Пример<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="483686718"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="483686718" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="de1"><pre class="de1"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; Person person<span class="sy4">;</span>
&nbsp; 
&nbsp; person.<span class="me1">ChangeFirstName</span><span class="br0">&#40;</span><span class="nu0">1965</span>, <span class="st0">&quot;Polina&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; person.<span class="me1">ChangeLastName</span><span class="br0">&#40;</span><span class="nu0">1967</span>, <span class="st0">&quot;Sergeeva&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> year <span class="sy4">:</span> <span class="br0">&#123;</span><span class="nu0">1900</span>, <span class="nu0">1965</span>, <span class="nu0">1990</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> person.<span class="me1">GetFullName</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; 
&nbsp; person.<span class="me1">ChangeFirstName</span><span class="br0">&#40;</span><span class="nu0">1970</span>, <span class="st0">&quot;Appolinaria&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> year <span class="sy4">:</span> <span class="br0">&#123;</span><span class="nu0">1969</span>, <span class="nu0">1970</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> person.<span class="me1">GetFullName</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; 
&nbsp; person.<span class="me1">ChangeLastName</span><span class="br0">&#40;</span><span class="nu0">1968</span>, <span class="st0">&quot;Volkova&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> year <span class="sy4">:</span> <span class="br0">&#123;</span><span class="nu0">1969</span>, <span class="nu0">1970</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> person.<span class="me1">GetFullName</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; 
&nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Вывод<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="582683611"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="582683611" style="height: 142px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
</pre></td><td class="de1"><pre class="de1">Incognito
Polina with unknown last name
Polina Sergeeva
Polina Sergeeva
Appolinaria Sergeeva
Polina Volkova
Appolinaria Volkova</pre></td></tr></table></div></td></tr></tbody></table></div><b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="947522271"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="947522271" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;map&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">struct</span> FullName <span class="br0">&#123;</span> <span class="co1">//создадим структуру из имени и фамилии</span>
&nbsp; &nbsp; string Name<span class="sy4">;</span>
&nbsp; &nbsp; string Soname<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
<span class="kw2">class</span> Person <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; &nbsp; <span class="kw4">void</span> ChangeFirstName<span class="br0">&#40;</span><span class="kw4">int</span> year, <span class="kw4">const</span> string<span class="sy3">&amp;</span> first_name<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>YearNameSoname.<span class="me1">count</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> YearNameSoname<span class="br0">&#91;</span>year<span class="br0">&#93;</span>.<span class="me1">Soname</span> <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span> <span class="co1">//если такого года еще нет, то добавим пустую фамилию в этот год</span>
&nbsp; &nbsp; &nbsp; &nbsp; YearNameSoname<span class="br0">&#91;</span>year<span class="br0">&#93;</span>.<span class="me1">Name</span> <span class="sy1">=</span> first_name<span class="sy4">;</span> <span class="co1">//добавим указанное имя</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">void</span> ChangeLastName<span class="br0">&#40;</span><span class="kw4">int</span> year, <span class="kw4">const</span> string<span class="sy3">&amp;</span> last_name<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>YearNameSoname.<span class="me1">count</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> YearNameSoname<span class="br0">&#91;</span>year<span class="br0">&#93;</span>.<span class="me1">Name</span> <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span> <span class="co1">//если такого года еще нет, то добавим пустое имя в этот год</span>
&nbsp; &nbsp; &nbsp; &nbsp; YearNameSoname<span class="br0">&#91;</span>year<span class="br0">&#93;</span>.<span class="me1">Soname</span> <span class="sy1">=</span> last_name<span class="sy4">;</span> <span class="co1">//и добавим указанную фамилию</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; string GetFullName<span class="br0">&#40;</span><span class="kw4">int</span> year<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>YearNameSoname.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если размер = 0</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&quot;Incognito&quot;</span><span class="sy4">;</span> <span class="co1">//выводим Инкогнито</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="co1">//ну или так</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> YearNameSoname<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>year <span class="sy1">&lt;</span> i.<span class="me1">first</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="st0">&quot;Incognito&quot;</span><span class="sy4">;</span> <span class="co1">//если искомый год меньше первого года изменения, выводим Инкогнито</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy4">;</span> <span class="co1">//сразу выходим из цикла</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//иначе</span>
&nbsp; &nbsp; &nbsp; &nbsp; string nm <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; string sn <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> YearNameSoname<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//полистаем нашу структуру, (не стал отдельно функцию делать)</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//и будем присваивать переменной sn значение фамилии, если она не пустая и пока искомый год больше текущего(в структуре)</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">first</span> <span class="sy1">&lt;=</span> year <span class="sy3">&amp;&amp;</span> i.<span class="me1">second</span>.<span class="me1">Soname</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> sn <span class="sy1">=</span> i.<span class="me1">second</span>.<span class="me1">Soname</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//тоже самое с именем</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">first</span> <span class="sy1">&lt;=</span> year <span class="sy3">&amp;&amp;</span> i.<span class="me1">second</span>.<span class="me1">Name</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> nm <span class="sy1">=</span> i.<span class="me1">second</span>.<span class="me1">Name</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>nm <span class="sy1">==</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="kw1">return</span> sn <span class="sy2">+</span> <span class="st0">&quot; with unknown first name&quot;</span><span class="sy4">;</span> <span class="co1">//условие, если имя пустое(вывод фамилии и текста)</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>sn <span class="sy1">==</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="kw1">return</span> nm <span class="sy2">+</span> <span class="st0">&quot; with unknown last name&quot;</span><span class="sy4">;</span> <span class="co1">//условие, если фамилия пуста (вывод имени и текста)</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">return</span> nm <span class="sy2">+</span> <span class="st0">&quot; &quot;</span> <span class="sy2">+</span> sn<span class="sy4">;</span> <span class="co1">//вывод имени и фамилии</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span> <span class="co1">//объявим в приватной секции</span>
&nbsp; &nbsp; map<span class="sy1">&lt;</span><span class="kw4">int</span>, FullName<span class="sy1">&gt;</span> YearNameSoname<span class="sy4">;</span> <span class="co1">//структуру с годом и полным именем</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Ещё задача:</b><br />
Дополните класс из предыдущей задачи «Имена и фамилии — 1» методом GetFullNameWithHistory:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="674716471"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="674716471" style="height: 302px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="de1"><pre class="de1"><span class="kw2">class</span> Person <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; <span class="kw4">void</span> ChangeFirstName<span class="br0">&#40;</span><span class="kw4">int</span> year, <span class="kw4">const</span> string<span class="sy3">&amp;</span> first_name<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co1">// добавить факт изменения имени на first_name в год year</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; <span class="kw4">void</span> ChangeLastName<span class="br0">&#40;</span><span class="kw4">int</span> year, <span class="kw4">const</span> string<span class="sy3">&amp;</span> last_name<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co1">// добавить факт изменения фамилии на last_name в год year</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; string GetFullName<span class="br0">&#40;</span><span class="kw4">int</span> year<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co1">// получить имя и фамилию по состоянию на конец года year</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; string GetFullNameWithHistory<span class="br0">&#40;</span><span class="kw4">int</span> year<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co1">// получить все имена и фамилии по состоянию на конец года year</span>
&nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span>
&nbsp; <span class="co1">// приватные поля</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>В отличие от метода GetFullName, метод GetFullNameWithHistory должен вернуть не только последние имя и фамилию к концу данного года, но ещё и все предыдущие имена и фамилии в обратном хронологическом порядке. Если текущие факты говорят о том, что человек два раза подряд изменил фамилию или имя на одно и то же, второе изменение при формировании истории нужно игнорировать.<br />
Пример:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="328277203"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="328277203" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; Person person<span class="sy4">;</span>
&nbsp; 
&nbsp; person.<span class="me1">ChangeFirstName</span><span class="br0">&#40;</span><span class="nu0">1965</span>, <span class="st0">&quot;Polina&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; person.<span class="me1">ChangeLastName</span><span class="br0">&#40;</span><span class="nu0">1967</span>, <span class="st0">&quot;Sergeeva&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> year <span class="sy4">:</span> <span class="br0">&#123;</span><span class="nu0">1900</span>, <span class="nu0">1965</span>, <span class="nu0">1990</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> person.<span class="me1">GetFullNameWithHistory</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; 
&nbsp; person.<span class="me1">ChangeFirstName</span><span class="br0">&#40;</span><span class="nu0">1970</span>, <span class="st0">&quot;Appolinaria&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> year <span class="sy4">:</span> <span class="br0">&#123;</span><span class="nu0">1969</span>, <span class="nu0">1970</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> person.<span class="me1">GetFullNameWithHistory</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; 
&nbsp; person.<span class="me1">ChangeLastName</span><span class="br0">&#40;</span><span class="nu0">1968</span>, <span class="st0">&quot;Volkova&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> year <span class="sy4">:</span> <span class="br0">&#123;</span><span class="nu0">1969</span>, <span class="nu0">1970</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> person.<span class="me1">GetFullNameWithHistory</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; 
&nbsp; person.<span class="me1">ChangeFirstName</span><span class="br0">&#40;</span><span class="nu0">1990</span>, <span class="st0">&quot;Polina&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; person.<span class="me1">ChangeLastName</span><span class="br0">&#40;</span><span class="nu0">1990</span>, <span class="st0">&quot;Volkova-Sergeeva&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> person.<span class="me1">GetFullNameWithHistory</span><span class="br0">&#40;</span><span class="nu0">1990</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; 
&nbsp; person.<span class="me1">ChangeFirstName</span><span class="br0">&#40;</span><span class="nu0">1966</span>, <span class="st0">&quot;Pauline&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> person.<span class="me1">GetFullNameWithHistory</span><span class="br0">&#40;</span><span class="nu0">1966</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; 
&nbsp; person.<span class="me1">ChangeLastName</span><span class="br0">&#40;</span><span class="nu0">1960</span>, <span class="st0">&quot;Sergeeva&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> year <span class="sy4">:</span> <span class="br0">&#123;</span><span class="nu0">1960</span>, <span class="nu0">1967</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> person.<span class="me1">GetFullNameWithHistory</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; 
&nbsp; person.<span class="me1">ChangeLastName</span><span class="br0">&#40;</span><span class="nu0">1961</span>, <span class="st0">&quot;Ivanova&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> person.<span class="me1">GetFullNameWithHistory</span><span class="br0">&#40;</span><span class="nu0">1967</span><span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; 
&nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Вывод:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="784464740"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="784464740" style="height: 222px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="de1"><pre class="de1">Incognito
Polina with unknown last name
Polina Sergeeva
Polina Sergeeva
Appolinaria <span class="br0">&#40;</span>Polina<span class="br0">&#41;</span> Sergeeva
Polina Volkova <span class="br0">&#40;</span>Sergeeva<span class="br0">&#41;</span>
Appolinaria <span class="br0">&#40;</span>Polina<span class="br0">&#41;</span> Volkova <span class="br0">&#40;</span>Sergeeva<span class="br0">&#41;</span>
Polina <span class="br0">&#40;</span>Appolinaria, Polina<span class="br0">&#41;</span> Volkova<span class="sy2">-</span>Sergeeva <span class="br0">&#40;</span>Volkova, Sergeeva<span class="br0">&#41;</span>
Pauline <span class="br0">&#40;</span>Polina<span class="br0">&#41;</span> with unknown last name
Sergeeva with unknown first name
Pauline <span class="br0">&#40;</span>Polina<span class="br0">&#41;</span> Sergeeva
Pauline <span class="br0">&#40;</span>Polina<span class="br0">&#41;</span> Sergeeva <span class="br0">&#40;</span>Ivanova, Sergeeva<span class="br0">&#41;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="76881701"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="76881701" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="co2">#include &lt;map&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">struct</span> FullName <span class="br0">&#123;</span> <span class="co1">//создадим структуру из имени и фамилии</span>
&nbsp; &nbsp; string Name<span class="sy4">;</span>
&nbsp; &nbsp; string Soname<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
<span class="kw2">class</span> Person <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; &nbsp; <span class="kw4">void</span> ChangeFirstName<span class="br0">&#40;</span><span class="kw4">int</span> year, <span class="kw4">const</span> string<span class="sy3">&amp;</span> first_name<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>YearNameSoname.<span class="me1">count</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> YearNameSoname<span class="br0">&#91;</span>year<span class="br0">&#93;</span>.<span class="me1">Soname</span> <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span> <span class="co1">//если такого года еще нет, то добавим пустую фамилию</span>
&nbsp; &nbsp; &nbsp; &nbsp; YearNameSoname<span class="br0">&#91;</span>year<span class="br0">&#93;</span>.<span class="me1">Name</span> <span class="sy1">=</span> first_name<span class="sy4">;</span> <span class="co1">//добавим указанное имя</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">void</span> ChangeLastName<span class="br0">&#40;</span><span class="kw4">int</span> year, <span class="kw4">const</span> string<span class="sy3">&amp;</span> last_name<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>YearNameSoname.<span class="me1">count</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> YearNameSoname<span class="br0">&#91;</span>year<span class="br0">&#93;</span>.<span class="me1">Name</span> <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span> <span class="co1">//если такого года еще нет, то добавим пустое имя</span>
&nbsp; &nbsp; &nbsp; &nbsp; YearNameSoname<span class="br0">&#91;</span>year<span class="br0">&#93;</span>.<span class="me1">Soname</span> <span class="sy1">=</span> last_name<span class="sy4">;</span> <span class="co1">//и добавим указанную фамилию</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; string GetFullName<span class="br0">&#40;</span><span class="kw4">int</span> year<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>YearNameSoname.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если размер = 0</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&quot;Incognito&quot;</span><span class="sy4">;</span> <span class="co1">//выводим Инкогнито</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> YearNameSoname<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>year <span class="sy1">&lt;</span> i.<span class="me1">first</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="st0">&quot;Incognito&quot;</span><span class="sy4">;</span> <span class="co1">//если искомый год меньше первого года изменения, выводим Инкогнито</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy4">;</span> <span class="co1">//сразу выходим из цикла</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//иначе</span>
&nbsp; &nbsp; &nbsp; &nbsp; string nm <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; string sn <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> YearNameSoname<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//полистаем нашу структуру</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//и будем присваивать переменной sn значение фамилии, если она не пустая и пока искомый год больше текущего(в структуре)</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">first</span> <span class="sy1">&lt;=</span> year <span class="sy3">&amp;&amp;</span> i.<span class="me1">second</span>.<span class="me1">Soname</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> sn <span class="sy1">=</span> i.<span class="me1">second</span>.<span class="me1">Soname</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">first</span> <span class="sy1">&lt;=</span> year <span class="sy3">&amp;&amp;</span> i.<span class="me1">second</span>.<span class="me1">Name</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> nm <span class="sy1">=</span> i.<span class="me1">second</span>.<span class="me1">Name</span><span class="sy4">;</span> <span class="co1">//тоже самое с именем</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>nm <span class="sy1">==</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="kw1">return</span> sn <span class="sy2">+</span> <span class="st0">&quot; with unknown first name&quot;</span><span class="sy4">;</span> <span class="co1">//условие, если имя пустое(вывод фамилии и текста)</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>sn <span class="sy1">==</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="kw1">return</span> nm <span class="sy2">+</span> <span class="st0">&quot; with unknown last name&quot;</span><span class="sy4">;</span> <span class="co1">//условие, если фамилия пуста (вывод имени и текста)</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">return</span> nm <span class="sy2">+</span> <span class="st0">&quot; &quot;</span> <span class="sy2">+</span> sn<span class="sy4">;</span> <span class="co1">//вывод имени и фамилии</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; string GetFullNameWithHistory<span class="br0">&#40;</span><span class="kw4">int</span> year<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>YearNameSoname.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если размер = 0</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&quot;Incognito&quot;</span><span class="sy4">;</span> <span class="co1">//выводим Инкогнито</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> YearNameSoname<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>year <span class="sy1">&lt;</span> i.<span class="me1">first</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="st0">&quot;Incognito&quot;</span><span class="sy4">;</span> <span class="co1">//если искомый год меньше первого года изменения, выводим Инкогнито</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy4">;</span> <span class="co1">//сразу выходим из цикла</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//иначе</span>
&nbsp; &nbsp; &nbsp; &nbsp; string nm <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; string sn <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> secondnames<span class="sy4">;</span> <span class="co1">//вектор предыдущих фамилий</span>
&nbsp; &nbsp; &nbsp; &nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> firstnames<span class="sy4">;</span> <span class="co1">//вектор предыдущих имен</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> YearNameSoname<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//полистаем нашу структуру</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//и будем присваивать переменной sn значение фамилии, если она не пустая и пока искомый год больше текущего(в структуре)</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">first</span> <span class="sy1">&lt;=</span> year <span class="sy3">&amp;&amp;</span> i.<span class="me1">second</span>.<span class="me1">Soname</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если Фамилия непуста</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">second</span>.<span class="me1">Soname</span> <span class="sy3">!</span><span class="sy1">=</span> sn <span class="sy3">&amp;&amp;</span> sn <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//и не повторяется</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; secondnames.<span class="me1">push_back</span><span class="br0">&#40;</span>sn<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sn <span class="sy1">=</span> i.<span class="me1">second</span>.<span class="me1">Soname</span><span class="sy4">;</span> <span class="co1">//тут присваиваем</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">first</span> <span class="sy1">&lt;=</span> year <span class="sy3">&amp;&amp;</span> i.<span class="me1">second</span>.<span class="me1">Name</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//то же самое с Именем</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">second</span>.<span class="me1">Name</span> <span class="sy3">!</span><span class="sy1">=</span> nm <span class="sy3">&amp;&amp;</span> nm <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firstnames.<span class="me1">push_back</span><span class="br0">&#40;</span>nm<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nm <span class="sy1">=</span> i.<span class="me1">second</span>.<span class="me1">Name</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//инициализируем переменные в которые будем складывать фамилии и имена в обратном порядке</span>
&nbsp; &nbsp; &nbsp; &nbsp; string secnames_string <span class="sy1">=</span> <span class="st0">&quot;&quot;</span>, firstnames_string <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>secondnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если вектор с фамилиями не пуст, то</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; secnames_string <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot; (&quot;</span> <span class="sy2">+</span> secondnames<span class="br0">&#91;</span>secondnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span><span class="sy4">;</span> <span class="co1">//добавим в строку пробел, скобку и предыдущую фамилию</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>secondnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&gt;</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy1">=</span> secondnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">-</span> <span class="nu0">1</span><span class="sy4">;</span> i <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="sy2">--</span>i<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="co1">//в обратном порядке</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; secnames_string <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot;, &quot;</span> <span class="sy2">+</span> secondnames<span class="br0">&#91;</span>i <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span><span class="sy4">;</span> <span class="co1">// добавим в строку остальные фамилии</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; secnames_string <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot;)&quot;</span><span class="sy4">;</span> <span class="co1">//закроем строку скобкой</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//аналогично с именами</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>firstnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firstnames_string <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot; (&quot;</span> <span class="sy2">+</span> firstnames<span class="br0">&#91;</span>firstnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>firstnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&gt;</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy1">=</span> firstnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">-</span> <span class="nu0">1</span><span class="sy4">;</span> i <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="sy2">--</span>i<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firstnames_string <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot;, &quot;</span> <span class="sy2">+</span> firstnames<span class="br0">&#91;</span>i <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firstnames_string <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot;)&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//в зависимости от наличия Имени и Фамилии, вернем соответствующие сообщения</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>nm <span class="sy1">==</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="kw1">return</span> sn <span class="sy2">+</span> secnames_string <span class="sy2">+</span> <span class="st0">&quot; with unknown first name&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>sn <span class="sy1">==</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="kw1">return</span> nm <span class="sy2">+</span> firstnames_string <span class="sy2">+</span> <span class="st0">&quot; with unknown last name&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">return</span> nm <span class="sy2">+</span> firstnames_string <span class="sy2">+</span> <span class="st0">&quot; &quot;</span> <span class="sy2">+</span> sn <span class="sy2">+</span> secnames_string<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span> <span class="co1">//объявим в приватной секции</span>
&nbsp; &nbsp; map<span class="sy1">&lt;</span><span class="kw4">int</span>, FullName<span class="sy1">&gt;</span> YearNameSoname<span class="sy4">;</span> <span class="co1">//структуру с годом и полным именем</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Немного переборщил с кодом. Но думаю для собственного понимания пойдет. Можете предложить свою оптимизацию )))<br />
<br />
Ещё задача:<br />
Дополните класс Person из задачи «Имена и фамилии — 2» конструктором, позволяющим задать имя и фамилию человека при рождении, а также сам год рождения. Класс не должен иметь конструктора по умолчанию.<br />
<br />
При получении на вход года, который меньше года рождения:<ul><li>методы GetFullName и GetFullNameWithHistory должны отдавать &quot;No person&quot;;</li>
<li>методы ChangeFirstName и ChangeLastName должны игнорировать запрос.</li>
</ul>Кроме того, необходимо объявить константными все методы, которые по сути ими являются.<br />
Пример:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="453605215"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="453605215" style="height: 254px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="de1"><pre class="de1"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; Person person<span class="br0">&#40;</span><span class="st0">&quot;Polina&quot;</span>, <span class="st0">&quot;Sergeeva&quot;</span>, <span class="nu0">1960</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> year <span class="sy4">:</span> <span class="br0">&#123;</span><span class="nu0">1959</span>, <span class="nu0">1960</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> person.<span class="me1">GetFullNameWithHistory</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; 
&nbsp; person.<span class="me1">ChangeFirstName</span><span class="br0">&#40;</span><span class="nu0">1965</span>, <span class="st0">&quot;Appolinaria&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; person.<span class="me1">ChangeLastName</span><span class="br0">&#40;</span><span class="nu0">1967</span>, <span class="st0">&quot;Ivanova&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> year <span class="sy4">:</span> <span class="br0">&#123;</span><span class="nu0">1965</span>, <span class="nu0">1967</span><span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> person.<span class="me1">GetFullNameWithHistory</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Вывод:<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="508468203"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="508468203" style="height: 94px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
</pre></td><td class="de1"><pre class="de1">No person
Polina Sergeeva
Appolinaria <span class="br0">&#40;</span>Polina<span class="br0">&#41;</span> Sergeeva
Appolinaria <span class="br0">&#40;</span>Polina<span class="br0">&#41;</span> Ivanova <span class="br0">&#40;</span>Sergeeva<span class="br0">&#41;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="421075590"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="421075590" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="co2">#include &lt;map&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">struct</span> FullName <span class="br0">&#123;</span> <span class="co1">//создадим структуру из имени и фамилии</span>
&nbsp; &nbsp; string Name<span class="sy4">;</span>
&nbsp; &nbsp; string Soname<span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span>
<span class="kw2">class</span> Person <span class="br0">&#123;</span>
<span class="kw2">public</span><span class="sy4">:</span>
&nbsp; &nbsp; Person<span class="br0">&#40;</span><span class="kw4">const</span> string<span class="sy3">&amp;</span> first_name, <span class="kw4">const</span> string<span class="sy3">&amp;</span> last_name, <span class="kw4">int</span> year<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; YearNameSoname<span class="br0">&#91;</span>year<span class="br0">&#93;</span> <span class="sy1">=</span> <span class="br0">&#123;</span> first_name, last_name <span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; birth_year <span class="sy1">=</span> year<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> YearNameSoname<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">first</span> <span class="sy1">&lt;</span> year<span class="br0">&#41;</span> YearNameSoname.<span class="me1">erase</span><span class="br0">&#40;</span>i.<span class="me1">first</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">void</span> ChangeFirstName<span class="br0">&#40;</span><span class="kw4">int</span> year, <span class="kw4">const</span> string<span class="sy3">&amp;</span> first_name<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> YearNameSoname<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>year <span class="sy1">&gt;</span> i.<span class="me1">first</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>YearNameSoname.<span class="me1">count</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> YearNameSoname<span class="br0">&#91;</span>year<span class="br0">&#93;</span>.<span class="me1">Soname</span> <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span> <span class="co1">//если такого года еще нет, то добавим пустую фамилию</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; YearNameSoname<span class="br0">&#91;</span>year<span class="br0">&#93;</span>.<span class="me1">Name</span> <span class="sy1">=</span> first_name<span class="sy4">;</span> <span class="co1">//добавим указанное имя</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy4">;</span><span class="co1">//сразу выходим</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">void</span> ChangeLastName<span class="br0">&#40;</span><span class="kw4">int</span> year, <span class="kw4">const</span> string<span class="sy3">&amp;</span> last_name<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> YearNameSoname<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>year <span class="sy1">&gt;</span> i.<span class="me1">first</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>YearNameSoname.<span class="me1">count</span><span class="br0">&#40;</span>year<span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> YearNameSoname<span class="br0">&#91;</span>year<span class="br0">&#93;</span>.<span class="me1">Name</span> <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span> <span class="co1">//если такого года еще нет, то добавим пустое имя</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; YearNameSoname<span class="br0">&#91;</span>year<span class="br0">&#93;</span>.<span class="me1">Soname</span> <span class="sy1">=</span> last_name<span class="sy4">;</span> <span class="co1">//и добавим указанную фамилию</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy4">;</span> <span class="co1">//сразу выходим</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; string GetFullName<span class="br0">&#40;</span><span class="kw4">int</span> year<span class="br0">&#41;</span> <span class="kw4">const</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>birth_year <span class="sy3">!</span><span class="sy1">=</span> <span class="nu0">0</span> <span class="sy3">&amp;&amp;</span> year <span class="sy1">&lt;</span> birth_year<span class="br0">&#41;</span> <span class="kw1">return</span> <span class="st0">&quot;No person&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>YearNameSoname.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если размер = 0</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&quot;Incognito&quot;</span><span class="sy4">;</span> <span class="co1">//выводим Инкогнито</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> YearNameSoname<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>year <span class="sy1">&lt;</span> i.<span class="me1">first</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="st0">&quot;Incognito&quot;</span><span class="sy4">;</span> <span class="co1">//если искомый год меньше первого года изменения, выводим Инкогнито</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy4">;</span> <span class="co1">//сразу выходим из цикла</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//иначе</span>
&nbsp; &nbsp; &nbsp; &nbsp; string nm <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; string sn <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> YearNameSoname<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//полистаем нашу структуру</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">//и будем присваивать переменной sn значение фамилии, если она не пустая и пока искомый год больше текущего(в структуре)</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">first</span> <span class="sy1">&lt;=</span> year <span class="sy3">&amp;&amp;</span> i.<span class="me1">second</span>.<span class="me1">Soname</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> sn <span class="sy1">=</span> i.<span class="me1">second</span>.<span class="me1">Soname</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">first</span> <span class="sy1">&lt;=</span> year <span class="sy3">&amp;&amp;</span> i.<span class="me1">second</span>.<span class="me1">Name</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> nm <span class="sy1">=</span> i.<span class="me1">second</span>.<span class="me1">Name</span><span class="sy4">;</span> <span class="co1">//тоже самое с именем</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>nm <span class="sy1">==</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="kw1">return</span> sn <span class="sy2">+</span> <span class="st0">&quot; with unknown first name&quot;</span><span class="sy4">;</span> <span class="co1">//условие, если имя пустое(вывод фамилии и текста)</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>sn <span class="sy1">==</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="kw1">return</span> nm <span class="sy2">+</span> <span class="st0">&quot; with unknown last name&quot;</span><span class="sy4">;</span> <span class="co1">//условие, если фамилия пуста (вывод имени и текста)</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">return</span> nm <span class="sy2">+</span> <span class="st0">&quot; &quot;</span> <span class="sy2">+</span> sn<span class="sy4">;</span> <span class="co1">//вывод имени и фамилии</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; string GetFullNameWithHistory<span class="br0">&#40;</span><span class="kw4">int</span> year<span class="br0">&#41;</span> <span class="kw4">const</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>birth_year <span class="sy3">!</span><span class="sy1">=</span> <span class="nu0">0</span> <span class="sy3">&amp;&amp;</span> year <span class="sy1">&lt;</span> birth_year<span class="br0">&#41;</span> <span class="kw1">return</span> <span class="st0">&quot;No person&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>YearNameSoname.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если размер = 0</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&quot;Incognito&quot;</span><span class="sy4">;</span> <span class="co1">//выводим Инкогнито</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> YearNameSoname<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>year <span class="sy1">&lt;</span> i.<span class="me1">first</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="st0">&quot;Incognito&quot;</span><span class="sy4">;</span> <span class="co1">//если искомый год меньше первого года изменения, выводим Инкогнито</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy4">;</span> <span class="co1">//сразу выходим из цикла</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//иначе</span>
&nbsp; &nbsp; &nbsp; &nbsp; string nm <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; string sn <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> secondnames<span class="sy4">;</span> <span class="co1">//вектор предыдущих фамилий</span>
&nbsp; &nbsp; &nbsp; &nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> firstnames<span class="sy4">;</span> <span class="co1">//вектор предыдущих имен</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> YearNameSoname<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//полистаем нашу структуру</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">//и будем присваивать переменной sn значение фамилии, если она не пустая и пока искомый год больше текущего(в структуре)</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">first</span> <span class="sy1">&lt;=</span> year <span class="sy3">&amp;&amp;</span> i.<span class="me1">second</span>.<span class="me1">Soname</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">second</span>.<span class="me1">Soname</span> <span class="sy3">!</span><span class="sy1">=</span> sn <span class="sy3">&amp;&amp;</span> sn <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; secondnames.<span class="me1">push_back</span><span class="br0">&#40;</span>sn<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sn <span class="sy1">=</span> i.<span class="me1">second</span>.<span class="me1">Soname</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">first</span> <span class="sy1">&lt;=</span> year <span class="sy3">&amp;&amp;</span> i.<span class="me1">second</span>.<span class="me1">Name</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">second</span>.<span class="me1">Name</span> <span class="sy3">!</span><span class="sy1">=</span> nm <span class="sy3">&amp;&amp;</span> nm <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firstnames.<span class="me1">push_back</span><span class="br0">&#40;</span>nm<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nm <span class="sy1">=</span> i.<span class="me1">second</span>.<span class="me1">Name</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//инициализируем переменные в которые будем складывать фамилии и имена в обратном порядке</span>
&nbsp; &nbsp; &nbsp; &nbsp; string secnames_string <span class="sy1">=</span> <span class="st0">&quot;&quot;</span>, firstnames_string <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>secondnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если вектор с фамилиями не пуст, то</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; secnames_string <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot; (&quot;</span> <span class="sy2">+</span> secondnames<span class="br0">&#91;</span>secondnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span><span class="sy4">;</span> <span class="co1">//добавим в строку пробел, скобку и предыдущую фамилию</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>secondnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&gt;</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy1">=</span> secondnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">-</span> <span class="nu0">1</span><span class="sy4">;</span> i <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="sy2">--</span>i<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="co1">//в обратном порядке</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; secnames_string <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot;, &quot;</span> <span class="sy2">+</span> secondnames<span class="br0">&#91;</span>i <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span><span class="sy4">;</span> <span class="co1">// добавим в строку остальные фамилии</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; secnames_string <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot;)&quot;</span><span class="sy4">;</span> <span class="co1">//закроем строку скобкой</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//аналогично с именами</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>firstnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firstnames_string <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot; (&quot;</span> <span class="sy2">+</span> firstnames<span class="br0">&#91;</span>firstnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>firstnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&gt;</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy1">=</span> firstnames.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy2">-</span> <span class="nu0">1</span><span class="sy4">;</span> i <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="sy2">--</span>i<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firstnames_string <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot;, &quot;</span> <span class="sy2">+</span> firstnames<span class="br0">&#91;</span>i <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; firstnames_string <span class="sy2">+</span><span class="sy1">=</span> <span class="st0">&quot;)&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>nm <span class="sy1">==</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="kw1">return</span> sn <span class="sy2">+</span> secnames_string <span class="sy2">+</span> <span class="st0">&quot; with unknown first name&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>sn <span class="sy1">==</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="kw1">return</span> nm <span class="sy2">+</span> firstnames_string <span class="sy2">+</span> <span class="st0">&quot; with unknown last name&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">return</span> nm <span class="sy2">+</span> firstnames_string <span class="sy2">+</span> <span class="st0">&quot; &quot;</span> <span class="sy2">+</span> sn <span class="sy2">+</span> secnames_string<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="kw2">private</span><span class="sy4">:</span> <span class="co1">//объявим в приватной секции</span>
&nbsp; &nbsp; map<span class="sy1">&lt;</span><span class="kw4">int</span>, FullName<span class="sy1">&gt;</span> YearNameSoname<span class="sy4">;</span> <span class="co1">//структуру с годом и полным именем</span>
&nbsp; &nbsp; <span class="kw4">int</span> birth_year <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Продолжение следует...</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4886.html</guid>
		</item>
		<item>
			<title>С++ «Неделя вторая - Алгоритмы - Сортировка целых чисел по модулю, Сортировка без учета регистра» #16</title>
			<link>https://www.cyberforum.ru/blogs/457043/4867.html</link>
			<pubDate>Sat, 05 Aug 2017 19:56:25 GMT</pubDate>
			<description>Идем дальше. Курс: «Основы разработки на C++: белый пояс» 
Начало в начале блога )))) 
*Сортировка...</description>
			<content:encoded><![CDATA[<div>Идем дальше. Курс: «Основы разработки на C++: белый пояс»<br />
Начало в начале блога ))))<br />
<b>Сортировка целых чисел по модулю</b><br />
Задание:<br />
В стандартном потоке дана одна строка, состоящая из N + 1 целых чисел. Первым числом идёт само число N. Далее следуют ещё N чисел, обозначим их за массив A. Между собой числа разделены пробелом.<br />
Отсортируйте массив А по модулю и выведите его в стандартный поток.<br />
<br />
Ограничения<br />
0 &lt;= N &lt;= 1000<br />
-1000000 &lt;= A[i] &lt;= 1000000<br />
<br />
Примеры<br />
Вход - &gt; Выход<br />
2 -4 3 -&gt; 3 -4<br />
3 1 -3 2 -&gt; 1 2 -3<br />
<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="379625529"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="379625529" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;algorithm&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> N, num<span class="sy4">;</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> v<span class="sy4">;</span> <span class="co1">//тут храним введенные числа</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> N<span class="sy4">;</span> <span class="co1">//узнаем количество чисел</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>N<span class="sy4">;</span> N <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="sy2">--</span>N<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> num<span class="sy4">;</span> <span class="co1">//считываем числа</span>
&nbsp; &nbsp; &nbsp; &nbsp; v.<span class="me1">push_back</span><span class="br0">&#40;</span>num<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//добавляем в вектор</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="co1">//для сортировки используем изученную функцию sort</span>
&nbsp; &nbsp; <span class="co1">//в качестве параметра сортировки будет лямбда-функция (третий аргумент)</span>
&nbsp; &nbsp; sort<span class="br0">&#40;</span>begin<span class="br0">&#40;</span>v<span class="br0">&#41;</span>, end<span class="br0">&#40;</span>v<span class="br0">&#41;</span>, <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">int</span><span class="sy3">&amp;</span> x, <span class="kw4">const</span> <span class="kw4">int</span><span class="sy3">&amp;</span> y<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//в уроках до этого не было рассказано о функции нахождения модуля...</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//а писать свою неохота было, поэтому просто спросил инет про модуль, выдал - abs()</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw3">abs</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span> <span class="sy1">&lt;</span> <span class="kw3">abs</span><span class="br0">&#40;</span>y<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//сортировка будет от меньшего к большему (по модулю)</span>
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span> 
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> i <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span><span class="sy4">;</span> <span class="co1">//выводим отсортированные числа</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>тут добавить нечего.<br />
<br />
<b>Сортировка без учета регистра</b><br />
Задание:<br />
В стандартном потоке дана одна строка, состоящая из числа N и следующих за ним N строк S. Между собой число и строки разделены пробелом.<br />
Отсортируйте строки S в лексикографическом порядке по возрастанию, игнорируя регистр букв, и выведите их в стандартный поток вывода.<br />
<br />
Ограничения<br />
0 &lt;= N &lt;= 1000<br />
1 &lt;= |S| &lt;= 15<br />
Каждая строка S[i] может состоять из следующих символов: [0-9,a-z,A-Z]<br />
Примеры<br />
stdin - &gt; stdout<br />
2 q A -&gt; A q<br />
3 a C b -&gt; a b C<br />
<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="382578699"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="382578699" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;algorithm&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;cctype&gt; //для transform</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
string str_to_low<span class="br0">&#40;</span><span class="kw4">const</span> string<span class="sy3">&amp;</span> s<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//перевод строки в нижний регистр</span>
&nbsp; &nbsp; string result<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> s<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//все буквы</span>
&nbsp; &nbsp; &nbsp; &nbsp; result <span class="sy2">+</span><span class="sy1">=</span> <span class="kw3">tolower</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//вставляем в новую строку в нижнем регистре</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> result<span class="sy4">;</span> <span class="co1">//возвращаем новую строку в нижнем регистре</span>
<span class="br0">&#125;</span>
<span class="kw4">bool</span> srt<span class="br0">&#40;</span>string x, string y<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co1">//по хорошему использовать бы функцию transform</span>
&nbsp; &nbsp; <span class="co1">//трансформирования строки и перевести все символы в нижний регистр</span>
&nbsp; &nbsp; <span class="coMULTI">/*transform(x.begin(), x.end(), x.begin(), tolower);</span>
<span class="coMULTI">&nbsp; &nbsp; transform(y.begin(), y.end(), y.begin(), tolower);</span>
<span class="coMULTI">&nbsp; &nbsp; return x &lt; y;*/</span>
&nbsp; &nbsp; <span class="co1">//но проверку не пройдет(не знаю почему), поэтому...</span>
&nbsp; &nbsp; <span class="kw1">return</span> str_to_low<span class="br0">&#40;</span>x<span class="br0">&#41;</span> <span class="sy1">&lt;</span> str_to_low<span class="br0">&#40;</span>y<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//сортировка будет от меньшего к большему (без учета регистра)</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> N<span class="sy4">;</span>
&nbsp; &nbsp; string str<span class="sy4">;</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> v<span class="sy4">;</span> <span class="co1">//тут храним введенные строки</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> N<span class="sy4">;</span> <span class="co1">//узнаем количество строк</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>N<span class="sy4">;</span> N <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="sy2">--</span>N<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> str<span class="sy4">;</span> <span class="co1">//считываем строки</span>
&nbsp; &nbsp; &nbsp; &nbsp; v.<span class="me1">push_back</span><span class="br0">&#40;</span>str<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//добавляем в вектор</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="co1">//для сортировки используем изученную функцию sort</span>
&nbsp; &nbsp; sort<span class="br0">&#40;</span>begin<span class="br0">&#40;</span>v<span class="br0">&#41;</span>, end<span class="br0">&#40;</span>v<span class="br0">&#41;</span>, srt<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> i <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span><span class="sy4">;</span> <span class="co1">//выводим отсортированные строки</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Всё получилось ))))<br />
Продолжение следует...</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4867.html</guid>
		</item>
		<item>
			<title>С++ «Неделя вторая - Контейнер set - Синонимы» #15</title>
			<link>https://www.cyberforum.ru/blogs/457043/4858.html</link>
			<pubDate>Tue, 01 Aug 2017 01:21:56 GMT</pubDate>
			<description>Привет, привет. 
Продолжаю решать курс: «Основы разработки на C++: белый пояс». Сегодня несколько...</description>
			<content:encoded><![CDATA[<div>Привет, привет.<br />
Продолжаю решать курс: «Основы разработки на C++: белый пояс». Сегодня несколько задач и столько же решений по контейнеру set.<br />
<b>Задача 1: Количество уникальных строк.</b><br />
Дан набор строк. Найдите количество уникальных строк в этом наборе.<br />
<br />
Формат ввода<br />
Сначала вводится количество строк N, затем — сами N строк, разделённые пробелом. Все строки состоят лишь из латинских букв, цифр и символов подчёркивания.<br />
<br />
Формат вывода<br />
Выведите единственное целое число — количество уникальных строк в данном наборе.<br />
<br />
Пример:<br />
Ввод<br />
6<br />
first<br />
second<br />
first<br />
third<br />
second<br />
second<br />
<br />
Вывод<br />
3<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="32235684"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="32235684" style="height: 334px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="de1"><pre class="de1"><span class="coMULTI">/*Неделя вторая - Контейнер set - Количество уникальных строк*/</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;set&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
&nbsp;
&nbsp;
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Q<span class="sy4">;</span>
&nbsp; &nbsp; string str<span class="sy4">;</span>
&nbsp; &nbsp; set<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> bs<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> Q<span class="sy4">;</span> <span class="co1">//узнаем склолько команд будет</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>Q<span class="sy4">;</span> Q <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> Q<span class="sy2">--</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> str<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; bs.<span class="me1">insert</span><span class="br0">&#40;</span>str<span class="br0">&#41;</span><span class="sy4">;</span><span class="co1">//вставляем в set</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> bs.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//узнаем размер, вот и все</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Задача 2: Множество значений словаря</b><br />
Напишите функцию BuildMapValuesSet, принимающую на вход словарь map&lt;int, string&gt; и возвращающую множество значений этого словаря<br />
set&lt;string&gt; BuildMapValuesSet(const map&lt;int, string&gt;&amp; m) {<br />
  // ...<br />
}<br />
Пример:<br />
Код<br />
set&lt;string&gt; values = BuildMapValuesSet({<br />
    {1, &quot;odd&quot;},<br />
    {2, &quot;even&quot;},<br />
    {3, &quot;odd&quot;},<br />
    {4, &quot;even&quot;},<br />
    {5, &quot;odd&quot;}<br />
});<br />
for (const string&amp; value : values) {<br />
  cout &lt;&lt; value &lt;&lt; endl;<br />
}<br />
Вывод<br />
even<br />
odd<br />
<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="4644777"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="4644777" style="height: 254px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="de1"><pre class="de1"><span class="coMULTI">/*Неделя вторая - Контейнер set - Множество значений словаря*/</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;map&gt;</span>
<span class="co2">#include &lt;set&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
&nbsp;
set<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> BuildMapValuesSet<span class="br0">&#40;</span><span class="kw4">const</span> map<span class="sy1">&lt;</span><span class="kw4">int</span>, string<span class="sy1">&gt;</span><span class="sy3">&amp;</span> m<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; set<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> s<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> m<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">insert</span><span class="br0">&#40;</span>i.<span class="me1">second</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> s<span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Задача 3: Синонимы</b><br />
Два слова называются синонимами друг друга, если они имеют похожие значения. Реализуйте следующие операции над словарём синонимов:<br />
ADD word1 word2 — добавить в словарь пару синонимов (word1, word2).<br />
COUNT word — узнать количество синонимов слова word.<br />
CHECK word1 word2 — проверить, являются ли слова word1 и word2 синонимами. Слова word1 и word2 считаются синонимами, если среди запросов ADD был хотя бы один запрос ADD word1 word2 или ADD word2 word1.<br />
<br />
Формат ввода<br />
Сначала вводится количество запросов Q, затем Q строк с описаниями запросов. Гарантируется, что в каждом запросе CHECK и ADD слова word1 и word2 различны. Все слова состоят лишь из латинских букв, цифр и символов подчёркивания.<br />
<br />
Формат вывода<br />
Для каждого запроса в соответствующей строке выведите ответ на него:<br />
В ответ на запрос COUNT word выведите единственное целое число — количество синонимов слова word.<br />
В ответ на запрос CHECK word1 word2 выведите строку YES, если word1 и word2 являются синонимами, и NO в противном случае.<br />
<br />
Пример:<br />
Ввод<br />
8<br />
ADD program code<br />
COUNT cipher<br />
ADD code cipher<br />
COUNT code<br />
COUNT program<br />
CHECK code program<br />
CHECK program cipher<br />
CHECK cpp java<br />
<br />
Вывод<br />
0<br />
2<br />
1<br />
YES<br />
NO<br />
NO<br />
<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="169295555"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="169295555" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="coMULTI">/*Неделя вторая - Контейнер set - Синонимы*/</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;set&gt;</span>
<span class="co2">#include &lt;map&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw2">using</span> sorted_pair <span class="sy1">=</span> pair<span class="sy1">&lt;</span>string, string<span class="sy1">&gt;</span><span class="sy4">;</span> <span class="co1">//тут я решил намудрить, немного не по курсу. Так будут пары слов храниться</span>
sorted_pair make_sorted_pair<span class="br0">&#40;</span><span class="kw4">const</span> std<span class="sy4">::</span><span class="me2">string</span><span class="sy3">&amp;</span> word1, <span class="kw4">const</span> string<span class="sy3">&amp;</span> word2<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//эта функция будет возвращать отсортированные пары слов</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>word1 <span class="sy1">&lt;=</span> word2<span class="br0">&#41;</span> <span class="sy4">?</span> make_pair<span class="br0">&#40;</span>word1, word2<span class="br0">&#41;</span> <span class="sy4">:</span> make_pair<span class="br0">&#40;</span>word2, word1<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//тут сортировка</span>
<span class="br0">&#125;</span>
<span class="kw4">bool</span> check<span class="br0">&#40;</span><span class="kw4">const</span> set<span class="sy1">&lt;</span>sorted_pair<span class="sy1">&gt;</span><span class="sy3">&amp;</span> synonyms, <span class="kw4">const</span> string<span class="sy3">&amp;</span> word1, <span class="kw4">const</span> string<span class="sy3">&amp;</span> word2<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//тут возвращаем...</span>
&nbsp; &nbsp; <span class="kw1">return</span> synonyms.<span class="me1">count</span><span class="br0">&#40;</span>make_sorted_pair<span class="br0">&#40;</span>word1, word2<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">//есть ли такая пара слов уже или нет</span>
<span class="br0">&#125;</span>
<span class="kw4">void</span> add<span class="br0">&#40;</span>set<span class="sy1">&lt;</span>sorted_pair<span class="sy1">&gt;</span><span class="sy3">&amp;</span> synonyms, map<span class="sy1">&lt;</span>string, <span class="kw4">unsigned</span><span class="sy1">&gt;</span><span class="sy3">&amp;</span> synonyms_count, <span class="kw4">const</span> string<span class="sy3">&amp;</span> word1, <span class="kw4">const</span> string<span class="sy3">&amp;</span> word2<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>check<span class="br0">&#40;</span>synonyms, word1, word2<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span><span class="sy4">;</span> &nbsp;<span class="co1">//если синоним уже есть, то ничего не добавляем выходим</span>
&nbsp; &nbsp; <span class="sy2">++</span>synonyms_count<span class="br0">&#91;</span>word1<span class="br0">&#93;</span><span class="sy4">;</span> <span class="co1">//если нет таких синонимов, то приплюсуем к каждому слову</span>
&nbsp; &nbsp; <span class="sy2">++</span>synonyms_count<span class="br0">&#91;</span>word2<span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp; &nbsp; synonyms.<span class="me1">insert</span><span class="br0">&#40;</span>make_sorted_pair<span class="br0">&#40;</span>word1, word2<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//и добавим эти синонимы</span>
&nbsp; &nbsp; 
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; set<span class="sy1">&lt;</span>sorted_pair<span class="sy1">&gt;</span> synonyms<span class="sy4">;</span> &nbsp;<span class="co1">// пары синонимов &nbsp;</span>
&nbsp; &nbsp; map<span class="sy1">&lt;</span>string, <span class="kw4">unsigned</span><span class="sy1">&gt;</span> synonyms_count<span class="sy4">;</span> &nbsp;<span class="co1">// количество синонимов</span>
&nbsp; &nbsp; <span class="kw4">int</span> i<span class="sy4">;</span>
&nbsp; &nbsp; string comand, word1, word2<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> i<span class="sy4">;</span> <span class="co1">//количество запросов</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>i<span class="sy4">;</span> i <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> i<span class="sy2">--</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> comand<span class="sy4">;</span> <span class="co1">//считываем команду</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>comand <span class="sy1">==</span> <span class="st0">&quot;ADD&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//проверяем какая команда пришла</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> word1 <span class="sy1">&gt;&gt;</span> word2<span class="sy4">;</span> <span class="co1">//считываем слова</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; add<span class="br0">&#40;</span>synonyms, synonyms_count, word1, word2<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//идем в функцию добавления</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>comand <span class="sy1">==</span> <span class="st0">&quot;COUNT&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string word<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> word<span class="sy4">;</span> <span class="co1">//считываем слово</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> synonyms_count<span class="br0">&#91;</span>word<span class="br0">&#93;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//проверим какая цифра стоит для этого слова</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>comand <span class="sy1">==</span> <span class="st0">&quot;CHECK&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string word1, word2<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> word1 <span class="sy1">&gt;&gt;</span> word2<span class="sy4">;</span> <span class="co1">//прочитали слова</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>check<span class="br0">&#40;</span>synonyms, word1, word2<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="co1">//если функция вернет true, то</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;YES&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//пишем Да</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;NO&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//иначе НЕТ</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Задача 4: Автобусные остановки.</b><br />
В этой задаче вам нужно присваивать номера автобусным маршрутам.<br />
А именно, для каждого маршрута, заданного множеством названий остановок, нужно либо выдать новый номер (первому маршруту — 1, второму — 2 и т. д.), либо вернуть номер существующего маршрута, которому соответствует такое множество остановок.<br />
В отличие от задачи «Автобусные остановки — 2», наборы остановок, которые можно получить друг из друга перестановкой элементов или добавлением/удалением повторяющихся, следует считать одинаковыми.<br />
<br />
Формат ввода<br />
Сначала вводится количество запросов Q, затем Q описаний запросов.<br />
Каждый запрос представляет собой положительное количество остановок N, за которым следуют разделённые пробелом N названий остановок соответствующего маршрута (не обязательно различных). Названия остановок состоят лишь из латинских букв и символов подчёркивания.<br />
<br />
Формат вывода<br />
Выведите ответ на каждый запрос в отдельной строке.<br />
Если маршрут с данным набором остановок уже существует, в ответ на соответствующий запрос выведите Already exists for i, где i — номер маршрута с таким набором остановок. В противном случае нужно выделить введённому набору остановок новый номер i и вывести его в формате New bus i.<br />
<br />
Пример:<br />
<br />
Ввод<br />
5<br />
2 Marushkino Kokoshkino<br />
1 Kokoshkino<br />
2 Marushkino Kokoshkino<br />
2 Kokoshkino Marushkino<br />
2 Kokoshkino Kokoshkino<br />
<br />
Вывод<br />
New bus 1<br />
New bus 2<br />
Already exists for 1<br />
Already exists for 1<br />
Already exists for 2<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="138636266"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="138636266" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;set&gt;</span>
<span class="co2">#include &lt;map&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; set<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> bus_stops<span class="sy4">;</span> <span class="co1">//сюда будем остановки складывать</span>
&nbsp; &nbsp; map<span class="sy1">&lt;</span>set<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span>, <span class="kw4">int</span><span class="sy1">&gt;</span> marshrut<span class="sy4">;</span><span class="co1">//каждому набору остановок будем давать номер маршрута</span>
&nbsp; &nbsp; <span class="kw4">int</span> i, count_stop, number_marshrut <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
&nbsp; &nbsp; string stop<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> i<span class="sy4">;</span> <span class="co1">//количество запросов</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>i<span class="sy4">;</span> i <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> i<span class="sy2">--</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> count_stop<span class="sy4">;</span> <span class="co1">//количество остановок</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>count_stop<span class="sy4">;</span> count_stop <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="sy2">--</span>count_stop<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> stop<span class="sy4">;</span> <span class="co1">//читаем остановки</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bus_stops.<span class="me1">insert</span><span class="br0">&#40;</span>stop<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//и добавляем в набор остановок</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy3">!</span>marshrut.<span class="me1">count</span><span class="br0">&#40;</span>bus_stops<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//проверяем наличие данного набора остановок и если не нашли</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; marshrut<span class="br0">&#91;</span>bus_stops<span class="br0">&#93;</span> <span class="sy1">=</span> <span class="sy2">++</span>number_marshrut<span class="sy4">;</span> <span class="co1">//то добавляем набор и приписываем новый маршрут по-порядку</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;New bus &quot;</span> <span class="sy1">&lt;&lt;</span> number_marshrut <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//пишем номер нового маршрута</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="co1">//иначе, если есть такой набор</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Already exists for &quot;</span> <span class="sy1">&lt;&lt;</span> marshrut<span class="br0">&#91;</span>bus_stops<span class="br0">&#93;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//пишем номер существующего маршрута</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; bus_stops.<span class="me1">clear</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//очистим набор остановок</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Вроде бы пока не сложно. Спасибо что читаете этот блог )))))</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4858.html</guid>
		</item>
		<item>
			<title>С++ «Неделя вторая - Контейнер map - Автобусные остановки 2» #14</title>
			<link>https://www.cyberforum.ru/blogs/457043/4852.html</link>
			<pubDate>Tue, 25 Jul 2017 16:52:43 GMT</pubDate>
			<description>Еще задачка про автобусные остановки. 
Задача: 
В этой задаче вам нужно присваивать номера...</description>
			<content:encoded><![CDATA[<div>Еще задачка про автобусные остановки.<br />
Задача:<br />
В этой задаче вам нужно присваивать номера автобусным маршрутам.<br />
А именно, для каждого маршрута, заданного набором названий остановок, нужно либо выдать новый номер (первому маршруту — 1, второму — 2 и т. д.), либо вернуть номер существующего маршрута, которому соответствует такой набор остановок.<br />
Наборы остановок, полученные друг из друга перестановкой остановок, считаются различными (см. пример).<br />
<br />
Указание<br />
В C++ ключом словаря может быть не только число или строка, но и другой контейнер, например, vector.<br />
<br />
Формат ввода<br />
Сначала вводится количество запросов Q, затем Q описаний запросов.<br />
Каждый запрос представляет собой положительное количество остановок N, за которым следуют разделённые пробелом N различных названий остановок соответствующего маршрута. Названия остановок состоят лишь из латинских букв и символов подчёркивания.<br />
<br />
Формат вывода<br />
Выведите ответ на каждый запрос в отдельной строке.<br />
Если маршрут с данным набором остановок уже существует, в ответ на соответствующий запрос выведите Already exists for i, где i — номер маршрута с таким набором остановок. В противном случае нужно выделить введённому набору остановок новый номер i и вывести его в формате New bus i.<br />
<br />
Пример<br />
<br />
Ввод<br />
4<br />
2 Marushkino Kokoshkino<br />
1 Kokoshkino<br />
2 Marushkino Kokoshkino<br />
2 Kokoshkino Marushkino<br />
Вывод<br />
New bus 1<br />
New bus 2<br />
Already exists for 1<br />
New bus 3<br />
<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="800467377"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="800467377" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="co2">#include &lt;map&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
&nbsp;
&nbsp;
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Q, i<span class="sy4">;</span>
&nbsp; &nbsp; string stop<span class="sy4">;</span>
&nbsp; &nbsp; map<span class="sy1">&lt;</span>vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span>, <span class="kw4">int</span><span class="sy1">&gt;</span> bs<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> Q<span class="sy4">;</span> <span class="co1">//узнаем склолько команд будет</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>Q<span class="sy4">;</span>Q <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span>Q<span class="sy2">--</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> v<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> i<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> z <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>z <span class="sy1">&lt;</span> i<span class="sy4">;</span>z<span class="sy2">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> stop<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v.<span class="me1">push_back</span><span class="br0">&#40;</span>stop<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>bs.<span class="me1">count</span><span class="br0">&#40;</span>v<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Already exists for &quot;</span> <span class="sy1">&lt;&lt;</span> bs<span class="br0">&#91;</span>v<span class="br0">&#93;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bs<span class="br0">&#91;</span>v<span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> r <span class="sy1">=</span> bs.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bs<span class="br0">&#91;</span>v<span class="br0">&#93;</span> <span class="sy1">=</span> r<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;New bus &quot;</span> <span class="sy1">&lt;&lt;</span> bs<span class="br0">&#91;</span>v<span class="br0">&#93;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4852.html</guid>
		</item>
		<item>
			<title>С++ «Неделя вторая - Контейнер map - Автобусные остановки» #13</title>
			<link>https://www.cyberforum.ru/blogs/457043/4851.html</link>
			<pubDate>Tue, 25 Jul 2017 16:07:26 GMT</pubDate>
			<description>Продолжаю проходить курс: «Основы разработки на C++: белый пояс» 
Задача: 
Реализуйте систему...</description>
			<content:encoded><![CDATA[<div>Продолжаю проходить курс: «Основы разработки на C++: белый пояс»<br />
Задача:<br />
Реализуйте систему хранения автобусных маршрутов. Вам нужно обрабатывать следующие запросы:<br />
<br />
NEW_BUS bus stop_count stop1 stop2 ... — добавить маршрут автобуса с названием bus и stop_count остановками с названиями stop1, stop2, ...<br />
BUSES_FOR_STOP stop — вывести названия всех маршрутов автобуса, проходящих через остановку stop.<br />
STOPS_FOR_BUS bus — вывести названия всех остановок маршрута bus со списком автобусов, на которые можно пересесть на каждой из остановок.<br />
ALL_BUSES — вывести список всех маршрутов с остановками.<br />
<br />
Формат ввода<br />
В первой строке ввода содержится количество запросов Q, затем в Q строках следуют описания запросов.<br />
Гарантируется, что все названия маршрутов и остановок состоят лишь из латинских букв, цифр и знаков подчёркивания.<br />
Для каждого запроса NEW_BUS bus stop_count stop1 stop2 ... гарантируется, что маршрут bus отсутствует, количество остановок больше 0, а после числа stop_count следует именно такое количество названий остановок, причём все названия в каждом списке различны.<br />
<br />
Формат вывода<br />
Для каждого запроса, кроме NEW_BUS, выведите соответствующий ответ на него:<br />
На запрос BUSES_FOR_STOP stop выведите через пробел список автобусов, проезжающих через эту остановку, в том порядке, в котором они создавались командами NEW_BUS. Если остановка stop не существует, выведите No stop.<br />
На запрос STOPS_FOR_BUS bus выведите описания остановок маршрута bus в отдельных строках в том порядке, в котором они были заданы в соответствующей команде NEW_BUS. Описание каждой остановки stop должно иметь вид Stop stop: bus1 bus2 ..., где bus1 bus2 ... — список автобусов, проезжающих через остановку stop, в порядке, в котором они создавались командами NEW_BUS, за исключением исходного маршрута bus. Если через остановку stop не проезжает ни один автобус, кроме bus, вместо списка автобусов для неё выведите no interchange. Если маршрут bus не существует, выведите No bus.<br />
На запрос ALL_BUSES выведите описания всех автобусов в алфавитном порядке. Описание каждого маршрута bus должно иметь вид Bus bus: stop1 stop2 ..., где stop1 stop2 ... — список остановок автобуса bus в порядке, в котором они были заданы в соответствующей команде NEW_BUS. Если автобусы отсутствуют, выведите No buses.<br />
<br />
Пример<br />
<br />
Ввод<br />
10<br />
ALL_BUSES<br />
BUSES_FOR_STOP Marushkino<br />
STOPS_FOR_BUS 32K<br />
NEW_BUS 32 3 Tolstopaltsevo Marushkino Vnukovo<br />
NEW_BUS 32K 6 Tolstopaltsevo Marushkino Vnukovo Peredelkino Solntsevo Skolkovo<br />
BUSES_FOR_STOP Vnukovo<br />
NEW_BUS 950 6 Kokoshkino Marushkino Vnukovo Peredelkino Solntsevo Troparyovo<br />
NEW_BUS 272 4 Vnukovo Moskovsky Rumyantsevo Troparyovo<br />
STOPS_FOR_BUS 272<br />
ALL_BUSES<br />
<br />
Вывод<br />
No buses<br />
No stop<br />
No bus<br />
32 32K<br />
Stop Vnukovo: 32 32K 950<br />
Stop Moskovsky: no interchange<br />
Stop Rumyantsevo: no interchange<br />
Stop Troparyovo: 950<br />
Bus 272: Vnukovo Moskovsky Rumyantsevo Troparyovo<br />
Bus 32: Tolstopaltsevo Marushkino Vnukovo<br />
Bus 32K: Tolstopaltsevo Marushkino Vnukovo Peredelkino Solntsevo Skolkovo<br />
Bus 950: Kokoshkino Marushkino Vnukovo Peredelkino Solntsevo Troparyovo<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="759074019"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="759074019" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="co2">#include &lt;map&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
&nbsp;
<span class="kw4">void</span> All_buses<span class="br0">&#40;</span><span class="kw4">const</span> map<span class="sy1">&lt;</span>string, vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;&gt;</span><span class="sy3">&amp;</span> f<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//вывод всех маршрутов</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>f.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;No buses&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//если размер контейнера = 0, то напишем что ничего нет</span>
&nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="co1">//если что-то есть</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> f<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//пролистаем контейнер и напишем, для каждой пары &quot;ключ-значение&quot;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Bus &quot;</span> <span class="sy1">&lt;&lt;</span> i.<span class="me1">first</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;:&quot;</span><span class="sy4">;</span> <span class="co1">//название маршрута</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> d <span class="sy4">:</span> i.<span class="me1">second</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//а также перечислим </span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span> <span class="sy1">&lt;&lt;</span> d<span class="sy4">;</span> <span class="co1">// название остановок</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
<span class="kw4">void</span> BusforStop<span class="br0">&#40;</span><span class="kw4">const</span> string<span class="sy3">&amp;</span> s, <span class="kw4">const</span> map<span class="sy1">&lt;</span>string, vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;&gt;</span><span class="sy3">&amp;</span> f, <span class="kw4">const</span> vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span><span class="sy3">&amp;</span> busm<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//вывод названий марштутов для остановки</span>
&nbsp; &nbsp; <span class="kw4">int</span> k <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">//определитель наличия чего-нибудь</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> v<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> f<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//листаем контейнер</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> n <span class="sy4">:</span> i.<span class="me1">second</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//и в каждом массиве значений для каждого ключа</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>n <span class="sy1">==</span> s<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//ищем совпадение с остановкой и, если нашли, </span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v.<span class="me1">push_back</span><span class="br0">&#40;</span>i.<span class="me1">first</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//запишем &quot;найденный&quot; маршрут в вектор</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; k<span class="sy2">++</span><span class="sy4">;</span> <span class="co1">//плюсанули наличие совпадения</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>k <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если есть совпадения</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> w <span class="sy4">:</span> busm<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//пролистаем общий вектор с маршрутами и для каждого маршрута</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> z <span class="sy4">:</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//будем просматривать вектор &quot;найденных&quot; маршрутов </span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>z <span class="sy1">==</span> w<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//и при совпадении</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> w <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span><span class="sy4">;</span> <span class="co1">//выводим маршрут</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="co1">//таким образом у нас будут выведены маршруты в порядке записи командой NEW_BUS</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>k <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;No stop&quot;</span><span class="sy4">;</span> <span class="co1">//если не нашли совпадение, то так и напишем</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
<span class="br0">&#125;</span>
<span class="kw4">void</span> Stopforbus<span class="br0">&#40;</span><span class="kw4">const</span> string<span class="sy3">&amp;</span> s, <span class="kw4">const</span> map<span class="sy1">&lt;</span>string, vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;&gt;</span><span class="sy3">&amp;</span> f, <span class="kw4">const</span> vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span><span class="sy3">&amp;</span> busm<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> l <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">//переменная для определения наличия нужного маршрута</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> f<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//просматриваем контейнер</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i.<span class="me1">first</span> <span class="sy1">==</span> s<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если значение ключа совпало с названием маршрута</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> m <span class="sy4">:</span> i.<span class="me1">second</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// (п.1) то для каждого значения этого ключа</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Stop &quot;</span> <span class="sy1">&lt;&lt;</span> m <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;:&quot;</span><span class="sy4">;</span> <span class="co1">//пишем остановку</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> l2 <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">//переменная для определения наличия других маршрутов остановки, кроме первоначального</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> v<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> r <span class="sy4">:</span> f<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//снова пролистываем контейнер</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> n <span class="sy4">:</span> r.<span class="me1">second</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//просматриваем все значения остановок</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//и если значение остановки совпало со значением ключа m в п.1, но не равно &quot;введенному&quot; маршруту s</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>n <span class="sy1">==</span> m <span class="sy3">&amp;&amp;</span> r.<span class="me1">first</span> <span class="sy3">!</span><span class="sy1">=</span> s<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v.<span class="me1">push_back</span><span class="br0">&#40;</span>r.<span class="me1">first</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//запишем маршруты в вектор</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l2<span class="sy2">++</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>l2 <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; no interchange&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>l2 <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> w <span class="sy4">:</span> busm<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//пролистаем общий вектор с маршрутами и для каждого маршрута</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> z <span class="sy4">:</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//будем просматривать вектор &quot;найденных&quot; маршрутов </span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>z <span class="sy1">==</span> w<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//и при совпадении</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span> &nbsp;<span class="sy1">&lt;&lt;</span> w<span class="sy4">;</span> <span class="co1">//выводим маршрут</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="co1">//таким образом у нас будут выведены маршруты в порядке записи командой NEW_BUS</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//с новой строки</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l<span class="sy2">++</span><span class="sy4">;</span> <span class="co1">//если маршрут нашелся, то плюсуем</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>l <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;No bus&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">// если не нашлось маршрутов - так и пишем</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Q<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> Q<span class="sy4">;</span> <span class="co1">//узнаем сколько команд будет</span>
&nbsp; &nbsp; map<span class="sy1">&lt;</span>string, vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;&gt;</span> bsmap<span class="sy4">;</span> <span class="co1">//создадим контейнер, ключом будет маршрут(строка), а значениями остановки (вектор строк)</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> busm<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>Q<span class="sy4">;</span> Q <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> Q<span class="sy2">--</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//делаем нужное количество циклов</span>
&nbsp; &nbsp; &nbsp; &nbsp; string comand, bus, stop<span class="sy4">;</span> <span class="co1">//заведем нужные переменные</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> comand<span class="sy4">;</span> <span class="co1">//считываем команду</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>comand <span class="sy1">==</span> <span class="st0">&quot;NEW_BUS&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//для этой команды</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> sc<span class="sy4">;</span> <span class="co1">//количество остановок</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> bus <span class="sy1">&gt;&gt;</span> sc<span class="sy4">;</span> <span class="co1">//прочитаем маршрут и количество остановок</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; busm.<span class="me1">push_back</span><span class="br0">&#40;</span>bus<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>sc<span class="sy4">;</span> sc <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> sc<span class="sy2">--</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//и ровно это количество раз</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> stop<span class="sy4">;</span> <span class="co1">//считаем название новой остановки</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bsmap<span class="br0">&#91;</span>bus<span class="br0">&#93;</span>.<span class="me1">push_back</span><span class="br0">&#40;</span>stop<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//и добавим к маршруту</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>comand <span class="sy1">==</span> <span class="st0">&quot;BUSES_FOR_STOP&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> stop<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BusforStop<span class="br0">&#40;</span>stop, bsmap, busm<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//тут и ниже все происходит в функциях, которые выше</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>comand <span class="sy1">==</span> <span class="st0">&quot;STOPS_FOR_BUS&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> bus<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Stopforbus<span class="br0">&#40;</span>bus, bsmap, busm<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>comand <span class="sy1">==</span> <span class="st0">&quot;ALL_BUSES&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; All_buses<span class="br0">&#40;</span>bsmap<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Кажется, что слишком много кода. Однако программа поставленную задачу решает.</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4851.html</guid>
		</item>
		<item>
			<title>С++ «Неделя вторая - Контейнер map - Анаграммы» #12</title>
			<link>https://www.cyberforum.ru/blogs/457043/4842.html</link>
			<pubDate>Wed, 19 Jul 2017 10:29:57 GMT</pubDate>
			<description>Контейнер map, проверяем анаграммы. 
Курс: «Основы разработки на C++: белый пояс» 
Задание: 
Слова...</description>
			<content:encoded><![CDATA[<div>Контейнер map, проверяем анаграммы.<br />
Курс: «Основы разработки на C++: белый пояс»<br />
Задание:<br />
Слова называются анаграммами друг друга, если одно из них можно получить перестановкой букв в другом. Например, слово «eat» можно получить перестановкой букв слова «tea», поэтому эти слова являются анаграммами друг друга. Даны пары слов, проверьте для каждой из них, являются ли слова этой пары анаграммами друг друга.<br />
<br />
Указание<br />
Один из способов проверки того, являются ли слова анаграммами друг друга, заключается в следующем. Для каждого слова с помощью словаря подсчитаем, сколько раз в нём встречается каждая буква. Если для обоих слов эти словари равны (а это проверяется с помощью обычного оператора ==), то слова являются анаграммами друг друга, в противном случае не являются.<br />
При этом построение такого словаря по слову удобно вынести в отдельную функцию BuildCharCounters.<br />
<br />
Формат ввода<br />
Сначала дано число пар слов N, затем в N строках содержатся пары слов, которые необходимо проверить. Гарантируется, что все слова состоят лишь из строчных латинских букв.<br />
<br />
Формат вывода<br />
Выведите N строк: для каждой введённой пары слов YES, если эти слова являются анаграммами, и NO в противном случае.<br />
<br />
Пример<br />
<br />
<b>Ввод</b><br />
3<br />
eat tea<br />
find search<br />
master stream<br />
<br />
<b>Вывод</b><br />
YES<br />
NO<br />
YES<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="950079116"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="950079116" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="co2">#include &lt;map&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
map<span class="sy1">&lt;</span><span class="kw4">char</span>, <span class="kw4">int</span><span class="sy1">&gt;</span> BuildCharCounters<span class="br0">&#40;</span><span class="kw4">const</span> string<span class="sy3">&amp;</span> a<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//тут мы будем создавать map в котором будут буквы от слова и их количество</span>
&nbsp; &nbsp; map <span class="sy1">&lt;</span><span class="kw4">char</span>, <span class="kw4">int</span><span class="sy1">&gt;</span> s1<span class="sy4">;</span> <span class="co1">//в качестве ключа будет буква, в качестве значения - сколько раз она встречается в слове</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> ch <span class="sy4">:</span> a<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//перебираем буквы в слове</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy2">++</span>s1<span class="br0">&#91;</span>ch<span class="br0">&#93;</span><span class="sy4">;</span> <span class="co1">//увидели букву, записали букву в качестве ключа, и в качестве значения добавили единичку...</span>
&nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; &nbsp; &nbsp;<span class="co1">//если буква еще раз встретится, то еще раз добавится единичка</span>
&nbsp; &nbsp; <span class="kw1">return</span> s1<span class="sy4">;</span> <span class="co1">//вернем наш список букв и их количества</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> i<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> i<span class="sy4">;</span> <span class="co1">//прочитаем сколько строк надо вводить</span>
&nbsp; &nbsp; string a, b<span class="sy4">;</span> <span class="co1">// это сами строки</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> v<span class="sy4">;</span> <span class="co1">//сюда ответы будем выводить</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>i<span class="sy4">;</span> i <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> i<span class="sy2">--</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// какую цифру ввели вначале, столько раз и повторяем цикл</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> a <span class="sy1">&gt;&gt;</span> b<span class="sy4">;</span> <span class="co1">//вводим строки</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>BuildCharCounters<span class="br0">&#40;</span>a<span class="br0">&#41;</span> <span class="sy1">==</span> BuildCharCounters<span class="br0">&#40;</span>b<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//сравниваем списки букв с их количеством и если равны...</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v.<span class="me1">push_back</span><span class="br0">&#40;</span><span class="st0">&quot;YES&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//добавляем &quot;YES&quot;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v.<span class="me1">push_back</span><span class="br0">&#40;</span><span class="st0">&quot;NO&quot;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//иначе добавляем другое слово</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> r <span class="sy4">:</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> r <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//тут выводим наши ответы</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Еще задачка:<br />
Реализуйте справочник столиц стран.<br />
<br />
На вход программе поступают следующие запросы:<br />
CHANGE_CAPITAL country new_capital — изменение столицы страны country на new_capital, либо добавление такой страны с такой столицей, если раньше её не было.<br />
RENAME old_country_name new_country_name — переименование страны из old_country_name в new_country_name.<br />
ABOUT country — вывод столицы страны country.<br />
DUMP — вывод столиц всех стран.<br />
<br />
Формат ввода<br />
В первой строке содержится количество запросов Q, в следующих Q строках — описания запросов. Все названия стран и столиц состоят лишь из латинских букв, цифр и символов подчёркивания.<br />
<br />
Формат вывода<br />
Выведите результат обработки каждого запроса:<br />
В ответ на запрос CHANGE_CAPITAL country new_capital выведите<br />
Introduce new country country with capital new_capital, если страны country раньше не существовало;<br />
Country country hasn't changed its capital, если страна country до текущего момента имела столицу new_capital;<br />
Country country has changed its capital from old_capital to new_capital, если страна country до текущего момента имела столицу old_capital, название которой не совпадает с названием new_capital.<br />
В ответ на запрос RENAME old_country_name new_country_name выведите<br />
Incorrect rename, skip, если новое название страны совпадает со старым, страна old_country_name не существует или страна new_country_name уже существует;<br />
Country old_country_name with capital capital has been renamed to new_country_name, если запрос корректен и страна имеет столицу capital.<br />
В ответ на запрос ABOUT country выведите<br />
Country country doesn't exist, если страны с названием country не существует;<br />
Country country has capital capital, если страна country существует и имеет столицу capital.<br />
В ответ на запрос DUMP выведите<br />
There are no countries in the world, если пока не было добавлено ни одной страны;<br />
разделённые пробелами пары country/capital, описывающие столицы всех стран и упорядоченные по названию страны, если в мире уже есть хотя бы одна страна.<br />
<br />
Пример 1<br />
<br />
Ввод<br />
6<br />
CHANGE_CAPITAL RussianEmpire Petrograd<br />
RENAME RussianEmpire RussianRepublic<br />
ABOUT RussianRepublic<br />
RENAME RussianRepublic USSR<br />
CHANGE_CAPITAL USSR Moscow<br />
DUMP<br />
Вывод<br />
Introduce new country RussianEmpire with capital Petrograd<br />
Country RussianEmpire with capital Petrograd has been renamed to RussianRepublic<br />
Country RussianRepublic has capital Petrograd<br />
Country RussianRepublic with capital Petrograd has been renamed to USSR<br />
Country USSR has changed its capital from Petrograd to Moscow<br />
USSR/Moscow<br />
<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="524673490"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="524673490" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="co2">#include &lt;map&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">void</span> ChangeCapital<span class="br0">&#40;</span>string<span class="sy3">&amp;</span> a, string<span class="sy3">&amp;</span> b, map<span class="sy1">&lt;</span>string, string<span class="sy1">&gt;</span><span class="sy3">&amp;</span> cc<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//добавляем столицу в страну</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>cc<span class="br0">&#91;</span>a<span class="br0">&#93;</span> <span class="sy1">==</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если страны еще нет...</span>
&nbsp; &nbsp; &nbsp; &nbsp; cc<span class="br0">&#91;</span>a<span class="br0">&#93;</span> <span class="sy1">=</span> b<span class="sy4">;</span> <span class="co1">//добавим страну и столицу заодно, простой инициализацией</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Introduce new country &quot;</span> <span class="sy1">&lt;&lt;</span> a <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; with capital &quot;</span> <span class="sy1">&lt;&lt;</span> b <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//выведем соответствующее сообщение</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>b <span class="sy1">==</span> cc<span class="br0">&#91;</span>a<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если страна есть с такой же сталицей...</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Country &quot;</span> <span class="sy1">&lt;&lt;</span> a <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; hasn't changed its capital&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//напишем что не можем добавить</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="co1">//иначе </span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Country &quot;</span> <span class="sy1">&lt;&lt;</span> a <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; has changed its capital from &quot;</span> <span class="sy1">&lt;&lt;</span> cc<span class="br0">&#91;</span>a<span class="br0">&#93;</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; to &quot;</span> <span class="sy1">&lt;&lt;</span> b <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">// напишем что мы поменяли столицу на новую</span>
&nbsp; &nbsp; &nbsp; &nbsp; cc<span class="br0">&#91;</span>a<span class="br0">&#93;</span> <span class="sy1">=</span> b<span class="sy4">;</span> <span class="co1">//и поменяем старую столицу на новую</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
<span class="kw4">void</span> Rename<span class="br0">&#40;</span>string<span class="sy3">&amp;</span> a, string<span class="sy3">&amp;</span> b, map<span class="sy1">&lt;</span>string, string<span class="sy1">&gt;</span><span class="sy3">&amp;</span> cc<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//переименуем страну</span>
&nbsp; &nbsp; map<span class="sy1">&lt;</span>string, string<span class="sy1">&gt;</span> ccCopy <span class="sy1">=</span> cc<span class="sy4">;</span> <span class="co1">//не стал заморачиваться и создал копию</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>a <span class="sy1">==</span> b <span class="sy3">||</span> <span class="st0">&quot;&quot;</span> <span class="sy1">==</span> ccCopy<span class="br0">&#91;</span>a<span class="br0">&#93;</span> <span class="sy3">||</span> <span class="st0">&quot;&quot;</span> <span class="sy3">!</span><span class="sy1">=</span> ccCopy<span class="br0">&#91;</span>b<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если названия равны или старой страны еще нет или новая уже есть,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Incorrect rename, skip&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">// то пишем, что все плохо</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="st0">&quot;&quot;</span> <span class="sy3">!</span><span class="sy1">=</span> cc<span class="br0">&#91;</span>a<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//иначе, если старая страна есть, то</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Country &quot;</span> <span class="sy1">&lt;&lt;</span> a <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; with capital &quot;</span> <span class="sy1">&lt;&lt;</span> cc<span class="br0">&#91;</span>a<span class="br0">&#93;</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; has been renamed to &quot;</span> <span class="sy1">&lt;&lt;</span> b <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//пишем что переименовали страну</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">auto</span> i <span class="sy1">=</span> cc<span class="br0">&#91;</span>a<span class="br0">&#93;</span><span class="sy4">;</span> <span class="co1">//скопирую название столицы в стране</span>
&nbsp; &nbsp; &nbsp; &nbsp; cc.<span class="me1">erase</span><span class="br0">&#40;</span>a<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//сотру старую страну из памяти горожан</span>
&nbsp; &nbsp; &nbsp; &nbsp; cc<span class="br0">&#91;</span>b<span class="br0">&#93;</span> <span class="sy1">=</span> i<span class="sy4">;</span> <span class="co1">//создам новую страну со старой столицей</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
<span class="kw4">void</span> About<span class="br0">&#40;</span><span class="kw4">const</span> string<span class="sy3">&amp;</span> a, <span class="kw4">const</span> map<span class="sy1">&lt;</span>string, string<span class="sy1">&gt;</span><span class="sy3">&amp;</span> cc<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//выведу инфу о стране</span>
&nbsp; &nbsp; map<span class="sy1">&lt;</span>string, string<span class="sy1">&gt;</span> ccCopy <span class="sy1">=</span> cc<span class="sy4">;</span> <span class="co1">// сначала скопирую </span>
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span> <span class="sy3">!</span><span class="sy1">=</span> ccCopy<span class="br0">&#91;</span>a<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если в стране что-то есть, то </span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Country &quot;</span> <span class="sy1">&lt;&lt;</span> a <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; has capital &quot;</span> <span class="sy1">&lt;&lt;</span> ccCopy<span class="br0">&#91;</span>a<span class="br0">&#93;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//выведем что есть</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="co1">//иначе</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Country &quot;</span> <span class="sy1">&lt;&lt;</span> a <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; doesn't exist&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//напишем что там ничего нет, и страны тоже )))</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
<span class="kw4">void</span> Dump<span class="br0">&#40;</span><span class="kw4">const</span> map<span class="sy1">&lt;</span>string, string<span class="sy1">&gt;</span><span class="sy3">&amp;</span> cc<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//тут просто выводим всё что есть</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>cc.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если размер равен 0, то </span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;There are no countries in the world&quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//напишем, что ничего нет</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="co1">//иначе</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">const</span> <span class="kw4">auto</span><span class="sy3">&amp;</span> i <span class="sy4">:</span> cc<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//переберем все пары в списке</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> i.<span class="me1">first</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;/&quot;</span> <span class="sy1">&lt;&lt;</span> i.<span class="me1">second</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span><span class="sy4">;</span> <span class="co1">//и напишем страну и город</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> i<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> i<span class="sy4">;</span> <span class="co1">//прочитаем сколько строк надо вводить</span>
&nbsp; &nbsp; string command<span class="sy4">;</span> <span class="co1">// это начало комманды</span>
&nbsp; &nbsp; map<span class="sy1">&lt;</span>string, string<span class="sy1">&gt;</span> cc<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>i<span class="sy4">;</span> i <span class="sy1">&gt;</span> <span class="nu0">0</span><span class="sy4">;</span> i<span class="sy2">--</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// какую цифру ввели вначале, столько раз и повторяем цикл</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> command<span class="sy4">;</span> <span class="co1">//считываем команду</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>command <span class="sy1">==</span> <span class="st0">&quot;CHANGE_CAPITAL&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//дальше проверяем какая команда написана и &nbsp;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string country, new_capital<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> country <span class="sy1">&gt;&gt;</span> new_capital<span class="sy4">;</span> <span class="co1">//если надо, считываем дополнительные значения</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ChangeCapital<span class="br0">&#40;</span>country, new_capital, cc<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//выполняем соответствующую функцию</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>command <span class="sy1">==</span> <span class="st0">&quot;RENAME&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//и так далее</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string old_country_name, new_country_name<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> old_country_name <span class="sy1">&gt;&gt;</span> new_country_name<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Rename<span class="br0">&#40;</span>old_country_name, new_country_name, cc<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>command <span class="sy1">==</span> <span class="st0">&quot;ABOUT&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string country<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> country<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; About<span class="br0">&#40;</span>country, cc<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>command <span class="sy1">==</span> <span class="st0">&quot;DUMP&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dump<span class="br0">&#40;</span>cc<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Вот вроде как-то так, но чего-то слишком много кода</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4842.html</guid>
		</item>
		<item>
			<title>С++ «Неделя вторая - Контейнер vector - Ежемесячные дела» #11</title>
			<link>https://www.cyberforum.ru/blogs/457043/4838.html</link>
			<pubDate>Sun, 16 Jul 2017 08:01:12 GMT</pubDate>
			<description>Продолжаю пилить курс: «Основы разработки на C++: белый пояс» 
Задание:  
У каждого из нас есть...</description>
			<content:encoded><![CDATA[<div>Продолжаю пилить курс: «Основы разработки на C++: белый пояс»<br />
Задание: <br />
У каждого из нас есть ежемесячные дела, каждое из которых нужно выполнять в конкретный день каждого месяца: оплата счетов за электричество, абонентская плата за связь и пр. Вам нужно реализовать работу со списком таких дел, а именно, обработку следующих операций:<br />
<br />
ADD i s<br />
Добавить дело с названием s в день i.<br />
<br />
NEXT<br />
Закончить текущий месяц и начать новый. Если новый месяц имеет больше дней, чем текущий, добавленные дни изначально не будут содержать дел. Если же в новом месяце меньше дней, дела со всех удаляемых дней необходимо будет переместить на последний день нового месяца.<br />
Обратите внимание, что количество команд этого типа может превышать 11.<br />
<br />
DUMP i<br />
Вывести все дела в день i.<br />
Изначально текущим месяцем считается январь. Количества дней в месяцах соответствуют Григорианскому календарю с той лишь разницей, что в феврале всегда 28 дней.<br />
<br />
Указание<br />
Для дописывания всех элементов вектора v2 в конец вектора v1 удобно использовать метод insert:<br />
v1.insert(end(v1), begin(v2), end(v2));<br />
<br />
Формат ввода<br />
Сначала число операций Q, затем описания операций.<br />
Названия дел s уникальны и состоят только из латинских букв, цифр и символов подчёркивания. Номера дней i являются целыми числами и нумеруются от 1 до размера текущего месяца.<br />
<br />
Формат вывода<br />
Для каждой операции типа DUMP в отдельной строке выведите количество дел в соответствующий день, а затем их названия, разделяя их пробелом. Порядок вывода дел в рамках каждой операции значения не имеет.<br />
<br />
Пример:<br />
<br />
Ввод<br />
12<br />
ADD 5 Salary<br />
ADD 31 Walk<br />
ADD 30 WalkPreparations<br />
NEXT<br />
DUMP 5<br />
DUMP 28<br />
NEXT<br />
DUMP 31<br />
DUMP 30<br />
DUMP 28<br />
ADD 28 Payment<br />
DUMP 28<br />
<br />
Вывод<br />
1 Salary<br />
2 WalkPreparations Walk<br />
0<br />
0<br />
2 WalkPreparations Walk<br />
3 WalkPreparations Walk Payment<br />
<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="7685577"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="7685577" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &quot;stdafx.h&quot;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">void</span> Next_month<span class="br0">&#40;</span><span class="kw4">int</span><span class="sy3">&amp;</span> index,<span class="kw4">const</span> vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span><span class="sy3">&amp;</span> diy, vector<span class="sy1">&lt;</span>vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;&gt;</span><span class="sy3">&amp;</span> tfd<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//создает следующий месяц и переносит дела</span>
&nbsp; &nbsp; index<span class="sy2">++</span><span class="sy4">;</span> <span class="co1">// берем индекс следующего месяца</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>index <span class="sy1">&gt;</span> <span class="nu0">11</span><span class="br0">&#41;</span>index <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">//если индекс стал &gt; 11(т.е. 12) то начинаем год с начала</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span>vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;&gt;</span> NewMonth <span class="sy1">=</span> tfd<span class="sy4">;</span> <span class="co1">//новый вектор и копируем в него старый</span>
&nbsp; &nbsp; <span class="kw4">int</span> a <span class="sy1">=</span> tfd.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//посчитаем размер старого вектора</span>
&nbsp; &nbsp; <span class="kw4">int</span> b <span class="sy1">=</span> diy<span class="br0">&#91;</span>index<span class="br0">&#93;</span><span class="sy4">;</span> <span class="co1">//и размер нового вектора</span>
&nbsp; &nbsp; tfd.<span class="me1">resize</span><span class="br0">&#40;</span>b<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//и меняем размер(обрезаем или дописываем пустые значения)</span>
&nbsp; &nbsp; <span class="kw4">const</span> <span class="kw4">int</span> e <span class="sy1">=</span> b <span class="sy2">-</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// переменная для определения индекса последнего дня в новом месяце</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>a <span class="sy1">&gt;</span> b<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если старый больше нового, то</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>b<span class="sy4">;</span> a <span class="sy1">&gt;</span> b<span class="sy4">;</span> b<span class="sy2">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//перебираем все дни, которые не влезли с прошлого месяца</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tfd<span class="br0">&#91;</span>e<span class="br0">&#93;</span>.<span class="me1">insert</span><span class="br0">&#40;</span>end<span class="br0">&#40;</span>tfd<span class="br0">&#91;</span>e<span class="br0">&#93;</span><span class="br0">&#41;</span>, begin<span class="br0">&#40;</span>NewMonth<span class="br0">&#91;</span>b<span class="br0">&#93;</span><span class="br0">&#41;</span>, end<span class="br0">&#40;</span>NewMonth<span class="br0">&#91;</span>b<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//все задачи из дня старого месяца дописываем в конец последнего дня нового месяца</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; NewMonth.<span class="me1">clear</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//очищаем новый вектор</span>
<span class="br0">&#125;</span>
<span class="kw4">void</span> Task_display<span class="br0">&#40;</span><span class="kw4">int</span> day, <span class="kw4">const</span> vector<span class="sy1">&lt;</span>vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;&gt;</span><span class="sy3">&amp;</span> tfd<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// вывод задач в определенный день</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> tfd<span class="br0">&#91;</span>day <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> tfd<span class="br0">&#91;</span>day <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="co1">//перебираем все задачи в конкретном дне</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span> <span class="sy1">&lt;&lt;</span> i<span class="sy4">;</span> <span class="co1">//и выводим через пробел</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Q<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> Q<span class="sy4">;</span> <span class="co1">//ввели количество операций</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> day_in_year <span class="sy1">=</span> <span class="br0">&#123;</span> <span class="nu0">31</span>,<span class="nu0">28</span>,<span class="nu0">31</span>,<span class="nu0">30</span>,<span class="nu0">31</span>,<span class="nu0">30</span>,<span class="nu0">31</span>,<span class="nu0">31</span>,<span class="nu0">30</span>,<span class="nu0">31</span>,<span class="nu0">30</span>,<span class="nu0">31</span><span class="br0">&#125;</span><span class="sy4">;</span> <span class="co1">//явно указываем сколько дней в каждом месяце</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span>vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;&gt;</span> task_for_day<span class="sy4">;</span> <span class="co1">//создаем новый вектор для задач в каждом дне месяца</span>
&nbsp; &nbsp; <span class="kw4">int</span> index_of_month <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">//переменная для определения индекса текущего месяца</span>
&nbsp; &nbsp; task_for_day.<span class="me1">resize</span><span class="br0">&#40;</span>day_in_year<span class="br0">&#91;</span>index_of_month<span class="br0">&#93;</span>, <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//увеличиваем вектор до количества дней в текущем месяце</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> Q <span class="sy1">&gt;</span> i<span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//и пока лимит операций (Q) не закончится считываем их и выполняем по ходу</span>
&nbsp; &nbsp; &nbsp; &nbsp; string comand<span class="sy4">;</span> <span class="co1">//команда</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> day<span class="sy4">;</span> <span class="co1">//день месяца</span>
&nbsp; &nbsp; &nbsp; &nbsp; string task<span class="sy4">;</span> <span class="co1">//задача на день</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> comand<span class="sy4">;</span> <span class="co1">//прочитали команду...</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>comand <span class="sy1">==</span> <span class="st0">&quot;NEXT&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если это запрос &quot;перейти на другой месяц&quot; ...</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Next_month<span class="br0">&#40;</span>index_of_month, day_in_year, task_for_day<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//переходим в функции</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>comand <span class="sy1">==</span> <span class="st0">&quot;DUMP&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если команда &quot;показать задачи в определенном дне&quot;, то</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> day<span class="sy4">;</span> <span class="co1">//считываем день</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Task_display<span class="br0">&#40;</span>day,task_for_day<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//показываем задачи</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>comand <span class="sy1">==</span> <span class="st0">&quot;ADD&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если команда &quot;добавить задачу в день&quot;, то</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> day <span class="sy1">&gt;&gt;</span> task<span class="sy4">;</span> <span class="co1">//считываем день и задачу</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; task_for_day<span class="br0">&#91;</span>day <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">push_back</span><span class="br0">&#40;</span>task<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//в нужный день вставляем задачу в конец дня</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4838.html</guid>
		</item>
		<item>
			<title>С++ «Неделя вторая - Контейнер vector - Очередь» #10</title>
			<link>https://www.cyberforum.ru/blogs/457043/4837.html</link>
			<pubDate>Sat, 15 Jul 2017 15:29:18 GMT</pubDate>
			<description>Основы разработки на C++: белый пояс 
С этим заданием повозился... 
Задание: 
Люди стоят в очереди,...</description>
			<content:encoded><![CDATA[<div>Основы разработки на C++: белый пояс<br />
С этим заданием повозился...<br />
Задание:<br />
Люди стоят в очереди, но никогда не уходят из её начала, зато могут приходить в конец и уходить оттуда. Более того, иногда некоторые люди могут прекращать и начинать беспокоиться из-за того, что очередь не продвигается.<br />
<br />
Реализуйте обработку следующих операций над очередью:<br />
<br />
WORRY i: пометить i-го человека с начала очереди (в нумерации с 0) как беспокоящегося;<br />
QUIET i: пометить i-го человека как успокоившегося;<br />
COME k: добавить k спокойных человек в конец очереди;<br />
COME -k: убрать k человек из конца очереди;<br />
WORRY_COUNT: узнать количество беспокоящихся людей в очереди.<br />
Изначально очередь пуста.<br />
<br />
<b>Формат ввода</b><br />
Количество операций Q, затем описания операций.<br />
Для каждой операции WORRY i и QUIET i гарантируется, что человек с номером i существует в очереди на момент операции.<br />
Для каждой операции COME -k гарантируется, что k не больше текущего размера очереди.<br />
<br />
<b>Формат вывода</b><br />
Для каждой операции WORRY_COUNT выведите одно целое число — количество беспокоящихся людей в очереди.<br />
<br />
Пример:<br />
Ввод<br />
8<br />
COME 5<br />
WORRY 1<br />
WORRY 4<br />
COME -2<br />
WORRY_COUNT<br />
COME 3<br />
WORRY 3<br />
WORRY_COUNT<br />
Вывод<br />
1<br />
2<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="916601567"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="916601567" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &quot;stdafx.h&quot;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">void</span> Worry<span class="br0">&#40;</span><span class="kw4">int</span><span class="sy3">&amp;</span> i, vector<span class="sy1">&lt;</span><span class="kw4">bool</span><span class="sy1">&gt;</span><span class="sy3">&amp;</span> x<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; x<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy1">=</span> <span class="kw2">true</span><span class="sy4">;</span> <span class="co1">// помечаю i-тый элемент (единичкой в векторе)</span>
<span class="br0">&#125;</span>
<span class="kw4">void</span> Quiet<span class="br0">&#40;</span><span class="kw4">int</span><span class="sy3">&amp;</span> i, vector<span class="sy1">&lt;</span><span class="kw4">bool</span><span class="sy1">&gt;</span><span class="sy3">&amp;</span> x<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; x<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy1">=</span> <span class="kw2">false</span><span class="sy4">;</span> <span class="co1">// помечаю i-тый элемент (нолем в векторе)</span>
<span class="br0">&#125;</span>
<span class="kw4">void</span> Come<span class="br0">&#40;</span><span class="kw4">int</span> n, vector<span class="sy1">&lt;</span><span class="kw4">bool</span><span class="sy1">&gt;</span><span class="sy3">&amp;</span> x<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//функция убрает или прибавляет к концу вектора элементы(старые значения не меняет) </span>
&nbsp; &nbsp; <span class="kw4">int</span> q <span class="sy1">=</span> x.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// измерили исходный вектор</span>
&nbsp; &nbsp; x.<span class="me1">resize</span><span class="br0">&#40;</span>q <span class="sy2">+</span> <span class="br0">&#40;</span>n<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// изменяем размер, при расширении нолями дополнится, при уменьшении обрежется, оставшиеся значения не изменит</span>
<span class="br0">&#125;</span>
<span class="kw4">void</span> Worry_count<span class="br0">&#40;</span><span class="kw4">const</span> vector<span class="sy1">&lt;</span><span class="kw4">bool</span><span class="sy1">&gt;</span><span class="sy3">&amp;</span> x<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//выводит количество &quot;сердитых&quot; единичек</span>
&nbsp; &nbsp; <span class="kw4">int</span> counts <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> x<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i<span class="sy1">==</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если встретим единичку(true), то засчитываем её</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; counts<span class="sy2">++</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> counts <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//выводим сколько единичек нашли</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> Q<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> Q<span class="sy4">;</span> <span class="co1">//ввели количество операций</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span><span class="kw4">bool</span><span class="sy1">&gt;</span> stack<span class="sy4">;</span> <span class="co1">//создали пустой вектор, принимающий только 0 или 1</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> Q <span class="sy1">&gt;</span> i<span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//и пока лимит строк не закончится считываем их и выполняем по ходу</span>
&nbsp; &nbsp; &nbsp; &nbsp; string s<span class="sy4">;</span> <span class="co1">//текстовая составляющая</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> col<span class="sy4">;</span> <span class="co1">//циферка</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> s<span class="sy4">;</span> <span class="co1">//прочитали текст...</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>s <span class="sy1">==</span> <span class="st0">&quot;WORRY_COUNT&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если это запрос &quot;вывести количество единичек&quot; ...</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Worry_count<span class="br0">&#40;</span>stack<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//выводим функцией; а циферку не запрашиваем</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> col<span class="sy4">;</span> <span class="co1">//иначе запрашиваем циферку</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>s <span class="sy1">==</span> <span class="st0">&quot;WORRY&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если запрос на &quot;пометить сердитого&quot;, то ...</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Worry<span class="br0">&#40;</span>col, stack<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// помечаем</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>s <span class="sy1">==</span> <span class="st0">&quot;QUIET&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//иначе, если запрос на &quot;убрать сердитость&quot;, то ...</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Quiet<span class="br0">&#40;</span>col, stack<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// убираем</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>s <span class="sy1">==</span> <span class="st0">&quot;COME&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//ну или обрезаем, или добавляем очередь</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Come<span class="br0">&#40;</span>col, stack<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//этой функцией</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Возможно нагромоздил немного. Но старался сильно не раздувать. <b>Кто подскажет где тут можно уменьшить, покомпактнее сделать?</b></div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4837.html</guid>
		</item>
		<item>
			<title>С++ «Неделя вторая - Контейнер vector - Средняя температура» #9</title>
			<link>https://www.cyberforum.ru/blogs/457043/4835.html</link>
			<pubDate>Sat, 15 Jul 2017 12:27:31 GMT</pubDate>
			<description>Продолжаю изучать курс: «Основы разработки на C++: белый пояс» 
Задача: 
Даны значения температуры,...</description>
			<content:encoded><![CDATA[<div>Продолжаю изучать курс: «Основы разработки на C++: белый пояс»<br />
Задача:<br />
Даны значения температуры, наблюдавшиеся в течение N подряд идущих дней. Найдите номера дней (в нумерации с нуля) со значением температуры выше среднего арифметического за все N дней.<br />
Гарантируется, что среднее арифметическое значений температуры является целым числом.<br />
<br />
Формат ввода<br />
Вводится число N, затем N неотрицательных целых чисел — значения температуры в 0-й, 1-й, ... (N&#8722;1)-й день.<br />
Формат вывода<br />
Первое число K — количество дней, значение температуры в которых выше среднего арифметического. Затем K целых чисел — номера этих дней.<br />
<br />
Пример<br />
<br />
Ввод<br />
5<br />
7 6 3 0 9<br />
Вывод<br />
3<br />
0 1 4<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="702435151"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="702435151" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">void</span> PrintVector<span class="br0">&#40;</span><span class="kw4">int</span> ch, <span class="kw4">const</span> vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span><span class="sy3">&amp;</span> z<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//функция печати числа и вектора</span>
&nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> ch <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//печать числа(количество чисел, которые больше среднего арифметического)</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> z<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//печать вектора (тут индексы этих чисел)</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> i <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> n<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> n<span class="sy4">;</span> <span class="co1">//задаем размер вектора(количество чисел в нем)</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> v<span class="sy4">;</span> <span class="co1">//создаем пустой вектор</span>
&nbsp; &nbsp; <span class="kw4">int</span> summ <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">//переменная для суммирования всех значений</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span> <span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> n<span class="sy4">;</span> i<span class="sy2">++</span><span class="br0">&#41;</span> <span class="co1">//будем вводить и суммировать</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> s<span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> s<span class="sy4">;</span> <span class="co1">//вводим число</span>
&nbsp; &nbsp; &nbsp; &nbsp; v.<span class="me1">push_back</span><span class="br0">&#40;</span>s<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//заносим его в вектор</span>
&nbsp; &nbsp; &nbsp; &nbsp; summ <span class="sy2">+</span><span class="sy1">=</span> s<span class="sy4">;</span> <span class="co1">// складываем </span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">int</span> d <span class="sy1">=</span> summ <span class="sy2">/</span> n<span class="sy4">;</span> <span class="co1">//находим среднее арифметическое (сумма чисел деленное на количество)</span>
&nbsp; &nbsp; <span class="kw4">int</span> count <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">//переменная для подсчета количества чисел, которые больше среднеарифметического</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> z<span class="sy4">;</span> <span class="co1">//вектор для записи индексов этих чисел</span>
&nbsp; &nbsp; <span class="kw4">int</span> index <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">//переменная для подсчета индекса</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//перебираем вектор с числами</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>i <span class="sy1">&gt;</span> d<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если число больше сред.арифметич., то ...</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; count<span class="sy2">++</span><span class="sy4">;</span> <span class="co1">//засчитываем его</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; z.<span class="me1">push_back</span><span class="br0">&#40;</span>index<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// а индекс этого числа заносим в новый вектор</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; index<span class="sy2">++</span><span class="sy4">;</span> <span class="co1">//считаем индекс каждого числа</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; PrintVector<span class="br0">&#40;</span>count, z<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// выводим результат</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Кажется громоздко получилось. Где можно сократить?</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4835.html</guid>
		</item>
		<item>
			<title>С++ «Неделя вторая - Функции - Перемещение строк, разворот последовательности» #8</title>
			<link>https://www.cyberforum.ru/blogs/457043/4834.html</link>
			<pubDate>Sat, 15 Jul 2017 09:40:29 GMT</pubDate>
			<description>Задание(перемещение строк): 
Напишите функцию MoveStrings, которая принимает два вектора строк,...</description>
			<content:encoded><![CDATA[<div>Задание(перемещение строк):<br />
Напишите функцию MoveStrings, которая принимает два вектора строк, source и destination, и дописывает все строки из первого вектора в конец второго. После выполнения функции вектор source должен оказаться пустым.<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="549440112"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="549440112" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &quot;stdafx.h&quot; //для Visual studio</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">void</span> MoveStrings<span class="br0">&#40;</span>vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span><span class="sy3">&amp;</span> source, vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span><span class="sy3">&amp;</span> destination<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//передаем ссылки, чтобы изменить сами объекты</span>
&nbsp; &nbsp; <span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> x <span class="sy4">:</span> source<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; destination.<span class="me1">push_back</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">// добавляем все строки из souse в destination</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; source.<span class="me1">clear</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//очищаем</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">//проверка работы</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> source <span class="sy1">=</span> <span class="br0">&#123;</span> <span class="st0">&quot;sdf&quot;</span>,<span class="st0">&quot;aaa&quot;</span>,<span class="st0">&quot;bbb&quot;</span> <span class="br0">&#125;</span>, destination <span class="sy1">=</span> <span class="br0">&#123;</span> <span class="st0">&quot;xxx&quot;</span> <span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp; &nbsp; MoveStrings<span class="br0">&#40;</span>source, destination<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//выполняем запись и очистку</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> source<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> i <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span> <span class="sy1">&lt;&lt;</span> endl<span class="sy4">;</span> <span class="co1">//должно быть пусто</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> destination<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> i <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span><span class="sy4">;</span> <span class="co1">// должен быть дописанный вектор</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Еще одно задание(разворот последовательности):<br />
Реализуйте функцию void Reverse(vector&lt;int&gt;&amp; v), которая переставляет элементы вектора в обратном порядке.<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="289589178"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="289589178" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &quot;stdafx.h&quot;</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">void</span> Reverse<span class="br0">&#40;</span>vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span><span class="sy3">&amp;</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> size <span class="sy1">=</span> v.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//определим размер вектора</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> c <span class="sy1">=</span> v<span class="sy4">;</span> <span class="co1">//создам копию</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> c<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// в копии пройдусь от начала до конца</span>
&nbsp; &nbsp; &nbsp; &nbsp; v<span class="br0">&#91;</span>size <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span> <span class="sy1">=</span> i<span class="sy4">;</span> <span class="co1">// и буду вставлять значения в вектор v с конца</span>
&nbsp; &nbsp; &nbsp; &nbsp; size<span class="sy2">--</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">//проверим...</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> nambers <span class="sy1">=</span> <span class="br0">&#123;</span> <span class="nu0">5</span>,<span class="nu0">4</span>,<span class="nu0">3</span>,<span class="nu0">1</span>,<span class="nu0">2</span> <span class="br0">&#125;</span><span class="sy4">;</span> 
&nbsp; &nbsp; Reverse<span class="br0">&#40;</span>nambers<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//изменили вектор</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> nambers<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// проверим как изменился вектор </span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> i <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>И ещё одно задание:<br />
Реализуйте функцию vector&lt;int&gt; Reversed(const vector&lt;int&gt;&amp; v), возвращающую копию вектора v, в которой числа переставлены в обратном порядке.<br />
<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="461517749"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="461517749" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &quot;stdafx.h&quot;</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> Reversed<span class="br0">&#40;</span><span class="kw4">const</span> vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span><span class="sy3">&amp;</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> size <span class="sy1">=</span> v.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> c <span class="sy1">=</span> v<span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//тут, в отличие от предыдущего примера, смотрим входящий вектор и ...</span>
&nbsp; &nbsp; &nbsp; &nbsp; c<span class="br0">&#91;</span>size <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span> <span class="sy1">=</span> i<span class="sy4">;</span> <span class="co1">//записываем с конца вектора-копии</span>
&nbsp; &nbsp; &nbsp; &nbsp; size<span class="sy2">--</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> c<span class="sy4">;</span> <span class="co1">//возвращаем &quot;перевернутую&quot; копию</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">//проверяем</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> nambers <span class="sy1">=</span> <span class="br0">&#123;</span> <span class="nu0">5</span>,<span class="nu0">4</span>,<span class="nu0">3</span>,<span class="nu0">1</span>,<span class="nu0">2</span> <span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> Reversed<span class="br0">&#40;</span>nambers<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> i <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; &quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Вопросов нет, вроде все просто.</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4834.html</guid>
		</item>
		<item>
			<title>С++ «Неделя вторая - Функции - Отбор палиндромов» #7</title>
			<link>https://www.cyberforum.ru/blogs/457043/4830.html</link>
			<pubDate>Thu, 13 Jul 2017 13:14:22 GMT</pubDate>
			<description>Продолжаю свою эпопею по изучению С++. Чем дальше тем интереснее. 
 
Задание: 
Напишите функцию,...</description>
			<content:encoded><![CDATA[<div>Продолжаю свою эпопею по изучению С++. Чем дальше тем интереснее.<br />
<br />
Задание:<br />
Напишите функцию, которая<br />
<br />
называется PalindromFilter<br />
возвращает vector&lt;string&gt;<br />
принимает vector&lt;string&gt; words и int minLength и возвращает все строки из вектора words, которые являются палиндромами и имеют длину не меньше minLength<br />
Входной вектор содержит не более 100 строк, длина каждой строки не больше 100 символов.<br />
<br />
Примеры<br />
<br />
words -&gt; minLength -&gt; результат<br />
abacaba, aba -&gt; 5 -&gt; abacaba<br />
abacaba, aba -&gt; 2 -&gt; abacaba, aba<br />
weew, bro, code -&gt; 4 -&gt; weew<br />
Пояснение<br />
<br />
В этой задаче вам надо сделать файл с реализацией функции PalindromFilter, а также других функций, если это необходимо (например, функции проверки на палиндром).<br />
<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="644991456"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="644991456" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &quot;stdafx.h&quot; //для Visual studio</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">bool</span> IsPalindrom<span class="br0">&#40;</span>string i<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//функция определения палиндрома</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span><span class="kw4">char</span><span class="sy1">&gt;</span> r<span class="sy4">;</span> <span class="co1">//вспомогательный вектор сделаю</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> ch <span class="sy4">:</span> i<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//положу строку в вектор</span>
&nbsp; &nbsp; &nbsp; &nbsp; r.<span class="me1">push_back</span><span class="br0">&#40;</span>ch<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//каждую букву в вектор</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw4">int</span> leight <span class="sy1">=</span> r.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//определю размер (сколько букав в строке)</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> ch2 <span class="sy4">:</span> r<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//теперь у меня есть возможность обращаться к символам строки по индексу</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ch2 <span class="sy3">!</span><span class="sy1">=</span> r<span class="br0">&#91;</span>leight <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">false</span><span class="sy4">;</span> <span class="co1">//сравниваю первый и последний и т.д. (второй и предпоследний)</span>
&nbsp; &nbsp; &nbsp; &nbsp; leight<span class="sy2">--</span><span class="sy4">;</span> <span class="co1">//&quot;хороший&quot; индекс - с последней буквы до первой дойдет, уменьшается</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">true</span><span class="sy4">;</span> <span class="co1">//если предыдущий цикл прошел без &quot;фальши&quot;, то возвращаем &quot;тру&quot; (значит строка - палиндром)</span>
<span class="br0">&#125;</span>
vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> PalindromFilter<span class="br0">&#40;</span>vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> words, <span class="kw4">int</span> minLength<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//фильтруем палиндромы</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> Output<span class="sy4">;</span> <span class="co1">//вектор для вывода</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> i <span class="sy4">:</span> words<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//перебираем все строки</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>IsPalindrom<span class="br0">&#40;</span>i<span class="br0">&#41;</span> <span class="sy3">&amp;&amp;</span> i.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">&gt;=</span> minLength<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//если строка является палиндором и больше или равна нужной длинны, то...</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Output.<span class="me1">push_back</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//...записываем в вектор для вывода</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> Output<span class="sy4">;</span> <span class="co1">//возвращаем новый вектор</span>
<span class="br0">&#125;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">//этого нет в задании, так для себя ))))</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span>string<span class="sy1">&gt;</span> words <span class="sy1">=</span> <span class="br0">&#123;</span> <span class="st0">&quot;sdfslk&quot;</span>,<span class="st0">&quot;dsksd&quot;</span>,<span class="st0">&quot;kddk&quot;</span>,<span class="st0">&quot;dd&quot;</span>,<span class="st0">&quot;;lwjlerjlwer&quot;</span> <span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> minLength <span class="sy1">=</span> <span class="nu0">3</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw4">int</span> sh <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
&nbsp; &nbsp; string a <span class="sy1">=</span> <span class="st0">&quot;&quot;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>string i <span class="sy4">:</span> PalindromFilter<span class="br0">&#40;</span>words, minLength<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; sh<span class="sy2">++</span><span class="sy4">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>sh <span class="sy1">&gt;</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> a <span class="sy1">=</span> <span class="st0">&quot;, &quot;</span><span class="sy4">;</span> <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> a <span class="sy1">&lt;&lt;</span> i<span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4830.html</guid>
		</item>
		<item>
			<title>С++ «Неделя вторая - Функции - Палиндром» #6</title>
			<link>https://www.cyberforum.ru/blogs/457043/4828.html</link>
			<pubDate>Thu, 13 Jul 2017 11:03:56 GMT</pubDate>
			<description>Задание: 
Напишите функцию, которая 
 
называется IsPalindrom 
возвращает bool 
принимает параметр...</description>
			<content:encoded><![CDATA[<div>Задание:<br />
Напишите функцию, которая<br />
<br />
называется IsPalindrom<br />
возвращает bool<br />
принимает параметр типа string и возвращает, является ли переданная строка палиндромом<br />
Палиндром - это слово или фраза, которые одинаково читаются слева направо и справа налево.<br />
<br />
<b>Аргумент функции -&gt; Результат</b><br />
madam -&gt; true<br />
gentleman -&gt; false<br />
<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="540504378"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="540504378" style="height: 222px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="de1"><pre class="de1"><span class="kw4">bool</span> IsPalindrom<span class="br0">&#40;</span>string i<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//функция определения палиндрома, принимает строку, возвращает bool</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span><span class="kw4">char</span><span class="sy1">&gt;</span> r<span class="sy4">;</span> <span class="co1">//вспомогательный вектор сделаю</span>
&nbsp; &nbsp; <span class="kw4">int</span> leight <span class="sy1">=</span> size<span class="br0">&#40;</span>i<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//определю размер (сколько букв в строке)</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> ch <span class="sy4">:</span> i<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//положу строку в вектор</span>
&nbsp; &nbsp; &nbsp; &nbsp; r.<span class="me1">push_back</span><span class="br0">&#40;</span>ch<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//каждую букву в вектор положу</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> ch2 <span class="sy4">:</span> r<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//теперь у меня есть возможность обращаться к символам по индексу вектора</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ch2 <span class="sy3">!</span><span class="sy1">=</span> r<span class="br0">&#91;</span>leight <span class="sy2">-</span> <span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">false</span><span class="sy4">;</span> <span class="co1">//сравниваю первый и последний и т.д. (второй и предпоследний)</span>
&nbsp; &nbsp; &nbsp; &nbsp; leight<span class="sy2">--</span><span class="sy4">;</span> <span class="co1">//&quot;хороший&quot; индекс - с последней буквы до первой дойдет, уменьшается</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">true</span><span class="sy4">;</span> <span class="co1">//если предыдущий цикл прошел без &quot;фальши&quot;, то возвращаем &quot;тру&quot; (значит строка - палиндром)</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Идея такова: перегнать строку в вектор и, получив доступ к буквам по индексу, сравнивать с концов по буквам, если одинаковые буквы то - палиндром.<br />
С одной стороны вроде нормально получилось(задачу решает), с другой - кажется можно короче как-то. Но я пока не вижу как. Может кто подскажет?</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4828.html</guid>
		</item>
		<item>
			<title>С++ «Неделя первая - Условный оператор и циклы - Двоичные числа» #5</title>
			<link>https://www.cyberforum.ru/blogs/457043/4827.html</link>
			<pubDate>Thu, 13 Jul 2017 01:08:54 GMT</pubDate>
			<description>Задание: 
На вход дано целое положительное число N. Выведите его в двоичной системе счисления без...</description>
			<content:encoded><![CDATA[<div>Задание:<br />
На вход дано целое положительное число N. Выведите его в двоичной системе счисления без ведущих нулей.<br />
<br />
Пример<br />
<br />
<b>stdin -&gt; stdout</b><br />
5 -&gt; 101<br />
32 -&gt; 100000<br />
1 -&gt; 1<br />
Подсказка<br />
<br />
число N можно считывать в переменную типа int<br />
в этой задаче вам может пригодиться контейнер vector; напоминаем, что добавление значения x в конец вектора v делается так: v.push_back(x);<br />
<br />
<b>Моё решение:</b><br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="124841789"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="124841789" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &quot;stdafx.h&quot;</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="kw2">using</span> <span class="kw2">namespace</span> std<span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw4">int</span> N, y, e, i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
&nbsp; &nbsp; vector<span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> v<span class="sy4">;</span> <span class="co1">//создаем пустой вектор</span>
&nbsp; &nbsp; <span class="kw3">cin</span> <span class="sy1">&gt;&gt;</span> N<span class="sy4">;</span> <span class="co1">//ввели число</span>
&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>N <span class="sy1">&gt;=</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// ниже мы делим N на 2 до тех пор пока N не станет меньше 1</span>
&nbsp; &nbsp; &nbsp; &nbsp; y <span class="sy1">=</span> N <span class="sy2">%</span> <span class="nu0">2</span><span class="sy4">;</span> <span class="co1">//узнаем остаток от деления - это наша двоичная цифра</span>
&nbsp; &nbsp; &nbsp; &nbsp; N <span class="sy1">=</span> N <span class="sy2">/</span> <span class="nu0">2</span><span class="sy4">;</span> <span class="co1">//</span>
&nbsp; &nbsp; &nbsp; &nbsp; v.<span class="me1">push_back</span><span class="br0">&#40;</span>y<span class="br0">&#41;</span><span class="sy4">;</span> <span class="co1">//записываем остаток от деления в вектор, в нем будет двоичный код, только в обратном порядке</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy2">++</span>i<span class="sy4">;</span> <span class="co1">//чтобы вычислить размер вектора</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>e <span class="sy1">=</span> i <span class="sy2">-</span> <span class="nu0">1</span><span class="coMULTI">/*вектор с 0 считается*/</span><span class="sy4">;</span>e <span class="sy1">&gt;=</span> <span class="nu0">0</span><span class="sy4">;</span>e<span class="sy2">--</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//переписываем вектор в правильном порядке</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> v<span class="br0">&#91;</span>e<span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Чет кажется нагородил немного лишнего. Как думаете?</div>

]]></content:encoded>
			<dc:creator>acmades</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/457043/4827.html</guid>
		</item>
	</channel>
</rss>
