<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://fotty.bbon.ru/export.php?type=rss" rel="self" type="application/rss+xml" />
		<title>fotty</title>
		<link>http://fotty.bbon.ru/</link>
		<description>fotty</description>
		<language>ru-ru</language>
		<lastBuildDate>Mon, 19 Mar 2012 11:48:30 +0400</lastBuildDate>
		<generator>MyBB/mybb.ru</generator>
		<item>
			<title>Урок 10 Изменение значений параметров</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=16#p16</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: teal&quot;&gt;Из урока 9 вы узнали, как разделить ваши программы на небольшие легко управляемые части, называемые функциями. Как вы уже знаете, программы могут передавать информацию (параметры) функциям. Представленные в уроке 9 программы использовали или выводили значения параметров, но не меняли их. Из этого урока вы узнаете, как изменить значение параметра в функции. Вы обнаружите, что для изменения параметров в функции фактически требуется больше шагов, чем можно предположить. Однако этот урок обучит вас всем шагам, которые необходимо знать. К концу данного урока вы освоите следующие основные концепции: &lt;/p&gt;
						&lt;p&gt;• Если функция не использует указатели или ссылки, она не может изменить значение параметра. &lt;/p&gt;
						&lt;p&gt;• Для изменения значения параметра функция должна знать адрес параметра в памяти. &lt;/p&gt;
						&lt;p&gt;• Оператор адреса C++ (&amp;amp;) позволяет вашей программе определить адрес переменной в памяти. &lt;/p&gt;
						&lt;p&gt;• Когда ваша программа узнает адрес памяти, она сможет использовать операцию разыменования C++ (*) для определения значения, хранимого по данному адресу. &lt;/p&gt;
						&lt;p&gt;• Если программе нужно изменить значение параметров функции, программа передает в функцию адрес параметра. &lt;/p&gt;
						&lt;p&gt;Изменение значения параметра функции представляет собой обычную операцию. Экспериментируйте с программами, представленными в этом уроке, чтобы убедиться, что вы полностью освоили этот процесс. &lt;br /&gt;ПОЧЕМУ ФУНКЦИИ ОБЫЧНО НЕ МОГУТ ИЗМЕНИТЬ ЗНАЧЕНИЯ ПАРАМЕТРОВ &lt;/p&gt;
						&lt;p&gt;Следующая программа NOCHANGE.CPP передает два параметра с именами big и small в функцию display_values. Функция display_values, в свою очередь, присваивает обоим параметрам число 1001 и затем выводит значение каждого параметра. Когда функция завершается, программа возобновляется и выводит значения этих же параметров: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void display_values(int a, int b) &lt;/p&gt;
						&lt;p&gt;{&amp;#160; &amp;#160; a = 1001; &lt;br /&gt;&amp;#160; &amp;#160;b = 1001; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Значения в функции display_values равны &amp;quot; &amp;lt;&amp;lt; а &amp;lt;&amp;lt; &amp;quot; и &amp;quot; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160; int big = 2002, small = 0; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Значения до функции &amp;quot; &amp;lt;&amp;lt; big &amp;lt;&amp;lt; &amp;quot; и&amp;quot; &amp;lt;&amp;lt; small &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;display_values(big, small); &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Значения после функции &amp;quot; &amp;lt;&amp;lt; big &amp;lt;&amp;lt; &amp;quot; и &amp;quot; &amp;lt;&amp;lt; small &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; NOCHANGE &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Значения до функции 2002 и 0 &lt;/p&gt;
						&lt;p&gt;Значения в функции display_values равны 1001 и 1001 &lt;/p&gt;
						&lt;p&gt;Значения после функции 2002 и 0 &lt;/p&gt;
						&lt;p&gt;Как видите, значения параметров в функции display_values были изменены (1001). Однако после завершения функции значения переменных big и small в main остались прежними. Чтобы понять, почему изменение параметров не повлияло на переменные big и small в main, вам необходимо понять, как C++ передает параметры в функции. &lt;/p&gt;
						&lt;p&gt;Когда ваши программы передают параметр в функцию, то по умолчанию С++ делает копию значения параметра и помещает эту копию во временный участок памяти, называемый стеком. Затем функция использует копию значения для выполнения своих операций. Когда функция завершается, C++ сбрасывает содержимое стека и все изменения, сделанные функцией в копиях эначений параметра. &lt;/p&gt;
						&lt;p&gt;Как вы знаете, переменная представляет собой имя, присваиваемое вашей программой ячейке памяти, которая хранит значение определенного типа. Предположим, например, что переменные big и small находятся в ячейках памяти 10 и 12. Если вы передадите переменные в функцию display_values, C++ поместит копии значений этих переменных в стек. На рис. 10.1 показано, что далее функция display_values будет использовать копии значений переменных. &lt;br /&gt;&lt;br /&gt; &lt;/p&gt;
						&lt;p&gt;Рис. 10.1. C++ размещает копии значений параметров во временном участке памяти, называемом стеком. &lt;/p&gt;
						&lt;p&gt;Как видите, функция display_values может обращаться к содержимому стека, в котором находятся копии значений 2002 и 0. Так как функция display_values ничего не знает о ячейках памяти big и small (адреса 10 и 12), функция не может изменить реальные значения переменных. &lt;/p&gt;
						&lt;p&gt;Почему функции C++ обычно не могут изменить значения параметров &lt;/p&gt;
						&lt;p&gt;Когда вы передаете параметры в функцию, C++ размещает копии значений параметров во временном участке памяти, называемом стеком. Любые изменения, выполняемые функцией над параметрами, проявляются только внутри стека. Когда функция завершается, C++ сбрасывает содержимое стека вместе с любыми изменениями, которые функция произвела в параметрах. Поскольку функция не знает адрес памяти параметра, она не может изменить его значение. &lt;br /&gt;ИЗМЕНЕНИЕ ЗНАЧЕНИЯ ПАРАМЕТРА &lt;/p&gt;
						&lt;p&gt;Для изменения значения параметра функция должна знать адрес памяти параметра. Чтобы сообщить функции адрес параметра, ваши программы должны использовать оператор адреса C++ (&amp;amp;). Следующий вызов функции иллюстрирует, как программа будет использовать оператор адреса для передачи адресов переменных big и small в функцию change_values: &lt;/p&gt;
						&lt;p&gt;change_values ( &amp;amp;big, &amp;amp;small ); --&amp;gt; Передача параметров по адресу &lt;/p&gt;
						&lt;p&gt;Внутри функции вы должны сообщить C++ , что программа будет передавать параметры с помощью адреса. Для этого вы объявляете переменные-указатели, предваряя имя каждой переменной звездочкой, как показано ниже: &lt;/p&gt;
						&lt;p&gt;void сhange_values ( int. *big, int. *small ) ---&amp;gt; Указатель на тип int &lt;/p&gt;
						&lt;p&gt;Переменная-указатель представляет собой переменную, которая содержит адрес памяти. Внутри функции вы должны сообщить C++ , что функция работает с адресом параметра. Для этого вы предваряете имя параметра звездочкой, как показано ниже: &lt;/p&gt;
						&lt;p&gt;*big = 1001; &lt;br /&gt;*small = 1001; &lt;/p&gt;
						&lt;p&gt;Следующая программа CHGPARAM.CPP использует оператор адреса для передачи адресов параметров big и small в функцию change_values. Функция, в свою очередь, использует указатели участков памяти параметров. Следовательно, изменения параметров, сделанные функцией, остаются и после завершения функции: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void change_values (int *a, int *b) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160; *a = 1001; &lt;br /&gt;&amp;#160; &amp;#160;*b = 1001; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Значения в функции display_values&amp;quot; &amp;lt;&amp;lt; &amp;quot; равны &amp;quot; &amp;lt;&amp;lt; *а &amp;lt;&amp;lt; &amp;quot; и &amp;quot; &amp;lt;&amp;lt; *b &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160; int big = 2002, small = 0; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Значения перед функцией &amp;quot; &amp;lt;&amp;lt; big &amp;lt;&amp;lt; &amp;quot; и &amp;quot; &amp;lt;&amp;lt; small &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;change_values(&amp;amp;big, &amp;amp;small); &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Значения после функции &amp;quot; &amp;lt;&amp;lt; big &amp;lt;&amp;lt; &amp;quot; и &amp;quot; &amp;lt;&amp;lt; small &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;C:\&amp;gt; CHGPARAM &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Значения перед функцией 2002 и 0 &lt;/p&gt;
						&lt;p&gt;Значения в функции display_values равны 1001 и 1001 &lt;/p&gt;
						&lt;p&gt;Значения после функции 1001 и 1001 &lt;/p&gt;
						&lt;p&gt;Как видите, значения, которые функция change_values присваивает параметрам, остаются и после завершения функции. Чтобы понять, почему изменения, которые функция выполнила над переменными, остались после ее завершения, необходимо вспомнить, что функция имеет доступ к ячейке памяти каждой переменной. Если вы передаете параметры по адресу, C++ помещает адрес каждой переменной в стек, как показано на рис. 10.2. &lt;br /&gt; &lt;/p&gt;
						&lt;p&gt;&amp;#160; &lt;/p&gt;
						&lt;p&gt;Рис. 10.2. Передача параметров по адресу. &lt;/p&gt;
						&lt;p&gt;Используя указатели (адреса памяти) внутри функции, change_values может обратиться к памяти по адресу каждого параметра, изменяя значения параметров, что и требуется. &lt;/p&gt;
						&lt;p&gt;Изменение значений параметров в функциях &lt;/p&gt;
						&lt;p&gt;Для изменения значения параметра в функции, функция должна знать адрес параметра в памяти. Следовательно, ваша программа должна передать адрес параметра с помощью оператора адреса C++ : &lt;/p&gt;
						&lt;p&gt;some_function(&amp;amp;some_variable); &lt;/p&gt;
						&lt;p&gt;Внутри функции вы должны сообщить C++ , что функция будет работать с адресом памяти (указателем). Для этого при объявлении вы предваряете имя параметра звездочкой: &lt;/p&gt;
						&lt;p&gt;void some_function(int *some_variable); &lt;/p&gt;
						&lt;p&gt;Далее внутри функции вы должны употреблять звездочку перед именем переменной: &lt;/p&gt;
						&lt;p&gt;*some_variable = 1001; &lt;br /&gt;cout &amp;lt;&amp;lt; *some_variable; &lt;/p&gt;
						&lt;p&gt;Во избежание ошибок C++ не позволит вашей программе передать адрес переменной в функцию, которая не ожидает указатль в качестве параметра. Кроме того, C++ обычно генерирует предупреждение компилятора, когда ваша программа пытается передать значение в функцию, которая ожидает указатель в качестве параметра. &lt;br /&gt;Второй пример &lt;/p&gt;
						&lt;p&gt;Если ваша программа передает указатели на параметры, параметры могут быгь любого типа, например int, float или char. Функция, которая использует указатели, объявляет переменные соответствующего типа, предваряя имя каждой переменной звездочкой, подтверждающей, что такая переменная является указателем. Следующая программа SWAPVALS.CPP передает адреса двух параметров типа float в функцию swap_values. Функция в свою очередь использует указатели на каждый параметр, чтобы обменять значения параметров: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void swap_values(float *a, float *b) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160; float temp; &lt;br /&gt;&amp;#160; &amp;#160;temp = *a; &lt;br /&gt;&amp;#160; &amp;#160;*a = *b; &lt;br /&gt;&amp;#160; &amp;#160;*b = temp; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160; float big = 10000.0; &lt;br /&gt;&amp;#160; &amp;#160;float small = 0.00001; &lt;br /&gt;&amp;#160; &amp;#160;swap_values(&amp;amp;big, &amp;amp;small); &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Big содержит &amp;quot; &amp;lt;&amp;lt; big &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Small содержит &amp;quot; &amp;lt;&amp;lt; small &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как видите, программа передает параметры в функцию swap_values по адресу. Внутри функции программа использует указатели на ячейки памяти параметров. Давайте более внимательно посмотрим на действия внутри функции swap_va lues. Как видите, функция объявляет а и b как указатели на значения типа float: &lt;/p&gt;
						&lt;p&gt;void swap_values(float *a, float *b) &lt;/p&gt;
						&lt;p&gt;Однако функция объявляет переменную temp просто как float, а не как указатель на float. float temp; &lt;/p&gt;
						&lt;p&gt;Рассмотрим следующий оператор: &lt;/p&gt;
						&lt;p&gt;temp = *а; &lt;/p&gt;
						&lt;p&gt;Этот оператор побуждает C++ присвоить переменной temp значение указываемое переменной а (т. е. значение переменной big, равное 10000.0). Поскольку temp имеет тип float, присваивание корректно. Переменная-указатель представляет собой переменную, которая хранит адрес. Следующий оператор объявляет temp как указатель на ячейку памяти, содержащую значение типа float. &lt;/p&gt;
						&lt;p&gt;float *temp; &lt;/p&gt;
						&lt;p&gt;В данном случае temp может хранить адрес значения с плавающей точкой но не само значение. &lt;/p&gt;
						&lt;p&gt;Если вы удалите оператор разыменования (*), стоящий перед переменной а внутри присваивания, то оператор будет пытаться присвоить значение, хранимое в а (которое является адресом), переменной temp. Поскольку temp может содержать значение с плавающей точкой, но не адрес значения с плавающей точкой, возникнет ошибка. &lt;/p&gt;
						&lt;p&gt;Не беспокойтесь, если вы не можете свободно обращаться с указателями, вы будете изучать их более подробно в части 3. На настоящий момент, однако, просто поймите, что, если хотите изменить в ваших функциях значения параметров, вы должны использовать указатели. &lt;/p&gt;
						&lt;p&gt;Использование ассемблерных листингов для лучшего понимания работы компилятора &lt;/p&gt;
						&lt;p&gt;Лучшим способом понять, как компилятор C++ трактует указатели, является исследование ассемблерного вывода компилятора. Большинство компиляторов C++ обеспечивают ключ командной строки, который вы можете использовать, чтобы указать компилятору выводить ассемблерный листинг. Читая ассемблерный листинг, вы можете лучше понять, как компилятор использует стек, когда передает параметры в функцию. &lt;br /&gt;ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ &lt;/p&gt;
						&lt;p&gt;Из данного урока вы узнали, как изменить значение параметра внутри фун кции. Для этого ваши функции должны использовать указатели. Сначала вы можете найти указатели слишком сложными. Из урока 14 вы узнаете, как использовать ссылки C++ , которые упрощают процесс изменения параметров внутри функции. Однако, поскольку многие программисты С используют указатели для изменения параметров, вам необходимо знать и такой вариант программирования. &lt;/p&gt;
						&lt;p&gt;Из урока 11 вы выясните, как функции библиотеки этапа выполнения, обеспечиваемые компилятором C++ , могут ускорить программирование, позволяя быстро разрабатывать сложные программы. Однако до изучения урока 11 убедитесь, что вы освоили следующие основные Концепции: &lt;br /&gt;Пока вы не используете указатели или ссылки C++ , функция не может изменить значение параметра. &lt;br /&gt;Когда ваша программа передает параметр в функцию, C++ помещает копию значения параметра во временный участок памяти, называемый стеком. Любые изменения, которые функция осуществляет над параметром, влияют только на эту копию, расположенную в стеке. &lt;br /&gt;Для изменения значения параметра функция должна знать адрес соответствующей переменной. &lt;br /&gt;Используя оператор адреса C++ (&amp;amp;), ваши программы могут передать адрес переменной в функцию. &lt;br /&gt;Когда функция получает адрес переменной, она должна объявить переменную параметра как указатель (предваряя имя переменной звездочкой). &lt;br /&gt;Если функции требуется использовать значение, на которое ссылаются (указывают) по указателю, функция должна предварять имя переменной-указателя звездочкой, т. е. оператором разыменования C++.&lt;/span&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 11:48:30 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=16#p16</guid>
		</item>
		<item>
			<title>Урок 9 Знакомство с функциями</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=15#p15</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: teal&quot;&gt;По мере увеличения размера и сложности ваших программ вам следует разделить их на небольшие легко управляемые части, называемые функциями. Каждая функция в вашей программе должна выполнять определенную задачу. Например, если вы пишете программу платежей, можете создать одну функцию, определяющую количество часов, отработанных служащим, вторую функцию, определяющую сверхурочную оплату, третью функцию, выводящую на печать и т. д. Если программе необходимо выполнить определенную задачу, то она вызывает соответствующую функцию, обеспечивая эту функцию информацией, которая ей понадобится в процессе обработки. Из этого урока вы узнаете, как создавать и использовать функции в ваших программах на C++. К концу данного урока вы освоите следующие основные концепции: &lt;/p&gt;
						&lt;p&gt;• Функции группируют связанные операторы для выполнения определенной задачи. &lt;/p&gt;
						&lt;p&gt;• Ваша программа вызывает функцию, обращаясь к ее имени, за которым следуют круглые скобки, например bеер (). &lt;/p&gt;
						&lt;p&gt;• После завершения обработки большинство функций возвращают значение определенного типа, например int или float, которое программа может проверить или присвоить переменной. &lt;/p&gt;
						&lt;p&gt;• Ваши программы передают параметры (информацию) функциям, например имя, возраст или оклад служащего, заключая параметры в круглые скобки, которые следуют за именем функции. &lt;/p&gt;
						&lt;p&gt;• C++ использует прототипы функций для определения типа возвращаемого функцией значения, а также количества и типов параметров, передаваемых функции. &lt;/p&gt;
						&lt;p&gt;По мере увеличения ваших программ использование функций становится их неотъемлемой необходимостью. Однако, как вы увидите, создавать и использовать функции в C++ очень легко. &lt;br /&gt;СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ ВАШИХ ПЕРВЫХ ФУНКЦИЙ &lt;/p&gt;
						&lt;p&gt;При создании программ вам следует спроектировать каждую функцию для выполнения определенной задачи. Если вы обнаружите, что функция выполняет несколько задач, вам следует разделить ее на две или более функций. Каждая создаваемая в программах функция должна иметь уникальное имя. &lt;/p&gt;
						&lt;p&gt;Как в случае с именами переменных, имена функций, которые вы выбираете те, должны соответствовать операции, выполняемой функцией. Например глядя на имена функций, перечисленные в табл. 9, вы получите хорошее представление о назначении каждой функции. &lt;/p&gt;
						&lt;p&gt;Таблица 9. Примеры смысловых имен функций. &lt;br /&gt;Имя функции 	&lt;br /&gt;Назначение функции &lt;/p&gt;
						&lt;p&gt;Print_test_scores 	&lt;br /&gt;Печатать тестовые очки класса &lt;/p&gt;
						&lt;p&gt;Accounts_payable 	&lt;br /&gt;Обработать счета компании &lt;/p&gt;
						&lt;p&gt;Get_user_name 	&lt;br /&gt;Запрос имени пользователя &lt;/p&gt;
						&lt;p&gt;Print_document 	&lt;br /&gt;Напечатать указанный документ &lt;/p&gt;
						&lt;p&gt;Calculate_income_tax 	&lt;br /&gt;Определить подоходный налог пользователя &lt;/p&gt;
						&lt;p&gt;Функция C++ по структуре подобна программе main, которую вы использовали во всех предыдущих программах. Другими словами, имя функции предваряется ее типом, а за ним следует список параметров, описание которых появляется в скобках. Вы группируете операторы функций внутри левой и правой фигурных скобок, как показано ниже: &lt;/p&gt;
						&lt;p&gt;тип_возврата имя_функции (список_параметров) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;объявления_переменных; &lt;br /&gt;операторы; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Рассмотрите, например, как структура этой функции соответствует следующей программе main: &lt;/p&gt;
						&lt;p&gt;void main (void) //-----------&amp;gt; тип имя (список_параметров) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int count; // ---------------------------&amp;gt; объявления_переменных; &lt;br /&gt;&amp;#160; &amp;#160;for (count = 0; count &amp;lt; 10; count++) cout &amp;lt;&amp;lt; count &amp;lt;&amp;lt; &#039; &#039;; // -----&amp;gt; Оператор &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Следующие операторы определяют функцию с именем show_message, которая выводит сообщение на экран, используя cout. &lt;/p&gt;
						&lt;p&gt;void show_message (void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Привет, учусь программировать на C++&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как вы, возможно, помните из урока 2, слово void, предшествующее имени функции, указывает функции не возвращать значение. Подобно этому, слово void, содержащееся внутри круглых скобок, указывает (компилятору C++ и программистам, читающим ваш код), что функция не использует параметры (информацию, которую программа передает функции). Следующая программа SHOW_ MSG.CPP использует функцию show_message для вывода сообщения на экран: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void show_message (void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Привет, учусь программировать на C++&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;void main (void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Перед вызовом функции&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;show_message (); &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Вернулись из функции&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Вы уже знаете, что выполнение программы всегда начинается внутри main. Внутри main следующий оператор (вызов функции) вызывает функцию show_message: &lt;/p&gt;
						&lt;p&gt;show_message (); &lt;/p&gt;
						&lt;p&gt;Круглые скобки после имени функции сообщают компилятору C++, что ваша программа использует функцию. Позже вы узнаете, что внутри этих скобок программа может передавать в функции информацию (параметры). Если вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;С: \&amp;gt;SHOW_MSG &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Перед вызовом функции &lt;/p&gt;
						&lt;p&gt;Привет, учусь программировать на C++ &lt;/p&gt;
						&lt;p&gt;Вернулись из функции &lt;/p&gt;
						&lt;p&gt;Если программа встречает вызов функции, она начинает выполнять операторы, находящиеся внутри функции. После того как программа выполнит все операторы, которые содержит функция (другими словами, функция завершится); выполнение программы продолжается с оператора, следующего непосредственно за вызовом функции: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void show_message (void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Привет, учусь программировать на C++&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;void main (void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Перед вызовом функции&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;show_message (); &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Вернулись из функции&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;В данном случае программа выполняет первый оператор в main, которой выводит сообщение для пользователя, что программа собирается вызвать функцию. Далее программа встречает вызов функции и запускает выполнение операторов в show_messsage. После того как программа выполнит единственный оператор функции, она возвращается обратно в main и продолжает свое выполнение с оператора, непосредственно следующего за вызовом функции. В этом случае программа выводит сообщение, извещая пользователя о том, что она возвратилась из функции, и после этого заканчивает свою работу. Следующая программа TWO__MSGS.CPP использует две функции - show_title и show_lesson для вывода информации об этой книге: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void show_title (void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Книга: Учимся программировать на C++&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;void show_lesson (void) &lt;br /&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Урок: Знакомство с функциями&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;void main (void) &lt;br /&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;show_title (); &lt;br /&gt;&amp;#160; &amp;#160;show_lesson (); &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда программа начинает выполнение, она сначала вызывает функцию show_title, которая выводит сообщение с помощью cout. После завершения show_title программа вызывает функцию show_lesson, также выводящую сообщение. После завершения show_lesson программа завершается, поскольку в main больше нет операторов. &lt;/p&gt;
						&lt;p&gt;Функции, представленные в этом уроке, выполняли очень простые задачи. В каждом случае ваша программа могла бы легко выполнить ту же самую обработку без использования функции просто включением тех же операторов в main. Однако назначение функций заключалось в том, чтобы показать вам, как программа определяет и затем вызывает функцию. По мере усложнения ваших программ вы будете использовать функции, чтобы упростить большие задачи, разбивая программу на небольшие легко управляемые части. При создании функций вы обнаружите, что, поскольку они содержат меньше строк кода, чем одна большая программа, их легче понять и изменить. В дополнение к этому в большинстве случаев функцию, созданную для одной программы, вы можете использовать без изменений в другой программе. Создавая библиотеку функций, вы тем самым снижаете количество времени, израсходованного на кодирование и тестирование подобных функций в будущем. &lt;/p&gt;
						&lt;p&gt;Вызов функции &lt;/p&gt;
						&lt;p&gt;Функция Представляет собой набор связанных операторов, которые Выполняют определенную задачу. Создавая функции внутри программы, вы можете делить большие задачи на небольшие легко управляемые части. &lt;br /&gt;Ваши программы выполняют операторы функций посредством вызова функции. Для вызова функции программы просто обращаются к имени функции, за которым следуют круглые скобки, как показано ниже: &lt;/p&gt;
						&lt;p&gt;function_name(); &lt;/p&gt;
						&lt;p&gt;Если программа передает информацию (параметры) в функцию, она размещает эту информацию внутри круглых скобок, разделяя ее запятыми: &lt;/p&gt;
						&lt;p&gt;payroll(employee_name, employee_id, salary); &lt;/p&gt;
						&lt;p&gt;После того как последний оператор функции завершен, выполнение программы продолжается с первого оператора следующего за вызовом функции. &lt;br /&gt;ПРОГРАММА МОЖЕТ ПЕРЕДАВАТЬ ИНФОРМАЦИЮ В ФУНКЦИИ &lt;/p&gt;
						&lt;p&gt;Для увеличения потенциальных возможностей ваших функций C++ позволяет программам передавать информацию (параметры) в функции. Если функция использует параметры, вы должны сообщить C++ тип каждого параметра, например int, float, char и т.д. Следующая функция show_number использует параметр типа int. &lt;/p&gt;
						&lt;p&gt;void show_number (int value) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Значение параметра равно &amp;quot; &amp;lt;&amp;lt; value &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Если ваша программа вызывает функцию show_number, она должна передать ей значение, как показано ниже: &lt;/p&gt;
						&lt;p&gt;show_number ( 1001 ) ; //----------------&amp;gt; Значение, передаваемое в функцию &lt;/p&gt;
						&lt;p&gt;C++ будет подставлять переданное число вместо каждого имени параметра value внутри функции: &lt;/p&gt;
						&lt;p&gt;show_number (1001) &lt;/p&gt;
						&lt;p&gt;void show_number (int value ) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Значение параметра равно &amp;quot; &amp;lt;&amp;lt; value &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;void show_number (1001) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Значение параметра равно &amp;quot; &amp;lt;&amp;lt; 1001 &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как видите, поскольку C++ замещает значение параметра, функция show_number выводит число 1001, переданное ей главной программой. &lt;/p&gt;
						&lt;p&gt;Следующая программа USEPARAM.CPP использует функцию show_number несколько раз, каждый раз передавая разные числа: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void show_number (int value) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Значение параметра равно &amp;quot; &amp;lt;&amp;lt; value &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;void main (void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;show_number (1); &lt;br /&gt;&amp;#160; &amp;#160;show_number (1001); &lt;br /&gt;&amp;#160; &amp;#160;show_number (-532); &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Если вы откомпилируете и запустите эту программу, на вашем экране будет отображено следующее: &lt;/p&gt;
						&lt;p&gt;С: \&amp;gt;USEPARAM &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Значение параметра равно 1 &lt;/p&gt;
						&lt;p&gt;Значение параметра равно 1001 &lt;/p&gt;
						&lt;p&gt;Значение параметра равно -532 &lt;/p&gt;
						&lt;p&gt;Как видите, каждый раз, когда программа вызывает функцию, C++ присваивает передаваемое число переменной value. Найдите время для эксперимента с этой программой, изменяя значения, которые main передает в функцию, и обращая внимание на результат. &lt;/p&gt;
						&lt;p&gt;Каждый параметр функции имеет определенный тип. В случае функции show_number параметр value должен быть типа int. Если вы попытаетесь передать в функцию значение другого типа, например с плавающей точкой, компилятор будет сообщать об ошибке. В большинстве случаев ваши программы будут передавать несколько значений в функцию. Для каждого передаваемого параметра функция должна указать имя и тип. Например, следующая программа BIGSMALL.CPP использует функцию show_big_and_little для вывода самого большого и самого маленького из трех полученных целочисленных значений: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void show_big_and_little (int a, int b, int c) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int small = a; &lt;br /&gt;&amp;#160; &amp;#160;int big = a; &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;if (b &amp;gt; big) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; big = b; &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;if (b &amp;lt; small) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; small = b; &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;if (c &amp;gt; big) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; big = c; &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;if (c &amp;lt; small) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; small = c; &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Самое большое значение равно &amp;quot; &amp;lt;&amp;lt; big &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Самое маленькое значение равно &amp;quot; &amp;lt;&amp;lt; small &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;void main (void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;show_big_and_little (1, 2, 3); &lt;br /&gt;&amp;#160; &amp;#160;show_big_and_little (500, 0, -500); &lt;br /&gt;&amp;#160; &amp;#160;show_big_and_little (1001, 1001, 1001); &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Если вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;С: \&amp;gt; BIGSMALL &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Самое большое значение равно 3 &lt;/p&gt;
						&lt;p&gt;Самое маленькое значение равно 1 &lt;/p&gt;
						&lt;p&gt;Самое большое значение равно 500 &lt;/p&gt;
						&lt;p&gt;Самое маленькое значение равно -500 &lt;/p&gt;
						&lt;p&gt;Самое большое значение равно 1001 &lt;/p&gt;
						&lt;p&gt;Самое маленькое значение равно 1001 &lt;/p&gt;
						&lt;p&gt;Наконец, следующая программа SHOW_EMP.CPP использует функцию show_employee для вывода возраста (тип int) и оклада (тип float) служащего: &lt;/p&gt;
						&lt;p&gt;#Include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void show_employee (int age, float salary) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Возраст служащего &amp;quot; &amp;lt;&amp;lt; age &amp;lt;&amp;lt; &amp;quot; года (лет)&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Служащий получает $&amp;quot; &amp;lt;&amp;lt; salary &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;void main (void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;show_employee (32, 25000.00); &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как видите, функция show_employee определяет параметры типа int и float &lt;/p&gt;
						&lt;p&gt;Передача параметров в функцию &lt;/p&gt;
						&lt;p&gt;Если ваша функция использует параметры, она должна указать уникальное имя и тип для каждого параметра. Когда программа вызывает функцию, C++ присваивает значения параметров именам параметров функции слева направо. Каждый параметр функции имеет определенный тип, например int, float или char. Значения, которые ваша программа передает в функцию, используя параметры, должны соответствовать типу параметров. &lt;br /&gt;ФУНКЦИИ МОГУТ ВОЗВРАЩАТЬ РЕЗУЛЬТАТ ВЫЗВАВШЕЙ ФУНКЦИИ &lt;/p&gt;
						&lt;p&gt;Функция должна выполнять определенную задачу для вашей программы. В большинстве случаев функции будут выполнять некоторые типы вычислений. Затем функция возвратит свой результат вызвавшей функции. Когда функция возвращает значение, вы должны сообщить C++ тип значения, например int, float, char т. д. Чтобы информировать C++ о типе возвращаемого функцией значения, просто поставьте перед именем функции соответствующий тип. Например, следующая функция add_values складывает два своих целочисленных параметра и возвращает результат типа int вызвавшей программе: &lt;/p&gt;
						&lt;p&gt;int add_values (int а, int b) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int result; &lt;br /&gt;&amp;#160; &amp;#160;result= а+b; &lt;br /&gt;&amp;#160; &amp;#160;return (result); &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;В данном случае слово int, появляющееся перед именем функции, указывает тип возвращаемого значения функции. Функции используют оператор return для возврата значения вызвавшей функции. Когда ваша программа встречает оператор return, она возвращает заданное значение и завершает выполнение функции, возвращая управление вызвавшей программе. В программе вы можете использовать возвращаемое значение, как показано ниже: &lt;/p&gt;
						&lt;p&gt;result=add_values (1, 2); &lt;/p&gt;
						&lt;p&gt;В данном случае программа присваивает возвращаемое функцией значение переменной result. Ваша программа может также сразу же напечатать возвращаемое функцией значение с помощью cout, как показано ниже: &lt;/p&gt;
						&lt;p&gt;cout &amp;lt;&amp;lt; &amp;quot;Сумма значений равна &amp;quot; &amp;lt;&amp;lt; add_values (500, 501) &amp;lt;&amp;lt; endl; &lt;/p&gt;
						&lt;p&gt;Предыдущая реализация функции add_values использовала три оператора, чтобы было легче понять смысл функции. Однако вы можете сократить функцию до единственного оператора return, как показано ниже: &lt;/p&gt;
						&lt;p&gt;int add_values (int a, int b) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;return (a+ b); &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Следующая программа ADDVALUE.CPP использует функцию add_values для сложения нескольких значений: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;int add_values (int a, int b) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;return (a+ b); &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;void main (void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot; 100 + 200 = &amp;quot; &amp;lt;&amp;lt; add_values(100, 200) &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot; 500 + 501 = &amp;quot; &amp;lt;&amp;lt; add_values(500, 501) &amp;lt;&amp;lt; endl ; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;-1 + 1 = &amp;quot; &amp;lt;&amp;lt; add_values(-1, 1) &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Выберите время для эксперимента с этой программой, изменяя значения, которые программа передает в функцию. Вы могли бы попытаться передать в функцию большие значения, например 20000 и 30000. Как и можно предложить, выполнение функции, возвращающей значение типа int, приведет к ошибке переполнения. &lt;/p&gt;
						&lt;p&gt;Не все функции возвращают значение типа int. Следующая функция average_ value возвращает среднее двух целочисленных значений, которое может быть дробным, например 3.5: &lt;/p&gt;
						&lt;p&gt;float average_value(int a, int b) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;return( (a + b) / 2.0); &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;В этом случае слово float, которое предшествует имени функции, указывает тип возвращаемого функцией значения. &lt;br /&gt;ФУНКЦИИ, КОТОРЫЕ НЕ ВОЗВРАЩАЮТ ЗНАЧЕНИЕ &lt;/p&gt;
						&lt;p&gt;Если функция не возвращает значение, вам необходимо предварить имя функции типом void. В противном случае вы должны предварять имя функции типом возвращаемого функцией значения, например, int, float, char и т. д. Чтобы возвратить значение вызвавшей функции, функция использует оператор return. Когда ваша программа встречает оператор return, выполнение функции завершается и указанное значение возвращается вызвавшей функции. Возможны ситуации, когда вы встретите оператор return в функции, которая не возвращает значение: &lt;/p&gt;
						&lt;p&gt;return; &lt;/p&gt;
						&lt;p&gt;В этом случае функция имеет тип void (не возвращает значение) и оператор return просто завершает выполнение функции. &lt;/p&gt;
						&lt;p&gt;Замечание: Если операторы появляются в функции после оператора return они не будут выполняться. Как уже обсуждалось выше, если ваша программа встречает оператор return в функции, то возвращается соответствующее значение, функция заканчивается и выполнение программы продолжается с первого оператора, следующего за вызовом функции. &lt;br /&gt;ИСПОЛЬЗОВАНИЕ ВОЗВРАЩАЕМОГО ФУНКЦИЕЙ ЗНАЧЕНИЯ &lt;/p&gt;
						&lt;p&gt;Когда функция возвращает значение, вызвавшая программа может присвоить возвращенное значение переменной, используя оператор присваивания, как показано ниже: &lt;/p&gt;
						&lt;p&gt;payroll_amount = payroll (employee, hours, salary); &lt;/p&gt;
						&lt;p&gt;В дополнение к этому вызвавшая программа просто может обращаться к функции. Например, следующий оператор выводит возвращаемое функцией значение, используя cout. &lt;/p&gt;
						&lt;p&gt;cout &amp;lt;&amp;lt; &amp;quot;Служащий получил&amp;quot; &amp;lt;&amp;lt; payroll(employee, hours, salary) &amp;lt; &amp;lt; endl; &lt;/p&gt;
						&lt;p&gt;Вызвавшая функция может также использовать возвращаемое значение в условии, как показано ниже: &lt;/p&gt;
						&lt;p&gt;if (payroll(employee, hours, salary) &amp;lt; 500.00) &lt;br /&gt;cout &amp;lt;&amp;lt; &amp;quot;Этот служащий нуждается в повышении&amp;quot; &amp;lt;&amp;lt; endl; &lt;/p&gt;
						&lt;p&gt;Как видите, программа может использовать возвращаемое функцией значение различными способами. &lt;br /&gt;ПРЕДСТАВЛЕНИЕ О ПРОТОТИПАХ ФУНКЦИЙ &lt;/p&gt;
						&lt;p&gt;Прежде чем ваша программа сможет вызвать функцию, C++ должен знать тип воозвращаемого значения, а также количество и тип параметров, используемых функцией. В каждой из программ, представленных в этом уроке, определение функции, вызываемой программой, всегда предшествует вызову функции в исходном файле. Однако в большинстве случаев функции появляются в вашем исходном файле и, как правило, одна функция вызывает другую. Чтобы гарантировать, что C++ знает особенности каждой функции, используемой в программе, вы можете поместить прототипы функций в начало исходного файла. В общем случае прототип функции обеспечивает информацию о типе возвращаемого функцией значения и ее параметрах. Следующий оператор иллюстрирует прототипы функций для нескольких функций, используемых в данном уроке: &lt;/p&gt;
						&lt;p&gt;void show_message(void); &lt;/p&gt;
						&lt;p&gt;void show_number(int); &lt;/p&gt;
						&lt;p&gt;void show_employee(int, float); &lt;/p&gt;
						&lt;p&gt;int add_values(int, int); &lt;/p&gt;
						&lt;p&gt;float average_value(int, int); &lt;/p&gt;
						&lt;p&gt;Как видите, прототип функции указывает тип возвращаемого значения, а также количество и тип каждого параметра. Обратите внимание на точку с запятой в конце каждого прототипа. &lt;/p&gt;
						&lt;p&gt;float average_value ( int, int) ; &lt;/p&gt;
						&lt;p&gt;Если ваша программа вызывает функцию, для которой компилятор C++ не нашел определения или прототипа, компилятор сообщает о синтаксической ошибке. При исследовании заголовочных файлов C++ или других программ вы будете постоянно сталкиваться с прототипами функций. Следующая программа PROTO.CPP иллюстрирует использование прототипа Функции: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;float average_value(int, int); // Прототип функции &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160; cout &amp;lt;&amp;lt; &amp;quot;Среднее значение 2000 и 2 равно &amp;quot; &amp;lt;&amp;lt; average_value(2000, 2) &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;float average_value (int a, int b) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;return((a + b) / 2.0); &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;В этом случае программа вызывает функцию average_value до того, как функция определена. Таким образом, программа использует прототип функции, который предваряет определение main. Если вы удалите прототип функции и откомпилируете эту программу, компилятор C++ будет сообщать о синтаксических ошибках. &lt;/p&gt;
						&lt;p&gt;Использование прототипов функций &lt;/p&gt;
						&lt;p&gt;Прототип функции сообщает компилятору C++ тип возвращаемого значения, а также количество и тип параметров функции. Когда вы компилируете вашу программу, компилятор C++ использует прототип каждой функции, чтобы убедиться, что вы не перепутали тип возвращаемого функцией значения (например, не присваиваете возвращаемое значение типа float переменной типа int) и что вы не передаете в качестве параметра значение неверного типа. Раньше многие компиляторы C++ не выполняли подобную проверку. В результате программисты часто тратили часы, пытаясь найти ошибки, возникающие из-за того, что вместо ожидаемого значения типа float в функцию передавалось значение типа int. Если вы встречаете синтаксическую ошибку, которая возникает из-за противоречия с прототипом функции, будьте благодарны. В прошлом компилятор не определял подобную ошибку, и ваша программа просто не работала. &lt;br /&gt;ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ &lt;/p&gt;
						&lt;p&gt;Из этого урока вы узнали, как использовать функции в программах на C++. Данный урок охватил целый ряд основных понятий, таких как параметры, типы возвращаемых значений и прототипы функций. Сейчас вы можете потратить несколько больше времени на эксперименты с простыми программами. Из урока 10 вы узнаете, как изменять значения параметров внутри функций. Однако до изучения урока 10 убедитесь, что вы освоили следующие основные концепции: &lt;br /&gt;По мере усложнения ваших программ вам следует делить их на небольшие легко управляемые части, называемые функциями. Каждая функция должна иметь уникальное имя. Присваивайте вашим функциям имена, выражающие смысл задач, которые выполняют функции. &lt;br /&gt;Функции могут возвращать значение вызвавшей функции. При этом вы должны указать тип возвращаемого функцией значения (int, char и т. д.) до имени функции, в противном случае вы должны предварять имя функции словом void. &lt;br /&gt;Программы передают информацию в функции с помощью параметров. Если функция получает параметры, вы должны указать уникальное имя и тип каждого параметра. Если функция не получает параметры, вы должны поместить ключевое слово void внутри круглых скобок, следующих за именем функции. &lt;br /&gt;C++ должен знать тип возвращаемого значения и количество и тип параметров, которые получает функция. Если определение функции следует за использованием функции, вы должны поместить прототип функции в начале исходного файла.&lt;/span&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 11:47:10 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=15#p15</guid>
		</item>
		<item>
			<title>Урок 8. Повторение одного или нескольких операторов</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=14#p14</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: teal&quot;&gt;Из урока 7 вы узнали, как использовать в ваших программах оператор C++ if для принятия решений. С подобным принятием решений тесно связана способность повторять одну или несколько инструкций определенное число раз или до достижения некоторого условия. В этом уроке вы будете использовать итеративные конструкции C++ для повторения одного или нескольких операторов. К концу данного урока вы освоите следующие основные концепции: &lt;br /&gt;Для повторения операторов определенное число раз ваши программы используют оператор C++ for. &lt;br /&gt;С помощью оператора C++ while программы повторяют операторы до тех пор, пока указанное условие истинно. &lt;br /&gt;Оператор C++ do while позволяет программам выполнять операторы по крайней мере один раз, а затем, возможно, повторять операторы, основываясь на определенном условии. &lt;/p&gt;
						&lt;p&gt;Возможность повторять операторы очень важна в программировании. Экспериментируйте с программами, представленными в этом уроке. К концу урока вы сможете значительно усовершенствовать свои возможности программирования на C++. &lt;br /&gt;ПОВТОРЕНИЕ ОПЕРАТОРОВ УКАЗАННОЕ ЧИСЛО РАЗ &lt;/p&gt;
						&lt;p&gt;Одной из наиболее широко используемых операций в ваших программах является повторение одного или нескольких операторов определенное число раз. Например, одна программа могла бы повторять один и тот же оператор, чтобы напечатать пять копий файла, а другая могла бы повторять некоторый Набор операторов 30 раз, чтобы определить, поднялась или упала цена ваших 30 акций. Оператор C++ for предоставляет чрезвычайно простую возможность вашим программам повторять один или несколько операторов указанное число раз. &lt;/p&gt;
						&lt;p&gt;Если ваша программа использует оператор for (часто называемый циклом for), она должна указать переменную, которая называется управляющей переменной, хранящей количество выполнений цикла. Например, следующий цикл for использует переменную count для хранения количества выполнений цикла. В данном случае цикл будет выполнен десять раз. &lt;/p&gt;
						&lt;p&gt;for (count = 1; count &amp;lt;= 10; count++) &lt;br /&gt;&amp;#160; &amp;#160; оператор; &lt;/p&gt;
						&lt;p&gt;Цикл for состоит из четырех частей. Первые три части управляют количеством выполнений цикла. Сначала оператор count = 1, присваивает переменной управления начальное значение. Цикл for выполняет эту инициализацию один раз при запуске цикла. Далее цикл проверяет условие count &amp;lt;= 10. Если условие истинно, цикл for выполняет следующий оператор. Если условие ложно, цикл завершается и программа продолжает свое выполнение с первого оператора, следующего за циклом. Если условие истинно и цикл for выполняет свой оператор, то после этого цикл увеличивает переменную count, используя оператор count++. Далее программа проверяет условие count &amp;lt;= 10. Если это условие все еще истинно, то опять повторяется выполнение оператора внутри цикла, увеличение и проверка переменной count &lt;/p&gt;
						&lt;p&gt;for&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; (count = 1;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;count &amp;lt;= 10;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;count++) &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;Инициализация&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Проверка&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; Увеличение &lt;/p&gt;
						&lt;p&gt;Следующая программа FIRSTFOR.CPP использует цикл for для вывода на экран дисплея значений от 1 до 100: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int count; &lt;br /&gt;&amp;#160; &amp;#160;for (count = 1; count &amp;lt;=100; count++) cout &amp;lt;&amp;lt; count &amp;lt;&amp;lt;&#039; &#039;; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как видите, оператор for инициализирует переменную count значением 1. Затем цикл проверяет, меньше ли значение переменной count или равно 100. Если это так, цикл for выполняет соответствующий оператор и затем увеличивает count, повторяя проверку. Экспериментируйте с этой программой, изменяя значение 100 на 10, 20 и даже 5000. &lt;/p&gt;
						&lt;p&gt;Следующая программа ASKCOUNT.CPP выводит сообщение, запрашивающее пользователя ввести число, при котором цикл должен завершиться. Затем программа выводит числа от одного до указанного значения: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int count; &lt;br /&gt;&amp;#160; &amp;#160;int ending_value; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Введите конечное значение и нажмите Enter: &amp;quot;; &lt;br /&gt;&amp;#160; &amp;#160;cin &amp;gt;&amp;gt; ending_value; &lt;br /&gt;&amp;#160; &amp;#160;for (count = 0; count &amp;lt;= ending_value; count++) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; count &amp;lt;&amp;lt; &#039; &#039;; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Экспериментируйте с этой программой, вводя разные числа, например 10, 1 и даже 0. Если вы вводите значение 0 или 1, цикл for никогда не выполняется, потому что условие count &amp;lt;= ending_value сразу же ложно. Помните, если вы введете значение вне диапазона значений, которые может хранить переменная типа int, возникнет ошибка переполнения. Например, запустите программу и введите значение 50000. Поскольку это значение превышает наибольшее возможное для переменной типа int, то переполнение приводит к отрицательному значению, которое предотвращает выполнение цикла. &lt;br /&gt;Циклы for C++ поддерживают составные операторы &lt;/p&gt;
						&lt;p&gt;Из урока 7 вы узнали, что если программы выполняют несколько операторов внутри if или else, то такие операторы следует сгруппировать внутри левой и правой фигурных скобок. Это же относится и к нескольким операторам в цикле for. Следующая программа ADD1_100.CPP зацикливает числа от 1 до 100, выводя и добавляя каждое число в общий итог: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int count; &lt;br /&gt;&amp;#160; &amp;#160;int total = 0; &lt;br /&gt;&amp;#160; &amp;#160;for (count = 1; count &amp;lt;= 100; count++) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; { &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Прибавляю &amp;quot; &amp;lt;&amp;lt; count &amp;lt;&amp;lt; &amp;quot; к &amp;quot; &amp;lt;&amp;lt; total; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;total = total + count; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot; получаю &amp;quot; &amp;lt;&amp;lt; total &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;} &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Группируя операторы внутри фигурных скобок, цикл for тем самым может выполнить несколько операторов за один проход (называемый umepa-цией цикла). &lt;br /&gt;Изменение и увеличение цикла for &lt;/p&gt;
						&lt;p&gt;Все представленные до настоящего момента циклы for увеличивали управляющую переменную цикла на 1 на каждой итерации цикла. Однако цикл for не обязывает ваши программы увеличивать эту переменную на единицу. Следующая программа BY_FIVES.CPP выводит каждое пятое число в диапазоне от 0 до 100: &lt;/p&gt;
						&lt;p&gt;&amp;#160; &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int count; &lt;br /&gt;&amp;#160; &amp;#160;for (count = 0; count &amp;lt;= 100; count += 5) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; count &amp;lt;&amp;lt; &#039; &#039;&#039;; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Если вы откомпилируете эту программу, на вашем экране будут отображаться числа 0, 5,10 и т. д. до 100. Обратите внимание, что оператор цикла for использует для увеличения переменную count. &lt;/p&gt;
						&lt;p&gt;count += 5; &lt;/p&gt;
						&lt;p&gt;Если вы хотите добавить некоторое значение к текущему значению переменной, а затем присвоить результат той же переменной, C++ позволяет вам сделать это двумя способами. Первый: предположим, вашей программе необходимо добавить значение 5 к переменной count, это можно сделать, как показано ниже: &lt;/p&gt;
						&lt;p&gt;count = count + 5; &lt;/p&gt;
						&lt;p&gt;Второй: C++ позволяет вам использовать краткую запись, представленную ниже, для добавления значения 5 к переменной count. &lt;/p&gt;
						&lt;p&gt;count += 5; &lt;/p&gt;
						&lt;p&gt;Поскольку это легче записать, то данная краткая форма является общепринятой внутри циклов. &lt;/p&gt;
						&lt;p&gt;При использовании цикла for вы не обязаны продвигать счетчик в сторону увеличения. Следующая программа CNT_DOWN.CPP использует цикл for для вывода чисел в порядке уменьшения от 100 до 1: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int count ; &lt;br /&gt;&amp;#160; &amp;#160;for (count = 100; count &amp;gt;= 1; count--) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; count &amp;lt;&amp;lt; &#039; &#039;; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как видите, цикл for инициализирует переменную count значением 100. На каждой итерации цикл уменьшает значение этой переменной на 1. Цикл завершается, когда переменная count содержит значение 0. &lt;/p&gt;
						&lt;p&gt;Остерегайтесь бесконечных циклов &lt;/p&gt;
						&lt;p&gt;Как вы уже знаете, цикл for предоставляет вашим программам способ повторять связанные операторы определенное количество раз. Используя переменную управления, цикл for по существу считает количество выполненных итераций. Когда цикл достигает своего конечного условия, ваша программа прекращает повторение операторов и продолжает свое выполнение с первого оператора, следующего за циклом for. &lt;/p&gt;
						&lt;p&gt;К сожалению, из-за ошибок в программах в некоторых случаях цикл никогда не достигает своего завершающего условия и, таким образом, зацикливается навсегда (или до тех пор, пока вы не прервете программу). Такие не завершающиеся циклы называются бесконечными циклами. Другими словами, это циклы, не имеющие способа для завершения. Например, следующий оператор for создает бесконечный цикл: &lt;/p&gt;
						&lt;p&gt;for (count = 0; count &amp;lt; 100; wrong_variable++) &lt;br /&gt;&amp;#160; &amp;#160;// операторы &lt;/p&gt;
						&lt;p&gt;Как видите, цикл for использует переменную count в качестве своей управляющей переменной. Однако в секции цикла увеличения программа увеличивает не ту переменную. В результате цикл никогда не увеличивает переменную count, и она никогда не будет иметь значение больше или равно 100. Таким образом, этот цикл превращается в никогда не завершающийся бесконечный цикл. &lt;/p&gt;
						&lt;p&gt;Важно обратить внимание, что циклы for не ограничиваются использованием переменных типа int в качестве их управляющих переменных. Например, следующая программа LOOPVAR.CPP использует переменную типа char для вывода букв алфавита внутри одного цикла и переменную типа float для вывода чисел с плавающей точкой внутри другого цикла: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;char letter; &lt;br /&gt;&amp;#160; &amp;#160;float value; &lt;br /&gt;&amp;#160; &amp;#160;for (letter = &#039;A&#039;; letter &amp;lt;= &#039;Я&#039;; letter++) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; letter; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;for (value = 0.0; value &amp;lt;= 1.0; value += 0.1) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; value &amp;lt;&amp;lt; &#039; &#039;; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Если вы откомпилируете и запустите эту программу, на экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ &lt;/p&gt;
						&lt;p&gt;0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 &lt;/p&gt;
						&lt;p&gt;Повторение цикла определенное число раз &lt;/p&gt;
						&lt;p&gt;Одна из наиболее общих операций, которую будут выполнять ваши программы, состоит в повторении одного или нескольких операторов определенное количество раз. Оператор C++ for позволяет вашим программам сделать именно это. Такой оператор for использует управляющую переменную, хранящую количество выполнений цикла. Общий формат оператора for выглядит так: &lt;/p&gt;
						&lt;p&gt;for (инициализация; проверка; увеличение) &lt;br /&gt;&amp;#160; &amp;#160; оператор; &lt;/p&gt;
						&lt;p&gt;При запуске этот цикл for присваивает начальное значение управляющей переменной цикла. Далее программа проверяет условие цикла. Если условие истинно, она выполняет операторы внутри цикла, затем увеличивает управляющую переменную цикла и повторяет проверку условия. Если условие истинно, процесс повторяется. Если же условие ложно, цикл for завершается и программа продолжает свое выполнение с первого оператора, следующего за циклом for. &lt;br /&gt;ВЗГЛЯД НА ЦИКЛ while &lt;/p&gt;
						&lt;p&gt;Как вы только что узнали, цикл C++ for позволяет вашим программам повторять один или несколько операторов определенное количество раз. Однако в некоторых случаях программе необходимо повторять операторы, пока удовлетворяется (истинно) некоторое условие. Например, в следующих уроках вы узнаете, как читать содержимое файла. Такие программы могли бы повторять цикл, пока не встретится конец файла. В ситуациях, когда программам необходимо выполнять цикл, пока удовлетворяется некоторое условие (но не обязательно определенное количество раз), ваши программы могут использовать оператор C++ while. Общий формат оператора while выглядит так: &lt;/p&gt;
						&lt;p&gt;while (условие_верно) &lt;br /&gt;&amp;#160; &amp;#160; оператор; &lt;/p&gt;
						&lt;p&gt;Если ваша программа встречает оператор while, она проверяет заданное условие. Если условие истинно, программа выполняет операторы цикла while. После выполнения последнего оператора в цикле, цикл while опять проверяет условие. Если условие все еще истинно, повторяются операторы цикла и повторяется данный процесс. Когда условие, наконец, становится ложным, цикл завершается и программа продолжает свое выполнение с первого оператора, следующего за циклом. Следующая программа GET_YN.CPP просит вас ввести Д для да или Н для нет. Затем программа использует цикл while для чтения символов с клавиатуры, пока пользователь не введет Д или Н. Если пользователь вводит значение, отличное от Д или Н, программа сигналит встроенным динамиком, записывая символ сигнала &#039;\а&#039; в выходной поток cout : &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int done = 0; // Устанавливается в состояние „истина&amp;quot;, если введены Д или Н char letter; &lt;br /&gt;&amp;#160; &amp;#160;while (! done) &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;{ &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; cout &amp;lt;&amp;lt; &amp;quot;\nВведите Д или Н&amp;quot; &amp;lt;&amp;lt; &amp;quot; и нажмите Enter для продолжения: &amp;quot;; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; cin &amp;gt;&amp;gt; letter; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; if ((letter == &#039;Д&#039;) II (letter == &#039;д&#039;)) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;done = 1; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;else if ((letter == &#039;Н&#039; ) II (letter == &#039;н&#039;)) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; done = 1; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; else cout &amp;lt;&amp;lt; &#039;\а&#039;; // Играть сигнал динамика для неверного символа &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; } &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Вы ввели букву &amp;quot; &amp;lt;&amp;lt; letter &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как видите, цикл while тоже поддерживает несколько операторов, сгруппированных внутри левой и правой фигурных скобок. В данном случае программа использует переменную done для управления циклом. Пока программа не завершится (т. е. пока пользователь не введет Д или Н), цикл продолжает выполняться. Когда пользователь вводит Д или Я, программа устанавливает переменную done в значение истина и цикл завершается. Как только ваши программы начнут работать с файлами, вы регулярно будете использовать цикл while. &lt;/p&gt;
						&lt;p&gt;Повторение цикла до выполнения заданного условия &lt;/p&gt;
						&lt;p&gt;По мере усложнения ваших программ им, возможно, понадобится выполнять группы связанных операторов, пока не реализуется заданное условие. Например, программа может вычислять суммы платежей для служащих компании. В этом случае цикл будет выполняться до тех пор, пока не обработаны данные для последнего служащего. Для повторения операторов до выполнения заданного условия программы как правило, будут использовать оператор while: &lt;/p&gt;
						&lt;p&gt;while (условие) &lt;br /&gt;&amp;#160; &amp;#160;оператор; &lt;/p&gt;
						&lt;p&gt;Сталкиваясь с оператором while, программа будет оценивать условие цикла. Если условие истинно, ваша программа выполняет операторы цикла while. После выполнения последнего оператора цикла программа снова проводит проверку условия. Если условие истинно, программа повторит этот процесс, выполнит операторы, а затем повторит проверку условия. Если условие оценивается как ложь, программа продолжит свое выполнение с первого оператора, который следует за оператором while. &lt;br /&gt;ВЫПОЛНЕНИЕ ОПЕРАТОРОВ ПО КРАЙНЕЙ МЕРЕ ОДИН РАЗ &lt;/p&gt;
						&lt;p&gt;Как вы уже знаете, цикл C++ while позволяет вашим программам повторять набор операторов, пока данное условие удовлетворяется. Когда программа встречает оператор while, она сначала оценивает заданное условие. Если условие истинно, программа входит в цикл. Если условие ложно, операторы цикла while никогда не выполняются. В зависимости от назначения ваших программ, возможны ситуации, когда некоторый набор операторов должен выполняться по крайней мере один раз, а затем выполнение, основываясь на некотором условии, может повторяться. В подобном случае ваши программы могут использовать цикл do while: &lt;/p&gt;
						&lt;p&gt;do &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;операторы; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;while (условие_истинно); &lt;/p&gt;
						&lt;p&gt;Если программа встречает цикл do while, она входит в цикл и запускает выполнение операторов, содержащихся в цикле. Затем программа оценивает заданное условие. Если условие истинно, программа возвращается к началу цикла: &lt;/p&gt;
						&lt;p&gt;do &amp;lt;---------------------------------------- &lt;/p&gt;
						&lt;p&gt;{&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;| &lt;br /&gt;&amp;#160; &amp;#160;операторы;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;| &lt;br /&gt;}&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;| &lt;/p&gt;
						&lt;p&gt;while (условие_истинно); ---------- &lt;/p&gt;
						&lt;p&gt;Если условие ложно, программа не повторяет инструкции цикла, продолжая вместо этого выполнение с первого оператора, следующего за циклом. Обычно цикл do while используется для отображения пунктов меню и затем обработки выбора пользователя. Вам требуется, чтобы программа отобразила меню по крайней мере один раз. Если пользователь выбирает какой-либо пункт меню, кроме Quit, программа выполнит пункт, а затем отобразит меню снова (повторяя оператор цикла). Если пользователь выбирает Quit, цикл завершится и программа продолжит свое выполнение с первого оператора после цикла. &lt;/p&gt;
						&lt;p&gt;Повторение операторов, если условие истинно &lt;/p&gt;
						&lt;p&gt;В зависимости от назначения программы, возможно, потребуется выполнить набор операторов, по крайней мере, один раз, и повторить операторы, если заданное условие истинно. В таких случаях ваши программы используют оператор C++ do while: &lt;/p&gt;
						&lt;p&gt;do { &lt;br /&gt;&amp;#160; &amp;#160;оператор; &lt;br /&gt;} while (условие); &lt;/p&gt;
						&lt;p&gt;Когда программа встречает оператор do while, она сразу же выполняет операторы, содержащиеся в цикле. Затем программа исследует условие цикла. Если условие истинно, программа повторяет операторы цикла и процесс продолжается. Если условие цикла становится ложным, программа продолжает свое выполнение с первого оператора, следующего за оператором do while. &lt;br /&gt;ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ &lt;/p&gt;
						&lt;p&gt;Итеративная обработка представляет собой способность программы повторять один или несколько операторов. В этом уроке были описаны итеративные (или циклические) операторы C++. Как вы уже знаете, оператор for позволяет вашим программам повторять один или несколько операторов заданное число раз. Используя оператор while, программы повторяют операторы до тех пор, пока указанное условие истинно. Наконец, с помощью оператора do while программы выполняют операторы, по крайней мере один раз, повторяя их, если заданное условие истинно. Из урока 9 вы узнаете, как разделить программы на небольшие легко управляемые части, называемые функциями. Однако до изучения урока 9 убедитесь, что освоили следующее: &lt;br /&gt;Оператор C++ for позволяет вашим программам повторять один или более операторов заданное число раз. &lt;br /&gt;Оператор for состоит из четырех частей: инициализации, проверяемого условия, операторов, которые повторяются, и приращения. &lt;br /&gt;Оператор for не обязывает вас увеличивать управляющую переменную цикла именно на 1 или использовать именно приращение. &lt;br /&gt;Цикл C++ while позволяет вашим программам повторять операторы, пока указанное условие истинно. &lt;br /&gt;Программы часто используют цикл while для чтения содержимого файла, пока не встретится конец файла. &lt;br /&gt;Оператор C++ do while позволяет вашим программам выполнять один или несколько операторов, по крайней мере один раз, и воз можно, повторять их на основании заданного условия. &lt;br /&gt;Программы часто используют операторы do while для работы с меню &lt;br /&gt;Если проверяемые условия в циклах, while или do while становятся ложью, программа продолжает свое выполнение с первого оператора, следующего за циклом.&lt;/span&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 11:45:45 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=14#p14</guid>
		</item>
		<item>
			<title>Урок 7. Программа принимает решение</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=13#p13</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: teal&quot;&gt;Как вы уже знаете, программа представляет собой последовательность инструкций, выполняемых компьютером для реализации определенных задач. Все созданные вами до сих пор простые программы на C++ выполняли операторы по порядку, начиная с первого до конца программы. По мере усложнения программ вам потребуется, чтобы выполнялся один набор операторов, если определенное условие соблюдается, и другой набор, если условие не соблюдается. Другими словами, вам потребуется, чтобы ваши программы приняли решение и соответственно отреагировали. В этом уроке описывается оператор C++ if, который будет использоваться вашей программой для принятия подобных решений. К концу данного урока вы освоите следующие основные концепции: &lt;br /&gt;Программы на C++ используют операции сравнения, чтобы определить, равны ли два значения или одно значение больше или меньше другого. &lt;br /&gt;Для принятия решений используется оператор C++ if. &lt;br /&gt;Операторы C++ могут быть простыми (одна операция) или составными (несколько операций, сгруппированных внутри правой и левой фигурных скобок {}). &lt;br /&gt;Ваши программы используют оператор C++ if-else для выполнения одного набора операторов, если определенное условие соблюдается, и другого набора операторов, если условие не соблюдается. &lt;br /&gt;Комбинируя несколько операторов if-else, программы могут проверять несколько условий. &lt;br /&gt;Используя логические операторы C++ И и ИЛИ, ваши программы могут проверить несколько условий, например: Есть ли у пользователя собака И долматин ли это ? &lt;/p&gt;
						&lt;p&gt;Программы, которые принимают решения, выполняют условную обработку. Другими словами, на основании результата одного или нескольких Условий программа будет выполнять определенные операторы. Экспериментируйте с программами данного урока; ваш набор инструментальных средств C++ уже достаточно обширен для создания полезных программ. &lt;/p&gt;
						&lt;p&gt;СРАВНЕНИЕ ДВУХ ЗНАЧЕНИЙ &lt;/p&gt;
						&lt;p&gt;Когда ваши программы принимают решение, они обычно выполняют некоторый вид проверки. Например, одна программа может проверять, равны ли тестовые очки студента 100, а вторая программа — составляет ли стоимость покупки больше $50.00. Для выполнения подобных проверок ваши программы будут использовать операции сравнения C++, перечисленные в табл. 7.1. Операции сравнения позволяют проверять, каким образом одно значение соотносится с другим. Другими словами, используя операции сравнения, программы могут проверить, больше одно значение, меньше или равно другому. &lt;/p&gt;
						&lt;p&gt;Таблица 7.1. Операции сравнения C++. &lt;br /&gt;Операция 	&lt;br /&gt;Проверка 	&lt;br /&gt;Пример &lt;/p&gt;
						&lt;p&gt;== 	&lt;br /&gt;Если два значения равны 	&lt;br /&gt;(score == 100) &lt;/p&gt;
						&lt;p&gt;!= 	&lt;br /&gt;Если два значения не равны 	&lt;br /&gt;(old != new) &lt;/p&gt;
						&lt;p&gt;&amp;gt; 	&lt;br /&gt;Если первое значение больше второго 	&lt;br /&gt;(cost &amp;gt; 50.00) &lt;/p&gt;
						&lt;p&gt;&amp;lt; 	&lt;br /&gt;Если первое значение меньше второго 	&lt;br /&gt;(salary &amp;lt; 20000.00) &lt;/p&gt;
						&lt;p&gt;&amp;gt;= 	&lt;br /&gt;Если первое значение больше или равно второму 	&lt;br /&gt;(stock_price &amp;gt;= 30.0) &lt;/p&gt;
						&lt;p&gt;&amp;lt;= 	&lt;br /&gt;Если первое значение меньше или равно второму 	&lt;br /&gt;(age &amp;lt;= 21) &lt;/p&gt;
						&lt;p&gt;Если ваша программа использует операции сравнения для сравнения двух значений, результат сравнения может быть истиной или ложью. Другими словами, два значения или равны (истина), или нет (ложь). Каждый из операторов if, представленных в этой книге, использует операции сравнения, перечисленные в табл. 7.1. &lt;br /&gt;ЗНАКОМСТВО С ОПЕРАТОРОМ if &lt;/p&gt;
						&lt;p&gt;Оператор C++ if позволяет вашим программам осуществлять проверку и затем на основании этой проверки выполнять операторы. Формат оператора if следующий: &lt;/p&gt;
						&lt;p&gt;if (условие_выполняется) оператор; &lt;/p&gt;
						&lt;p&gt;Обычно оператор if выполняет проверку, используя операцию сравнения C++. Если результат проверки является истиной, if выполняет оператор, который следует за ним. Следующая программа FIRST_IF.CPP использует оператор if для сравнения значения переменной test_score со значением 90. Если набранные тестовые очки больше или равны 90, программа выведет сообщение пользователю, что он получил А. В противном случае, если значение меньше 90, программа просто завершается: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int test_score = 95; &lt;br /&gt;&amp;#160; &amp;#160;if (test_score &amp;gt;= 90) cout &amp;lt;&amp;lt; &amp;quot;Поздравляем, вы получили А!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как видите, для выполнения проверки программа использует операцию сравнения C++ &amp;quot;больше или равно&amp;quot; (&amp;gt;=). Если результат сравнения значений является истиной, программа выполняет оператор, который следует за if , в данном случае вывод сообщения с использованием cout. Если результат сравнения не является истинным, программа не выводит сообщение. Экспериментируйте с этой программой, изменяя проверочные очки (в том числе и меньше 90), и обратите внимание на работу оператора if. &lt;br /&gt;Представление о простых и составных операторах &lt;/p&gt;
						&lt;p&gt;При использовании оператора if для условной обработки в некоторых случаях, если условие истинно, программе потребуется выполнить один оператор, а в других случаях несколько операторов. Когда программа выполняет только один оператор, следующий за if, такой оператор называется простым оператором: &lt;/p&gt;
						&lt;p&gt;if (test_score &amp;gt;= 90) cout &amp;lt;&amp;lt; &amp;quot;Поздравляем, вы получили A!&amp;quot; &amp;lt;&amp;lt; endl; //-------&amp;gt; Простой оператор &lt;/p&gt;
						&lt;p&gt;Если программе необходимо выполнить несколько инструкций, когда результат сравнения — истина, операторы должны быть сгруппированы внутри левой и правой фигурных скобок {}. Операторы, которые находятся внутри фигурных скобок, образуют составной оператор, как показано ниже: &lt;/p&gt;
						&lt;p&gt;if (test_score &amp;gt;= 90) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Поздравляем, вы получили A!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Ваши тестовые очки были &amp;quot; &amp;lt;&amp;lt; test_Score &amp;lt;&amp;lt; endl; &lt;br /&gt;} //-----------------&amp;gt;Составной оператор &lt;/p&gt;
						&lt;p&gt;Вам необязательно запоминать термины &amp;quot;простой&amp;quot; и &amp;quot;составной&amp;quot; операторы, но вы должны знать, что следует группировать связанные операторы внутри левой и правой фигурных скобок. Следующая программа COMPOUND.CPP представляет собой измененный вариант предыдущей и выводит два сообщения, если тестовые очки больше или равны 90: &lt;br /&gt;&lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int test_score = 95; &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;if (test_score &amp;gt;= 90) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Поздравляем, вы получили А!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Ваши тестовые очки были &amp;quot; &amp;lt;&amp;lt; test_score &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;} &lt;/p&gt;
						&lt;p&gt;Использование простых и составных операторов &lt;/p&gt;
						&lt;p&gt;При выполнении условной обработки в некоторых случаях программе необходимо выполнить только один оператор (простой оператор), если условие истинно. Однако в других случаях программа должна будет выполнить несколько операторов (составной оператор). Если в зависимости от результата определенного условия вашей программе нужно выполнить два или несколько связанных операторов, вы должны сгруппировать операторы внутри левой и правой фигурных скобок, как показано ниже: &lt;/p&gt;
						&lt;p&gt;if (age &amp;gt;= 21) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Все на выборы!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Это то, что вам надо!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;br /&gt;ОПЕРАТОР else &lt;/p&gt;
						&lt;p&gt;Две предыдущие программы использовали оператор if, чтобы определить, больше тестовые очки или равны 90. Если условие было истинным, программы выводили сообщение на экран. В противном случае, т. е. если тестовые очки были меньше 90, программы не выводили сообщение, они просто завершались. В большинстве случаев вашим программам потребуется указать один набор операторов, выполняющийся, если условие истинно, и второй набор, выполняющийся, если условие ложно. Для указания операторов, которые должны выполняться, когда условие ложно, ваши программы должны использовать оператор else. Ниже приведен формат оператора else: &lt;/p&gt;
						&lt;p&gt;if (условие_истинно) &lt;br /&gt;&amp;#160; &amp;#160;оператор; &lt;br /&gt;else &lt;br /&gt;&amp;#160; &amp;#160;оператор; &lt;/p&gt;
						&lt;p&gt;Следующая программа IF_ELSE.CPP использует оператор if, чтобы проверить, больше тестовые очки или равны 90. Если условие истинно, программа выводит поздравление. Если условие ложно, программа сообщает, что студент должен работать усерднее: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;int test_score =95; &lt;br /&gt;if (test_score &amp;gt;= 90) &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Поздравляю, вы получили А!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;else &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;В следующий раз вы должны&amp;quot; &amp;lt;&amp;lt; &amp;quot; работать усерднее!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;br /&gt;ПРИМЕНЕНИЕ СОСТАВНЫХ ОПЕРАТОРОВ ДЛЯ else &lt;/p&gt;
						&lt;p&gt;Как вы уже знаете, составной оператор представляет собой группу связанных операторов, заключенных между левой и правой фигурными скобками. Когда программа использует else для указания операторов, выполняющихся, если условие ложно, то для указания нескольких операторов можно использовать составной оператор. Следующая программа CMP_ELSE.CPP использует составные операторы как для if, так и для else: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int test_score = 65; &lt;br /&gt;&amp;#160; &amp;#160;if (test_score &amp;gt;= 90) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; { &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot; Поздравляю, вы получили A!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Ваши тестовые очки были &amp;quot; &amp;lt;&amp;lt; test_score &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; } &lt;br /&gt;&amp;#160; &amp;#160;else &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; { &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Вы должны работать усерднее!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Вы потеряли &amp;quot; &amp;lt;&amp;lt; 100 - test_score &amp;lt;&amp;lt; &amp;quot; очков &amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;} &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как и ранее, найдите время поэкспериментировать с этой программой, изменяя значения переменной test_score так, чтобы оно было меньше или больше 90. Следующая программа GETSCORE.CPP использует входной поток cin для ввода тестовых очков пользователем. Затем программа сравнивает тестовые очки со значением 90, выводя соответствующее сообщение: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int test_score; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Введите тестовые очки и нажмите Enter: &amp;quot;; &lt;br /&gt;&amp;#160; &amp;#160;cin &amp;gt;&amp;gt; test_score; &lt;br /&gt;&amp;#160; &amp;#160;if (test_score &amp;gt;= 90) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; { &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Поздравляем, вы получили А!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Ваши тестовые очки были &amp;quot; &amp;lt;&amp;lt; test_score &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; } &lt;br /&gt;&amp;#160; &amp;#160;else &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; { &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Вы должны работать усерднее!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Вы потеряли &amp;quot; &amp;lt;&amp;lt; 100 - test_score &amp;lt;&amp;lt; &amp;quot; очков &amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; } &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Откомпилируйте и запустите эту программу. Вы увидите, что при комбинации операций ввода с условной обработкой ваши программы станут более совершенными. &lt;/p&gt;
						&lt;p&gt;Представление об if-else &lt;/p&gt;
						&lt;p&gt;По мере усложнения ваши программы будут проверять разные условия и выполнять один набор операторов, если условие истинно, и другой набор, если условие ложно. Для выполнения такой условной обработки программы используют операторы if-else, как показано ниже: &lt;/p&gt;
						&lt;p&gt;if (условие_истинно) &lt;br /&gt;&amp;#160; &amp;#160;оператор; &lt;br /&gt;else &lt;br /&gt;&amp;#160; &amp;#160;оператор; &lt;/p&gt;
						&lt;p&gt;Когда программе требуется выполнить несколько операторов, если условие ложно или истинно, вы должны сгруппировать связанные операторы внутри левой и правой фигурных скобок {}: &lt;/p&gt;
						&lt;p&gt;if (условие_истинно) &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;{ &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; первый_оператор_для_истины; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; второй_оператор_для_истины; &lt;br /&gt;&amp;#160; &amp;#160;} &lt;br /&gt;else &lt;br /&gt;&amp;#160; &amp;#160;{ &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; первый_оператор_для_лжи; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; второй_оператор_для_лжи; &lt;br /&gt;&amp;#160; &amp;#160;} &lt;br /&gt;ИСПОЛЬЗОВАНИЕ ОТСТУПОВ ДЛЯ УЛУЧШЕНИЯ УДОБОЧИТАЕМОСТИ ВАШЕЙ ПРОГРАММЫ &lt;/p&gt;
						&lt;p&gt;Рассматривая программы, представленные в этой главе, вы увидите, что в них применяются отступы перед операторами, которые следуют за if, else или левой скобкой. Сдвигая подобным образом свои операторы на одну или две позиции, вы упрощаете процесс чтения ваших программ, выделяя связанные группы операторов, как показано ниже: &lt;/p&gt;
						&lt;p&gt;if (test_score &amp;gt;= 90) &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;{ &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; cout &amp;lt;&amp;lt; &amp;quot;Поздравляем, вы получили А!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; cout &amp;lt;&amp;lt; &amp;quot;Ваши тестовые очки были &amp;quot; &amp;lt;&amp;lt; test_score &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; } &lt;br /&gt;else &lt;br /&gt;&amp;#160; &amp;#160;{ &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; cout &amp;lt;&amp;lt; &amp;quot;Вы должны работать усерднее!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; cout &amp;lt;&amp;lt; &amp;quot;Вы потеряли &amp;quot; &amp;lt;&amp;lt; 100 - test_score &amp;lt;&amp;lt; &amp;quot; очков &amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;} &lt;/p&gt;
						&lt;p&gt;При создании программ используйте подобные отступы, чтобы программы были более удобочитаемыми. Отступы нужны не C++, а программистам, которые будут читать и пытаться понять ваш код. &lt;br /&gt;ПРОВЕРКА ДВУХ ИЛИ БОЛЕЕ УСЛОВИЙ &lt;/p&gt;
						&lt;p&gt;Как вы уже знаете, оператор if позволяет программам проверять определенные условия. По мере усложнения ваших программ возникает необходимость в проверке сразу нескольких условий. Например, программа могла бы проверить, будут ли тестовые очки больше или равны 90, и получит ли студент оценку А. Подобно этому, вы могли бы проверить, есть ли у пользователя собака и долматин ли это. Для выполнения таких проверок можно использовать логическую операцию C++ И (&amp;amp;&amp;amp;). Кроме того, если вы хотите проверить, есть ли у пользователя собака или кошка, вам следует использовать логическую операцию ИЛИ (||). Если программы для проверки нескольких условий используют логические операции И или ИЛИ, поместите каждое условие внутри круглых скобок, как показано ниже: &lt;/p&gt;
						&lt;p&gt;if ((user_owns_a_dog) &amp;amp;&amp;amp; (dog == dalmatian)) //-------------&amp;gt;Полное условие &lt;/p&gt;
						&lt;p&gt;Как видите, программа группирует каждое условие внутри своих собственных круглых скобок, которые затем заключаются во внешние круглые скобки. &lt;/p&gt;
						&lt;p&gt;if ((user_owns_a_dog) &amp;amp;&amp;amp; (dog == dalmatian)) &lt;/p&gt;
						&lt;p&gt;Когда ваша программа использует логическую операцию И (&amp;amp;&amp;amp;), то результат полного условия является истинным, только если все проверяемые условия истинны. Если какое-либо условие ложно, то полное условие становится ложным. Например, если у пользователя нет собаки, то предыдущее условие является ложным. Подобно этому, если собака пользователя не долматин, условие является ложным. Чтобы условие было истинным, у пользователя должна быть собака и она должна быть породы долматин. Следующий оператор использует логическую операцию ИЛИ (||), чтобы определить, есть ли у пользователя собака или кошка: &lt;/p&gt;
						&lt;p&gt;if ((user_owns_a_dog) || (user_owns_a_cat)) &lt;/p&gt;
						&lt;p&gt;При использовании логической операции ИЛИ полное условие будет истинным, если хотя бы одно условие является истинным. Например, если у пользователя есть собака, условие истинно. Если у пользователя есть кошка, условие истинно. Подобно этому, если у пользователя есть и собака, и кошка, условие истинно. Условие будет ложным только в том случае, если у пользователя нет ни собаки, ни кошки. &lt;br /&gt;В C++ истина представляется как ненулевое значение, а ложь как 0 &lt;/p&gt;
						&lt;p&gt;Достоинством C++ является то, что истина представляется как любое ненулевое значение, а ложь как 0. Предположим, ваша программа использует переменную с именем user_owns_a_dog, чтобы определить, есть ли у пользователя собака или нет. Если у пользователя нет собаки, вы можете присвоить этой переменной значение 0 (ложь), как показано ниже: &lt;/p&gt;
						&lt;p&gt;user_owns_a_dog = 0; &lt;/p&gt;
						&lt;p&gt;Если у пользователя есть собака, вы можете присвоить этой переменной любое ненулевое значение, например 1: &lt;/p&gt;
						&lt;p&gt;user_owns_a_dog = 1; &lt;/p&gt;
						&lt;p&gt;Затем ваши программы могут проверить эту переменную, используя оператор if, как показано ниже: &lt;/p&gt;
						&lt;p&gt;if (user_owns_a_dog) &lt;/p&gt;
						&lt;p&gt;Если переменная содержит ненулевое значение, условие оценивается как истина; в противном случае, если переменная содержит 0, условие ложно. Исходя из того, как C++ представляет истину и ложь, предыдущий оператор идентичен следующему: &lt;/p&gt;
						&lt;p&gt;if (user_owns_a_dog == 1) &lt;/p&gt;
						&lt;p&gt;Следующая программа DOG_CAT.CPP использует переменные user_owns_a_dog и user_owns_a_cat внутри оператора if, чтобы определить, какие животные есть у пользователя. &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int user_owns_a_dog = 1; &lt;br /&gt;&amp;#160; &amp;#160;int user_owns_a_cat = 0; &lt;br /&gt;&amp;#160; &amp;#160;if (user_owns_a_dog) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Собаки великолепны&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;if (user_owns_a_cat) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Кошки великолепны&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;if ((user_owns_a_dog) &amp;amp;&amp;amp; (user_owns_a_cat)) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Собаки и кошки могут ужиться&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;if {(user_owns_a_dog) II (user_owns_a_cat)) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Домашние животные великолепны!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Экспериментируйте с этой программой, присваивая обоим переменным значение 1 или 0, а затем одной 1, а другой 0 и наоборот. Как видите, проверить два условия очень легко, используя логические операции И и ИЛИ. &lt;br /&gt;Использование операции НЕ в C++ &lt;/p&gt;
						&lt;p&gt;Вы уже знаете, что, когда программа проверяет определенное условие, в ряде случаев она должна выполнить некоторые операторы, если это условие истинно. С другой стороны, вам может потребоваться, чтобы программа выполнила операторы, если условие является не истинным. Операция C++ НЕ — восклицательный знак (!) — позволяет вашим программам проверить, является ли условие не истинным. Например, следующий оператор проверяет, нет ли у пользователя собаки: &lt;/p&gt;
						&lt;p&gt;if (! user_owns_a_dog) &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;вы должны купить собаку&amp;quot; &amp;lt;&amp;lt; endl; &lt;/p&gt;
						&lt;p&gt;Операция НЕ превращает ложь в истину, а истину в ложь. Например, предположим, что у пользователя нет собаки. Следовательно, переменная user_owns_a_dog должна содержать значение 0. Если C++ оценивает условие с Помощью операции НЕ, он использует текущее значение переменной (0) и применяет операцию НЕ. Операция НЕ превращает значение 0 в 1 (истину). Таким образом, полное условие превращается в истину и выполняется соответствующий оператор. &lt;br /&gt;&lt;/p&gt;
						&lt;p&gt;Следующая программа USE_NOT.CPP иллюстрирует использование операции НЕ: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int user_owns_a_dog = 0; &lt;br /&gt;&amp;#160; &amp;#160;int user_owns_a_cat = 1; &lt;br /&gt;&amp;#160; &amp;#160;if (! user_owns_a_dog) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; cout &amp;lt;&amp;lt; &amp;quot;Вы должны купить собаку&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;if (! user_owns_a_cat) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; cout &amp;lt;&amp;lt; &amp;quot;Вы должны купить кошку&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как и раньше, экспериментируйте со значениями, присваиваемыми переменным user_owns_a_dog и user_owns_a_cat, и обратите внимание на поведение программы. По мере усложнения ваших программ вы будете постоянно использовать операцию НЕ. Например, ваша программа может продолжать повторять обработку, пока не встретит конец файла. &lt;/p&gt;
						&lt;p&gt;Использование логических операций C++ &lt;/p&gt;
						&lt;p&gt;Если вы указываете условия в программах, то иногда эти условия будут состоять из нескольких частей. Например, ваша программа может проверять, имеет ли служащий почасовую оплату и работал ли он более 40 часов на этой неделе. Если для истинности условия каждая из двух его частей должна быть истиной, вам следует использовать операцию C++ И (&amp;amp;&amp;amp;). При ,использовании операции И группируйте каждое условие внутри круглых скобок, а затем оба условия заключите в еще одну пару круглых скобок, как показано ниже: &lt;/p&gt;
						&lt;p&gt;if ((employee_pay == hourly) &amp;amp;&amp;amp; (employee_hours &amp;gt; 40)) &lt;br /&gt;&amp;#160; &amp;#160; оператор; &lt;/p&gt;
						&lt;p&gt;Когда необходимо, чтобы условие было истинным, если только одна из его частей истинна, вам следует использовать операцию C++ ИЛИ (|[). Например, следующее условие проверяет, есть ли у пользователя машина или мотоцикл: &lt;/p&gt;
						&lt;p&gt;if ((vehicle == car) II (vehicle == motorcycle)) &lt;br /&gt;&amp;#160; &amp;#160; оператор; &lt;/p&gt;
						&lt;p&gt;Как и ранее, программа группирует каждое условие внутри скобок. В ряде случаев вам потребуется, чтобы ваши программы выполняли оператор, если условие является не истинным. В таких случаях следует использовать операцию C++ НЕ (!). Операция НЕ превращает истину в ложь, а ложь в истину. &lt;/p&gt;
						&lt;p&gt;Операции C++ И, ИЛИ и НЕ представляют собой логические операции. &lt;br /&gt;ОБРАБОТКА НЕСКОЛЬКИХ УСЛОВИЙ &lt;/p&gt;
						&lt;p&gt;Программы, представленные в этом уроке, использовали if и else, чтобы указать один набор операторов, который программе следует выполнить, если условие истинно, и другой набор операторов, выполняемых, если условие ложно. Однако в некоторых случаях программам потребуется проверить несколько разных условий. Предположим, например, что вашей программе необходимо определить тестовые очки студента. Для этого программа должна проверить, больше тестовые очки или равны 90, 80, 70, 60 и т. д. Следующая программа SHOWGRAD.CPP использует для этого серию операторов if-else: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int test_score; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Введите тестовые очки и нажмите Enter: &amp;quot;; &lt;br /&gt;&amp;#160; &amp;#160;cin &amp;gt;&amp;gt; test_score; &lt;br /&gt;&amp;#160; &amp;#160;if (test_score &amp;gt;= 90) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Вы получили А!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;else if (test_score &amp;gt;= 80) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Вы получили В!&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160;else if (test_score &amp;gt;= 70) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Вы получили С&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;else if (test_score &amp;gt;= 60) &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; cout &amp;lt;&amp;lt; &amp;quot;Ваша оценка была D&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; else &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Вы провалили тест&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;При выполнении первого оператора if программа проверяет, больше тестовые очки или равны 90. Если это так, программа выводит сообщение пользователю, что он получил А. В противном случае, если тестовые очки не больше или равны 90, программа выполняет следующие else if, чтобы проверить, больше ли тестовые очки или равны 80. Программа повторяет данный процесс до тех пор, пока не определит правильную оценку. Как и ранее, экспериментируйте с этой программой, вводя разные тестовые очки. &lt;br /&gt;ИСПОЛЬЗОВАНИЕ ОПЕРАТОРА switch &lt;/p&gt;
						&lt;p&gt;Как вы уже знаете, комбинируя серии операторов if-else, программы могут проверять несколько условий. В предыдущей программе использовались операторы if-else, чтобы определить, находятся ли тестовые очки в данном диапазоне значений. В тех случаях, когда вашим программам необходимо осуществить проверку определенных значений, они могут использовать оператор C++ switch. &lt;/p&gt;
						&lt;p&gt;Если вы используете оператор switch, вы должны указать условие и затем один или несколько вариантов (case), которые программа попытается сопоставить с условием. Например, следующая программа SWITCH.CPP использует оператор switch для вывода сообщения, основываясь на текущей оценке студента: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;char grade = &#039;В&#039;; &lt;br /&gt;&amp;#160; &amp;#160;switch (grade) &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; { &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; case &#039;A&#039;: cout &amp;lt;&amp;lt; &amp;quot;Поздравляем, вы получили А&amp;quot; &amp;lt;&amp;lt; endl; break; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; case &#039;В&#039;: cout &amp;lt;&amp;lt; &amp;quot;Хорошо, у вас В&amp;quot; &amp;lt;&amp;lt; endl; break; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; case &#039;С&#039;: cout &amp;lt;&amp;lt; &amp;quot;У вас всего лишь С&amp;quot; &amp;lt;&amp;lt; endl; break; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; case &#039;D&#039;: cout &amp;lt;&amp;lt; &amp;quot;Плохо, у вас D&amp;quot; &amp;lt;&amp;lt; endl; break; &lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; default: cout &amp;lt;&amp;lt; &amp;quot;Ужасно! Учите лучше!&amp;quot; &amp;lt;&amp;lt; endl; break; &lt;br /&gt;&amp;#160; &amp;#160; } &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Оператор switch состоит из двух частей. Первая часть оператора switch представляет собой условие, которое появляется после ключевого слова switch. Вторая часть представляет собой возможные варианты соответствия. Когда программа встречает оператор switch, она сначала исследует условие, а затем пытается найти среди возможных вариантов тот, который соответствует условию. Если программа находит соответствие, выполняются указанные операторы. Например, в предыдущей программе выбор варианта &#039;В&#039; соответствует условию. Таким образом, программа выводит сообщение, что пользователь получил В. Найдите время для эксперимента с этой программой, изменяя оценку и наблюдая поведение программы. Если же ни один из указанных вариантов не соответствует условию, то выполняется вариант default. &lt;/p&gt;
						&lt;p&gt;Обратите внимание на использование оператора break в каждом варианте предыдущей программы. Оказывается, если C++ встречает вариант, соответствующий условию оператора switch, то он подразумевает, что все последующие варианты тоже соответствуют условию. Оператор break указывает C++ завершить текущий оператор switch и продолжить выполнение программы с первого оператора, следующего за оператором switch. Если вы удалите операторы break из предыдущей программы, то программа выведет не только требуемое сообщение, но и сообщение для всех последующих вариантов (потому что если один вариант является истинным, то и все последующие варианты в C++ рассматриваются как истинные). &lt;br /&gt;ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ &lt;/p&gt;
						&lt;p&gt;Из этого урока вы узнали, как использовать оператор C++ if для выполнения условной обработки, которая позволяет вашим программам принимать собственные решения. Как вы знаете, программы могут использовать оператор if, чтобы выполнить один набор операторов, когда условие истинно, и else для указания операторов, выполняющихся программой, если условие ложно. Из урока 8 вы узнаете, как использовать итеративные операторы C++ для повторения операторов указанное число раз или до тех пор, пока выполняется определенное условие. Например, вы можете повторять один и тот же оператор 100 раз, чтобы прибавить 100 студентам тестовые очки. Однако до изучения урока 8 убедитесь, что вы освоили следующие основные концепции: &lt;br /&gt;Операции сравнения C++ позволяют вашим программам проверять, равны ли два значения или нет, или одно значение больше или меньше другого. &lt;br /&gt;Оператор C++ if позволяет программе проверять условия и выполнять один или несколько операторов, если условие истинно. &lt;br /&gt;Оператор C++ else позволяет указать один или несколько операторов, которые выполняются, если условие, проверяемое с помощью оператора if, является ложным. &lt;br /&gt;C++ представляет истину, используя любое ненулевое значение, а ложь как 0. &lt;br /&gt;Логические операции C++ И (&amp;amp;&amp;amp;) и ИЛИ (||) позволяют вашим программам проверять несколько условий. &lt;br /&gt;Логическая операция НЕ (!) позволяет программам проверять условие на неистинность. &lt;br /&gt;Если в операторе if или else нужно выполнить несколько операторов, то такие операторы следует расположить внутри левой и правой фигурных скобок {}. &lt;br /&gt;Используйте отступы при записи операторов программы, чтобы помочь программистам, читающим ваш код, легко находить связанные операторы. &lt;br /&gt;Если вашей программе необходимо проверить, соответствует ли условие указанным значениям, следует использовать оператор switch. &lt;br /&gt;Когда программа встречает в операторе switch вариант (case), соответствующий условию, то все последующие варианты рассматриваются как удовлетворяющие условию. Используя оператор break, вы можете указать C++ прервать оператор switch и продолжить выполнение программы с первого оператора, который следует за switch.&lt;/span&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 11:44:43 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=13#p13</guid>
		</item>
		<item>
			<title>Урок 6. Чтение ввода с клавиатуры</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=12#p12</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: teal&quot;&gt;В этой книге ваши программы использовали выходной поток cout для отображения вывода на экран. Из данного урока вы узнаете, что C++ обеспечивает входной поток с именем cin, из которого программы могут читать информацию, введенную пользователем с клавиатуры. При использовании cin для чтения ввода с клавиатуры вы указываете одну или несколько переменных, которым cin будет присваивать входные значения. К тому времени, когда вы закончите этот урок, вы освоите следующие основные концепции: &lt;br /&gt;Вы можете использовать входной поток cin для присваивания определенным переменным символов и чисел, введенных с клавиатуры. &lt;br /&gt;При применении cin для чтения и присваивания переменной значения, введенного с клавиатуры, можно использовать содержимое переменной так, как если бы ваша программа использовала оператор присваивания для сохранения значения в переменной. &lt;br /&gt;Когда ваша программа использует cin для выполнения ввода с клавиатуры, остерегайтесь ошибок переполнения и ошибок, возникающих при вводе пользователем значения неверного типа. &lt;/p&gt;
						&lt;p&gt;Как вы уже знаете, если ваши программы используют выходной поток cout, они помещают данные в поток с помощью оператора вставки (&amp;lt;&amp;lt;). Подобным образом, если ваши программы применяют cin для чтения ввода с клавиатуры, они будут использовать оператор извлечения (&amp;gt;&amp;gt;). &lt;br /&gt;ПЕРВОЕ ЗНАКОМСТВО С cin &lt;/p&gt;
						&lt;p&gt;Точно так же как выходной поток cout позволяет вашим программам записать вывод на экран, входной поток cin позволяет программам читать ввод с клавиатуры. Когда программы используют cin для чтения ввода с клавиатуры, они должны указать переменную, в которую cin поместит данные. Следующая программа FIRSTCIN.CPP использует cin для чтения числа, введенного с клавиатуры. Программа присваивает введенное число переменной с именем number, а затем выводит значение переменной, используя выходной поток cout: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int number; II Число, читаемое с клавиатуры &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Введите ваше любимое число и нажмите Enter: &amp;quot;; &lt;br /&gt;&amp;#160; &amp;#160;cin &amp;gt;&amp;gt; number; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Ваше любимое число равно &amp;quot; &amp;lt;&amp;lt; number &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на вашем экране появится сообщение, предлагающее вам ввести ваше любимое число. Если вы введете число и нажмете ENTER, программа присвоит ввод переменной number. Затем, используя cout, программа выведет сообщение, отображающее ваше любимое число. &lt;/p&gt;
						&lt;p&gt;Следующая программа TWONBRS.CPP запрашивает у вас два числа. Программа присваивает числа переменным first и second. Затем программа выводит числа, используя cout: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int first, second; // Числа, введенные с клавиатуры &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Введите два числа и нажмите Enter: &amp;quot;; &lt;br /&gt;&amp;#160; &amp;#160;cin &amp;gt;&amp;gt; first &amp;gt;&amp;gt; second; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Были введены числа &amp;quot; &amp;lt;&amp;lt; first &amp;lt;&amp;lt; &amp;quot; и &amp;quot; &amp;lt;&amp;lt; second &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Обратите внимание на использование с cin двух операторов извлечения: &lt;/p&gt;
						&lt;p&gt;cin &amp;gt;&amp;gt; first &amp;gt;&amp;gt; second; &lt;/p&gt;
						&lt;p&gt;В этом случае cin присвоит первое введенное значение переменной first, a второе переменной second. Если для вашей программы требуется третье значение, вы можете использовать третий оператор извлечения, как показано ниже: &lt;/p&gt;
						&lt;p&gt;cin &amp;gt;&amp;gt; first &amp;gt;&amp;gt; second &amp;gt;&amp;gt; third; &lt;/p&gt;
						&lt;p&gt;Если вы применяете cin для чтения чисел с клавиатуры, cin использует левый пустой символ (пробел, табуляцию, возврат каретки), чтобы определить, где начинается одно значение, а где второе. Экспериментируйте с программой TWONBRS, разделяя числа табуляцией, пробелом и возвратом каретки. &lt;/p&gt;
						&lt;p&gt;Чтение ввода с клавиатуры с помощью cin &lt;/p&gt;
						&lt;p&gt;Для чтения ввода с клавиатуры программы могут использовать входной поток cin. При использовании cin вы должны указать переменную, в которую cin помещает данные. Затем используйте оператор извлечения (&amp;gt;&amp;gt;) для направления данных, как показано ниже: &lt;/p&gt;
						&lt;p&gt;cin &amp;gt;&amp;gt; some_variable; &lt;/p&gt;
						&lt;p&gt;Оператор извлечения называется так, потому что он извлекает (удаляет) данные из входного потока, присваивая значение указанной переменной. &lt;br /&gt;Следите за ошибками переполнения &lt;/p&gt;
						&lt;p&gt;Если ваши программы выполняют ввод с использованием cin, остерегайтесь возможных ошибок, возникающих при вводе пользователем неверного числа. Например, запустите программу FIRSTCIN, которую вы только что создали. Когда программа запросит вас ввести ваше любимое число, введите число 1000000 и нажмите ENTER. При этом программа не сможет отобразить число 1000000 в качестве введенного значения. Вместо этого возникнет ошибка переполнения, так как 1000000 превышает наибольшее значение, которое может хранить тип int. &lt;/p&gt;
						&lt;p&gt;Если вы внимательно рассмотрите программу FIRSTCIN. CPP, то обратите внимание, что cin присваивает введенное число переменной типа int. Как вы узнали из урока 4, переменные типа int могут хранить значения только в диапазоне от -32768 до 32767. Поскольку переменная типа int не может вместить значение 1000000, возникает ошибка. Запустите программу еще несколько раз, вводя отрицательные и положительные числа. Обратите внимание на ошибки, которые возникают, если вы выходите за допустимые пределы значений для той переменной, в которую cin помещает ввод. &lt;br /&gt;Следите за ошибками несовпадения типов &lt;/p&gt;
						&lt;p&gt;Как уже обсуждалось, программа FIRSTCIN.CPP предполагает, что пользователь вводит значение в диапазоне от -32768 до 32767. Если вместо ввода числа вне этого диапазона, пользователь вводит буквы или другие символы, то возникает другая ошибка — ошибка несовпадения типов. Другими словами, программа ожидала значение одного типа (int), а пользователь ввел значение другого типа (char). Для примера запустите программу второй раз. Когда программа запросит число, введите буквы АВС. Как и раньше, возникнет ошибка, поскольку программа ожидает целое число, а не буквы. &lt;/p&gt;
						&lt;p&gt;Выполните подобные эксперименты с программой TWONBRS, вводя бессмысленные значения или числа с плавающей точкой. Вы обнаружите, что программа наталкивается на те же ошибки. В последующих уроках вы научитесь выполнять операции ввода таким образом, чтобы уменьшить возможность подобных ошибок. А сейчас просто помните, что такие ошибки могут возникать. &lt;br /&gt;Чтение символьных данных &lt;/p&gt;
						&lt;p&gt;Обе предыдущие программы использовали cin для чтения целых чисел в переменные типа int. Следующая программа CIN_CHAR.CPP использует входной поток cin для чтения символов с клавиатуры. Как видите, программа читает символ в переменную типа char. &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;char letter; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Введите любой символ и нажмите Enter: &amp;quot;; &lt;br /&gt;&amp;#160; &amp;#160;cin &amp;gt;&amp;gt; letter; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Был введен символ &amp;quot; &amp;lt;&amp;lt; letter &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Откомпилируйте и поэкспериментируйте с данной программой, вводя более одного символа и наблюдая за реакцией программы. Вы обнаружите, что программа каждый раз работает только с одним символом. &lt;br /&gt;Чтение слов с клавиатуры &lt;/p&gt;
						&lt;p&gt;Во второй части данной книги вы научитесь сохранять слова или даже строки текста в одной переменной. Там же вы узнаете, как использовать входной поток cin для чтения слов и целых строк. А сейчас можете создать свою собственную простую программу, которая читает значения типа float или long. Например, следующая программа CIN_LONG.CPP использует cin для чтения значения типа long: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;long value; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Введите большое число и нажмите Enter: &amp;quot;; &lt;br /&gt;&amp;#160; &amp;#160;cin &amp;gt;&amp;gt; value; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Было введено число &amp;quot; &amp;lt;&amp;lt; value &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как и раньше, поэкспериментируйте с этой программой, вводя очень большие числа (и отрицательные тоже). &lt;/p&gt;
						&lt;p&gt;Перенаправление В/В и входной поток cin &lt;/p&gt;
						&lt;p&gt;Как вы уже знаете из урока 3, если ваши программы используют выходной поток cout, пользователь может перенаправить вывод программы с экрана дисплея в файл или на принтер. Как уже обсуждалось, выходной поток cout соответствует стандартному выводу операционной системы. Подобным образом входной поток cin соответствует стандартному вводу операционной системы. В результате, если ваша программа использует cin для выполнения операций ввода, пользователь может перенаправить ввод программы с клавиатуры на файл. В последующих уроках вы научитесь писать программы, которые читают и обрабатывают перенаправленный ввод. &lt;br /&gt;ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ &lt;/p&gt;
						&lt;p&gt;В этом уроке вы научились использовать входной поток cin для выполнения ввода с клавиатуры. Как вы уже знаете, если ваши программы используют cin для чтения ввода с клавиатуры, вам следует указать переменные, которым cin присваивает вводимые значения. В уроке 7 вы научитесь использовать оператор C++ if, чтобы позволить программам принимать собственные решения. Однако перед тем, как приступить к уроку 7, убедитесь, что вы освоили следующие основные концепции: &lt;br /&gt;C++ предоставляет входной поток cin, который ваши программы могут использовать для чтения ввода с клавиатуры. &lt;br /&gt;Если программы для чтения ввода используют cin, они должны указать одну или несколько переменных, в которые cin будет помещать данные. &lt;br /&gt;Чтобы направить ввод в переменную, вам следует использовать cin с оператором извлечения (&amp;gt;&amp;gt;). &lt;br /&gt;При применении cin для чтения нескольких значений, cin использует пустые символы (пробел, табуляция или возврат каретки), чтобы определить, где заканчивается одно значение и начинается другое. &lt;br /&gt;Если пользователь вводит неверные данные, могут возникать ошибки переполнения или несоответствия типов, а значения, присвоенные входным потоком cin переменным вашей программы, будут неверны.&lt;/span&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 11:43:25 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=12#p12</guid>
		</item>
		<item>
			<title>Урок 5. Выполнение простых операций</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=11#p11</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: teal&quot;&gt;Из урока 4 вы узнали, как объявлять и использовать переменные в своих программах. По мере усложнения программ вы будете выполнять арифметические операции, такие как сложение, вычитание, умножение и деление, над значениями, содержащимися в переменных. Данный урок описывает, как использовать арифметические операторы C++ для выполнения этих операций. К тому времени, когда вы закончите изучение данного урока, вы освоите следующие основные концепции: &lt;br /&gt;Для выполнения математических операций используйте в своих программах арифметические операторы C++. &lt;br /&gt;Чтобы гарантировать последовательность операций, C++ назначает приоритет каждому оператору. &lt;br /&gt;Используя круглые скобки в арифметических выражениях, вы можете управлять порядком, в котором C++ выполняет операции. &lt;br /&gt;Многие программы на C++ прибавляют или вычитают единицу, используя операции увеличения (++) или уменьшения (--). &lt;/p&gt;
						&lt;p&gt;После того как вы научитесь распознавать разные арифметические операторы C++, вы поймете, что выполнять математические операции очень легко! &lt;br /&gt;ОСНОВНЫЕ МАТЕМАТИЧЕСКИЕ ОПЕРАЦИИ &lt;/p&gt;
						&lt;p&gt;Независимо от назначения большинство ваших программ на C++ будут складывать, вычитать, умножать или делить. Вы узнаете, что ваши программы могут выполнять арифметические операции с константами (например, 3*5) или с переменными (например, payment — total). Таблица 5.1 перечисляет основные математические операции C++: &lt;/p&gt;
						&lt;p&gt;Таблица 5. 1. Основные математические операции С++ &lt;br /&gt;Операция 	&lt;br /&gt;Назначение 	&lt;br /&gt;Пример &lt;/p&gt;
						&lt;p&gt;+ 	&lt;br /&gt;Сложение 	&lt;br /&gt;total = cost + tax; &lt;/p&gt;
						&lt;p&gt;- 	&lt;br /&gt;Вычитание 	&lt;br /&gt;change = payment - total; &lt;/p&gt;
						&lt;p&gt;*. 	&lt;br /&gt;Умножение 	&lt;br /&gt;tax = cost * tax_rate; &lt;/p&gt;
						&lt;p&gt;/ 	&lt;br /&gt;Деление 	&lt;br /&gt;average = total / count; &lt;/p&gt;
						&lt;p&gt;Следующая программа SHOWMATH.CPP использует cout для вывода реультата нескольких простых арифметических операций: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;5 + 7 = &amp;quot; &amp;lt;&amp;lt; 5 + 7 &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;12 - 7 = &amp;quot; &amp;lt;&amp;lt; 12 - 7 &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;1.2345 * 2 = &amp;quot; &amp;lt;&amp;lt; 1.23.45 * 2 &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;15 / 3 = &amp;quot; &amp;lt;&amp;lt; 15 / 3 &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Посмотрите внимательно на операторы программы. Обратите внимание, что каждое выражение сначала появляется в кавычках, которые обеспечивают вывод символов (например, 5 + 7 =) на экран. Затем программа выводит результат операции и символ новой строки. Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; SHOWMATH &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;5 + 7 = 12 &lt;/p&gt;
						&lt;p&gt;12 - 7 = 5 &lt;/p&gt;
						&lt;p&gt;1.2345 * 2 = 2.469 &lt;/p&gt;
						&lt;p&gt;15 / 3 = 5 &lt;/p&gt;
						&lt;p&gt;В данном случае программа выполняла арифметические операции, используя только постоянные значения. Следующая программа MATHVARS.CPP выполняет арифметические операции, используя переменные: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;float cost =15.50; // Стоимость покупки &lt;br /&gt;&amp;#160; &amp;#160;float sales_tax = 0.06; // Налог на продажу 6% &lt;br /&gt;&amp;#160; &amp;#160;float amount_paid = 20.00; // Деньги покупателя &lt;br /&gt;&amp;#160; &amp;#160;float tax, change, total; // Налог на продажу, сдача покупателю и общий счет &lt;br /&gt;&amp;#160; &amp;#160;tax = cost * sales_tax; &lt;br /&gt;&amp;#160; &amp;#160;total = cost + tax; &lt;br /&gt;&amp;#160; &amp;#160;change = amount_paid - total; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Стоимость покупки: $&amp;quot; &amp;lt;&amp;lt; cost &amp;lt;&amp;lt; &amp;quot;\tHaлor: $&amp;quot; &amp;lt;&amp;lt; tax &amp;lt;&amp;lt; &amp;quot;\tОбщий счет: $&amp;quot; &amp;lt;&amp;lt; total &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Сдача покупателю: $&amp;quot; &amp;lt;&amp;lt; change &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;В данном случае программа использует только переменные с плавающей точкой. Как видите, программа присваивает значения переменным при объявлении. Далее программа выполняет арифметические операции над переменными для определения налога на продажу, общего счета и сдачи покупателю. Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; MATHVARS &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Стоимость покупки: $15.5 Налог: $0.93 Общий счет: $16.43 &lt;/p&gt;
						&lt;p&gt;Сдача покупателю: $3.57 &lt;br /&gt;УВЕЛИЧЕНИЕ ЗНАЧЕНИЯ ПЕРЕМЕННОЙ НА 1 &lt;/p&gt;
						&lt;p&gt;Обычной операцией, которую вы будете выполнять при программировании, является прибавление 1 к значению целой переменной. Например, предположим, что ваша программа использует переменную с именем count, чтобы сохранить данные о количестве напечатанных файлов. Каждый раз, когда программа печатает файл, 1 будет добавляться к текущему значению count. Используя оператор присваивания C++, ваша программа может увеличивать значение count, как показано ниже: &lt;/p&gt;
						&lt;p&gt;count = count + 1; &lt;/p&gt;
						&lt;p&gt;В данном случае программа сначала выбирает значение count, а затем добавляет к нему единицу. Далее программа записывает результат сложения обратно в переменную count. Следующая программа INTCOUNT.CPP использует оператор присваивания для увеличения переменной count (которая первоначально содержит значение 1000) на единицу (присваивая переменной результат 1001): &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int count = 1000; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;начальное значение count равно&amp;quot; &amp;lt;&amp;lt; count &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;count = count + 1; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;конечное значение count равно&amp;quot; &amp;lt;&amp;lt; count &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; INCCOUNT &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;начальное значение count равно 1000 &lt;/p&gt;
						&lt;p&gt;конечное значение count равно 1001 &lt;/p&gt;
						&lt;p&gt;Так как увеличение значения переменной представляет собой обычную операцию в программах, в C++ есть операция увеличения — двойной знак плюс (++). Операция увеличения обеспечивает быстрый способ прибавления единицы к значению переменной. Следующие операторы, например, увеличивают значение переменной count на 1: &lt;/p&gt;
						&lt;p&gt;count = count + 1; count++; &lt;/p&gt;
						&lt;p&gt;Следующая программа INC_OP.CPP использует операцию увеличения для наращивания значения переменной count на 1: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int count = 1000; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;начальное значение count равно &amp;quot; &amp;lt;&amp;lt; count &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;count++; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;конечное значение count равно &amp;quot; &amp;lt;&amp;lt; count &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Эта программа работает так же, как INCCOUNT.CPP, которая использовала оператор присваивания для увеличения значения переменной. Когда C++ встречает операцию увеличения, он сначала выбирает значение переменной, добавляет к этому значению единицу, а затем записывает результат обратно в переменную. &lt;br /&gt;Представление о префиксной (до) и постфиксной (после) операциях увеличения &lt;/p&gt;
						&lt;p&gt;При использовании операций увеличения ваши программы могут размещать оператор увеличения до или после переменной, как показано ниже: &lt;/p&gt;
						&lt;p&gt;++variable; variable++; &lt;/p&gt;
						&lt;p&gt;Так как первый оператор появляется до переменной, он называется префиксным оператором увеличения. Аналогично этому, второй оператор появляется после переменной и называется постфиксным оператором увеличения. Вам необходимо знать, что C++ трактует эти два оператора по-разному. Например, рассмотрим следующий оператор присваивания: &lt;/p&gt;
						&lt;p&gt;current_count = count++; &lt;/p&gt;
						&lt;p&gt;Этот оператор присваивания указывает C++ присвоить текущее значение count переменной current_count. В дополнение к этому постфиксный оператор увеличения заставляет C++ увеличить текущее значение count. Использование постфиксного оператора в этом случае делает показанный выше оператор эквивалентным следующим двум операторам: &lt;/p&gt;
						&lt;p&gt;current_count = count; &lt;/p&gt;
						&lt;p&gt;count = count + 1; &lt;/p&gt;
						&lt;p&gt;Теперь рассмотрим следующий оператор присваивания, который использует префиксный оператор увеличения: &lt;/p&gt;
						&lt;p&gt;current_count = ++count; &lt;/p&gt;
						&lt;p&gt;В этом случае оператор присваивания указывает C++ сначала увеличить значение count, а затем присвоить результат переменной current_count. Использование префиксного оператора увеличения делает показанный выше оператор эквивалентным следующим двум операторам: &lt;/p&gt;
						&lt;p&gt;count = count + 1; &lt;/p&gt;
						&lt;p&gt;current_count = count; &lt;/p&gt;
						&lt;p&gt;Важно освоить префиксную и постфиксную операции увеличения, так, как они будут встречаться вам в большинстве программ на C++. Следующая программа PRE_POST.CPP иллюстрирует использование префиксной и постфиксной операций увеличения: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int small_count = 0; &lt;br /&gt;&amp;#160; &amp;#160;int big_count = 1000; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;small_count равно &amp;quot; &amp;lt;&amp;lt; small_count &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;small_count++ производит &amp;quot; &amp;lt;&amp;lt; small_count++ &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;конечное значение small_count равно &amp;quot; &amp;lt;&amp;lt; sniall_count &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;big_count равно &amp;quot; &amp;lt;&amp;lt; big_count &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;++big_count производит &amp;quot; &amp;lt;&amp;lt; ++big_count &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;конечное значение big_count равно &amp;quot; &amp;lt;&amp;lt; big_count &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; PRE_POST &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;small_count равно 0 &lt;/p&gt;
						&lt;p&gt;small_count++ производит 0 &lt;/p&gt;
						&lt;p&gt;конечное значение small_count равно 1 &lt;/p&gt;
						&lt;p&gt;big_count равно 1000 &lt;/p&gt;
						&lt;p&gt;++big_count производит 1001 &lt;/p&gt;
						&lt;p&gt;конечное значение big_count равно 1001 &lt;/p&gt;
						&lt;p&gt;С переменной small_count программа использует постфиксную операцию увеличения. В результате программа выводит текущее значение переменной (0), а затем увеличивает его на 1. С переменной big_count программа использует префиксную операцию увеличения. В результате программа сначала увеличивает значение переменной (1000 + 1), а затем выводит результат (1001). Найдите время, чтобы отредактировать эту программу, и сначала измените постфиксную операцию на префиксную, а затем префиксную на постфиксную. Откомпилируйте и запустите программу, обращая внимание на то, как изменение операции изменяет вывод. &lt;br /&gt;С++ обеспечивает также операции уменьшения &lt;/p&gt;
						&lt;p&gt;Как вы уже знаете, двойной знак плюс (++) представляет собой оператор увеличения C++. Подобным образом двойной знак минус (--) соответствует оператору уменьшения C++, который уменьшает значение переменной на 1. Как и в случае с операцией увеличения, C++ поддерживает префиксный и постфиксный операторы уменьшения. Следующая программа DECCOUNT.CPP иллюстрирует использование оператора уменьшения C++: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int small_count = 0; &lt;br /&gt;&amp;#160; &amp;#160;int big_count = 1000; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;small_count равно &amp;quot; &amp;lt;&amp;lt; small_count &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;small_count-- производит &amp;quot; &amp;lt;&amp;lt; small_count-- &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;конечное значение small_count равно &amp;quot; “ small_count &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;big_count равно &amp;quot; &amp;lt;&amp;lt; big_count &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;--big_count производит &amp;quot; &amp;lt;&amp;lt; --big_count &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;конечное значение big_count равно &amp;quot; &amp;lt;&amp;lt; big_count &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; DECCOUNT &amp;lt;ENTER” &lt;/p&gt;
						&lt;p&gt;small_count равно 0 &lt;/p&gt;
						&lt;p&gt;small_count-- производит 0 &lt;/p&gt;
						&lt;p&gt;конечное значение small_count равно -1 &lt;/p&gt;
						&lt;p&gt;big_count равно 1000 &lt;/p&gt;
						&lt;p&gt;—big_count производит 999 &lt;/p&gt;
						&lt;p&gt;конечное значение big_count равно 999 &lt;/p&gt;
						&lt;p&gt;Как видите, префиксный и постфиксный операторы уменьшения C++ работают так же, как и соответствующие операторы увеличения, с той лишь разницей, что они уменьшают значение переменной на 1. &lt;/p&gt;
						&lt;p&gt;ДРУГИЕ ОПЕРАТОРЫ С++ &lt;/p&gt;
						&lt;p&gt;В этом уроке описаны обычные арифметические операции C++, а также операции увеличения и уменьшения. В программах на C++ вы можете встретить одну или несколько операций, перечисленных в табл. 5.2: &lt;/p&gt;
						&lt;p&gt;Таблица 5.2. Операции C++, которые вы можете встретить в программах. &lt;br /&gt;Операция 	&lt;br /&gt;Функция &lt;/p&gt;
						&lt;p&gt;% 	&lt;br /&gt;Взятие по модулю или остаток; возвращает остаток целочисленного деления &lt;br /&gt;~ 	Дополнение; инвертирует биты значений &lt;br /&gt;&amp;amp; 	Побитовое И &lt;br /&gt;| 	Побитовое включающее ИЛИ &lt;br /&gt;^ 	Побитовое исключающее ИЛИ &lt;br /&gt;&amp;lt;&amp;lt; 	Сдвиг влево; сдвигает биты значения влево на указанное количество разрядов &lt;br /&gt;&amp;gt;&amp;gt; 	Сдвиг вправо; сдвигает биты значения вправо на указанное количество разрядов &lt;/p&gt;
						&lt;p&gt;СТАРШИНСТВО ОПЕРАЦИЙ &lt;/p&gt;
						&lt;p&gt;При выполнении арифметических операций в C++ необходимо знать, что C++ выполняет операции в определенном порядке, основанном на старшинстве операций. Например, операция умножения выполняется до сложения. Чтобы лучше понять старшинство операций, рассмотрите следующие выражения: &lt;/p&gt;
						&lt;p&gt;result =5+2*3; &lt;/p&gt;
						&lt;p&gt;В зависимости от порядка, в котором C++ выполняет умножение и сложение, результат будет разным: &lt;/p&gt;
						&lt;p&gt;result =5+2*3; &lt;br /&gt;=7*3; &lt;br /&gt;= 21; &lt;br /&gt;result =5+2*3; &lt;br /&gt;=5+6; &lt;br /&gt;= 11; &lt;/p&gt;
						&lt;p&gt;Чтобы избежать путаницы, C++ присваивает каждой операции приоритет, который определяет порядок выполнения операций. Так как C++ выполняет операции в определенном порядке, то и ваши программы будут проводить арифметические вычисления соответствующим образом. &lt;/p&gt;
						&lt;p&gt;Таблица 5.3 перечисляет старшинство операций C++. Операции, находящиеся в верхней части, имеют более высокий приоритет. Операции внутри каждой части имеют одинаковый приоритет. Если вы рассмотрите таблицу, то увидите, что в C++ умножение имеет более высокий приоритет, чем сложение. Вы не знакомы со многими операциями, представленными в таблице. В настоящее время не думайте об этих операциях. К концу изучения этой книги вы сможете использовать (и понять) каждую из них! &lt;/p&gt;
						&lt;p&gt;Таблица 5.3. Старшинство операций в C++. &lt;br /&gt;Операция 	&lt;br /&gt;Имя 	&lt;br /&gt;Пример &lt;/p&gt;
						&lt;p&gt;:: Разрешение области видимости classname::classmember_name &lt;/p&gt;
						&lt;p&gt;:: 	&lt;br /&gt;Глобальное разрешение 	&lt;br /&gt;::variable_name &lt;/p&gt;
						&lt;p&gt;. 	&lt;br /&gt;Выбор элемента 	&lt;br /&gt;object.member_name &lt;/p&gt;
						&lt;p&gt;-&amp;gt; 	&lt;br /&gt;Выбор элемента 	&lt;br /&gt;pointer-&amp;gt;membername &lt;/p&gt;
						&lt;p&gt;[] 	&lt;br /&gt;Индексация 	&lt;br /&gt;pointer[element] &lt;/p&gt;
						&lt;p&gt;() 	&lt;br /&gt;Вызов функции 	&lt;br /&gt;expression(parameters) &lt;/p&gt;
						&lt;p&gt;() 	&lt;br /&gt;Построение значения 	&lt;br /&gt;type(parameters) &lt;/p&gt;
						&lt;p&gt;sizeof 	&lt;br /&gt;Размер объекта 	&lt;br /&gt;sizeof expression &lt;/p&gt;
						&lt;p&gt;sizeof 	&lt;br /&gt;Размер типа 	&lt;br /&gt;sizeof(type) &lt;/p&gt;
						&lt;p&gt;++ 	&lt;br /&gt;Приращение после 	&lt;br /&gt;variable++ &lt;/p&gt;
						&lt;p&gt;++ 	&lt;br /&gt;Приращение до 	&lt;br /&gt;++variable &lt;/p&gt;
						&lt;p&gt;-- 	&lt;br /&gt;Уменьшение после 	&lt;br /&gt;variable-- &lt;/p&gt;
						&lt;p&gt;-- 	&lt;br /&gt;Уменьшение до 	&lt;br /&gt;-- variable &lt;/p&gt;
						&lt;p&gt;&amp;amp; 	&lt;br /&gt;Адрес объекта 	&lt;br /&gt;&amp;amp;variable &lt;/p&gt;
						&lt;p&gt;* 	&lt;br /&gt;Разыменование 	&lt;br /&gt;*pointer &lt;/p&gt;
						&lt;p&gt;new 	&lt;br /&gt;Создание (размещение) 	&lt;br /&gt;new type &lt;/p&gt;
						&lt;p&gt;delete 	&lt;br /&gt;Уничтожение (освобождение) delete pointer &lt;/p&gt;
						&lt;p&gt;delete[] 	&lt;br /&gt;Уничтожение массива 	&lt;br /&gt;delete pointer &lt;/p&gt;
						&lt;p&gt;~ 	&lt;br /&gt;Дополнение 	&lt;br /&gt;~expression &lt;/p&gt;
						&lt;p&gt;! 	&lt;br /&gt;Логическое НЕ 	&lt;br /&gt;! expression &lt;/p&gt;
						&lt;p&gt;+ 	&lt;br /&gt;Унарный плюс 	&lt;br /&gt;+1 &lt;/p&gt;
						&lt;p&gt;- 	&lt;br /&gt;Унарный минус 	&lt;br /&gt;-1 &lt;/p&gt;
						&lt;p&gt;() 	&lt;br /&gt;Приведение 	&lt;br /&gt;(type) expression &lt;/p&gt;
						&lt;p&gt;.* 	&lt;br /&gt;Выбор элемента 	&lt;br /&gt;object.*pointer &lt;/p&gt;
						&lt;p&gt;-&amp;gt; 	&lt;br /&gt;Выбор элемента 	&lt;br /&gt;object-&amp;gt;*pointer &lt;/p&gt;
						&lt;p&gt;* 	&lt;br /&gt;Умножение 	&lt;br /&gt;expression * expression &lt;/p&gt;
						&lt;p&gt;/ 	&lt;br /&gt;Деление 	&lt;br /&gt;expression / expression &lt;/p&gt;
						&lt;p&gt;% 	&lt;br /&gt;Взятие по модулю 	&lt;br /&gt;expression % expression &lt;/p&gt;
						&lt;p&gt;+ 	&lt;br /&gt;Сложение (плюс) 	&lt;br /&gt;expression + expression &lt;/p&gt;
						&lt;p&gt;- 	&lt;br /&gt;Вычитание (минус) 	&lt;br /&gt;expression expression &lt;/p&gt;
						&lt;p&gt;Управление порядком, в котором C++ выполняет операции &lt;/p&gt;
						&lt;p&gt;Как вы уже знаете, C++ назначает операциям различный приоритет, который и управляет порядком выполнения операций. К сожалению, иногда порядок, в котором C++ выполняет арифметические операции, не соответствует порядку, в котором вам необходимо их выполнить. Например, предположим, что вашей программе необходимо сложить две стоимости и затем умножить результат на налоговую ставку: &lt;/p&gt;
						&lt;p&gt;cost = price_a + price_b * 1.06; &lt;/p&gt;
						&lt;p&gt;К сожалению, в этом случае C++ сначала выполнит умножение (price_b * 1.06), а затем прибавит значение price_a. &lt;/p&gt;
						&lt;p&gt;Если ваши программы должны выполнять арифметические операции в определенном порядке, вы можете заключить выражение в круглые скобки. Когда C++ оценивает выражение, он сначала всегда выполняет операции, сгруппированные в круглых скобках. Например, рассмотрим следующее выражение: &lt;/p&gt;
						&lt;p&gt;result =(2+3)* (3+4); &lt;/p&gt;
						&lt;p&gt;C++ вычисляет данное выражение в следующем порядке: &lt;/p&gt;
						&lt;p&gt;result = (2 + 3) * (3 + 4); &lt;br /&gt;= (5) * (3 + 4); &lt;br /&gt;= 5 * (7); &lt;br /&gt;=5*7; &lt;br /&gt;= 35; &lt;/p&gt;
						&lt;p&gt;Подобным образом группируя выражения внутри круглых скобок, вы можете управлять порядком, в котором C++ выполняет арифметические операции. Аналогично предыдущему примеру, ваша программа может сложить две стоимости внутри круглых скобок, как показано ниже: &lt;/p&gt;
						&lt;p&gt;cost = (price_a + price_b) * 1.06; &lt;br /&gt;СЛЕДИТЕ ЗА ОШИБКАМИ ПЕРЕПОЛНЕНИЯ ПРИ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЯХ &lt;/p&gt;
						&lt;p&gt;Из урока 4 вы узнали, что, если вы присваиваете переменной значение, которое не входит в диапазон значений для данного типа переменной, возникает ошибка переполнения. При выполнении арифметических операций необходимо помнить о возможности возникновения ошибок переполнения. Например, следующая программа MATHOVER.CPP умножает 200 на 300 и присваивает результат переменной типа int. Однако, поскольку результат умножения (60000) превышает наибольшее возможное значение для типа int (32767), возникает ошибка переполнения: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int result; &lt;br /&gt;&amp;#160; &amp;#160;result = 200 * 300; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;200 * 300 = &amp;quot; &amp;lt;&amp;lt; result &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; MATHOVER &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;200 * 300 = -5536 &lt;br /&gt;ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ &lt;/p&gt;
						&lt;p&gt;В данном уроке вы изучали обычные арифметические операции и операции приращения C++. Чтобы программы корректно выполняли арифметические вычисления, C++ назначает каждой операции приоритет, который управляет порядком выполнения операций. Из урока 6 вы узнаете, как использовать входной поток с именем cin для выполнения операций ввода с клавиатуры. До изучения урока 6 убедитесь, что вы освоили следующее: &lt;br /&gt;C++ использует операторы +,- , * и / для сложения, вычитания, умножения и деления. &lt;br /&gt;C++ обеспечивает префиксные (до) и постфиксные (после) операции увеличения, которые прибавляют единицу к значению переменной. &lt;br /&gt;C++ обеспечивает префиксную (до) и постфиксную (после) операции уменьшения, которые вычитают единицу из значения переменной. &lt;br /&gt;Префиксные (до) операции указывают C++ сначала увеличить (или уменьшить) значение переменной, а затем использовать это значение. &lt;br /&gt;Постфиксные (после) операции указывают C++ сначала использовать значение переменной, а затем увеличить (или уменьшить) его. &lt;br /&gt;Чтобы гарантировать, что выражения выполняются корректно, C++ назначает каждой операции приоритет, управляющий порядком выполнения операций. &lt;br /&gt;Если вам нужно управлять порядком выполнения арифметических операций, используйте круглые скобки. C++ всегда вычисляет сначала выражение в скобках.&lt;/span&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 11:42:03 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=11#p11</guid>
		</item>
		<item>
			<title>Урок 4. Программы хранят информацию в переменных</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=10#p10</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: teal&quot;&gt;Все программы, представленные в уроках 1—3, были очень простыми. Однако по мере того, как ваши программы начинают выполнять более многоплановые задачи, они должны хранить информацию во время выполнения. Например, программе, печатающей файл, нужно знать имя файла и, возможно, число копий, которые вы хотите напечатать. В процессе выполнения программы хранят такую информацию в памяти компьютера. Чтобы использовать определенные ячейки памяти, программы применяют переменные. Проще говоря, переменная представляет собой имя ячейки памяти, которая может хранить конкретное значение. В этом уроке описано, как создавать и использовать переменные в программах на C++. К концу данного урока вы освоите следующие основные концепции: &lt;br /&gt;Вы должны объявлять переменные, которые будете использовать в программе, сообщая компилятору имя и тип переменной. &lt;br /&gt;Тип переменной определяет тип значения (например, целое число или число с плавающей точкой), которое может хранить переменная, а также операции, которые ваши программы могут выполнять над переменной. &lt;br /&gt;Чтобы присвоить значения переменной, используйте оператор присваивания C++ (знак равно). &lt;br /&gt;Для вывода значения переменной на экран программы используют выходной поток cout. &lt;br /&gt;При объявлении переменных используйте имена, выражающие смысл переменных, чтобы ваши программы было легче читать и понимать. &lt;br /&gt;Используйте комментарии, описывающие работу программы. В этом случае, если другим программистам нужно изменить вашу программу, комментарии подробно опишут работу программы. &lt;/p&gt;
						&lt;p&gt;Когда вы присваиваете значение переменной, представьте себе переменную в виде ящика, в который можно поместить значение. Если вам позже потребуется использовать значение переменной, компьютер просто посмотрит значение, содержащееся в ящике. &lt;br /&gt;ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ В ПРОГРАММАХ &lt;/p&gt;
						&lt;p&gt;Ваши программы используют переменные для хранения информации. В зависимости от типа хранимого значения, например, целое число, буква алфавита или число с плавающей точкой, тип вашей переменной будет разным. &lt;/p&gt;
						&lt;p&gt;Тип переменной указывает тип значения, хранимого в переменной, а также набор операций (таких как сложение, умножение и другие), которые программа может выполнять над значением переменной. Большинство программ на C+ + будут использовать типы переменных, перечисленные в табл. 4.1. &lt;/p&gt;
						&lt;p&gt;Таблица 4.1. Типы переменных C++. &lt;br /&gt;Тип 	&lt;br /&gt;Хранимые значения &lt;/p&gt;
						&lt;p&gt;char 	&lt;br /&gt;Значения в диапазоне от -128 до 127. Обычно используется для хранения букв алфавита &lt;/p&gt;
						&lt;p&gt;int 	Значения в диапазоне от -32768 до 32767 &lt;br /&gt;unsigned 	Значения в диапазоне от 0 до 65535 &lt;br /&gt;long 	Значения в диапазоне от -2147483648 до 2147483647 &lt;br /&gt;float 	Значения в диапазоне от -3.4 x 10-38 до 3.4 x 1038 &lt;br /&gt;double 	Значения в диапазоне от 1.7х 10-308 до 1.7х 10308 &lt;/p&gt;
						&lt;p&gt;Прежде чем вы сможете использовать переменную, ваша программа должна ее объявить. Другими словами, вам следует представить переменную компилятору C++. Чтобы объявить переменную в программе, вам следует указать тип переменной и ее имя, по которому программа будет обращаться к данной переменной. Указывайте тип и имя переменной после открывающей фигурной скобки главной программы, как показано ниже: &lt;/p&gt;
						&lt;p&gt;тип_переменной имя_переменной; &lt;/p&gt;
						&lt;p&gt;Как правило, тип переменной будет одним из типов, перечисленных в табл. 4.1. Выбираемое вами имя переменной должно нести смысловую нагрузку, которая описывает (для всех, кто читает вашу программу) использование переменной. Например, ваша программа могла бы использовать переменные, такие как employee_name, employee_age и т. д. Обратите внимание на точку с запятой, которая следует за именем переменной. В C++ объявление переменной считается оператором. Поэтому вы должны поставить после объявления точку с запятой. &lt;/p&gt;
						&lt;p&gt;Фрагмент следующей программы объявляет три переменные, используя типы int, float и long: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int test_score; &lt;br /&gt;&amp;#160; &amp;#160;float salary; &lt;br /&gt;&amp;#160; &amp;#160;long distance_to_mars; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Важно обратить внимание, что данная программа ничего не выполняет, а только объявляет переменные. Как видите, объявление каждой переменной заканчивается точкой с запятой. Если вы объявляете несколько переменных одного и того же типа, можно разделять их имена запятой. Следующий оператор, например, объявляет три переменных с плавающей точкой: &lt;/p&gt;
						&lt;p&gt;float salary, income_tax, retirement_fund; &lt;/p&gt;
						&lt;p&gt;Изучение переменных &lt;/p&gt;
						&lt;p&gt;Переменная представляет собой имя ячейки в памяти компьютера. Во время выполнения ваши программы хранят информацию в переменных. При создании программ вы должны объявлять переменные, сообщая компилятору C++ имя и тип переменной. Например, следующий оператор объявляет переменную с именем age типа int: &lt;/p&gt;
						&lt;p&gt;int age; &lt;br /&gt;Смысловые имена переменных &lt;/p&gt;
						&lt;p&gt;Каждая создаваемая вами переменная должна иметь уникальное имя. Чтобы сделать свои программы более легкими для чтения и понимания, следует использовать смысловые имена переменных. Например, следующий оператор объявляет три переменных с именами х, y и z: &lt;/p&gt;
						&lt;p&gt;int х, у, z; &lt;/p&gt;
						&lt;p&gt;Предположим, что эти переменные хранят возраст, тестовые очки и оценку студента, тогда следующие имена переменных более понятны по смыслу для других программистов, читающих ваш исходный код: &lt;/p&gt;
						&lt;p&gt;int student_age, test_score, grade; &lt;/p&gt;
						&lt;p&gt;При выборе имен переменных можно использовать комбинацию букв, цифр и подчеркивания (_). Первый символ в имени переменной должен быть буквой или подчеркиванием. Нельзя начинать имя переменной с цифры. Кроме того, в C++ буквы нижнего и верхнего регистров считаются разными. Сначала для имен своих переменных используйте только буквы нижнего регистра. Как только вы освоитесь в C++, можете комбинировать буквы верхнего и нижнего регистров для получения смысловых имен, как показано ниже: &lt;/p&gt;
						&lt;p&gt;float MonthlySalary, IncomeTax; &lt;br /&gt;Слова, которые нельзя использовать для имен переменных &lt;/p&gt;
						&lt;p&gt;При создании имен переменных необходимо знать, что в C++ слова, перечисленные в табл. 4.2, резервируются в качестве ключевых слов, имеющих специальное значение для компилятора. Вы не имеете права использовать ключевые слова C++ в качестве имен переменных. &lt;/p&gt;
						&lt;p&gt;Таблица 4.2. Ключевые слова C++. &lt;br /&gt;asm 	&lt;br /&gt;auto 	&lt;br /&gt;break 	&lt;br /&gt;case 	&lt;br /&gt;catch 	&lt;br /&gt;char 	&lt;br /&gt;class 	&lt;br /&gt;const &lt;/p&gt;
						&lt;p&gt;default 	&lt;br /&gt;delete 	&lt;br /&gt;do 	&lt;br /&gt;double 	&lt;br /&gt;else 	&lt;br /&gt;enum 	&lt;br /&gt;extern 	&lt;br /&gt;float &lt;/p&gt;
						&lt;p&gt;friend 	&lt;br /&gt;goto 	&lt;br /&gt;if 	&lt;br /&gt;inline 	&lt;br /&gt;int 	&lt;br /&gt;long 	&lt;br /&gt;new 	&lt;br /&gt;operator &lt;/p&gt;
						&lt;p&gt;protected 	&lt;br /&gt;public 	&lt;br /&gt;register 	&lt;br /&gt;return 	&lt;br /&gt;short 	&lt;br /&gt;signed 	&lt;br /&gt;sizeof 	&lt;br /&gt;static &lt;/p&gt;
						&lt;p&gt;switch 	&lt;br /&gt;template 	&lt;br /&gt;this 	&lt;br /&gt;throw 	&lt;br /&gt;try 	&lt;br /&gt;typedef 	&lt;br /&gt;union 	&lt;br /&gt;unsigned &lt;/p&gt;
						&lt;p&gt;void 	&lt;br /&gt;volatile 	&lt;br /&gt;while 	&lt;br /&gt;continue 	&lt;br /&gt;for 	&lt;br /&gt;private 	&lt;br /&gt;struct 	&lt;br /&gt;virtual &lt;/p&gt;
						&lt;p&gt;Почему ваши программы используют переменные &lt;/p&gt;
						&lt;p&gt;По мере усложнения ваши программы могут выполнять самые разнообразные операции. Например, программа платежей обрабатывает информацию о каждом служащем. В такой программе вы могли бы использовать переменные с именами employee_name, employee_id, employee_salary и т. д. После запуска программа занесет информацию о первом служащем в эти переменные. После расчета оклада первого служащего программа повторит весь процесс для следующего служащего. Чтобы рассчитать оклад второго служащего, программа занесет информацию о втором служащем (его или ее имя, номер и оклад) в перечисленные выше переменные, а затем выполнит свою обработку. Другими словами, в процессе выполнения программа присваивает переменной разные значения, которые, в свою очередь, изменяют или варьируют значение переменной. &lt;br /&gt;ПРИСВАИВАНИЕ ЗНАЧЕНИЯ ПЕРЕМЕННОЙ &lt;/p&gt;
						&lt;p&gt;Как вы уже знаете, переменные хранят значения во время выполнения программы. После объявления переменной вы используете оператор присваивания C++ (знак равно), чтобы присвоить значение переменной. Следующие операторы присваивают значения нескольким разным переменным. Обратите внимание на использование точки с запятой в конце каждого оператора: &lt;/p&gt;
						&lt;p&gt;age = 32; &lt;br /&gt;salary = 25000.75; &lt;br /&gt;distance_to_the_moon = 238857; &lt;/p&gt;
						&lt;p&gt;Замечание: Значения, присваиваемые переменным, не должны содержать запятые (например, 25,000.75 и 238,857) *. Если вы включаете запятые, компилятор C++ будет генерировать и выводить сообщения о синтаксических ошибках. &lt;/p&gt;
						&lt;p&gt;Фрагмент следующей программы сначала объявляет переменные, а затем использует оператор присваивания, чтобы присвоить переменным значения: &lt;/p&gt;
						&lt;p&gt;* Американская запись чисел предполагает отделение каждых трех разрядов целой части числа запятой. - Прим. ред. &lt;br /&gt;&lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int age ; &lt;br /&gt;&amp;#160; &amp;#160;float salary; &lt;br /&gt;&amp;#160; &amp;#160;long distance_to_the_moon; &lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160;age = 32; &lt;br /&gt;&amp;#160; &amp;#160;salary = 25000.75; &lt;br /&gt;&amp;#160; &amp;#160;distance_to_the_moon = 238857; &lt;br /&gt;} &lt;br /&gt;Присваивание значения при объявлении &lt;/p&gt;
						&lt;p&gt;При объявлении переменной часто удобно присваивать ей начальное значение. Чтобы упростить такую процедуру, C++ позволяет присваивать значение во время объявления переменной, как показано ниже: &lt;/p&gt;
						&lt;p&gt;int age = 32; &lt;br /&gt;float salary = 25000.75; &lt;br /&gt;long distance_to_the_moon = 238857; &lt;/p&gt;
						&lt;p&gt;Многие программы, представленные в этой книге, присваивают значения переменным при объявлении. &lt;/p&gt;
						&lt;p&gt;Присваивание значений переменным &lt;/p&gt;
						&lt;p&gt;При выполнении программы переменные хранят информацию. Для записи значения в переменную программы должны использовать оператор присваивания C++ (знак равно). Следующая строка использует оператор присваивания для записи значения 4 в переменную lesson: &lt;/p&gt;
						&lt;p&gt;lesson = 4; &lt;/p&gt;
						&lt;p&gt;Для упрощения этого процесса в C++ можно также присвоить значение переменной при ее объявлении: &lt;/p&gt;
						&lt;p&gt;int lesson = 4; &lt;br /&gt;ИСПОЛЬЗОВАНИЕ ЗНАЧЕНИЯ ПЕРЕМЕННОЙ &lt;/p&gt;
						&lt;p&gt;После присвоения значения переменной ваши программы могут использовать это значение, просто обращаясь к ее имени. Следующая программа SHOWVARS.CPP присваивает значения трем переменным и затем выводит значение каждой переменной, используя cout: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main (void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int age = 32, &lt;br /&gt;&amp;#160; &amp;#160;float salary = 25000.75; &lt;br /&gt;&amp;#160; &amp;#160;long distance_to_the_moon = 238857; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Служащему &amp;quot; &amp;lt;&amp;lt; age &amp;lt;&amp;lt; &amp;quot; года (лет)&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Оклад служащего составляет $&amp;quot; &amp;lt;&amp;lt; salary &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;От земли до луны &amp;quot; &amp;lt;&amp;lt; distance_to_the_moon &amp;lt;&amp;lt; &amp;quot; миль&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Замечание: Последний оператор cout не помещается на одной строке. В этом случае программа просто переносит слова на следующую строку. Вы можете сделать такой перенос, поскольку C++ использует точку с запятой для указания конца оператора. Если вам необходимо перенести строку, постарайтесь не делать этого в середине символьной строки (внутри двойных кавычек), используйте дополнительный отступ для перенесенной части строки, как показано выше. &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; SHOWVARS &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Служащему 32 года (лет) &lt;/p&gt;
						&lt;p&gt;Оклад служащего составляет $25000.75 &lt;/p&gt;
						&lt;p&gt;От земли до луны 238857 миль &lt;/p&gt;
						&lt;p&gt;Как видите, для использования значения переменной вы просто обращаетесь к имени переменной в вашей программе. &lt;br /&gt;ПРЕВЫШЕНИЕ ДИАПАЗОНА ЗНАЧЕНИЙ ПЕРЕМЕННОЙ &lt;/p&gt;
						&lt;p&gt;Как вы уже знаете, тип переменной определяет набор значений, которые переменная может хранить. Например, переменная типа int может хранить значения в диапазоне от -32768 до 32767. Если вы присваиваете переменной значение, которое находится вне этого диапазона, возникает ошибка переполнения. Например, следующая программа OVERFLOW.CPP иллюстрирует, как превышение диапазона значений переменной приводит к ошибке. Как видите, программа присваивает значения, которые находятся вне диапазона для переменной каждого типа: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;int positive = 40000; &lt;br /&gt;&amp;#160; &amp;#160;long big_positive = 4000000000; &lt;br /&gt;&amp;#160; &amp;#160;char little_positive = 210; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;сейчас positive содержит &amp;quot; &amp;lt;&amp;lt; positive &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;сейчас big_positive содержит &amp;quot; &amp;lt;&amp;lt; big_positive &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;сейчас little_poaitive содержит &amp;quot; &amp;lt;&amp;lt; little_positive &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;сейчас positive содержит -25536 &lt;/p&gt;
						&lt;p&gt;сейчас big_positive содержит -294967296 &lt;/p&gt;
						&lt;p&gt;сейчас little_positive содержит Т &lt;/p&gt;
						&lt;p&gt;Как видите, программа присваивает переменным типа int, long и char значения, которые находятся вне диапазона хранения каждого типа, поэтому возникает ошибка переполнения. При работе с переменными вам необходимо помнить диапазон значений, которые может хранить переменная каждого типа. Ошибки переполнения плохо уловимы, и поэтому их трудно определить и исправить. Обратите внимание на значение, которое программа выводит для переменной little_positive. Поскольку это переменная типа char, выходной поток cout пытается вывести ее значение в символьном виде. В этом случае выведенное значение соответствует второй половине таблицы ASCII со значением 210. &lt;br /&gt;ПРЕДСТАВЛЕНИЕ О ТОЧНОСТИ &lt;/p&gt;
						&lt;p&gt;В предыдущем разделе вы узнали, что ошибки переполнения возникают при присваивании переменной значения, которое находится вне диапазона значений для переменной данного типа. Подобно этому вам также необходимо знать, что компьютеры не могут обеспечить неограниченную точность при хранении чисел. Например, при работе с числами с плавающей точкой (числа с десятичной точкой) компьютер не всегда может представить число с требуемой точностью. Поэтому возможны ошибки округления, которые тяжело обнаружить. &lt;/p&gt;
						&lt;p&gt;Следующая программа PRECISE. CPP присваивает значение чуть меньше 0.5 переменным типа float и double. К сожалению, поскольку компьютер обладает ограниченной способностью в представлении чисел, переменные реально содержат не присваиваемые им значения, а число 0.5: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;float f_not_half = 0.49999990; &lt;br /&gt;&amp;#160; &amp;#160;double d_not_half = 0.49999990; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Значение типа float 0.49999990 равно &amp;quot; &amp;lt;&amp;lt; f_not_half &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Значение типа double 0.49999990 равно &amp;quot; &amp;lt;&amp;lt; d_not_half &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;Значение типа float 0.49999990 равно 0.5 &lt;/p&gt;
						&lt;p&gt;Значение типа double 0.49999990 равно 0.5 &lt;/p&gt;
						&lt;p&gt;Как видите, значения, присваиваемые программой переменным, и значения, которые переменные содержат в действительности, не идентичны. Такие ошибки округления происходят потому, что компьютер должен представлять числа, используя фиксированное количество единиц и нулей. В большинстве случаев компьютер может точно представлять числа. Однако иногда, как показано в этой программе, компьютер представляет числа приближенно, а не точно. При программировании вам необходимо всегда помнить о точности. В зависимости от значений, с которыми работают ваши программы, могут возникать трудно обнаруживаемые ошибки округления. &lt;br /&gt;ИСПОЛЬЗОВАНИЕ КОММЕНТАРИЕВ ДЛЯ УЛУЧШЕНИЯ ЧТЕНИЯ ВАШИХ ПРОГРАММ &lt;/p&gt;
						&lt;p&gt;По мере усложнения ваших программ количество содержащихся в них операторов может сделать программы слишком трудными для понимания. Поскольку другим программистам может потребоваться понять и, возможно, изменить ваши программы, вам следует делать программы более удобочитаемыми. Способы улучшения удобочитаемости программ включают: &lt;br /&gt;Использование понятных по смыслу имен переменных, описывающих их применение. &lt;br /&gt;Использование подходящих отступов и выравнивания (см. урок 7). &lt;br /&gt;Использование пустых строк для разделения несвязанных операторов. &lt;br /&gt;Использование комментариев, которые объясняют работу программы. &lt;/p&gt;
						&lt;p&gt;При создании программ вы можете поместить в исходном файле замечания, которые объясняют работу программы. Такие замечания (называемые комментариями) не только помогают другим программистам понять вашу программу, но могут напомнить, почему программа содержит определенные операторы, если вы ее посмотрите через несколько месяцев. Для размещения комментария в своих программах на C++ просто поставьте два знака прямого слеша (//), как показано ниже: &lt;/p&gt;
						&lt;p&gt;// Это комментарий &lt;/p&gt;
						&lt;p&gt;Когда компилятор C++ встречает двойной слеш, он игнорирует весь оставшийся на этой строке текст. По крайней мере размещайте в начале каждой программы комментарии, которые указывают, кто написал программу, когда и почему: &lt;/p&gt;
						&lt;p&gt;// Программа: BUDGET.CPP &lt;br /&gt;// Программист: Kris Jamsa &lt;br /&gt;// дата создания: 1-10-96 &lt;br /&gt;// &lt;br /&gt;// Цель: Ежемесячная информация о бюджете. &lt;/p&gt;
						&lt;p&gt;При выполнении вашей программой различных процессов вам следует поместить до или после определенных операторов комментарии, которые объясняют их назначение. Например, рассмотрим следующий оператор присваивания: &lt;/p&gt;
						&lt;p&gt;distance_to_the_moon = 238857; // Расстояние в милях &lt;/p&gt;
						&lt;p&gt;Комментарий справа от оператора присваивания обеспечивает дополнительную информацию всем, кто читает программу. У начинающих программистов часто возникают проблемы, связанные с тем, что и когда комментировать. Как правило, вы включаете немного комментариев в ваши программы. Поэтому убедитесь, что они полезны. Следующие комментарии не дают дополнительной информации программистам, читающим код: &lt;/p&gt;
						&lt;p&gt;аде =32; // Присвоить 32 переменной age &lt;br /&gt;salary = 25000.75; // Присвоить 25000.75 переменной salary &lt;/p&gt;
						&lt;p&gt;Цель использования комментариев заключается в том, чтобы объяснить работу программы. &lt;/p&gt;
						&lt;p&gt;Добавление комментариев в ваши программы &lt;/p&gt;
						&lt;p&gt;При создании программ включайте комментарии, которые объясняют работу программы. Если другим программистам понадобится изменить вашу программу, они смогут воспользоваться комментариями, чтобы понять поведение программы. Обычно в программах на C++ комментарий начинается с двойного слеша: &lt;/p&gt;
						&lt;p&gt;// Это комментарий C++ &lt;/p&gt;
						&lt;p&gt;Когда компилятор C++ встречает двойной слеш, он игнорирует весь текст (оставшийся в текущей строке), который следует за слешем. Хорошие программы должны быть легки для чтения и понимания. Комментарии улучшают удобочитаемость вашей программы. &lt;/p&gt;
						&lt;p&gt;Замечание: В дополнение к использованию комментариев для улучшения удобочитаемости своей программы вам следует использовать пустые строки для разделения несвязанных операторов. Когда компилятор C++ встречает пустую строку, он просто пропускает ее. &lt;br /&gt;ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ &lt;/p&gt;
						&lt;p&gt;Из этого урока вы узнали, что программы во время выполнения хранят информацию в переменных. Говоря кратко, переменная представляет собой имя, которое ваша программа назначает ячейке памяти, в которой программа хранит информацию. Прежде чем ваша программа сможет использовать переменную, вы должны объявить ее тип и имя. Из урока 5 вы узнаете, как выполнять простые операции, например, сложение и вычитание переменных. Однако до изучения урока 5 убедитесь, что вы освоили следующие основные концепции: &lt;br /&gt;Для использования переменной в вашей программе вы должны объявить ее тип и имя. &lt;br /&gt;Имена переменных должны быть уникальны и понятны по смыслу другим программистам, читающим ваш исходный текст. Имя переменной должно соответствовать ее назначению. &lt;br /&gt;Имена переменных должны начинаться с буквы или символа подчеркивания. &lt;br /&gt;В C++ буквы верхнего и нижнего регистров считаются разными. &lt;br /&gt;Тип переменной определяет тип значения, которое переменная может содержать. Общими типами переменных являются char, int, float и long. &lt;br /&gt;Комментарии повышают удобочитаемость вашей программы, поясняя ее работу. В программах на C++ комментарии начинаются с двойного слеша (//).&lt;/span&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 11:40:54 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=10#p10</guid>
		</item>
		<item>
			<title>Урок З. Вывод сообщений на экран</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=9#p9</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: teal&quot;&gt;Все программы на C++, созданные вами в уроках 1 и 2, использовали выходной поток cout для вывода сообщений на экран. В этом уроке вы будете использовать cout для вывода символов, целых чисел, например 1001, и чисел с плавающей точкой, например 0.12345. К концу данного урока вы освоите следующие основные концепции: &lt;br /&gt;Для вывода символов и чисел на экран вы можете использовать выходной поток cout. &lt;br /&gt;В C++ можно использовать с cout специальные символы для вывода табуляции или новой строки и даже для воспроизведения звука на вашем компьютере. &lt;br /&gt;В C++ можно легко отображать числа в десятичном, восьмеричном (по основанию 8) или шестнадцатеричном (по основанию 16) формате. &lt;br /&gt;Используя в командной строке операционной системы операторы переназначения, вы можете перенаправить выходные сообщения своей программы, посылаемые в cout, с экрана в файл или на принтер. &lt;br /&gt;Используя выходной поток cerr, ваши программы могут посылать сообщения на стандартное устройство ошибок, избавляя пользователей от необходимости переназначения сообщений. &lt;br /&gt;Вы можете форматировать вывод вашей программы, используя модификатор setw внутри выходного потока. &lt;/p&gt;
						&lt;p&gt;Почти все создаваемые вами программы на C++ используют cout для вывода сообщений на экран. Из этого урока вы узнаете, как лучше использовать сом/. &lt;br /&gt;ИСПОЛЬЗОВАНИЕ cout ДЛЯ ВЫВОДА ЧИСЕЛ &lt;/p&gt;
						&lt;p&gt;До сих пор созданные вами программы использовали сом/ для вывода символьных строк (букв и чисел, взятых в кавычки). Теперь вы узнаете, что сом/ можно также использовать для вывода чисел. Следующая программа 1001.СРР выводит число 1001 на ваш экран: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; 1001; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Откомпилируйте и запустите эту программу. На вашем экране будет отображено число 1001, как показано ниже: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; 1001 &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;1001 &lt;/p&gt;
						&lt;p&gt;Далее отредактируйте программу и измените оператор cout , чтобы вывести число 2002, как показано ниже: &lt;/p&gt;
						&lt;p&gt;cout &amp;lt;&amp;lt; 2002; &lt;/p&gt;
						&lt;p&gt;Кроме отображения целых чисел (чисел без десятичной точки), сом/также позволяет вашим программам отображать числа с плавающей точкой, например 1.2345. Следующая программа FLOATING.CPP использует сом/для вывода числа 0.12345 на экран: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; 0.12345; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как и ранее, откомпилируйте и запустите эту программу. На вашем экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; FLOATING &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;0.12345 &lt;br /&gt;ВЫВОД НЕСКОЛЬКИХ ЗНАЧЕНИЙ ОДНОВРЕМЕННО &lt;/p&gt;
						&lt;p&gt;Как вы уже знаете, двойной знак &amp;quot;меньше&amp;quot; является операцией вставки (эта операция вставляет символы в выходной поток для отображения). С помощью cout вы можете использовать несколько операций вставки в пределах одного оператора. Например, следующая программа 1001ТОО.СРР использует эту операцию четыре раза для отображения числа 1001 на вашем экране: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;( &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; 1 &amp;lt;&amp;lt; 0 &amp;lt;&amp;lt; 0 &amp;lt;&amp;lt; 1; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующее: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; 1001TOO &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;1001 &lt;/p&gt;
						&lt;p&gt;Каждый раз, когда в C++ встречается операция вставки, число или символы просто добавляются к тем, что находятся в настоящее время в выходном потоке. Следующая программа SHOW1001.CPP с помощью cout выводит символьную строку и число: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Мое любимое число равно &amp;quot; &amp;lt;&amp;lt; 1001; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Обратите внимание, что пробел, следующий за словом равно (внутри кавычек), служит для отделения числа 1001 от этого слова. Без пробела число сливается со следующим словом (равно 1001). Подобным образом следующая программа 1001MID.CPP отображает число 1001 в середине символьной строки: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Число &amp;quot; &amp;lt;&amp;lt; 1001 &amp;lt;&amp;lt; &amp;quot; мне очень нравится&amp;quot;; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как и ранее, обратите внимание на расстановку пробелов до и после числа 1001. &lt;/p&gt;
						&lt;p&gt;Наконец, следующая программа MIXMATCH.CPP комбинирует строки, символы, целые числа и числа с плавающей точкой внутри одного и того же выходного потока: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;B &amp;quot; &amp;lt;&amp;lt; 20 &amp;lt;&amp;lt; &amp;quot; лет мой оклад был &amp;quot; &amp;lt;&amp;lt; 493.34 &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; MIXMATCH &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;В 20 лет мой оклад был 493.34 &lt;/p&gt;
						&lt;p&gt;&amp;#160; &lt;br /&gt;ИСПОЛЬЗОВАНИЕ СПЕЦИАЛЬНЫХ СИМВОЛОВ ВЫВОДА &lt;/p&gt;
						&lt;p&gt;Все программы, созданные вами до сих пор, отображали свой вывод в виде одной строки. Однако большинство программ, которые вы создадите в дальнейшем, будут отображать несколько строк вывода. Например, предположим, что вы пишете программу, которая будет выводить адреса на экран. Вероятно, вы захотите, чтобы адреса появлялись в виде нескольких строк. &lt;/p&gt;
						&lt;p&gt;Если необходимо переместить курсор в начало следующей строки, можно поместить символ новой строки (\n) в выходной поток. В C++ вам предоставляется два разных способа генерации новой строки. Во-первых, вы можете поместить символы \n внутри символьной строки. Например, следующая программа TWOLINES.CPP отображает свой вывод в виде двух строк, используя символ новой строки: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;br /&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Это строка один\nЭто строка два&amp;quot;; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, символ новой строки обеспечит вывод двух строк, как показано ниже: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; TWOLINES &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Это строка один &lt;/p&gt;
						&lt;p&gt;Это строка два &lt;/p&gt;
						&lt;p&gt;Если вы не выводите символьную строку, можете поместить символ новой строки внутри одинарных кавычек. Например, следующая программа NEWLINES.CPP выводит числа 1, 0, 0 и 1, каждое на своей собственной строке: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;br /&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; 1 &amp;lt;&amp;lt; &#039;\n&#039; &amp;lt;&amp;lt; 0 &amp;lt;&amp;lt; &#039;\n&#039; &amp;lt;&amp;lt; 0 &amp;lt;&amp;lt; &#039;\n&#039; &amp;lt;&amp;lt; 1; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;В дополнение к использованию символа новой строки для продвижения курсора в начало следующей строки ваши программы могут использовать символ endl (конец строки). Следующая программа ENDL.CPP иллюстрирует использование endl для продвижения курсора в начало новой строки: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;А теперь...&amp;quot; &amp;lt;&amp;lt; endl &lt;br /&gt;&amp;#160; &amp;#160; &amp;lt;&amp;lt; &amp;quot;Учимся программировать на языке C++&amp;quot;; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как и ранее, когда вы откомпилируете и запустите эту программу, на экране будет отображен вывод программы в виде двух строк: &lt;/p&gt;
						&lt;p&gt;C:\&amp;gt; ENDL &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;А теперь &lt;/p&gt;
						&lt;p&gt;Учимся программировать на языке C++ &lt;/p&gt;
						&lt;p&gt;Наконец, следующая программа ADDRESS.CPP выводит адрес издательства &amp;quot;Jamsa Press&amp;quot; в несколько строк: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Jamsa Press&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;2975 South Rainbow, Suite I&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Las Vegas, NV 89102&amp;quot; &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;br /&gt;Другие специальные символы &lt;/p&gt;
						&lt;p&gt;В дополнение к символу новой строки, позволяющему вашим программам продвигать курсор в начало новой строки, вы можете использовать специальные символы, перечисленные в табл. 3.1. &lt;br /&gt;Таблица 3.1. Специальные символы для использования с cout. &lt;/p&gt;
						&lt;p&gt;Символ 	&lt;br /&gt;Назначение &lt;/p&gt;
						&lt;p&gt;\а 	&lt;br /&gt;Сигнальный (или звонок) символ &lt;/p&gt;
						&lt;p&gt;\Ь 	&lt;br /&gt;Символ возврата &lt;/p&gt;
						&lt;p&gt;V 	&lt;br /&gt;Символ перевода страницы &lt;/p&gt;
						&lt;p&gt;\n 	&lt;br /&gt;Символ новой строки &lt;/p&gt;
						&lt;p&gt;\г 	&lt;br /&gt;Возврат каретки (не перевод строки) &lt;/p&gt;
						&lt;p&gt;\t 	&lt;br /&gt;Символ горизонтальной табуляции &lt;/p&gt;
						&lt;p&gt;\v 	&lt;br /&gt;Символ вертикальной табуляции &lt;/p&gt;
						&lt;p&gt;\\ 	&lt;br /&gt;Символ обратный слеш &lt;/p&gt;
						&lt;p&gt;\? 	&lt;br /&gt;Знак вопроса &lt;/p&gt;
						&lt;p&gt;\&#039; 	&lt;br /&gt;Одинарные кавычки &lt;/p&gt;
						&lt;p&gt;\&amp;quot; 	&lt;br /&gt;Двойные кавычки &lt;/p&gt;
						&lt;p&gt;\0 	&lt;br /&gt;Нулевой символ &lt;/p&gt;
						&lt;p&gt;\000 	&lt;br /&gt;Восьмеричное значение, например \007 &lt;/p&gt;
						&lt;p&gt;\xhhhh 	&lt;br /&gt;Шестнадцатеричное значение, например \xFFFF &lt;/p&gt;
						&lt;p&gt;Замечание: При использовании специальных символов, перечисленных в табл. 3.1, вам следует располагать их внутри одинарных кавычек, если вы используете данные символы сами по себе, например &#039;\n&#039;, или внутри двойных кавычек, если вы используете их внутри строки, например &amp;quot;Привem\nMup!&amp;quot;. &lt;/p&gt;
						&lt;p&gt;Следующая программа SPECIAL.CPP использует специальные символы сигнала (\а) и табуляции (\t) для выдачи звука на встроенный динамик компьютера и затем выводит слова Звонок Звонок Звонок, разделенные табуляцией: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;3вонок\a\tЗвонок\a\tЗвонок\a&amp;quot;; &lt;br /&gt;} &lt;br /&gt;ВЫВОД ВОСЬМЕРИЧНЫХ И ШЕСТНАДЦАТЕРИЧНЫХ ЗНАЧЕНИЙ &lt;/p&gt;
						&lt;p&gt;Программы, представленные в этом уроке до сих пор, выводили числа в десятичном виде. В зависимости от назначения ваших программ вам, возможно, потребуется выводить числа в восьмеричном или шестнадцатеричном виде. Для этого можно разместить модификаторы dec, oct и hex внутри выходного потока. Следующая программа ОСТНЕХ.СРР использует эти модификаторы для вывода значений в десятичном, восьмеричном и шестнадцатеричном виде: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Восьмеричный: &amp;quot; &amp;lt;&amp;lt; oct &amp;lt;&amp;lt; 10 &amp;lt;&amp;lt; &#039; &#039; &amp;lt;&amp;lt; 20 &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Шестнадцатеричный: &amp;quot; &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; 10 &amp;lt;&amp;lt; &#039; &#039; &amp;lt;&amp;lt; 20 &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Десятичный: &amp;quot; &amp;lt;&amp;lt; dec &amp;lt;&amp;lt; 10 &amp;lt;&amp;lt; &#039; &#039; &amp;lt;&amp;lt; 20 &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на экране появится следующий результат: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; OCTEX &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Восьмеричный: 12 24 &lt;/p&gt;
						&lt;p&gt;Шестнадцатеричный: а 14 &lt;/p&gt;
						&lt;p&gt;Десятичный: 10 20 &lt;/p&gt;
						&lt;p&gt;Примечание: Когда вы используете один из модификаторов для выбора восьмеричного, шестнадцатеричного или десятичного вывода, ваш выбор будет оставаться в силе до тех пор, пока программа не закончится или пока вы не используете другой модификатор. &lt;br /&gt;ВЫВОД НА СТАНДАРТНОЕ УСТРОЙСТВО ОШИБОК &lt;/p&gt;
						&lt;p&gt;Как вы уже знаете, используя cout, вы можете перенаправить вывод программы на устройство или файл с помощью операторов переназначения вывода операционной системы. Однако, если ваши программы сталкиваются с ошибкой, вы, вероятно, не захотите, чтобы сообщение об ошибке было перенаправлено с экрана. Перенаправление сообщений об ошибках в файл может скрыть от пользователя факт появления ошибки. &lt;/p&gt;
						&lt;p&gt;Если вашей программе нужно вывести сообщение об ошибке, вы должны использовать выходной поток cerr. C++ связывает cerr со стандартным устройством ошибок операционной системы. Следующая программа CERR.CPP использует выходной поток cerr для вывода на экран сообщения &amp;quot;Это сообщение появляется всегда &amp;quot;: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160; cerr &amp;lt;&amp;lt; &amp;quot;Это сообщение появляется всегда&amp;quot;; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Откомпилируйте и запустите эту программу. Далее попытайтесь перенаправить вывод программы в файл, используя оператор переназначения вывода: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; CERR &amp;gt; FILENAME.EXT &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Так как операционная система не позволит вашим программам перенаправить вывод, записываемый на стандартное устройство ошибок, сообщение появится на вашем экране. &lt;br /&gt;УПРАВЛЕНИЕ ШИРИНОЙ ВЫВОДА &lt;/p&gt;
						&lt;p&gt;Несколько предыдущих программ выводили числа на экран. Чтобы гарантировать правильное отображение этих чисел (с правильной расстановкой пробелов), программы включали пробелы до и после чисел. При выводе на cout или cerr ваши программы могут указать ширину вывода каждого числа, используя модификатор setw (установка ширины). С помощью setw программы указывают минимальное количество символов, занимаемое числом. Например, следующая программа SETW.CPP использует модификатор setw для выбора ширины 3, 4, 5 и 6 для числа 1001. Чтобы использовать модификатор setw, ваша программа должна включать заголовочный файл iomanip.h: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iomanip.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main (void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Мое любимое число равно&amp;quot; &amp;lt;&amp;lt; setw(3) &amp;lt;&amp;lt; 1001 &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Мое любимое число равно&amp;quot; &amp;lt;&amp;lt; setw(4) &amp;lt;&amp;lt; 1001 &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Мое любимое число равно&amp;quot; &amp;lt;&amp;lt; setw(5) &amp;lt;&amp;lt; 1001 &amp;lt;&amp;lt; endl; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Мое любимое число равно&amp;quot; &amp;lt;&amp;lt; setw(6) &amp;lt;&amp;lt; 1001 &amp;lt;&amp;lt; endl; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Когда вы откомпилируете и запустите эту программу, на экране появится следующий вывод: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; SETW &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Мое любимое число равно1001 &lt;/p&gt;
						&lt;p&gt;Мое любимое число равно1001 &lt;/p&gt;
						&lt;p&gt;Мое любимое число равно 1001 &lt;/p&gt;
						&lt;p&gt;Мое любимое число равно 1001 &lt;/p&gt;
						&lt;p&gt;Если вы указываете ширину с помощью setw, вы указываете минимальное количество символьных позиций, занимаемых числом. В предыдущей программе модификатор setw(3) указывал минимум три символа. Однако, так как число 1001 потребовало больше трех символов, cout использовал реально требуемое количество, которое в данном случае равнялось четырем. Следует отметить, что при использовании setw для выбора ширины, указанная ширина действительна для вывода только одного числа. Если вам необходимо указать ширину для нескольких чисел, вы должны использовать setw несколько раз. &lt;/p&gt;
						&lt;p&gt;Замечание: Предыдущая программа использует заголовочный файл IOMANIP.H. Вам, возможно, понадобится сейчас напечатать и исследовать содержимое этого файла. Как и в случае с заголовочным файлом IOSTREAM.H вы найдете данный файл внутри подкаталога INCLUDE, который находится в каталоге с файлами вашего компилятора. &lt;br /&gt;ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ &lt;/p&gt;
						&lt;p&gt;Из этого урока вы узнали несколько способов использования cout для отображения вывода на экран. Все программы, которые вы создадите в процессе изучения оставшейся части книги, будут использовать cout для отображения вывода. Из урока 4 вы узнаете, как использовать переменные внутри своих программ для хранения значений, которые могут изменяться в процессе выполнения программы. Однако до изучения урока 4 убедитесь, что вы освоили следующие основные концепции: &lt;br /&gt;Выходной поток cout позволяет вам выводить символы и числа. &lt;br /&gt;Используя специальные символы внутри выходного потока, ваша программа может указать новую строку, табуляцию и другие специальные возможности. &lt;br /&gt;Для продвижения курсора в начало следующей строки программы могут создать новую строку, используя символ \n или модификатор endl. &lt;br /&gt;Модификаторы dec, oct и hex позволяют программам выводить значения в десятичном, восьмеричном и шестнадцатеричном виде. &lt;br /&gt;Используя выходной поток cerr, программы могут записать сообщения в стандартное устройство ошибок операционной системы. &lt;br /&gt;С помощью модификатора setw ваши программы могут управлять шириной вывода чисел.&lt;/span&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 11:39:25 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=9#p9</guid>
		</item>
		<item>
			<title>Урок 2. Более внимательный взгляд на C++</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=8#p8</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: teal&quot;&gt;В уроке 1 вы создали несколько программ на C++. В то время ваша цель заключалась в том, чтобы понять процесс создания и компиляции программ на C++, а не в том, чтобы понять операторы C++. В данном уроке вы впервые более внимательно рассмотрите операторы, из которых состоит программа на C++. Вы увидите, что большинство программ на C++ придерживаются одного и того же формата: начинаются с одного или нескольких операторов # include, содержат строку void main(void), а затем набор операторов, сгруппированных между левой и правой фигурными скобками. Из этого урока вы поймете, что эти несколько запугивающие операторы реально очень просто освоить. К концу данного урока вы изучите следующие основные концепции: &lt;br /&gt;Оператор # include обеспечивает преимущества использования заголовочных файлов, которые содержат операторы C++ или программные определения. &lt;br /&gt;Основная часть программы на C++ начинается с оператора void main(void). &lt;br /&gt;Программы состоят из одной или нескольких функций, которые, в свою очередь, состоят из операторов, предназначенных для решения определенной задачи. &lt;br /&gt;При выводе на экран ваши программы будут широко использовать выходной поток cout. &lt;/p&gt;
						&lt;p&gt;Когда вы создаете программы на C++, вы реально работаете в терминах операторов, но не инструкций. Позже вы изучите оператор присваивания, который присваивает значения переменным, оператор if , который позволяет программе принимать решения и т. д. А пока мы просто будем ссылаться на содержимое вашей программы, как на операторы программы. &lt;br /&gt;ВЗГЛЯД НА ОПЕРАТОРЫ ПРОГРАММЫ &lt;/p&gt;
						&lt;p&gt;В уроке 1 вы создали на C++ программу FIRST.CPP, которая содержала следующие операторы: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Учимся программировать на языке С++!&amp;quot;; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;В данном случае программа содержит три оператора. Фигурные скобки (называемые группирующими символами) группируют связанные операторы: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main (void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Учимся программировать &amp;lt;&amp;lt; &amp;quot;на языке С++!&amp;quot;; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;В следующем разделе каждый из операторов программы описывается более подробно. &lt;br /&gt;ПРЕДСТАВЛЕНИЕ ОБ ОПЕРАТОРЕ #include &lt;/p&gt;
						&lt;p&gt;Каждая программа, представленная в уроке 1, начинается со следующего оператора # include: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;При создании программ на C++ вы получаете преимущества от использования операторов и определений, которые обеспечивает вам компилятор. При компиляции программы оператор # include заставляет компилятор включить содержимое заданного файла в начало вашей программы. В данном случае компилятор включит содержимое файла iostream.h. &lt;/p&gt;
						&lt;p&gt;Файлы с расширением h, которые вы включаете в начало (или заголовок) вашей программы, называются заголовочными файлами. Если вы посмотрите на каталог, содержащий файлы вашего компилятора, то найдете подкаталог с именем INCLUDE, в котором находятся разные заголовочные файлы. Каждый заголовочный файл содержит определения, предоставляемые компилятором для различных операций. Например, существует заголовочный файл, который содержит определения для математических операций, другой заголовочный файл описывает файловые операции и т. д. &lt;/p&gt;
						&lt;p&gt;Заголовочные файлы представляют собой файлы в формате ASCII, следовательно, вы можете вывести их содержимое на экран или принтер. В данный момент не беспокойтесь о содержимом заголовочных файлов. Просто поймите, что оператор # include позволяет вам использовать эти файлы. Все программы на C++, созданные вами в процессе изучения этой книги, содержат операторы # include, которые вы должны применять в ваших программах. &lt;br /&gt;&lt;/p&gt;
						&lt;p&gt;Заголовочные файлы C++ &lt;/p&gt;
						&lt;p&gt;Каждая создаваемая вами программа на C++ начинается с одного или нескольких операторов #include. Эти операторы указывают компилятору включить содержимое заданного файла (заголовочного файла) в вашу программу, как если бы программа содержала операторы, которые находятся во включаемом файле. Заголовочные файлы содержат определения, используемые компилятором для операций различных типов. Существуют заголовочные файлы, которые определяют операции В/В (ввода/вывода) C++, системные функции (например, функции, возвращающие текущие дату и время) и многое другое. &lt;/p&gt;
						&lt;p&gt;Заголовочные файлы, подобно программам на C++, представляют собой файлы в формате ASCII, содержимое которых вы можете просмотреть или напечатать. Чтобы лучше понять содержимое заголовочных файлов, найдите время для того, чтобы напечатать заголовочный файл IOSTREAM.H, содержимое которого вы будете использовать в каждой создаваемой вами программе на C++. Обычно заголовочный файл IOSTREAM.H расположен в подкаталоге с именем INCLUDE, который находится в каталоге, содержащем файлы компилятора C++. Используйте текстовый редактор, чтобы просмотреть и напечатать содержимое заголовочных файлов. &lt;/p&gt;
						&lt;p&gt;Замечание: Никогда не изменяйте содержимое заголовочных файлов. Это может привести к ошибкам компиляции в каждой создаваемой вами программе. &lt;br /&gt;ЧТО ТАКОЕ void main(void) &lt;/p&gt;
						&lt;p&gt;При создании программы на C++ ваш исходный файл будет содержать множество операторов. Как вы поймете в процессе изучения, порядок, в котором операторы появляются в программе, не обязательно должен совпадать с порядком, в котором операторы будут выполняться при запуске программы. Каждая программа на C++ имеет один вход, с которого начинается выполнение программы, — главную программу. В программах на C++ оператор void main(void) указывает стартовую точку вашей программы. &lt;/p&gt;
						&lt;p&gt;По мере того как ваши программы становятся больше и сложнее, вы будете делить их на несколько небольших легко управляемых частей. При этом оператор void main(void) указывает начальные (или главные) операторы программы — часть программы, которая выполняется первой. &lt;/p&gt;
						&lt;p&gt;Представление о главной программе &lt;/p&gt;
						&lt;p&gt;Исходные файлы C++ могут содержать очень много операторов. При запуске программы оператор void main(void) определяет главную программу, содержащую первый выполняемый оператор. Ваши программы на C++ должны всегда включать один и только один оператор с именем main. &lt;/p&gt;
						&lt;p&gt;При рассмотрении больших программ на C++ ищите main, чтобы определить операторы, с которых начинается выполнение программы. &lt;br /&gt;Использование void &lt;/p&gt;
						&lt;p&gt;Как только ваша программа становится более сложной, вы должны разделить ее на небольшие более легко управляемые части, называемые функциями. Функция представляет собой простой набор операторов внутри программы, выполняющих определенную задачу. Например, при создании программы платежных документов, вы могли бы создать функцию с именем salary, вычисляющую оклад служащих. Аналогичным образом, если вы пишете математическую программу, вы могли бы создать функции с именами square_root или cube, которые возвращают результат определенных математических операций. Если ваша программа использует функцию, функция выполняет свою задачу и затем возвращает свой результат программе. &lt;/p&gt;
						&lt;p&gt;Каждая функция в вашей программе имеет уникальное имя. А каждая программа имеет по крайней мере одну функцию. Каждая программа из урока 1 имела только одну функцию с именем main. Урок 9 предоставляет более подробный обзор функций. В данный момент просто имейте в виду, что функция состоит из нескольких связанных по смыслу операторов, выполняющих определенную задачу. &lt;/p&gt;
						&lt;p&gt;При исследовании различных программ на C++ вы будете постоянно сталкиваться со словом void. Программы используют слово void для указания того, что функция не возвращает значения или не имеет значений, передаваемых в нее. Например, если вы используете среду MS-DOS или UNIX, программа может завершить свое выполнение с возвратом операционной системе значения статуса, которое может быть проверено командным файлом. Командные файлы MS-DOS проверяют выходной статус программы, используя команду IF ERRORLEVEL. Например, предположим, что программа с именем PAYROLL. EXE завершается с одним из следующих выходных значений статуса в зависимости от результата обработки: &lt;br /&gt;Значение статуса 	&lt;br /&gt;Смысл &lt;br /&gt;0 	Успех &lt;br /&gt;1 	Файл не найден &lt;/p&gt;
						&lt;p&gt;2 	&lt;br /&gt;В принтере нет бумаги &lt;/p&gt;
						&lt;p&gt;&amp;#160; &lt;/p&gt;
						&lt;p&gt;&amp;#160; &lt;/p&gt;
						&lt;p&gt;Внутри командного файла MS-DOS вы можете проверить результат работы программы, используя команду IF ERRORLEVEL: &lt;/p&gt;
						&lt;p&gt;PAYROLL &lt;/p&gt;
						&lt;p&gt;IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 GOTO SUCCESSFUL &lt;br /&gt;IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 GOTO NO_FILE &lt;br /&gt;IF ERRORLEVEL 2 IF NOT ERRORLEVEL 3 GOTO NO_PAPER &lt;br /&gt;REM Далее идут другие команды &lt;/p&gt;
						&lt;p&gt;Большинство простых программ на C++, которые будут созданы вами в процессе изучения этой книги, не возвращают выходное значение статуса операционной системе. Поэтому вы должны размещать слово void перед main, как показано ниже: &lt;/p&gt;
						&lt;p&gt;void main (void) //— -------&amp;gt; Программа не возвращает значение &lt;/p&gt;
						&lt;p&gt;В следующих уроках вы узнаете, что ваши программы могут использовать информацию (например, имя файла), которую пользователь указывает в командной строке при запуске программы. Если программа не использует информацию командной строки, вы должны разместить слово void внутри круглых скобок после main, как показано ниже: &lt;/p&gt;
						&lt;p&gt;void main ( void ) //----------------------&amp;gt; Программа не использует аргументы командной строки &lt;/p&gt;
						&lt;p&gt;По мере усложнения ваши программы могут возвращать значения в операционную систему или использовать параметры командной строки. Однако в настоящий момент просто используйте void в операторе с main, как показано в этой программе. &lt;br /&gt;ПРЕДСТАВЛЕНИЕ О ГРУППИРУЮЩИХ ОПЕРАТОРАХ { } &lt;/p&gt;
						&lt;p&gt;По мере усложнения в ваших программах будет один набор операторов, которые компьютер должен выполнить определенное число раз, и другой набор операторов, которые компьютер должен выполнить, если выполняется определенное условие. В первом случае компьютер может выполнить один и тот же набор операторов 100 раз, чтобы добавить для 100 студентов тестовые очки. Во втором случае компьютер может вывести на экран одно сообщение, если все студенты прошли тест, и другое сообщение, если один или несколько студентов потерпели неудачу. Внутри своих программ на C++ вы будете использовать правую и левую фигурные скобки {}, чтобы сгруппировать связанные операторы. В простых программах, представленных в нескольких первых уроках книги, эти символы группируют операторы, которые соответствуют операторам вашей главной программы. &lt;br /&gt;ИСПОЛЬЗОВАНИЕ cout ДЛЯ ОТОБРАЖЕНИЯ ВЫВОДА НА ЭКРАН &lt;/p&gt;
						&lt;p&gt;Все программы на C++, созданные вами в уроке 1, выводили сообщения на экран. Чтобы вывести сообщение, программы использовали cout и двойной знак &amp;quot;меньше&amp;quot; (&amp;lt;&amp;lt;), как показано ниже: &lt;/p&gt;
						&lt;p&gt;cout &amp;lt;&amp;lt; &amp;quot;Привет, C++!&amp;quot;; &lt;br /&gt;&lt;/p&gt;
						&lt;p&gt;Слово cout представляет собой выходной поток, который C++ назначает на стандартное устройство вывода операционной системы. По умолчанию операционная система назначает стандартное устройство вывода на экран дисплея. Чтобы вывести сообщение на экран, вы просто используете двойной символ &amp;quot;меньше&amp;quot; (называемый оператором вставки) с выходным потоком cout. Из урока 3 вы узнаете, что можно использовать оператор вставки для передачи символов, чисел и других знаков на экран. &lt;/p&gt;
						&lt;p&gt;Представление о выходном потоке cout &lt;/p&gt;
						&lt;p&gt;Вы уже знаете, что программы на C++ используют выходной поток cout для вывода сообщений на экран. При использовании cout для вывода сообщений представляйте cout в виде потока символов, которые операционная система отображает на экране. Другими словами, порядок, в котором ваша программа посылает символы в cout, определяет порядок символов, которые будут появляться на экране. Например, для следующих операторов программы: &lt;/p&gt;
						&lt;p&gt;cout &amp;lt;&amp;lt; &amp;quot;Это сообщение появляется первым,&amp;quot;; &lt;br /&gt;cout &amp;lt;&amp;lt; &amp;quot; а за ним следует настоящее сообщение.&amp;quot;; &lt;/p&gt;
						&lt;p&gt;Операционная система выводит поток символов следующим образом: &lt;/p&gt;
						&lt;p&gt;Это сообщение появляется первым, а за ним следует настоящее сообщение. &lt;/p&gt;
						&lt;p&gt;Оператор вставки (&amp;lt;&amp;lt;) называется так, потому что позволяет вашей программе вставлять символы в выходной поток. &lt;/p&gt;
						&lt;p&gt;Вы уже знаете, что выходной поток cout по умолчанию соответствует вашему экрану. Другими словами, когда ваши программы посылают вывод в cout, вывод появляется на экране. Однако, используя операторы переназначения вывода операционной системы, вы можете послать вывод программы на принтер или в файл. Например, следующая команда предписывает MS-DOS направить вывод программы FIRST.EXE на принтер, а не на экран: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; FIRST &amp;gt; PRN &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Как вы узнаете из Урока 3, с помощью cout в C++ можно выводить символы, целые числа, например 1001, и числа с плавающей точкой, например 3.12345. Из Урока 8 вы узнаете, что в C++ существует также входной поток с именем cin, который ваши программы могут использовать для чтения информации, вводимой с клавиатуры. &lt;br /&gt;ЧТО ВЫ ДОЛЖНЫ ЗНАТЬ &lt;/p&gt;
						&lt;p&gt;В этом уроке обсуждались некоторые общие вопросы, с которыми вы столкнетесь в программах на C++. Из Урока 3 вы узнаете, как использовать cout для вывода символов, целых чисел и значений с плавающей точкой. Вы также узнаете, как форматировать вывод. До изучения урока 3 убедитесь, что вы освоили следующие основные концепции: &lt;br /&gt;Большинство программ на C++ начинаются с оператора # include, который предписывает компилятору включить содержимое заданного заголовочного файла в программу. &lt;br /&gt;Заголовочные файлы содержат определения, предоставляемые компилятором, которые ваши программы могут использовать. &lt;br /&gt;Исходный файл может состоять из множества операторов; оператор void main(void) указывает начало главной программы, которая содержит первый выполняемый оператор программы. &lt;br /&gt;По мере того как ваша программа становится более сложной, вы будете группировать связанные операторы в небольшие легко управляемые части, называемые функциями. Группируйте операторы программы с помощью правой и левой фигурных скобок {}. &lt;br /&gt;Большинство программ на C++ используют выходной поток cout для вывода информации на экран; однако, используя операторы переназначения В/В операционной системы, вы можете перенаправить вывод cout в файл, устройство (например, принтер) или даже сделать его входом другой программы.&lt;/span&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 11:38:15 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=8#p8</guid>
		</item>
		<item>
			<title>Урок 1. Создание вашей первой программы</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=7#p7</link>
			<description>&lt;p&gt;Все вы использовали компьютерные программы, такие как текстовый процессор, электронные таблицы и даже Microsoft Windows 95. Компьютерные программы, или программное обеспечение, представляют собой файлы, содержащие инструкции, которые указывают компьютеру, что следует делать. Если вы работаете в среде MS-DOS или Windows, то, например, файлы с расширениями ЕХЕ и СОМ содержат команды, которые компьютер может выполнять. Другими словами, файлы содержат специальные инструкции, выполняемые компьютером, обычно одну за другой, для решения определенной задачи. При создании программы вы указываете инструкции, которые компьютер должен выполнить. Из этого урока вы узнаете, как указать такие инструкции с помощью операторов C++. К концу данного урока вы освоите следующие основные концепции: &lt;/p&gt;
						&lt;p&gt;• При создании программы используйте текстовый редактор, чтобы ввести операторы C++ в исходный файл программы. &lt;/p&gt;
						&lt;p&gt;• Для преобразования операторов программы C++ в выполнимую программу, в единицы и нули, которые понимает компьютер, используйте специальную программу — компилятор C++. &lt;/p&gt;
						&lt;p&gt;• Для изменения или исправления программы используйте текстовый редактор. &lt;/p&gt;
						&lt;p&gt;• При нарушении одного (или более) правил программирования на C++ компилятор выдаст на экран сообщения о синтаксических ошибках. Вам следует отредактировать программу, чтобы исправить ошибки, а затем запустить компилятор снова. &lt;/p&gt;
						&lt;p&gt;Программирование представляет собой процесс определения последовательности инструкций, которые должен выполнить компьютер для решения определенной задачи. Для указания этих инструкций вы используете язык программирования, например C++. С помощью текстового редактора вы вносите программные операторы в исходный файл. Далее вы используете специальную программу — компилятор — для преобразования операторов из формата, который вы можете читать и понимать, в единицы и нули, которые понимает компьютер. &lt;/p&gt;
						&lt;p&gt;Лучший способ понять процесс создания и компиляции программы — построить простую программу на C++. Давайте этим займемся! &lt;/p&gt;
						&lt;p&gt;СОЗДАНИЕ ПРОСТОЙ ПРОГРАММЫ &lt;/p&gt;
						&lt;p&gt;Как и следовало ожидать, ваша первая программа на C++ называется FIRST.СРР. При создании программ на C++ используйте расширение СРР, чтобы другие могли понять, что этот файл содержит программу на C++. Когда вы позже запустите эту программу, она выведет на экран дисплея сообщение Учимся программировать на языке C++/Следующий пример вывода показывает подсказку командной строки (в данном примере С:\&amp;gt;), вводимую вами командную строку (имя программы FIRST, за которым следует ENTER) и вывод программы на экран: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; FIRST &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Учимся программировать на языке C++! &lt;/p&gt;
						&lt;p&gt;Как известно, при программировании вы можете работать в среде, основанной на командной строке, например MS-DOS или UNIX, или в среде типа Windows. Для упрощения вывода в данной книге подразумевается, что вы работаете из командной строки. В этом случае для выполнения программы FIRST.EXE вы должны ввести имя программы FIRST в ответ на системную подсказку и затем нажать ENTER. &lt;/p&gt;
						&lt;p&gt;Для начала вам следует использовать текстовый редактор, например EDIT (поставляется с MS-DOS), для создания файла, который содержит операторы программы и называется исходным файлом. Не используйте текстовый процессор, такой как Word или WordPerfect, для создания исходного файла программы. Как известно, текстовые процессоры позволяют вам создавать форматированные документы, которые могут содержать полужирный текст, выровненные поля, а также другие особенности. Чтобы отформатировать документы таким образом, текстовый процессор вставляет специальные (скрытые) символы внутрь документа. Такие символы могут включать или выключать курсив или выбирать определенную ширину полей. Несмотря на то что такие специальные символы имеют смысл для текстового процессора, C++ их не поймет и эти символы приведут к ошибкам. &lt;/p&gt;
						&lt;p&gt;С помощью текстового редактора введите следующие операторы программы C++ (точно так, как они изображены, используя верхний и нижний регистры), как показано ниже: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Учимся программировать на языке C++!&amp;quot;; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Не беспокойтесь, если операторы C++ не имеют для вас смысла. Вы узнаете назначение каждого из них из урока 2. А пока обратите особое внимание на ваш ввод. Удостоверьтесь, например, что вы ввели верное количество кавычек, точек с запятой и скобок. Еще раз более внимательно проверьте операторы своей программы. Если они верны, сохраните операторы в файле FIRST. СРР &lt;/p&gt;
						&lt;p&gt;Что означает имя? &lt;/p&gt;
						&lt;p&gt;При создании программы на C++ вы вносите операторы программы в исходный файл. Применяйте расширение СРР, чтобы другие программисты могли понять, что данный файл содержит программу на C++. Далее используйте имя файла, которое указывает назначение программы. Например, если вы создаете финансовую программу, можно использовать имя BUDGET.CPP. Аналогичным образом программу, которая вычисляет оклады в фирме, вы можете назвать SALARY. СРР. Чтобы избежать путаницы, никогда не используйте для названия программы имя существующей команды MS-DOS, например COPY или DEL. &lt;br /&gt;КОМПИЛЯЦИЯ ВАШЕЙ ПРОГРАММЫ &lt;/p&gt;
						&lt;p&gt;Компьютер работает с комбинациями единиц и нулей (называемых машинным языком), которые представляют наличие или отсутствие электрических сигналов. Если сигнал равен единице (наличие), компьютер может выполнить одну операцию, а если сигнал равен нулю (отсутствие), компьютер может выполнить другую операцию. Однако к счастью, нет необходимости писать программы в нулях и единицах (как это делали программисты в 1940 и 50 гг.). Вместо этого специальная программа — компилятор C++ — преобразует операторы программы (ваш исходный код) в машинный язык. &lt;/p&gt;
						&lt;p&gt;Другими словами, компилятор просматривает исходный файл, содержащий операторы программы на C++. Если ваши операторы не нарушают ни одно правило языка C++, компилятор преобразует их в машинный язык (единицы и нули), который компьютер может выполнить. Компилятор хранит машинный язык в выполняемом файле, имеющем, как правило, расширение ЕХЕ. Если файл ЕХЕ существует, вы можете запустить программу, вводя ее имя в ответ на командную подсказку. &lt;/p&gt;
						&lt;p&gt;В зависимости от используемого вами компилятора, команды, которые вы применяете для его вызова, будут различны. Например, при использовании Borland C++ вам следует компилировать программу FIRST.CPP с помощью команды ВСС: &lt;/p&gt;
						&lt;p&gt;C:\&amp;gt; BCC FIRST.CPP &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Если вы применяете не Borland C++, обратитесь к документации, поставляемой с вашим компилятором, чтобы определить правильную команду для его запуска. По окончании работы компилятор создаст выполнимую программу и сохранит ее в файле на диске. В среде MS-DOS файл выполни- &lt;/p&gt;
						&lt;p&gt;мой программы будет иметь расширение ЕХЕ, например FIRST.EXE. Если при компиляции программы компилятор выдает сообщения об ошибках, отредактируйте свой исходный файл и сравните каждый символ исходного файла с символами, которые приведены в этой книге. Исправьте все ошибки, сохраните сделанные изменения, а затем откомпилируйте про грамму второй раз. После того как вы успешно откомпилировали свою программу, запустите ее, вводя имя программы в ответ на командную подсказку как это было показано выше. &lt;/p&gt;
						&lt;p&gt;Представление о компиляторе &lt;/p&gt;
						&lt;p&gt;При создании программы вы используете язык программирования (такой как C++), чтобы указать инструкции, выполняемые компьютером. Применяя текстовый редактор, вы вносите операторы программы в исходный файл. Далее используется специальная программа — компилятор, которая преобразует ваш исходный файл в машинный язык (единицы и нули, понимаемые компьютером). Если компиляция прошла успешно, результатом будет файл выполнимой программы. Однако если вы допустили одну или несколько ошибок или нарушили какое-либо правило C++, компилятор выдаст на экран сообщения об ошибках, и для их исправления вам следует заново отредактировать исходный файл. &lt;/p&gt;
						&lt;p&gt;Если вы работаете на большой машине или мини-ЭВМ, у вас должен быть компилятор, доступный для вас и других пользователей вашей системы. Если же вы используете ПК, вам следует приобрести и установить компилятор, такой как Borland C++ или Microsoft Visual C++. &lt;br /&gt;СОЗДАНИЕ ВТОРОЙ ПРОГРАММЫ &lt;/p&gt;
						&lt;p&gt;Хочется надеяться, что вы смогли успешно откомпилировать и выполнить программу FIRST. CPP. Если это так, используйте ваш текстовый редактор, чтобы создать второй программный файл с именем EASY. CPP, который содержит следующие операторы программы: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Программировать на C++ просто!&amp;quot;; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Как и ранее, сохраните свои операторы программы на C++ в исходном файле и вызовите компилятор, указав имя файла программы в командной строке компилятора. В случае Borland C++ используйте следующую команду для компиляции программы: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; ВСС EASY.CPP &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Если компиляция программы прошла успешно, компилятор создаст выполнимую программу с именем EASY.EXE. Когда вы запустите эту программу, на вашем экране появится следующее сообщение: &lt;/p&gt;
						&lt;p&gt;С.\&amp;gt; EASY &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Программировать на C++ просто! &lt;/p&gt;
						&lt;p&gt;Далее используя редактор, отредактируйте исходный файл EASY. CPP и измените выводимое на экран сообщение таким образом, чтобы включить слово очень, как показано ниже: &lt;/p&gt;
						&lt;p&gt;cout &amp;lt;&amp;lt; &amp;quot;Программировать на C++ очень просто!&amp;quot;; &lt;/p&gt;
						&lt;p&gt;Сохраните ваше изменение в исходном файле и откомпилируйте программу. После успешной компиляции запустите программу, как показано ниже: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; EASY &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Программировать на C++ очень просто! &lt;/p&gt;
						&lt;p&gt;Каждый раз, когда вы изменяете исходный файл, вам следует откомпилировать программу заново, чтобы изменения вступили в силу. Например, используйте текстовый редактор, чтобы снова изменить исходный файл. В этот раз добавьте новую строку в свою программу: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; &amp;quot;Программировать на C++ очень просто!&amp;quot;; &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &amp;quot;Можно расслабиться!&amp;quot;; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Сохраните ваши изменения в исходном файле. Затем запустите программу, как показано ниже: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; EASY &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Программировать на C++ очень просто! &lt;/p&gt;
						&lt;p&gt;Как видите, программа не выводит новую строку на экран. Чтобы изменения в исходном файле вступили в силу, вы должны откомпилировать программу. В данном случае необходимо откомпилировать программу так, как было описано выше, а затем запустить ее. Так как компилятор использовал изменения вашего исходного кода, то, как показано ниже, на экран будет выведена новая строка: &lt;/p&gt;
						&lt;p&gt;C:\&amp;gt; EASY &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Программировать на C++ очень просто! &lt;/p&gt;
						&lt;p&gt;Можно расслабиться! &lt;br /&gt;ИЗУЧЕНИЕ СИНТАКСИЧЕСКИХ ОШИБОК &lt;/p&gt;
						&lt;p&gt;Каждый язык — английский, французский, немецкий и даже C++ — имеет набор правил, называемых синтаксисом, которым вы должны следовать, когда используете данный язык. В английском языке, например, предложения обычно заканчиваются точкой, восклицательным или вопросительным знаком. Вы также используете заглавные буквы в начале предложения. В синтаксисе C++ используется точка с запятой, круглые скобки, фигурные скобки и многие другие символы. Когда вы забываете или неправильно употребляете эти символы, компилятор C++ выводит на экран сообщение об ошибке, которое описывает ошибку и соответствующий ей номер строки в исходном файле. &lt;/p&gt;
						&lt;p&gt;Компилятор C++ не может создать выполнимую программу, пока не будут исправлены все синтаксические ошибки. Чтобы понять процесс обнаружения и исправления синтаксических ошибок, создайте следующую программу с именем SYNTAX. CPP: &lt;/p&gt;
						&lt;p&gt;#include &amp;lt;iostream.h&amp;gt; &lt;/p&gt;
						&lt;p&gt;void main(void) &lt;/p&gt;
						&lt;p&gt;{ &lt;br /&gt;&amp;#160; &amp;#160;cout &amp;lt;&amp;lt; Заключайте сообщение в кавычки; &lt;br /&gt;} &lt;/p&gt;
						&lt;p&gt;Если посмотреть внимательно, можно заметить, что сообщения, выведенные двумя предыдущими программами, в вашем исходном файле взяты в кавычки. Синтаксис (правила) C++ требует кавычек. При компиляции программы компилятор выведет сообщения о синтаксических ошибках. В случае Borland C++ компилятор выведет следующие сообщения: &lt;/p&gt;
						&lt;p&gt;С:\&amp;gt; ВСС SYNTAX.CPP &amp;lt;ENTER&amp;gt; &lt;/p&gt;
						&lt;p&gt;Borland C++ Version 4.00 Copyright (с) 1993 Borland &lt;/p&gt;
						&lt;p&gt;International syntax.cpp: &lt;/p&gt;
						&lt;p&gt;Error syntax.cpp 5: Undefined symbol &#039;Заключайте&#039; in function main() &lt;/p&gt;
						&lt;p&gt;Error syntax.cpp 5: Statement missing; in function main() *** 2 errors in Compile *** &lt;/p&gt;
						&lt;p&gt;В этом случае компилятор вывел две синтаксические ошибки. Обе ошибки относятся к 5 строке исходного файла. Отредактируйте файл и возьмите сообщение в кавычки, как показано ниже: &lt;/p&gt;
						&lt;p&gt;cout &amp;lt;&amp;lt; &amp;quot;Заключайте сообщение в кавычки&amp;quot;; &lt;/p&gt;
						&lt;p&gt;Теперь можете успешно откомпилировать программу и получить выполнимый файл. Когда вы впервые начинаете использовать какой-либо язык программирования, можете рассчитывать на несколько синтаксических ошибок каждый раз при компиляции программы. После того как вы самостоятельно создадите несколько программ, вы будете быстро определять и исправлять подобные ошибки. &lt;/p&gt;
						&lt;p&gt;Изучение синтаксических ошибок &lt;/p&gt;
						&lt;p&gt;При создании программы на C++ вам следует придерживаться определенных правил, называемых правилами синтаксиса. Например, надо брать текстовые сообщения в кавычки и ставить точку с запятой после большинства операторов вашей программы (позже вы узнаете, для каких операторов требуется точка с запятой, а для каких нет). Если в программе нарушаются правила синтаксиса, компилятор C++ выводит сообщение об ошибке на экран. Вам следует исправить все синтаксические ошибки до того, как компилятор сможет создать выполнимую программу. &lt;br /&gt;РАБОТА В СРЕДЕ ТИПА WINDOWS &lt;/p&gt;
						&lt;p&gt;Для упрощения в каждом из предыдущих примеров предполагается, что вы работаете в среде, основанной на командной строке, например MS-DOS или UNIX. Однако сегодня большинство программистов на C++ программируют в среде типа Windows, такой как Visual C++, или интегрированной среде разработки фирмы Borland. При программировании в среде типа Windows операторы программы не отличаются от тех, которые показаны здесь. Другими словами, операторы C++ в программе FIRST.CPP, написанной в Windows, идентичны тем, которые вы будете использовать в среде, основанной на командной строке. Что изменяется в Windows, так это процесс компиляции и запуска программы. &lt;/p&gt;
						&lt;p&gt;Рисунок 1, например, иллюстрирует среду программирования Windows. Внутри такой среды программирования вы можете создавать исходные файлы, используя встроенный редактор, и затем компилировать программу с помощью выбора пункта меню или щелчка мыши по кнопке инструментальной линейки. Если программа содержит синтаксические ошибки, среда программирования сводит сообщения об ошибках в специальное окно. После того как вы успешно откомпилируете вашу программу, можно использовать пункт меню (или кнопку инструментальной линейки) для запуска программы. Программная среда может открыть отдельное окно, в котором будет отображаться вывод программы. &lt;br /&gt;&lt;br /&gt; &lt;/p&gt;
						&lt;p&gt;Рис.1. Среда программирования Windows. &lt;/p&gt;
						&lt;p&gt;Среда программирования называется так, потому что обеспечивает все инструментальные средства, необходимые для создания, компиляции и запуска программ. &lt;br /&gt;ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ &lt;/p&gt;
						&lt;p&gt;Из этого урока вы узнали, как создавать и компилировать программы на C++! В уроке 2 вы получите более подробный обзор операторов, которые использовались в программах, созданных в данном уроке. Вы изучите использование фигурных скобок {}, ключевых слов, таких как void, а также как научить программы направлять вывод на экран. &lt;/p&gt;
						&lt;p&gt;До изучения урока 2 убедитесь, что вы освоили следующие основные концепции: &lt;br /&gt;Программы представляют собой файлы, содержащие последовательность инструкций, которые компьютер будет выполнять. &lt;br /&gt;Вы создаете программы на C++, используя текстовый редактор. &lt;br /&gt;Вы сохраняете свои программы на C++ в исходных файлах, для которых используется расширение СРР. &lt;br /&gt;Компилятор преобразует операторы программы на C++ в единицы и нули — машинный язык, который понимает компьютер. &lt;br /&gt;Подобно всем языкам, в C++ существует набор правил, называемых синтаксисом. &lt;br /&gt;Если вы нарушаете правила синтаксиса, компилятор выводит сообщение, описывающее ошибку. &lt;br /&gt;Вы должны исправить все синтаксические ошибки, прежде чем компилятор создаст выполняемую программу. &lt;br /&gt;После внесения изменений в исходный файл следует заново откомпилировать программу, чтобы изменения вступили в силу.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 11:36:57 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=7#p7</guid>
		</item>
		<item>
			<title>Краткое начинание C++</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=6#p6</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: blue&quot;&gt;Эту главу мы начнем с рассмотрения встроенного в язык С++ типа данных “массив”. Массив – это набор данных одного типа, например массив целых чисел или массив строк. Мы рассмотрим недостатки, присущие встроенному массиву, и напишем для его представления свой класс Array, где попытаемся избавиться от этих недостатков. Затем мы построим целую иерархию подклассов, основываясь на нашем базовом классе Array. В конце концов мы сравним наш класс Array с классом vector из стандартной библиотеки С++, реализующим аналогичную функциональность. В процессе создания этих классов мы коснемся таких свойств С++, как шаблоны, пространства имен и обработка ошибок. &lt;br /&gt;2.1. Встроенный тип данных &amp;quot;массив&amp;quot;&lt;/p&gt;
						&lt;p&gt;Как было показано в главе 1, С++ предоставляет встроенную поддержку для основных типов данных – целых и вещественных чисел, логических значений и символов:&lt;br /&gt;// объявление целого объекта ival&lt;br /&gt;// ival инициализируется значением 1024&lt;/p&gt;
						&lt;p&gt;int ival = 1024;&lt;br /&gt;&lt;/p&gt;
						&lt;p&gt;// объявление вещественного объекта двойной точности dval&lt;br /&gt;// dval инициализируется значением 3.14159&lt;br /&gt;double dval = 3.14159;&lt;/p&gt;
						&lt;p&gt;// объявление вещественного объекта одинарной точности fval&lt;br /&gt;// fval инициализируется значением 3.14159&lt;br /&gt;float fval = 3.14159;&lt;/p&gt;
						&lt;p&gt;К числовым типам данных могут применяться встроенные арифметические и логические операции: объекты числового типа можно складывать, вычитать, умножать, делить и т.д.&lt;br /&gt;int ival2 = ival1 + 4096; // сложение&lt;br /&gt;int ival3 = ival2 - ival; // вычитание&lt;/p&gt;
						&lt;p&gt;dval = fval * ival; // умножение&lt;br /&gt;ival = ival3 / 2; // деление&lt;/p&gt;
						&lt;p&gt;bool result = ival2 == ival3; // сравнение на равенство&lt;br /&gt;result = ival2 + ival != ival3; // сравнение на неравенство&lt;br /&gt;result = fval + ival2 &amp;lt; dval; // сравнение на меньше&lt;br /&gt;result = ival &amp;gt; ival2; // сравнение на больше&lt;/p&gt;
						&lt;p&gt;В дополнение к встроенным типам стандартная библиотека С++ предоставляет поддержку для расширенного набора типов, таких, как строка и комплексное число. (Мы отложим рассмотрение класса vector из стандартной библиотеки до раздела 2.7.)&lt;br /&gt;Промежуточное положение между встроенными типами данных и типами данных из стандартной библиотеки занимают составные типы – массивы и указатели. (Указатели рассмотрены в разделе 2.2.)&lt;br /&gt;Массив – это упорядоченный набор элементов одного типа. Например, последовательность&lt;br /&gt;0 1 1 2 3 5 8 13 21&lt;/p&gt;
						&lt;p&gt;представляет собой первые 9 элементов последовательности Фибоначчи. (Выбрав начальные два числа, вычисляем каждый из следующих элементов как сумму двух предыдущих.)&lt;br /&gt;Для того чтобы объявить массив и проинициализировать его данными элементами, мы должны написать следующую инструкцию С++:&lt;br /&gt;int fibon[9] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };&lt;/p&gt;
						&lt;p&gt;Здесь fibon – это имя массива. Элементы массива имеют тип int, размер (длина) массива равна 9. Значение первого элемента – 0, последнего – 21. Для работы с массивом мы индексируем (нумеруем) его элементы, а доступ к ним осуществляется с помощью операции взятия индекса. Казалось бы, для обращения к первому элементу массива естественно написать:&lt;br /&gt;int first_elem = fibon[1];&lt;/p&gt;
						&lt;p&gt;Однако это не совсем правильно: в С++ (как и в С) индексация массивов начинается с 0, поэтому элемент с индексом 1 на самом деле является вторым элементом массива, а индекс первого равен 0.Таким образом, чтобы обратиться к последнему элементу массива, мы должны вычесть единицу из размера массива:&lt;br /&gt;fibon[0]; // первый элемент&lt;br /&gt;fibon[1]; // второй элемент&lt;br /&gt;...&lt;br /&gt;fibon[8]; // последний элемент&lt;br /&gt;fibon[9]; // ... ошибка&lt;/p&gt;
						&lt;p&gt;Девять элементов массива fibon имеют индексы от 0 до 8. Употребление вместо этого индексов 1-9 является одной из самых распространенных ошибок начинающих программистов на С++.&lt;br /&gt;Для перебора элементов массива обычно употребляют инструкцию цикла. Вот пример программы, которая инициализирует массив из десяти элементов числами от 0 до 9 и затем печатает их в обратном порядке:&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;&amp;#160; int ia[10];&lt;br /&gt;&amp;#160; int index;&lt;br /&gt;&amp;#160; for (index=0; index&amp;lt;10; ++index)&lt;br /&gt;&amp;#160; &amp;#160; // ia[0] = 0, ia[1] = 1 и т.д.&lt;br /&gt;&amp;#160; &amp;#160; ia[index] = index;&lt;br /&gt;&amp;#160; for (index=9; index&amp;gt;=0; --index)&lt;br /&gt;&amp;#160; &amp;#160; cout &amp;lt;&amp;lt; ia[index] &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;&amp;#160; cout &amp;lt;&amp;lt; endl;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;Оба цикла выполняются по 10 раз. Все управление циклом for осуществляется инструкциями в круглых скобках за ключевым словом for. Первая присваивает начальное значение переменной index. Это производится один раз перед началом цикла:&lt;br /&gt;index = 0;&lt;/p&gt;
						&lt;p&gt;Вторая инструкция:&lt;br /&gt;index &amp;lt; 10;&lt;/p&gt;
						&lt;p&gt;представляет собой условие окончания цикла. Оно проверяется в самом начале каждой итерации цикла. Если результатом этой инструкции является true, то выполнение цикла продолжается; если же результатом является false, цикл заканчивается. В нашем примере цикл продолжается до тех пор, пока значение переменной index меньше 10. На каждой итерации цикла выполняется некоторая инструкция или группа инструкций, составляющих тело цикла. В нашем случае это инструкция&lt;br /&gt;ia[index] = index;&lt;/p&gt;
						&lt;p&gt;Третья управляющая инструкция цикла&lt;br /&gt;++index&lt;/p&gt;
						&lt;p&gt;выполняется в конце каждой итерации, по завершении тела цикла. В нашем примере это увеличение переменной index на единицу. Мы могли бы записать то же действие как&lt;br /&gt;index = index + 1&lt;/p&gt;
						&lt;p&gt;но С++ дает возможность использовать более короткую (и более наглядную) форму записи. Этой инструкцией завершается итерация цикла. Описанные действия повторяются до тех пор, пока условие цикла не станет ложным.&lt;br /&gt;Вторая инструкция for в нашем примере печатает элементы массива. Она отличается от первой только тем, что в ней переменная index уменьшается от 9 до 0. (Подробнее инструкция for рассматривается в главе 5.)&lt;br /&gt;Несмотря на то, что в С++ встроена поддержка для типа данных “массив”, она весьма ограничена. Фактически мы имеем лишь возможность доступа к отдельным элементам массива. С++ не поддерживает абстракцию массива, не существует операций над массивами в целом, таких, например, как присвоение одного массива другому или сравнение двух массивов на равенство, и даже такой простой, на первый взгляд, операции, как получение размера массива. Мы не можем скопировать один массив в другой, используя простой оператор присваивания:&lt;br /&gt;int array0[10]; array1[10];&lt;br /&gt;...&lt;br /&gt;array0 = array1; // ошибка&lt;br /&gt;Вместо этого мы должны программировать такую операцию с помощью цикла:&lt;br /&gt;for (int index=0; index&amp;lt;10; ++index)&lt;br /&gt;array0[index] = array1[index];&lt;/p&gt;
						&lt;p&gt;Массив “не знает” собственный размер. Поэтому мы должны сами следить за тем, чтобы случайно не обратиться к несуществующему элементу массива. Это становится особенно утомительным в таких ситуациях, как передача массива функции в качестве параметра. Можно сказать, что этот встроенный тип достался языку С++ в наследство от С и процедурно-ориентированной парадигмы программирования. В оставшейся части главы мы исследуем разные возможности “улучшить” массив.&lt;/span&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 11:20:37 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=6#p6</guid>
		</item>
		<item>
			<title>Музыка, тамада.</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=5#p5</link>
			<description>&lt;p&gt;-----------&amp;gt;&lt;strong&gt; :shine:&amp;#160; &lt;span style=&quot;font-size: 18px&quot;&gt;&amp;#160; &lt;span style=&quot;font-style: italic&quot;&gt;&amp;#160; &lt;em class=&quot;bbuline&quot;&gt; &lt;span style=&quot;font-family: Trebuchet Ms&quot;&gt;Музыка, тамада на различные торжества!&lt;/span&gt; &lt;/em&gt;&amp;#160; &lt;/span&gt;&amp;#160; &lt;/span&gt; :shine: &lt;/strong&gt;&amp;lt;-----------&lt;/p&gt;
						&lt;p&gt;&lt;span style=&quot;color: navy&quot;&gt;&lt;span style=&quot;font-style: italic&quot;&gt;&amp;#160; &lt;span style=&quot;font-family: Comic Sans Ms&quot;&gt;Творчество ведущего - это, прежде всего, психологическая работа. Необходимо вовремя определить желания гостей и отталкиваясь от этого провести тот или иной конкурс, сказать соответствующий тост или усадить за стол. Есть примерный ориентир времени за сценарием сколько гости смогут участвовать во всевозможных конкурсах и тостах за столом, или на танцевальной площадке, но всё это не принципиально. На свадебном торжестве молодые, на выпускном вечере выпускники, каждый из них пылает под яркими впечатлениями событий. Едва прозвучит фраза, или музыкальная композиция, имеющая малейшую искорку, и все уже&amp;#160; на танцевальной площадке (после 15 минутного застолья). И на этот случай в «шкатулке» у тамады и музыканта есть «маслице в огонь»- немного мыльных пузырьков, парочка эксклюзивных композиций или соответствующий конкурс&lt;/span&gt;&amp;#160; &lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: teal&quot;&gt; &lt;span style=&quot;font-family: Comic Sans Ms&quot;&gt;Иногда в конце торжества слышишь неоднократно фразу «Ты лучший!», хотя знаешь, что имеется множество недоработок, ведь время не стоит на месте и нужно над собою работать, внося коррективы в сценарий, в конкурсы, тосты, в обряд. Но при такой фразе понимаешь – праздник удался на славу, и что немало важно, в успехе заслуга не только моя, а прежде всего молодых, родителей и гостей, которые вместе со мной творили этот чудесный праздник и каждый при этом наслаждался своей ролью!&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
						&lt;p&gt;Музыка, тамада на различные торжества!&lt;br /&gt;Музыка, тамада на различные торжества!&lt;br /&gt;Музыка, тамада на различные торжества!&lt;br /&gt;Музыка, тамада на различные торжества!&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 11:05:38 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=5#p5</guid>
		</item>
		<item>
			<title>Как стать Хакером? Базовые навыки хакерства.</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=3#p3</link>
			<description>&lt;p&gt;Как стать Хакером? Предисловие.&lt;/p&gt;
						&lt;p&gt;Этот вопрос возникает у многих ребят во время первых исследований сети, программ и алгортимов. Если ты задумался о том, как стать Хакером, и это серьезно, разреши пожать тебе руку - твой исследовательский подход вызывает уважение!&lt;/p&gt;
						&lt;p&gt;Впервые, я задумался о том, как стать хакером, лет в 17. Уже не помню, что мне сподвигнуло вбить этот запрос в поисовую систему, но догадываюсь, что мои помыслы были не самыми чистыми... С тех пор прошло много лет, я изменился, изменились и мои стремления. Сейчас я увлекаюсь программированием, и создаю серьезные веб-проекты. Команда, благодаря которой был создан этот сайт, развалилась... Да и сама концепция сайта претерпела изменения. Подробней об этом можешь почитать на странице &amp;quot;О проекте&amp;quot;. Но мы отвлеклись от вопроса &amp;quot;Как стать хакером?&amp;quot;.&lt;/p&gt;
						&lt;p&gt;На тему хакерства уже создано не мало различных руководств, и я не вижу особого смысла все их переделывать. В задачу этой статьи входит систематизировать данные из многих источников, и составить на их основе одно большое руководство. В итоге, читая его, ты сможешь лучше понять - в какую сторону двигаться, чтобы достичь своей цели - стать Хакером.&lt;/p&gt;
						&lt;p&gt;Мне лишь остается пожелать тебе крепкого коннекта на твоем большом и интересном пути.&lt;/p&gt;
						&lt;p&gt;Основные навыки хакера&lt;/p&gt;
						&lt;p&gt;1. Изучай программирование.&lt;/p&gt;
						&lt;p&gt;Без этого навыка очень трудно стать хакером. И если тебе кажется, что программирование это очень сложно - не правда. Базовые нвыки программирования можно получить самостоятельно за несколько упорных дней, проведенных перед монитором, в изучении соответствующих статей. Лично меня никто никогда не учил программированию, просто в 17 лет я почувствовал стремление к написанию собственных программ. И учился самостоятельно, проводя ночи в изучении книг и чтении статей. С тех пор я перестал тратить время на компьютерные игры, и компьютер стал моим рабочим местом.&lt;/p&gt;
						&lt;p&gt;Именно рабочим. Весь мой заработок идет из Интернета. Вспоминая, сколько дней я убил на игры, мне становится жалко потерянного времени.&lt;/p&gt;
						&lt;p&gt;2. Приручи Интернет&lt;/p&gt;
						&lt;p&gt;Может быть, ты виртуозно владеешь Сетью, общаешься в социалках, и имеешь свой сервер CS с друзьями. Но это все фигня... Ты должен понимать, как устроен Интернет, разбираться во взаимодействии сервера и браузера, знать значение заголовков (HTTP) передаваемых серверу клиентом. Без этих знаний ответ на вопрос как стать хакером не найти.&lt;/p&gt;
						&lt;p&gt;Изучи историю Интернет, освой базовые понятия, научись понимать, что такое IP, Proxy. Это важно, правда.&lt;/p&gt;
						&lt;p&gt;3. Освой язык Гипертекстовой разметки.&lt;/p&gt;
						&lt;p&gt;Это самое первое, что ты должен сделать. Я говорю про HTML в связке с CSS. Может быть ты и делал сайты на ucoz либо на narod.ru используя стандартные шаблоны, но назвать это сайто строением нельзя ни в коем случае.&lt;/p&gt;
						&lt;p&gt;Сам HTML тебе понадобится не только для того, чтобы создавать собственные сайты, но и для того, чтобы взаимодействовать с сервером, и обращаться к php скриптам, не смущаясь от строк вида:&lt;/p&gt;
						&lt;p&gt;input autocomplete=&amp;quot;off&amp;quot; class=lst type=text name=q maxlength=2048 value=&amp;quot;как стать хакером&amp;quot;&lt;/p&gt;
						&lt;p&gt;4. Не задавай глупых вопросов&lt;/p&gt;
						&lt;p&gt;Я про хакерские форумы и сайты, а также про сервисы типа &amp;quot;Вопрос-Ответ&amp;quot; от Гугла. В Интернете полно информации, и ты в силах многое изучить самостоятельно.&lt;/p&gt;
						&lt;p&gt;Если же наступил момент, когда действительно нужна помощь, запомни несколько правил:&lt;/p&gt;
						&lt;p&gt;- будь вежлив. Ты просишь помощи у более опытных людей, и никто ничего тебе не обязан.&lt;/p&gt;
						&lt;p&gt;- раскрой вопрос. Выложи результаты своих поисков, и то, чего ты добился, чтобы люди поняли, что ты уже совершал самостоятельные попытки в поисках ответа на свой вопрос.&lt;/p&gt;
						&lt;p&gt;- напиши правильное решение. Если ты самостоятельно нашел ответ на свой вопрос, не нужно писать что-то типа: &amp;quot;Всем спасибо, проблема решена, сам справился.&amp;quot; Помни, что твою ветку форума будут находить через поиск люди, которые еще не нашли ответа на этот вопрос. Подумай об этом, когда закрываешь тему - выкладывай правильное решение.&lt;/p&gt;
						&lt;p&gt;5. Изучай английский.&lt;/p&gt;
						&lt;p&gt;Английский язык - общепринят в Интернет. И пусть мы обзавелись собственным доменом типа .рф, но от инглиша никуда не уйти. &lt;/p&gt;
						&lt;p&gt;Для всех мировых сервисов, английский язык - это стандарт. И чем раньше ты начнешь его изучать, тем лучше для тебя.&lt;/p&gt;
						&lt;p&gt;6. Помогай новичкам.&lt;/p&gt;
						&lt;p&gt;Пускай ты пока и не так много знаешь, но не нужно скрывать информацию от других ребят, знания которых на уровне, много меньшем чем у тебя. Представь, что все на свете скрывали бы необходимую информацию, многому ли тогда ты бы научился?&lt;/p&gt;
						&lt;p&gt;Это касается и твоих будущих программ.. Не скрывай исходные коды от других. Пиши Open Source приложения, ведь это двигатель прогресса.&lt;/p&gt;
						&lt;p&gt;7. Освой базовые навыки взлома&lt;/p&gt;
						&lt;p&gt;Но перед этим немного морали: Кодекс Хакера. &lt;/p&gt;
						&lt;p&gt;Затем, можешь изучить Технологию XSS атак. Но тебе уже понадобятся знания HTML и немного PHP.&lt;/p&gt;
						&lt;p&gt;Изучи, как нужно скрывать следы после взлома. В первую очередь. Для начала можешь прочитать статью про Анонимность в сети. Если интересно, можешь почитать, как нестандартными способома украсть ICQ: Атака на ICQ&lt;/p&gt;
						&lt;p&gt;Далее преведен текст из одного известного HACK-F.A.Q.&lt;br /&gt;&lt;/p&gt;
						&lt;p&gt;Я ничего не знаю, но хочу стать хакером. С чего начать?&lt;/p&gt;
						&lt;p&gt;Поверь, хочешь жить спокойно, лучше не начинать…&lt;/p&gt;
						&lt;p&gt;Но я все-таки очень хочу, что же делать?&lt;/p&gt;
						&lt;p&gt;Ну что ж, тогда стоит начать с того, чтобы не задавать этот вопрос в форуме. &lt;/p&gt;
						&lt;p&gt;Сперва определимся, кто такой хакер: это существо, у которого есть компьютер (ну это обязательно), две руки (одна для мышки, другая, конечно же, для пива), голова (для наушников), и холодильник (ну пиво же не теплым пить!). Если у тебя все это есть, значит у тебя есть все шансы стать настоящим хакером ;) Ах, да, чуть не забыл, еще у хакера должен быть нестандартный образ мышления!&lt;/p&gt;
						&lt;p&gt;Зачем хакеру нестандартный образ мышления?&lt;/p&gt;
						&lt;p&gt;Все очень просто. Хакер на «ты» с компьютером и с Интернетом, а значит, не нуждается ни в чьей помощи – всю информацию он умеет находить в поисковых ресурсах. Если ты усвоишь эту простую истину, то сможешь быстро добиться успехов. Поверь, базы yandex.ru и google.ru содержат ответы на 90% вопросов, так что если не хочешь ждать несколько дней ответа, используй это преимущество. В этом и есть их «маленький секрет»; откуда они так много знают. И вообще не бойся быть оригинальным!&lt;/p&gt;
						&lt;p&gt;Эх.. а я такой ламер, что даже поисковиками пользоваться не умею.&lt;/p&gt;
						&lt;p&gt;Стоп. Ламер – только тот, кто ничего не делает. Помнишь про 90%? Никогда не забывай эту цифру. Заходим на yandex.ru, вводим запрос «Поиск информации с помощью поисковиков» и вуаля – попадаем на страницу &lt;a href=&quot;http://www.poiskinfo.net/stat/st1.php,&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://www.poiskinfo.net/stat/st1.php,&lt;/a&gt; где все подробно описано, как искать и где. Читай, и через 15 минут будешь специалистом по поиску в сети. :)&lt;/p&gt;
						&lt;p&gt;Но если все можно найти, зачем же тогда форум?&lt;/p&gt;
						&lt;p&gt;Во-первых, форум - это сообщество, люди, объединенные общими интересами. Они обсуждают все, начиная от погоды, и заканчивая интересными взломами, но это не значит, что они с радостью будут разбираться с твоей проблемой. &lt;/p&gt;
						&lt;p&gt;Во-вторых, вспомни еще разок про 90%. Остается 10% вопросов, ответов на которые действительно пока нет в поисковиках, либо они так хорошо запрятаны, что ни за что не отыскать. Что ж, тогда у тебя есть все шансы задать свой вопрос первым. Раз он еще не встречался, скорей всего, твои потомки, столкнувшиеся с такой же проблемой, будут попадать именно на твою тему. Поэтому постарайся задать его правильно.&lt;/p&gt;
						&lt;p&gt;Как же спросить правильно?&lt;/p&gt;
						&lt;p&gt;Замечательная статья про то, как задавать вопросы: ln.com.ua/~openxs/articles/smart-questions-ru.html. Постарайся прочитать хотя бы ключевые моменты, это сильно повысит шанс, что тебе ответят и помогут.&lt;/p&gt;
						&lt;p&gt;Блин, а я вот спросил на форуме, но мне не ответили даже через неделю. Да они там сами ничего не знают!!!&lt;/p&gt;
						&lt;p&gt;Значит, ты так и не прочитал эту замечательную статью: ln.com.ua/~openxs/articles/smart-questions-ru.html. Потрать 10-15 минут, чтобы потом не терять дни… Поверь, оно стоит того. &lt;/p&gt;
						&lt;p&gt;Если же у тебя не получается даже это, давай не будем становиться хакерами, ок? :)&lt;/p&gt;
						&lt;p&gt;Какие самые популярные сайты по взлому?&lt;/p&gt;
						&lt;p&gt;Вот некоторые из них: &lt;br /&gt;securitylab.ru &lt;br /&gt;antichat.ru &lt;br /&gt;web-hack.ru &lt;br /&gt;hackzona.ru &lt;br /&gt;XakNet.ru &lt;br /&gt;xakep.ru &lt;br /&gt;void.ru &lt;br /&gt;security.nnov.ru &lt;br /&gt;anonymous.ru &lt;br /&gt;inattack.ru &lt;br /&gt;emanual.ru &lt;br /&gt;sources.ru &lt;br /&gt;codenet.ru&lt;/p&gt;
						&lt;p&gt;В сети действительно много информации для новичков, но там столько терминов! Что такое сплойт, прокси, IP, дефейс и т.п.?&lt;/p&gt;
						&lt;p&gt;Во-первых, многие непонятные слова можно узнать тут: &lt;a href=&quot;http://www.xakep.ru/magazine/xa/049/024/1.asp.&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://www.xakep.ru/magazine/xa/049/024/1.asp.&lt;/a&gt;&lt;/p&gt;
						&lt;p&gt;Кроме того, есть один универсальный способ: Открываем yandex.ru, и пишем там, например, «что такое прокси». Кстати, ты сможешь познакомиться с зачатками искусственного интеллекта этого поисковика, увидев, как он преобразует твой запрос в «прокси – это…». Поэтому не стесняйся задавать ему вопросы типа «что такое …», он все знает. Пусть это будет наш секрет :)&lt;/p&gt;
						&lt;p&gt;Какими необходимыми знаниями нужно обладать, чтобы стать хакером?&lt;/p&gt;
						&lt;p&gt;Во-первых, нужно здорово разбираться хотя бы в одной из операционных систем, Windows, либо *nix. Знать хотя бы основные shell-команды, причем как Windows, так и *nix&lt;/p&gt;
						&lt;p&gt;Очень желательно знание одного из интерпретируемых языков, лучше всего PHP или perl.&lt;/p&gt;
						&lt;p&gt;Без знаний HTML, javascript, CSS придется очень туго.&lt;/p&gt;
						&lt;p&gt;Весьма пригодится умение писать Windows-программки. Соответственно, это C/C++, Delphi или Visual Basic.&lt;/p&gt;
						&lt;p&gt;Умение быстро находить интересующую тебя информацию в поисковиках будет несомненным плюсом. Знание принципов функционирования компьютера, сетей и Интернета в целом. Конечно, все это не охватить сразу, начни с чего-нибудь одного и осваивай постепенно. Со временем поймешь сам, что пригодится, а что нет&lt;/p&gt;
						&lt;p&gt;Я слышал, что все хакеры не пользуются Windows это правда?&lt;/p&gt;
						&lt;p&gt;Не совсем. Дело в том, что большинство серверов - это unix системы. Именно поэтому чем лучше ты будешь знать никсы, тем больше тебе будет «везти» во взломах. А самый лучший способ узнать систему – поставить ее себе на комп. Кроме того, Unix очень привлекателен эффективной работой с сетью. Некоторые технологии, успешно реализованные в никсах, Windows даже не поддерживает, в то время, как отдельные программы вроде Corel Draw пока не имеют аналогов в *nix. Так что в какой ОС работать, это, в принципе, кому как удобней. Если есть желание познакомиться с каким-нибудь никсом, но не хочешь расставаться с Windows, то можешь оставить ее и поставить Linux как дополнительную ОС. Если заинтересовался, тебе прямая дорога на &lt;a href=&quot;http://www.cnews.ru/reviews/articles/index...05/09/30/188154&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://www.cnews.ru/reviews/articles/in &amp;#8230; /30/188154&lt;/a&gt;&lt;/p&gt;
						&lt;p&gt;Как взломать мыло на mail.ru и yandex.ru?&lt;/p&gt;
						&lt;p&gt;Наверное, я тебя разочарую, но почту mail.ru, или на yandex.ru взломать нельзя. Почему?&lt;/p&gt;
						&lt;p&gt;&lt;a href=&quot;http://mail.ru&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://mail.ru&lt;/a&gt;, пожалуй, самая популярная почтовая система. Администрация серверов mail.ru имеет огромные доходы с рекламы, они завлекают пользователей рекламой в печатных изданиях и по телевидению, неужели ты думаешь, они пожалеют денег на хороших специалистов по безопасности? Забудь об этом. И, самое главное, никогда не ведись на предложения «взломать любое мыло на mail.ru за $5» - тебя самым наглым образом кинут. Способов дурачить лохов куча. Самый распространенный – «найден секретный почтовый робот, сообщающий пароль от любого ящика, если прислать ему свой пароль», также предлагают различные проги для взлома ящика «100% работающие и всего за $25».&lt;/p&gt;
						&lt;p&gt;Однако стоп, не все так печально. Что? Я сказал, почту на mail.ru нельзя взломать? Я пошутил :)&lt;/p&gt;
						&lt;p&gt;Если нельзя найти баг в самом сервере, почему бы не найти его в голове владельца ящика? Итак, внимание, самые распространенные способы взлома почты на mail.ru. Само собой, они катят и для других почтовиков.&lt;/p&gt;
						&lt;p&gt;Что ж, приступим:&lt;/p&gt;
						&lt;p&gt;1. Первым делом стоит попробовать подобрать ответ на секретный вопрос. Вероятность мала, но попробовать стоит. К примеру, ответом на &amp;quot;любимое блюдо&amp;quot; чаще всего бывают &amp;quot;шашлык&amp;quot;, или &amp;quot;пельмени&amp;quot;.&lt;/p&gt;
						&lt;p&gt;2. Допустим, мыло vasya-pupkin@mail.ru. Ищешь в поисковиках (достаточно Яндекс, Гугл и Рамблер) все сайты, где он засветился, выписываешь все ники, под которыми он гуляет по сети и все сайты, на которых он зарегистрирован под этими никами. Конечно, если логин типа alex, то ничего не выйдет, нужен уникальный &lt;/p&gt;
						&lt;p&gt;После этого исследуешь все найденные сайты. Если человек давно существует в сети, более чем вероятно, что год-другой назад он зарегился со своим паролем на каком-нибудь superforum2.h14.ru, взломать который не составит большого труда. Пароль от аккаунта на форуме часто совпадает с паролем от мыла.&lt;/p&gt;
						&lt;p&gt;3. Отсылаем человеку троянца в надежде, что он ламер ушастый и клюнет на superFoto.jpg.............exe. Отослать можно запароленный архив csmaps.zip от имени его друга, сказав, что там новая крутая карта CS. Пароль указать в письме. Как правило, юзеры проверяют запароленный архив антивирем, а потом без палева открывают его и запускают exe-шник . Для этих целей вполне подойдет троян Pinch.&lt;/p&gt;
						&lt;p&gt;4. Допустим, ничего не помогло. Человек следит за мылом, меняет пароли и т.д.&lt;/p&gt;
						&lt;p&gt;Не все потеряно. Снова идем на страницу вспоминания пароля mail.ru и ищем, нет ли там ретрива пасса на мыло. Есть? Тогда можно попытаться узнать второе мыло и повторить всю процедурку с начала. Возможно, его человек охраняет не так ревностно.&lt;/p&gt;
						&lt;p&gt;Как взломать мыло на менее защищенных почтовиках: newmail, hotmail…? &lt;/p&gt;
						&lt;p&gt;1. Приятней всего найти багу самому: например, уязвимость в веб-интерфейсе: возможно, где-нибудь спряталась XSS, или даже SQL-inj.&lt;/p&gt;
						&lt;p&gt;2. Если админы до сих пор не почесались сделать защиту от брута, можно попытаться сбрутить пароль. Для этого есть тулзы, например, старый добрый Brutus AET под Windows, либо THC-Hydra под никсы.&lt;/p&gt;
						&lt;p&gt;3. Использовать методы соц-инженерии, описанные для mail.ru&lt;/p&gt;
						&lt;p&gt;Как взломать сервер ***? Вы же можете помочь?&lt;/p&gt;
						&lt;p&gt;Каждый взлом – процесс творческий. И каждый ломает так, как ему нравится. Но, в первую очередь, конечно, стоит досконально изучить «подопытный» сервер. Какая на нем стоит система, какие сервисы, следит ли админ за патчами и обновлениями и т.д. При достаточном опыте хакер может узнать все это имея лишь броузер и telnet-клиент, начинающему же проще всего воспользоваться сканером уязвимостей. Например, SSS-сканером под Windows, или nmap под *nix. &lt;/p&gt;
						&lt;p&gt;Сканер нашел уязвимость и радостно сообщил об этом? Не торопись мчаться на форум с вопросом «nmap выдал мне ***, что с этим делать» - тебя скорей всего пошлют. Вбей ключевые слова из фразы об уязвимости в поисковик (лучше google) – я почти уверен, что ты не первый, кто собирался задавать такой вопрос! А там, где есть вопрос, там есть и ответ :)&lt;/p&gt;
						&lt;p&gt;Если же на сервере стоит старая бажная версия одного из сервисов, пробуй найти под нее сплойты. Они чаще всего имеются на таких сайтах как securitylab.ru. &lt;/p&gt;
						&lt;p&gt;Например, сканер выдал, что на 21 порту висит демон FTP ProFTPD 1.2.7. Открываем &lt;a href=&quot;http://securitylab.ru&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://securitylab.ru&lt;/a&gt;, вводим в поиск ProFTPD и попадаем на эту страницу: &lt;a href=&quot;http://www.securitylab.ru/poc/221962.php?phrase_id=242509.&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://www.securitylab.ru/poc/221962.ph &amp;#8230; id=242509.&lt;/a&gt; Как видишь, тут же можно скачать эксплойт, который даст тебе рута, а это, как ты понимаешь, очень хорошо :)&lt;/p&gt;
						&lt;p&gt;Как пользоваться сплойтами?&lt;/p&gt;
						&lt;p&gt;Очень просто. Запустить сплойт с нужными параметрами, а он все сделает за тебя. Проблема в том, что большинство сплойтов в открытом доступе только в исходниках, то есть, обычный *.txt-файл с кодом на C++ или perl. Если это C++, то сплойт придется предварительно скомпилировать. Сплойты на perl или php компилировать не надо, они исполняются прямо на сервере. Если у тебя есть shell, достаточно залить туда файл и запустить. Если ничего кроме твоей родной Windows у тебя нет, придется скачать и установить один из эмуляторов. Например, cygwin и activePerl. Можно, в принципе, воспользоваться денвером (denwer.ru), но тогда тебе, скорей всего, придется вручную добавить некоторые сетевые библиотеки, которые отсутствуют в конфигурации по умолчанию.&lt;/p&gt;
						&lt;p&gt;Помни, что большинство сплойтов в исходниках имеют «защиту от дурака», то есть специально сделанные синтаксические ошибки, поэтому если в программировании ты абсолютный ноль, придется искать уже исправленный рабочий сплойт.&lt;/p&gt;
						&lt;p&gt;Как взломать сайт?&lt;/p&gt;
						&lt;p&gt;Может быть, ты будешь расстроен, но нет ни чудо-проги lomalka_saitov.exe, ни заклинания «сайт взломайся», ни слова, которое нужно ввести на сайте, чтобы он взломался. &lt;/p&gt;
						&lt;p&gt;Опыт, знания, и упорство – вот три кита, на которых держатся самые успешные взломы. Почитай описания уже совершенных взломов, которых в сети просто до кучи, там все подробно описывается. Прочти 5-10 таких описаний, и получишь представление о том, как взломать сайт. Хотя бы примерно ;)&lt;/p&gt;
						&lt;p&gt;Могу лишь дать несколько рекомендаций:&lt;/p&gt;
						&lt;p&gt;- Очень важно, на каком сервере находится сайт-цель. Возможно, админ не следит за сервером и вовремя не патчит систему. Тебе надо быть в курсе всех последних уязвимостей, чтобы сразу это заметить. Узнать информацию о сервере можно, например, на wwwwhois-service.ru.&lt;/p&gt;
						&lt;p&gt;- Если это сервер крупной хостинг-компании, вроде valuehost, будь уверен, взломать сервер не получится, и натравливать сканер в надежде найти бажный сервис приктически не имеет смысла. В этом случае разумней всего начать с поиска багов на самом сайте, возможно ошибку допустили программисты.&lt;/p&gt;
						&lt;p&gt;- Начни с поиска установленных «сторонних» скриптов: форумов, чатов, гостевых и т.п. А может быть и сам сайт – это какой-нибудь публичный веб-портал вроде php-nuke. Тогда остается лишь узнать версию скрипта и проверить, не найдена ли в нем какая уязвимость.&lt;/p&gt;
						&lt;p&gt;Неплохая статья про взлом вебсайтов: wwwhackzona.ru/hz.php?name=News&amp;amp;file=article&amp;amp;sid=2045&lt;/p&gt;
						&lt;p&gt;Какие уязвимости чаще всего встречаются на сайтах?&lt;/p&gt;
						&lt;p&gt;Основные уязвимости, это, несомненно:&lt;/p&gt;
						&lt;p&gt;1. SQL-инъекции (SQL-injection) &lt;/p&gt;
						&lt;p&gt;SQL инъекция относится к вставке метасимволов SQL в вводимые пользователем данные, что приводит к изменению запроса базе данных. Как правило, взломщики для начала определяют уязвимость сайта к такой атаке (для этого в форму, или в один из параметров url посылается знак одинарной кавычки). Последствия выполнения такой атаки на уязвимом сайте могут находиться в пределах от появления детального сообщения об ошибке, что раскрывает злоумышленнику используемую на сайте технологию, до доступа к закрытым областям сайта или выполнения на сервере произвольных команд операционной системы.&lt;/p&gt;
						&lt;p&gt;Линки по теме:&lt;br /&gt;&lt;a href=&quot;http://securitylab.ru/contest/212083.php&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://securitylab.ru/contest/212083.php&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;http://injection.rulezz.ru/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://injection.rulezz.ru/&lt;/a&gt;&lt;/p&gt;
						&lt;p&gt;2. межсайтовый скриптинг (XSS)&lt;/p&gt;
						&lt;p&gt;Принцип работы межсайтового скриптинга основан на внедрении злонамеренного кода в HTML код страницы, что приводит к выполнению такого кода на машине жертвы, то есть броузером. Чаще всего применяется в гостевых книгах, чатах и форумах.&lt;/p&gt;
						&lt;p&gt;Также XSS представляет опасность, если произвольный код отображается на страницах с расширением shtml, т.е. сервер поддерживает технологию SSI (Server Side Includes). Это может привести к чтению или выполнению произвольных файлов на сервере.&lt;/p&gt;
						&lt;p&gt;Линки по теме:&lt;br /&gt;&lt;a href=&quot;http://www.xakep.ru//magazine/xa/063/082/1.asp&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://www.xakep.ru//magazine/xa/063/082/1.asp&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;http://security.e-gloryon.com/3027306486&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://security.e-gloryon.com/3027306486&lt;/a&gt;&lt;/p&gt;
						&lt;p&gt;3. Прочие баги в головах программистов ;)&lt;/p&gt;
						&lt;p&gt;Ошибки в самом сайте, из-за которых на сайте могут появиться серьезные бреши в безопасности. Например, адрес сайта содержит что-нибудь вроде «?file=», допустим site.ru?show.php&amp;amp;article=../index.asp, но, само собой, это лишь один из вариантов.&lt;/p&gt;
						&lt;p&gt;Линки по теме:&lt;br /&gt;&lt;a href=&quot;http://www.xakep.ru//magazine/xs/047/042/1.asp&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://www.xakep.ru//magazine/xs/047/042/1.asp&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;http://www.xakep.ru//magazine/xa/069/084/1.asp&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://www.xakep.ru//magazine/xa/069/084/1.asp&lt;/a&gt;&lt;/p&gt;
						&lt;p&gt;Как узнать ip сервера, например yandex.ru?&lt;/p&gt;
						&lt;p&gt;Самый быстрый способ – набрать в командной строке «ping yandex.ru»&lt;br /&gt;Ты увидишь что-нибудь вроде &lt;br /&gt;64 bytes from 213.180.204.11: icmp_seq=0 ttl=41 time=60.988 ms&lt;br /&gt;213.180.204.11 – это и есть ip-адрес сервера.&lt;/p&gt;
						&lt;p&gt;Как узнать ip юзера в сети?&lt;/p&gt;
						&lt;p&gt;1. Общаться с ним по аське. Многие icq-клиенты, такие как Miranda IM, SIM и т.п., показывают ip в информации о пользователе. Если не хотите качать продвинутые клиенты, можно воспользоваться специальными программами типа uin2ip, или патчами для стандартных версий ICQ.&lt;/p&gt;
						&lt;p&gt;Кроме того, на сайте wwwleader.ru есть UIN Locator. Вводишь UIN получаешь IP, главное чтобы чел был не в оффлайне.&lt;/p&gt;
						&lt;p&gt;2. Добиться того, чтобы пользователь прислал тебе письмо. Вне зависимости от того, пользуется ли он веб-интерфейсом, или же почтовиком вроде TheBat!, в заголовках сообщения будет указан его ip. В TheBat! Заголовки можно прочитать, нажав правую кнопку и выбрать в контекстном меню «показывать заголовки RFC-822». Ищи текст «Received: from», который находится ближе всего к телу письма – сразу за этими словами будет ip-адрес отправителя.&lt;/p&gt;
						&lt;p&gt;3. Узнать на каких irc-каналах сидит юзер и посмотреть там&lt;/p&gt;
						&lt;p&gt;4. Если ничего не помогает, но очень хочется, не отчаивайся. &lt;/p&gt;
						&lt;p&gt;Если у тебя есть хостинг, на котором можно исполнять perl/php (если нет, можно бесплатно зарегистрировать, например, на h15.ru), то вот еще один способ – выбираешь страничку, на которой есть фотография какого-нибудь случайного человека (допустим, &lt;a href=&quot;http://masters.donntu.edu.ua/2001/ggeo/pavelchak/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://masters.donntu.edu.ua/2001/ggeo/pavelchak/&lt;/a&gt;), полностью копируешь HTML-код в новый файл, например, info.html и сохраняешь его на своем сайте. Рядом создаешь еще один файл index.php, следующего содержания:&lt;/p&gt;
						&lt;p&gt;$message = &amp;quot;Date: &amp;quot; . date(&amp;quot;d.m.Y H:i:s&amp;quot;) . &amp;quot;\nIP: &amp;quot; . $REMOTE_ADDR . &amp;quot;\nServer: &amp;quot; . gethostbyaddr($REMOTE_ADDR) . &amp;quot;\nHTTP_X_FORWARDED_FOR: &amp;quot; . $HTTP_X_FORWARDED_FOR . &amp;quot;\nPage: &amp;quot; . $SERVER_NAME . $REQUEST_URI . &amp;quot;\nQuery: &amp;quot; . $QUERY_STRING . &amp;quot;\nComing from: &amp;quot; . $HTTP_REFERER . &amp;quot;\nBrowser: &amp;quot; . $HTTP_USER_AGENT . &amp;quot;\nFilename: &amp;quot; . $SCRIPT_FILENAME;&lt;/p&gt;
						&lt;p&gt;mail(&amp;quot;admin@mail.ru&amp;quot;, &amp;quot;Requested ip&amp;quot;, $message, &amp;quot;From: admin@mail.ru\nContent-Type: text/plain; charset=windows-1251&amp;quot;, &amp;quot;-fadmin@mail.ru&amp;quot;);&lt;/p&gt;
						&lt;p&gt;$fp = fopen(&amp;quot;log.txt&amp;quot;, &amp;quot;a&amp;quot;);&lt;/p&gt;
						&lt;p&gt;fwrite($fp, str_replace(&amp;quot;\n&amp;quot;, &amp;quot;\t&amp;quot;, $message) . &amp;quot;\n&amp;quot;);&lt;/p&gt;
						&lt;p&gt;fclose($fp); &lt;br /&gt;&lt;/p&gt;
						&lt;p&gt;include(&amp;quot;fil.html&amp;quot;);&lt;/p&gt;
						&lt;p&gt;?&amp;gt;&lt;/p&gt;
						&lt;p&gt;Само собой, мыло admin@mail.ru необходимо заменить на твой почтовый ящик. Эта страничка (index.php) визуально не будет отличаться от оригинала, но логи с ip и параметрами системы юзера отошлются тебе на почту и продублируются в лог-файл (проверь, что у этого файла есть права на запись, например 666, или 777). Кроме того, если человек находится в локальной сети, ты получишь еще и его локальный ip, а если ходит через прокси, то поимеешь ip как прокси, так и его собственный.&lt;/p&gt;
						&lt;p&gt;Теперь твоя задача – заманить юзера на эту страничку. Само собой, не стоит просто присылать ее по аське. Мой любимый способ такой: «Привет [тут имя того, чей ip хочешь узнать], ты помнишь Таню ([а вот тут как раз линк на твою страничку с фоткой])? Она сказала, ты можешь помочь мне с дизайном (взломом, разведением кактусов и т.п). &lt;/p&gt;
						&lt;p&gt;Действует 100% :) &lt;/p&gt;
						&lt;p&gt;Я знаю ip компьютера/юзера, как его взломать&lt;/p&gt;
						&lt;p&gt;IP – это уникальный адрес компьютера. Так же как для рассылки корреспонденции у каждого жителя планеты должен быть уникальный домашний адрес (Страна, город, улица, дом, квартира), каждый компьютер должен иметь свой уникальный ip-адрес, чтобы другие компьютеры в сети смогли передать ему информацию.&lt;/p&gt;
						&lt;p&gt;Поэтому твой вопрос равносилен вопросу «как взломать квартиру друга, если я знаю его домашний адрес».&lt;/p&gt;
						&lt;p&gt;Надеюсь, ты понимаешь, что просто знание ip недостаточно. Подробнее про ip-адрес, можно прочитать тут: &lt;a href=&quot;http://www.sluh.freenet.kz/p8/12.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://www.sluh.freenet.kz/p8/12.html&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 10:28:38 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=3#p3</guid>
		</item>
		<item>
			<title>[b]Взлом сетей Wi-Fi[/b]</title>
			<link>http://fotty.bbon.ru/viewtopic.php?pid=2#p2</link>
			<description>&lt;p&gt;Каждая беспроводная сеть имеет как минимум два ключевых компонента, базовую станцию (stations) и точку доступа (access points). Беспроводные сети могут функционировать в двух режимах: ad-hoc (peer-to-peer) и infrastructure. В первом случае сетевые карточки напрямую общаются друг с другом, во втором случае при помощи точек доступа, в этом случае такие точки служат в качестве Ethernet мостов. &lt;/p&gt;
						&lt;p&gt;Клиент и точка перед передачей данных должны установить соединение. Как не трудно догадаться между точкой и клиентом может существовать всего три состояния: &lt;/p&gt;
						&lt;p&gt;• Аутентификация не пройдена и точка не опознана &lt;/p&gt;
						&lt;p&gt;• Аутентификация пройдена, но точка не опознана &lt;/p&gt;
						&lt;p&gt;• Аутентификация принята и точка присоединена &lt;/p&gt;
						&lt;p&gt;Обратно не трудно понять, что обмен данными может идти только в третьем случае. До установления соединения стороны обмениваются управляющими пакетами, точка доступа передает опознавательные сигналы с фиксированным интервалом, клиент, приняв такой пакет, начинают аутентификацию посылкой опознавательного фрейма, после авторизации клиент посылает пакет присоединения, а точка - пакет подтверждения присоединения беспроводного клиента к сети. &lt;br /&gt;&lt;/p&gt;
						&lt;p&gt;Механизмы безопасности &lt;/p&gt;
						&lt;p&gt;Стандарт 802.1 для беспроводных сетей предусматривает несколько механизмов обеспечения безопасности сети. В этом разделе мы рассмотрим пять основных, наиболее используемых. &lt;/p&gt;
						&lt;p&gt;Wired Equivalent Protocol &lt;/p&gt;
						&lt;p&gt;Wired Equivalent Protocol, или WEP, разработан был автором стандарта 802.1. Основная функция WEP - шифрование данных при передаче по радио и предотвращение неавторизованного доступа в беспроводную сеть. По умолчанию WEP отключен, однако его можно легко включить и в таком случае он начнет шифровать каждый исходящий пакет. Для шифрования WEP использует алгоритм RC4. &lt;/p&gt;
						&lt;p&gt;WEP 2 &lt;/p&gt;
						&lt;p&gt;Представленный в 2001 году после обнаружения множества дырок в первой версии, WEP 2 имеет улучшенный механизм шифрования, и поддержку Cerberus V. Ясень пень, что полную поддержку такой системы еще не кто не осилил. &lt;/p&gt;
						&lt;p&gt;Open System Authentication &lt;/p&gt;
						&lt;p&gt;Система аутентификации, по умолчанию используемая в протоколе 802.11. Собственно системы как таковой нет - аутентификацию проходит любой, кто запрашивает. В случае OSA не помогает даже WEP, так как в ходе экспериментов было выяснено, что пакет аутентификации посылается НЕ зашифрованным. &lt;/p&gt;
						&lt;p&gt;Access Control List &lt;/p&gt;
						&lt;p&gt;В протоколе 802.11 не описывается, но используется многими в качестве дополнения к стандартным методам. Основа такого метода - клиентский Ethernet MAC, уникальный для каждой карточки. Точка доступа ограничивает доступ к сети в соответствии со своим списком МАС адресов, есть клиент в списке и доступ разрешен, нет - значит, нет. &lt;/p&gt;
						&lt;p&gt;Closed Network Access Control &lt;/p&gt;
						&lt;p&gt;Тут не намного сложнее: либо администратор разрешает любому пользователю присоединяться к сети, либо в нее может войти только тот, кто знает ее имя, SSID. Сетевое имя в таком случае служит секретным ключом. &lt;/p&gt;
						&lt;p&gt;Атаки &lt;/p&gt;
						&lt;p&gt;Ну, вот собственно мы и подошли к самой интересной части статьи. В ней будут определены наиболее часто используемые способы проникновения в беспроводные сети. По некоторым оценкам 95% сетей практически беззащитны и каждый из описываемых методов имеет 98% шанс на успех. Зачем можно использовать такую сеть? Ну, например, для получения бесплатного доступа в Интернет, изучения материалов, представленных в сети, да и просто для развлечения, ведь в отличие от стационарной сети поимка хакера в беспроводной среде - довольно не тривиальное дело. &lt;/p&gt;
						&lt;p&gt;Access Point Spoofing &amp;amp; MAC Sniffing &lt;/p&gt;
						&lt;p&gt;Список доступа вполне пригоден к использованию совместно с правильной идентификацией пользователей в этом самом списке. В случае же с МАС адресом Access Control List очень просто побороть, так как такой адрес просто изменить (беспроводные сетевые карты позволяют программно менять МАС адрес) и еще проще перехватить, так как он даже в случае с WEP передается в открытом виде. Таким образом, элементарно проникнуть в сеть, защищенную Access Control List и использовать все ее преимущества и ресурсы. &lt;/p&gt;
						&lt;p&gt;В случае наличия у вас в загашнике собственной точки доступа есть другая возможность: устанавливаете Аccess Рoint рядом с существующей сетью - если ваш сигнал сильнее оригинального, то клиент подключится именно к вам, а не к той сети, передав при этом не только МАС адрес, но и пароль и прочие данные. &lt;/p&gt;
						&lt;p&gt;WEP Attacks &lt;/p&gt;
						&lt;p&gt;Для объяснения всех атак сначала, думаю, необходимо рассказать о том, как же шифруются данные в WEP. Итак, вот весь план: &lt;/p&gt;
						&lt;p&gt;• Чистые данные проходят проверку целостности, и выдается контрольная сумма (integrity check value, ICV). В протоколе 802.11 для этого используется СRC-32. &lt;/p&gt;
						&lt;p&gt;• ICV добавляется в конец данных. &lt;/p&gt;
						&lt;p&gt;• Генерируется 24-битный вектор инициализации (IV) и за ним привязывается секретный ключ. Полученное значение является исходным для генерации псевдослучайного числа. &lt;/p&gt;
						&lt;p&gt;• Генератор случайных чисел выдает ключевую последовательность. &lt;/p&gt;
						&lt;p&gt;• Данные XOR&#039;ятся с этой ключевой последовательностью. &lt;/p&gt;
						&lt;p&gt;• Вектор инициализации добавляется в конец и все это передается в эфир. &lt;/p&gt;
						&lt;p&gt;Plaintext атака &lt;/p&gt;
						&lt;p&gt;В таком взломе атакующий знает исходное послание и имеет копию зашифрованного ответа. Недостающее звено это ключ. Для его получения атакующий посылает цели небольшую часть данных и получает ответ, получив, его мы, находим 24-битный вектор инициализации, используемый для генерирования ключа - нахождение ключа в таком случае всего лишь задача брутфорса. &lt;/p&gt;
						&lt;p&gt;Другой вариант - обычный XOR. Если у нас есть посланный plain text и его зашифрованный вариант, то мы просто XOR&#039;им шифр и на выходе получаем ключ, который вместе с вектором дает возможность &amp;quot;грузить&amp;quot; пакеты в сеть без аутентификации на точке доступа. &lt;/p&gt;
						&lt;p&gt;Повторное использование шифра &lt;/p&gt;
						&lt;p&gt;Атакующий выцепляет из пакета ключевую последовательность. Так как алгоритм шифрования WEP на вектор отводит довольно мало места, атакующий может перехватывать ключевой поток, используя разные IV, создавая для себя их последовательность. Таким образом, хакер может расшифровывать сообщения используя все тот же XOR, когда по сети пойдут зашифрованные данные при помощи сгенерированных ранее ключевых потоков их можно будет расшифровать. &lt;/p&gt;
						&lt;p&gt;Атака Fluhrer-Mantin-Shamir &lt;/p&gt;
						&lt;p&gt;Летом прошло года работник Cisco Scott Fluhrer, Itsik Mantin и Adi Shamir из научного института Израиля, обнаружили уязвимость в алгоритме Key Scheduling Algorithm (KSA) который работает в RC4. С ее помощью можно получить как 24 битный ключ WEP, так и 128 битный ключ WEP 2. На всеобщее обозрение было представлено две программы - Air snort и WEPCrack. &lt;/p&gt;
						&lt;p&gt;Low-Hanging Fruit &lt;/p&gt;
						&lt;p&gt;Собственно как ясно из названия дело тут даже не в атаке, а в добыче халявы из незащищенных сетей. Большинство беспроводных сетей абсолютно не защищены, в них не требуется авторизации и даже не используют WEP, так что человек с беспроводной сетевой карточкой и сканером может легко подключиться к Access Point&#039;у и использовать все ресурсы им предоставляемые. Отсюда и название - низко висящие фрукты, которые сорвать не составляет никакого труда... &lt;/p&gt;
						&lt;p&gt;Безопасность сетей &lt;/p&gt;
						&lt;p&gt;Итак, мы рассмотрели основные проблемы безопасности, настало время поговорить и о защите от хакеров. В этой главе опишем основные методы борьбы с незаконным проникновением: &lt;/p&gt;
						&lt;p&gt;Фильтрация МАС адресов &lt;/p&gt;
						&lt;p&gt;В этом варианте администратор составляет список МАС адресов сетевых карт клиентов. В случае нескольких АР необходимо предусмотреть, что бы МАС адрес клиента существовал на всех, дабы он мог беспрепятственно перемещаться между ними. Однако этот метод легко победить (смотрите наши предыдущие статьи по теме), так что в одиночку его использовать не рекомендуется. &lt;/p&gt;
						&lt;p&gt;WEP &lt;/p&gt;
						&lt;p&gt;Обеспечивает шифрование при передаче данных между клиентом и сервером, однако как мы уже описывали, так же легко поддается взлому. Использовать его, тем не менее, можно и нужно, дабы не облегчать взломщику его задачу. &lt;/p&gt;
						&lt;p&gt;SSID (Network ID) &lt;/p&gt;
						&lt;p&gt;Первой попыткой обезопасить беспроводные сети была система Сетевых Идентификаторов или SSID. При попытке клиента подключится к АР на него передается семизначный алфавитно-цифровой код, используя метку SSID мы можем быть уверены, что только знающие его клиенты будут присоединяться к нашей сети. При использовании WEP сетевой идентификатор при передаче шифруется, однако на конечном устройстве он хранится в виде plain-text&#039;a, так что злоумышленник, имеющий доступ к девайсам сможет его прочесть. &lt;/p&gt;
						&lt;p&gt;Firewall &lt;/p&gt;
						&lt;p&gt;По ходу дела единственная вещь, которая может помочь от неавторизованного доступа. Доступ к сети должен осуществляться при помощи IPSec, secure shell или VPN и брандмауэр должен быть настроен на работу именно с этими безопасными соединениями - они и помогут избежать присутствия нежелательных &amp;quot;насекомых&amp;quot;. &lt;/p&gt;
						&lt;p&gt;AccessPoints &lt;/p&gt;
						&lt;p&gt;Точку доступа надо настраивать на фильтрацию МАС адресов, кроме того, физически сам девайс необходимо изолировать от окружающих. Рекомендуется так же конфигурировать точку только по telnet, отрубив конфигурацию через браузер или SNMP. &lt;/p&gt;
						&lt;p&gt;Структура сети &lt;/p&gt;
						&lt;p&gt;Основы безопасности необходимо закладывать еще на стадии проектирования беспроводной сети. Вот несколько фишек, которые помогут &amp;quot;протянуть&amp;quot; правильную сеть: &lt;/p&gt;
						&lt;p&gt;• Защищайте свою сеть при помощи VPN или access control list &lt;/p&gt;
						&lt;p&gt;• Точка доступа не должна быть напрямую подсоединена к локальной сети даже если WEP включен &lt;/p&gt;
						&lt;p&gt;• Точка доступа никогда не должна находиться позади брандмауэра &lt;/p&gt;
						&lt;p&gt;• Доступ клиентам беспроводной сети надо давать по secure shell, IPSec или виртуальные частные сети. Они обеспечивают приемлемый уровень безопасности.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (moder)</author>
			<pubDate>Mon, 19 Mar 2012 00:32:07 +0400</pubDate>
			<guid>http://fotty.bbon.ru/viewtopic.php?pid=2#p2</guid>
		</item>
	</channel>
</rss>
