<?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>ProGrammer &#187; Задачи и решения</title>
	<atom:link href="/?feed=rss2&#038;cat=57" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Сайт о программировании, математике и моделировании</description>
	<lastBuildDate>Sat, 21 Jan 2012 17:31:04 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Решений краевой задачи. Методом стрельбы</title>
		<link>/?p=427</link>
		<comments>/?p=427#comments</comments>
		<pubDate>Tue, 10 Jan 2012 07:41:31 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Задачи и решения]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[график]]></category>
		<category><![CDATA[дифференциальные уравнения]]></category>
		<category><![CDATA[листинг]]></category>

		<guid isPermaLink="false">/?p=427</guid>
		<description><![CDATA[Решить краевую задачу методом стрельбы и полученное решение сравнить с аналитическим (если последнее можно найти). Результаты численного интегрирования представьте в виде графиков, которые необходимо строить для всех параметров . Код программы: Dim x() As Single Dim y() As Single Dim z() As Single Dim a0 As Single Dim a1 As Single Dim a2 As Single]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Решить краевую задачу методом стрельбы и полученное решение сравнить с аналитическим (если последнее можно найти). Результаты численного интегрирования представьте в виде графиков, которые необходимо строить для всех параметров .</p>
<p style="text-align: justify;"><a href="/wp-content/uploads/2011/08/16.jpg"><img class="aligncenter size-full wp-image-428" title="система дифференциальных уравнений" src="/wp-content/uploads/2011/08/16.jpg" alt="" width="572" height="220" /></a><span id="more-427"></span></p>
<p><strong>Код</strong><strong> </strong><strong>программы</strong><strong>:</strong></p>
<p>Dim x() As Single</p>
<p>Dim y() As Single</p>
<p>Dim z() As Single</p>
<p>Dim a0 As Single</p>
<p>Dim a1 As Single</p>
<p>Dim a2 As Single</p>
<p>Dim c As Single</p>
<p>Dim f1 As Single</p>
<p>Dim f2 As Single</p>
<p>Dim a As Single</p>
<p>Dim b As Single</p>
<p>Dim e As Single</p>
<p>Dim cont As Integer</p>
<p>Dim n As Integer</p>
<p>Private Sub Command1_Click()</p>
<p>c = 1.5</p>
<p>e = 0.001</p>
<p>n = Val(InputBox(&laquo;n=&raquo;, n))</p>
<p>ReDim x(1 To n)</p>
<p>ReDim y(1 To n)</p>
<p>ReDim z(1 To n)</p>
<p>a0 = 0</p>
<p>a1 = 1.9</p>
<p>Label1.Caption = &laquo;A1 = &raquo; &amp; Str(a0) + &laquo;рад&raquo;</p>
<p>Label2.Caption = &laquo;A2= &raquo; &amp; Str(a1) + &laquo;рад&raquo;</p>
<p>f1 = f(a0, n)</p>
<p>f2 = f(a1, n)</p>
<p>cont = 0</p>
<p>Do</p>
<p>a2 = (a0 + a1) / 2</p>
<p>If f(a0 &#8211; c, n) * (f(a2, n) &#8211; c) &lt; 0 Then</p>
<p>a1 = a2</p>
<p>Else</p>
<p>a0 = a2</p>
<p>End If</p>
<p>cont = cont + 1</p>
<p>Label4.Caption = Label4.Caption + &laquo;tan(a)=&raquo; + Chr$(32) + Chr$(32) + Format(Tan(a2), &laquo;0.00000&#8243;) + Chr$(13)</p>
<p>Label6.Caption = Label6.Caption + &laquo;y(x)=&raquo; + Chr$(32) + Chr$(32) + Format(f(a2, n), &laquo;0.00000&#8243;) + Chr$(13)</p>
<p>Loop While Abs(a0 &#8211; a1) &gt; e</p>
<p>t = Atn(z(1))</p>
<p>Label3.Caption = &laquo;искомый угол A3 = &raquo; &amp; Format(t, &laquo;0.00000&#8243;)</p>
<p>Label8.Caption = &laquo;y(x) = &raquo; &amp; Format(f(a2, n), &laquo;0.000000&#8243;)</p>
<p>Label9.Caption = &laquo;погрешность = &raquo; &amp; Format(e, &laquo;0.0000&#8243;)</p>
<p>End Sub</p>
<p>Public Function f(al As Single, n As Integer) As Single</p>
<p>Dim x0 As Single</p>
<p>Dim y0 As Single</p>
<p>Dim i As Integer</p>
<p>Dim h As Single</p>
<p>Dim k1, k2, k3, k4 As Single</p>
<p>Dim l1, l2, l3, l4 As Single</p>
<p>a = 0</p>
<p>b = 3.14 / 2</p>
<p>h = (b &#8211; a) / n</p>
<p>x(1) = 0</p>
<p>z(1) = Sin(al) / Cos(al)</p>
<p>y(1) = 0</p>
<p>For i = 1 To n &#8211; 1</p>
<p>k1 = z(i)</p>
<p>l1 = -y(i)</p>
<p>k2 = z(i) + l1 * h / 2</p>
<p>l2 = -1 * ((y(i) + k1 * h / 2))</p>
<p>k3 = z(i) + k2 * h / 2</p>
<p>l3 = -(y(i) + k2 * h / 2)</p>
<p>k4 = z(i) + k3 * h</p>
<p>l4 = -(y(i) + k3 * h)</p>
<p>y(i + 1) = y(i) + h / 6 * (k1 + 2 * k2 + 2 * k3 + k4)</p>
<p>z(i + 1) = z(i) + h / 6 * (l1 + 2 * l2 + 2 * l3 + l4)</p>
<p>x(i + 1) = a + h * i</p>
<p>Next i</p>
<p>f = y(n)</p>
<p>Call d1</p>
<p>End Function</p>
<p><em>Рисование графиков</em></p>
<p>Private Sub d1()</p>
<p>Dim x0 As Single</p>
<p>Dim y0 As Single</p>
<p>Dim xk As Single</p>
<p>Dim yk As Single</p>
<p>Dim zk As Single</p>
<p>Dim i As Single</p>
<p>With Form2</p>
<p>.Show</p>
<p>x0 = .ScaleWidth / 2 &#8211; 4</p>
<p>y0 = .ScaleHeight / 2 &#8211; 1</p>
<p>Form2.Line (x0, .ScaleHeight)-(x0, 0)</p>
<p>Form2.Line (.ScaleWidth, y0)-(0, y0)</p>
<p>For i = 1 To 250</p>
<p>&#8216;График ф-ции y(x)</p>
<p>.CurrentX = 5.8</p>
<p>.CurrentY = 3.7</p>
<p>Form2.Print &laquo;y=y(x)&raquo;</p>
<p>yk = y0 &#8211; y(i)</p>
<p>xk = x(i) + x0</p>
<p>Form2.PSet (xk, yk)</p>
<p>Next i</p>
<p>&#8216;Разметка осей координат</p>
<p>For i = 0 To 25 Step 0.5</p>
<p>Form2.Line (x0 + i, y0 &#8211; 0.08)-(x0 + i, y0 + 0.1)</p>
<p>.CurrentX = x0 + i &#8211; 0.1</p>
<p>.CurrentY = y0 + 0.1</p>
<p>Form2.Print i;</p>
<p>Form2.Line (x0 &#8211; i, y0 &#8211; 0.08)-(x0 &#8211; i, y0 + 0.1)</p>
<p>.CurrentX = x0 &#8211; i &#8211; 0.1</p>
<p>.CurrentY = y0 + 0.2</p>
<p>Form2.Print &laquo;-&raquo; &amp; i;</p>
<p>Form2.Line (x0 &#8211; 0.08, y0 + i)-(x0 + 0.1, y0 + i)</p>
<p>.CurrentX = x0 + 0.15</p>
<p>.CurrentY = y0 + i &#8211; 0.08</p>
<p>Form2.Print &laquo;-&raquo; &amp; i;</p>
<p>Form2.Line (x0 &#8211; 0.08, y0 &#8211; i)-(x0 + 0.1, y0 &#8211; i)</p>
<p>.CurrentX = x0 + 0.1</p>
<p>.CurrentY = y0 &#8211; i &#8211; 0.08</p>
<p>Form2.Print i;</p>
<p>Next i</p>
<p>End With</p>
<p>End Sub</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p><strong>Графическая интерпретация:</strong><strong> </strong></p>
<p>На отрезке [0; π/2]</p>
<p><a href="/wp-content/uploads/2011/08/17.jpg"><img class="aligncenter size-full wp-image-429" title="решение краевой задачи" src="/wp-content/uploads/2011/08/17.jpg" alt="" width="400" height="533" /></a></p>
<p><strong><span style="text-decoration: underline;">Входные данные:</span></strong></p>
<p>a=0</p>
<p>b= π/2</p>
<p>Погрешность =0.001</p>
<p><strong><span style="text-decoration: underline;">Выходные данные:</span></strong></p>
<p>α = 0.982 ± 0.001,   (0.981;  0.983)</p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=427</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Программа возведения в квадрат длинного числа</title>
		<link>/?p=220</link>
		<comments>/?p=220#comments</comments>
		<pubDate>Fri, 03 Dec 2010 20:20:22 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Задачи и решения]]></category>
		<category><![CDATA[длинная арифметика]]></category>
		<category><![CDATA[листинг]]></category>

		<guid isPermaLink="false">http://s12.localhost/?p=220</guid>
		<description><![CDATA[За операцию возведения в квадрат методом «треугольника» отвечает процедура SquareTri./ Вычисление квадрата длинного числа С = А2 методом «треугольника» void SquareTri( DIGIT C[ ],   /* результат длины 2n цифр */ const DIGIT A[ ],   /* основание длины n цифр */ int n)      /* длина основания */ { TWODIGIT t,f; int i,j; Zero (С, 2*n); for]]></description>
			<content:encoded><![CDATA[<p>За операцию возведения в квадрат методом «треугольника» отвечает процедура SquareTri./ Вычисление квадрата длинного числа С = А2 методом «треугольника»</p>
<p>void SquareTri(</p>
<p>DIGIT C[ ],   /* результат длины 2n цифр */</p>
<p>const DIGIT A[ ],   /* основание длины n цифр */</p>
<p>int n)      /* длина основания */<span id="more-220"></span></p>
<p>{</p>
<p>TWODIGIT t,f;</p>
<p>int i,j;</p>
<p>Zero (С, 2*n);</p>
<p>for (i=0; i&lt;n; i++)</p>
<p>{              f=0;</p>
<p>for (j=0; j&lt;n; j++)</p>
<p>{              t = (TWODIGIT)A[i]*(TWODIGIT)A[j];</p>
<p>f += (((TWODIGIT)LODIGIT(t))«1)+C[i+j];</p>
<p>C[i+j] = LODIGIT(f);</p>
<p>f= HIDIGIT(f);</p>
<p>f+= (((TWODIGlT)HIDIGIT(t))«1);</p>
<p>}</p>
<p>t = (TWODIGIT)A[i|*(TWODIGIT)A[i];</p>
<p>f += LODIGIT(t)+C[i+i];</p>
<p>C[i+i] = LODIGIT(i);</p>
<p>f = HIDIGIT(f)+C[i+i+1]+HIDIGIT(t);</p>
<p>C|i+i+1]= LODIGIT(f);</p>
<p>C[i+i+2] = HIDIGIT(f);</p>
<p>}</p>
<p>}</p>
<p>Сложность этого алгоритма O(n2).</p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=220</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сложение длинного числа</title>
		<link>/?p=213</link>
		<comments>/?p=213#comments</comments>
		<pubDate>Fri, 03 Dec 2010 20:12:13 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Задачи и решения]]></category>
		<category><![CDATA[Pascal]]></category>
		<category><![CDATA[алгоритм]]></category>
		<category><![CDATA[длинная арифметика]]></category>

		<guid isPermaLink="false">http://s12.localhost/?p=213</guid>
		<description><![CDATA[Приведем реализацию алгоритма сложения, а также ввод и вывод длинного числа на Паскале. {основная программа} Var A, B, C : Tlong; Begin Assign(Input, &#8216;Input.txt&#8217;); Reset(Input); ReadLong(A); ReadLong(B) ; Close(Input); SumLongTwo(A, B, C); Assign(Output, &#8216;Output.txt&#8217;); Rewrite(Output); WriteLong(C); Close(Output) End. {процедура ввода длинного числа} Procedure ReadLong(Var A : Tlong); Var ch : char; i : Integer; Begin]]></description>
			<content:encoded><![CDATA[<p>Приведем реализацию алгоритма сложения, а также ввод и вывод длинного числа на Паскале.</p>
<p><strong>{основная программа}</strong></p>
<p>Var A, B, C : Tlong;</p>
<p>Begin</p>
<p>Assign(Input, &#8216;Input.txt&#8217;); Reset(Input);</p>
<p>ReadLong(A); ReadLong(B) ;</p>
<p>Close(Input);</p>
<p>SumLongTwo(A, B, C);<span id="more-213"></span></p>
<p>Assign(Output, &#8216;Output.txt&#8217;);</p>
<p>Rewrite(Output);</p>
<p>WriteLong(C);</p>
<p>Close(Output)</p>
<p>End.</p>
<p>{процедура ввода длинного числа}</p>
<p>Procedure ReadLong(Var A : Tlong);</p>
<p>Var ch : char; i : Integer;</p>
<p>Begin</p>
<p>FillChar(A, SizeOf(A), 0) ;</p>
<p>Read(ch);</p>
<p>While Not(ch In ['0'..'9']) Do Read(ch);</p>
<p>{пропуск не цифр во входном файле}</p>
<p>While ch In ['0'..'9'] Do</p>
<p>Begin</p>
<p>For i := A[0] DownTo 1 Do</p>
<p>Begin</p>
<p>{&laquo;протаскивание&raquo; старшей цифры в числе из A[i]</p>
<p>в младшую цифру числа из A[i+l]}</p>
<p>A[i+l] := A[i+l] + (LongInt(A[i]) * 10) Div Osn;</p>
<p>A[i] := (LongInt(A[i]) * 10) Mod Osn</p>
<p>End;</p>
<p>A[1] := A[l] + Ord(ch) &#8211; Ord(&#8217;0&#8242;);</p>
<p>{добавляем младшую цифру к числу из А[1]}</p>
<p>If A[A[0]+1] &gt; 0 Then Inc(A[0]);</p>
<p>{изменяем длину, число задействованных элементов массива А}</p>
<p>Read(ch)</p>
<p>End</p>
<p>End;</p>
<p>{процедура вывода длинного числа}</p>
<p>Procedure WriteLong(Const A : Tlong);</p>
<p>Var          ls, s : String; i : Integer;</p>
<p>Begin</p>
<p>Str(Osn Div 10, Is);</p>
<p>Write(A[A[0]]; {выводим старшие цифры числа}</p>
<p>For i := A[0] &#8211; l DownTo 1 Do</p>
<p>Begin</p>
<p>Str(A[i], s);</p>
<p>While Length(s) &lt; Length(Is) Do s := &#8217;0&#8242; + s;</p>
<p>{дополняем незначащими нулями}</p>
<p>Write(s)</p>
<p>End;</p>
<p>WriteLn</p>
<p>End;</p>
<p>{процедура сложения двух длинных чисел}</p>
<p>Procedure SumLongTwo(A, B : Nlong; Var C : Tlong);</p>
<p>Var i, k : Integer;</p>
<p>Begin</p>
<p>FillChar(C, SizeOf (C), 0) ;</p>
<p>If A[0] &gt; B[0] Then k := A[0] Else k :=B[0];</p>
<p>For i := l To k Do</p>
<p>Begin     С [i+1] := (C[i] + A[i] + B[i]) Div Osn;</p>
<p>C[i] := (C[i] + A[i] + B[i]) Mod Osn</p>
<p>End;</p>
<p>If C[k+l] = 0 Then C[0] := k Else C[0] := k + l</p>
<p>End;</p>
<p><strong> </strong></p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=213</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сравнение «длинных» чисел длины n</title>
		<link>/?p=211</link>
		<comments>/?p=211#comments</comments>
		<pubDate>Fri, 03 Dec 2010 20:09:27 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Задачи и решения]]></category>
		<category><![CDATA[длинная арифметика]]></category>

		<guid isPermaLink="false">http://s12.localhost/?p=211</guid>
		<description><![CDATA[Сравнение «длинных» чисел длины n цифр А==В */ int Cmp( const DIGIT A[ ], /* первое число */ const DIGIT B[ ], /* второе число */ int n) /* длина чисел */ { int i; for(i=n-1; (i&#62;=0)&#38;&#38;(A[i]==B[i]); i&#8211;); if (i&#60;0) return 0; if(A[i]&#62;B[i]) return +1; return -1; }]]></description>
			<content:encoded><![CDATA[<p><strong>Сравнение «длинных» чисел длины </strong><strong>n цифр А==В */</strong></p>
<p><strong>int Cmp(</strong></p>
<p><strong> const DIGIT A[ ], /* первое</strong><strong> число</strong><strong> */</strong></p>
<p><strong>const </strong><strong>DIGIT </strong><strong>B[ ], /* второе число */</strong></p>
<p><strong>int n) /* длина</strong><strong> чисел</strong><strong> */</strong></p>
<p><strong>{</strong></p>
<p><strong> int i;</strong></p>
<p><strong> for(i=n-1; (i&gt;=0)&amp;&amp;(A[i]==B[i]); i&#8211;);</strong></p>
<p><strong> if (i&lt;0) return 0;</strong></p>
<p><strong> if(A[i]&gt;B[i]) return +1;</strong></p>
<p><strong> return -1;</strong></p>
<p><strong>}</strong></p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=211</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сложение длинных чисел</title>
		<link>/?p=208</link>
		<comments>/?p=208#comments</comments>
		<pubDate>Fri, 03 Dec 2010 20:07:01 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Алгоритмы]]></category>
		<category><![CDATA[Задачи и решения]]></category>
		<category><![CDATA[ассемблер]]></category>
		<category><![CDATA[длинная арифметика]]></category>

		<guid isPermaLink="false">http://s12.localhost/?p=208</guid>
		<description><![CDATA[За операцию сложения отвечает процедура ADD DIGIT Аdd( DIGIT C[ ], // результат const DIGIT A[ ], // первое слагаемое const DIGIT B[ ], // второе слагаемое int n) // длина слагаемых {              TWODIGIT T; DIGIT d=0; int i; for(i=0; i&#60;n; i++) {              T = (TWODIGIT)A[i]+B[i]+d; C[i] = LODIGIT(T); d = HIDIGIT(T); } return d;]]></description>
			<content:encoded><![CDATA[<p>За операцию сложения отвечает процедура ADD</p>
<p><strong>DIGIT А</strong><strong>dd(</strong></p>
<p><strong>DIGIT </strong><strong>C[ ], // результат </strong></p>
<p><strong>const </strong><strong>DIGIT </strong><strong>A[ ], // первое слагаемое </strong></p>
<p><strong>const </strong><strong>DIGIT </strong><strong>B[ ], // второе слагаемое </strong></p>
<p><strong>int </strong><strong>n) // длина слагаемых <span id="more-208"></span></strong></p>
<p><strong>{              TWODIGIT T;</strong></p>
<p><strong> DIGIT d=0;</strong></p>
<p><strong> int i;</strong></p>
<p><strong> for(i=0; i&lt;n; i++)</strong></p>
<p><strong> {              T = (TWODIGIT)A[i]+B[i]+d;</strong></p>
<p><strong> C[i] = LODIGIT(T);</strong></p>
<p><strong> d = HIDIGIT(T);</strong></p>
<p><strong> }</strong></p>
<p><strong> </strong><strong>return </strong><strong>d;</strong></p>
<p><strong>}</strong></p>
<p style="text-align: justify;">Сложность данного алгоритма O(n). Реализация этого алгоритма проста, так как он имитирует известную всем процедуру сложения в «столбик».</p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=208</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Умножение двумерного массива на число</title>
		<link>/?p=176</link>
		<comments>/?p=176#comments</comments>
		<pubDate>Fri, 03 Dec 2010 19:23:17 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Задачи и решения]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[массив]]></category>

		<guid isPermaLink="false">http://s12.localhost/?p=176</guid>
		<description><![CDATA[Задача: Умножить двумерный массив на число Код программы на Visual Basic Const N = 4 Const M = 3 Dim A(1 To N, 1 To M) As Integer Dim B(1 To N, 1 To M) As Integer Dim C As Integer C = Val(InputBox(&#171;c=&#187;, C)) Print &#171;Умножить на &#171;; C Print &#171;исходная матрица&#187; For i]]></description>
			<content:encoded><![CDATA[<p><strong>Задача: </strong></p>
<p>Умножить двумерный массив на число</p>
<p><strong>Код программы на Visual Basic<span id="more-176"></span></strong></p>
<p>Const N = 4</p>
<p>Const M = 3</p>
<p>Dim A(1 To N, 1 To M) As Integer</p>
<p>Dim B(1 To N, 1 To M) As Integer</p>
<p>Dim C As Integer</p>
<p>C = Val(InputBox(&laquo;c=&raquo;, C))</p>
<p>Print &laquo;Умножить на &laquo;; C</p>
<p>Print &laquo;исходная матрица&raquo;</p>
<p>For i = 1 To N</p>
<p>For j = 1 To M</p>
<p>A(i, j) = Int(Rnd * 34 &#8211; 10)</p>
<p>Print A(i, j);</p>
<p>Next j</p>
<p>Print</p>
<p>Next i</p>
<p>Print &laquo;полученная матрица&raquo;</p>
<p>For i = 1 To N</p>
<p>For j = 1 To M</p>
<p>B(i, j) = C * A(i, j)</p>
<p>Print B(i, j);</p>
<p>Next j</p>
<p>Print</p>
<p>Next i</p>
<p>End Sub</p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=176</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Работа со строками на С++</title>
		<link>/?p=160</link>
		<comments>/?p=160#comments</comments>
		<pubDate>Fri, 03 Dec 2010 19:05:44 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Задачи и решения]]></category>
		<category><![CDATA[листинг]]></category>
		<category><![CDATA[С++]]></category>

		<guid isPermaLink="false">http://s12.localhost/?p=160</guid>
		<description><![CDATA[Постановка задачи: Написать программу, демонстрирующую работу с объектами двух типов: SymbString (символьная строка) DecString (десятичная строка).  Каждый объект должен иметь идентификатор(в виде произвольной строки символов) и одно или несколько полей для хранения состояния(текущего значения) объекта. Клиенту (функции main)  должны  быть доступны следующие основные операции: Создать объект Удалить объект Показать значение объекта И следующие дополнительные операции:]]></description>
			<content:encoded><![CDATA[<p><strong><em>Постановка задачи:</em></strong></p>
<p style="text-align: justify;">Написать программу, демонстрирующую работу с объектами двух типов: SymbString (символьная строка) DecString (десятичная строка).  Каждый объект должен иметь идентификатор(в виде произвольной строки символов) и одно или несколько полей для хранения состояния(текущего значения) объекта.</p>
<p>Клиенту (функции main)  должны  быть доступны следующие основные операции:</p>
<ul>
<li>Создать объект</li>
<li>Удалить объект</li>
<li>Показать значение объекта<span id="more-160"></span></li>
</ul>
<p>И следующие дополнительные операции:</p>
<p>Для объектов класса DecString:</p>
<ul>
<li>Показать значение двоичного значения объекта  ShowBin();</li>
<li>Показать значение восьмеричного значения объекта ShowOct;</li>
<li>Показать значение шестнадцатеричного значения объекта. ShowHex;</li>
</ul>
<p style="text-align: justify;">Операции по созданию и удалению объектов инкапсулировать в классе Factory. Предусмотреть меню, позволяющее продемонстрировать заданные операции.</p>
<p><strong><em> </em></strong></p>
<p><strong><em>Код программы:</em></strong><strong><em> </em></strong></p>
<p><strong>Main</strong><strong>.</strong><strong>cpp</strong><strong> </strong></p>
<p>#include &lt;iostream.h&gt;/<em>/ библиотека ввода/вывода</em></p>
<p>#include &laquo;AString.h&raquo; <em>// основной класс  строка</em></p>
<p>#include &laquo;SymbString.h&raquo; <em>// наследуемый класс класса AString &#8211; символьная строка</em></p>
<p>#include &laquo;DecString.h&raquo;  <em>// наследуемый класс класса AString &#8211; десятичная строка</em></p>
<p>#include &laquo;Action.h&raquo;   <em>// базовый класс действие</em></p>
<p>#include &laquo;ShowStr.h&raquo;<em> // показать значение строки</em></p>
<p>#include &laquo;ShowHex.h&raquo; <em>//  показать в шестнадцатеричной форме</em></p>
<p>#include &laquo;ShowOct.h&raquo;<em> //  показать в восьмеричной форме</em></p>
<p>#include &laquo;ShowBin.h&raquo; <em>//  показать в двоичной форме</em></p>
<p>#include &laquo;Factory.h&raquo; //</p>
<p>#include &laquo;Menu.h&raquo;   <em>// </em><em>класс</em><em> меню</em></p>
<p>using namespace std;</p>
<p>Action* pActs[] = {&amp;show_str, &amp;show_hex, &amp;show_oct, &amp;show_bin}; <em>// </em><em>массив</em><em> действий</em></p>
<p>vector&lt;Action*&gt; actionList(pActs, pActs+sizeof(pActs)/sizeof(Action*));</p>
<p>int main()</p>
<p>{    Factory factory;</p>
<p>Menu menu(actionList);</p>
<p>JobMode jobMode;</p>
<p>while((jobMode = menu.SelectJob())!=Exit){</p>
<p>switch(jobMode){</p>
<p>case AddObj: factory.AddObject();</p>
<p>break;</p>
<p>case DelObj: factory.DeletObject();</p>
<p>break;</p>
<p>case WorkWithObj:</p>
<p>AString* pObj = menu.SelectObject(factory);</p>
<p>Action* pAct = menu.SelectAction(pObj);</p>
<p>if(pAct)</p>
<p>pAct-&gt;Operate(pObj);</p>
<p>break;</p>
<p>}</p>
<p>cin.get();</p>
<p>}</p>
<p>return 0;</p>
<p>}</p>
<p><strong>AString.h</strong></p>
<p>#ifndef ASTRING_H</p>
<p>#define ASTRING_H</p>
<p>#include &lt;string.h&gt;</p>
<p>class AString{</p>
<p>public:</p>
<p>virtual ~AString() {}</p>
<p>virtual const std::string&amp; GetName() const = 0; <em>// </em><em>получить</em><em> название</em></p>
<p>virtual const std::string&amp; GetVal() const = 0; <em>// </em><em>значение</em></p>
<p>virtual int GetSize() const = 0; <em>// размер</em></p>
<p>};</p>
<p>#endif</p>
<p><strong>SymbString.h</strong></p>
<p>#include &lt;string.h&gt;</p>
<p>#include &laquo;AString.h&raquo; <em>// </em><em>базовый</em><em> класс</em><em> AString</em></p>
<p>class SymbString : public AString{</p>
<p>public:</p>
<p>SymbString(std::string _name) : name(_name){}</p>
<p>SymbString(std::string _name, std::string _val) :</p>
<p>name(_name), val(_val){}</p>
<p>const std::string&amp; GetName() const{return name;}</p>
<p>const std::string&amp; GetVal() const{return val;}</p>
<p>int GetSize() const{return val.size();}</p>
<p>private:</p>
<p>std::string name;</p>
<p>std::string val;</p>
<p>};</p>
<p><strong>DecString.h</strong></p>
<p>#include &lt;string.h&gt;</p>
<p>#include &laquo;AString.h&raquo;<em>// </em><em>базовый</em><em> класс</em><em> AString</em></p>
<p>const std::string alph = &laquo;0123456789&#8243;; <em>// массив возможных значений</em></p>
<p>bool IsDecStrVal(std::string);</p>
<p>class DecString : public AString{</p>
<p>public:</p>
<p>DecString(std::string _name) : name(_name){}</p>
<p>DecString(std::string, std::string);</p>
<p>const std::string&amp; GetName() const {return name;}</p>
<p>const std::string&amp; GetVal() const {return val;}</p>
<p>int GetSize() const {return val.size();}</p>
<p>private:</p>
<p>std::string name;</p>
<p>std::string val;</p>
<p>};</p>
<p><strong>Action.h</strong></p>
<p>#ifndef ACTION_H</p>
<p>#define ACTION_H</p>
<p>#include &laquo;AString.h&raquo;</p>
<p>class Action{</p>
<p>public:</p>
<p>virtual ~Action() {}</p>
<p>virtual void Operate(AString*) = 0;</p>
<p>virtual const std::string&amp; GetName() const = 0;</p>
<p>protected:</p>
<p>long GetDecimal(AString* pObj) const;</p>
<p>};</p>
<p>#endif</p>
<p><strong>Action.cpp</strong></p>
<p>#include &lt;iostream.h&gt;</p>
<p>#include &laquo;Action.h&raquo;</p>
<p>#include &laquo;AString.h&raquo;</p>
<p>#include &laquo;DecString.h<em>&laquo;// десятичная строка</em></p>
<p>using namespace std;</p>
<p><em> // получение десятичного числа</em></p>
<p>long Action::GetDecimal(AString* pObj) const{</p>
<p>if (reinterpret_cast&lt;DecString*&gt;(pObj)) {</p>
<p>long dest;</p>
<p>string source=pObj-&gt;GetVal();</p>
<p>sscanf(source.c_str(),&raquo;%i&raquo;, &amp;dest);</p>
<p>return dest;</p>
<p>}</p>
<p>else{</p>
<p>cout&lt;&lt;&raquo;Action not supported&raquo;&lt;&lt;endl;</p>
<p>return -1;</p>
<p>}}</p>
<p><strong>Factory.h</strong></p>
<p>#define FACTORY_H</p>
<p>#include &lt;vector.h&gt; <em>// </em><em>класс</em><em> вектор</em></p>
<p>#include &laquo;AString.h&raquo;</p>
<p>class Factory{</p>
<p>friend class Menu;</p>
<p>public:</p>
<p>Factory() {}</p>
<p>void AddObject(); <em>// метод добавить объект</em></p>
<p>void DeletObject(); <em>// метод удаления объекта</em></p>
<p>private:</p>
<p>std::vector&lt;AString*&gt; pObj;</p>
<p>};</p>
<p>#endif</p>
<p><strong>Factory.cpp</strong></p>
<p>#include &lt;iostream.h&gt;</p>
<p>#include &laquo;Factory.h&raquo;</p>
<p>#include &laquo;Menu.h&raquo;   <em>// класс меню</em></p>
<p>#include &laquo;SymbString.h&raquo; <em>//класс символьная строка</em></p>
<p>#include &laquo;DecString.h&raquo; <em>//класс десятичная строка</em></p>
<p>using namespace std;</p>
<p>#define MAX_LEN_STR 100</p>
<p><em>// Добавление объекта</em></p>
<p>void Factory::AddObject(){</p>
<p>cout&lt;&lt;&raquo;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;\n&raquo;;</p>
<p>cout&lt;&lt;&raquo;Select object type:\n&raquo;;</p>
<p>cout&lt;&lt;&raquo;1.Symbolic string&raquo;&lt;&lt;endl;</p>
<p>cout&lt;&lt;&raquo;2.Dec string&raquo;&lt;&lt;endl;</p>
<p>int item = Menu::SelectItem(2);</p>
<p>string name;</p>
<p>cout&lt;&lt;&raquo;Enter object name:&raquo;;</p>
<p>cin&gt;&gt;name;</p>
<p>cin.get();</p>
<p>cout&lt;&lt;&raquo;Enter object value:&raquo;;</p>
<p>char buf[MAX_LEN_STR];</p>
<p>cin.getline(buf, MAX_LEN_STR);</p>
<p>string value = buf;</p>
<p>AString* pNewObj;</p>
<p>switch(item){</p>
<p>case 1:</p>
<p>pNewObj = new SymbString(name, value);</p>
<p>break;</p>
<p>case 2:</p>
<p>if(!IsDecStrVal(value)){    <em>// проверка является ли введенная строка десятичной</em></p>
<p>cout&lt;&lt;&raquo;Error!&raquo;&lt;&lt;endl; return;</p>
<p>}</p>
<p>pNewObj = new DecString(name, value);</p>
<p>break;</p>
<p>}</p>
<p>pObj.push_back(pNewObj);</p>
<p>cout&lt;&lt;&raquo;Object added.&raquo;&lt;&lt;endl;</p>
<p>}</p>
<p><em>// Удаление объекта</em></p>
<p>void Factory::DeletObject(){</p>
<p>int nItem = pObj.size();</p>
<p>if(!nItem){</p>
<p>cout&lt;&lt;&raquo;There are no object.&raquo;&lt;&lt;endl;</p>
<p>cin.get();</p>
<p>return;</p>
<p>}</p>
<p>cout&lt;&lt;&raquo;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.\n&raquo;;</p>
<p>cout&lt;&lt;&raquo;Delete one of the folloowing Object:\n&raquo;;</p>
<p>for(int i = 0; i&lt;nItem; ++i)</p>
<p>cout&lt;&lt;i+1&lt;&lt;&raquo;.&raquo;&lt;&lt;pObj[i]-&gt;GetName()&lt;&lt;endl;</p>
<p>int item = Menu::SelectItem(nItem);</p>
<p>string objName = pObj[item-1]-&gt;GetName();</p>
<p>pObj.erase(pObj.begin()+item-1);</p>
<p>cout&lt;&lt;&raquo;Object&raquo;&lt;&lt;objName&lt;&lt;&raquo;deleted.&raquo;&lt;&lt;endl;</p>
<p>cin.get();</p>
<p>}</p>
<p><strong>ShowBin.h</strong></p>
<p>#include &laquo;Action.h&raquo;</p>
<p>class ShowBin : public Action{</p>
<p>public:</p>
<p>ShowBin() : name(&laquo;Show binary value&raquo;){}</p>
<p>void Operate(AString*);</p>
<p>const std::string&amp; GetName() const {return name;}</p>
<p>private:</p>
<p>std::string GetBinary(AString*) const;</p>
<p>std::string name;</p>
<p>};</p>
<p>extern ShowBin show_bin;</p>
<p><strong>ShowBin.cpp</strong></p>
<p>#include &lt;iostream.h&gt;</p>
<p>#include &laquo;AString.h&raquo; <em>//основной класс строка</em></p>
<p>#include &laquo;ShowBin.h&raquo;</p>
<p>using namespace std;</p>
<p>void ShowBin::Operate(AString* pObj){</p>
<p>cout&lt;&lt;pObj-&gt;GetName()&lt;&lt;&raquo;: &laquo;;</p>
<p>cout&lt;&lt; pObj-&gt;GetVal();</p>
<p>cout&lt;&lt;&raquo; in binary is: &laquo;&lt;&lt; GetBinary(pObj)&lt;&lt;endl;</p>
<p>cin.get();</p>
<p>}</p>
<p><em>// Вычисление двоичного числа</em></p>
<p>string ShowBin::GetBinary(AString* pObj) const{</p>
<p>int nBinDigit=4*pObj-&gt;GetSize();</p>
<p>char* binStr=new char[nBinDigit+1];</p>
<p>for(int k=0; k&lt;nBinDigit;++k) binStr[k]= &#8217;0&#8242;;</p>
<p>binStr[nBinDigit]=0;</p>
<p>long decVal=GetDecimal(pObj); <em>// Вычисление десятичного значения</em></p>
<p>if(-1==decVal)</p>
<p>return string(&laquo;&raquo;);</p>
<p>int i=nBinDigit-1;</p>
<p><em>// формирования массива символов 0 1 представляющих двоичное число</em></p>
<p>while (decVal&gt;0) {</p>
<p>binStr[i--]=48+(decVal%2);</p>
<p>decVal&gt;&gt;=1;</p>
<p>}</p>
<p>string temp(binStr);</p>
<p>delete [] binStr;</p>
<p>return temp;</p>
<p>}</p>
<p>ShowBin show_bin;</p>
<p><strong>ShowHex.h</strong></p>
<p>#include &laquo;Action.h&raquo;</p>
<p>class ShowHex : public Action {</p>
<p>public:</p>
<p>ShowHex() : name(&laquo;Show hex value&raquo;) {}</p>
<p>void Operate(AString*);</p>
<p>const std::string&amp; GetName() const {return name;}</p>
<p>private:</p>
<p>std::string name;</p>
<p>};</p>
<p>extern ShowHex show_hex;</p>
<p><strong>ShowHex.cpp</strong></p>
<p>#include &lt;iostream.h&gt;</p>
<p>#include &laquo;AString.h&raquo;  <em>// основной класс строк</em></p>
<p>#include &laquo;ShowHex.h&raquo;</p>
<p>using namespace std;</p>
<p><em>// операция получение шестнадцатиричного числа</em></p>
<p>void ShowHex::Operate(AString* pObj) {</p>
<p>cout&lt;&lt;pObj-&gt;GetName()&lt;&lt; &laquo;: &laquo;;</p>
<p>cout&lt;&lt;pObj-&gt;GetVal();</p>
<p>int decVal=GetDecimal(pObj);/<em>/ получение десятичного числа</em></p>
<p>if(decVal !=-1)</p>
<p>cout&lt;&lt;&raquo; in hexadecimal is: &laquo;;</p>
<p>cout &lt;&lt;hex&lt;&lt;GetDecimal(pObj); // <em>вывод шестнадцатиричного числа</em></p>
<p>cout&lt;&lt;endl;</p>
<p>cin.get();</p>
<p>}</p>
<p>ShowHex show_hex;</p>
<p><strong> </strong></p>
<p><strong>ShowOct.h</strong></p>
<p>#include &laquo;Action.h&raquo;</p>
<p>class ShowOct : public Action {</p>
<p>public:</p>
<p>ShowOct() : name(&laquo;Show oct value&raquo;) {}</p>
<p>void Operate(AString*);</p>
<p>const std::string&amp; GetName() const {return name;}</p>
<p>private:</p>
<p>std::string name;</p>
<p>};</p>
<p>extern ShowOct show_oct;</p>
<p><strong>ShowOct.cpp</strong></p>
<p>#include &lt;iostream.h&gt;</p>
<p>#include &laquo;AString.h&raquo; <em>// основной класс строка</em></p>
<p>#include &laquo;ShowOct.h&raquo;</p>
<p>using namespace std;</p>
<p><em>// Показать число в восьмеричной форме</em></p>
<p>void ShowOct::Operate(AString* pObj) {</p>
<p>cout&lt;&lt;pObj-&gt;GetName()&lt;&lt; &laquo;: &laquo;;</p>
<p>cout&lt;&lt;pObj-&gt;GetVal() ;</p>
<p>int decVal=GetDecimal(pObj);<em> // получение десятичного значения</em></p>
<p>if(decVal !=-1)</p>
<p>cout &lt;&lt;&raquo; in octal is: &laquo;;</p>
<p>cout &lt;&lt;oct&lt;&lt;GetDecimal(pObj); <em>//получение и вывод восьмеричного значения</em></p>
<p>cout&lt;&lt;endl;</p>
<p>cin.get();</p>
<p>}</p>
<p>ShowOct show_oct;</p>
<p><strong>ShowStr.h</strong></p>
<p>#include &laquo;Action.h&raquo;</p>
<p>class ShowStr : public Action{</p>
<p>public:</p>
<p>ShowStr() : name(&laquo;Show string value&raquo;){}</p>
<p>void Operate(AString*);</p>
<p>const std::string&amp; GetName() const{return name;}</p>
<p>private:</p>
<p>std::string name;</p>
<p>};</p>
<p>extern ShowStr show_str;</p>
<p><strong>ShowStr.cpp</strong></p>
<p>#include &lt;iostream.h&gt;</p>
<p>#include &laquo;ShowStr.h&raquo;</p>
<p>using namespace std;</p>
<p>void ShowStr::Operate(AString* pObj){</p>
<p>cout&lt;&lt;pObj-&gt;GetName()&lt;&lt;&raquo;:&raquo;; // вывод имени строки</p>
<p>cout&lt;&lt;pObj-&gt;GetVal()&lt;&lt;endl; // вывод значениястроки</p>
<p>cout&lt;&lt;endl;</p>
<p>cin.get();</p>
<p>}</p>
<p>ShowStr show_str;</p>
<p><strong>Menu.h</strong></p>
<p>#include &laquo;Action.h&raquo;</p>
<p>#include &laquo;Factory.h&raquo;</p>
<p>typedef enum{AddObj, DelObj, WorkWithObj, Exit} JobMode;</p>
<p>class Menu{</p>
<p>public:</p>
<p>Menu(std::vector&lt;Action*&gt;);</p>
<p>JobMode SelectJob() const;</p>
<p>AString* SelectObject(const Factory&amp;) const;</p>
<p>Action*  SelectAction(const AString*) const;</p>
<p>static int SelectItem(int);</p>
<p>private:</p>
<p>std::vector&lt;Action*&gt; pAct;</p>
<p>};</p>
<p><strong>Menu.cpp</strong></p>
<p>#include &lt;iostream.h&gt;</p>
<p>#include &laquo;AString.h&raquo; <em>// основной класс строка</em></p>
<p>#include &laquo;SymbString.h&raquo; <em>// класс символьная строка</em></p>
<p>#include &laquo;DecString.h&raquo; <em>// класс десятичная строка</em></p>
<p>#include &laquo;Menu.h&raquo;</p>
<p>using namespace std;</p>
<p>Menu::Menu(vector&lt;Action*&gt; _pAct) : pAct(_pAct){}</p>
<p>JobMode Menu::SelectJob() const{</p>
<p>cout&lt;&lt;&raquo;=======================\n&raquo;;</p>
<p>cout&lt;&lt;&raquo;Select one of the following job modes:\n&raquo;;</p>
<p>cout&lt;&lt;&raquo;1. Add object&raquo;&lt;&lt;endl;</p>
<p>cout&lt;&lt;&raquo;2. Delet object&raquo;&lt;&lt;endl;</p>
<p>cout&lt;&lt;&raquo;3. Work with object&raquo;&lt;&lt;endl;</p>
<p>cout&lt;&lt;&raquo;4. Exit&raquo;&lt;&lt;endl;</p>
<p>int item = SelectItem(4);</p>
<p>return(JobMode)(item-1);</p>
<p>}</p>
<p><em>// Выбор объекта</em></p>
<p>AString* Menu::SelectObject(const Factory&amp; fctry) const{</p>
<p>int nItem = fctry.pObj.size();</p>
<p>if(!nItem){</p>
<p>cout&lt;&lt;&raquo;There are no object.&raquo;&lt;&lt;endl;</p>
<p>cin.get();</p>
<p>return 0;</p>
<p>}</p>
<p>cout&lt;&lt;&raquo;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.\n&raquo;;</p>
<p>cout&lt;&lt;&raquo;Select one of the following Object:\n&raquo;;</p>
<p>for(int i = 0; i&lt;nItem; ++i){</p>
<p>cout&lt;&lt;i+1&lt;&lt;&raquo;.&raquo;;</p>
<p>cout&lt;&lt;fctry.pObj[i]-&gt;GetName()&lt;&lt;endl;</p>
<p>}</p>
<p>int item = SelectItem(nItem);</p>
<p>return fctry.pObj[item-1];</p>
<p>}</p>
<p><em>// Выбор действия</em></p>
<p>Action* Menu::SelectAction(const AString* pObj) const{</p>
<p>if(!pObj) return 0;</p>
<p>int nItem = pAct.size();</p>
<p>cout&lt;&lt;&raquo;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..\n&raquo;;</p>
<p>cout&lt;&lt;&raquo;Select one of the following Actions:\n&raquo;;</p>
<p>for(int i = 0; i&lt;nItem; ++i){</p>
<p>cout&lt;&lt;i+1&lt;&lt;&raquo;.&raquo;;</p>
<p>cout&lt;&lt;pAct[i]-&gt;GetName()&lt;&lt;endl;</p>
<p>}</p>
<p>int item = SelectItem(nItem);</p>
<p>return pAct[item-1];</p>
<p>}</p>
<p><em>// Выбор пункта</em></p>
<p>int Menu::SelectItem(int nItem){</p>
<p>cout&lt;&lt;&raquo;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;\n&raquo;;</p>
<p>int item;</p>
<p>while(true){</p>
<p>cin&gt;&gt;item;</p>
<p>if((item&gt;0) &amp;&amp; (item&lt;=nItem) &amp;&amp; (cin.peek() == &#8216;\n&#8217;)){</p>
<p>cin.get(); break;</p>
<p>}</p>
<p>else{</p>
<p>cout&lt;&lt;&raquo;Error (must be number from 1 to&raquo;&lt;&lt;nItem&lt;&lt;&raquo;):&raquo;&lt;&lt;endl;</p>
<p>cin.clear();</p>
<p>while(cin.get() !=&#8217;\n&#8217;){};</p>
<p>} }</p>
<p>return item;</p>
<p>}</p>
<p><strong><em>Пример работы программы</em></strong>:</p>
<p><strong><span style="color: #008080;">Добавление объекта</span></strong></p>
<p><a href="/wp-content/uploads/2010/12/142.png"><img class="aligncenter size-full wp-image-161" title="Добавление объекта строки" src="/wp-content/uploads/2010/12/142.png" alt="" width="259" height="151" /></a><span style="color: #008080;"><strong>Удаление объекта</strong></span></p>
<p><a href="/wp-content/uploads/2010/12/143.png"><img class="aligncenter size-full wp-image-162" title="удаление объекта строки" src="/wp-content/uploads/2010/12/143.png" alt="" width="452" height="288" /></a><span style="color: #008080;"><strong>Работа      с объектом</strong></span></p>
<ul>
<li>Показать значение строки</li>
</ul>
<p><a href="/wp-content/uploads/2010/12/144.png"><img class="aligncenter size-full wp-image-163" title="показать значение строки на С++" src="/wp-content/uploads/2010/12/144.png" alt="" width="447" height="251" /></a></p>
<ul>
<li>Показать      изображение двоичного, шестнадцатеричного, восьмеричного  значения объекта</li>
</ul>
<p><a href="/wp-content/uploads/2010/12/145.png"><img class="aligncenter size-full wp-image-164" title="•	Показать изображение двоичного, шестнадцатеричного, восьмеричного  значения объекта" src="/wp-content/uploads/2010/12/145.png" alt="" width="464" height="248" /></a></p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=160</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Заполнение матрицы элементами, окаймляющими элемент Akl, определенным образом</title>
		<link>/?p=157</link>
		<comments>/?p=157#comments</comments>
		<pubDate>Fri, 03 Dec 2010 18:54:26 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Задачи и решения]]></category>
		<category><![CDATA[листинг]]></category>
		<category><![CDATA[массив]]></category>
		<category><![CDATA[С++]]></category>

		<guid isPermaLink="false">http://s12.localhost/?p=157</guid>
		<description><![CDATA[Постановка задачи: Матрицу А(m, n) заполнить следующим образом. Для заданных  k и l элементу akl присвоить значение 1; элементам, окаймляющим его (соседним с ним по вертикали, горизонтали и диагоналям) – значение 2; элементам следующего окаймления – значение 3 и так далее до заполнения всей матрицы. Решение: Формула  A[i][j]=max(abs(i-k),abs(j-l))+1; определяет положение элемента aij относительно элемента akl=1 (круг окаймления)]]></description>
			<content:encoded><![CDATA[<p><strong>Постановка задачи: </strong></p>
<p style="text-align: justify;">Матрицу<em> А(</em><em>m</em><em>, </em><em>n</em><em>) </em>заполнить следующим образом. Для заданных  k и l элементу a<sub>kl</sub> присвоить значение 1; элементам, окаймляющим его (соседним с ним по вертикали, горизонтали и диагоналям) – значение 2; элементам следующего окаймления – значение 3 и так далее до заполнения всей матрицы.<span id="more-157"></span></p>
<p><strong>Решение</strong><strong>:</strong></p>
<p style="text-align: justify;">Формула  A[i][j]=max(abs(i-k),abs(j-l))+1; определяет положение элемента a<sub>ij</sub><sub> </sub> относительно элемента a<sub>kl</sub>=1 <sub> </sub>(круг окаймления) и присваивает ему соответствующее значение, где</p>
<p>K – номер строки, k=0…m-1</p>
<p>L – номер столбца, l=0…n-1</p>
<p><strong>Программный</strong><strong> </strong><strong>код</strong><strong>:</strong></p>
<p>#include &lt;stdlib.h&gt;</p>
<p>#include &lt;iostream.h&gt; <em>// </em><em>библиотеки</em><em> ввода</em><em> вывода</em></p>
<p>#include &lt;conio.h&gt;</p>
<p>#include &lt;math.h&gt; <em>// </em><em>математическая</em><em> библиотека</em><em></em></p>
<p>void main()</p>
<p>{</p>
<p>const int m=13;   <em>// максимальная граница ввода</em></p>
<p>const int n=10;</p>
<p>int i, j, k, l;</p>
<p>int A[m][n];</p>
<p>m1:cout &lt;&lt; &laquo;Input  0&lt;=k&lt;=&raquo; &lt;&lt; m-1 &lt;&lt; &laquo;\n\r&raquo;;  <em>// </em><em>номер</em><em> строки</em></p>
<p>cin &gt;&gt; k;</p>
<p>if ((k&gt;m-1)||(k&lt;0)) goto m1;    <em>//</em><em>Контроль</em><em> ввода</em><em> k</em></p>
<p>m2:cout &lt;&lt; &laquo;Input  0&lt;l&lt;=&raquo; &lt;&lt; n-1 &lt;&lt; &laquo;\n\r&raquo;;  <em>// </em><em>номер</em><em> столбца</em></p>
<p>cin &gt;&gt; l;</p>
<p>if ((l&gt;n-1)||(l&lt;0)) goto m2;    <em>//Контроль ввода l</em></p>
<p><em>// Заполнение матрицы элементами, окаймляющими элемент </em><em>A<sub>kl</sub></em></p>
<p>for(i = 0; i&lt;m; i++)</p>
<p>{</p>
<p>for (j =0; j&lt;n;j++)</p>
<p>{</p>
<p>A[i][j]=max(abs(i-k),abs(j-l))+1;</p>
<p>}</p>
<p>}</p>
<p>printf(&laquo;\n&raquo;);            <em>// </em><em>Вывод</em><em> матрицы</em><em></em></p>
<p>for(i=0;i&lt;m;i++)</p>
<p>{</p>
<p>for(j=0;j&lt;n;j++)</p>
<p>{</p>
<p>cout&lt;&lt;A[i][j]&lt;&lt;&raquo;\t&raquo;;</p>
<p>}</p>
<p>printf(&laquo;\n&raquo;);</p>
<p>}</p>
<p>getch();</p>
<p>return ;   }</p>
<p><strong>Пример работы программы:</strong></p>
<p><strong><a href="/wp-content/uploads/2010/12/141.png"><img class="aligncenter size-full wp-image-158" title="заполнение матрицы по спирали" src="/wp-content/uploads/2010/12/141.png" alt="" width="420" height="699" /></a><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=157</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Задача про два отрезка на прямой и их общие точки</title>
		<link>/?p=155</link>
		<comments>/?p=155#comments</comments>
		<pubDate>Fri, 03 Dec 2010 18:49:17 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Задачи и решения]]></category>
		<category><![CDATA[листинг]]></category>
		<category><![CDATA[С++]]></category>

		<guid isPermaLink="false">http://s12.localhost/?p=155</guid>
		<description><![CDATA[Постановка задачи: Два отрезка на прямой  заданы координатами своих концов. Определить,  имеют ли эти отрезки общие точки, и если имеют, то длину общей части. Замечание. Необходимо рассмотреть различные слу­чаи взаимной ориентации отрезков. Тестирование должно предусмотреть все такие ситуации. Решение: Пусть А и В – два отрезка, с координатами своих концов  [а1, а2] и [b1, b2]]]></description>
			<content:encoded><![CDATA[<p><strong>Постановка задачи:</strong></p>
<p style="text-align: justify;">Два отрезка на прямой  заданы координатами своих концов. Определить,  имеют ли эти отрезки общие точки, и если имеют, то длину общей части. <strong>Замечание. </strong>Необходимо рассмотреть различные слу­чаи взаимной ориентации отрезков.<strong> Тестирование </strong>должно предусмотреть все такие ситуации.</p>
<p><strong> </strong></p>
<p><strong>Решение:</strong></p>
<p>Пусть А и В – два отрезка, с координатами своих концов  [а1, а2] и [b1, b2] соответственно. a1, b1 –левые координаты, a2, b2 – правые координаты отрезков А и В.<span id="more-155"></span></p>
<p><strong>Возможные случаи взаимной ориентации отрезков:</strong></p>
<ol>
<li>отрезки не имеют общих точек.</li>
<li>отрезки  частично  совпадают.</li>
<li>отрезки могут лежать внутри друг друга.</li>
<li>Могут иметь одну общую точку, в этом случае длина общей части будет равна нулю.</li>
<li>отрезки совпадают.</li>
</ol>
<p><strong>Алгоритм построен на сравнении координат концов заданных отрезков: </strong></p>
<ol>
<li>В случае если ни одна из координат одного отрезка не лежит между концевыми координатами другого, то эти отрезки не имеют общих точек;</li>
<li>В случае если одна из координат одного отрезка лежит между концевыми координатами второго, то эти отрезки имеют общую часть;</li>
<li>В случае если обе концевые координаты одного отрезка лежат между концевыми координатами второго отрезка, то один отрезок лежит внутри другого;</li>
<li>Если одна из  концевых координат одного отрезка совпадает с начальной координатой второго, то отрезки имеют одну общую точку.</li>
<li>Если левые и правые концевые координаты одного отрезка совпадают соответственно с координатами другого отрезка, то эти отрезки совпадают.</li>
</ol>
<p><strong> </strong></p>
<p><strong>Ограничения:</strong></p>
<p style="text-align: justify;">Прямая ограничена интервалом от -10 до 10, в случае если  задаваемые координаты выходят за пределы заданного интервала выводится приглашение ввести их повторно. Так как правые координаты не могут быть расположены левее левых, то при их вводе b2&lt;=b1, a2&lt;=a1    приглашение ввести их повторно.</p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>Код программы </strong></p>
<p>#include &lt;iostream.h&gt;</p>
<p>#include &lt;conio.h&gt;</p>
<p>void main()</p>
<p>{</p>
<p>const int NMIN=-10;   // минимальная граница ввода</p>
<p>const int NMAX=10;  // максимальная граница ввода</p>
<p>double a1,a2,b1, b2, dlina;</p>
<p>m1:cout &lt;&lt; &laquo;Input level coordinate otrezka a: &laquo;&lt;&lt;NMIN&lt;&lt;&raquo;&lt;=a1&lt;=&raquo;&lt;&lt;NMAX&lt;&lt; &laquo;\n\r&raquo;;</p>
<p>cin &gt;&gt;a1;</p>
<p>if ((a1&lt;NMIN)||(a1&gt;NMAX)) goto m1; <em>//</em><em>Контроль</em><em> ввода</em><em> a1</em></p>
<p>m2:cout &lt;&lt; &laquo;Input right coordinate otrezka a: &raquo; &lt;&lt;a1&lt;&lt;&raquo;&lt;a2&lt;=&raquo;&lt;&lt;NMAX&lt;&lt; &laquo;\n\r&raquo;;</p>
<p>cin &gt;&gt;a2;</p>
<p>if ((a2&lt;=a1)||(a1&gt;NMAX)) goto m2;  <em>//</em><em>Контроль</em><em> ввода</em><em> a2</em></p>
<p>m3: cout &lt;&lt; &laquo;Input level coordinate otrezka b: &laquo;&lt;&lt;NMIN&lt;&lt;&raquo;&lt;=b1&lt;=&raquo;&lt;&lt;NMAX&lt;&lt;&raquo;\n\r&raquo;;</p>
<p>cin &gt;&gt;b1;</p>
<p>if ((b1&lt;NMIN)||(b1&gt;NMAX)) goto m3;  <em>//</em><em>Контроль</em><em> ввода</em><em> b1</em></p>
<p>m4:cout &lt;&lt; &laquo;Input right coordinate otrezka b: &raquo; &lt;&lt;b1&lt;&lt;&raquo;&lt;b2&lt;=&raquo;&lt;&lt;NMAX&lt;&lt; &laquo;\n\r&raquo;;</p>
<p>cin &gt;&gt;b2;</p>
<p>if ((b2&lt;=b1)||(b1&gt;NMAX)) goto m4; <em>//</em><em>Контроль</em><em> ввод</em><em>a b2</em></p>
<p>// <em>проверка пересечения отрезков</em></p>
<p>if (((a1&lt;=b1)&amp;&amp;(b1&lt;=a2))||((a1&lt;=b2)&amp;&amp;(b2&lt;=a2))||</p>
<p>((a1&lt;=b1)&amp;&amp;(a1&lt;=b2)&amp;&amp;(b1&lt;=a2)&amp;&amp;(b2&lt;=a2))||</p>
<p>((b1&lt;=a1)&amp;&amp;(b1&lt;=a2)&amp;&amp;(a1&lt;=b2)&amp;&amp;(a2&lt;=b2)))</p>
<p>{</p>
<p>if ((b1&gt;=a1)&amp;&amp;(b2&gt;a1)&amp;&amp;(b1&lt;a2)&amp;&amp;(b2&lt;=a2)) dlina=b2-b1; <em>//</em><em>отрезок</em><em> B лежит</em><em> внутри</em><em> A</em></p>
<p>else if ((b1&lt;=a1)&amp;&amp;(b1&lt;=a2)&amp;&amp;(a1&lt;=b2)&amp;&amp;(a2&lt;=b2)) dlina=a2-a1; <em>//</em><em>отрезок</em><em> A лежит</em><em> внутри</em><em> B</em></p>
<p>else if ((a1&lt;=b1)&amp;&amp;(b1&lt;=a2)) dlina=a2-b1; <em> //  a1&lt;=b1&lt;=a2</em></p>
<p>else if ((b2&gt;=a1)&amp;&amp;(b2&lt;=a2)) dlina=b2-a1;   <em>// a1&lt;=b2&lt;=a2</em></p>
<p>cout &lt;&lt; &laquo;\n\rotrezki are crossed\n\r&raquo;;</p>
<p>cout &lt;&lt; &laquo;\n\rLENGTH of COMMON PART :&raquo;&lt;&lt;dlina;</p>
<p>}</p>
<p>else</p>
<p>cout &lt;&lt; &laquo;\n\rotrezki are not crossed\n\r&raquo;;</p>
<p>getch();</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=155</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Нахождение наибольшего общего делителя двух натуральных чисел</title>
		<link>/?p=153</link>
		<comments>/?p=153#comments</comments>
		<pubDate>Fri, 03 Dec 2010 18:45:44 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Задачи и решения]]></category>
		<category><![CDATA[алгоритм]]></category>
		<category><![CDATA[алгоритм Эвклида]]></category>
		<category><![CDATA[листинг]]></category>
		<category><![CDATA[наибольший общий делитель]]></category>
		<category><![CDATA[С++]]></category>

		<guid isPermaLink="false">http://s12.localhost/?p=153</guid>
		<description><![CDATA[Постановка задачи: Найти наибольший общий делитель (НОД) двух введенных натуральных чисел, используя алгоритм Евклида (алгоритм Евклида: вычитаем из  большего меньшее до тех пор, пока они не сравняются, полученное в результате число и есть НОД). Решение: Наибольшим общим делителем (НОД) двух целых чисел называется такое наибольшее по модулю число, которое делит эти два числа. Так как ]]></description>
			<content:encoded><![CDATA[<p><strong>Постановка задачи: </strong></p>
<p style="text-align: justify;">Найти наибольший общий делитель (НОД) двух введенных натуральных чисел, используя алгоритм Евклида (алгоритм Евклида: вычитаем из  большего меньшее до тех пор, пока они не сравняются, полученное в результате число и есть НОД).</p>
<p><strong>Решение:</strong></p>
<p>Наибольшим общим делителем (НОД) двух целых чисел называется такое наибольшее по модулю число, которое делит эти два числа. Так как  натуральные числа это положительные целые числа, то при вводе двух чисел а и b должно проверяться условие, что они больше нуля.<span id="more-153"></span><strong>Программный код:</strong></p>
<p>#include &lt;iostream.h&gt; // библиотеки ввода вывода</p>
<p>#include &lt;conio.h&gt;</p>
<p>void main()</p>
<p>{</p>
<p>const int nmax=500;   <em>//  максимальная граница ввода</em></p>
<p>int a, b;  <em>// </em><em>натуральные</em><em> числа</em></p>
<p>int result; <em>// </em><em>НОД</em></p>
<p>m:cout &lt;&lt; &laquo;Input  0&lt;a&lt;=&raquo; &lt;&lt; nmax &lt;&lt; &laquo;\n\r&raquo;;</p>
<p>cin &gt;&gt; a;</p>
<p>if ((a&gt;nmax)||(a&lt;=0)) goto m;    <em>//</em><em>контроль</em><em> ввода</em><em> a</em></p>
<p>m1:cout &lt;&lt; &laquo;Input  0&lt;b&lt;=&raquo; &lt;&lt; nmax &lt;&lt; &laquo;\n\r&raquo;;</p>
<p>cin &gt;&gt; b;</p>
<p>if ((b&gt;nmax)||(b&lt;=0)) goto m1;    <em>//</em><em>контроль</em><em> ввода</em><em> b</em></p>
<p><em>// Нахождение НОД по Алгоритму Евклида</em></p>
<p>while(a!=b)</p>
<p>{</p>
<p>if( a&gt;b )</p>
<p>{</p>
<p>a = a-b;</p>
<p>}</p>
<p>else</p>
<p>{</p>
<p>b = b-a;</p>
<p>}</p>
<p>}</p>
<p>result = b;</p>
<p>cout &lt;&lt;&raquo;result:&raquo; &lt;&lt;   result&lt;&lt; &laquo;\n\r&raquo;;</p>
<p>getch();</p>
<p>return;</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=153</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>