<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[ايران ويج - C,C++,VC++]]></title>
		<link>https://www.iranled.com/forum/</link>
		<description><![CDATA[ايران ويج - https://www.iranled.com/forum]]></description>
		<pubDate>Mon, 19 Oct 2026 05:57:08 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[مقسوم علیه های یک عدد:]]></title>
			<link>https://www.iranled.com/forum/thread-32625.html</link>
			<pubDate>Tue, 01 Jun 2021 19:31:42 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32625.html</guid>
			<description><![CDATA[<span style="color: #464749;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-family: iranyekan, sans-serif;" class="mycode_font">مقسوم علیه های یک عدد:</span></span></span><br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;iostream.h&gt;<br />
#include &lt;conio.h&gt;<br />
 <br />
void main(){<br />
clrscr();<br />
 <br />
    int n; <br />
    cout &lt;&lt;" Enter Number :";<br />
    cin &gt;&gt;n;<br />
    for(int i = 1; i &lt;= n ; i++){<br />
        if( n % i == 0 ){<br />
            cout &lt;&lt;i&lt;&lt;endl;<br />
        }<br />
    }<br />
 <br />
getch();<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[<span style="color: #464749;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-family: iranyekan, sans-serif;" class="mycode_font">مقسوم علیه های یک عدد:</span></span></span><br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;iostream.h&gt;<br />
#include &lt;conio.h&gt;<br />
 <br />
void main(){<br />
clrscr();<br />
 <br />
    int n; <br />
    cout &lt;&lt;" Enter Number :";<br />
    cin &gt;&gt;n;<br />
    for(int i = 1; i &lt;= n ; i++){<br />
        if( n % i == 0 ){<br />
            cout &lt;&lt;i&lt;&lt;endl;<br />
        }<br />
    }<br />
 <br />
getch();<br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[سورس کد محاسبه جذر یک عدد در سی پلاس پلاس]]></title>
			<link>https://www.iranled.com/forum/thread-32624.html</link>
			<pubDate>Tue, 01 Jun 2021 19:29:36 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32624.html</guid>
			<description><![CDATA[سورس کد محاسبه جذر یک عدد در سی پلاس پلاس<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include&lt;iostream&gt;<br />
#include&lt;conio.h&gt;<br />
#include&lt;math.h&gt;<br />
using namespace std;<br />
 <br />
main()<br />
{<br />
float n;<br />
cout&lt;&lt;"please enter a number:";<br />
cin&gt;&gt;n;<br />
cout&lt;&lt;"&#92;n&#92;n"&lt;&lt;"square of "&lt;&lt;n&lt;&lt;"="&lt;&lt;sqrt(n);<br />
cout&lt;&lt;"&#92;n&#92;n&#92;n"&lt;&lt;"press any key to exit...";<br />
getch();<br />
return 0;<br />
}<br />
//&gt;   sourceiran.com</code></div></div>]]></description>
			<content:encoded><![CDATA[سورس کد محاسبه جذر یک عدد در سی پلاس پلاس<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include&lt;iostream&gt;<br />
#include&lt;conio.h&gt;<br />
#include&lt;math.h&gt;<br />
using namespace std;<br />
 <br />
main()<br />
{<br />
float n;<br />
cout&lt;&lt;"please enter a number:";<br />
cin&gt;&gt;n;<br />
cout&lt;&lt;"&#92;n&#92;n"&lt;&lt;"square of "&lt;&lt;n&lt;&lt;"="&lt;&lt;sqrt(n);<br />
cout&lt;&lt;"&#92;n&#92;n&#92;n"&lt;&lt;"press any key to exit...";<br />
getch();<br />
return 0;<br />
}<br />
//&gt;   sourceiran.com</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[واریانس و میانگین]]></title>
			<link>https://www.iranled.com/forum/thread-32623.html</link>
			<pubDate>Tue, 01 Jun 2021 19:25:36 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32623.html</guid>
			<description><![CDATA[<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: iranyekan, sans-serif;" class="mycode_font">تعداد عدد ورودی را دریافت کند و واریانس و میانگین را محاسبه و در خروجی چاپ کند</span></span></span><br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include&lt;iostream&gt;<br />
#include&lt;conio.h&gt;<br />
#include&lt;math.h&gt;<br />
using namespace std;<br />
<br />
//-------------------------------------Getting Arrays----------------------------------<br />
void InputArray(float x[],int n)<br />
{<br />
  for(int i=0;i&lt;n;i++)<br />
  { <br />
      cout&lt;&lt;"Enter x["&lt;&lt;i&lt;&lt;"]:";<br />
      cin&gt;&gt;x[i];<br />
  }<br />
}<br />
<br />
//-----------------------------------------Calculate The Average-------------------------------------<br />
float CalculateAverage(float x[],int n)<br />
{<br />
   float sum=0.0; <br />
   for(int i=0; i&lt;n;i++)<br />
     sum = sum+x[i];<br />
   return  sum/n; <br />
}<br />
<br />
//------------------------------------------Main Function------------------------<br />
int main()<br />
{<br />
   int n;<br />
   cout&lt;&lt;"Enter A Number Of Array Input:";<br />
   cin&gt;&gt;n;<br />
<br />
   float x[n],A,s=0.0,f; <br />
   InputArray(x,n);<br />
   A=CalculateAverage(x,n);<br />
   <br />
   for(int i=0; i&lt;n;i++)<br />
       s=s+pow((x[i]-A),2);<br />
   <br />
   cout &lt;&lt; s / (n*(n-1));<br />
   getch();<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: iranyekan, sans-serif;" class="mycode_font">تعداد عدد ورودی را دریافت کند و واریانس و میانگین را محاسبه و در خروجی چاپ کند</span></span></span><br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include&lt;iostream&gt;<br />
#include&lt;conio.h&gt;<br />
#include&lt;math.h&gt;<br />
using namespace std;<br />
<br />
//-------------------------------------Getting Arrays----------------------------------<br />
void InputArray(float x[],int n)<br />
{<br />
  for(int i=0;i&lt;n;i++)<br />
  { <br />
      cout&lt;&lt;"Enter x["&lt;&lt;i&lt;&lt;"]:";<br />
      cin&gt;&gt;x[i];<br />
  }<br />
}<br />
<br />
//-----------------------------------------Calculate The Average-------------------------------------<br />
float CalculateAverage(float x[],int n)<br />
{<br />
   float sum=0.0; <br />
   for(int i=0; i&lt;n;i++)<br />
     sum = sum+x[i];<br />
   return  sum/n; <br />
}<br />
<br />
//------------------------------------------Main Function------------------------<br />
int main()<br />
{<br />
   int n;<br />
   cout&lt;&lt;"Enter A Number Of Array Input:";<br />
   cin&gt;&gt;n;<br />
<br />
   float x[n],A,s=0.0,f; <br />
   InputArray(x,n);<br />
   A=CalculateAverage(x,n);<br />
   <br />
   for(int i=0; i&lt;n;i++)<br />
       s=s+pow((x[i]-A),2);<br />
   <br />
   cout &lt;&lt; s / (n*(n-1));<br />
   getch();<br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[c++]]></title>
			<link>https://www.iranled.com/forum/thread-32562.html</link>
			<pubDate>Thu, 01 Apr 2021 15:10:25 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32562.html</guid>
			<description><![CDATA[. Ba Salam Va Khaste Nabashid <br />
Dostan Man Taze Shoro Be Yadgiri Be Zaban Cpp Kardam <br />
Man Nemidonam Chera Ama Ba inke Baraye Man in Zaban Hich Sakhti Nadare<br />
Man Daram Az in Zaban Zade Misham Lotfan Be Man Yek Rahe Hal Bedid Ke Chetori Yad Girim Ro edare konam  Ke Be Moshkeli Bar Nakhoram <br />
<br />
<img src="https://www.iranled.com/forum/images/smilies/rose.png" alt="گل" title="گل" class="smilie smilie_100" />]]></description>
			<content:encoded><![CDATA[. Ba Salam Va Khaste Nabashid <br />
Dostan Man Taze Shoro Be Yadgiri Be Zaban Cpp Kardam <br />
Man Nemidonam Chera Ama Ba inke Baraye Man in Zaban Hich Sakhti Nadare<br />
Man Daram Az in Zaban Zade Misham Lotfan Be Man Yek Rahe Hal Bedid Ke Chetori Yad Girim Ro edare konam  Ke Be Moshkeli Bar Nakhoram <br />
<br />
<img src="https://www.iranled.com/forum/images/smilies/rose.png" alt="گل" title="گل" class="smilie smilie_100" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[مثال ناتریکس با سی پلاس پلاس]]></title>
			<link>https://www.iranled.com/forum/thread-32483.html</link>
			<pubDate>Wed, 23 Dec 2020 10:26:33 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32483.html</guid>
			<description><![CDATA[<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>// C++ program to demonstrate insertion <br />
// into a vector of vectors <br />
<br />
#include &lt;iostream&gt; <br />
#include &lt;vector&gt; <br />
using namespace std; <br />
<br />
// Defining the rows and columns of <br />
// vector of vectors <br />
#define ROW 4 <br />
#define COL 5 <br />
<br />
int main() <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;// Initializing the vector of vectors <br />
&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;vector&lt;int&gt; &gt; vec; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Elements to insert in column <br />
&nbsp;&nbsp;&nbsp;&nbsp;int num = 10; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Inserting elements into vector <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; ROW; i++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Vector to store column elements <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;int&gt; v1; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int j = 0; j &lt; COL; j++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v1.push_back(num); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num += 5; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Pushing back above 1D vector <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// to create the 2D vector <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec.push_back(v1); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Displaying the 2D vector <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; vec.size(); i++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int j = 0; j &lt; vec[i].size(); j++) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; vec[i][j] &lt;&lt; " "; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; endl; <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0; <br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>// C++ program to demonstrate insertion <br />
// into a vector of vectors <br />
<br />
#include &lt;iostream&gt; <br />
#include &lt;vector&gt; <br />
using namespace std; <br />
<br />
// Defining the rows and columns of <br />
// vector of vectors <br />
#define ROW 4 <br />
#define COL 5 <br />
<br />
int main() <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;// Initializing the vector of vectors <br />
&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;vector&lt;int&gt; &gt; vec; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Elements to insert in column <br />
&nbsp;&nbsp;&nbsp;&nbsp;int num = 10; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Inserting elements into vector <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; ROW; i++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Vector to store column elements <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;int&gt; v1; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int j = 0; j &lt; COL; j++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v1.push_back(num); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num += 5; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Pushing back above 1D vector <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// to create the 2D vector <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec.push_back(v1); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Displaying the 2D vector <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; vec.size(); i++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int j = 0; j &lt; vec[i].size(); j++) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; vec[i][j] &lt;&lt; " "; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; endl; <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0; <br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[الگوریتم dda و برزنهام]]></title>
			<link>https://www.iranled.com/forum/thread-32476.html</link>
			<pubDate>Mon, 14 Dec 2020 12:51:18 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32476.html</guid>
			<description><![CDATA[سلام خسته نباشید به  دوستان عزیز <br />
سوال داشتم در مورد الگوریتم های کشیدن خط (ddaو برزنهام ) که در زمانی که مقدار شیب خط منفی میشه باید چکار کنیم ؟]]></description>
			<content:encoded><![CDATA[سلام خسته نباشید به  دوستان عزیز <br />
سوال داشتم در مورد الگوریتم های کشیدن خط (ddaو برزنهام ) که در زمانی که مقدار شیب خط منفی میشه باید چکار کنیم ؟]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[HRRN]]></title>
			<link>https://www.iranled.com/forum/thread-32337.html</link>
			<pubDate>Tue, 21 Jul 2020 06:27:09 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32337.html</guid>
			<description><![CDATA[CPP program for Highest Response Ratio Next (HRRN) Scheduling <br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>// CPP program for Highest Response Ratio Next (HRRN) Scheduling <br />
#include &lt;bits/stdc++.h&gt; <br />
using namespace std; <br />
// Defining process details <br />
struct process { <br />
&nbsp;&nbsp;&nbsp;&nbsp;char name; <br />
&nbsp;&nbsp;&nbsp;&nbsp;int at, bt, ct, wt, tt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;int completed; <br />
&nbsp;&nbsp;&nbsp;&nbsp;float ntt; <br />
} p[10]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
int n; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
// Sorting Processes by Arrival Time <br />
void sortByArrival() <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;struct process temp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;int i, j; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Selection Sort applied <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i &lt; n - 1; i++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (j = i + 1; j &lt; n; j++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Check for lesser arrival time <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (p[i].at &gt; p[j].at) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Swap earlier process to front <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp = p[i]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i] = p[j]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[j] = temp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
} <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
int main() <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;int i, j, t, sum_bt = 0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;char c; <br />
&nbsp;&nbsp;&nbsp;&nbsp;float avgwt = 0, avgtt = 0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;n = 5; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// predefined arrival times <br />
&nbsp;&nbsp;&nbsp;&nbsp;int arriv[] = { 1, 2, 4, 22, 0 }; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// predefined burst times <br />
&nbsp;&nbsp;&nbsp;&nbsp;int burst[] = { 3, 6, 4, 5, 2 }; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Initializing the structure variables <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0, c = 'A'; i &lt; n; i++, c++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].name = c; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].at = arriv[i]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].bt = burst[i]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Variable for Completion status <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Pending = 0 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Completed = 1 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].completed = 0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Variable for sum of all Burst Times <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum_bt += p[i].bt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Sorting the structure by arrival times <br />
&nbsp;&nbsp;&nbsp;&nbsp;sortByArrival(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; "Name " &lt;&lt; " Arrival Time " &lt;&lt; " Burst Time " &lt;&lt; " Waiting Time "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt; " TurnAround Time " &lt;&lt; " Normalized TT" ; <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (t = p[0].at; t &lt; sum_bt;) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Set lower limit to response ratio <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float hrr = -9999; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Response Ratio Variable <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float temp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Variable to store next processs selected <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int loc; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i &lt; n; i++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Checking if process has arrived and is Incomplete <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (p[i].at &lt;= t &amp;&amp; p[i].completed != 1) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Calculating Response Ratio <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp = (p[i].bt + (t - p[i].at)) / p[i].bt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Checking for Highest Response Ratio <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (hrr &lt; temp) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Storing Response Ratio <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hrr = temp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Storing Location <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loc = i; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Updating time value <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t += p[loc].bt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Calculation of waiting time <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[loc].wt = t - p[loc].at - p[loc].bt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Calculation of Turn Around Time <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[loc].tt = t - p[loc].at; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Sum Turn Around Time for average <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;avgtt += p[loc].tt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Calculation of Normalized Turn Around Time <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[loc].ntt = ((float)p[loc].tt / p[loc].bt); <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Updating Completion Status <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[loc].completed = 1; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Sum Waiting Time for average <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;avgwt += p[loc].wt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt; "&#92;n" &lt;&lt; p[loc].name &lt;&lt;"&#92;t" &lt;&lt; p[loc].at; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; "&#92;t&#92;t" &lt;&lt; p[loc].bt &lt;&lt;"&#92;t&#92;t"&lt;&lt; p[loc].wt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt;"&#92;t&#92;t"&lt;&lt; p[loc].tt &lt;&lt;"&#92;t&#92;t"&lt;&lt; p[loc].ntt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; "&#92;nAverage waiting time: " &lt;&lt; avgwt / n &lt;&lt; endl; <br />
&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt;"Average Turn Around time:"&lt;&lt; avgtt / n; <br />
} <br />
//This code is contributed by shivi_Aggarwal</code></div></div>]]></description>
			<content:encoded><![CDATA[CPP program for Highest Response Ratio Next (HRRN) Scheduling <br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>// CPP program for Highest Response Ratio Next (HRRN) Scheduling <br />
#include &lt;bits/stdc++.h&gt; <br />
using namespace std; <br />
// Defining process details <br />
struct process { <br />
&nbsp;&nbsp;&nbsp;&nbsp;char name; <br />
&nbsp;&nbsp;&nbsp;&nbsp;int at, bt, ct, wt, tt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;int completed; <br />
&nbsp;&nbsp;&nbsp;&nbsp;float ntt; <br />
} p[10]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
int n; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
// Sorting Processes by Arrival Time <br />
void sortByArrival() <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;struct process temp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;int i, j; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Selection Sort applied <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i &lt; n - 1; i++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (j = i + 1; j &lt; n; j++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Check for lesser arrival time <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (p[i].at &gt; p[j].at) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Swap earlier process to front <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp = p[i]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i] = p[j]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[j] = temp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
} <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
int main() <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;int i, j, t, sum_bt = 0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;char c; <br />
&nbsp;&nbsp;&nbsp;&nbsp;float avgwt = 0, avgtt = 0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;n = 5; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// predefined arrival times <br />
&nbsp;&nbsp;&nbsp;&nbsp;int arriv[] = { 1, 2, 4, 22, 0 }; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// predefined burst times <br />
&nbsp;&nbsp;&nbsp;&nbsp;int burst[] = { 3, 6, 4, 5, 2 }; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Initializing the structure variables <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0, c = 'A'; i &lt; n; i++, c++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].name = c; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].at = arriv[i]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].bt = burst[i]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Variable for Completion status <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Pending = 0 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Completed = 1 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].completed = 0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Variable for sum of all Burst Times <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum_bt += p[i].bt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Sorting the structure by arrival times <br />
&nbsp;&nbsp;&nbsp;&nbsp;sortByArrival(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; "Name " &lt;&lt; " Arrival Time " &lt;&lt; " Burst Time " &lt;&lt; " Waiting Time "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt; " TurnAround Time " &lt;&lt; " Normalized TT" ; <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (t = p[0].at; t &lt; sum_bt;) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Set lower limit to response ratio <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float hrr = -9999; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Response Ratio Variable <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float temp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Variable to store next processs selected <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int loc; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i &lt; n; i++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Checking if process has arrived and is Incomplete <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (p[i].at &lt;= t &amp;&amp; p[i].completed != 1) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Calculating Response Ratio <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp = (p[i].bt + (t - p[i].at)) / p[i].bt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Checking for Highest Response Ratio <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (hrr &lt; temp) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Storing Response Ratio <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hrr = temp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Storing Location <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loc = i; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Updating time value <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t += p[loc].bt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Calculation of waiting time <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[loc].wt = t - p[loc].at - p[loc].bt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Calculation of Turn Around Time <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[loc].tt = t - p[loc].at; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Sum Turn Around Time for average <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;avgtt += p[loc].tt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Calculation of Normalized Turn Around Time <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[loc].ntt = ((float)p[loc].tt / p[loc].bt); <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Updating Completion Status <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[loc].completed = 1; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Sum Waiting Time for average <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;avgwt += p[loc].wt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt; "&#92;n" &lt;&lt; p[loc].name &lt;&lt;"&#92;t" &lt;&lt; p[loc].at; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; "&#92;t&#92;t" &lt;&lt; p[loc].bt &lt;&lt;"&#92;t&#92;t"&lt;&lt; p[loc].wt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt;"&#92;t&#92;t"&lt;&lt; p[loc].tt &lt;&lt;"&#92;t&#92;t"&lt;&lt; p[loc].ntt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; "&#92;nAverage waiting time: " &lt;&lt; avgwt / n &lt;&lt; endl; <br />
&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt;"Average Turn Around time:"&lt;&lt; avgtt / n; <br />
} <br />
//This code is contributed by shivi_Aggarwal</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[الگوریتم زمانبندی RR به زبان C همراه سورس کد]]></title>
			<link>https://www.iranled.com/forum/thread-32176.html</link>
			<pubDate>Fri, 03 Jan 2020 19:26:16 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32176.html</guid>
			<description><![CDATA[در این پست شما می توانید  سورس الگوریتم زمانبندی RR به زبان C سی را از ما دریافت کنید.<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include&lt;stdio.h&gt;<br />
struct job<br />
{<br />
    char jid[10];<br />
    int at;<br />
    int bt;    <br />
    int wt;<br />
    int tt;<br />
}jq[10],rq[100];<br />
int front_jq=0,rear_jq=0;<br />
int front_rq=0,rear_rq=0;<br />
int rt[100];<br />
void gantt_chart(int q)<br />
{<br />
    int i,k,val,j=rq[0].at;<br />
    printf("&#92;n&#92;nGANTT CHART&#92;n");<br />
    for(i=0;i&lt;rear_rq;i++)<br />
    {<br />
        for(k=0;k&lt;rt[i];k++)<br />
            printf("__");<br />
        printf(" ");<br />
    }<br />
    printf("&#92;n");<br />
    for(i=0;i&lt;rear_rq;i++)<br />
    {<br />
        printf("%s",rq[i].jid);<br />
        for(k=0;k&lt;rt[i]-1;k++)<br />
                        printf("  ");<br />
                printf(" ");<br />
    }<br />
    printf("&#92;n");<br />
        for(i=0;i&lt;rear_rq;i++)<br />
        {<br />
                for(k=0;k&lt;rt[i];k++)<br />
                        printf("__");<br />
                printf(" ");<br />
        }<br />
        printf("&#92;n");    <br />
    for(i=0;i&lt;rear_rq;i++)<br />
    {<br />
        if(j&lt;10)<br />
            printf("0%d",j);<br />
        else    <br />
            printf("%d",j);<br />
        for(k=0;k&lt;rt[i]-1;k++)<br />
                        printf("  ");<br />
                printf(" ");<br />
        j+=rt[i];<br />
    } <br />
}<br />
int main()<br />
{<br />
    float avg_wt=0,avg_tt=0;<br />
    int n=0,i,j,q;<br />
    FILE *fp;<br />
    fp=fopen("rr.txt","r");<br />
    fscanf(fp,"%d&#92;n",&amp;q);<br />
    do<br />
    {<br />
        fscanf(fp,"%s&#92;t%d&#92;t%d&#92;n",jq[n].jid,&amp;jq[n].at,&amp;jq[n].bt);<br />
        jq[n].wt=0;<br />
        jq[n].tt=0;<br />
        n++;<br />
    }<br />
    while(!feof(fp));<br />
    fclose(fp);<br />
    rear_jq=n;<br />
    rr_scheduling(q,n);<br />
<br />
    for(i=0;i&lt;n;i++)<br />
        jq[i].tt=jq[i].bt+jq[i].wt;<br />
    printf("&#92;nSCHEDULING&#92;n");<br />
    for(i=0;i&lt;rear_rq;i++)<br />
    {<br />
        if(i==rear_rq-1)<br />
            printf("%s",rq[i].jid);<br />
        else<br />
            printf("%s --&gt; ",rq[i].jid);<br />
    }   <br />
    gantt_chart(q);<br />
    printf("&#92;n&#92;nJID&#92;tAT&#92;tBT&#92;tWT&#92;tTT&#92;n");<br />
    for(i=0;i&lt;n;i++)<br />
    {<br />
        printf("%s&#92;t%d&#92;t%d&#92;t%d&#92;t%d&#92;n",jq[i].jid,jq[i].at,jq[i].bt,jq[i].wt,jq[i].tt);<br />
        avg_wt+=jq[i].wt;<br />
        avg_tt+=jq[i].tt;<br />
    }<br />
    printf("Average Waiting Time:: %.2f&#92;n",avg_wt/n);<br />
    printf("Average Turnaround Time:: %.2f&#92;n",avg_tt/n);<br />
    return 0;<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[در این پست شما می توانید  سورس الگوریتم زمانبندی RR به زبان C سی را از ما دریافت کنید.<br />
<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include&lt;stdio.h&gt;<br />
struct job<br />
{<br />
    char jid[10];<br />
    int at;<br />
    int bt;    <br />
    int wt;<br />
    int tt;<br />
}jq[10],rq[100];<br />
int front_jq=0,rear_jq=0;<br />
int front_rq=0,rear_rq=0;<br />
int rt[100];<br />
void gantt_chart(int q)<br />
{<br />
    int i,k,val,j=rq[0].at;<br />
    printf("&#92;n&#92;nGANTT CHART&#92;n");<br />
    for(i=0;i&lt;rear_rq;i++)<br />
    {<br />
        for(k=0;k&lt;rt[i];k++)<br />
            printf("__");<br />
        printf(" ");<br />
    }<br />
    printf("&#92;n");<br />
    for(i=0;i&lt;rear_rq;i++)<br />
    {<br />
        printf("%s",rq[i].jid);<br />
        for(k=0;k&lt;rt[i]-1;k++)<br />
                        printf("  ");<br />
                printf(" ");<br />
    }<br />
    printf("&#92;n");<br />
        for(i=0;i&lt;rear_rq;i++)<br />
        {<br />
                for(k=0;k&lt;rt[i];k++)<br />
                        printf("__");<br />
                printf(" ");<br />
        }<br />
        printf("&#92;n");    <br />
    for(i=0;i&lt;rear_rq;i++)<br />
    {<br />
        if(j&lt;10)<br />
            printf("0%d",j);<br />
        else    <br />
            printf("%d",j);<br />
        for(k=0;k&lt;rt[i]-1;k++)<br />
                        printf("  ");<br />
                printf(" ");<br />
        j+=rt[i];<br />
    } <br />
}<br />
int main()<br />
{<br />
    float avg_wt=0,avg_tt=0;<br />
    int n=0,i,j,q;<br />
    FILE *fp;<br />
    fp=fopen("rr.txt","r");<br />
    fscanf(fp,"%d&#92;n",&amp;q);<br />
    do<br />
    {<br />
        fscanf(fp,"%s&#92;t%d&#92;t%d&#92;n",jq[n].jid,&amp;jq[n].at,&amp;jq[n].bt);<br />
        jq[n].wt=0;<br />
        jq[n].tt=0;<br />
        n++;<br />
    }<br />
    while(!feof(fp));<br />
    fclose(fp);<br />
    rear_jq=n;<br />
    rr_scheduling(q,n);<br />
<br />
    for(i=0;i&lt;n;i++)<br />
        jq[i].tt=jq[i].bt+jq[i].wt;<br />
    printf("&#92;nSCHEDULING&#92;n");<br />
    for(i=0;i&lt;rear_rq;i++)<br />
    {<br />
        if(i==rear_rq-1)<br />
            printf("%s",rq[i].jid);<br />
        else<br />
            printf("%s --&gt; ",rq[i].jid);<br />
    }   <br />
    gantt_chart(q);<br />
    printf("&#92;n&#92;nJID&#92;tAT&#92;tBT&#92;tWT&#92;tTT&#92;n");<br />
    for(i=0;i&lt;n;i++)<br />
    {<br />
        printf("%s&#92;t%d&#92;t%d&#92;t%d&#92;t%d&#92;n",jq[i].jid,jq[i].at,jq[i].bt,jq[i].wt,jq[i].tt);<br />
        avg_wt+=jq[i].wt;<br />
        avg_tt+=jq[i].tt;<br />
    }<br />
    printf("Average Waiting Time:: %.2f&#92;n",avg_wt/n);<br />
    printf("Average Turnaround Time:: %.2f&#92;n",avg_tt/n);<br />
    return 0;<br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[برنامه نویسی شی گرا]]></title>
			<link>https://www.iranled.com/forum/thread-32156.html</link>
			<pubDate>Wed, 04 Dec 2019 09:44:40 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32156.html</guid>
			<description><![CDATA[<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">کلاس ها (Classes) و اشیا (Objects) در برنامه نویسی C++ </span></span></span><br />
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">اکنون وقت آن است که برنامه نویسی شی گرا را در عمل یاد گرفته و با اصول تعریف و بکارگیری آن بیشتر آشنا بشویم .</span></span></span><ul class="mycode_list"><li>کلاس ها (Classes) :<br />
</li>
</ul>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">کلاس ها همان نوع داده تجریدی یا انتزاعی (Abstract) هستند. به عبارتی یک نوع داده هستند که توسط برنامه نویس برای کار با داده ها و توابع و رویدادهای مختلفی تعریف می شوند. برای تعریف کلاس از الگوی زیر پیروی می کنیم :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>class className<br />
{<br />
    // Define private variables &amp; functions<br />
    public:<br />
        // Define public variables &amp; functions<br />
    private:<br />
        // Define private variables &amp; functions<br />
    protected:<br />
        // Define protected variables &amp; functions<br />
} objectsame;   // Declare Objects</code></div></div><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">همانطور که در بالا آمد، برای تعریف یک کلاس از کلمه کلیدی class استفاده می کنیم و نامی را در ادامه برای آن تعیین می کنیم .</span></span></span><br />
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">متغیرها و توابع مربوط به class در درون بلوک آکولاد قرار خواهند گرفت. فرض بر این است که دسترسی داده ها و توابع private است مگر اینکه نوع دسترسی صراحتا اعلام شود .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">داده ها و توابعی که طبق سطر 3 تعریف شوند بطور پیش فرض از سطح دسترسی private برخوردار خواهند بود زیرا چیزی برای آنها تعریف نشده است کما اینکه در سطر 6 این سطح دسترسی کاملا بیان شده است .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">سطح دسترسی private به این معناست که که داده ها و توابع تعریفی در این سطح، فقط در این class شناخته می شوند و در خارج از کلاس هیچگونه دسترسی به آنها وجود ندارد و تمامی عملیات روی آنها فقط باید در همان class تعریف شوند که همان مفهوم Encapsulation یا محرمانگی و بسته بندی را پیاده سازی می کنند .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطر 4 می توان داده ها و توابعی را که دارای سطح دسترسی public یا عمومی هستند را تعریف نمود و این بدین معناست که داده ها و توابع با این سطح دسترسی هم در داخل و هم در خارج از class قابل دسترسی هستند .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطر 8 نیز نوع دسترسی protected ذکر شده، یعنی کلاس هایی که از این کلاس به ارث برده می شنود می توانند به این قسم از داده ها و توابع دسترسی داشته باشند .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطر 10 و در خارج از محدوده کلاس نیز باید اشیائی را برای دسترسی به اعضای class خود ایجاد نماییم که به ذکر نام یا نام هایی که با کاما از هم جدا می شوند بسنده می کنیم. دقت داشته باشید که ایجاد شی از کلاس را می توان در درون تابع main نیز انجام داد .</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در ادامه شاهد تعریفی از یک کلاس خواهیم بود :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;iostream.h&gt;<br />
#include &lt;conio.h&gt;<br />
<br />
class CRectangle<br />
{<br />
        int x,y;<br />
    public:<br />
        void set_Values(int, int);<br />
        int area() { return (x*y);}<br />
} obj_1;<br />
<br />
void CRectangle :: set_Values(int a, int b)<br />
{<br />
    x = a;<br />
    y = b;<br />
}<br />
<br />
void main()<br />
{<br />
    obj_1.set_Values(3,4);<br />
    CRectangle obj_2;<br />
    obj_2.set_Values(5,6);<br />
    cout &lt;&lt; "area = " &lt;&lt; obj_1.area() &lt;&lt; "&#92;n";<br />
    cout &lt;&lt; "area = " &lt;&lt; obj_2.area();<br />
    getch();<br />
}</code></div></div><blockquote class="mycode_quote"><cite>نقل قول: </cite><div style="text-align: left;" class="mycode_align"><span style="font-size: x-small;" class="mycode_size"><span style="color: #9966cc;" class="mycode_color">area = 12</span></span></div>
<div style="text-align: left;" class="mycode_align"><span style="font-size: x-small;" class="mycode_size"><span style="color: #9966cc;" class="mycode_color">area = 30</span></span></div></blockquote>
<br />
<br />
<br />
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در کد C++ بالا شاهد تعریف جامعی از یک class هستیم .</span></span></span><br />
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">کلاس CRectangle در سطر 4 از برنامه تعریف شده و بدنه تعریف آن تا انتهای سطر 10 ادامه میابد. دو متغیر به نامهای x,y برای این کلاس تعریف شده است. چون هیچ سطح دسترسی برای آن دو مشخص نگردیده کامپایلر آنها را پیش فرض private تعیین می نماید یعنی فقط اعضای این class می توانند به آن دو دسترسی داشته باشند .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">دو تابع با نامهای set_Values() و area() برای این class تعریف شده که یکی وظیفه دریافت مقادیر و دیگری محاسبه مساحت را بر عهده دارند .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">عملکرد تابع set_Values() در بیرون از class و از سطر 12 الی 16 تعریف شده است، اما دستورات تایع area() در درون خود class بیان شده است که از هر یک از این دو روش برای تعریف دستورات و عملکرد توابع می شود استفاده نمود .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font"><img src="http://www.bekaran.com/Images/star_on.gif" alt="[تصویر:  star_on.gif]" class="mycode_img" /> نکته) در سطر 12 به نحوه تعریف تابع در خارج از class دقت کنید که ابتدا نوع بازگشتی تابع وسپس نام class و بعد از آن از علامت :: و در نهایت نام تابع و آرگومانهای آن را بیان می کنیم .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطر 9 هم چنانچه مشاهده می کنید در همان محل تعریف تابع area() ، دستورات را هم برای تابع نوشته ایم .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">برای کلاس CRectangle دو شی یا object ایجاد شده که یکی در سطر 10 و دقیقا بعد از تعریف class، و دیگری در تابع main در سطر 21. دقت کنید که برای ایجاد شی از کلاس در درون بدنه برنامه باید ابتدا نام کلاس و سپس نام شی را بیان نمایید .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">هیچ یک از این دو شی ربطی به هم ندارند و هر یک به طور جداگانه از اعضای کلاس استفاده می کنند .</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">برای دسترسی به اعضای کلاس با استفاده از شی، ابتدا نام کلاس سپس نقطه و در انتها نام عضو که می تواند یک متغیر یا یک تابع یا یک رخداد باشد را ذکر می کنیم، دقت داشته باشید که اگر عضو مورد نظر دارای سطح دسترسی private باشد نمی توان به آن دسترسی داشت زیرا فقط در درون کلاس شناخته شده است و در بیرون از کلاس خود حتی با استفاده از ایجاد شی هم نمیتوان با آنها کار کرد. به کد زیر توجه کنید :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>class CRectangle<br />
{<br />
     <br />
        int x;<br />
    public:<br />
        void f1();<br />
        void f2() ;<br />
        int y;<br />
    private:<br />
        void f3();<br />
        int z;<br />
        <br />
} obj_1;<br />
<br />
void main()<br />
{<br />
    obj_1.x;      // ERROR - x is private<br />
    obj_1.y;      // OK    - y is public<br />
    obj_1.f1();   // OK    - f1 is public<br />
    obj_1.f2();   // OK    - f2 is public<br />
    obj_1.f3();   // ERROR - f3 is private<br />
    obj_1.z;      // ERROR - z is private<br />
}</code></div></div><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">فکر کنم که توضیحات در کد گویای همه چیز باشد .</span></span></span><br />
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font"><img src="http://www.bekaran.com/Images/bulb.jpg" alt="[تصویر:  bulb.jpg]" class="mycode_img" /> تابع سازنده کلاس (Constructor) :</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">همانطور که مشاهده کردید در کلاس بالا تابع set_Values() وظیفه مقدار دادن به متغیر ها که همان عرض و طول یک چهار ضلعی هستند را بر عهده داشت. اما در کلاس تابعی بنام سازنده کلاس وجود دارد که کار مقداردهی اولیه به متغیرهای لازم را انجام می دهد .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">تابع سازنده، تابع عضو ویژه ای است هم نام با نام کلاس که نوع بازگشتی ندارد و حتی از نوع void هم نیست اما می تواند پارامتر ورودی داشته باشد و دارای دسترسی public می باشد .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">هنگامی که از کلاس مربوطه شی ایجاد می شود، تابع سازنده به متغیرهای مربوطه مقدار تعیین شده و فضایی در حافظه را اختصاص می دهد. این کار باعث می شود که از مقداردهی متغیرها و تهی نبودن آنها اطمینان حاصل شود .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font"><img src="http://www.bekaran.com/Images/bulb.jpg" alt="[تصویر:  bulb.jpg]" class="mycode_img" /> تابع مخرب کلاس (Destructor) :</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">وقتی که کار با شی مورد نظر تمام شد بهتر است که فضایی را که در حافظه به متغیرهای عضو کلاس توسط تابع سازنده یا مولد داده شده است را آزاد کنیم که اینکار را با استفاده از تابع عضو ویژه دیگری بنام تابع مخرب انجام می دهیم. این تابع نیز دارای ویژگیهای تعریفی تابع سازنده است با این تفاوت که با علامت ~ در ابتدای آن تعریف می گردد .</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در ادامه به نحوه تعریف و استفاده از توابع عضو سازنده و مخرب در کلاس می پردازیم :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;iostream.h&gt;<br />
#include &lt;conio.h&gt;<br />
<br />
class CRectangle<br />
{<br />
        int *width, *heigth;<br />
    public:<br />
        CRectangle(int, int);<br />
        ~CRectangle();<br />
        int area() { return (*width * *heigth);}<br />
};<br />
<br />
CRectangle :: CRectangle(int a, int b)<br />
{<br />
    width = new int;<br />
    heigth = new int;<br />
    *width = a;<br />
    *heigth = b;<br />
}<br />
<br />
CRectangle :: ~CRectangle()<br />
{<br />
    delete width;<br />
    delete heigth;<br />
}<br />
<br />
void main()<br />
{<br />
    CRectangle rect1(3,4), rect2(5,6);<br />
    cout &lt;&lt; "rect1 area = " &lt;&lt; rect1.area() &lt;&lt; "&#92;n";<br />
    cout &lt;&lt; "rect2 area = " &lt;&lt; rect2.area();<br />
    getch();<br />
}</code></div></div><blockquote class="mycode_quote"><cite>نقل قول: </cite><div style="text-align: left;" class="mycode_align"><span style="color: #cccccc;" class="mycode_color"><span style="font-size: x-small;" class="mycode_size">r</span></span><span style="color: #9999cc;" class="mycode_color"><span style="font-size: x-small;" class="mycode_size">ect1 area = 12</span></span></div>
<div style="text-align: left;" class="mycode_align"><span style="color: #9999cc;" class="mycode_color">rect2 area = 30</span></div></blockquote>
<br />
<br />
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">خوب، تابع مولد (سازنده) کلاس در سطر 8 از برنامه و تابع مخرب کلاس هم در سطر بعدی تعریف شده اند. سطرهای 13 تا 25 نحوه رفتار این دو تابع عضو کلاس را بیان می کنند. دقت فرمایید که دو متغیر عضو کلاس از نوع اشاره گر تعریف شده اند، پس برای کار با آنها در تابع سازنده کلاس باید متغیرهایی از نوع اشاره گر داشته باشیم که این کار را در سطرهای 15و16 انجام داده ایم .</span></span></span><br />
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">با استفاده از کلمه کلیدی new می توان یک object یا همان شی را تعریف نماییم. یک شی این قابلیت را دارد که هر نوعی را بگیرد (این را از مفهوم شی گرایی درک کردیم!). پس بعد از تعریف شی های width, height آنها را اشاره گر در نظر میگیریم (سطرهای 17و18) .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">کلمه کلیدی delete که در سطرهای 23و24 بکار رفته است دستوری است برای آزادسازی حافظه اشغالی توسط هر شی یا متغیر ، ... در برنامه .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">ادامه برنامه کاملا واضح است .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font"><img src="http://www.bekaran.com/Images/bulb.jpg" alt="[تصویر:  bulb.jpg]" class="mycode_img" /> سربارگذاری توابع عضو کلاس در برنامه نویسی C++ (Overloading Constructors) :</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">مانند سربارگذاری توابع، سازنده های کلاس را نیز میتوان با نامهای مشابه ولی با آرگومانهای متفاوت سربار نمود که در زیر نمونه ای را به همراه هم خواهیم دید :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;iostream.h&gt;<br />
#include &lt;conio.h&gt;<br />
<br />
class CRectangle<br />
{<br />
        int width,heigth;<br />
    public:<br />
        CRectangle();<br />
        CRectangle(int, int);<br />
        int area(void) { return (width*heigth);}<br />
};<br />
<br />
CRectangle :: CRectangle()<br />
{<br />
    width = 5;<br />
    heigth = 5;<br />
}<br />
<br />
CRectangle :: CRectangle(int a, int b)<br />
{<br />
    width = a;<br />
    heigth = b;<br />
}<br />
<br />
void main()<br />
{<br />
    CRectangle rect1(3,4);<br />
    CRectangle rect2;<br />
    cout &lt;&lt; "rect1 area = " &lt;&lt; rect1.area() &lt;&lt; "&#92;n";<br />
    cout &lt;&lt; "rect2 area = " &lt;&lt; rect2.area();<br />
    getch();<br />
}</code></div></div><blockquote class="mycode_quote"><cite>نقل قول: </cite><div style="text-align: left;" class="mycode_align"><span style="color: #cc66ff;" class="mycode_color"><span style="font-size: x-small;" class="mycode_size">rect1 area = 12</span></span></div>
<div style="text-align: left;" class="mycode_align"><span style="color: #cc66ff;" class="mycode_color">r</span><span style="color: #cc66ff;" class="mycode_color">ect2</span><span style="color: #cc66ff;" class="mycode_color"> area = 25</span></div></blockquote>
<br />
<br />
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">نکته) به سطر 28 توجه نمایید که دیگر از پرانتز باز و بسته استفاده نمی کنیم و در صورت استفاده، کامپایلر از برنامه خطا خواهد گرفت (برخلاف سربارگذاری در توابع) .</span></span></span><br />
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font"><img src="http://www.bekaran.com/Images/bulb.jpg" alt="[تصویر:  bulb.jpg]" class="mycode_img" /> تابع سازنده پیش فرض (Default constructor) :</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">هنگامی که برای یک کلاس تابع سازنده ای تعریف نکنیم، کامپایلر بطور پیش فرض، فرض می کند که کلاس سازنده ای دارد اما بدون پارامتر. به همین دلیل است که وقتی کلاسی بدون تابع سازنده را تعریف می کنیم می توانیم از آن یک شی ایجاد کنیم که کار تعریف تابع سازنده را خود کامپایلر انجام میدهد .</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>class CExample<br />
{<br />
    public:<br />
        int a, b, c;<br />
        void multiply (int n, int m) { a=n; b=m; c=a*b; }<br />
};<br />
<br />
CExample ex;</code></div></div><div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">همانطور که در کد برنامه نویسی C++ بالا می بینیم برای کلاس هیچگونه تابع سازنده ای تعریف نشده اما میتوان از کلاس CExample یک شی بنام ex ایجاد نمود و در طول برنامه از آن استفاده کرد و تنها دلیل این موضوع فرض کامپایلر بر وجود یک تابع سازنده بدون پارامتر در کلاس است .</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">اما اگر خود برای کلاس تابع سازنده ای را تعریف کنیم دیگر کامپایلر فرضی را در نظر نگرفته و بر مبنای تابع سازنده تعریفی ما عمل خواهد کرد مانند کد زیر :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>class CExample<br />
{<br />
    public:<br />
        int a, b, c;<br />
        CExample (int n, int m) { a=n; b=m; };<br />
        void multiply () { c=a*b; };<br />
};<br />
<br />
CExample ex;         //نادرست<br />
CExample ex(2,8);    //درست</code></div></div><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در کد برنامه نویسی C++ بالا ما برای کلاس CExample که دارای یک تابع سازنده تعریفی توسط ما با 2 پارامتر ورودی است 2 شی تعریف کرده ایم. دستور ایجاد شی در سطر 9 نادرست است زیرا تابع سازنده این کلاس دارای 2 پارامتر است که در سطر 5 تعریف شده و در حین ایجاد شی از کلاس باید مقداردهی شوند و دیگر کامپایلر مبنا را فرض خود در نظر نمی گیرد و بر اساس کد ما عمل می نماید .</span></span></span><br />
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font"><img src="http://www.bekaran.com/Images/bulb.jpg" alt="[تصویر:  bulb.jpg]" class="mycode_img" /> اشاره گر به کلاس (Pointers to Classes) :</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">اشاره گرها همانطور که می توانند به متغیرها اشاره کنند، می توانند به اشیاء یک کلاس نیز اشاره کنند و چون شی نمونه ای از کلاس است پس به کلاس اشاره می کنند .</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در حالت ساده برای دسترسی به اعضای کلاس توسط شی تعریفی، از نقطه (.) استفاده کردیم. اما در اشاره گر به شی باید از ترکیب 2 کاراکتر خط و بزرگتر (&lt;-) استفاده کنیم. با هم مثالی کامل از اشاره گر به شی یا همان کلاس را بررسی می کنیم :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;iostream.h&gt;<br />
#include &lt;conio.h&gt;<br />
<br />
class CRectangle<br />
{<br />
    int width, height;<br />
  public:<br />
    void set_values (int, int);<br />
    int area (void) {return (width * height);}<br />
};<br />
<br />
void CRectangle::set_values (int a, int b)<br />
{<br />
  width = a;<br />
  height = b;<br />
}<br />
<br />
int main()<br />
{<br />
  CRectangle a, *b, *c;<br />
  CRectangle * d = new CRectangle[2];<br />
  b= new CRectangle;<br />
  c= &amp;a;<br />
  a.set_values (1,2);<br />
  b-&gt;set_values (3,4);<br />
  d-&gt;set_values (5,6);<br />
  d[1].set_values (7,8);<br />
  cout &lt;&lt; "a area: " &lt;&lt; a.area() &lt;&lt; endl;<br />
  cout &lt;&lt; "*b area: " &lt;&lt; b-&gt;area() &lt;&lt; endl;<br />
  cout &lt;&lt; "*c area: " &lt;&lt; c-&gt;area() &lt;&lt; endl;<br />
  cout &lt;&lt; "d[0] area: " &lt;&lt; d[0].area() &lt;&lt; endl;<br />
  cout &lt;&lt; "d[1] area: " &lt;&lt; d[1].area() &lt;&lt; endl;<br />
  delete[] d;<br />
  delete b;<br />
  return 0;<br />
}</code></div></div><blockquote class="mycode_quote"><cite>نقل قول: </cite><div style="text-align: left;" class="mycode_align"><span style="color: #9933cc;" class="mycode_color"><span style="font-size: x-small;" class="mycode_size">a area</span><span style="font-size: x-small;" class="mycode_size">: 2</span></span></div>
<div style="text-align: left;" class="mycode_align"><span style="font-size: x-small;" class="mycode_size"><span style="color: #9933cc;" class="mycode_color">*b area: 12</span></span></div>
<div style="text-align: left;" class="mycode_align">*c area: 2</div>
<br />
<div style="text-align: left;" class="mycode_align">d[0] area: 30</div>
<br />
<div style="text-align: left;" class="mycode_align">d[1] area: 56</div></blockquote>
<br />
<div style="text-align: left;" class="mycode_align"><div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">همانطور که می بینید در قطعه کد برنامه نویسی C++ در خطوط 4 الی 10 تابعی با نام CRectangle بهمراه متغیرها و توابع عضوش تعریف شده است. تعریف تابع عضو کلاس در خطوط 12 الی 16 صورت گرفته و بدنه اصلی برنامه از سطر 18 شروع می شود .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطر 20 ما 3 شی از کلاس ایجاد کرده ایم که شی a معمولی و اشیاء b,c از نوع اشاره گر میباشند. در سطر 21 شیئی از نوع اشاره گر بنام d تعریف شده که به دو شی از کلاس CRectangle که بصورت آرایه در نظر گرفته اشاره می نماید. در واقع d شی اشاره گری است که به محل قرارگیری دو شی از کلاس اشاره می کند. و در سطر 22 نیز از کلاس یک شی ایجاد کردیم که به آن با استفاده از کلمه کلیدی new فضایی در حافظه اختصاص داده شده است .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطر 23 شی c حاوی آدرس شی a است پس می توان گفت که هر تغییری در a در c هم اعمال خواهد شد. در سطر 24 شی a از تابع عضو کلاس بنام set_values استفاده می کند و پارامترهای 1و2 را به آن می دهد. چون a یک شی معمولی از کلاس است پس برای بکارگیری آن از نقطه استفاده کردیم. اما در سطرهای 25 و26 چون از اشیائی که اشاره گر هستند استفاده کرده ایم پس با استفاده از عملگر مخصوص (-&gt;) آنها را به تابع عضو کلاس ربط می دهیم .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">اگر دقت کنید می بینید که در سطر 21 ما شی اشاره گر d را بعنوان آرایه ای با طول 2 در نظر گرفته ایم پس دستور سطر 26 فقط به آدرس آن آرایه یعنی اولین خانه اشاره می کند. اما در سطر 27 ما دومین عضو آرایه که خود یک شی از کلاس است را به تابع عضو ربط دادیم به همین علت آنرا دیگر اشاره گر در نظر نمیگیریم و مانند یک شی معمولی از نقطه برای استفاده از کلاس عضو استفاده می کنیم .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطرهای 28 الی 32 ما با استفاده از دستور خروجی cout نتایج مورد نظر را در خروجی نمایش می دهیم و در انتها باید اشیائی را که با استفاده از کلمه کلیدی new ایجاد کرده ایم و به آنها در حافظه فضا اختصاص دادیم را با استفاده از کلمه کلیدی delete پاک کرده و فضاهای آنها را به حافظه برگردانیم .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">عزیزان باید بادقت کد را مورد مطالعه قرار دهند و مفاهیم فصول قبل مثل اشاره گرها، توابع، آرایه ها و دیگر موارد را درک کرده باشند تا به راحتی قطعه برنامه C++ بالا را تجزیه و تحلیل نمایند .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"> </div>
</div>]]></description>
			<content:encoded><![CDATA[<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">کلاس ها (Classes) و اشیا (Objects) در برنامه نویسی C++ </span></span></span><br />
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">اکنون وقت آن است که برنامه نویسی شی گرا را در عمل یاد گرفته و با اصول تعریف و بکارگیری آن بیشتر آشنا بشویم .</span></span></span><ul class="mycode_list"><li>کلاس ها (Classes) :<br />
</li>
</ul>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">کلاس ها همان نوع داده تجریدی یا انتزاعی (Abstract) هستند. به عبارتی یک نوع داده هستند که توسط برنامه نویس برای کار با داده ها و توابع و رویدادهای مختلفی تعریف می شوند. برای تعریف کلاس از الگوی زیر پیروی می کنیم :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>class className<br />
{<br />
    // Define private variables &amp; functions<br />
    public:<br />
        // Define public variables &amp; functions<br />
    private:<br />
        // Define private variables &amp; functions<br />
    protected:<br />
        // Define protected variables &amp; functions<br />
} objectsame;   // Declare Objects</code></div></div><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">همانطور که در بالا آمد، برای تعریف یک کلاس از کلمه کلیدی class استفاده می کنیم و نامی را در ادامه برای آن تعیین می کنیم .</span></span></span><br />
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">متغیرها و توابع مربوط به class در درون بلوک آکولاد قرار خواهند گرفت. فرض بر این است که دسترسی داده ها و توابع private است مگر اینکه نوع دسترسی صراحتا اعلام شود .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">داده ها و توابعی که طبق سطر 3 تعریف شوند بطور پیش فرض از سطح دسترسی private برخوردار خواهند بود زیرا چیزی برای آنها تعریف نشده است کما اینکه در سطر 6 این سطح دسترسی کاملا بیان شده است .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">سطح دسترسی private به این معناست که که داده ها و توابع تعریفی در این سطح، فقط در این class شناخته می شوند و در خارج از کلاس هیچگونه دسترسی به آنها وجود ندارد و تمامی عملیات روی آنها فقط باید در همان class تعریف شوند که همان مفهوم Encapsulation یا محرمانگی و بسته بندی را پیاده سازی می کنند .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطر 4 می توان داده ها و توابعی را که دارای سطح دسترسی public یا عمومی هستند را تعریف نمود و این بدین معناست که داده ها و توابع با این سطح دسترسی هم در داخل و هم در خارج از class قابل دسترسی هستند .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطر 8 نیز نوع دسترسی protected ذکر شده، یعنی کلاس هایی که از این کلاس به ارث برده می شنود می توانند به این قسم از داده ها و توابع دسترسی داشته باشند .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطر 10 و در خارج از محدوده کلاس نیز باید اشیائی را برای دسترسی به اعضای class خود ایجاد نماییم که به ذکر نام یا نام هایی که با کاما از هم جدا می شوند بسنده می کنیم. دقت داشته باشید که ایجاد شی از کلاس را می توان در درون تابع main نیز انجام داد .</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در ادامه شاهد تعریفی از یک کلاس خواهیم بود :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;iostream.h&gt;<br />
#include &lt;conio.h&gt;<br />
<br />
class CRectangle<br />
{<br />
        int x,y;<br />
    public:<br />
        void set_Values(int, int);<br />
        int area() { return (x*y);}<br />
} obj_1;<br />
<br />
void CRectangle :: set_Values(int a, int b)<br />
{<br />
    x = a;<br />
    y = b;<br />
}<br />
<br />
void main()<br />
{<br />
    obj_1.set_Values(3,4);<br />
    CRectangle obj_2;<br />
    obj_2.set_Values(5,6);<br />
    cout &lt;&lt; "area = " &lt;&lt; obj_1.area() &lt;&lt; "&#92;n";<br />
    cout &lt;&lt; "area = " &lt;&lt; obj_2.area();<br />
    getch();<br />
}</code></div></div><blockquote class="mycode_quote"><cite>نقل قول: </cite><div style="text-align: left;" class="mycode_align"><span style="font-size: x-small;" class="mycode_size"><span style="color: #9966cc;" class="mycode_color">area = 12</span></span></div>
<div style="text-align: left;" class="mycode_align"><span style="font-size: x-small;" class="mycode_size"><span style="color: #9966cc;" class="mycode_color">area = 30</span></span></div></blockquote>
<br />
<br />
<br />
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در کد C++ بالا شاهد تعریف جامعی از یک class هستیم .</span></span></span><br />
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">کلاس CRectangle در سطر 4 از برنامه تعریف شده و بدنه تعریف آن تا انتهای سطر 10 ادامه میابد. دو متغیر به نامهای x,y برای این کلاس تعریف شده است. چون هیچ سطح دسترسی برای آن دو مشخص نگردیده کامپایلر آنها را پیش فرض private تعیین می نماید یعنی فقط اعضای این class می توانند به آن دو دسترسی داشته باشند .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">دو تابع با نامهای set_Values() و area() برای این class تعریف شده که یکی وظیفه دریافت مقادیر و دیگری محاسبه مساحت را بر عهده دارند .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">عملکرد تابع set_Values() در بیرون از class و از سطر 12 الی 16 تعریف شده است، اما دستورات تایع area() در درون خود class بیان شده است که از هر یک از این دو روش برای تعریف دستورات و عملکرد توابع می شود استفاده نمود .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font"><img src="http://www.bekaran.com/Images/star_on.gif" alt="[تصویر:  star_on.gif]" class="mycode_img" /> نکته) در سطر 12 به نحوه تعریف تابع در خارج از class دقت کنید که ابتدا نوع بازگشتی تابع وسپس نام class و بعد از آن از علامت :: و در نهایت نام تابع و آرگومانهای آن را بیان می کنیم .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطر 9 هم چنانچه مشاهده می کنید در همان محل تعریف تابع area() ، دستورات را هم برای تابع نوشته ایم .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">برای کلاس CRectangle دو شی یا object ایجاد شده که یکی در سطر 10 و دقیقا بعد از تعریف class، و دیگری در تابع main در سطر 21. دقت کنید که برای ایجاد شی از کلاس در درون بدنه برنامه باید ابتدا نام کلاس و سپس نام شی را بیان نمایید .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">هیچ یک از این دو شی ربطی به هم ندارند و هر یک به طور جداگانه از اعضای کلاس استفاده می کنند .</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">برای دسترسی به اعضای کلاس با استفاده از شی، ابتدا نام کلاس سپس نقطه و در انتها نام عضو که می تواند یک متغیر یا یک تابع یا یک رخداد باشد را ذکر می کنیم، دقت داشته باشید که اگر عضو مورد نظر دارای سطح دسترسی private باشد نمی توان به آن دسترسی داشت زیرا فقط در درون کلاس شناخته شده است و در بیرون از کلاس خود حتی با استفاده از ایجاد شی هم نمیتوان با آنها کار کرد. به کد زیر توجه کنید :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>class CRectangle<br />
{<br />
     <br />
        int x;<br />
    public:<br />
        void f1();<br />
        void f2() ;<br />
        int y;<br />
    private:<br />
        void f3();<br />
        int z;<br />
        <br />
} obj_1;<br />
<br />
void main()<br />
{<br />
    obj_1.x;      // ERROR - x is private<br />
    obj_1.y;      // OK    - y is public<br />
    obj_1.f1();   // OK    - f1 is public<br />
    obj_1.f2();   // OK    - f2 is public<br />
    obj_1.f3();   // ERROR - f3 is private<br />
    obj_1.z;      // ERROR - z is private<br />
}</code></div></div><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">فکر کنم که توضیحات در کد گویای همه چیز باشد .</span></span></span><br />
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font"><img src="http://www.bekaran.com/Images/bulb.jpg" alt="[تصویر:  bulb.jpg]" class="mycode_img" /> تابع سازنده کلاس (Constructor) :</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">همانطور که مشاهده کردید در کلاس بالا تابع set_Values() وظیفه مقدار دادن به متغیر ها که همان عرض و طول یک چهار ضلعی هستند را بر عهده داشت. اما در کلاس تابعی بنام سازنده کلاس وجود دارد که کار مقداردهی اولیه به متغیرهای لازم را انجام می دهد .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">تابع سازنده، تابع عضو ویژه ای است هم نام با نام کلاس که نوع بازگشتی ندارد و حتی از نوع void هم نیست اما می تواند پارامتر ورودی داشته باشد و دارای دسترسی public می باشد .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">هنگامی که از کلاس مربوطه شی ایجاد می شود، تابع سازنده به متغیرهای مربوطه مقدار تعیین شده و فضایی در حافظه را اختصاص می دهد. این کار باعث می شود که از مقداردهی متغیرها و تهی نبودن آنها اطمینان حاصل شود .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font"><img src="http://www.bekaran.com/Images/bulb.jpg" alt="[تصویر:  bulb.jpg]" class="mycode_img" /> تابع مخرب کلاس (Destructor) :</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">وقتی که کار با شی مورد نظر تمام شد بهتر است که فضایی را که در حافظه به متغیرهای عضو کلاس توسط تابع سازنده یا مولد داده شده است را آزاد کنیم که اینکار را با استفاده از تابع عضو ویژه دیگری بنام تابع مخرب انجام می دهیم. این تابع نیز دارای ویژگیهای تعریفی تابع سازنده است با این تفاوت که با علامت ~ در ابتدای آن تعریف می گردد .</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در ادامه به نحوه تعریف و استفاده از توابع عضو سازنده و مخرب در کلاس می پردازیم :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;iostream.h&gt;<br />
#include &lt;conio.h&gt;<br />
<br />
class CRectangle<br />
{<br />
        int *width, *heigth;<br />
    public:<br />
        CRectangle(int, int);<br />
        ~CRectangle();<br />
        int area() { return (*width * *heigth);}<br />
};<br />
<br />
CRectangle :: CRectangle(int a, int b)<br />
{<br />
    width = new int;<br />
    heigth = new int;<br />
    *width = a;<br />
    *heigth = b;<br />
}<br />
<br />
CRectangle :: ~CRectangle()<br />
{<br />
    delete width;<br />
    delete heigth;<br />
}<br />
<br />
void main()<br />
{<br />
    CRectangle rect1(3,4), rect2(5,6);<br />
    cout &lt;&lt; "rect1 area = " &lt;&lt; rect1.area() &lt;&lt; "&#92;n";<br />
    cout &lt;&lt; "rect2 area = " &lt;&lt; rect2.area();<br />
    getch();<br />
}</code></div></div><blockquote class="mycode_quote"><cite>نقل قول: </cite><div style="text-align: left;" class="mycode_align"><span style="color: #cccccc;" class="mycode_color"><span style="font-size: x-small;" class="mycode_size">r</span></span><span style="color: #9999cc;" class="mycode_color"><span style="font-size: x-small;" class="mycode_size">ect1 area = 12</span></span></div>
<div style="text-align: left;" class="mycode_align"><span style="color: #9999cc;" class="mycode_color">rect2 area = 30</span></div></blockquote>
<br />
<br />
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">خوب، تابع مولد (سازنده) کلاس در سطر 8 از برنامه و تابع مخرب کلاس هم در سطر بعدی تعریف شده اند. سطرهای 13 تا 25 نحوه رفتار این دو تابع عضو کلاس را بیان می کنند. دقت فرمایید که دو متغیر عضو کلاس از نوع اشاره گر تعریف شده اند، پس برای کار با آنها در تابع سازنده کلاس باید متغیرهایی از نوع اشاره گر داشته باشیم که این کار را در سطرهای 15و16 انجام داده ایم .</span></span></span><br />
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">با استفاده از کلمه کلیدی new می توان یک object یا همان شی را تعریف نماییم. یک شی این قابلیت را دارد که هر نوعی را بگیرد (این را از مفهوم شی گرایی درک کردیم!). پس بعد از تعریف شی های width, height آنها را اشاره گر در نظر میگیریم (سطرهای 17و18) .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">کلمه کلیدی delete که در سطرهای 23و24 بکار رفته است دستوری است برای آزادسازی حافظه اشغالی توسط هر شی یا متغیر ، ... در برنامه .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">ادامه برنامه کاملا واضح است .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font"><img src="http://www.bekaran.com/Images/bulb.jpg" alt="[تصویر:  bulb.jpg]" class="mycode_img" /> سربارگذاری توابع عضو کلاس در برنامه نویسی C++ (Overloading Constructors) :</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">مانند سربارگذاری توابع، سازنده های کلاس را نیز میتوان با نامهای مشابه ولی با آرگومانهای متفاوت سربار نمود که در زیر نمونه ای را به همراه هم خواهیم دید :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;iostream.h&gt;<br />
#include &lt;conio.h&gt;<br />
<br />
class CRectangle<br />
{<br />
        int width,heigth;<br />
    public:<br />
        CRectangle();<br />
        CRectangle(int, int);<br />
        int area(void) { return (width*heigth);}<br />
};<br />
<br />
CRectangle :: CRectangle()<br />
{<br />
    width = 5;<br />
    heigth = 5;<br />
}<br />
<br />
CRectangle :: CRectangle(int a, int b)<br />
{<br />
    width = a;<br />
    heigth = b;<br />
}<br />
<br />
void main()<br />
{<br />
    CRectangle rect1(3,4);<br />
    CRectangle rect2;<br />
    cout &lt;&lt; "rect1 area = " &lt;&lt; rect1.area() &lt;&lt; "&#92;n";<br />
    cout &lt;&lt; "rect2 area = " &lt;&lt; rect2.area();<br />
    getch();<br />
}</code></div></div><blockquote class="mycode_quote"><cite>نقل قول: </cite><div style="text-align: left;" class="mycode_align"><span style="color: #cc66ff;" class="mycode_color"><span style="font-size: x-small;" class="mycode_size">rect1 area = 12</span></span></div>
<div style="text-align: left;" class="mycode_align"><span style="color: #cc66ff;" class="mycode_color">r</span><span style="color: #cc66ff;" class="mycode_color">ect2</span><span style="color: #cc66ff;" class="mycode_color"> area = 25</span></div></blockquote>
<br />
<br />
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">نکته) به سطر 28 توجه نمایید که دیگر از پرانتز باز و بسته استفاده نمی کنیم و در صورت استفاده، کامپایلر از برنامه خطا خواهد گرفت (برخلاف سربارگذاری در توابع) .</span></span></span><br />
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font"><img src="http://www.bekaran.com/Images/bulb.jpg" alt="[تصویر:  bulb.jpg]" class="mycode_img" /> تابع سازنده پیش فرض (Default constructor) :</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">هنگامی که برای یک کلاس تابع سازنده ای تعریف نکنیم، کامپایلر بطور پیش فرض، فرض می کند که کلاس سازنده ای دارد اما بدون پارامتر. به همین دلیل است که وقتی کلاسی بدون تابع سازنده را تعریف می کنیم می توانیم از آن یک شی ایجاد کنیم که کار تعریف تابع سازنده را خود کامپایلر انجام میدهد .</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>class CExample<br />
{<br />
    public:<br />
        int a, b, c;<br />
        void multiply (int n, int m) { a=n; b=m; c=a*b; }<br />
};<br />
<br />
CExample ex;</code></div></div><div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">همانطور که در کد برنامه نویسی C++ بالا می بینیم برای کلاس هیچگونه تابع سازنده ای تعریف نشده اما میتوان از کلاس CExample یک شی بنام ex ایجاد نمود و در طول برنامه از آن استفاده کرد و تنها دلیل این موضوع فرض کامپایلر بر وجود یک تابع سازنده بدون پارامتر در کلاس است .</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">اما اگر خود برای کلاس تابع سازنده ای را تعریف کنیم دیگر کامپایلر فرضی را در نظر نگرفته و بر مبنای تابع سازنده تعریفی ما عمل خواهد کرد مانند کد زیر :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>class CExample<br />
{<br />
    public:<br />
        int a, b, c;<br />
        CExample (int n, int m) { a=n; b=m; };<br />
        void multiply () { c=a*b; };<br />
};<br />
<br />
CExample ex;         //نادرست<br />
CExample ex(2,8);    //درست</code></div></div><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در کد برنامه نویسی C++ بالا ما برای کلاس CExample که دارای یک تابع سازنده تعریفی توسط ما با 2 پارامتر ورودی است 2 شی تعریف کرده ایم. دستور ایجاد شی در سطر 9 نادرست است زیرا تابع سازنده این کلاس دارای 2 پارامتر است که در سطر 5 تعریف شده و در حین ایجاد شی از کلاس باید مقداردهی شوند و دیگر کامپایلر مبنا را فرض خود در نظر نمی گیرد و بر اساس کد ما عمل می نماید .</span></span></span><br />
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font"><img src="http://www.bekaran.com/Images/bulb.jpg" alt="[تصویر:  bulb.jpg]" class="mycode_img" /> اشاره گر به کلاس (Pointers to Classes) :</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">اشاره گرها همانطور که می توانند به متغیرها اشاره کنند، می توانند به اشیاء یک کلاس نیز اشاره کنند و چون شی نمونه ای از کلاس است پس به کلاس اشاره می کنند .</span></span></span></div>
<span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در حالت ساده برای دسترسی به اعضای کلاس توسط شی تعریفی، از نقطه (.) استفاده کردیم. اما در اشاره گر به شی باید از ترکیب 2 کاراکتر خط و بزرگتر (&lt;-) استفاده کنیم. با هم مثالی کامل از اشاره گر به شی یا همان کلاس را بررسی می کنیم :</span></span></span><br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;iostream.h&gt;<br />
#include &lt;conio.h&gt;<br />
<br />
class CRectangle<br />
{<br />
    int width, height;<br />
  public:<br />
    void set_values (int, int);<br />
    int area (void) {return (width * height);}<br />
};<br />
<br />
void CRectangle::set_values (int a, int b)<br />
{<br />
  width = a;<br />
  height = b;<br />
}<br />
<br />
int main()<br />
{<br />
  CRectangle a, *b, *c;<br />
  CRectangle * d = new CRectangle[2];<br />
  b= new CRectangle;<br />
  c= &amp;a;<br />
  a.set_values (1,2);<br />
  b-&gt;set_values (3,4);<br />
  d-&gt;set_values (5,6);<br />
  d[1].set_values (7,8);<br />
  cout &lt;&lt; "a area: " &lt;&lt; a.area() &lt;&lt; endl;<br />
  cout &lt;&lt; "*b area: " &lt;&lt; b-&gt;area() &lt;&lt; endl;<br />
  cout &lt;&lt; "*c area: " &lt;&lt; c-&gt;area() &lt;&lt; endl;<br />
  cout &lt;&lt; "d[0] area: " &lt;&lt; d[0].area() &lt;&lt; endl;<br />
  cout &lt;&lt; "d[1] area: " &lt;&lt; d[1].area() &lt;&lt; endl;<br />
  delete[] d;<br />
  delete b;<br />
  return 0;<br />
}</code></div></div><blockquote class="mycode_quote"><cite>نقل قول: </cite><div style="text-align: left;" class="mycode_align"><span style="color: #9933cc;" class="mycode_color"><span style="font-size: x-small;" class="mycode_size">a area</span><span style="font-size: x-small;" class="mycode_size">: 2</span></span></div>
<div style="text-align: left;" class="mycode_align"><span style="font-size: x-small;" class="mycode_size"><span style="color: #9933cc;" class="mycode_color">*b area: 12</span></span></div>
<div style="text-align: left;" class="mycode_align">*c area: 2</div>
<br />
<div style="text-align: left;" class="mycode_align">d[0] area: 30</div>
<br />
<div style="text-align: left;" class="mycode_align">d[1] area: 56</div></blockquote>
<br />
<div style="text-align: left;" class="mycode_align"><div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">همانطور که می بینید در قطعه کد برنامه نویسی C++ در خطوط 4 الی 10 تابعی با نام CRectangle بهمراه متغیرها و توابع عضوش تعریف شده است. تعریف تابع عضو کلاس در خطوط 12 الی 16 صورت گرفته و بدنه اصلی برنامه از سطر 18 شروع می شود .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطر 20 ما 3 شی از کلاس ایجاد کرده ایم که شی a معمولی و اشیاء b,c از نوع اشاره گر میباشند. در سطر 21 شیئی از نوع اشاره گر بنام d تعریف شده که به دو شی از کلاس CRectangle که بصورت آرایه در نظر گرفته اشاره می نماید. در واقع d شی اشاره گری است که به محل قرارگیری دو شی از کلاس اشاره می کند. و در سطر 22 نیز از کلاس یک شی ایجاد کردیم که به آن با استفاده از کلمه کلیدی new فضایی در حافظه اختصاص داده شده است .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطر 23 شی c حاوی آدرس شی a است پس می توان گفت که هر تغییری در a در c هم اعمال خواهد شد. در سطر 24 شی a از تابع عضو کلاس بنام set_values استفاده می کند و پارامترهای 1و2 را به آن می دهد. چون a یک شی معمولی از کلاس است پس برای بکارگیری آن از نقطه استفاده کردیم. اما در سطرهای 25 و26 چون از اشیائی که اشاره گر هستند استفاده کرده ایم پس با استفاده از عملگر مخصوص (-&gt;) آنها را به تابع عضو کلاس ربط می دهیم .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">اگر دقت کنید می بینید که در سطر 21 ما شی اشاره گر d را بعنوان آرایه ای با طول 2 در نظر گرفته ایم پس دستور سطر 26 فقط به آدرس آن آرایه یعنی اولین خانه اشاره می کند. اما در سطر 27 ما دومین عضو آرایه که خود یک شی از کلاس است را به تابع عضو ربط دادیم به همین علت آنرا دیگر اشاره گر در نظر نمیگیریم و مانند یک شی معمولی از نقطه برای استفاده از کلاس عضو استفاده می کنیم .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">در سطرهای 28 الی 32 ما با استفاده از دستور خروجی cout نتایج مورد نظر را در خروجی نمایش می دهیم و در انتها باید اشیائی را که با استفاده از کلمه کلیدی new ایجاد کرده ایم و به آنها در حافظه فضا اختصاص دادیم را با استفاده از کلمه کلیدی delete پاک کرده و فضاهای آنها را به حافظه برگردانیم .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"><span style="color: #000000;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma;" class="mycode_font">عزیزان باید بادقت کد را مورد مطالعه قرار دهند و مفاهیم فصول قبل مثل اشاره گرها، توابع، آرایه ها و دیگر موارد را درک کرده باشند تا به راحتی قطعه برنامه C++ بالا را تجزیه و تحلیل نمایند .</span></span></span></div>
<div style="text-align: right;" class="mycode_align"> </div>
</div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[تغییر مسیر خطاها در لینوکس]]></title>
			<link>https://www.iranled.com/forum/thread-32101.html</link>
			<pubDate>Tue, 20 Aug 2019 12:40:06 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32101.html</guid>
			<description><![CDATA[سلام،<br />
<br />
من یه برنامه دارم که داخل چندین فایل so و بارگذاری میکنه. حالا من میتونم در برنامه ی خودم اگر هرکدام از این so خطا داد آن را در فایل ذخیره کردنم؟<br />
یه سوال دیگه بعضی از firmware ها قبل از بوت شدن پیغام های خطا رو لاگ میکنن اینا چطوری کار میکنن؟]]></description>
			<content:encoded><![CDATA[سلام،<br />
<br />
من یه برنامه دارم که داخل چندین فایل so و بارگذاری میکنه. حالا من میتونم در برنامه ی خودم اگر هرکدام از این so خطا داد آن را در فایل ذخیره کردنم؟<br />
یه سوال دیگه بعضی از firmware ها قبل از بوت شدن پیغام های خطا رو لاگ میکنن اینا چطوری کار میکنن؟]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[حل تابعf(x)]]></title>
			<link>https://www.iranled.com/forum/thread-32069.html</link>
			<pubDate>Tue, 09 Jul 2019 09:08:29 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32069.html</guid>
			<description><![CDATA[سلام <br />
مثال برای محاسبه تابع f(x) ریاضی<br />
 <br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;stdio.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
<br />
int main()<br />
<br />
{<br />
    int x;<br />
&nbsp;&nbsp;&nbsp;&nbsp;scanf("%denter x", &amp;x);<br />
     x=(-1*(x*x)+x+log (x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;  printf("%d&#92;n", x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;  scanf("press key", );<br />
    return 0;<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[سلام <br />
مثال برای محاسبه تابع f(x) ریاضی<br />
 <br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;stdio.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
<br />
int main()<br />
<br />
{<br />
    int x;<br />
&nbsp;&nbsp;&nbsp;&nbsp;scanf("%denter x", &amp;x);<br />
     x=(-1*(x*x)+x+log (x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;  printf("%d&#92;n", x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;  scanf("press key", );<br />
    return 0;<br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ساخت عدد تصادفی با مثال]]></title>
			<link>https://www.iranled.com/forum/thread-32068.html</link>
			<pubDate>Tue, 09 Jul 2019 09:05:41 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-32068.html</guid>
			<description><![CDATA[سلام <br />
یک مثال برای ساخت عدد تصادفی<br />
یک عدد تصادفی بین یک تا ده <br />
کاربر سه بار حق دارد حدس بزند چه عددی هست<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;stdio.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
<br />
int main()<br />
<br />
{<br />
    int randomnumber;<br />
    randomnumber = rand() % 10;<br />
&nbsp;&nbsp;&nbsp;&nbsp;int a;<br />
&nbsp;&nbsp;&nbsp;&nbsp;scanf("%denter number", &amp;a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(int i=0;i&lt;3;i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;scanf("%denter number", &amp;a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(a==randomnumber)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;    printf("%ddorost");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("ghalat");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d", &amp;a);<br />
    return 0;<br />
}<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[سلام <br />
یک مثال برای ساخت عدد تصادفی<br />
یک عدد تصادفی بین یک تا ده <br />
کاربر سه بار حق دارد حدس بزند چه عددی هست<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;stdio.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
<br />
int main()<br />
<br />
{<br />
    int randomnumber;<br />
    randomnumber = rand() % 10;<br />
&nbsp;&nbsp;&nbsp;&nbsp;int a;<br />
&nbsp;&nbsp;&nbsp;&nbsp;scanf("%denter number", &amp;a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(int i=0;i&lt;3;i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;scanf("%denter number", &amp;a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(a==randomnumber)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;    printf("%ddorost");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("ghalat");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d", &amp;a);<br />
    return 0;<br />
}<br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[نوشتن درایور برای FileSystem Monitor برای همه نسخه های ویندوز]]></title>
			<link>https://www.iranled.com/forum/thread-31680.html</link>
			<pubDate>Tue, 12 Jun 2018 21:50:55 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-31680.html</guid>
			<description><![CDATA[سلام،<br />
من لازم دارم یه درایور بنویسم که فعالیت های FileSystem و هوک کنه یعنی اگه فایل ساخته شد یا پاک شد و اینا من با استفاده از این داریور مطلع بشم.<br />
مشکل اینجاست که این درایور باید توی همه نسخه های ویندوز کار بکنه ! اصلا همچنین چیزی امکان پذیره؟<br />
معماری سیستم عامل هم در نوشتن درایور موثر هست؟ یعنی باید دو درایور جداگانه نوشته بشه؟<br />
<br />
ممنون میشم راهنماییم کنید]]></description>
			<content:encoded><![CDATA[سلام،<br />
من لازم دارم یه درایور بنویسم که فعالیت های FileSystem و هوک کنه یعنی اگه فایل ساخته شد یا پاک شد و اینا من با استفاده از این داریور مطلع بشم.<br />
مشکل اینجاست که این درایور باید توی همه نسخه های ویندوز کار بکنه ! اصلا همچنین چیزی امکان پذیره؟<br />
معماری سیستم عامل هم در نوشتن درایور موثر هست؟ یعنی باید دو درایور جداگانه نوشته بشه؟<br />
<br />
ممنون میشم راهنماییم کنید]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[کامپایل برنامه برای تمام نسخه های ویندوز]]></title>
			<link>https://www.iranled.com/forum/thread-31561.html</link>
			<pubDate>Tue, 10 Apr 2018 15:06:38 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-31561.html</guid>
			<description><![CDATA[سلام.<br />
بنده با ویژوال استدیو 2015 و سی پلاس برنامه می نویسم. مشکلی که دارم این هست که برنامه من نسبت به 32 بیتی یا 64 بیتی بودن و همچنین نسخه های ویندوز خطا میده . علت این امر هم تا حدودی که میدونم مربوط به dll و نسخه ویندوز هست .<br />
چطوری می تونم این دو مشکل رو بدون نصب  dll , ...  و فقط با تنظیمات کامپایلر و ساخت پروژه حل کرد .(یا ایده دیگر )<br />
مشتری ها شاکی شدن .<br />
ممنون]]></description>
			<content:encoded><![CDATA[سلام.<br />
بنده با ویژوال استدیو 2015 و سی پلاس برنامه می نویسم. مشکلی که دارم این هست که برنامه من نسبت به 32 بیتی یا 64 بیتی بودن و همچنین نسخه های ویندوز خطا میده . علت این امر هم تا حدودی که میدونم مربوط به dll و نسخه ویندوز هست .<br />
چطوری می تونم این دو مشکل رو بدون نصب  dll , ...  و فقط با تنظیمات کامپایلر و ساخت پروژه حل کرد .(یا ایده دیگر )<br />
مشتری ها شاکی شدن .<br />
ممنون]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[کپی برنامه به بخش دیگر]]></title>
			<link>https://www.iranled.com/forum/thread-31511.html</link>
			<pubDate>Sat, 10 Feb 2018 15:46:13 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-31511.html</guid>
			<description><![CDATA[سلام. یک برنامه نوشتم (سی پلاس ) می خوام بعد از اولین اجرا خودش در بخش دیگری هم کپی کنه. مثلا در فولدر سیستمی یا درایو دیگه.<br />
 تو نت گشتم چند تاapi برای این کار بود. مثلا copyfile,copyfile2,copyfileex هر کدوم رو که نوشتم بدون مورد کامپایل شده و تابع هم اجرا میشه اما کپی از فایل در محل مورد نظر دیده نمی شه.<br />
<br />
حالا در فولدر سیستمی شاید ویندوز اجازه چنین کاری نده اما در سایر فولدرها (مبدا و مقصد ) هم چنین اتفاقی نمی افته .<br />
نمونه کد برای این مورد :<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;windows.h&gt;<br />
<br />
<br />
<br />
<br />
<br />
int main(void)<br />
<br />
{<br />
<br />
  char filename[ MAX_PATH ];<br />
<br />
  char newLocation[]="C:&#92;&#92;enterstartupdirhere";//put actual path here (i.e. don't use as is)<br />
<br />
  BOOL stats=0;<br />
<br />
  DWORD size = GetModuleFileNameA( NULL, filename, MAX_PATH );<br />
<br />
  if (size)<br />
<br />
    CopyFile(filename, newLocation, stats);<br />
<br />
  else<br />
<br />
   printf("Could not find EXE file name.&#92;n");<br />
<br />
  return 0;<br />
<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[سلام. یک برنامه نوشتم (سی پلاس ) می خوام بعد از اولین اجرا خودش در بخش دیگری هم کپی کنه. مثلا در فولدر سیستمی یا درایو دیگه.<br />
 تو نت گشتم چند تاapi برای این کار بود. مثلا copyfile,copyfile2,copyfileex هر کدوم رو که نوشتم بدون مورد کامپایل شده و تابع هم اجرا میشه اما کپی از فایل در محل مورد نظر دیده نمی شه.<br />
<br />
حالا در فولدر سیستمی شاید ویندوز اجازه چنین کاری نده اما در سایر فولدرها (مبدا و مقصد ) هم چنین اتفاقی نمی افته .<br />
نمونه کد برای این مورد :<br />
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>#include &lt;windows.h&gt;<br />
<br />
<br />
<br />
<br />
<br />
int main(void)<br />
<br />
{<br />
<br />
  char filename[ MAX_PATH ];<br />
<br />
  char newLocation[]="C:&#92;&#92;enterstartupdirhere";//put actual path here (i.e. don't use as is)<br />
<br />
  BOOL stats=0;<br />
<br />
  DWORD size = GetModuleFileNameA( NULL, filename, MAX_PATH );<br />
<br />
  if (size)<br />
<br />
    CopyFile(filename, newLocation, stats);<br />
<br />
  else<br />
<br />
   printf("Could not find EXE file name.&#92;n");<br />
<br />
  return 0;<br />
<br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[مقدار بازگشتی تابع GretSystemInfo]]></title>
			<link>https://www.iranled.com/forum/thread-31371.html</link>
			<pubDate>Tue, 12 Sep 2017 10:42:56 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-31371.html</guid>
			<description><![CDATA[سلام،<br />
 <br />
این API (GetSystemInfo) هیچ مقدار بازگشتی نداره <br />
<blockquote class="mycode_quote"><cite>نقل قول: </cite>Return value<br />
This function does not return a value.</blockquote>
<br />
چطوری میشه چک کرد که تابع با موفقیت اجرا شده؟]]></description>
			<content:encoded><![CDATA[سلام،<br />
 <br />
این API (GetSystemInfo) هیچ مقدار بازگشتی نداره <br />
<blockquote class="mycode_quote"><cite>نقل قول: </cite>Return value<br />
This function does not return a value.</blockquote>
<br />
چطوری میشه چک کرد که تابع با موفقیت اجرا شده؟]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[WIN64 Driver Development Basic Tutorial]]></title>
			<link>https://www.iranled.com/forum/thread-31341.html</link>
			<pubDate>Thu, 17 Aug 2017 13:13:20 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-31341.html</guid>
			<description><![CDATA[این مقاله شامل موضوعات زیر است :<br />
<br />
<div style="text-align: right;" class="mycode_align">
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>0.Begin<br />
|-Hardware preparation<br />
|-Configure environment of driver development<br />
------------------------------<br />
1.HelloWorld In Kernel-Mode<br />
|-Configure environment of driver testing<br />
|-Compile and load kernel-mode HelloWorld<br />
------------------------------<br />
2.Basic Code<br />
|-Basic rule of WIN64 kernel-mode programming<br />
|-Communication between EXE and SYS<br />
|-Use memory in kernel-mode<br />
|-Use string in kernel-mode<br />
|-File operation in kernel-mode<br />
|-Registry operation in kernel-mode<br />
|-Process/Thread operation in kernel-mode<br />
|-Other common code<br />
------------------------------<br />
3.Kernel-Mode Hook And Unhook<br />
|-SYSCALL,WOW64 and Compatibility Mode<br />
|-Disable WIN7 PatchGuard<br />
|-Structure of System Services Descriptor Table<br />
|-SSDT HOOK and UNHOOK<br />
|-SHADOW SSDT HOOK and UNHOOK<br />
|-INLINE HOOK and UNHOOK<br />
------------------------------<br />
4.Monitor Process Behavior Without Hook<br />
|-Monitor Process/Thread startup and exit<br />
|-Monitor Load module (DLL and SYS)<br />
|-Monitor Registry operation<br />
|-Monitor File operation<br />
|-Monitor Process/Thread handle operation<br />
|-Monitor File access by object notify<br />
|-Monitor Internet access<br />
|-Monitor Time change<br />
------------------------------<br />
5.Some Stuff<br />
|-Use ASM code in driver<br />
|-DKOM hide/protect process<br />
|-Enumerate and hide kernel module<br />
|-Kill process by PspTerminateProcess<br />
|-Read/Write process memory enforcement<br />
|-Enumerate message hook<br />
|-Unlock file<br />
|-Preliminary exploration on PE32+ file<br />
------------------------------<br />
6.User-Mode Hook And Unhook<br />
|-Inject DLL to system process<br />
|-RING3 INLINE HOOK and UNHOOK<br />
|-RING3 EAT HOOK and IAT HOOK<br />
------------------------------<br />
7.Anti Notify And Callback<br />
|-Enumerate and Delete CreateProcess/CreateThread notify<br />
|-Enumerate and Delete LoadImage notify<br />
|-Enumerate and Delete Registry callback<br />
|-Enumerate and Anti MiniFilter<br />
|-Enumerate and Delete Object notify</code></div></div></div>
<br />
<div style="text-align: right;" class="mycode_align">تنها مشکل این آموزش اینکه به زبان چینی هست و شما باید از یه مترجم کمک بگیرید <img src="https://www.iranled.com/forum/images/smilies2/my.gif" alt="تعجب - بهینه شده برای ورژن جدید" title="تعجب - بهینه شده برای ورژن جدید" class="smilie smilie_96" /></div>
<div style="text-align: right;" class="mycode_align"><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.iranled.com/forum/images/attachtypes/zip.gif" title="" border="0" alt=".rar" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="https://www.iranled.com/forum/attachment.php?aid=13914" target="_blank">code.rar</a> (اندازه:  4.16 MB / تعداد دفعات دریافت:  111)
<!-- end: postbit_attachments_attachment --> </div>]]></description>
			<content:encoded><![CDATA[این مقاله شامل موضوعات زیر است :<br />
<br />
<div style="text-align: right;" class="mycode_align">
<div class="codeblock"><div class="title">کد: </div><div class="body" dir="ltr"><code>0.Begin<br />
|-Hardware preparation<br />
|-Configure environment of driver development<br />
------------------------------<br />
1.HelloWorld In Kernel-Mode<br />
|-Configure environment of driver testing<br />
|-Compile and load kernel-mode HelloWorld<br />
------------------------------<br />
2.Basic Code<br />
|-Basic rule of WIN64 kernel-mode programming<br />
|-Communication between EXE and SYS<br />
|-Use memory in kernel-mode<br />
|-Use string in kernel-mode<br />
|-File operation in kernel-mode<br />
|-Registry operation in kernel-mode<br />
|-Process/Thread operation in kernel-mode<br />
|-Other common code<br />
------------------------------<br />
3.Kernel-Mode Hook And Unhook<br />
|-SYSCALL,WOW64 and Compatibility Mode<br />
|-Disable WIN7 PatchGuard<br />
|-Structure of System Services Descriptor Table<br />
|-SSDT HOOK and UNHOOK<br />
|-SHADOW SSDT HOOK and UNHOOK<br />
|-INLINE HOOK and UNHOOK<br />
------------------------------<br />
4.Monitor Process Behavior Without Hook<br />
|-Monitor Process/Thread startup and exit<br />
|-Monitor Load module (DLL and SYS)<br />
|-Monitor Registry operation<br />
|-Monitor File operation<br />
|-Monitor Process/Thread handle operation<br />
|-Monitor File access by object notify<br />
|-Monitor Internet access<br />
|-Monitor Time change<br />
------------------------------<br />
5.Some Stuff<br />
|-Use ASM code in driver<br />
|-DKOM hide/protect process<br />
|-Enumerate and hide kernel module<br />
|-Kill process by PspTerminateProcess<br />
|-Read/Write process memory enforcement<br />
|-Enumerate message hook<br />
|-Unlock file<br />
|-Preliminary exploration on PE32+ file<br />
------------------------------<br />
6.User-Mode Hook And Unhook<br />
|-Inject DLL to system process<br />
|-RING3 INLINE HOOK and UNHOOK<br />
|-RING3 EAT HOOK and IAT HOOK<br />
------------------------------<br />
7.Anti Notify And Callback<br />
|-Enumerate and Delete CreateProcess/CreateThread notify<br />
|-Enumerate and Delete LoadImage notify<br />
|-Enumerate and Delete Registry callback<br />
|-Enumerate and Anti MiniFilter<br />
|-Enumerate and Delete Object notify</code></div></div></div>
<br />
<div style="text-align: right;" class="mycode_align">تنها مشکل این آموزش اینکه به زبان چینی هست و شما باید از یه مترجم کمک بگیرید <img src="https://www.iranled.com/forum/images/smilies2/my.gif" alt="تعجب - بهینه شده برای ورژن جدید" title="تعجب - بهینه شده برای ورژن جدید" class="smilie smilie_96" /></div>
<div style="text-align: right;" class="mycode_align"><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.iranled.com/forum/images/attachtypes/zip.gif" title="" border="0" alt=".rar" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="https://www.iranled.com/forum/attachment.php?aid=13914" target="_blank">code.rar</a> (اندازه:  4.16 MB / تعداد دفعات دریافت:  111)
<!-- end: postbit_attachments_attachment --> </div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[پروژه و سروس برنامه ی ExeInside (Parse a PE)]]></title>
			<link>https://www.iranled.com/forum/thread-31320.html</link>
			<pubDate>Tue, 01 Aug 2017 18:43:52 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-31320.html</guid>
			<description><![CDATA[سلام،<br />
<br />
این برنامه بسیار شبیه Dependcy Walker که میاد فایل فرمت های PE مثل exe ،dll و ocx پارس میکنه و توابع Import و Export نمایش میده..<br />
<br />
<a href="https://www.codeproject.com/Articles/36928/Parse-a-PE-EXE-DLL-OCX-Files-and-New-Dependency-Wa" target="_blank" rel="noopener" class="mycode_url">اطلاعات بیشتر <img src="https://www.iranled.com/forum/images/smilies2/cool2.gif" alt="عینک افتابی − بهینه شده برای ورژن جدید" title="عینک افتابی − بهینه شده برای ورژن جدید" class="smilie smilie_99" /> </a><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.iranled.com/forum/images/attachtypes/zip.gif" title="Zip File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="https://www.iranled.com/forum/attachment.php?aid=13913" target="_blank">exe_inside.zip</a> (اندازه:  71.15 KB / تعداد دفعات دریافت:  97)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[سلام،<br />
<br />
این برنامه بسیار شبیه Dependcy Walker که میاد فایل فرمت های PE مثل exe ،dll و ocx پارس میکنه و توابع Import و Export نمایش میده..<br />
<br />
<a href="https://www.codeproject.com/Articles/36928/Parse-a-PE-EXE-DLL-OCX-Files-and-New-Dependency-Wa" target="_blank" rel="noopener" class="mycode_url">اطلاعات بیشتر <img src="https://www.iranled.com/forum/images/smilies2/cool2.gif" alt="عینک افتابی − بهینه شده برای ورژن جدید" title="عینک افتابی − بهینه شده برای ورژن جدید" class="smilie smilie_99" /> </a><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.iranled.com/forum/images/attachtypes/zip.gif" title="Zip File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="https://www.iranled.com/forum/attachment.php?aid=13913" target="_blank">exe_inside.zip</a> (اندازه:  71.15 KB / تعداد دفعات دریافت:  97)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[دانلود فایل و فشرده سازی در سی پلاس]]></title>
			<link>https://www.iranled.com/forum/thread-31291.html</link>
			<pubDate>Thu, 13 Jul 2017 18:31:19 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-31291.html</guid>
			<description><![CDATA[سلام.<br />
 من یک برنامه ای رو می نویسم که توش نیاز دارم از یک ادرسی یک فایلی رو دانلود کنم . محیط برنامه نویسیم تو کدبلاکز هست و در ویندوز هفت و برنامه هم کلا برای ویندوز نوشته میشه .<br />
<br />
برای دانلود فایل من از کتابخونه های curl , <a href="https://msdn.microsoft.com/en-us/library/ms775123%28v=vs.85%29.aspx" target="_blank" rel="noopener" class="mycode_url"><span style="font-weight: bold;" class="mycode_b">URLDownloadToFile</span></a> استفاده کردم اما تو هر دو مشکل دارم .<br />
تو کتابخونه curl که اصلا نمی تونم تو پروژه ها استفاده کنم . کدبلاکز اصلا نمی شناسه . کلی آموزش و گروه تلگرامی پرسیدم  راهنمایی کردن اما جواب نداد . اون گذاشتم کنار .<br />
<br />
استفاده از URLDownloadToFile هم آسون هست ولی مشکل اصلیم urlmon.h هست که اولا تو خوده کدبلاکز نیست این کتابخونه رو هم نمی شناسه . از dll نمی خوام استفاده کنم چون نیاز به رجیستری هست . دوستان گفتند برای حلش از windows sdk استفاده کنم که اونم برای ویندوز 7 نصب انلاین هست و تو قسمت رجیستری خطا میده .<br />
<br />
تو winsocket هم گویا فقط برای ftp هست که چون url ام اینترنتی هست قابل استفاده نبود .<br />
<br />
<span style="color: #ff3333;" class="mycode_color">در کل یک راهنمایی می خوام برای اینکه یک فایلی رو از اینترنت دانلود کنم و طوری باشه که تو سیستم های مختلف ( ایکس پی تا ده ) قابل اجرا باشه بدون نیاز به dll یا ... که کاربر نصب کنه .( متاسفانه منبع خوبی برای برنامه نویسی شبکه و اینترنت برای سی پلاس در ویندوز نیست ) </span><br />
<br />
<span style="color: #ff3333;" class="mycode_color">سوال بعدیم </span>:در استفاده از یک کتابخونه برای فشرده سازی و اکسترکت کردن فایل zip هست . libzip استفاده کردم اما باز هم کدبلاکز این کتابخونه یا توابعش رو نمی شناسه .<br />
<br />
سوال آخر : من تو کدبلاکز کدی که می زنم فرقی نداره تو چه ویندوزی اجرا بشه (ایکس پی و ... ) و با چه نسخه ای ( 32 یا 64 بیتی ) اما وقتی تو ویژوال استدیو یا ... کد میزینم با اینکه ریلیز تو 32 میزارم اما اجرا نمیشه و هنگام اجرا خطایی میده که میگه این برنامه برای این نسخه از ویندوز (32 بیتی ) نیست . آیا راه حلی دارید که بشه در ویژوال استدیو فایل رو در نهایت طوری کامپایل و ساخت که برای هر دو نسخه 32و64 بیتی قابل اجرا باشه .]]></description>
			<content:encoded><![CDATA[سلام.<br />
 من یک برنامه ای رو می نویسم که توش نیاز دارم از یک ادرسی یک فایلی رو دانلود کنم . محیط برنامه نویسیم تو کدبلاکز هست و در ویندوز هفت و برنامه هم کلا برای ویندوز نوشته میشه .<br />
<br />
برای دانلود فایل من از کتابخونه های curl , <a href="https://msdn.microsoft.com/en-us/library/ms775123%28v=vs.85%29.aspx" target="_blank" rel="noopener" class="mycode_url"><span style="font-weight: bold;" class="mycode_b">URLDownloadToFile</span></a> استفاده کردم اما تو هر دو مشکل دارم .<br />
تو کتابخونه curl که اصلا نمی تونم تو پروژه ها استفاده کنم . کدبلاکز اصلا نمی شناسه . کلی آموزش و گروه تلگرامی پرسیدم  راهنمایی کردن اما جواب نداد . اون گذاشتم کنار .<br />
<br />
استفاده از URLDownloadToFile هم آسون هست ولی مشکل اصلیم urlmon.h هست که اولا تو خوده کدبلاکز نیست این کتابخونه رو هم نمی شناسه . از dll نمی خوام استفاده کنم چون نیاز به رجیستری هست . دوستان گفتند برای حلش از windows sdk استفاده کنم که اونم برای ویندوز 7 نصب انلاین هست و تو قسمت رجیستری خطا میده .<br />
<br />
تو winsocket هم گویا فقط برای ftp هست که چون url ام اینترنتی هست قابل استفاده نبود .<br />
<br />
<span style="color: #ff3333;" class="mycode_color">در کل یک راهنمایی می خوام برای اینکه یک فایلی رو از اینترنت دانلود کنم و طوری باشه که تو سیستم های مختلف ( ایکس پی تا ده ) قابل اجرا باشه بدون نیاز به dll یا ... که کاربر نصب کنه .( متاسفانه منبع خوبی برای برنامه نویسی شبکه و اینترنت برای سی پلاس در ویندوز نیست ) </span><br />
<br />
<span style="color: #ff3333;" class="mycode_color">سوال بعدیم </span>:در استفاده از یک کتابخونه برای فشرده سازی و اکسترکت کردن فایل zip هست . libzip استفاده کردم اما باز هم کدبلاکز این کتابخونه یا توابعش رو نمی شناسه .<br />
<br />
سوال آخر : من تو کدبلاکز کدی که می زنم فرقی نداره تو چه ویندوزی اجرا بشه (ایکس پی و ... ) و با چه نسخه ای ( 32 یا 64 بیتی ) اما وقتی تو ویژوال استدیو یا ... کد میزینم با اینکه ریلیز تو 32 میزارم اما اجرا نمیشه و هنگام اجرا خطایی میده که میگه این برنامه برای این نسخه از ویندوز (32 بیتی ) نیست . آیا راه حلی دارید که بشه در ویژوال استدیو فایل رو در نهایت طوری کامپایل و ساخت که برای هر دو نسخه 32و64 بیتی قابل اجرا باشه .]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[چطوری یه wrapper بنویسم ؟ (سی در لینوکس)]]></title>
			<link>https://www.iranled.com/forum/thread-31243.html</link>
			<pubDate>Sun, 11 Jun 2017 16:56:14 +0000</pubDate>
			<guid isPermaLink="false">https://www.iranled.com/forum/thread-31243.html</guid>
			<description><![CDATA[سلام من یه برنامه دارم که یه پارامتر به عنوان ورودی میگیره و خروجی میده و با یه پیغام بسته میشه..<br />
مثلا یه همچنین ورودی: File -info Alireza/.<br />
حالا من میخوام خروجی دستور بالا رو بگیرم و فقط اون مقدارهایی که لازم دارم و نمایش بدم، چی کار باید بکنم؟<br />
<br />
پ.ن: من تو فکرم بود که از pipe استفاده کنم ولی نمیدونم درسته یا نه..<br />
مرسی از راهنمایتون]]></description>
			<content:encoded><![CDATA[سلام من یه برنامه دارم که یه پارامتر به عنوان ورودی میگیره و خروجی میده و با یه پیغام بسته میشه..<br />
مثلا یه همچنین ورودی: File -info Alireza/.<br />
حالا من میخوام خروجی دستور بالا رو بگیرم و فقط اون مقدارهایی که لازم دارم و نمایش بدم، چی کار باید بکنم؟<br />
<br />
پ.ن: من تو فکرم بود که از pipe استفاده کنم ولی نمیدونم درسته یا نه..<br />
مرسی از راهنمایتون]]></content:encoded>
		</item>
	</channel>
</rss>