<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java Bulgaria &#187; Ръководство</title>
	<atom:link href="http://javabg.eu/category/java/%d1%80%d1%8a%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be/feed/" rel="self" type="application/rss+xml" />
	<link>http://javabg.eu</link>
	<description>Всичко за Java</description>
	<lastBuildDate>Tue, 24 Jan 2012 16:46:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>ТИП МАСИВ &#8211; 12 урок</title>
		<link>http://javabg.eu/2010/01/%d1%82%d0%b8%d0%bf-%d0%bc%d0%b0%d1%81%d0%b8%d0%b2-12-%d1%83%d1%80%d0%be%d0%ba/</link>
		<comments>http://javabg.eu/2010/01/%d1%82%d0%b8%d0%bf-%d0%bc%d0%b0%d1%81%d0%b8%d0%b2-12-%d1%83%d1%80%d0%be%d0%ba/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 18:17:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ръководство]]></category>
		<category><![CDATA[уроци]]></category>

		<guid isPermaLink="false">http://javabg.eu/?p=344</guid>
		<description><![CDATA[Масивът е един от най-използваните в програмирането типове данни. Почти винаги, когато в програмата се появява необходимост от работа с редица еднотипни стойности се въвежда и съответен масив. Пр. 1 Необходимост от обработване на редица от еднотипни данни В програма се обработва средният успех на учениците от един клас (например с цел намиране на средния [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img style="border:0px;" src="thumbs/jn.jpg" alt="" /><br />
Масивът е един от най-използваните в програмирането типове данни. Почти винаги, когато в програмата се появява необходимост от работа с редица еднотипни стойности се въвежда и съответен масив.</p>
<p>Пр. 1 Необходимост от обработване на редица от еднотипни данни</p>
<p>В програма се обработва средният успех на учениците от един клас (например с цел намиране на средния успех на целия клас или определяне на ученика с най-висок среден успех). Масивът е удобно средство за представяне на редицата от данни за средния успех, а именно – всеки елемент на масива ще съответства на средния успех на един ученик. Ще отбележим следните три характеристики на масива: а) елементите на масива са <strong>краен брой</strong> (в случая &#8211; равен на броя на учениците в класа); б) елементите на масива са от <strong>един и</strong> <strong>същи тип</strong> (в разглеждания пример средният успех на всеки ученик е реално число) и в) елементите на масива са <strong>подредени</strong> по някакъв признак (тук например може да считаме, че елементите са подредени според номерата на учениците).</p>
<p><strong>Масивът</strong> е структурен тип данни, чиито стойности се представят с крайна редица от еднотипни стойности.</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="347" valign="top">Номер в класа (индекс)</td>
<td width="76" valign="top">1</td>
<td width="76" valign="top">2</td>
<td width="70" valign="top">&#8230;</td>
</tr>
<tr>
<td width="347" valign="top">Среден успех</td>
<td width="76" valign="top">4,66</td>
<td width="76" valign="top">6.00</td>
<td width="70" valign="top">&#8230;</td>
</tr>
</tbody>
</table>
<p>На всеки елемент на масива може да се съпостави неговият пореден номер в установената наредба между елементите, наречен <strong>индекс</strong> на елемента. Индексът определя мястото на елемента в масива. В случая с учениците на всеки среден успех се съпоставя поредният номер на ученика (таблица 1).</p>
<p>Възможно е елементите на масив да са подредени по два и повече признака. Така например оценките на всеки ученик в класа могат да се подредят по номера на ученика и по изучавания предмет (таблица 2). Броят на признаците, по които са подредени елементите на масива, се нарича <strong>размерност</strong> на масив.</p>
<p>При двумерните масиви мястото на елемента в масива се определя от два индекса. Например в таблица 2 оценката 3.00 съответства на двойката индекси <strong>1</strong> и <strong>Английски език</strong>.</p>
<p>Таблица 2:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td rowspan="2" width="69" valign="top">Номер в   класа</td>
<td colspan="4" width="475" valign="top">Учебен   предмет</td>
</tr>
<tr>
<td width="109" valign="top">Английски   език</td>
<td width="108" valign="top">Биология</td>
<td width="128" valign="top">Информатика</td>
<td width="130" valign="top">&#8230;</td>
</tr>
<tr>
<td width="69" valign="top">1</td>
<td width="109" valign="top">3,00</td>
<td width="108" valign="top">5,00</td>
<td width="128" valign="top">6,00</td>
<td width="130" valign="top">&#8230;</td>
</tr>
<tr>
<td width="69" valign="top">2</td>
<td width="109" valign="top">5,00</td>
<td width="108" valign="top">6,00</td>
<td width="128" valign="top">6,00</td>
<td width="130" valign="top">&#8230;</td>
</tr>
<tr>
<td width="69" valign="top">3</td>
<td width="109" valign="top">4,00</td>
<td width="108" valign="top">5,00</td>
<td width="128" valign="top">5,00</td>
<td width="130" valign="top">&#8230;</td>
</tr>
<tr>
<td width="69" valign="top">&#8230;</td>
<td width="109" valign="top">&#8230;</td>
<td width="108" valign="top">&#8230;</td>
<td width="128" valign="top">&#8230;</td>
<td width="130" valign="top">&#8230;</td>
</tr>
</tbody>
</table>
<p>Едномерните и двумерните масиви са най-използваните структури от еднотипни данни в ЕП.</p>
<p>Масивът в Java е променлива и като такава, преди използването му трябва да бъде деклариран. Декларацията може да се извърши по два начина – тип, следван от [] или тип и име, следвано от []. Тази декларация не заделя памет за масива. Заделянето се извършва с помощта на оператора <strong>new</strong> т.е. масивът в Java е обект.</p>
<p>Стъпките за създаване на масив са три: деклариране, заделяне на памет и нейната инициализация.</p>
<p>Пр. 1</p>
<p>int [] ArrInteger = new int[5];</p>
<p>Ако се извърши само декларация на името на масива, в паметта се заделя място, което се инициализира по-късно с оператора <strong>new</strong>. Декларирането на променливата на масива и заделянето на памет могат да се извършат с отделни оператори.</p>
<p>Пр. 2</p>
<p>int [] ArrInteger;          <em>//</em><em>деклариране на променливата масив</em></p>
<p>ArrInteger = new int[5];   <em>//</em><em>заделяне на памет за 5 елемента</em><em> </em></p>
<p>За достъп до елемент на масива се използва индекс, като индексирането започва от 0. Следователно <span style="text-decoration: underline;">последният елемент</span> <span style="text-decoration: underline;">има индекс, равен на размера на масива минус единица</span>. Тогава последният елемент на масива от Пр. 2 ще има индекс <strong>4</strong>. За да се обърнем към елемент на масива, се изписва името на масива, последвано от квадратни скоби с индекса на елемента, към който искаме достъп.</p>
<p>Пр. 3</p>
<p>ArrInteger[2];</p>
<p><strong>Инициализацията на масива</strong> може да се извърши по два начина:</p>
<ul>
<li>Инициализация, чрез присвояване на начални стойности на всеки елемент на масива поотделно:</li>
</ul>
<p>ArrInteger[0]=10;</p>
<p>ArrInteger[1]=15;</p>
<p>ArrInteger[2]=20;</p>
<p>ArrInteger[3]=21;</p>
<p>ArrInteger[4]=13;</p>
<ul>
<li>Инициализиране при деклариране на масива, без да се използва оператора new:</li>
</ul>
<p>int ArrInteger [] = {10, 15, 20, 21, 13};</p>
<p>boolean array2 [] = {true, false, true};</p>
<p>в този случай компилаторът сам определя брой на елементите (размера на масива), заделя необходимата памет и я инициализира със зададените стойности.</p>
<p>Елементите на масива може да са от всеки тип, позволен за езика. Те може дори да са също от тип масив.</p>
<p>Масивът поддържа свойство <strong>lentgh</strong>, което връща дължината му и е удобно за определяне на горната граница при индексиране. Долната е винаги 0.</p>
<p>Пр. 4</p>
<p>for (int I=0; I&lt;ArrInteger.length;I++)</p>
<p>ArrInteger[I]=0;  <em>// </em><em>нулиране на масива от горния пример</em></p>
<p><strong>Многомерни масиви</strong></p>
<p>Двумерният масив в езика Java се декларира с използване на две размерности. <strong>По същество той се явява едномерен масив от скрити указатели към едномерни масиви.</strong></p>
<p><strong> </strong></p>
<p>Пр. 5</p>
<p>int [][] matrix = new int [10][100];</p>
<p><em>//</em><em>матрица с размерност 10х100</em><em> </em></p>
<p>Съответно достъпът до елемент от двумерен масив се извършва чрез посочване на два индекса:</p>
<p>Пр. 6</p>
<p>matrix [2][35];</p>
<p><strong>Инициализиране на многомерни масиви:</strong></p>
<p>а) int myarrayX [][] = {{5, 6, 3},</p>
<p>{7, 2, 1},</p>
<p>{4, 0, 9}};</p>
<p>б) int myarrayY [][] = {{1},</p>
<p>{2, 3},</p>
<p>{4, 5, 6},</p>
<p>{7, 8, 9}};</p>
<p>При обработка на масиви, когато се налага обхождане на всички техни елементи, обикновено се използва операторът за цикъл <strong>for</strong>.</p>
<p>Пр. 7</p>
<ul>
<li><strong>Извеждане на едномерен масив на екран</strong></li>
</ul>
<p>int myarray [] = {1, 2, 3, 4, 5};</p>
<p>for (int I=0; I&lt;myarray.length; I++)</p>
<p>{</p>
<p>Syatem.out.println(myarray[I]);</p>
<p>}</p>
<ul>
<li><strong>Извеждане на многомерен масив на екран</strong><strong></strong></li>
</ul>
<p>int myarray2 [][]={{1, 2, 3},</p>
<p>{4, 5, 6}};</p>
<p>for (int I=0; I&lt;myarray2.length;I++)</p>
<p>{</p>
<p>for (int K=0; K&lt;myarray2.length; K++)</p>
<p>{</p>
<p>System.out.println(myarray[I][K]);</p>
<p>}</p>
<p>}</p>
<p><strong>Примерна програма</strong></p>
<p>Пр. 8 Съставете програма, която по дадени стойности х<sub>1</sub>, х<sub>2</sub>,&#8230;, х<sub>12</sub>, отговарящи на месечния оборот (в левове) на фирма за всеки от дванадесетте месеца на изминалата година, определя средномесечната стойност на оборота.</p>
<p><strong>Проектиране</strong>: Програмата въвежда и обработва еднотипно 12 стойности от реален тип, които е най-добре да се представят като реален масив (например с име ) с 12 елемента. Средномесечната стойност на оборота се определя по формулата за намиране на средно аритметично:</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="23" height="0"></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>Изчисляването по формулата може да се програмира с помощта на оператор за цикъл с параметър, защото предварително е известно, че трябва да се съберат 12 числа.</p>
<img src="http://javabg.eu/?ak_action=api_record_view&id=344&type=feed" alt="" />

<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://javabg.eu/2010/01/%d1%82%d0%b8%d0%bf-%d0%bc%d0%b0%d1%81%d0%b8%d0%b2-12-%d1%83%d1%80%d0%be%d0%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ПОДАЛГОРИТМИ И ПОДПРОГРАМИ &#8211; 11 урок</title>
		<link>http://javabg.eu/2010/01/%d0%bf%d0%be%d0%b4%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%b8-%d0%b8-%d0%bf%d0%be%d0%b4%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%b8-11-%d1%83%d1%80%d0%be%d0%ba/</link>
		<comments>http://javabg.eu/2010/01/%d0%bf%d0%be%d0%b4%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%b8-%d0%b8-%d0%bf%d0%be%d0%b4%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%b8-11-%d1%83%d1%80%d0%be%d0%ba/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 18:16:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ръководство]]></category>
		<category><![CDATA[уроци]]></category>

		<guid isPermaLink="false">http://javabg.eu/?p=342</guid>
		<description><![CDATA[Отделните части на един алгоритъм могат да бъдат отделени и представени като подалгоритми. В случаите, когато се налага група от едни и същи действия да се изпълнява на различни места в алгоритъма, тяхното оформяне като подалгоритъм може да съкрати в голяма степен усилията по съставянето на този алгоритъм и да съкрати записването му. Един алгоритъм [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img style="border:0px;" src="thumbs/jn.jpg" alt="" /><br />
Отделните части на един алгоритъм могат да бъдат отделени и представени като подалгоритми. В случаите, когато се налага група от едни и същи действия да се изпълнява на различни места в алгоритъма, тяхното оформяне като подалгоритъм може да съкрати в голяма степен усилията по съставянето на този алгоритъм и да съкрати записването му. Един алгоритъм се разделя на подалгоритми в два случая – когато е сложен и разделянето улеснява неговото съставяне и програмиране, или когато разполагате с готови подалгоритми, които можете да използвате.</p>
<p>Пр. 1 Подреждане на три реални числа в намаляващ ред</p>
<p>Алгоритъмът за решаване на задачата е следният:</p>
<ol>
<li>Въведете три реални числа и ги запомнете (в променливи a, b и c).</li>
<li>Ако a&lt;b, разменете стойностите на a и b.</li>
<li>Ако b&lt;c, разменете стойностите на b и c.</li>
<li>Ако a&lt;b, разменете стойностите на a и b.</li>
<li>Изведете стойностите на a, b и c (вече подредени).</li>
<li>Край на работата.</li>
</ol>
<p>В алгоритъма се повтарят многократно две действия – сравняване и размяна на стойностите на две променливи. Следователно, ако предварително съставим тези подалгоритми, можем да ги използваме за описанието му.</p>
<p>Коя е основната разлика между един подалгоритъм и алгоритъма, който го използва? В повечето случаи основният алгоритъм получава от потребителя стойности за началните данни и съобщава крайните резултати отново на потребителя. Докато подалгоритъмът обикновено получава началните си данни от основния алгоритъм и му връща крайните си резултати. Например подалгоритъмът за сравняване на две числа получава стойностите, които се сравняват, от основния алгоритъм, а резултатът от сравнението се връща отново към основния алгоритъм, за да се използва в следващите му действия.</p>
<p><strong>Подпрограми</strong></p>
<p>Програмата, реализираща основния алгоритъм за решаването на определена задача, се нарича главна (или основна) програма.</p>
<p>Всяка подпрограма, съдържаща се в главната програма, реализира подалгоритъм на основния алгоритъм. Изпълнението на подпрограмата се предизвиква с указване на нейното име и списък от съответни параметри. Подпрограмата може да се изпълни за различни стойности на входните данни (зададени чрез параметри от списъка)  и да върне различни резултати (отново зададени в същия списък).</p>
<p>Например ако подалгоритъмът за размяна на стойностите на две променливи е реализиран като подпрограма, то неговите параметри трябва да са два – променливите, чиито стойности се разменят.</p>
<p>Основната програма обикновено си взаимодейства с потребителя за въвеждането и извеждането на данни, докато подпрограмите ползват данни от главната програма и връщат в нейната среда получените резултати.</p>
<ul>
<li>Възможно е някои подпрограми, подобно на основната програма, да ползват описани в тях други подпрограми.</li>
<li>Вече създадена и проверена, една подпрограма може да се използва в различни програми.</li>
</ul>
<p><strong>Подпрограми в </strong><strong>Java</strong><strong> </strong></p>
<p>В езика Java се допускат два вида подпрограми, наречени съответно <strong>процедури и функции</strong> т.е. подпрограмите, това са всъщност <strong>методите</strong>, реализиращи съответния алгоритъм.</p>
<p><strong>Подпрограмите-функции</strong> служат за описание на подалгоритми, при изпълнението на които се получава един единствен резултат, който се присвоява на функцията.</p>
<p><strong>Подпрограмите-процедури</strong> могат да се използват за получаване на произволен брой резултати, но самата процедура не приема стойност.</p>
<p>Методите на класа имат следният синтаксис:</p>
<p><strong>&lt;</strong><strong>служебна дума</strong><strong>&gt; </strong><strong> тип</strong><strong> &lt;</strong><strong>име</strong><strong>&gt; </strong><strong>(</strong><strong>[</strong><strong>параметър</strong><strong>1];[</strong><strong>параметър</strong><strong>2] ;…]</strong><strong>) </strong><strong> </strong></p>
<p><strong> { </strong><strong> </strong></p>
<p><strong>тяло</strong><strong>;</strong><strong></strong></p>
<p><strong> }</strong></p>
<p>Служебната дума може да бъде една или повече.</p>
<p>В следващата таблица ще обясним приложението на служебните думи:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="149" valign="top">Служебна дума</td>
<td width="387" valign="top">
<h6>Приложение</h6>
</td>
</tr>
<tr>
<td width="149" valign="top">рublic</td>
<td width="387" valign="top">Показва, че метода е достъпен навсякъде, където е   достъпен класа, в който е описан.</td>
</tr>
<tr>
<td width="149" valign="top">рrivate</td>
<td width="387" valign="top">Показва, че метода не е достъпен за подкласовете.</td>
</tr>
<tr>
<td width="149" valign="top">рrotected</td>
<td width="387" valign="top">Показва, че метода е достъпен само за класа,   неговите подкласове и пакета.</td>
</tr>
<tr>
<td width="149" valign="top">рrivate   protected</td>
<td width="387" valign="top">Показва, че метода е достъпен само за класа и   неговите подкласове.</td>
</tr>
<tr>
<td width="149" valign="top">final</td>
<td width="387" valign="top">Показва, че метода не може да се предефинира в   подклас.</td>
</tr>
<tr>
<td width="149" valign="top">аbstract</td>
<td width="387" valign="top">Показва, че метода няма тяло (реализация).</td>
</tr>
<tr>
<td width="149" valign="top">native</td>
<td width="387" valign="top">Показва, че реализацията на метода е направена на   език, различен от Java.</td>
</tr>
<tr>
<td width="149" valign="top">synchronized</td>
<td width="387" valign="top">Показва, че в един момент само една програма може да   изпълнява дадения метод.</td>
</tr>
</tbody>
</table>
<p>Когато се посочва тип се реализира <strong>подпрограма-функция</strong>, а типът се нарича тип на функцията (т.е. типът на резултата, който ще бъде върнат). За да бъде върнат резултат на функцията, то в тялото й, трябва да зададем <strong>return(&lt;</strong><strong>израз</strong><strong>&gt;)</strong><strong>. </strong>Когато връщаме число, като стойност на функцията, не е необходимо да пишем скоби.</p>
<p>Когато вместо тип се използва служебната дума <strong>void</strong> – се реализира <strong>подпрограма-процедура</strong>. Служебна дума <strong>void</strong>, показва че на самият метод не се присвоява стойност т.е. това е подпрограма-процедура.</p>
<p>Структурата на подпрограмата е аналогична на структурата на основната програма.</p>
<p>Параметрите в скобите се наричат <strong>формални параметри</strong>. Те служат за задаване на входните (началните) и изходните данни (резултати) на подпрограмите. Поради тази причина тези параметри се наричат формални. Обикновено резултатът на функцията е само една стойност. За име на тази стойност се счита името на самата функция, а списъкът от формални параметри на функцията определя само входните данни.</p>
<p>Параметрите, които дефинираме в тялото на подпрограмата се наричат <strong>локални параметри</strong>, а тези, дефинирани в тялото на класа – <strong>глобални</strong>.</p>
<p>Ако в подпрограма искаме да използваме някой от глобалните параметри, то трябва да укажем това с помощта на служебната дума <strong>this.</strong><strong></strong></p>
<p><strong> </strong></p>
<p>Пр. 2  Нека е даден следният фрагмент от програма:</p>
<p>class Fragment {</p>
<p>int x;  <em>//<strong> глобални</strong> параметри</em></p>
<p>int y;</p>
<p>int z;</p>
<p>…</p>
<p>void Exampl (int x; int a) {</p>
<p><em>//<strong>локален </strong>параметър с име като на </em></p>
<p><em> // глобален</em><em> </em><em>и др. <strong>локален</strong> параметър</em></p>
<p>x=2;   <em>//присвоява стойност на <strong>локален</strong> </em></p>
<p><em>//параметър</em></p>
<p>a=3;            <em>//присвоява стойност на <strong>локален </strong></em></p>
<p><em>// параметър</em></p>
<p>this.x=7;     <em>//присвоява стойност на <strong>глобален </strong></em></p>
<p><em>// параметър</em></p>
<p>this.y = 1;   <em>//присвоява стойност на <strong>глобален</strong> </em></p>
<p><em>//параметър</em></p>
<p>this.z = 0;   <em> //присвоява стойност на <strong>глобален</strong> </em></p>
<p><em>//параметър</em></p>
<p>&#8230;</p>
<p>}</p>
<p>…</p>
<p>}</p>
<p>Пр. 3   Деклариране на процедура и функция:</p>
<ol>
<li>Деклариране на <strong>процедура</strong>, която разменя стойностите на две променливи a и b:</li>
</ol>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="11" height="0"></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>, но смяната на тези два локални параметъра не засяга глобалните параметри, от които те са взели стойностите си.</p>
<ol>
<li>Деклариране на <strong>функция</strong>, която сравнява две реални числа х и у, и ако х&lt;у връща стойност <strong>true</strong>, а в противен случай &#8211; <strong>false</strong>:</li>
</ol>
<p>Допустими са подпрограми и без параметри. Например процедура, която отпечатва на екран текст “Добър ден” няма нужда от входни данни и не връща резултат, който да се използва от основната програма.</p>
<p><strong>Изпълнение на подпрограми</strong></p>
<p>Дефинирането на една подпрограма определя какво трябва да е нейното действие, но не и кога (при изпълнение на главната програма) да се изпълни това действие.</p>
<p>Изпълнението на подпрограма става чрез нейното извикване от главната програма. Това става чрез името на подпрограмата и списък от <strong>фактически</strong> <strong>параметри</strong>, за които тя трябва да бъде изпълнена.</p>
<p>Фактическите параметри, при извикване на подпрограмата, трябва да са толкова на брой, колкото са формалните параметри при нейното описание, като се запазва съответствието между типовете в реда на изброяването им.</p>
<p>Ако в програмата е указано активиране на подпрограма, то на това място се изпълняват операторите от блока на подпрограмата, като формалните параметри се заместват със зададените фактически параметри, т.е. ролята на фактическите параметри е да получат конкретните стойности на входните и изходни данни на подпрограмата.</p>
<p>Пр. 4 Активиране на процедури и функции:</p>
<p>1. void main() {</p>
<p>boolean b;</p>
<p>float x = 23.45;</p>
<p>float y = 23.455;</p>
<p>…</p>
<p>b=Little(x, y); <em>//</em><em>извикване (активиране) на функция </em></p>
<p><em> //</em><em>Little</em><em> и присвояване на нейната стойност на променлива </em><em>b</em><em> </em></p>
<p>…</p>
<p>}</p>
<p>2. Ако искаме да разменим местата на две променливи T и Р, то активирането на процедурата ще бъде:</p>
<p>change_a_b(Т, Р);</p>
<p>3. Ако искаме да отпечатаме резултата от сравнението на две числа 2*L и K:</p>
<p>System.out.println(Little(2*L, K));</p>
<p>Заместването на формалните параметри на подпрограмите с различни фактически параметри при активиране на подпрограмата се нарича <em>механизъм за предаване на параметри</em>. Механизмът за предаване на параметри позволява подпрограмата да се изпълнява за различни входни данни и да получава различни изходни резултати.</p>
<p>Пр. 5<strong> Примерна програма за подреждане на три реални числа в намаляващ ред:</strong><strong></strong></p>
<img src="http://javabg.eu/?ak_action=api_record_view&id=342&type=feed" alt="" />

<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://javabg.eu/2010/01/%d0%bf%d0%be%d0%b4%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%b8-%d0%b8-%d0%bf%d0%be%d0%b4%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%b8-11-%d1%83%d1%80%d0%be%d0%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ИНТЕРФЕЙС &#8211; 10 урок</title>
		<link>http://javabg.eu/2010/01/%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d1%84%d0%b5%d0%b9%d1%81-10-%d1%83%d1%80%d0%be%d0%ba/</link>
		<comments>http://javabg.eu/2010/01/%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d1%84%d0%b5%d0%b9%d1%81-10-%d1%83%d1%80%d0%be%d0%ba/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 18:14:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ръководство]]></category>
		<category><![CDATA[уроци]]></category>

		<guid isPermaLink="false">http://javabg.eu/?p=340</guid>
		<description><![CDATA[Освен затварянето на данните и програмите в клас и наследяване на класовете, третата характеристика на обектно-ориентираното програмиране е полиморфизмът. Това е използване на един и същ програмен код за еднакви или подобни действия върху различни данни. Той се реализира при обръщение към метод от обект и в зависимост от типа на параметрите и самия обект [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img style="border:0px;" src="thumbs/jn.jpg" alt="" /><br />
Освен затварянето на данните и програмите в клас и наследяване на класовете, третата характеристика на обектно-ориентираното програмиране е полиморфизмът. Това е използване на един и същ програмен код за еднакви или подобни действия върху различни данни. Той се реализира при обръщение към метод от обект и в зависимост от типа на параметрите и самия обект се изпълнява един или друг програмен код.</p>
<p><strong>Полиморфизъм </strong></p>
<p>Съществуването на две или повече функции с еднакви имена, които извършват еднакви (подобни) действия се нарича полиморфизъм. Той е свързан с предефиниране на функцията. Предефинирането може да стане статично, в рамките на един клас (статичен полиморфизъм) или динамично, при наследяване (динамичен полиморфизъм).</p>
<p><strong>Статичен полиморфизъм</strong> – да се предефинира (статично) един метод (overload) означава да се предостави негова друга реализация с използване на различен брой или тип на параметрите. В един клас могат да се дефинират методи с едно и също име, но сигнатурата им трябва да е различна. За да се считат за един метод, реализиращ статичен полиморфизъм, методите с еднакви имена трябва да връщат един и същ тип.</p>
<p>Пр. 1</p>
<p>class Equality(){</p>
<p>static boolean intEqual(int i, int j){return i==j;}</p>
<p>static boolean intEqual(int i, double d){return i==(int)d;}</p>
<p>static boolean intEqual(double d, int j){return (int)d==j;}</p>
<p>static boolean intEqual(double d, double e){return (int)d==(int) e;}</p>
<p>static boolean intEqual(int i, char c){return i==(int)c;}</p>
<p>static boolean intEqual(char c, int j){return (int)c==j;}</p>
<p>static boolean intEqual(char c, char d){return (int)c==(int)d;}</p>
<p>}</p>
<p><em>//</em><em>използване</em></p>
<p>if(Equality.intEqual(x, y)){<em>//</em><em>в зависимост от типа на х  и у ще</em></p>
<p><em> //се извивка метод</em></p>
<p>…</p>
<p>}</p>
<p><strong>Динамичен полиморфизъм</strong> – да се предефинира (динамично) или преопредели един метод (override) означава да се предостави нова реализация на дадения метод, различна от наследената от суперкласа реализация. Новата реализация в подкласа има същото име, същия брой и тип на параметрите и връща същия резултат като реализацията на метода в подкласа.</p>
<p>Пр. 2</p>
<p>import java.io.*;</p>
<p>class Base {</p>
<p>int a = 1;</p>
<p>void printing() {</p>
<p>System.out.println(“Печата в клас Base”);</p>
<p>}</p>
<p>void basing(){</p>
<p>System.out.println(“Метод на класа Base”);</p>
<p>printing();</p>
<p>System.out.println(“Стойността на променливата е:”+a);</p>
<p>}</p>
<p>}</p>
<p>class New extends Base{</p>
<p>int a = 2;</p>
<p>void printing(){</p>
<p>System.out.println(“Печата в клас New”);</p>
<p>}</p>
<p>}</p>
<p>class OverrideTest {</p>
<p>public static void main(String[]) throws IOException {</p>
<p>System.out.println(“Използваме обект на клас Base…”);</p>
<p>Base b = new Base();</p>
<p>b.printing();</p>
<p>b.basing();</p>
<p>System.out.println(“Използваме обект на клас Newt…”);</p>
<p>New n = new New();</p>
<p>n.printing();</p>
<p>n.basing();</p>
<p>}</p>
<p>}</p>
<p>Един клас може да бъде дефиниран като последен със служебната дума <strong>final</strong>. Такъв клас не може да бъде наследяван, т.е. не може да има подкласове. Създаването на класове<strong> final</strong> позволява защита на информацията. Методите от тип последен също се дефинират със служебната дума <strong>final</strong> и не могат да се преопределят в подкласовете.</p>
<p><strong>Абстрактни методи и класове – </strong>това са методи, които са обявени в един клас, но не са реализирани в него. Такъв клас се нарича абстрактен, явявайки се всъщност само шаблон. Действиетелната реализация на метода се предоставя на подкласовете посредством преопределяне. В Java за указване на абстрактен метод се използва ключовата дума <strong>abstract</strong>.</p>
<p>Пр. 3</p>
<p><strong>abstract</strong> class Shape {</p>
<p><em>//</em><em>абстрактния метод </em><em>getArea()</em><em> се реализира от</em></p>
<p><em>// подкласа</em></p>
<p>public abstract double getArea();</p>
<p>…</p>
<p>}</p>
<p>Класът  Shape е обявен с ключовата дума <strong>abstract</strong><strong>, </strong>показваща, че даденият клас включва в себе си един абстрактен (или нереализиран) метод. Това означава, че в действителност не може да бъде създаден обект от класа Shape, а само обекти от подкласовете, които осигуряват реализацията на метода getArea().</p>
<p>Класът, съдържащ абстрактни методи се нарича абстрактен, в противен случай – функционален.</p>
<p><strong>Интерфейс</strong> – това е начин на задължаване на класовете да имат определени свойства. Той по структура прилича на  класа, като включва полета и методи, но се различава от него по това, че  не може да се създават негови екземпляри. Методите в интерфейса не трябва да се реализират, а полетата могат да бъдат само константи.</p>
<p>На интерфейса може да се гледа като на абстрактен клас, съдържащ само абстрактни методи и константи.</p>
<p>Пр. 4</p>
<p>interface Helpable {</p>
<p>public void help();</p>
<p>}</p>
<p>Интерфейсът в Java се използва, когато се създава клас, който  го реализира. Реализацията означава включване на реализации на всички методи на интерфейса в класа. За да се укаже, че дадения Java клас реализира методите на определения интерфейс, се използва служебната дума <strong>implements</strong>. Всеки клас може да реализира неограничен брой интерфейси.</p>
<p>Пр. 5</p>
<p>class Topic implements Helpable {</p>
<p>String strNameTopic;</p>
<p>public void help() {</p>
<p>System.out.println(“Помощ за ”+strNameTopic);</p>
<p>}</p>
<p>}</p>
<p>Интерфейсите могат да се наследяват и синтаксисът на интерфейса в общия случай е следния:</p>
<p>[public]  <strong>interface</strong> &lt;<strong>име</strong>&gt; [extends &lt;интерфейс&gt;…]  <strong>{</strong></p>
<p><em> </em><em>//</em><em>тяло, съдържащо заглавни редове на методи и константи</em></p>
<p><strong>}</strong><strong> </strong></p>
<p><strong> </strong></p>
<p>Където тялото съдържа <strong><span style="text-decoration: underline;">само</span></strong> заглавни редове на методи и константи, а модификаторът за достъп public се използва, ако интерфейсът ще бъде използван извън пакета. За разлика от класа,  всеки интерфейс може да наследява много интерфейси. (Класът може да наследява един клас, но да реализира много интерфейси.)</p>
<p>В интерфейсът може да се използва в качеството на тип данни. Може да се обявяват променливи от тип интерфейс. Всеки обект от клас, реализиращ интерфейса, може да се присвои на присвои на променлива от типа на интерфейса.</p>
<img src="http://javabg.eu/?ak_action=api_record_view&id=340&type=feed" alt="" />

<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://javabg.eu/2010/01/%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d1%84%d0%b5%d0%b9%d1%81-10-%d1%83%d1%80%d0%be%d0%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>НАСЛЕДЯВАНЕ &#8211; 9 урок</title>
		<link>http://javabg.eu/2010/01/%d0%bd%d0%b0%d1%81%d0%bb%d0%b5%d0%b4%d1%8f%d0%b2%d0%b0%d0%bd%d0%b5-9-%d1%83%d1%80%d0%be%d0%ba/</link>
		<comments>http://javabg.eu/2010/01/%d0%bd%d0%b0%d1%81%d0%bb%d0%b5%d0%b4%d1%8f%d0%b2%d0%b0%d0%bd%d0%b5-9-%d1%83%d1%80%d0%be%d0%ba/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 18:13:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ръководство]]></category>
		<category><![CDATA[уроци]]></category>

		<guid isPermaLink="false">http://javabg.eu/?p=338</guid>
		<description><![CDATA[В езика Java (както в останалите обекно-ориентирани езици за програмиране) класовете могат да се наследяват от други класове. Така веднъж създадени, класовете могат да се използват като база за дефиниране на нови класове, които слабо се отличават от първите. Новите класове, наследяват елементите на съществуващите и могат да променят поведението им с дефиниране на методи [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img style="border:0px;" src="thumbs/jn.jpg" alt="" /><br />
В езика Java (както в останалите обекно-ориентирани езици за програмиране) класовете могат да се наследяват от други класове. Така веднъж създадени, класовете могат да се използват като база за дефиниране на нови класове, които слабо се отличават от първите. Новите класове, наследяват елементите на съществуващите и могат да променят поведението им с дефиниране на методи със същите имена.</p>
<p><strong>Работа с повече от един клас</strong></p>
<p>Реалните програми използват повече от един клас за решаване на определена задача. Възможни са два подхода за вмъкване на класове – всеки клас да бъде в нов файл или няколко класа да са в един файл. Двата подхода имат следните различия:</p>
<ol>
<li>Няколко класа в един файл:</li>
</ol>
<p>В този случай само един от класовете може да има име, съвпадащо с името на файла. Именно този клас ще бъде видим от другите файлове и се нарича <strong>основен</strong>, а останалите класове са <strong>помощни</strong>. За да са видими, те трябва да бъдат декларирани със служебната дума <strong>public</strong>.</p>
<p>Пр. 1</p>
<p><em>// начало на </em><em>Example.java</em></p>
<p>class Example {</p>
<p>int a;</p>
<p>void main (String[] arg) {</p>
<p>Extra e = new Extra();</p>
<p>…</p>
<p>}</p>
<p>}</p>
<p>class Extra {</p>
<p>int x;</p>
<p>…</p>
<p>}</p>
<p><em>// </em><em>край на </em><em>Example.java</em></p>
<p>Въпреки че класът Extra е дефиниран след основния клас Example, той може да бъде използван в него.</p>
<ol>
<li>Класове в различни файлове:</li>
</ol>
<p>Възможно е всеки клас от една програма да се разполага в отделен файл с име, съвпадащо с името на класа. Така класовете по подразбиране са видими.</p>
<p><strong>Наследяване на класовете</strong></p>
<p>Един Java клас може да се обяви като наследник на някакъв  друг клас. Това става чрез служебната дума <strong>extends</strong>.</p>
<p>Пр. 2</p>
<p>class Base {</p>
<p>&#8230; <em>//</em><em>определяне на данни и методи</em></p>
<p>}</p>
<p>class New extends Base {</p>
<p>&#8230; <em>//</em><em>определяне на данни и методи</em></p>
<p>}</p>
<p>В новия клас New се съдържат всички данни и методи, определени в класа Base и още някои собствени декларации. Така новият клас се явява разширение на класа Base. Предимството на пораждане на класове един от друг е очевидно – възможност за многократно използване на вече въведена програма.</p>
<p>Пр. 3</p>
<p>class Door { <em>//</em><em> описание на обикновена врата</em></p>
<p>boolean stateOpen;</p>
<p>void open() {stateOpen = true; }</p>
<p>void close() {StateOpen = false;}</p>
<p>}</p>
<p>class LockingDoor extends Door {<em>//</em><em> описание на врата, която </em></p>
<p><em>//се заключва с ключ. Автоматично се наследяват (включват)</em></p>
<p><em> // stateOpen, open</em><em>()</em><em> </em><em>и </em><em>close</em><em>()</em></p>
<p>boolean stateLocked;</p>
<p>void  lock() { stateLocked = true;}</p>
<p>void unlock() { stateLocked = false;}</p>
<p>class SecretDoor extends Door { <em>//</em><em>описание на врата, която се </em></p>
<p><em> //заключва с код. Автоматично се наследяват (включват)</em></p>
<p><em> //stateOpen</em><em>,</em><em> open </em><em>и </em><em>close</em></p>
<p>…</p>
<p>}</p>
<p>class LockingAlarmedDoor extends LockingDoor {<em>//</em><em>описание на</em></p>
<p><em>//врата &#8230;Автоматично се наследяват (включват)</em></p>
<p><em> //</em> <em>stateOpen, open</em><em>,</em><em> close</em><em>,</em><em> stateLocked</em><em>,</em><em> lock</em><em>, и</em><em> unlock</em></p>
<p>…</p>
<p>}</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="175" height="30" bgcolor="white">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>Door</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p><strong>Наследяването от примера е онагледен</strong><strong>o</strong><strong> на следната диаграма:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="35" height="15"></td>
<td width="187"></td>
<td width="77"></td>
<td width="187"></td>
</tr>
<tr>
<td height="54"></td>
<td rowspan="2" align="left" valign="top"></td>
<td></td>
<td align="left" valign="top"></td>
</tr>
<tr>
<td height="45"></td>
</tr>
</tbody>
</table>
<p><strong>Суперклас и подклас</strong></p>
<p>Когато се дефинира наследяване един клас се явява наследник на друг. Както казахме, в този случай първият включва в себе си всички елементи на втория. Вторият се нарича <strong>суперклас</strong> или базов, а първият – <strong>подклас</strong> или извлечен. Наследяването се задава при декларация на подкласа със служебната дума <strong>extends</strong>.</p>
<p>Пр. 3</p>
<p>class Base {</p>
<p><em>//</em><em>елементи на базовия клас (суперклас)</em></p>
<p>}</p>
<p>class New <strong>extends</strong> Base {</p>
<p><em>//</em><em>елементи на извлечения клас (подклас)</em></p>
<p>}</p>
<p>При наследяването се добавят нови членове данни и/или методи, като се запазват и всички данни и методи на суперкласа. Методите и данните на суперкласа се наследяват в подкласа.</p>
<p>Елементите на суперкласа се използват в подкласа директно със задаване на тяхното име. Когато има елементи на класа и подкласа с едно и също име, за достъп до елементите на класа  се използва служебната дума <strong>super</strong>.</p>
<p>Пр. 4</p>
<p>class Base {</p>
<p>int x, y;</p>
<p>}</p>
<p>class New extends Base {</p>
<p>int z, y;</p>
<p>void example() {</p>
<p>x = 1;                     <em>//</em> <em>х от суперклас </em><em>Base</em></p>
<p>y = 1;           <em>//</em> <em>у отизвлечен клас </em><em>New</em></p>
<p><strong>super.y</strong> = 1; <em>//</em> <em>достъп до елемент у на суперклас</em></p>
<p><em>//</em><em>Base</em></p>
<p>z = 1;          <em>//</em> <em>от извлечен клас</em> <em>New</em></p>
<p>}</p>
<p>}</p>
<p><strong>Достъп </strong></p>
<p>Пред членовете данни и подпрограмите на класа може да се използва модификатор за достъп. Съответно:</p>
<ul>
<li>Скрит достъп: <strong>private</strong>. С този модификатор един елемент се обявява за скрит за всички методи, които са извън класа, в който е елемента;</li>
</ul>
<p>Пр. 5</p>
<p>class Alfa {</p>
<p>private int privateDatum;</p>
<p>private void privateMethod() {</p>
<p>System.out.println(“Method from Alfa”);</p>
<p>…</p>
<p>}</p>
<p>class Beta {</p>
<p>void example() {</p>
<p>Alfa e = new alfa();</p>
<p>e.privateDatum = 1; <em>//</em> <strong><em>невъзможно!</em></strong></p>
<p>e.privateMеthod();   <em>//</em> <strong><em>невъзможно!</em></strong><strong> </strong></p>
<p>…</p>
<p>}</p>
<p>}</p>
<ul>
<li>Видим достъп: <strong>public</strong>. С този модификатор елемента се обявява за видим и достъпен от всички външни програми. Видимите променливи могат да бъдат четени и да се променя тяхната стойност. Поради тази причина много рядко променливите имат такъв модификатор.</li>
</ul>
<p>Пр. 6</p>
<p>class Alfa {</p>
<p>private int privateDatum;</p>
<p>private void privateMethod() {</p>
<p>System.out.println(“Method from Alfa”);</p>
<p>public int publicDatum;</p>
<p>public void publicMethod() {</p>
<p>System.out.println(“Method from Alfa”);</p>
<p>…</p>
<p>}</p>
<p>class LetterA {</p>
<p>void example() {</p>
<p>Alfa e = new Аlfa();</p>
<p>e.privateDatum = 1;  <em>//</em> <strong><em>невъзможно!</em></strong></p>
<p>e.privateMеthod();    <em>//</em> <strong><em>невъзможно!</em></strong></p>
<p>e. publicDatum = 2;  <em>//</em> <em>възможно</em></p>
<p>e. publicMethod();    <em>//</em> <em>възможно</em></p>
<p>…</p>
<p>}</p>
<p>}</p>
<ul>
<li>Защитен достъп: <strong>protected</strong>. Това е комбинация между скрития и видимия достъп. Всеки елемент, който е защитен, е видим в собствения си клас и във всички негови преки или косвени подкласове, а е скрит за всички останали части на програмата.</li>
</ul>
<p>Пр. 7</p>
<p>class Alfa {</p>
<p>private int privateDatum;</p>
<p>private void privateMethod() {</p>
<p>System.out.println(“Method from Alfa”);</p>
<p>protected int protectedDatum;</p>
<p>protected void protectedMethod() {</p>
<p>System.out.println(“Method from Alfa”);</p>
<p>…</p>
<p>}</p>
<p>class LetterA extends Alfa {</p>
<p>void example() {</p>
<p>Alfa e = new Аlfa();</p>
<p>e.privateDatum = 1;     <em>//</em><em> </em><strong><em>невъзможно!</em></strong></p>
<p>e.privateMеthod();       <em>//</em> <strong><em>невъзможно!</em></strong></p>
<p>e.protectedDatum = 2;  <em>//</em><em> възможно</em></p>
<p>e.protectedMethod();    <em>//</em> <em>възможно</em></p>
<p>…</p>
<p>}</p>
<p>}</p>
<p align="center"><strong><em> </em></strong></p>
<p align="center"><strong><em> </em></strong></p>
<p align="center"><strong><em> </em></strong></p>
<img src="http://javabg.eu/?ak_action=api_record_view&id=338&type=feed" alt="" />

<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://javabg.eu/2010/01/%d0%bd%d0%b0%d1%81%d0%bb%d0%b5%d0%b4%d1%8f%d0%b2%d0%b0%d0%bd%d0%b5-9-%d1%83%d1%80%d0%be%d0%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ОБОБОЩЕНИЕ: ОСНОВНИ ТИПОВЕ ДАННИ И ОПЕРАТОРИ &#8211; 8 урок</title>
		<link>http://javabg.eu/2010/01/%d0%be%d0%b1%d0%be%d0%b1%d0%be%d1%89%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%bd%d0%b8-%d1%82%d0%b8%d0%bf%d0%be%d0%b2%d0%b5-%d0%b4%d0%b0%d0%bd%d0%bd%d0%b8-%d0%b8-%d0%be%d0%bf%d0%b5/</link>
		<comments>http://javabg.eu/2010/01/%d0%be%d0%b1%d0%be%d0%b1%d0%be%d1%89%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%bd%d0%b8-%d1%82%d0%b8%d0%bf%d0%be%d0%b2%d0%b5-%d0%b4%d0%b0%d0%bd%d0%bd%d0%b8-%d0%b8-%d0%be%d0%bf%d0%b5/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 18:11:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ръководство]]></category>
		<category><![CDATA[уроци]]></category>

		<guid isPermaLink="false">http://javabg.eu/?p=336</guid>
		<description><![CDATA[Алгоритми, ЕП и програми Всеки алгоритъм задава начин за решаване на съответна задача. Алгоритмите се различават по възможните множества от входни данни, получаваните резултати, правилата за достигане на резултата и др. Алгоритмите се характеризират (и отличават помежду си) по седем параметри. В зависимост от типа на съставящите ги команди алгопритмите се разделят на три основни [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img style="border:0px;" src="thumbs/jn.jpg" alt="" /><br />
<strong>Алгоритми, ЕП и програми</strong></p>
<p>Всеки <strong>алгоритъм</strong> задава начин за решаване на съответна задача. Алгоритмите се различават по възможните множества от входни данни, получаваните резултати, правилата за достигане на резултата и др. Алгоритмите се характеризират (и отличават помежду си) по седем параметри.</p>
<p>В зависимост от типа на съставящите ги команди алгопритмите се разделят на три основни вида – <strong>последователни (линейни), разклонени и циклични. </strong><strong> </strong></p>
<p>Основните начини за <strong>представяне на алгоритми</strong> са чрез използване на естествени езици (словесно описание), графични изображения (блок-схемни описания) и различни специализирани езици.</p>
<p><strong>ЕП</strong> (езици за програмиране) са специализирани езици, предназначени за описание на алгоритми, които ще бъдат изпълнявани от компютър.</p>
<p><strong>Програмата</strong> представя алгоритъма във форма и вид, които могат да се възприемат и изпълняват от компютърна система.</p>
<p>Най-общо програмата се състои от две части – част за описание на данните (определя типа на данните, техните имена и вид – константи или променливи) и част за описание на тяхната обработка (състои се от оператори, представящи обработката на данните).</p>
<p><strong>Типове данни</strong></p>
<p>Всеки тип данни може да се разглежда като съвкупност от следните <strong>три множества</strong>:</p>
<ul>
<li>множество от <strong>стойности</strong> (константи на типа), които могат да се присвояват на променливите от типа;</li>
<li>множество от <strong>операции</strong>, в които могат да участват величините (константи и променливи) от типа;</li>
<li>множество от <strong>отношения</strong> (релации) между величините (константи и променливи) от типа.</li>
</ul>
<p>В уроци 1-8 разгледахме така наречените <strong>прости типове данни</strong>. Стойностите на тези типове са неделими (за разлика от стойностите на структурните типове данни). Най-използваните прости типове данни (цял, реален, знаков и логически) обикновено са вградени в универсалните ЕП и могат да се използват непосредствено в програмите. Такива типове се наричат <strong>стандартни</strong> <strong>типове данни</strong>. Освен това в ЕП на програмиста се предоставят и средства за създаване на собствени прости типове данни на базата на стандартни типове данни.</p>
<p>Стандартните прости типове в езика Java са реален (<strong>float</strong>; <strong>double</strong>), целочислен (<strong>byte; short; int; long</strong>), знаков (<strong>char</strong>) и логически (<strong>boolean</strong>).</p>
<p>Ограниченият тип в Java  може да се определя от програмиста.</p>
<p>Величините от прост тип имат стойности, които са неделими. За разлика от тях стойностите на величините от структурен тип могат да се разглеждат като съставени от повече стойности, наречени компоненти или елементи на съответната съставна стойност. Всяка от компонентите на съставната стойност принадлежи на друг, предварително определен тип.</p>
<p>Възможно е всички компоненти на един структурен тип да са от един и същи тип, но има и структурни типове, чиито компоненти могат да принадлежат на различни типове.</p>
<p><strong>Изрази и приоритет на операциите</strong></p>
<p>Изразът в програмата е правило за определяне на стойност от определен тип чрез комбиниране по подходящ начин на величини от различни типове, допустими операции с тях и кръгли скоби. В изразите като аргумент могат да участват и стойности на функции. Пример за такъв изпаз е: a + Math.pow(x,2).</p>
<p>При срещане на израз в програмата неговата стойност се намира с отчитане на приоритета на срещаните операции. Приоритетът на операциите в езика Java (в намаляващ ред) е, както следва:</p>
<ul>
<li>постфиксни – &lt;израз&gt;++, &lt;израз&gt;&#8211;;</li>
<li>унарни &#8211; ++&lt;израз&gt;, &#8211;&lt;израз&gt;, +&lt;израз&gt;, -&lt;израз&gt;, !&lt;израз&gt;;</li>
<li>мултипликативни &#8211; *, /, %;</li>
<li>адитивни &#8211; +, -;</li>
<li>отношения &#8211; &lt;, &lt;=, &gt;, &gt;=, instanceof;</li>
<li>еднквост &#8211; ==, !=;</li>
<li>логическо “И” &#8211; &amp;&amp;;</li>
<li>логическо “ИЛИ” &#8211; ||;</li>
<li>присвояване &#8211; =, +=, -=, /=, %=;</li>
</ul>
<p><strong>Оператори </strong></p>
<p>Операторите в ЕП задават определена обработка на данните. Същевременно някои от тях дават възможност да се определи редът на изпълнение на други оператори.</p>
<p>При съставянето на линейни програми обикновено се използват следните оператори: оператор за <strong>въвеждане</strong> на данни, оператор за <strong>извеждане</strong> на резултати и оператор за <strong>присвояване</strong>. В ЕП Java съответните оператори са System.in.read(), System.out.print() и “=” и са представители на т.нар <strong>елементарни (прости) оператори</strong>.</p>
<p><strong>Структурните оператори</strong>, за разлика от простите, могат да включват в тялото си и други оператори.</p>
<p>За да се обедини <strong>последователност</strong> от оператори в Java, се използват фигурни скоби “<strong>{</strong>…<strong>}</strong>”.</p>
<p>За реализация на разклонени алгоритми в ЕП са предвидени различни <strong>оператори за разклонение</strong>. В Java има два оператора – условен оператор <strong>if</strong> (за избор между два възможни варианта) и оператор <strong>switch</strong> (за избор между произволен брой варианти).</p>
<p>ЕП предлагат удобни средства за организация на <strong>цикли</strong>. Това са т.нар. оператори за цикъл, с помощта на които можем да накараме компютъра да изпълни голям брой повтарящи се действия, без да е необходимо да записваме всички извършващи се  действия.</p>
<p>В езика за програмиране Java има три оператора за цикъла – цикъл с предусловие <strong>while</strong>, цикъл със следусловие <strong>do…while </strong>и цикъл с параметър <strong>for</strong>.</p>
<p>На фигура 1 са представени основните оператори в Java:</p>
<p>Фиг. 1:</p>
<p>оператори</p>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="134" height="16"></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>последователност     разклонение       повторение</p>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="230" height="14"></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="118" height="55" bgcolor="white">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>с параметър                                  for</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="103" height="102" bgcolor="white">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>многова-риантен     избор</p>
<p>switch</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="102" height="78" bgcolor="white">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>условен     оператор    if</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="102" height="78" bgcolor="white">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>съставен</p>
<p>оператор</p>
<p>{…}</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="427" height="3"></td>
<td width="27"></td>
<td width="113"></td>
</tr>
<tr>
<td height="10"></td>
<td align="left" valign="top"></td>
</tr>
<tr>
<td height="35"></td>
</tr>
<tr>
<td height="67"></td>
<td colspan="2" align="left" valign="top"></td>
</tr>
<tr>
<td height="16"></td>
</tr>
<tr>
<td height="68"></td>
<td colspan="2" align="left" valign="top"></td>
</tr>
</tbody>
</table>
<p>За да можете да използвате един оператор в програма, е необходимо да знаете две неща – как се записва (синтаксис) и как се изпълнява (семантика).</p>
<p>Следващите два примера включват почти всички изучени до момента елементи на език за програзиране Java.</p>
<p>Пр. 1   Програма реализираща разклонен алгоритъм</p>
<p>Да се състави програма на Java, която да пресмята обиколката (периметъра) и лицето на триълник по зададени дължини на страните a, b и c и да определя вида на триъгълника – разностранен, равнобедрен, равностранен.</p>
<p><strong>Проектиране</strong></p>
<p>Програмата изисква три променливи a, b и c от реален тип, в които ще се съхраняват дължините на страните на триъгълника. Въвеждаме и логическа променлива Flag, стойността на която ще се определя в зависимост от това дали съществува триъгълник с дължини на страните равни на въведените стойности a, b и c. Променливата p е предназначена за съхраняване стойността на полупериметъра, а S – на лицето на триъгълника. S и p са от реален тип.</p>
<p>Ще използваме известните формули от математиката за изчисляване на полупериметъра и лицето на триъгълника по Херонова формула:</p>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="306" height="19"></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>След въвеждане на стойностите на a, b и c се извършва проверка съществува ли триъгълник с дължини на страните a, b и c. Видът на триъгълника се определя чрез сравняване на дължините на неговите страни.</p>
<p><strong>Програмиране </strong></p>
<p>Пр. 2   Програма, реализираща цикличен алгоритъм</p>
<p>Да се отпечата на екран таблицата за умножение на числата от 10 до 20.</p>
<p><strong>Проектиране </strong></p>
<p>Ще използваме два вложени цикъла, за да можем да изведем на екран всички възможни произведения. Също така, ще ни бъдат необходими две целочислени променливи I и J, които ще бъдат броячи.</p>
<p><strong>Програмиране </strong><strong> </strong></p>
<img src="http://javabg.eu/?ak_action=api_record_view&id=336&type=feed" alt="" />

<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://javabg.eu/2010/01/%d0%be%d0%b1%d0%be%d0%b1%d0%be%d1%89%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%bd%d0%b8-%d1%82%d0%b8%d0%bf%d0%be%d0%b2%d0%b5-%d0%b4%d0%b0%d0%bd%d0%bd%d0%b8-%d0%b8-%d0%be%d0%bf%d0%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ПОВТАРЯЩИ СЕ ДЕЙСТВИЯ (ПРОДЪЛЖЕНИЕ) &#8211; 7 урок</title>
		<link>http://javabg.eu/2010/01/%d0%bf%d0%be%d0%b2%d1%82%d0%b0%d1%80%d1%8f%d1%89%d0%b8-%d1%81%d0%b5-%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b4%d1%8a%d0%bb%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-7-%d1%83/</link>
		<comments>http://javabg.eu/2010/01/%d0%bf%d0%be%d0%b2%d1%82%d0%b0%d1%80%d1%8f%d1%89%d0%b8-%d1%81%d0%b5-%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b4%d1%8a%d0%bb%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-7-%d1%83/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 18:09:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ръководство]]></category>
		<category><![CDATA[уроци]]></category>

		<guid isPermaLink="false">http://javabg.eu/?p=334</guid>
		<description><![CDATA[Почти всички примери за цикли, разгледани в предишния урок, имат едно общо свойство: колко пъти ще се повтори изпълнението на тялото зависи от обработваните данни, т.е. при съставяне на програмата този брой е неизвестен. Изключение в това отношение прави само цикълът от пример 2, тялото на който се изпълнява винаги четири пъти. За по-ефективно записване [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img style="border:0px;" src="thumbs/jn.jpg" alt="" /><br />
Почти всички примери за цикли, разгледани в предишния урок, имат едно общо свойство: колко пъти ще се повтори изпълнението на тялото зависи от обработваните данни, т.е. при съставяне на програмата този брой е неизвестен.</p>
<p>Изключение в това отношение прави само цикълът от пример 2, тялото на който се изпълнява винаги четири пъти. За по-ефективно записване на цикли, за които предварително е известно колко пъти ще се изпълнят, в повечето езици за програмиране има специален оператор, наречен <strong>цикъл с параметър</strong>.</p>
<p>Тук по-конкретно ще разгледаме как изглежда този цикъл в езика за програмиране Java.</p>
<p><strong>Оператор за повторение </strong><strong>for</strong></p>
<p>При оператора за цикъл с параметър тялото се изпълнява по веднъж за всяка една стойност от предварително определена редица от стойности на даден параметър.</p>
<p>Операторът с параметър има следният вид:</p>
<p><strong>for(</strong>&lt;<em>израз1</em>&gt;;&lt;<em>израз2</em>&gt;;&lt;<em>израз3</em>&gt;<strong>) {</strong></p>
<p>&lt;оператор1&gt;;[[оператор2;]…;[операторN;]]  <em>//</em><em>тяло</em></p>
<p><strong>}</strong></p>
<p>Където &lt;израз1&gt; е оператор за инициализация, &lt;израз2&gt; е логически израз, а &lt;израз3&gt; е оператор, изпълняващ се след тялото на цикъла. Всъщност &lt;израз1&gt; ни задава началната стойност на параметъра (трябва да е от дискретен тип), &lt;израз2&gt; &#8211; крайната стойност, а &lt;израз3&gt; &#8211; стъпката с която се изменя параметъра. Цикълът се изпълнява, като започва от началната стойност на променливата и докато логическият израз има стойност <strong>true</strong>, като параметъра се изменя със зададената стъпка в &lt;израз3&gt;.</p>
<p>Когато тялото съдържа само един оператор, то може да се опише без фигурни скоби, но ако са повече, то фигурните скоби са задължителни.</p>
<p>Пр. 1  Цикъл с параметър</p>
<p>Управляващата променлива е от целочислен тип а тялото на цикъла се състои от два оператора:</p>
<p>for (int I=0; I&lt;=15; I++) {<em>//</em><em>докато</em><em> I</em><em> е по-малко или равно на 15</em></p>
<p>J= I*I; <em>//на</em><em> J</em><em> присвоява стойност</em><em> I*I</em><em>, отпечатва тази</em></p>
<p>System.out.print(J+”, “); <em>//стойност и увеличава </em><em>I</em><em> с 1.</em></p>
<p>}</p>
<ol>
<li>Проверката за край на цикъла се извършва преди изпълнението на тялото, което означава, че цикълът може да не се изпълни нито веднъж т.е. оператор за цикъл с параметър е <span style="text-decoration: underline;">оператор с предусловие</span>.</li>
<li>Началната и крайната стойност на параметъра се пресмятат еднократно в началото на цикъла.</li>
</ol>
<p><strong>Сравнение на операторите за повторение</strong></p>
<p>За да не допускате грешки при програмирането на цикли, ще изброим някои прилики и разлики в записването и използването на различните оператори за цикъл, разгледани в предишните два урока:</p>
<ol>
<li>Ако тялото на цикъл от типовете, изброени в предишните уроци, включва повече от един оператор, те трябва да се запишат във фигурни скоби.</li>
<li>Тялото на циклите <strong>while</strong> и <strong>for</strong> може да не се изпълни нито веднъж, докато тялото на <strong>do…while…</strong> се изпълнява поне веднъж.</li>
<li>Тялото на цикъл <strong>while</strong> се изпълнява дотогава, докато условието за край има стойност <strong>true</strong>, на <strong>do…while…</strong>– докато условието има стойност <strong>false</strong> , а на <strong>for</strong> – докато управляващата променлива не е надхвърлила крайната стойност.</li>
<li>При <strong>while</strong> условието за край се иниацилизира преди влизане в цикъла.</li>
<li>При <strong>for</strong> броят на повторенията на тялото е предварително известен, докато при операторите с условие (<strong>while </strong><strong>и </strong><strong>do…while..</strong>) той зависи от това кога ще се изпълни условието за край.</li>
</ol>
<p><strong>Вложени цикли</strong></p>
<p>Ако тялото на един оператор за цикъл включва друг оператор за цикъл, се получава конструкцията вложени цикли. Синтаксисът на всички оператори за цикъл в езика Java допуска влагане не само на два, но и на повече цикли. Фигура 1 дава представа как изглеждат вложени един в друг оператори за цикъл.</p>
<p>Фигура 1.</p>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="35" height="23"></td>
<td width="98"></td>
<td width="82"></td>
<td width="110"></td>
<td width="70"></td>
<td width="122"></td>
</tr>
<tr>
<td height="206"></td>
<td align="left" valign="top"></td>
<td></td>
<td align="left" valign="top"></td>
<td></td>
<td align="left" valign="top"></td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="239" height="10"></td>
<td width="62"></td>
<td width="118"></td>
<td width="74"></td>
</tr>
<tr>
<td height="2"></td>
<td align="left" valign="top"></td>
<td></td>
<td align="left" valign="top"></td>
</tr>
<tr>
<td height="10"></td>
</tr>
<tr>
<td height="62"></td>
<td colspan="2"></td>
<td align="left" valign="top"></td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="431" height="17"></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>Изпълнението на вложените цикли е следното: при всяка итерация на външен цикъл се изпълнява целият вложен непосредствено в него вътрешен цикъл; изпълнението приключва, когато се изпълнят всички итерации на най-външния цикъл.</p>
<p>Програма с три вложени цикъла е дадена в следващия пример.</p>
<p>Пр. 2  Програма за намиране на броя на “щастливите комбинации”</p>
<p>Шестцифрена комбинация от цифри се нарича “щастлива”, ако сумата от първите 3 и последните 3 цифри на комбинацията е равна на 13.</p>
<p>В програмата първоначално се преброяват всички трицифрени комбинации (броят им се натрупва в променливата Nhappy) със сумата на цифрите (С1, С2 и С3), равна на 13. след това броят на “щастливите” комбинации се получава, като този брой (Nhappy) се повдигне на квадрат (защо?).</p>
<p>За да получим всички трицифрени комбинации, е удобно да използваме три вложени цикъла – съответно за генериране на първата, втората и третата цифра. За сяка така получена комбинация, ако сумата от трите цифри е 13 увеличаваме брой на намерените до момента “щастливи” комбинации с единица (Nhappy = ++Nhappy).</p>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="5" height="0"></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>В програмата се използва оператор <strong>for</strong>, защото броят на повторение на всеки цикъл е известен предварително – той е равен на 10. Ще забележим, че тялото на най-вътрешния от трите вложени цикъла <strong>for</strong> ще се изпълни 1000 пъти.</p>
<ol>
<li>С помощта на вложени цикли с малък брой оператори могат да се програмират значителен брой действия.</li>
<li>При влагане на цикли тялото на вътрешния цикъл трябва да се съдържа изцяло в тялото на външния.</li>
</ol>
<img src="http://javabg.eu/?ak_action=api_record_view&id=334&type=feed" alt="" />

<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://javabg.eu/2010/01/%d0%bf%d0%be%d0%b2%d1%82%d0%b0%d1%80%d1%8f%d1%89%d0%b8-%d1%81%d0%b5-%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b4%d1%8a%d0%bb%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-7-%d1%83/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ПОВТАРЯЩИ СЕ ДЕЙСТВИЯ &#8211; 6 урок</title>
		<link>http://javabg.eu/2010/01/%d0%bf%d0%be%d0%b2%d1%82%d0%b0%d1%80%d1%8f%d1%89%d0%b8-%d1%81%d0%b5-%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f-6-%d1%83%d1%80%d0%be%d0%ba/</link>
		<comments>http://javabg.eu/2010/01/%d0%bf%d0%be%d0%b2%d1%82%d0%b0%d1%80%d1%8f%d1%89%d0%b8-%d1%81%d0%b5-%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f-6-%d1%83%d1%80%d0%be%d0%ba/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 18:08:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ръководство]]></category>
		<category><![CDATA[уроци]]></category>

		<guid isPermaLink="false">http://javabg.eu/?p=332</guid>
		<description><![CDATA[Циклични алгоритми Един алгоритъм е цикличен, когато при неговото изпълнение група от елементарни действия се повтаря многократно. В много случаи се налага организиране на повтарящи се действия. Такава например е задачата за намиране на сумата на редица от числа. Сумиране на голям брой числа може да се наложи, когато искате да проверите сметката си в [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img style="border:0px;" src="thumbs/jn.jpg" alt="" /><br />
<strong>Циклични алгоритми</strong></p>
<p>Един алгоритъм е цикличен, когато при неговото изпълнение група от елементарни действия се повтаря многократно. В много случаи се налага организиране на повтарящи се действия. Такава например е задачата за намиране на сумата на редица от числа. Сумиране на голям брой числа може да се наложи, когато искате да проверите сметката си в магазина или пък когато класният ръководител определя средния успех на учениците в класа.</p>
<p>Пр. 1  Алгоритъм за определяне на сума</p>
<p>Предложеният алгоритъм решава задачата за намиране на сумата на числа, въвеждани последователно, като сумирането завършва, когато се въведе числото 0. сумата на числата се натрупва последователно (след всяко ввъвеждане) в параметър s. Следващото словесно описание представя типичен цикличен алгоритъм:</p>
<ol>
<li>s = 0.</li>
<li>Въведете поредното число х.</li>
<li>Ако х ≠ 0, то s=s+x, в противен случай изпълнете стъпка 5.</li>
<li>Изпълнете стъпка 2.</li>
<li>Съобщете стойността на s (като резултат).</li>
<li>Прекратете работа.</li>
</ol>
<p>Групата от повтарящи се действия в цикличните алгоритми се наричат <strong>тяло</strong> на цикъла. В примера тялото на цикъла представляват действията от стъпки 2, 3 и 4. Всяко изпълнение (повторение) на тялото на цикъла се нарича <strong>итерация</strong>. Задължително изискване е повторенията да са краен брой. Кога ще завърши цикълът се определя от т.нар. <strong>условие за край</strong> на повторенията, което в горния алгоритъм е х = 0 (проверява се на стъпка 3).</p>
<p>За да сме сигурни, че цикълът наистина ще заврши (условието за край ще настъпи), е необходимо някоя от стъпките на цикъла да включва действие, което евентуално ще предизвика удовлетворяване на условието за край. Това действие се нарича <strong>управление на</strong> <strong>повторенията</strong>. В нашия пример то е определено със стъпка2, защото нововъведената стойност на х може да е 0 и да предизвика приключване на изпълнението на алгоритъма.</p>
<p>Стъпка 1 от горния алгоритъм е много важна за правилно му изпълнение, защото ако на s не беше дадена предварително стойност 0, а например 1, тогава s, получено на стъпка 5, няма да е сумата на въведените числа. Такива действия, които се извършват преди началото на цикъла с цел да се подготви неговото правилно изпълнение, се наричат подготовка или <strong>инициализация</strong> на цикъла.</p>
<p>Средства, необходими за организация на цикли в програмите се наричат <em>оператори за цикъл</em>. С тяхна помощ можем да накараме компютъра да изпълни голям брой повтарящи се действия, без да е необходимо да записваме всяко действие отделно.</p>
<ol>
<li>Четирите основни елемента на всеки цикъл, въведени по горе – инициализация, тяло, управление на повторенията и условие за край, трябва внимателно да бъдат обмислени и проектирани, независимо по какъв начин ще се записва цикличният алгоритъм – словесно или чрез оператор за цикъл.</li>
<li>Забележете, че когато чрез цикъл в една променлива се натрупва сума, то тази променлива първоначално се нулира.</li>
</ol>
<p>В езика Java има три циклични оператора. В този урок ще разгледаме два от тях, които се наричат съответно <strong>цикъл с</strong> <strong>предусловие</strong> и <strong>цикъл със следусловие</strong>. Двата оператора се различават помежду си по това дали условието за край на цикъла се проверява преди или след изпълнение на неговото тяло. Третият вид оператор за цикъл – с параметър, ще разгледаме в следващия урок.</p>
<p><strong>Оператор за повторение с предусловие</strong></p>
<p>Оператор за цикъл с предусловие <strong>while</strong> има следният вид:</p>
<p><strong>while</strong> <strong>(</strong>&lt;условие&gt;<strong>)</strong> <strong>{</strong></p>
<p>&lt;оператор&gt;<strong>;</strong></p>
<p>[оператор2; ... операторN;]</p>
<p><strong>}</strong></p>
<p><strong> </strong></p>
<p>, където условието е от логически тип и определя условието за край на цикъл, а операторът (кой да е оператор от езика Java) представлява тялото на цикъла. Т.е. оператора се изпълнява докато условието от логически тип има стойност <strong>true</strong>, ако приеме стойност <strong>false</strong>, то оператора <span style="text-decoration: underline;">не се изпълнява повече</span>.</p>
<p>Пр. 2  Оператор за цикъл с предусловие</p>
<p>Предполага се, че S и I са декларирани като целочислени променливи:</p>
<p>S = 0; I = 1;                       <em>// </em><em>инициализация</em></p>
<p>while (I &lt;= 4) {                 <em> // проверка за край</em></p>
<p>S = S+I*I;            <em> // тяло</em></p>
<p>I = ++I;                 <em>// управление на повторенията</em></p>
<p>}</p>
<p>Смисълът на оператора <strong>while</strong> може много лесно да бъде разбран, ако го преведем и прочетем като свързано изречение – “<strong>докато</strong> &lt;условие&gt; има стойност истина, изпълнявай &lt;оператор&gt;”. Иначе казано: преди всяка итерация се изчислява стойността на логическото условие; ако тя е <strong>true</strong>, се изпълнява оператора, а ако е <strong>false</strong> – цикълът се прекратява.</p>
<p>Да разгледаме по-подробно изпълнението на оператора за цикъла от пример 2:</p>
<ul>
<li>Преди влизане в цикъла променливите S и I приемат начални стойност 0 и 1 (<strong>инициализация</strong>);</li>
<li>При първата итерация се проверява дали стойността на I е по-малка или равна на 4, т.е. 1&lt;=4, и понеже това е вярно, се изпълняват операторите от тялото на цикъла (S = 0+1*1, т.е. S=1 и I = 1+1, т.е. I = 2);</li>
<li>При втората итерация, понеже отново е вярно, че 2&lt;=4, се изпълнява тялото (S = 1+2*2, т.е. S=5 и I = 2+1, т.е. I = 3);</li>
<li>Трета итерация: Понеже 3&lt;=4, следва че: S = 5+3*3 (=14), а  I = 3+1 (=4);</li>
<li>Четвърта итерация: Проверката дали 4&lt;=4 дава стойност истина и (за последен път) се изпълнява тялото на цикъла S = 14 + 4*4, т.е. S = 30 и I = 4+1 (=5);</li>
<li>При проверка дали 5&lt;=4 се получава лъже и цикълът се прекратява.</li>
</ul>
<ol>
<li><span style="text-decoration: underline;">Тялото на цикъла може да не се изпълни нито веднъж</span>!</li>
<li>Основните елементи на цикъла от пример 1 са посочени с помощта на коментари.</li>
</ol>
<p>За да помните колко е важно управлението на повторенията, разгледайте цикъла от пример3, който довежда до т.нар. <strong>зацикляне</strong> (цикълът не завършва).</p>
<p>Пр. 3  Зацикляне</p>
<p>while (true) {System.out.println(“Безкраен цикъл”);}</p>
<p>Друг пример за циклична програма и използване на оператора <strong>while</strong> е даден в следващия пример:</p>
<p>Пр. 4  Основна част на програма за намиране на НОД по алгоритъма на Евклид</p>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="11" height="0"></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p><strong>Оператор за повторение със следусловие</strong></p>
<p>Операторът за цикъл със следусловие <strong>do…while</strong> има следната синтактична диаграма:</p>
<p><strong>do {</strong></p>
<p>&lt;оператор&gt;;</p>
<p>[&lt;оператор1&gt;; [&lt;оператор2&gt;;…]];</p>
<p><strong>} while (</strong>&lt;условие&gt;<strong>);</strong></p>
<p>, където условието е от логически тип и определя условието за край на цикъла, а операторите между <strong>do</strong> и <strong>while</strong> представляват тялото на цикъла.<br />
Пр. 5 Основна част на програма &#8211; цикъл със следусловие (алгоритъм на Евклид)</p>
<p>Начинът на изпълнение на оператора за цикъл със следусловие се определя от следните две стъпки:</p>
<ol>
<li>Изпълняват се последователно операторите между <strong>do</strong> и <strong>while</strong>.</li>
<li>Определя се стойността на логическото условие. Ако тя е <strong>false</strong>, се повтарят отново стъпки 1 и 2, а ако е <strong>true </strong>изпълнението на цикъла се прекратява.</li>
</ol>
<p>Смисълът на оператора <strong>do</strong>…<strong>while</strong>… може да се изрази с изречението: “<strong>Изпълнявай</strong> операторите, <strong>докато</strong> стойността на условието стане истина.”</p>
<ol>
<li>При цикъла със следусловие също може да се получи зацикляне, ако в тялото му няма оператор, който влияе върху условието за край.</li>
<li>Ако сравните двата начина за програмиране на алгоритъма на Евклид (пример 4 и пример 5), ще забележите, че в този случай е по-удобно цикълът да бъде записан чрез оператор while (защо?).</li>
<li>Операторът <strong>do…while…</strong> много често се използва в програмите (вж. пример 6) за проверка на това дали въведените от потребителя данни са коректни (по стойност, по тип и т.н.).</li>
<li>Тялото на оператора <strong>do…while…</strong> се изпълнява поне един път.</li>
</ol>
<img src="http://javabg.eu/?ak_action=api_record_view&id=332&type=feed" alt="" />

<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://javabg.eu/2010/01/%d0%bf%d0%be%d0%b2%d1%82%d0%b0%d1%80%d1%8f%d1%89%d0%b8-%d1%81%d0%b5-%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f-6-%d1%83%d1%80%d0%be%d0%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>МНОГОВАРИАНТЕН ИЗБОР &#8211; 5 урок</title>
		<link>http://javabg.eu/2010/01/%d0%bc%d0%bd%d0%be%d0%b3%d0%be%d0%b2%d0%b0%d1%80%d0%b8%d0%b0%d0%bd%d1%82%d0%b5%d0%bd-%d0%b8%d0%b7%d0%b1%d0%be%d1%80-5-%d1%83%d1%80%d0%be%d0%ba/</link>
		<comments>http://javabg.eu/2010/01/%d0%bc%d0%bd%d0%be%d0%b3%d0%be%d0%b2%d0%b0%d1%80%d0%b8%d0%b0%d0%bd%d1%82%d0%b5%d0%bd-%d0%b8%d0%b7%d0%b1%d0%be%d1%80-5-%d1%83%d1%80%d0%be%d0%ba/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 18:05:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ръководство]]></category>
		<category><![CDATA[уроци]]></category>

		<guid isPermaLink="false">http://javabg.eu/?p=330</guid>
		<description><![CDATA[Оператор за многовариантен избор Съществуват средства, които подпомагат програмната реализация на разклонените алгоритми. Специално внимание ще обърнем на случаите, в които на определен етап от вземането на решение трябва да се избира между повече от два варианта. За целта ще разгледаме задача, която се свежда до подобен многовариантен избор на решение. Задача1: Съставете програма, която [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img style="border:0px;" src="thumbs/jn.jpg" alt="" /><br />
<strong>Оператор за многовариантен избор</strong><strong></strong></p>
<p>Съществуват средства, които подпомагат програмната реализация на разклонените алгоритми. Специално внимание ще обърнем на случаите, в които на определен етап от вземането на решение трябва да се избира между повече от два варианта. За целта ще разгледаме задача, която се свежда до подобен многовариантен избор на решение.</p>
<p><strong>Задача1</strong>: Съставете програма, която въвежда последователно: първо реално число, знак за операция (един от ‘+’, ‘-‘, ‘*’, ‘/’), второ реално число и изчислява и извежда стойността на съответната операция. В случай, че е въведен недопустим знак за операция, програмата трябва да дава съобщение “Грешна операция”.</p>
<p>Алгоритъм за решаване на задача 1 включва многовариантен избор на вземане на решение, защото пресмятането може да се извърши по един от четири възможни варианта (в зависимост от това дали е въведен знак ‘+’, ‘-‘, ‘*’ или ‘/’). Програмирането на този етап включва използването на няколко условни оператора.</p>
<p>Пр. 1  Избор между четири възможни варианта, реализиран с условни оператори.</p>
<p>Ако стойностите на роменливите number1 и number2 са двете въведени реални числа, а стойността на променливата operation е въведеният знак за операция, то пресмятането може да стане така:</p>
<p>if (operation ==‘*’) result = number1*number2;</p>
<p>else if (operation == ‘/’) result = number1/number2;</p>
<p>else if (operation == ‘+’) result = number1+number2;</p>
<p>else if (operation == ‘-’) result = number1-number2;</p>
<p>else InvalidOperation = true;</p>
<p>За такива случаи е предвиден специален оператор (оператор за многовариантен избор), който улеснява програмирането на случаи, когато се налага да се прави избор между повече възможни варианти на действие. Операторът за многовариантен избор представя вземането на решения при наличието на сложни условия и прави програмата много по-ясна и четлива.</p>
<p>В езика за програмиране Java за многовариантен избор се използва оператора <strong>switch</strong>. Действията, между които се избира, са взаимноизключващи се (изпълнява се не повече от едно действие). Взаимноизключващите се действия ще наричаме <strong>варианти</strong>.Ето как изглежда реализацията на оператора <strong>switch</strong>:</p>
<p><strong>switch</strong><strong> (</strong> &lt;ключ&gt; <strong>)</strong> <strong>{ </strong></p>
<p><strong>case</strong> &lt;вариант1&gt;<strong>:</strong>&lt;оператори&gt;<strong>;</strong></p>
<p>…</p>
<p><strong>case</strong> &lt;вариантN&gt;<strong>:</strong>&lt;оператори&gt;<strong>;</strong></p>
<p><strong>default:</strong> &lt;оператори&gt;<strong>;</strong></p>
<p><strong>}</strong></p>
<p>Стойността на ключа след <strong>switch</strong>, определя кой от вариантите трябва да бъде изпълнен т.е. всеки <em>вариант</em> се сравнява с <strong>ключа</strong> и ако съвпадне, се изпълняват <em>операторите след него</em>. За да изпълни само тях (и да не продължи с изпълнението на другите) след всеки вариант трябва да се запише служебната дума <strong>break;</strong>.</p>
<p>Ролята на операторите след <strong>default </strong>е да посочат какво да изпълни програмата, ако случаят, който е въведен <span style="text-decoration: underline;">не съвпада</span> с нито един от вариантите, посочени за многовариантния оператор.</p>
<p>Пр. 2  Оператор switch</p>
<ol>
<li>Избор (между 4 варианта), определен от стойността на целочислена  променлива I:</li>
</ol>
<p><strong>switch</strong> <strong>(</strong>I<strong>)</strong></p>
<p><strong>{</strong></p>
<p><strong>case</strong> 1: y = x*x*x; <strong>break</strong>;</p>
<p><strong>case</strong> 2: y = Math.abs(x); <strong>break</strong>;</p>
<p><strong>case</strong> 3: y = 0; <strong>break</strong>;</p>
<p><strong>case</strong> 4: y = Math.pow(x,4); <strong>break</strong>;</p>
<p><strong>default:</strong> y = -1;</p>
<p><strong>}</strong></p>
<p>При изпълнение на този оператор , ако I има стойност 1, на у ще бъде присвоена стойността на израза х*х*х, ако I е 2, у ще получи стойността на Math.abs(x) и аналогично – за стойност на I=3 или 4, ще се премине към изплнението на оператора, следващ case. Ако е зададена друга стойност то на у ще се присвои стойност –1.</p>
<p>2. Избор (между четири варианта), определен от стойността на променлива grade от знаков тип:</p>
<p><strong>switch</strong> <strong>(</strong>grade<strong>)</strong></p>
<p><strong>{</strong></p>
<p><strong>case</strong> ‘A’<strong>:</strong> System.out.println (“Congratulations!”)<strong>;</strong></p>
<p><strong>break;</strong></p>
<p><strong>case </strong>‘B’<strong>:</strong>System.out.println (“Not bad, B level is OK”)<strong>; </strong> <strong>break;</strong></p>
<p><strong>case</strong> ‘C’<strong>:</strong>System.out.println (“C level is only average”)<strong>; </strong></p>
<p><strong>break;</strong></p>
<p><strong>case</strong> ‘D’<strong>:</strong>System.out.println (“D level is terrible”)<strong>;</strong></p>
<p><strong>break;</strong></p>
<p><strong>default:</strong>System.out.println(“No excuses!Study harder!”)<strong>;</strong></p>
<p>}</p>
<p><strong>Примерна програма</strong></p>
<p>Нека като пример за приложение на оператор да съставим програмат от задача 1.</p>
<p>Пр. 3  Програма за решаване на <strong>задача 1</strong><strong></strong></p>
<p><strong>Проектиране</strong><strong></strong></p>
<p>Според условието на задача 1 аргументите и резултатът на операциите са реални числа, а знакът на операцията е от знаков тип. Ето защо в програмата се декларират променливите:</p>
<p>char operation;</p>
<p>float number1, number2, result;</p>
<p>Знакът на операцията може да бъде един от четирите ‘-‘, ‘*’, ‘/’,  ‘+’, като се избира между четири варианта. В този случай логично е да използваме оператора за многовариантен избор като най-удобно средство за програмиране:</p>
<p>switch (operation){</p>
<p>case ‘*’: result = number1 * number2; break;</p>
<p>case ‘/’: result = number1 / number2; break;</p>
<p>case ‘+’: result = number1 + number2; break;</p>
<p>case ‘-’: result = number1 &#8211; number2; break;</p>
<p>default: InvalidOperation = true;<br />
}</p>
<p><img style="border:0px;" src="thumbs/jn.jpg" alt="" /></p>
<img src="http://javabg.eu/?ak_action=api_record_view&id=330&type=feed" alt="" />

<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://javabg.eu/2010/01/%d0%bc%d0%bd%d0%be%d0%b3%d0%be%d0%b2%d0%b0%d1%80%d0%b8%d0%b0%d0%bd%d1%82%d0%b5%d0%bd-%d0%b8%d0%b7%d0%b1%d0%be%d1%80-5-%d1%83%d1%80%d0%be%d0%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ВЗЕМАНЕ НА РЕШЕНИЯ &#8211; 4 урок</title>
		<link>http://javabg.eu/2010/01/%d0%b2%d0%b7%d0%b5%d0%bc%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8f-4-%d1%83%d1%80%d0%be%d0%ba/</link>
		<comments>http://javabg.eu/2010/01/%d0%b2%d0%b7%d0%b5%d0%bc%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8f-4-%d1%83%d1%80%d0%be%d0%ba/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 18:03:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ръководство]]></category>
		<category><![CDATA[уроци]]></category>

		<guid isPermaLink="false">http://javabg.eu/?p=328</guid>
		<description><![CDATA[Разклонени алгоритми Процесът на избор на един от няколко възможни варианта за действие нарича вземане на решение. Какво решение ще вземем обикновено е свързано с това – дали е изпълнено или не някакво условие. Например ако се чудите дали днес да отидете на училище или не, то вероятно ще вземете решение според това дали броят [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img style="border:0px;" src="thumbs/jn.jpg" alt="" /></p>
<p><strong>Разклонени алгоритми</strong></p>
<p>Процесът на избор на един от няколко възможни варианта за действие нарича <strong>вземане на решение.</strong></p>
<p>Какво решение ще вземем обикновено е свързано с това – дали е изпълнено или не някакво условие. Например ако се чудите дали днес да отидете на училище или не, то вероятно ще вземете решение според това дали броят на неизвинените ви отсъствия до момента не надхвърля максималния позволен брой. Подобни условия се наричат <strong>логически условия</strong>.</p>
<p>За представяне на такива условия в езиците за програмиране е въведен споциален тип данни, наричан <strong>логически (булев) тип данни</strong>.</p>
<p>Алгоритми, които включват елементарни действия, съдържащи избор между няколко възможни варианта (т.е. моделиращи процес на вземане на решение) се наричат <strong>разклонени алгоритми.</strong></p>
<p>Реализацията на разклонените алгоритми в езиците за програмиране се извършва чрез различни <strong>оператори за разклонение</strong>. В езика за програмиране Java има два такива оператора – условен оператор <strong>if</strong><strong>&#8230;</strong><strong>else</strong> (за избор между два възможни варианта) и оператор  (за избор между произволен брой варианти).</p>
<p>Стандартният логически тип, както и операторите за разклонение улесняват в много голяма степен програмирането на разклонени алгоритми.</p>
<p><strong>Логически (булев) тип</strong></p>
<p>Множеството от стойности на логически тип съдържа само две константи – <strong>true</strong> и <strong>false</strong> (съответно истина и лъжа).</p>
<p>Логическият тип се декларира със стандартния идентификатор <strong>boolean</strong>. Например логическите променливи В и Da се декларират по следния начин:</p>
<p>boolean   B, Da;</p>
<p>С логически величини могат да се извършват трите основни логически операции: двуаргументните – логическо умножение (което на Java се записва <strong>&amp;&amp;</strong>) и логическо събиране (на Java -<strong> ||</strong> ) и едноаргументната – логическо отрицание (  <strong>!</strong> – на Java).</p>
<p>Операторите за сравнение дават <strong>логически резултат</strong>,  въпреки че се прилагат върху други типове, основавайки се на сравнението на операндите – за равенство(= =), за неравенство (!=), за по-малко (&lt;), за по-голямо (&gt;), за по-голямо или равно (&gt;=), за по-малко или равно (&lt;=).</p>
<p>Пр. 1. Логически изрази</p>
<ol>
<li>Ако броят на неизвинените отсъствия, направени до момента от ученика, е Neizv, а максималния допустим брой е MaxNeizv, то логическото условие, от което се определя решението на ученика, ще изглежда така:</li>
</ol>
<p>Neizv &lt; MaxNeizv</p>
<ol>
<li>Ако добавим още едно изискване към горното условие, напричер часът (Chas) да не е повече от 11 преди обяд, то ще получим по-сложен логически израз:</li>
</ol>
<p>(Neizv &lt; MaxNeizv) <strong>&amp;&amp;</strong> (Chas &lt;= 11)</p>
<p>За константите true и false е прието, че са подредени по следния начин: <strong>false &lt;</strong><strong> </strong><strong>true</strong>, което означава, че и логическите величини може да се сравняват.</p>
<p><span style="text-decoration: underline;">Логически стойности <strong>не</strong></span><strong><span style="text-decoration: underline;"> </span></strong><strong><span style="text-decoration: underline;">могат</span></strong><span style="text-decoration: underline;"> да се въвеждат чрез </span><strong><span style="text-decoration: underline;">read</span></strong><strong>.</strong></p>
<p><strong> </strong></p>
<p><strong>Условен оператор</strong></p>
<p>Един от операторите, който представя вземане на решение в програмата, е условният оператор. Най-простият вариант има вида:</p>
<p><strong>if</strong> <strong>(</strong>&lt;условие&gt;<strong>)</strong> &lt;оператор&gt;<strong>;</strong></p>
<p>, където условието е израз, водещ към логически резултат. Операторът може да бъде произволен оператор на Java, включително друг оператор <strong>if</strong> или блок от оператори. <strong>Ако е повече от един оператор, то задължително трябва да са заградени във фигурни скоби.</strong></p>
<p>Пълната форма на условния оператор е следната:</p>
<p><strong>if</strong> <strong>(</strong>&lt;условие&gt;<strong>)</strong> <strong>{</strong></p>
<p>&lt;оператори 1&gt;;</p>
<p><strong>} else {</strong></p>
<p><strong> </strong>&lt;оператори 2&gt;;</p>
<p><strong>}</strong></p>
<p><strong> </strong></p>
<p>, където действието е следното: ако е изпълнено логическото условие след <strong>if</strong><strong> </strong>(т.е. има стойност <strong>true</strong>), то се изпълняват &lt;оператори 1&gt;, ако не (т.е. условието има стойност <strong>false</strong>)– се изпълняват &lt;оператори 2&gt;, записани след <strong>else</strong>.</p>
<p>Пр. 2.  Правилно записани условни оператори:</p>
<p>1. Кратка форма:</p>
<p>if (Neizv&lt;MaxNeizv)</p>
<p>Neizv = Neizv + 1;  <em> </em><em>//</em><em>може да се запише и така: //</em><em>Neizv = ++Neizv</em></p>
<p><em>// не сме записали фигурни скоби т.к. има само 1 оператор</em></p>
<p>2. Пълна форма (предполагаме, че са направени декларациите int A,B; char D):</p>
<p>if (A == B)</p>
<p>D = ‘Д’;</p>
<p>else D = ‘Н’;</p>
<p>Когато е само един оператор, може и да не се пишат фигурни скоби.</p>
<p>3. Условен оператор, съдържащ друг условен оператор  (предполага се, че са направени декларациите float X; boolean Sign;):</p>
<p>if (X&lt;0) Sign = true;</p>
<p>else</p>
<p>if (X&gt;0) Sign = false;</p>
<p>else System.out.println (“стойността е 0”);</p>
<p>4. Условен оператор със съставно условие (предполага се, че са направени декларациите int x; boolean y;)</p>
<p>if ((x&gt;3) &amp;&amp; (x&lt;8))   y = true;</p>
<p>else y = false;</p>
<p>Семантиката на условния оператор е следната: в зависимост от изпълнението на зададено условие се извършва (или не) едно определено действие (if в кратка форма) или се избира и изпълнява едно от двете записани действия (if в пълна форма).</p>
<p>Изпълнението на условния оператор в кратката му форма е следното: определя се стойността на логическото условие; само когато тя е true, се изпълняват оператори1. При пълната форма – ако стойността на логическото условие е true, се изпълняват оператори1, а ако е false &#8211; оператори2 след else.</p>
<ul>
<li>Когато има само един оператор в “оператори1”, то фигурните скоби могат да се пропуснат;</li>
<li>Условният оператор <strong>if</strong> може да съдържа кой да е оператор на Java, в това число и друг оператор <strong>if</strong>. Трябва да се има в предвид, че <strong>else</strong> съответства винаги на най-близкия предхождащ <strong>if</strong>. В сложните случаи може да се сгреши и за това се препоръчва използването на отместване (Пр. 2.3.).</li>
</ul>
<p><strong> </strong><strong>Примерна програма</strong><strong> </strong></p>
<p>При програмиране на разклонени алгоритми се спазват същите етапи, които илюстрирахме при нашата първа програма на Java.</p>
<p>Пр. 3. Съставяне на програма, която определя дали дадено яло число, въведено от клавиатурата, се дели на 5 или на 15.</p>
<p><strong>Проектиране:</strong></p>
<p>Началните данни на програмата се състоят само то една-единствена целочислена стойност, която се въвежда от клавиатурата. Ето защо в програмата по-долу се декларира променлива IntNum от цял тип. Крайният резултат е съобщение дали IntNum се дели или не на 5 или 15. За съхраняване на резултата в програмата не е необходима променлива.</p>
<p>Алгоритъмът, по който ще проверяваме делимостта на числото, е известен – едно число се дели на 5, ако остатъкът при целочисленото му деление на 5 е   0. Следователно дали едно число се дели или не на 5 може да се определи чрез проверяване на стойността на логическия израз (IntNim%5)=0. Дали едно число се дели на 15 може да проверим, като установим дали то се дели едновременно на 5 и на 3.</p>
<p><strong> </strong></p>
<p><strong>Програмиране:</strong><strong> </strong></p>
<p>Следващата програма показва как може да се използва условния оператор if, за да програмираме разклонени алгоритми.</p>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="33" height="0"></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p><img style="border:0px;" src="thumbs/jn.jpg" alt="" /></p>
<img src="http://javabg.eu/?ak_action=api_record_view&id=328&type=feed" alt="" />

<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://javabg.eu/2010/01/%d0%b2%d0%b7%d0%b5%d0%bc%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8f-4-%d1%83%d1%80%d0%be%d0%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ЛИНЕЙНИ АЛГОРИТМИ &#8211; 3 урок</title>
		<link>http://javabg.eu/2010/01/%d0%bb%d0%b8%d0%bd%d0%b5%d0%b9%d0%bd%d0%b8-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%b8-3-%d1%83%d1%80%d0%be%d0%ba/</link>
		<comments>http://javabg.eu/2010/01/%d0%bb%d0%b8%d0%bd%d0%b5%d0%b9%d0%bd%d0%b8-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%b8-3-%d1%83%d1%80%d0%be%d0%ba/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 18:00:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ръководство]]></category>
		<category><![CDATA[уроци]]></category>

		<guid isPermaLink="false">http://javabg.eu/?p=326</guid>
		<description><![CDATA[Линейни алгоритми, наричаме онези алгоритми, за които посочените в тях действия се изпълняват по реда на записването им. Пр. 1. Нека да съставим алгоритъм за изчисляване на чистата заплата (ЧЗ) на работниците по дадена стойност на основната им заплата (ОЗ). ЧЗ се получава, като към ОЗ се прибави сума за прослужени години, равна на 21% [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><img style="border:0px;" src="thumbs/jn.jpg" alt="" /><br />
<strong>Линейни алгоритми</strong>, наричаме онези алгоритми, за които посочените в тях действия се изпълняват по реда на записването им.</p>
<p>Пр. 1.</p>
<p>Нека да съставим алгоритъм за изчисляване на чистата заплата (ЧЗ) на работниците по дадена стойност на основната им заплата (ОЗ). ЧЗ се получава, като към ОЗ се прибави сума за прослужени години, равна на 21% от ОЗ (считаме, че всички работници са с еднакъв трудов стаж) и полученият сбор се намали с 20% (удръжки за данък общ доход). Алгоритъмът, по който може да извършите тези изчисления, е следният:</p>
<p>Вход: Стойност на ОЗ.</p>
<p>Изход: Стойност на ЧЗ.</p>
<p>Стъпка 1: Въведете и запомнете ОЗ.</p>
<p>Стъпка 2: Пресметнете и извършете присвояването</p>
<p>ЧЗ  = ОЗ + ОЗ*21/100.</p>
<p>Стъпка 3: Пресметнете и извършете присвояването</p>
<p>ЧЗ = ЧЗ – ЧЗ*20/100.</p>
<p>Стъпка 4: Съобщете стойността на ЧЗ като резултат.</p>
<p>Стъпка 5: Прекратете работа.</p>
<p>Предложеният алгоритъм е линеен алгоритъм, защото посочените в него действия се изпълняват по реда на записването им.</p>
<p>Записвайки този алгоритъм с помощта на език за програмиране, ще получим съответно <strong>линейна програма</strong>.</p>
<p>За да изпълним алгоритъма е необходимо да въведем и изведем стойностите на ОЗ и ЧЗ и да извършим някои изчисления и присвоявания и да изведем крайния резултат. Подобно е предназначението и на операторите, които езиците за програмиране предоставят за описание на линейни програми.</p>
<p>При съставяне на линейни програми на език за програмиране обикновено се използват следните основни оператори: <strong>оператор за въвеждане на начални данни, оператор за присвояване и оператор за извеждане на резултат.</strong></p>
<p>Чрез оператор за извеждане може да извеждаме на екран кратки съобщения или текущата стойност на променливата за момента, в който извикваме този оператор.</p>
<p>Оператора за въвеждане служи за задаване на различни стойности на променливата от клавиатурата по време на изпълнението на програмата.</p>
<p>Чрез оператора за присвояване може да присвояваме различни стойности на променливите в тялото на програмата и по този начин променяме текущата стойност на променливата.</p>
<p><strong>Оператор за присвояване</strong></p>
<p>Оператора за присвояване служи за присвояване на междинни или крайни стойности на променливите. Той се иползва също така и при деклариране на променливите за определяне (задаване) на техните начални стойности.</p>
<p>Синтаксис на оператор за присвояване:</p>
<p><em>&lt;</em><em>идентификатор</em><em>&gt;</em><em> </em><strong>=</strong><em> </em><em>&lt;</em><em>израз</em><em>&gt;<strong>;</strong></em><strong><em> </em></strong></p>
<p>, където идентификатора е име на някаква променлива, а израза е израз, който искаме да присвоим на тази променлива.</p>
<p>Стойността на израза трябва да е от множеството на допустимите стойности, характерно за типа на променливата.</p>
<p>При изпълнение на оператора за присвояване първо се намира стойността на израза и след това тя се присвоява на променливата.</p>
<p>Пр. 2.</p>
<p>Нека I и J са декларирани предварително като целочислени променливи, а X и Y като реални:</p>
<p>1. I = (15 % 2) * 2;                  <em>// вярно</em></p>
<p>2. X = Math.sqrt(I);                  <em> // вярно</em></p>
<p>3. J <em>= </em>Math.abs(I) + X;           <em>//<strong>грешка !</strong></em></p>
<p>4. Y = &#8211; Math.abs(X) + I;        <em>// вярно</em></p>
<p>5. int I = 100;       <em>// вярно присвояване извършено </em><em> </em></p>
<p><em> //още при деклариране на променливата</em></p>
<p>6. float X = 3.758;  <em>// вярно присвояване извършено </em><em> </em></p>
<p><em>//още при деклариране на променливата</em>.</p>
<p>В Java са вградени и така наречените “<strong>съкратени оператори за</strong> <strong>присвояване</strong>”.</p>
<p>Нека х и у са декларирани променливи от подходящ тип. Съкратените оператори за присвояване са показани в следната таблица:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="147" valign="top">Оператор</td>
<td width="193" valign="top">Пример</td>
<td width="140" valign="top">Действие</td>
</tr>
<tr>
<td width="147" valign="top">+=</td>
<td width="193" valign="top">х +=у;</td>
<td width="140" valign="top">х = х + у;</td>
</tr>
<tr>
<td width="147" valign="top">-=</td>
<td width="193" valign="top">х -=у;</td>
<td width="140" valign="top">х = х &#8211; у;</td>
</tr>
<tr>
<td width="147" valign="top">/=</td>
<td width="193" valign="top">х /=у;</td>
<td width="140" valign="top">х = х / у;</td>
</tr>
<tr>
<td width="147" valign="top">*=</td>
<td width="193" valign="top">х *=у;</td>
<td width="140" valign="top">х = х * у;</td>
</tr>
<tr>
<td width="147" valign="top">%=</td>
<td width="193" valign="top">х %=у;</td>
<td width="140" valign="top">х = х % у;</td>
</tr>
</tbody>
</table>
<p><strong> </strong></p>
<p><strong>Оператор за въвеждане на данни</strong></p>
<p>Операторът за въвеждане на данни позволява някои от променливите на изпълняваната програма да получат стойности от външно устройноство. В езика за програмиране Java въвеждането на данни става с помощта на стандартният метод <strong>read. </strong>Този метод са част от библиотека <strong>io</strong> на Java и за да можем да ги използваме в тялото на класа, който създаваме, трябва преди да започнем да описваме класа, да посочим, че ще използваме тази библиотека. Това става по следния начин:</p>
<p><strong>import java.io.*;</strong> <em>//</em><em> с този ред посочваме, че ще ползваме </em><em>//</em><em>методите на библиотека </em><em>io.</em><strong></strong></p>
<p>Методът за въвеждане на данни изглежда по следният начин:</p>
<p><strong>System.in.read();</strong></p>
<p>и чете байт от стандартния входен поток т.е. клавиатурата</p>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="52" height="19"></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p><strong>Оператор за извеждане на данни</strong></p>
<p>Както споменахме чрез оператора за извеждане на данни на компютърния екран могат да се отпечата стойностите на избрани променливи, като и различни съобщения.</p>
<p>Методите за извеждане на данни изглеждата така:</p>
<ol>
<li><strong>System.out.print</strong>(идентификатор [+ идентификатор+…]);</li>
</ol>
<p><em>//</em><em>когато искаме да отпечата стойността на даден </em></p>
<p><em>//параметър</em></p>
<ol>
<li><strong>System.out.print</strong>(“Кратко съобщение”);</li>
</ol>
<p><em>// когато искаме да отпечата кратко съобщение</em></p>
<p>Аналогично е за <strong>System.out.println</strong>(…);</p>
<p>Разликата между методите <strong>print</strong> и <strong>println</strong> се състои в това, че при използване на <strong>print</strong>, след изписване на съобщението или стойността на променливата, <span style="text-decoration: underline;">указателят остава на същият ред</span>, а при използване на <strong>println</strong> след изписването, <span style="text-decoration: underline;">указателят се премества на следвящия ред.</span><span style="text-decoration: underline;"> </span><span style="text-decoration: underline;"> </span></p>
<p>Както и при оператора за въвеждане на данни, за да можем да използваме тези методи, трябва преди това да посочим, че в класа ще се включват методи от библиотека io на Java. Това става отново чрез изписване на следният ред, преди започване описанието на класа:</p>
<p><strong>import java.io.*;</strong></p>
<p>Не е необходимо този ред да се записва за всеки отделен метод. Т.е. щом веднъж сме изписали реда преди описанието на класа, то в тялото на класа можем да използваме методите на библиотеката неограничен брой пъти.</p>
<p>Пр. 3</p>
<p>System.out.print(“have a nice day”); <em>// </em><em>извеждане на съоб-     // щение на екран.</em></p>
<p>System.out.println(“Name:” + name1);<em>//</em><em>извеждане на </em><em>//</em><em>съобщение </em><em>Name </em><em>и текущата стойност на променлива </em><em>name1 </em><em>на </em></p>
<p><em>//екран.</em><em> </em><em> </em><em></em></p>
<p>System.out.println(age+”,”+name1+”.”); <em>// </em><em>извежда на //екран стойностите на променливите </em><em>age </em><em>и </em><em>name1</em><em>, разделени със //запетая  и завършва с точка.</em><em></em></p>
<p><em> </em></p>
<p><strong>Първа програма (клас) на </strong><strong>Java</strong></p>
<p>С помощта на изучените до момента възможности на езика Java ние вече можем да съставяме цялости програми (макар и само линейни).</p>
<p>Нека нашата първа програма да бъде реализация на алгоритъма за изчисляване на сумата на две числа, който съставихме в началото на този урок. С това, че вече имаме готов алгоритъм, работата ни е улеснена до голяма степен, но все пак преди да напишем програмата, е необходимо да уточним от какъв тип и колко на брой са променливите, които ще използваме, за да представим водните данни, междинните и крайните резултати на алгоритъма. В този случай е лесно да се определи, че са ни необходими две реални променливи – за основната и чистата заплата съответно. Ще ги наречем съответно ОZ и CZ. Като използваме вече наученото за операторите за вход, изход и присвояване, лесно достигаме до следната програма (клас):</p>
<table border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td width="4" height="0"></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>Във всички случаи, когато се съставя компютърна програма, преди да се премине към нейното непосредствено написване, е необходимо да се уточнят: алгоритъмът на обработката; типът на участващите величини; променливите, представени в програмата и т.н.</p>
<p>Предварителният анализ, планиране и проектиране на програмата могат да се направят просто наум (при по-елементарните задачи), но в повечето случаи е необходимо да отделите време и ресурси за тази цел. Направление на компютърната информатика, което се занимава с изучаването на тези въпроси, е софтуерното инженерство. Предвем на софтуерното инженерство са методите и средствата за планиране, анализ, проектиране, разработване и внедряване на компютърни програми.</p>
<img src="http://javabg.eu/?ak_action=api_record_view&id=326&type=feed" alt="" />

<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://javabg.eu/2010/01/%d0%bb%d0%b8%d0%bd%d0%b5%d0%b9%d0%bd%d0%b8-%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d0%b8-3-%d1%83%d1%80%d0%be%d0%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

