<?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=80" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Сайт о программировании, математике и моделировании</description>
	<lastBuildDate>Sun, 17 Feb 2013 18:49:17 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Алгоритм быстрого дискретно-косинусного преобразования</title>
		<link>/?p=364</link>
		<comments>/?p=364#comments</comments>
		<pubDate>Sun, 04 Nov 2012 10:22:37 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Алгоритмы]]></category>
		<category><![CDATA[Информатика и программирование]]></category>
		<category><![CDATA[Листинги]]></category>
		<category><![CDATA[дискретно-косинусное преобразование]]></category>
		<category><![CDATA[С++]]></category>

		<guid isPermaLink="false">/?p=364</guid>
		<description><![CDATA[void dct(const floatImage&#38; src, floatImage&#38; dest) { dest.reset(src.size()); unsigned int i,j,k; real sum; floatImage horizontal(src.iwidth(), src.iheight()); for (j = 0; j &#60; src.iheight(); j++) for (i = 0; i &#60; src.iwidth(); i++) { sum = 0.0; for (k = 0; k &#60; src.iwidth(); k++) sum += src(k,j)* cos(real(2*k+1)*PI*real(i)/(real(2*src.iwidth()))); horizontal(i,j) = sum; } for (i =&#8230;]]></description>
			<content:encoded><![CDATA[<p>void dct(const floatImage&amp; src, floatImage&amp; dest)</p>
<p>{</p>
<p>dest.reset(src.size());</p>
<p>unsigned int i,j,k;</p>
<p>real sum;</p>
<p>floatImage horizontal(src.iwidth(), src.iheight());</p>
<p>for (j = 0; j &lt; src.iheight(); j++)</p>
<p>for (i = 0; i &lt; src.iwidth(); i++)</p>
<p>{</p>
<p>sum = 0.0;</p>
<p>for (k = 0; k &lt; src.iwidth(); k++)</p>
<p>sum += src(k,j)*</p>
<p>cos(real(2*k+1)*PI*real(i)/(real(2*src.iwidth())));</p>
<p>horizontal(i,j) = sum;</p>
<p>}</p>
<p>for (i = 0; i &lt; src.iwidth(); i++)</p>
<p>for (j = 0; j &lt; src.iheight(); j++)</p>
<p>{</p>
<p>sum = 0.0;</p>
<p>for (k = 0; k &lt; src.iheight(); k++)</p>
<p>sum += horizontal(i,k)*</p>
<p>cos(real(2*k+1)*PI*real(j)/(real(2*src.iheight())));</p>
<p>dest(i,j) =</p>
<p>alpha(i,src.iwidth())*alpha(j,src.iheight())*sum;</p>
<p>}</p>
<p>}</p>
<p>void idct(const floatImage&amp; src, floatImage&amp; dest)</p>
<p>{</p>
<p>dest.reset(src.size());</p>
<p>unsigned int i,j,k;</p>
<p>real sum;</p>
<p><span id="more-364"></span></p>
<p>floatImage horizontal(src.iwidth(), src.iheight());</p>
<p>for (j = 0; j &lt; src.iheight(); j++)</p>
<p>for (i = 0; i &lt; src.iwidth(); i++)</p>
<p>{</p>
<p>sum = 0.0;</p>
<p>for (k = 0; k &lt; src.iwidth(); k++)</p>
<p>sum += alpha(k,src.iwidth())*src(k,j)*</p>
<p>cos(real(2*i+1)*PI*real(k)/(real(2*src.iwidth())));</p>
<p>horizontal(i,j) = sum;</p>
<p>}</p>
<p>for (i = 0; i &lt; src.iwidth(); i++)</p>
<p>for (j = 0; j &lt; src.iheight(); j++)</p>
<p>{</p>
<p>sum = 0.0;</p>
<p>for (k = 0; k &lt; src.iheight(); k++)</p>
<p>sum += alpha(k, src.iheight())*horizontal(i,k)*</p>
<p>cos(real(2*j+1)*PI*real(k)/(real(2*src.iheight())));</p>
<p>dest(i,j) = sum;</p>
<p>}</p>
<p>}</p>
<p>floatImageRef dct(const floatImage&amp; im)</p>
<p>{</p>
<p>floatImage dctim;</p>
<p>dct(im, dctim);</p>
<p>return dctim;</p>
<p>}</p>
<p>floatImageRef idct(const floatImage&amp; im)</p>
<p>{</p>
<p>floatImage idctim;</p>
<p>idct(im, idctim);</p>
<p>return idctim;</p>
<p>}</p>
<p>ChanDCT::ChanDCT(unsigned int size)</p>
<p>{</p>
<p>m = (int)ceil(log2(size));</p>
<p>N = (int)pow(2, m);</p>
<p>cosines = new float [N];</p>
<p>makecosinetable();</p>
<p>scaleDC = 1.0/(float)N;</p>
<p>scaleMix = sqrt(2.0)/(float)N;</p>
<p>scaleAC = 2.0 * scaleDC;</p>
<p>}</p>
<p>ChanDCT::~ChanDCT()</p>
<p>{</p>
<p>delete [] cosines;</p>
<p>}</p>
<p>void ChanDCT::dct_in_place(floatImage&amp; dest) const</p>
<p>{</p>
<p>int n1,k,j,i,i1,l,n2,rows,cols,p;</p>
<p>double c,xt;</p>
<p>rowsinputmapping(dest);</p>
<p>for (rows=0; rows&lt;N; rows++) {</p>
<p>p=0;</p>
<p>n2 = N;</p>
<p>for (k=1; k&lt;m; k++) {</p>
<p>n1 = n2;</p>
<p>n2 = n2 &gt;&gt;1;</p>
<p>for (j=0; j&lt;n2; j++) {</p>
<p>c=cosines[p++];</p>
<p>for (i=j; i&lt;N; i+=n1) {</p>
<p>l = i+n2;</p>
<p>xt = dest(rows,i) &#8212; dest(rows, l);</p>
<p>dest(rows,i) = dest(rows,i) + dest(rows, l);</p>
<p>dest(rows, l) = 2*xt * c;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>c = cosines[p++];</p>
<p>for (i=0; i&lt;N; i+=2) {</p>
<p>i1 = i+1;</p>
<p>xt = dest(rows,i);</p>
<p>dest(rows,i) += dest(rows, i1);</p>
<p>dest(rows, i1) = (xt-dest(rows, i1))* c;</p>
<p>}</p>
<p>}</p>
<p>rowsbitreversal(dest);</p>
<p>rowspostadditions(dest);</p>
<p>columnsinputmapping(dest);</p>
<p>for (cols=0; cols&lt;N; cols++) {</p>
<p>p=0;</p>
<p>n2 = N;</p>
<p>for (k=1; k&lt;m; k++) {</p>
<p>n1 = n2;</p>
<p>n2 = n2 &gt;&gt;1;</p>
<p>for (j=0; j&lt;n2; j++) {</p>
<p>c=cosines[p++];</p>
<p>for (i=j; i&lt;N; i+=n1) {</p>
<p>l = i+n2;</p>
<p>xt = dest(i, cols) &#8212; dest(l, cols);</p>
<p>dest(i, cols) = dest(i, cols) + dest(l, cols);</p>
<p>dest(l, cols) = 2*xt * c;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>c = cosines[p++];</p>
<p>for (i=0; i&lt;N; i+=2) {</p>
<p>i1 = i+1;</p>
<p>xt = dest(i, cols);</p>
<p>dest(i, cols) += dest(i1, cols);</p>
<p>dest(i1, cols) = (xt-dest(i1, cols))* c;</p>
<p>}</p>
<p>}</p>
<p>columnsbitreversal(dest);</p>
<p>columnspostadditions(dest);</p>
<p>dest(0,0) *= scaleDC;</p>
<p>for (i = 1; i &lt; N; i++)</p>
<p>dest(i, 0) *= scaleMix;</p>
<p>for (j = 1; j &lt; N; j++)</p>
<p>dest(0, j) *= scaleMix;</p>
<p>for (i = 1; i &lt; N; i++)</p>
<p>for (j = 1; j &lt; N; j++)</p>
<p>dest(i,j) *= scaleAC;</p>
<p>}</p>
<p>void ChanDCT::dct(const floatImage&amp; src, floatImage&amp; dest) const</p>
<p>{</p>
<p>assert( src.iwidth() == (unsigned int)N &amp;&amp;</p>
<p>src.iheight() == (unsigned int)N );</p>
<p>dest = src;</p>
<p>dct_in_place(dest);</p>
<p>}</p>
<p>floatImageRef ChanDCT::dct(const floatImage&amp; im) const</p>
<p>{</p>
<p>floatImage ret(im);</p>
<p>dct_in_place(ret);</p>
<p>return ret;</p>
<p>}</p>
<p>void ChanDCT::makecosinetable()</p>
<p>{</p>
<p>int n1,k,j,n2,p;</p>
<p>double e;</p>
<p>n2 = N;</p>
<p>p=0;</p>
<p>for (k=1; k&lt;m; k++) {</p>
<p>n1 = n2;</p>
<p>n2 = n2 &gt;&gt;1;</p>
<p>e = PI/(n1&lt;&lt;1);</p>
<p>for (j=0; j&lt;n2; j++) {</p>
<p>cosines[p++] = cos(((j&lt;&lt;2)+1)*e);</p>
<p>}</p>
<p>}</p>
<p>cosines[p++] = cos (PI/4.0);</p>
<p>}</p>
<p>void ChanDCT::columnspostadditions(floatImage&amp; fi) const</p>
<p>{</p>
<p>int step,loops,k,ep,j,i,l,cols;</p>
<p>for (cols=0; cols&lt;N; cols++) {</p>
<p>step =N;</p>
<p>loops = 1;</p>
<p>for (k=1; k&lt;m; k++)  {</p>
<p>step = step&gt;&gt;1;</p>
<p>ep = step&gt;&gt;1;</p>
<p>loops = loops &lt;&lt;1;</p>
<p>for (j=0; j&lt;(step&gt;&gt;1); j++) {</p>
<p>l=ep;</p>
<p>fi(l, cols) = fi(l, cols)/2;</p>
<p>for (i=1; i&lt;loops; i++)  {</p>
<p>fi(l+step, cols) = fi(l+step, cols) &#8212; fi(l, cols);</p>
<p>l =l+step;</p>
<p>}</p>
<p>ep +=1;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>void ChanDCT::rowspostadditions(floatImage&amp; fi) const</p>
<p>{</p>
<p>int step,loops,k,ep,j,i,l,rows;</p>
<p>for (rows=0; rows&lt;N; rows++) {</p>
<p>step =N;</p>
<p>loops = 1;</p>
<p>for (k=1; k&lt;m; k++)  {</p>
<p>step = step&gt;&gt;1;</p>
<p>ep = step&gt;&gt;1;</p>
<p>loops = loops &lt;&lt;1;</p>
<p>for (j=0; j&lt;(step&gt;&gt;1); j++) {</p>
<p>l=ep;</p>
<p>fi(rows, l)= fi(rows, l)/2;</p>
<p>for (i=1; i&lt;loops;i++)  {</p>
<p>fi(rows, l+step) = fi(rows, l+step)- fi(rows, l);</p>
<p>l =l+step;</p>
<p>}</p>
<p>ep +=1;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>void ChanDCT::rowsbitreversal(floatImage&amp; fi) const</p>
<p>{</p>
<p>int v1, v2, v3,i,j,k,cols;</p>
<p>double xt;</p>
<p>for (cols =0; cols&lt;N; cols ++) {</p>
<p>v1 = (m+1)/2;</p>
<p>v2 = 1 &lt;&lt; v1;</p>
<p>v3 = N-1-v2;</p>
<p>j=0;</p>
<p>for(i=1; i&lt;=v3; i++){</p>
<p>k= N&gt;&gt;1;</p>
<p>while(k&lt;=j){</p>
<p>j=j-k;</p>
<p>k=k&gt;&gt;1;</p>
<p>}</p>
<p>j +=k;</p>
<p>if(i&lt;j){</p>
<p>xt=fi(cols, j);</p>
<p>fi(cols, j)= fi(cols, i);</p>
<p>fi(cols, i)=xt;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>void ChanDCT::columnsbitreversal(floatImage&amp; fi) const</p>
<p>{</p>
<p>int v1, v2, v3,i,j,k,rows;</p>
<p>double xt;</p>
<p>for (rows =0; rows&lt;N; rows ++) {</p>
<p>v1 = (m+1)/2;</p>
<p>v2 = 1 &lt;&lt; v1;</p>
<p>v3 = N-1-v2;</p>
<p>j=0;</p>
<p>for(i=1; i&lt;=v3; i++){</p>
<p>k= N&gt;&gt;1;</p>
<p>while(k&lt;=j){</p>
<p>j=j-k;</p>
<p>k=k&gt;&gt;1;</p>
<p>}</p>
<p>j +=k;</p>
<p>if(i&lt;j){</p>
<p>xt=fi(j, rows);</p>
<p>fi(j, rows) =fi(i, rows);</p>
<p>fi(i, rows) =xt;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>void ChanDCT::columnsinputmapping(floatImage&amp; fi) const</p>
<p>{</p>
<p>int n1,n2,rows,n;</p>
<p>floatImage s(fi.size());</p>
<p>for(n1=0; n1 &lt; N; n1++)</p>
<p>for (n2=0; n2&lt;N; n2++ )</p>
<p>s(n1, n2) = fi(n1, n2);</p>
<p>for (rows=0; rows&lt;N; rows++) {</p>
<p>for(n=0; n &lt; N/2; n++) {</p>
<p>fi(n, rows)     = s(2*n, rows);</p>
<p>fi(N-n-1, rows) = s(2*n+1, rows);</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>void ChanDCT::rowsinputmapping(floatImage&amp; fi) const</p>
<p>{</p>
<p>int n1,n2,cols,n;</p>
<p>floatImage s(fi.size());</p>
<p>for(n1=0; n1 &lt; N; n1++)</p>
<p>for (n2=0; n2&lt;N; n2++ )</p>
<p>s(n1, n2) = fi(n1, n2);</p>
<p>for (cols=0; cols&lt;N; cols++) {</p>
<p>for(n=0; n &lt; N/2; n++) {</p>
<p>fi(cols, n)     = s(cols, 2*n);</p>
<p>fi(cols, N-n-1) = s(cols, 2*n+1);</p>
<p>}</p>
<p>}</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=364</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Листинг программного комплекса по защите информации от ВЧ-навязывания</title>
		<link>/?p=362</link>
		<comments>/?p=362#comments</comments>
		<pubDate>Thu, 02 Aug 2012 10:18:21 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Листинги]]></category>
		<category><![CDATA[Моделирование в области информационной безопасности]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[алгоритм]]></category>
		<category><![CDATA[ВЧ-навязывание]]></category>
		<category><![CDATA[листинг]]></category>

		<guid isPermaLink="false">/?p=362</guid>
		<description><![CDATA[Файл mdFunction.bas (модуль с ключевыми функциями и процедурами) //Процедура БПФ Public Sub FFT(ByRef aSpR() As Single, ByRef aSpI() As Single, ByRef aQ As Byte, ByVal aN As Long, ByVal aPower As Integer, Ang() As Single) Dim i As Long, j As Long, k As Long, oldQ As Long Dim deg As Long, step As Long,&#8230;]]></description>
			<content:encoded><![CDATA[<p>Файл mdFunction.bas (модуль с ключевыми функциями и процедурами)</p>
<p>//Процедура БПФ</p>
<p>Public Sub FFT(ByRef aSpR() As Single, ByRef aSpI() As Single, ByRef aQ As Byte, ByVal aN As Long, ByVal aPower As Integer, Ang() As Single)</p>
<p>Dim i As Long, j As Long, k As Long, oldQ As Long</p>
<p>Dim deg As Long, step As Long, idx As Long, sh As Long</p>
<p>step = aN</p>
<p>For j = 1 To aPower</p>
<p>deg = 0</p>
<p>step = step \ 2</p>
<p>For i = 0 To 2 ^ j &#8212; 1</p>
<p>idx = i * step</p>
<p>sh = deg + step</p>
<p>oldQ = 1 &#8212; aQ</p>
<p>For k = 0 To step &#8212; 1</p>
<p>aSpR(k + idx, aQ) = aSpR(k + deg, oldQ) + aSpR(k + sh, oldQ) * Ang(0, idx) &#8212; aSpI(k + sh, oldQ) * Ang(1, idx)</p>
<p>aSpI(k + idx, aQ) = aSpI(k + deg, oldQ) + aSpR(k + sh, oldQ) * Ang(1, idx) + aSpI(k + sh, oldQ) * Ang(0, idx)</p>
<p>Next k</p>
<p>eg = sh + step</p>
<p>If deg &gt;= aN Then deg = 0</p>
<p>Next i</p>
<p>aQ = 1 &#8212; aQ</p>
<p>Next j</p>
<p>aQ = 1 &#8212; aQ</p>
<p>End Sub<span id="more-362"></span></p>
<p>//Процедура вычисления значений синусов и косинусов для БПФ</p>
<p>Public Sub CountFi(ByRef Ang() As Single, N As Long)</p>
<p>Dim i As Long</p>
<p>Dim koef As Double</p>
<p>ReDim Ang(0 To 1, 0 To N &#8212; 1)</p>
<p>koef = -2 * pi / N</p>
<p>For i = 0 To N &#8212; 1</p>
<p>Ang(0, i) = Cos(koef * i)</p>
<p>Ang(1, i) = Sin(koef * i)</p>
<p>Next i</p>
<p>End Sub</p>
<p>«Файл frmSpectr.frm (форма анализа спектра сигнала)»</p>
<p>Private frmInd As New frmIndicator</p>
<p>Private FChan() As Channel      &#8216;Массив каналов с атрибутами</p>
<p>Private Angle() As Single       &#8216;Массив значений синуса и косинуса для БПФ</p>
<p>Private FRes() As Single        &#8216;Массив амплитудных значений спектра</p>
<p>Private N As Long               &#8216;Число отсчетов БПФ</p>
<p>Private FPower As Integer       &#8216;Степень двойки при БПФ</p>
<p>Private FChannel As Integer     &#8216;Номер канала</p>
<p>Private FFreq As Single         &#8216;Частота дискретизации</p>
<p>Private dF As Single            &#8216;Частотное разрешение</p>
<p>Public Sub SetIndicator(F As Boolean)</p>
<p>FIndicator = F</p>
<p>End Sub</p>
<p>//Считать частоту дискретизации</p>
<p>Private Sub SetFrequency()</p>
<p>On Error Resume Next</p>
<p>FFreq = SRV1.Frequency(FChannel)</p>
<p>lblFd.Caption = Str(FFreq)</p>
<p>dF = FFreq / N</p>
<p>lbldF.Caption = Format(dF, &#187; 0.00000&#8243;)</p>
<p>End Sub</p>
<p>Private Sub SetGridSize(AGrid As Grid, ASize As Long, AEnd As Long, ALy As Single, ADy As Single)</p>
<p>With AGrid</p>
<p>.Size = 0</p>
<p>.Size = ASize</p>
<p>.Mathly = ALy</p>
<p>.Mathdy = ADy</p>
<p>.Xfirst = 0</p>
<p>.Xend = AEnd</p>
<p>.Mathlx = .Xfirst</p>
<p>.Mathdx = .Xend</p>
<p>.Display</p>
<p>End With</p>
<p>End Sub</p>
<p>//Заполнить комбо-боксы каналов и числа отсчетов БПФ</p>
<p>Private Sub InitData()</p>
<p>On Error Resume Next</p>
<p>Dim i  As Integer</p>
<p>For i = 10 To 17</p>
<p>cbN.AddItem (Str(2 ^ i))</p>
<p>Next i</p>
<p>ReDim FChan(0 To SRV1.QuanChan() &#8212; 1)</p>
<p>FCLoaded = True</p>
<p>For i = 0 To SRV1.QuanChan() &#8212; 1</p>
<p>FChan(i).Signal = SRV1.Commentary(i)</p>
<p>FChan(i).Number = SRV1.NumPhChan(i)</p>
<p>ReDim FChan(i).CF(0)</p>
<p>If Not GetControlFreq(FChan(i)) Then</p>
<p>FCLoaded = False</p>
<p>cbChannel.AddItem (SRV1.Commentary(i))</p>
<p>Else</p>
<p>cbChannel.AddItem (FChan(i).Signal)</p>
<p>End If</p>
<p>Next i</p>
<p>If Not FConnected Then</p>
<p>Call MsgBox(&#171;Нет соединения с сервером &#187; &amp; _</p>
<p>&#171;Индикатор будет недоступен!&#187;, vbCritical + vbOKOnly, &#171;Ошибка!&#187;)</p>
<p>btnIndicator.Enabled = False</p>
<p>FCLoaded = False</p>
<p>End If</p>
<p>cbChannel.ListIndex = 0</p>
<p>End Sub</p>
<p>//Расчитать и вывести на график спектр сигнала</p>
<p>Private Sub GetSpectr()</p>
<p>On Error GoTo ErrLabel</p>
<p>Dim k As Long, i As Long, N2 As Long</p>
<p>Dim FQ As Byte, start_time As Single</p>
<p>start_time = Timer</p>
<p>If FFreq &lt;&gt; SRV1.Frequency(FChannel) Then</p>
<p>SetFrequency</p>
<p>Call SetGridSize(Grid1, N \ 2, FFreq \ 2, Grid1.Mathly, Grid1.Mathdy)</p>
<p>End If</p>
<p>If FApplyChange Then</p>
<p>Call CountFi(Angle, N)</p>
<p>Call SetGridSize(Grid1, N \ 2, FFreq \ 2, Grid1.Mathly, Grid1.Mathdy)</p>
<p>FApplyChange = False</p>
<p>End If</p>
<p>N2 = N \ 2: FQ = 0: k = 1</p>
<p>ReDim FSpR(0 To N &#8212; 1, 0 To 1)</p>
<p>ReDim FSpI(0 To N &#8212; 1, 0 To 1)</p>
<p>ReDim FRes(0 To N \ 2 &#8212; 1)</p>
<p>FError = SRV1.GetData(FChannel, 0, SRV1.CurrentTime(FChannel), N, FSpR(0, 1))</p>
<p>DoEvents</p>
<p>Call FFT(FSpR, FSpI, FQ, N, FPower, Angle)  &#8216;Вызов БПФ</p>
<p>If Not FRun Then Exit Sub</p>
<p>For i = 1 To N2 &#8212; 1</p>
<p>FRes(i) = Sqr(FSpR(i, FQ) * FSpR(i, FQ) + FSpI(i, FQ) * FSpI(i, FQ)) / N2</p>
<p>If FIndicator Then Call CheckFreq(FChan(FChannel), i * dF, FRes(i), k)</p>
<p>Next i</p>
<p>If FIndicator Then</p>
<p>frmInd.FlexG.Rows = k             &#8216;Установить число строк в гриде</p>
<p>If k &gt; 1 And FIsSound Then Call Beep(4000, 9) &#8216;Издать звуковой сгнал</p>
<p>End If</p>
<p>FError = Grid1.Paint(FRes(0))</p>
<p>start_time = Timer &#8212; start_time</p>
<p>lblTime.Caption = Format$(start_time, &#171;0.000&#8243;)</p>
<p>Exit Sub</p>
<p>ErrLabel:</p>
<p>End Sub</p>
<p>//Радиомониторинг</p>
<p>//Проверка частоты aF на допустимость значения</p>
<p>//Проверка на наличие «ВЧ-навязывания»</p>
<p>//Расчет показателя словесной разборчивости</p>
<p>Private Sub CheckFreq(aChan As Channel, aF As Single, aValue As Single, ByRef aRow As Long)</p>
<p>On Error GoTo ErrLabel</p>
<p>Dim i As Integer, j As Integer, tmp As Single</p>
<p>Dim Today</p>
<p>Dim MySecond</p>
<p>Dim MySecond_1</p>
<p>Dim MySecond_2</p>
<p>Dim MyMinute</p>
<p>Dim MyMinute_1</p>
<p>Dim MyMinute_2</p>
<p>//Показатель словесной разборчивости</p>
<p>Dim W As Double</p>
<p>Dim Q_3 As Double</p>
<p>Dim m As Double</p>
<p>Dim Q_2 As Double</p>
<p>Dim L As Integer</p>
<p>Dim alfa As Double</p>
<p>Dim delta_f As Double</p>
<p>Dim Pred_chuv As Double</p>
<p>Dim Norm_shum As Double</p>
<p>Dim Anten_kof As Double</p>
<p>Dim Kof_otr As Double</p>
<p>Dim Uroven As Double</p>
<p>Dim X As Double</p>
<p>Dim alfa_V3 As Double</p>
<p>Dim alfa_V1 As Double</p>
<p>Dim alfa_V2 As Double</p>
<p>If aF = 0 Then Exit Sub</p>
<p>For i = 1 To UBound(aChan.CF)</p>
<p>tmp = Abs(aF &#8212; aChan.CF(i).Freq)</p>
<p>If ((tmp &lt;= dF) Or (tmp &lt;= aChan.CF(1).Epsilant)) Then</p>
<p>If ((aValue &gt; aChan.CF(i).MaxValue) And (Not aChan.CF(i).NSC)) Or ((aValue &lt; aChan.CF(i).MaxValue) And aChan.CF(i).NSC) Then</p>
<p>aRow = frmInd.FlexG.Rows</p>
<p>If frmInd.FlexG.Rows &lt; (aRow + 1) Then frmInd.FlexG.Rows = aRow + 1</p>
<p>Pred_chuv = 0.000000548</p>
<p>Uroven = aValue * 0.001</p>
<p>m = 1</p>
<p>delta_f = 20</p>
<p>alfa = 1.6 * 0.001 * (aF * 0.000001)</p>
<p>alfa_V2 = alfa / 20</p>
<p>alfa_V3 = 0.775 * (10 ^ alfa_V2)</p>
<p>Anten_kof = 10 ^ (0.511 * (Log(aF * 0.001) / Log(10)) &#8212; 2)</p>
<p>Kof_otr = 1</p>
<p>X = 4 * ((1.18 / ((0.781 * (Log(aF * 0.001) / Log(10)) ^ (2 / 3))) &#8212; 1))</p>
<p>Norm_shum = 10 ^ X</p>
<p>alfa_V1 = Norm_shum * 0.000001</p>
<p>L = Val(frmInd.Combo1.Text)</p>
<p>Q_2 = ((Kof_otr ^ 2) * (Uroven ^ 2) * (10 ^ (-(0.2 * L * alfa_V3)))) / (20 * ((10 ^ (0.1 * Pred_chuv)) + ((0.000001 * alfa_V1 * Anten_kof) ^ 2)))</p>
<p>Q_3 = Q_2 / 3</p>
<p>W = 1 / (1 + 0.21 * (Q_3 ^ (-1)))</p>
<p>Today = Now</p>
<p>frmInd.FlexG.TextMatrix(aRow, 0) = aRow</p>
<p>frmInd.FlexG.TextMatrix(aRow, 1) = Format(aF, &#171;0.00&#8243;)</p>
<p>frmInd.FlexG.TextMatrix(aRow, 2) = Format(aValue, &#171;0.00000&#8243;)</p>
<p>frmInd.FlexG.TextMatrix(aRow, 3) = Format(aChan.CF(i).MaxValue, &#171;0.00000&#8243;)</p>
<p>frmInd.FlexG.TextMatrix(aRow, 4) = Format(aValue &#8212; aChan.CF(i).MaxValue, &#171;0.00000&#8243;)</p>
<p>frmInd.FlexG.TextMatrix(aRow, 5) = Today</p>
<p>MySecond = Second(frmInd.FlexG.TextMatrix(1, 5))</p>
<p>MyMinute = Minute(frmInd.FlexG.TextMatrix(1, 5))</p>
<p>MySecond_2 = Second(Today)</p>
<p>MyMinute_2 = Minute(Today)</p>
<p>MySecond_1 = Second(frmInd.FlexG.TextMatrix(frmInd.FlexG.Rows &#8212; 1, 5))</p>
<p>MyMinute_1 = Minute(frmInd.FlexG.TextMatrix(frmInd.FlexG.Rows &#8212; 1, 5)) If ((MyMinute_1 &#8212; MyMinute) = 0) And ((MyMinute_2 &#8212; MyMinute) = 0) Then If ((MySecond_1 &#8212; MySecond) &gt; 10) And ((MySecond_2 &#8212; MySecond) &gt; 10) And frmInd.FlexG.Rows &gt; 100 Then FRun = Not FRun</p>
<p>btnStart.Caption = &#171;Старт&#187;</p>
<p>frmInd.btnStart.Caption = btnStart.Caption</p>
<p>frmInd.Command2.Visible = True</p>
<p>frmInd.Label1.Visible = True</p>
<p>Exit Sub</p>
<p>End If</p>
<p>If ((MySecond_2 &#8212; MySecond) &gt; 10) And (((MySecond_1 &#8212; MySecond) &gt; 10) Or ((MySecond_1 &#8212; MySecond) &lt; 10)) And (frmInd.FlexG.Rows &lt; 100) Then  frmInd.FlexG.Rows = 1</p>
<p>End If</p>
<p>End If</p>
<p>If ((MyMinute_1 &#8212; MyMinute) = 1) And ((MyMinute_2 &#8212; MyMinute) = 1) Then If (((MySecond_1 + 60) &#8212; MySecond) &gt; 10) And (((MySecond_2 + 60) &#8212; MySecond) &gt; 10) And (frmInd.FlexG.Rows &gt; 100) Then</p>
<p>FRun = Not FRun</p>
<p>btnStart.Caption = &#171;Старт&#187;</p>
<p>frmInd.btnStart.Caption = btnStart.Caption</p>
<p>frmInd.Command2.Visible = True</p>
<p>frmInd.Label1.Visible = True</p>
<p>Exit Sub</p>
<p>End If</p>
<p>If (((MySecond_2 + 60) &#8212; MySecond) &gt; 10) And ((((MySecond_1 + 60) &#8212; MySecond) &gt; 10) Or (((MySecond_1 + 60) &#8212; MySecond) &lt; 10)) And (frmInd.FlexG.Rows &lt; 100) Then  frmInd.FlexG.Rows = 1</p>
<p>End If</p>
<p>End If</p>
<p>Next i</p>
<p>Exit Sub</p>
<p>ErrLabel:</p>
<p>End Sub</p>
<p>«Файл frmInicator.frm (форма индикации нарушений)»</p>
<p>Private frm As frmSpectr</p>
<p>Public Sub ShowIndicator(AForm As frmSpectr)</p>
<p>Set frm = AForm</p>
<p>frm.SetIndicator True</p>
<p>Me.Caption = Left(frm.Caption, Len(frm.Caption) &#8212; Len(&#171;спектр&#187;)) &amp; &#171;индикатор по частотам&#187;</p>
<p>Me.Show</p>
<p>Me.FlexG.Rows = 1</p>
<p>Me.chbAuto.Value = IIf(frm.GetAutoDBInput, 1, 0)</p>
<p>Me.chbSound.Value = IIf(frm.GetIsSound, 0, 1)</p>
<p>Me.btnStart.Caption = frm.btnStart.Caption</p>
<p>End Sub</p>
<p>//Запись фактов превышения в файл «Test.txt»</p>
<p>Private Sub btnRecord_Click()</p>
<p>Dim i As Integer</p>
<p>F = FreeFile</p>
<p>Open App.Path &amp; &#171;\Test.txt&#187; For Output As #F</p>
<p>Print #F, FlexG.TextMatrix(0, 0); Spc(5); FlexG.TextMatrix(0, 1); Spc(5); FlexG.TextMatrix(0, 2); Spc(5); FlexG.TextMatrix(0, 3); Spc(5); FlexG.TextMatrix(0, 4); Spc(10); FlexG.TextMatrix(0, 5)</p>
<p>Print #F,</p>
<p>For i = 2 To FlexG.Rows &#8212; 1</p>
<p>Print #F, FlexG.TextMatrix(i, 0); Spc(5); FlexG.TextMatrix(i, 1); Spc(15); FlexG.TextMatrix(i, 2); Spc(20); FlexG.TextMatrix(i, 3); Spc(20); FlexG.TextMatrix(i, 4); Spc(10); FlexG.TextMatrix(i, 5)</p>
<p>Next i</p>
<p>Call MsgBox(&#171;Данные успешно записанны в файл  Test.txt&#187;, vbInformation + vbOKOnly, &#171;###&#187;)</p>
<p>Close #F</p>
<p>btnRecord.Visible = False</p>
<p>Label1.Visible = False</p>
<p>End Sub</p>
<p>//Запись фактов превышения в Grid</p>
<p>Private Sub btnStart_Click()</p>
<p>frm.btnStart_Click</p>
<p>End Sub</p>
<p>Private Sub Form_Load()</p>
<p>FlexG.TextMatrix(0, 0) = &#171;№&#187;</p>
<p>FlexG.TextMatrix(0, 1) = &#171;Частота (Гц)&#187;</p>
<p>FlexG.TextMatrix(0, 2) = &#171;Текущий уровень (мВ)&#187;</p>
<p>FlexG.TextMatrix(0, 3) = &#171;Допустимый уровень (мВ)&#187;</p>
<p>FlexG.TextMatrix(0, 4) = &#171;Превышение (мВ)&#187;</p>
<p>FlexG.TextMatrix(0, 5) = &#171;Дата&#187;</p>
<p>FlexG.ColWidth(0) = 500</p>
<p>FlexG.ColWidth(1) = 3000</p>
<p>FlexG.ColWidth(2) = 3000</p>
<p>FlexG.ColWidth(3) = 3000</p>
<p>FlexG.ColWidth(4) = 3000</p>
<p>FlexG.ColWidth(5) = 3000</p>
<p>End Sub</p>
<p>//Построение графика</p>
<p>Private Sub DisplayGraf(AGrid As Grid, ByVal ATime As Single, ASize As Single)</p>
<p>ReDim FData(FFreq * FWidth)</p>
<p>FError = SRV1.GetData(FChannel, FNumDec, ATime, ASize, FData(0))</p>
<p>FError = AGrid.Paint(FData(0))</p>
<p>End Sub</p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=362</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Алгоритмы встраивания и извлечения по методу Куттера-Джордана</title>
		<link>/?p=368</link>
		<comments>/?p=368#comments</comments>
		<pubDate>Mon, 30 Jul 2012 10:24:11 +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">/?p=368</guid>
		<description><![CDATA[void JpegFile::read (BinaryIO* io) { CvrStgFile::read (io); FILE *infile = NULL ; infile = io-&#62;getStream() ; rewind (infile) ; struct jpeg_error_mgr errmgr ; DeCInfo.err = jpeg_std_error (&#38;errmgr) ; jpeg_create_decompress (&#38;DeCInfo) ; jpeg_stdio_src (&#38;DeCInfo, infile) ; jpeg_read_header (&#38;DeCInfo, TRUE) ; DctCoeffs = jpeg_read_coefficients (&#38;DeCInfo) ; unsigned short max_v_samp_factor = 0 ; unsigned short max_h_samp_factor = 0&#8230;]]></description>
			<content:encoded><![CDATA[<p>void JpegFile::read (BinaryIO* io)</p>
<p>{</p>
<p>CvrStgFile::read (io);</p>
<p>FILE *infile = NULL ;</p>
<p>infile = io-&gt;getStream() ;</p>
<p>rewind (infile) ;</p>
<p>struct jpeg_error_mgr errmgr ;</p>
<p>DeCInfo.err = jpeg_std_error (&amp;errmgr) ;</p>
<p>jpeg_create_decompress (&amp;DeCInfo) ;</p>
<p>jpeg_stdio_src (&amp;DeCInfo, infile) ;</p>
<p>jpeg_read_header (&amp;DeCInfo, TRUE) ;</p>
<p><span id="more-368"></span></p>
<p>DctCoeffs = jpeg_read_coefficients (&amp;DeCInfo) ;</p>
<p>unsigned short max_v_samp_factor = 0 ;</p>
<p>unsigned short max_h_samp_factor = 0 ;</p>
<p>for (unsigned short icomp = 0 ; icomp &lt; DeCInfo.num_components ; icomp++) {</p>
<p>max_v_samp_factor = AUtils::max&lt;unsigned short&gt; (max_v_samp_factor, DeCInfo.comp_info[icomp].v_samp_factor) ;</p>
<p>max_h_samp_factor = AUtils::max&lt;unsigned short&gt; (max_h_samp_factor, DeCInfo.comp_info[icomp].h_samp_factor) ;</p>
<p>}</p>
<p>HeightInBlocks = new unsigned int[DeCInfo.num_components] ;</p>
<p>WidthInBlocks = new unsigned int[DeCInfo.num_components] ;</p>
<p>for (unsigned short icomp = 0 ; icomp &lt; DeCInfo.num_components ; icomp++) {</p>
<p>HeightInBlocks[icomp] = AUtils::div_roundup&lt;unsigned int&gt; (DeCInfo.image_height * DeCInfo.comp_info[icomp].v_samp_factor,</p>
<p>8 * max_v_samp_factor) ;</p>
<p>WidthInBlocks[icomp] = AUtils::div_roundup&lt;unsigned int&gt; (DeCInfo.image_width * DeCInfo.comp_info[icomp].h_samp_factor,</p>
<p>8 * max_h_samp_factor) ;</p>
<p>}</p>
<p>unsigned long totalnumcoeffs = 0 ;</p>
<p>for (unsigned short icomp = 0 ; icomp &lt; DeCInfo.num_components ; icomp++) {</p>
<p>totalnumcoeffs += CoeffPerBlock * (HeightInBlocks[icomp] * WidthInBlocks[icomp]) ;</p>
<p>}</p>
<p>LinDctCoeffs.resize (totalnumcoeffs) ;</p>
<p>UWORD32 linindex = 0 ;</p>
<p>for (unsigned short icomp = 0 ; icomp &lt; DeCInfo.num_components ; icomp++) {</p>
<p>unsigned int currow = 0 ;</p>
<p>while (currow &lt; HeightInBlocks[icomp]) {</p>
<p>unsigned int naccess = 1 ;</p>
<p>JBLOCKARRAY array = (*(DeCInfo.mem-&gt;access_virt_barray))</p>
<p>((j_common_ptr) &amp;DeCInfo, DctCoeffs[icomp], currow, naccess, FALSE) ;</p>
<p>for (unsigned int irow = 0 ; irow &lt; naccess ; irow++) {</p>
<p>for (unsigned int iblock = 0 ; iblock &lt; WidthInBlocks[icomp] ; iblock++) {</p>
<p>for (unsigned int icoeff = 0 ; icoeff &lt; CoeffPerBlock ; icoeff++) {</p>
<p>LinDctCoeffs[linindex] = array[irow][iblock][icoeff] ;</p>
<p>if (LinDctCoeffs[linindex] != 0) {</p>
<p>StegoIndices.push_back (linindex) ;</p>
<p>}</p>
<p>linindex++ ;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>currow += naccess ;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>void JpegFile::write ()</p>
<p>{</p>
<p>CvrStgFile::write() ;</p>
<p>FILE* outfile = getBinIO()-&gt;getStream() ;</p>
<p>jpeg_create_compress (&amp;CInfo) ;</p>
<p>jpeg_copy_critical_parameters (&amp;DeCInfo, &amp;CInfo) ;</p>
<p>struct jpeg_error_mgr jerr2 ;</p>
<p>CInfo.err = jpeg_std_error(&amp;jerr2) ;</p>
<p>jpeg_stdio_dest (&amp;CInfo, outfile) ;</p>
<p>jpeg_write_coefficients (&amp;CInfo, DctCoeffs) ;</p>
<p>UWORD32 linindex = 0 ;</p>
<p>for (unsigned short icomp = 0 ; icomp &lt; CInfo.num_components ; icomp++) {</p>
<p>unsigned int currow = 0 ;</p>
<p>while (currow &lt; HeightInBlocks[icomp]) {</p>
<p>unsigned int naccess = 1 ;</p>
<p>JBLOCKARRAY array = (*(CInfo.mem-&gt;access_virt_barray))</p>
<p>((j_common_ptr) &amp;CInfo, DctCoeffs[icomp], currow, naccess, TRUE) ;</p>
<p>for (unsigned int irow = 0 ; irow &lt; naccess ; irow++) {</p>
<p>for (unsigned int iblock = 0 ; iblock &lt; WidthInBlocks[icomp] ; iblock++) {</p>
<p>for (unsigned int icoeff = 0 ; icoeff &lt; CoeffPerBlock ; icoeff++) {</p>
<p>array[irow][iblock][icoeff] = LinDctCoeffs[linindex] ;</p>
<p>linindex++ ;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>currow += naccess ;</p>
<p>}</p>
<p>}</p>
<p>jpeg_finish_compress (&amp;CInfo) ;</p>
<p>jpeg_destroy_compress(&amp;CInfo);</p>
<p>jpeg_finish_decompress (&amp;DeCInfo) ;</p>
<p>jpeg_destroy_decompress(&amp;DeCInfo);</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=368</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Рисуем гистограммы и графики посредством С#</title>
		<link>/?p=392</link>
		<comments>/?p=392#comments</comments>
		<pubDate>Tue, 24 Jul 2012 14:07:51 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Задачи и решения]]></category>
		<category><![CDATA[Листинги]]></category>
		<category><![CDATA[Csharp]]></category>
		<category><![CDATA[алгоритм]]></category>
		<category><![CDATA[листинг]]></category>
		<category><![CDATA[рисование]]></category>

		<guid isPermaLink="false">/?p=392</guid>
		<description><![CDATA[Данная статья является продолжением опубликованного ранее материала на нашем сайте. Здесь рассматриваются вопросы связанные с рисование различных видов графиков и диаграмм с помощью специализированных функций реализованных в C#. Этап 5 &#8212; Построение гистограммы. Гистограмма будет строится для заданных значений в pictureBox2 при нажатии кнопки «Гистограмма». Событие button5_Click: private void button5_Click(object sender, EventArgs e) { pictureBox2.Visible&#8230;]]></description>
			<content:encoded><![CDATA[<p>Данная статья является продолжением опубликованного ранее материала на нашем сайте. Здесь рассматриваются вопросы связанные с рисование различных видов графиков и диаграмм с помощью специализированных функций реализованных в C#.</p>
<h4>Этап 5 &#8212; Построение гистограммы.</h4>
<p>Гистограмма будет строится для заданных значений в pictureBox2 при нажатии кнопки «Гистограмма». Событие button5_Click:</p>
<p style="text-align: justify;">private void button5_Click(object sender, EventArgs e)</p>
<p>{</p>
<p>pictureBox2.Visible = true;</p>
<p>pictureBox1.Visible = false;</p>
<p>pictureBox3.Visible = false;</p>
<p>pictureBox4.Visible = false;</p>
<p>uk=setuk(uk);</p>
<p>userControl11.Enabled = false;</p>
<p>listBox1.Enabled = false;</p>
<p>pictureBox2.Visible = false;</p>
<p>pictureBox2.Visible = true;</p>
<p>}</p>
<p>Само же событие, обеспечивающее построение непосредственно диаграммы описывается схоже с событием для построения точечной диаграммы, только от точек следует откладывать прямоугольники. Программный код приведен ниже:<span id="more-392"></span></p>
<p>private void pictureBox2_Paint(object sender, PaintEventArgs e)</p>
<p>{</p>
<p>Pen myPen = new Pen(Color.Red, 2);</p>
<p>Rectangle[] recs = new Rectangle[n];</p>
<p>for (int i = 0; i &lt; n; i++)</p>
<p>{</p>
<p>recs[i] = new Rectangle(pictureBox2.Size.Width / n * i+1, Convert.ToInt32(pictureBox1.Size.Height &#8212; Convert.ToInt32(listBox1.Items[i]) / uk), pictureBox2.Size.Width / n-1, Convert.ToInt32(Convert.ToInt32(listBox1.Items[i]) / uk));</p>
<p>}</p>
<p>e.Graphics.DrawRectangles(myPen, recs);</p>
<p>for (int i = 0; i &lt; n; i++)</p>
<p>{</p>
<p>Random rnd=new Random();</p>
<p>SolidBrush[] br = new SolidBrush[n];</p>
<p>for (int j = 0; j &lt; n; j++) { br[j] = new SolidBrush(Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255))); }</p>
<p>e.Graphics.FillRectangle(br[i], recs[i]);</p>
<p>br[i].Dispose();</p>
<p>}</p>
<p>string[] val = new string [n];</p>
<p>Font MyFont = new Font(&#171;Courier New&#187;, 10);</p>
<p>SolidBrush fontbr = new SolidBrush(Color.Black);</p>
<p>Point [] points = new Point[n];</p>
<p>for(int i=0; i&lt;n; i++)</p>
<p>{</p>
<p>points[i]=new Point(pictureBox2.Size.Width / (2*n) * 2*i, Convert.ToInt32(pictureBox1.Size.Height &#8212; Convert.ToInt32(listBox1.Items[i]) / uk));</p>
<p>}</p>
<p>for (int i = 0; i &lt; n; i++)</p>
<p>{</p>
<p>val[i] = Convert.ToString(listBox1.Items[i]);</p>
<p>e.Graphics.DrawString(val[i], MyFont, fontbr, points[i]);</p>
<p>}</p>
<p>myPen.Dispose();</p>
<p>fontbr.Dispose();</p>
<p>}</p>
<p>Цвет каждого столбца гистограммы задается случайным образом, цвет границы же всегда красный, но при желании можно изменить, изменив цвет пера myPen.</p>
<h4>Этап 6 -  Построение круговой диаграммы.</h4>
<p>Построение круговой диграммы основывается на использовании методов DrawPie и FillPie.</p>
<p><a href="/wp-content/uploads/2011/08/17.png"><img class="aligncenter size-full wp-image-393" title="Построение круговой диграммы основывается на использовании методов DrawPie и FillPie" src="/wp-content/uploads/2011/08/17.png" alt="графики в С#" width="689" height="161" /></a></p>
<p>pictureBox3, в котором и будет строиться наша диаграмма вызывается нажатием кнопки button6, описываемой событием:</p>
<p>private void button6_Click(object sender, EventArgs e)</p>
<p>{</p>
<p>pictureBox2.Visible = false;</p>
<p>pictureBox1.Visible = false;</p>
<p>pictureBox3.Visible = true;</p>
<p>pictureBox4.Visible = false;</p>
<p>userControl11.Enabled = false;</p>
<p>listBox1.Enabled = false;</p>
<p>pictureBox3.Visible = false;</p>
<p>pictureBox3.Visible = true;</p>
<p>}</p>
<p>А построение самой диаграммы, как и прежде, описывается кодом в событии pictureBox3_Paint.</p>
<p>private void pictureBox3_Paint(object sender, PaintEventArgs e)</p>
<p>{</p>
<p>Pen myPen = new Pen(Color.Red, 2);</p>
<p>Rectangle rec = new Rectangle(50, 50, 200, 200);</p>
<p>int s = 0;</p>
<p>for (int i = 0; i &lt; n; i++)</p>
<p>{</p>
<p>s = s + Convert.ToInt32(listBox1.Items[i]);</p>
<p>}</p>
<p>float fs = (float)s;</p>
<p>float k = fs / 360;</p>
<p>float[] r = new float[n+1];</p>
<p>r[0] = 0;</p>
<p>for (int i = 1; i &lt; n; i++)</p>
<p>{</p>
<p>r[i] = r[i-1]+ Convert.ToInt32(listBox1.Items[i]) / k;</p>
<p>}</p>
<p>r[n] = (float) 360;</p>
<p>string[] str = new string[n];</p>
<p>Point[] points = new Point[n];</p>
<p>SolidBrush brush = new SolidBrush(Color.LightGray);</p>
<p>RectangleF[] recs = new RectangleF[n];</p>
<p>SizeF size= new SizeF(60,15);</p>
<p>for (int i = 0; i &lt; n; i++) { points[i] = new Point(265, 70 + 10 * i); recs[i]=new RectangleF(points[i],size);</p>
<p>e.Graphics.FillRectangles(brush, recs);</p>
<p>}</p>
<p>System.Drawing.Font MyFont=new Font(&#171;Courier New&#187;,10);</p>
<p>for (int i = 0; i &lt; n; i++)</p>
<p>{</p>
<p>Random rnd = new Random();</p>
<p>SolidBrush [] br = new SolidBrush[n];</p>
<p>for (int j = 0; j &lt; n; j++) { br[j] = new SolidBrush(Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255))); }</p>
<p>e.Graphics.DrawPie(myPen, rec, r[i], Math.Abs(r[i + 1] &#8212; r[i]));</p>
<p>e.Graphics.FillPie(br[i], rec, r[i], r[i + 1] &#8212; r[i]);</p>
<p>e.Graphics.FillPie(</p>
<p>str[i] = Convert.ToString(Convert.ToInt32(Math.Abs(r[i + 1] &#8212; r[i])*k));</p>
<p>e.Graphics.DrawString(str[i], MyFont, br[i], points[i]);</p>
<p>}</p>
<p>}</p>
<p>В заключение следует отметить то что нигде выше не было дано описания функции кнопки «Заново». Она перезапускает наше приложение для повторного ввода и задается кодом:</p>
<p>private void button4_Click(object sender, EventArgs e)</p>
<p>{</p>
<p>Application.Restart();</p>
<p>}</p>
<p>Так же хотелось бы привести результаты работы. Кроме того стоит отметить, что при повторном нажатии кнопки цвет элементов диаграммы будет меняться случайным образом.</p>
<p><a href="/wp-content/uploads/2011/08/18.png"><img class="aligncenter size-full wp-image-394" title="графики" src="/wp-content/uploads/2011/08/18.png" alt="" width="674" height="336" /></a><a href="/wp-content/uploads/2011/08/19.png"><img class="aligncenter size-full wp-image-395" title="рисуем графики и диаграммы в C#" src="/wp-content/uploads/2011/08/19.png" alt="" width="678" height="719" /></a></p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=392</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Алгоритм быстрого двумерного вейвлет-преобразования</title>
		<link>/?p=366</link>
		<comments>/?p=366#comments</comments>
		<pubDate>Fri, 20 Jul 2012 10:22:42 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Информатика и программирование]]></category>
		<category><![CDATA[Листинги]]></category>
		<category><![CDATA[алгоритм]]></category>
		<category><![CDATA[вейвлет-преобразование]]></category>
		<category><![CDATA[С++]]></category>

		<guid isPermaLink="false">/?p=366</guid>
		<description><![CDATA[FWT2D::FWT2D(const wchar_t* fname, const float* tH, unsigned int thL, int thZ, const float* tG, unsigned int tgL, int tgZ, const float* H, unsigned int hL, int hZ, const float* G, unsigned int gL, int gZ) : BaseFWT2D(fname, tH, thL, thZ, tG, tgL, tgZ, H, hL, hZ, G, gL, gZ) { } void FWT2D::transrows(char** dest, char**&#8230;]]></description>
			<content:encoded><![CDATA[<p>FWT2D::FWT2D(const wchar_t* fname, const float* tH, unsigned int thL, int thZ,</p>
<p>const float* tG, unsigned int tgL, int tgZ,</p>
<p>const float* H, unsigned int hL, int hZ,</p>
<p>const float* G, unsigned int gL, int gZ) : BaseFWT2D(fname, tH, thL, thZ, tG, tgL, tgZ, H, hL, hZ, G, gL, gZ)</p>
<p>{</p>
<p>}</p>
<p>void FWT2D::transrows(char** dest, char** sour, unsigned int w, unsigned int h) const</p>
<p>{</p>
<p>int n;</p>
<p>float s, d;</p>
<p>unsigned int w2 = w / 2;</p>
<p>const vec1D&amp; tH = gettH();</p>
<p>const vec1D&amp; tG = gettG();</p>
<p>for (unsigned int y = 0; y &lt; h; y++) {</p>
<p>for (unsigned int k = 0; k &lt; w2; k++) {</p>
<p>s = 0.0f;</p>
<p>d = 0.0f;</p>
<p>for (int m = tH.first(); m &lt;= tH.last(); m++) {</p>
<p>n = 2 * k + m;</p>
<p>if (n &lt; 0) n = 0 &#8212; n;</p>
<p>if (n &gt;= (int)w) n -= 2 * (1 + n &#8212; w);</p>
<p>s += tH[m] * float(sour[y][n]);</p>
<p>}</p>
<p>for (int m = tG.first(); m &lt;= tG.last(); m++) {</p>
<p>n = 2 * k + m;</p>
<p>if (n &lt; 0) n = 0 &#8212; n;</p>
<p>if (n &gt;= (int)w) n -= 2 * (1 + n &#8212; w);</p>
<p>d += tG[m] * float(sour[y][n]);</p>
<p>}</p>
<p>dest[y][k] = mmxround(s);</p>
<p>dest[y][k+w2] = mmxroundTH(d);</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>void FWT2D::transcols(char** dest, char** sour, unsigned int w, unsigned int h) const</p>
<p>{</p>
<p>int n;</p>
<p>float s, d;</p>
<p>unsigned int h2 = h / 2;</p>
<p>const vec1D&amp; tH = gettH();</p>
<p>const vec1D&amp; tG = gettG();<span id="more-366"></span></p>
<p>for (unsigned int x = 0; x &lt; w; x++) {</p>
<p>for (unsigned int k = 0; k &lt; h2; k++) {</p>
<p>s = 0.0f;</p>
<p>d = 0.0f;</p>
<p>for (int m = tH.first(); m &lt;= tH.last(); m++) {</p>
<p>n = 2 * k + m;</p>
<p>if (n &lt; 0) n = 0 &#8212; n;</p>
<p>if (n &gt;= (int)h) n -= 2 * (1 + n &#8212; h);</p>
<p>s += tH[m] * float(sour[n][x]);</p>
<p>}</p>
<p>for (int m = tG.first(); m &lt;= tG.last(); m++) {</p>
<p>n = 2 * k + m;</p>
<p>if (n &lt; 0) n = 0 &#8212; n;</p>
<p>if (n &gt;= (int)h) n -= 2 * (1 + n &#8212; h);</p>
<p>d += tG[m] * float(sour[n][x]);</p>
<p>}</p>
<p>if (x &lt; w / 2)</p>
<p>dest[k][x] = mmxround(s);</p>
<p>else</p>
<p>dest[k][x] = mmxroundTH(s);</p>
<p>dest[k+h2][x] = mmxroundTH(d);</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>void FWT2D::synthrows(char** dest, char** sour, unsigned int w, unsigned int h) const</p>
<p>{</p>
<p>int n;</p>
<p>float s2k, s2k1;</p>
<p>const vec1D&amp; H2m = getH2m();</p>
<p>const vec1D&amp; G2m = getG2m();</p>
<p>const vec1D&amp; H2m1 = getH2m1();</p>
<p>const vec1D&amp; G2m1 = getG2m1();</p>
<p>for (unsigned int y = 0; y &lt; 2*h; y++) {</p>
<p>for (unsigned int k = 0; k &lt; w; k++) {</p>
<p>s2k = 0.0f;</p>
<p>s2k1 = 0.0f;</p>
<p>for (int m = H2m.first(); m &lt;= H2m.last(); m++) {</p>
<p>n = k &#8212; m;</p>
<p>if (n &lt; 0) n = 0 &#8212; n;</p>
<p>if (n &gt;= (int)w) n -= 2 * (1 + n &#8212; w);</p>
<p>s2k += H2m[m] * float(sour[y][n]);</p>
<p>}</p>
<p>for (int m = G2m.first(); m &lt;= G2m.last(); m++) {</p>
<p>n = k &#8212; m;</p>
<p>if (n &lt; 0) n = 0 &#8212; n;</p>
<p>if (n &gt;= (int)w) n -= 2 * (1 + n &#8212; w);</p>
<p>s2k += G2m[m] * float(sour[y][n+w]);</p>
<p>}</p>
<p>for (int m = H2m1.first(); m &lt;= H2m1.last(); m++) {</p>
<p>n = k &#8212; m;</p>
<p>if (n &lt; 0) n = 0 &#8212; n;</p>
<p>if (n &gt;= (int)w) n -= 2 * (1 + n &#8212; w);</p>
<p>s2k1 += H2m1[m] * float(sour[y][n]);</p>
<p>}</p>
<p>for (int m = G2m1.first(); m &lt;= G2m1.last(); m++) {</p>
<p>n = k &#8212; m;</p>
<p>if (n &lt; 0) n = 0 &#8212; n;</p>
<p>if (n &gt;= (int)w) n -= 2 * (1 + n &#8212; w);</p>
<p>s2k1 += G2m1[m] * float(sour[y][n+w]);</p>
<p>}</p>
<p>dest[y][2*k] = mmxround(2.0f * s2k);</p>
<p>dest[y][2*k+1] = mmxround(2.0f * s2k1);</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>void FWT2D::synthcols(char** dest, char** sour, unsigned int w, unsigned int h) const</p>
<p>{</p>
<p>int n;</p>
<p>float s2k, s2k1;</p>
<p>const vec1D&amp; H2m = getH2m();</p>
<p>const vec1D&amp; G2m = getG2m();</p>
<p>const vec1D&amp; H2m1 = getH2m1();</p>
<p>const vec1D&amp; G2m1 = getG2m1();</p>
<p>for (unsigned int x = 0; x &lt; 2*w; x++) {</p>
<p>for (unsigned int k = 0; k &lt; h; k++) {</p>
<p>s2k = 0;</p>
<p>s2k1 = 0;</p>
<p>for (int m = H2m.first(); m &lt;= H2m.last(); m++) {</p>
<p>n = k &#8212; m;</p>
<p>if (n &lt; 0) n = 0 &#8212; n;</p>
<p>if (n &gt;= (int)h) n -= 2 * (1 + n &#8212; h);</p>
<p>s2k += H2m[m] * float(sour[n][x]);</p>
<p>}</p>
<p>for (int m = G2m.first(); m &lt;= G2m.last(); m++) {</p>
<p>n = k &#8212; m;</p>
<p>if (n &lt; 0) n = 0 &#8212; n;</p>
<p>if (n &gt;= (int)h) n -= 2 * (1 + n &#8212; h);</p>
<p>s2k += G2m[m] * float(sour[n+h][x]);</p>
<p>}</p>
<p>for (int m = H2m1.first(); m &lt;= H2m1.last(); m++) {</p>
<p>n = k &#8212; m;</p>
<p>if (n &lt; 0) n = 0 &#8212; n;</p>
<p>if (n &gt;= (int)h) n -= 2 * (1 + n &#8212; h);</p>
<p>s2k1 += H2m1[m] * float(sour[n][x]);</p>
<p>}</p>
<p>for (int m = G2m1.first(); m &lt;= G2m1.last(); m++) {</p>
<p>n = k &#8212; m;</p>
<p>if (n &lt; 0) n = 0 &#8212; n;</p>
<p>if (n &gt;= (int)h) n -= 2 * (1 + n &#8212; h);</p>
<p>s2k1 += G2m1[m] * float(sour[n+h][x]);</p>
<p>}</p>
<p>dest[2*k][x] = mmxround(2.0f * s2k);</p>
<p>dest[2*k+1][x] = mmxround(2.0f * s2k1);</p>
<p>}</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=366</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Алгоритмы встраивания и извлечения информации по методу замены вейвлет-коэффициентов</title>
		<link>/?p=371</link>
		<comments>/?p=371#comments</comments>
		<pubDate>Tue, 17 Jul 2012 10:26:31 +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">/?p=371</guid>
		<description><![CDATA[void JpegFile::read (BinaryIO* io) { CvrStgFile::read (io); FILE *infile = NULL ; infile = io-&#62;getStream() ; rewind (infile) ; struct jpeg_error_mgr errmgr ; DeCInfo.err = jpeg_std_error (&#38;errmgr) ; jpeg_create_decompress (&#38;DeCInfo) ; jpeg_stdio_src (&#38;DeCInfo, infile) ; jpeg_read_header (&#38;DeCInfo, TRUE) ; DwtCoeffs = jpeg_read_coefficients (&#38;DeCInfo) ; unsigned long totalnumcoeffs = 0 ; for (unsigned short icomp =&#8230;]]></description>
			<content:encoded><![CDATA[<p>void JpegFile::read (BinaryIO* io)</p>
<p>{</p>
<p>CvrStgFile::read (io);</p>
<p>FILE *infile = NULL ;</p>
<p>infile = io-&gt;getStream() ;</p>
<p>rewind (infile) ;</p>
<p>struct jpeg_error_mgr errmgr ;</p>
<p>DeCInfo.err = jpeg_std_error (&amp;errmgr) ;</p>
<p>jpeg_create_decompress (&amp;DeCInfo) ;</p>
<p>jpeg_stdio_src (&amp;DeCInfo, infile) ;</p>
<p>jpeg_read_header (&amp;DeCInfo, TRUE) ;<span id="more-371"></span></p>
<p>DwtCoeffs = jpeg_read_coefficients (&amp;DeCInfo) ;</p>
<p>unsigned long totalnumcoeffs = 0 ;</p>
<p>for (unsigned short icomp = 0 ; icomp &lt; DeCInfo.num_components ; icomp++) {</p>
<p>totalnumcoeffs += CoeffPerBlock * (HeightInBlocks[icomp] * WidthInBlocks[icomp]) ;</p>
<p>}</p>
<p>LinDwtCoeffs.resize (totalnumcoeffs) ;</p>
<p>UWORD32 linindex = 0 ;</p>
<p>for (unsigned short icomp = 0 ; icomp &lt; DeCInfo.num_components ; icomp++) {</p>
<p>unsigned int currow = 0 ;</p>
<p>while (currow &lt; HeightInBlocks[icomp]) {</p>
<p>unsigned int naccess = 1 ;</p>
<p>JBLOCKARRAY array = (*(DeCInfo.mem-&gt;access_virt_barray))</p>
<p>((j_common_ptr) &amp;DeCInfo, DwtCoeffs[icomp], currow, naccess, FALSE) ;</p>
<p>if (LinDwtCoeffs[linindex] != 0) {</p>
<p>StegoIndices.push_back (linindex) ;</p>
<p>}</p>
<p>linindex++ ;</p>
<p>}</p>
<p>currow += naccess ;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>void JpegFile::write ()</p>
<p>{</p>
<p>CvrStgFile::write() ;</p>
<p>FILE* outfile = getBinIO()-&gt;getStream() ;</p>
<p>jpeg_create_compress (&amp;CInfo) ;</p>
<p>jpeg_copy_critical_parameters (&amp;DeCInfo, &amp;CInfo) ;</p>
<p>struct jpeg_error_mgr jerr2 ;</p>
<p>CInfo.err = jpeg_std_error(&amp;jerr2) ;</p>
<p>jpeg_stdio_dest (&amp;CInfo, outfile) ;</p>
<p>jpeg_write_coefficients (&amp;CInfo, DwtCoeffs) ;</p>
<p>UWORD32 linindex = 0 ;</p>
<p>for (unsigned short icomp = 0 ; icomp &lt; CInfo.num_components ; icomp++) {</p>
<p>unsigned int currow = 0 ;</p>
<p>while (currow &lt; HeightInBlocks[icomp]) {</p>
<p>unsigned int naccess = 1 ;</p>
<p>JBLOCKARRAY array = (*(CInfo.mem-&gt;access_virt_barray))</p>
<p>((j_common_ptr) &amp;CInfo, DwtCoeffs[icomp], currow, naccess, TRUE) ;</p>
<p>for (unsigned int irow = 0 ; irow &lt; naccess ; irow++) {</p>
<p>array[irow][iblock][icoeff] = LinDwtCoeffs[linindex] ;</p>
<p>}</p>
<p>currow += naccess ;</p>
<p>}</p>
<p>}</p>
<p>jpeg_finish_compress (&amp;CInfo) ;</p>
<p>jpeg_destroy_compress(&amp;CInfo);</p>
<p>jpeg_finish_decompress (&amp;DeCInfo) ;</p>
<p>jpeg_destroy_decompress(&amp;DeCInfo);</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=371</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Листинг программы нахождения среднего методом интервалов</title>
		<link>/?p=398</link>
		<comments>/?p=398#comments</comments>
		<pubDate>Sat, 30 Jun 2012 14:18:10 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Листинги]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[листинг]]></category>

		<guid isPermaLink="false">/?p=398</guid>
		<description><![CDATA[Private Sub Command1_Click() Text10.Text = 0.12 Text11.Text = 0.16 Text12.Text = 0.14 Text13.Text = 0.16 Text14.Text = 0.5 Text15.Text = 0.48 Text16.Text = 0.05 Text17.Text = 0.1 End Sub Private Sub Command2_Click() Dim Yt As Double Dim x As Double Dim h As Double Dim Pi As Double Dim Pim As Double Dim Pip As&#8230;]]></description>
			<content:encoded><![CDATA[<p>Private Sub Command1_Click()</p>
<p>Text10.Text = 0.12</p>
<p>Text11.Text = 0.16</p>
<p>Text12.Text = 0.14</p>
<p>Text13.Text = 0.16</p>
<p>Text14.Text = 0.5</p>
<p>Text15.Text = 0.48</p>
<p>Text16.Text = 0.05</p>
<p>Text17.Text = 0.1</p>
<p>End Sub</p>
<p>Private Sub Command2_Click()</p>
<p>Dim Yt As Double</p>
<p>Dim x As Double</p>
<p>Dim h As Double</p>
<p>Dim Pi As Double</p>
<p>Dim Pim As Double</p>
<p>Dim Pip As Double</p>
<p>x = 23</p>
<p>h = 1</p>
<p>Pi = 0.5</p>
<p>Pim = 0.16</p>
<p>Pip = 0.48</p>
<p>Yt = x + h * ((Pi &#8212; Pim) / (2 * Pi &#8212; Pim &#8212; Pip))</p>
<p>Yt = CInt(Yt)</p>
<p>Text18.Text = Yt</p>
<p>Text19.Text = 0.9</p>
<p>End Sub</p>
<p>Private Sub Command3_Click()</p>
<p>Dim a1 As Double</p>
<p>Dim a2 As Double</p>
<p>Dim b1 As Double</p>
<p>Dim b2 As Double</p>
<p>Dim x As Double</p>
<p>Dim f As Double</p>
<p>Dim Yt As Double</p>
<p>a1 = 0.146</p>
<p>a2 = 0.146</p>
<p>Text20.Text = a1</p>
<p>b1 = 6.653</p>
<p>Text21.Text = b1</p>
<p>b2 = 26.612</p>
<p>Text22.Text = b2</p>
<p>x = 23</p>
<p>f = a1 * Exp(-1 * ((x &#8212; Yt) ^ 2 / b2))</p>
<p>Text23.Text = f</p>
<p>x = 25</p>
<p>f = a2 * Exp(-1 * ((x &#8212; Yt) ^ 2 / b2))</p>
<p>Text24.Text = f</p>
<p>End Sub</p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=398</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Создание диаграмм в С#</title>
		<link>/?p=388</link>
		<comments>/?p=388#comments</comments>
		<pubDate>Thu, 14 Jun 2012 14:06:31 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Задачи и решения]]></category>
		<category><![CDATA[Листинги]]></category>
		<category><![CDATA[Csharp]]></category>
		<category><![CDATA[графики]]></category>
		<category><![CDATA[диаграммы]]></category>
		<category><![CDATA[листинг]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[рисование]]></category>

		<guid isPermaLink="false">/?p=388</guid>
		<description><![CDATA[Строить диаграммы по заданным значениям в C# возможно, используя  элемент PictureBox и стандартный программный код для построения различных графических примитивов (точка, линия, круг, прямоугольник). Как это сделать, будет рассказано в этой и последующих статьях. Этап 1  &#8212; Создание WindowsForm и заполнение необходимыми элементами При выполнении данного практического задания использовалось четыре элемента PictureBox (наложенных друг на&#8230;]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Строить диаграммы по заданным значениям в C# возможно, используя  элемент PictureBox и стандартный программный код для построения различных графических примитивов (точка, линия, круг, прямоугольник). Как это сделать, будет рассказано в этой и последующих статьях.</p>
<h4 style="text-align: justify;">Этап 1  &#8212; Создание WindowsForm и заполнение необходимыми элементами</h4>
<p style="text-align: justify;">При выполнении данного практического задания использовалось четыре элемента PictureBox (наложенных друг на друга), шесть элементов Button, элемент ListBox, элемент Label и, наконец, пользовательский элемент NumericTextBox, являющийся наследником класса TextBox с возможностью ввода лишь цифр.</p>
<p style="text-align: justify;"><a href="/wp-content/uploads/2011/08/16.png"><img class="aligncenter size-full wp-image-389" title="один из вариантов вида формы для создания программы для построения диаграмм." src="/wp-content/uploads/2011/08/16.png" alt="" width="621" height="310" /></a></p>
<h4>Этап 2 &#8212; Заполнение ListBox.</h4>
<p style="text-align: justify;">Итак, элемент listBox1 будет заполнятся значениями, которые пользователь вводит в поле для ввода, представленное элементом NumericTextBox, носящим имя userControl1.  Кроме того, будет реализована возможность ввода значения нажатием клавиши Enter, при активном элементе NumericTextBox.</p>
<p>Добавление элемента нажатием кнопки «Добавить»:</p>
<p>try { listBox1.Items.Add(Convert.ToInt32(userControl11.Text)); label1.Text = &#171;Вводите значения, раделяя нажатием Enter&#187;; }</p>
<p>catch (FormatException ex) { label1.Text = &#171;Введено недопустимое значение&#187;; }</p>
<p>userControl11.Text = &#171;&#187;;</p>
<p>n = listBox1.Items.Count;</p>
<p>Удаление выделенного значения из элемента ListBox.</p>
<p>private void button3_Click(object sender, EventArgs e)</p>
<p>{</p>
<p>listBox1.Items.Remove(listBox1.SelectedItem);</p>
<p>n = listBox1.Items.Count;</p>
<p>}</p>
<p>Реализация добавления элемента в ListBox нажатием клавиши Enter.</p>
<p>private void userControl11_KeyPress(object sender, KeyPressEventArgs e)</p>
<p>{</p>
<p>if (e.KeyChar ==(int)Keys.Enter)</p>
<p>{</p>
<p>listBox1.Items.Add(Convert.ToInt32(userControl11.Text));</p>
<p>userControl11.Text = &#171;&#187;;</p>
<p>n = listBox1.Items.Count;</p>
<p>}</p>
<p>}</p>
<p>Как можно было заметить из приведенных строк кода, в нашем классе Form1 заданы поля</p>
<p>int n = 0;</p>
<p>double uk = 1;<span id="more-388"></span></p>
<p>Поле uk изменяется методом setuk() и будет необходимо для построения диаграмм. В нем будет хранится количество точек, соответствующее единице значения из ListBox.</p>
<p>Поле n – общее число значений в коллекции ListBox.</p>
<h4>Этап 3 -  Метод setuk()<em> </em></h4>
<p>Как уже было оговорено выше, методом setuk() изменяется значение поля uk. Ниже приведен код, реализующий его:</p>
<p>public double setuk(double uk)</p>
<p>{</p>
<p>int sum=0;</p>
<p>for (int i = 0; i &lt; n; i++) { sum = sum + Convert.ToInt32(listBox1.Items[i]); }</p>
<p>double fs = (double)sum;</p>
<p>uk = fs/ (double) pictureBox1.Size.Height;</p>
<p>return (uk);</p>
<p>}</p>
<h4>Этап 4 -  Построение точечной диаграммы</h4>
<p>В данном варианте выполнения задания будет рассмотрена точечная диаграмма, со случайно задаваемым стилем соединения точек и цветом. Всего стилей 6: Custom, Dash, DashDot, DashDotDot, Dot, Solid.</p>
<p>Значения, для которых вариант выполнения лучше брать одного порядка, для большей наглядности. Кроме того, около каждой точки на диаграмме будет подписано значение, которому эта точка соответтсвует.</p>
<p>Точечная диаграмма будет вызываться нажатием кнопки «Точечная». Далее приведем программный код, описывающий событие нажатия кнопки:</p>
<p>private void button2_Click(object sender, EventArgs e)</p>
<p>{</p>
<p>pictureBox1.Visible = true;</p>
<p>pictureBox2.Visible = false;</p>
<p>pictureBox3.Visible = false;</p>
<p>pictureBox4.Visible = false;</p>
<p>uk=setuk(uk);</p>
<p>userControl11.Enabled = false;</p>
<p>listBox1.Enabled = false;</p>
<p>pictureBox1.Visible = false;</p>
<p>pictureBox1.Visible = true;</p>
<p>}</p>
<p>После нажатия данной кнопки активизируется pictureBox1 и скрывется pictureBox4, кроме того деактивируются элементы ListBox и NumericTextBox. Построение самой диаграммы обеспечивает событие pictureBox1_Paint. Ниже приведен его код:</p>
<p>private void pictureBox1_Paint(object sender, PaintEventArgs e)</p>
<p>{</p>
<p>Random rnd = new Random();</p>
<p>int a = rnd.Next(0, 255), b = rnd.Next(0, 255), c = rnd.Next(0, 255);</p>
<p>Pen myPen = new Pen(Color.FromArgb(a,b,c), 2);</p>
<p>int ukd = 0;</p>
<p>Random rnd2 = new Random();</p>
<p>ukd = rnd2.Next(1, 6);</p>
<p>if(ukd==1) { myPen.DashStyle = DashStyle.Custom; }</p>
<p>if(ukd==2) { myPen.DashStyle = DashStyle.Dash; }</p>
<p>if(ukd==3) { myPen.DashStyle = DashStyle.DashDot; }</p>
<p>if(ukd==4) { myPen.DashStyle = DashStyle.DashDotDot; }</p>
<p>if(ukd==5) { myPen.DashStyle = DashStyle.Dot; }</p>
<p>if (ukd == 6) { myPen.DashStyle = DashStyle.Solid; }</p>
<p>Pen myPen2 = new Pen(Color.FromArgb(255-a, 255-b, 255-c), 5);</p>
<p>Point[] points = new Point[n];</p>
<p>for (int i = 0; i &lt; n; i++)</p>
<p>{</p>
<p>points[i] = new Point(pictureBox1.Size.Width / n*i, Convert.ToInt32(pictureBox1.Size.Height &#8212; Convert.ToInt32(listBox1.Items[i])/uk));</p>
<p>}</p>
<p>e.Graphics.DrawLines(myPen, points);</p>
<p>SizeF size = new SizeF(5, 5);</p>
<p>RectangleF[] recs = new RectangleF[n];</p>
<p>for (int i = 0; i &lt; n; i++)</p>
<p>{</p>
<p>recs[i] = new RectangleF(points[i], size);</p>
<p>e.Graphics.DrawEllipse(myPen2, recs[i]);</p>
<p>}</p>
<p>string[] val = new string[n];</p>
<p>Font MyFont = new Font(&#171;Courier New&#187;, 10);</p>
<p>SolidBrush fontbr = new SolidBrush(Color.Black);</p>
<p>for (int i = 0; i &lt; n; i++)</p>
<p>{</p>
<p>val[i] = Convert.ToString(listBox1.Items[i]);</p>
<p>e.Graphics.DrawString(val[i], MyFont, fontbr, points[i]);</p>
<p>}</p>
<p>myPen.Dispose();</p>
<p>myPen2.Dispose();</p>
<p>}</p>
<p>Цвет и стиль начертания линии задается случайно. Цвет точки задается как (255-цвет линии) для каждой из составляющих RGB, что исключает совпадение.</p>
<p>Продолжение смотри в следующей статье на нашем сайте</p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=388</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Заполнение матрицы нулями</title>
		<link>/?p=581</link>
		<comments>/?p=581#comments</comments>
		<pubDate>Tue, 12 Jun 2012 02:48:17 +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>
		<category><![CDATA[С++]]></category>

		<guid isPermaLink="false">/?p=581</guid>
		<description><![CDATA[Задача: Заполните нулями элементы массива A(m,n), расположенные по периметру, используя только 1 цикл. Алгоритм: Создаем массив из M=5 строк и N=10 столбцов -&#62;Придаем каждому элементу массива значение равное 1 -&#62;Выводим начальный массив на экран -&#62; Придаем значение равное 0 элементам, находящимся по периметру -&#62; Выводим на экран конечный массив. Код программы на языке програмирования C#:&#8230;]]></description>
			<content:encoded><![CDATA[<p><strong><span style="text-decoration: underline;">Задача:</span></strong></p>
<p>Заполните нулями элементы массива A(m,n), расположенные по периметру, используя только 1 цикл.</p>
<p><strong><span style="text-decoration: underline;">Алгоритм:</span></strong></p>
<p><em>Создаем массив из </em><em>M</em><em>=5 строк и </em><em>N</em><em>=10 столбцов -&gt;Придаем каждому элементу массива значение равное 1 -&gt;Выводим начальный массив на экран -&gt; Придаем значение равное 0 элементам, находящимся по периметру -&gt; Выводим на экран конечный массив.</em></p>
<p><span style="text-decoration: underline;"><strong>Код программы на языке програмирования C#:</strong></span></p>
<p>using System;</p>
<p>using System.Collections.Generic;</p>
<p>using System.ComponentModel;</p>
<p>using System.Data;</p>
<p>using System.Drawing;</p>
<p>using System.Linq;</p>
<p>using System.Text;</p>
<p>using System.Windows.Forms;</p>
<p><span id="more-581"></span></p>
<p>namespace WindowsFormsApplication3</p>
<p>{</p>
<p>public partial class Form1 : Form</p>
<p>{</p>
<p>public Form1()</p>
<p>{</p>
<p>InitializeComponent();</p>
<p>}</p>
<p>private void button1_Click(object sender, EventArgs e)</p>
<p>{</p>
<p>Random rand = new Random();</p>
<p>int n, k;</p>
<p>n = Convert.ToInt32(textBox1.Text);</p>
<p>k = Convert.ToInt32(textBox2.Text);</p>
<p>//n строк, k столбцов</p>
<p>dataGridView1.RowCount = n;</p>
<p>dataGridView1.ColumnCount = k;</p>
<p>int[] m= new int[n];</p>
<p>//Задаем индексы для строк</p>
<p>for (int i = 0; i &lt; n; i++)</p>
<p>{</p>
<p>dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();</p>
<p>}</p>
<p>//Задаем индексы для столбцов</p>
<p>for (int i = 0; i &lt; k; i++)</p>
<p>{</p>
<p>dataGridView1.Columns[i].HeaderCell.Value = (i + 1).ToString();</p>
<p>}</p>
<p>//вывод на экран элементов массива, принимающих случайное значение от 100 до 1000(dataGridView1)</p>
<p>for (int i = 0; i &lt; n; i++)</p>
<p>{</p>
<p>for (int j = 0; j &lt; k; j++)</p>
<p>{</p>
<p>dataGridView1.Rows[i].Cells[j].Value = rand.Next(100, 1000);</p>
<p>if (m[i] &lt; Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value))</p>
<p>{</p>
<p>m[i] = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);</p>
<p>}</p>
<p>}</p>
<p>textBox3.Text+=&#187;Строка &#187; + (i+1) +&#187;: &#171;+ m[i]+Environment.NewLine;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>Пользовательский интерфейс разработанной программной модели.</p>
<p style="text-align: center;"><a href="/wp-content/uploads/2012/06/22.png"><img class="aligncenter size-full wp-image-582" title="программа заполнения матрицы нулями" src="/wp-content/uploads/2012/06/22.png" alt="" width="451" height="337" /></a></p>
<p style="text-align: justify;"><a href="/wp-content/uploads/2012/06/22.png"></a>Результаты работы программы представлены на рисунке ниже</p>
<p style="text-align: center;"><a href="/wp-content/uploads/2012/06/23.png"><img class="aligncenter size-full wp-image-583" title="результаты реализации разработанного алгоритма заполнения массива" src="/wp-content/uploads/2012/06/23.png" alt="" width="560" height="362" /></a></p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=581</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Поиск наибольших элементов в матрице</title>
		<link>/?p=575</link>
		<comments>/?p=575#comments</comments>
		<pubDate>Mon, 11 Jun 2012 20:43:09 +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">/?p=575</guid>
		<description><![CDATA[Условия задачи: Найти наибольшие элементы каждой строки матрицы и записать их в массив. Алгоритм выполнения задачи: Создаем массив, состоящий из n строк и k столбцов в DataGridView -&#62; Выбираем размерность массива -&#62;Заполняем массив случайными числами от 100 до 1000 -&#62;Выбираем в каждой строке номера элементов с самым большим значением -&#62;Выводим эти номера на экран в&#8230;]]></description>
			<content:encoded><![CDATA[<p><strong><span style="text-decoration: underline;">Условия задачи:</span> </strong>Найти наибольшие элементы каждой строки матрицы и записать их в массив.</p>
<p><strong><span style="text-decoration: underline;">Алгоритм выполнения задачи:</span></strong></p>
<p><em>Создаем массив, состоящий из </em><em>n</em><em> </em><em>строк и </em><em>k</em><em> </em><em>столбцов в </em><em>DataGridView</em><em> -&gt; Выбираем размерность массива -&gt;Заполняем массив случайными числами от 100 до 1000 -&gt;Выбираем в каждой строке номера элементов с самым большим значением -&gt;Выводим эти номера на экран в </em><em>TextBox</em><em>.</em></p>
<p><em> </em></p>
<p><em>Нумерация элементов в массиве от 1(</em><em>i</em><em>+1).</em></p>
<p><span style="text-decoration: underline;"><strong><em>Код программы на языке </em><em>C</em><em>#:<span id="more-575"></span></em></strong></span></p>
<p>using System;</p>
<p>using System.Collections.Generic;</p>
<p>using System.ComponentModel;</p>
<p>using System.Data;</p>
<p>using System.Drawing;</p>
<p>using System.Linq;</p>
<p>using System.Text;</p>
<p>using System.Windows.Forms;</p>
<p>namespace WindowsFormsApplication3</p>
<p>{</p>
<p>public partial class Form1 : Form</p>
<p>{</p>
<p>public Form1()</p>
<p>{</p>
<p>InitializeComponent();</p>
<p>}</p>
<p>private void button1_Click(object sender, EventArgs e)</p>
<p>{</p>
<p>Random rand = new Random();</p>
<p>int n, k;</p>
<p>n = Convert.ToInt32(textBox1.Text);</p>
<p>k = Convert.ToInt32(textBox2.Text);</p>
<p>//n строк, k столбцов</p>
<p>dataGridView1.RowCount = n;</p>
<p>dataGridView1.ColumnCount = k;</p>
<p>int[] m= new int[n];</p>
<p>//Задаем индексы для строк</p>
<p>for (int i = 0; i &lt; n; i++)</p>
<p>{</p>
<p>dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();</p>
<p>}</p>
<p>//Задаем индексы для столбцов</p>
<p>for (int i = 0; i &lt; k; i++)</p>
<p>{</p>
<p>dataGridView1.Columns[i].HeaderCell.Value = (i + 1).ToString();</p>
<p>}</p>
<p>//вывод на экран элементов массива, принимающих случайное значение от 100 до 1000(dataGridView1)</p>
<p>for (int i = 0; i &lt; n; i++)</p>
<p>{</p>
<p>for (int j = 0; j &lt; k; j++)</p>
<p>{</p>
<p>dataGridView1.Rows[i].Cells[j].Value = rand.Next(100, 1000);</p>
<p>if (m[i] &lt; Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value))</p>
<p>{</p>
<p>m[i] = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);</p>
<p>}</p>
<p>}</p>
<p>textBox3.Text+=&#187;Строка &#187; + (i+1) +&#187;: &#171;+ m[i]+Environment.NewLine;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p><strong>Пользовательский интерфейс. </strong>Снимки с экрана полученные при работе с программой</p>
<p style="text-align: center;"><a href="/wp-content/uploads/2012/06/2.png"><img class="aligncenter size-full wp-image-576" title="Вычисления максимальных элементов в матрице" src="/wp-content/uploads/2012/06/2.png" alt="" width="586" height="379" /></a><br />
Работа программы при следующих входных данных: размерность матрицы (3X4).. Создан и заполнен случайными числами от 100 до 1000 двумерный массив(3 строки на 4 столбца).. На экран выведен этот массив в виде следующей матрицы:<br />
696	767	960	210<br />
482	261	810	907<br />
433	694	408	480<br />
Выбираем из каждой строки наибольший элемент. Конечный результат -<br />
960	907	694</p>
<p style="text-align: center;"><a href="/wp-content/uploads/2012/06/21.png"><img class="aligncenter size-full wp-image-577" title="Результат работы программы" src="/wp-content/uploads/2012/06/21.png" alt="" width="554" height="273" /></a></p>
]]></content:encoded>
			<wfw:commentRss>/?feed=rss2&#038;p=575</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>