سيستمعامل، موجب شده است كه نرمافزارهاي كاربردي تحت لينوكس را بتوان به سه گروه تفكيك كرد. گروه نخست شامل نرمافزارهايي است كه از ابزارهايي براي توليد آنها استفاده شده است كه از سيستم windowing مستقل خود استفاده ميكنند. مانند زبان و محيط برنامهنويسي جاوا، kylix ،TCL و غيره. 1-مقدمه
سيستمهاي پيچيده اجتماعي تعداد زيادي از مسائل داراي طبيعت تركيباتي1 را پيش روي ما قرار ميدهند. مسير كاميونهاي حمل و نقل بايد تعيين شود، انبارها يا نقاط فروش محصولات بايد جايابي شوند، شبكههاي ارتباطي بايد طراحي شوند، كانتينرها بايد بارگيري شوند، رابطهاي راديويي ميبايست داراي فركانس مناسب باشند، مواد اوليه چوب، فلز، شيشه و چرم بايد به اندازههاي لازم بريده شوند؛ از اين دست مسائل بيشمارند. تئوري پيچيدگي به ما مي گويد كه مسائل تركيباتي اغلب پلينوميال2 نيستند. اين مسائل در اندازههاي كاربردي و عملي خود به قدري بزرگ هستند كه نميتوان جواب بهينه آنها را در مدت زمان قابل پذيرش به دست آورد. با اين وجود، اين مسائل بايد حل شوند و بنابراين چارهاي نيست كه به جوابهاي زير بهينه3 بسنده نمود به گونهاي كه داراي كيفيت قابل پذيرش بوده و در مدت زمان قابل پذيرش به دست آيند.
چندين رويكرد براي طراحي جوابهاي با كيفيت قابل پذيرش تحت محدوديت زماني قابل پذيرش پيشنهاد شده است. الگوريتمهايي هستند كه ميتوانند يافتن جوابهاي خوب در فاصله مشخصي از جواب بهينه را تضمين كنند كه به آنها الگوريتمهاي تقريبي ميگويند. الگوريتمهاي ديگري هستند كه تضمين ميدهند با احتمال بالا جواب نزديك بهينه توليد كنند كه به آنها الگوريتمهاي احتمالي گفته ميشود. جداي از اين دو دسته، ميتوان الگوريتمهايي را پذيرفت كه هيچ تضميني در ارائه جواب ندارند اما بر اساس شواهد و سوابق نتايج آنها، به طور متوسط بهترين تقابل كيفيت و زمان حل براي مسئله مورد بررسي را به همراه داشتهاند. به اين الگوريتمها، الگوريتمهاي هيوريستيك گفته ميشود.
2- هيوريستيكها
هيوريستيكها عبارتند از معيارها، روشها يا اصولي براي تصميمگيري بين چند گزينه خطمشي و انتخاب اثربخشترين براي دستيابي به اهداف مورد نظر. هيوريستيكها نتيجه برقراري اعتدال بين دو نياز هستند: نياز به ساخت معيارهاي ساده و در همان زمان توانايي تمايز درست بين انتخابهاي خوب و بد.
يك هيوريستيك ميتواند حسابي سرانگشتي باشد كه براي هدايت يك دسته از اقدامات به كار ميرود. براي مثال، يك روش مشهور براي انتخاب طالبي رسيده عبارتست از فشار دادن محل اتصال به ريشه از يك طالبي نامزد انتخاب و سپس بو كردن آن محل. اگر بوي آن محل مانند بوي داخل طالبي باشد آن طالبي به احتمال زياد رسيده است. اين قاعده سرانگشتي نه تضمين ميكند كه تنها طالبيهاي رسيده به عنوان نامزد انتخاب شوند و نه تضمين ميكند كه طالبيهاي رسيده آزمايش شده، رسيده تشخيص داده شوند اما به هر حال اين روش، اثربخشترين روش شناخته شده است.
به عنوان مثالي ديگر از استفاده هيوريستيكها، يك استاد بزرگ شطرنج را در نظر بگيريد كه با انتخاب بين چندين حركت ممكن روبرو شده است. وي ممكن است تصميم بگيرد كه يك حركت خاص، اثربخشترين حركت خواهد بود زيرا موقعيتي فراهم ميآورد كه «به نظر ميرسد» بهتر از موقعيتهاي حاصل از حركتهاي ديگر باشد. به كارگيري معيار «به نظر ميرسد» خيلي سادهتر از تعيين دقيق حركت يا حركاتي خواهد بود كه حريف را مجبور به مات كند. اين واقعيت كه اساتيد بزرگ شطرنج همواره پيروز بازي نخواهند بود نشان دهنده اين است كه هيوريستيكهاي آنها انتخاب اثربخشترين حركت را تضمين نميكنند. نهايتاً وقتي از آنها خواسته ميشود كه هيوريستيك خود را تشريح نمايند آنها فقط توصيفي ناقص از قواعدي ارائه ميدهند و به نظر خود آنها، انجام آن قواعد از توصيف آنان سادهتر است.
خاصيت هيوريستيكهاي خوب اين است كه ابزار سادهاي براي تشخيص خطمشيهاي بهتر ارائه دهند و در حالي كه به صورت شرطي لازم، تشخيص خطمشيهاي اثربخش را تضمين نميكنند اما اغلب به صورت شرط كافي اين تضمين را فراهم آورند. بيشتر مسائل پيچيده نيازمند ارزيابي تعداد انبوهي از حالتهاي ممكن براي تعيين يك جواب دقيق ميباشند. زمان لازم براي يافتن يك جواب دقيق اغلب بيشتر از يك طول عمر است. هيوريستيكها با استفاده از روشهاي نيازمند ارزيابيهاي كمتر و ارائه جوابهايي در محدوديتهاي زماني قابل قبول داراي نقشي اثربخش در حل چنين مسائل خواهند بود (پيرل4 1984، 1-10).
3- انواع الگوريتمهاي هيوريستيك
در حالت كلي سه دسته از الگوريتمهاي هيوريستيك قابل تشخيص است:
(1)الگوريتمهايي كه بر ويژگيهاي ساختاري مسئله و ساختار جواب متمركز ميشوند و با استفاده از آنها الگوريتمهاي سازنده يا جستجوي محلي تعريف ميكنند.
(2)الگوريتمهايي كه بر هدايت هيوريستيك يك الگوريتم سازنده يا جستجوي محلي متمركز ميشوند به گونهاي كه آن الگوريتم بتواند بر شرايط حساس (مانند فرار از بهينه محلي) غلبه كند. به اين الگوريتمها، متاهيوريستيك گفته ميشود.
(3)الگوريتمهايي كه بر تركيب يك چارچوب يا مفهوم هيوريستيك با گونههايي از برنامهريزي رياضي (معمولاً روشهاي دقيق) متمركز ميشوند.
هيوريستيكهاي نوع اول ميتوانند خيلي خوب عمل كنند (گاهي اوقات تا حد بهينگي) اما ميتوانند در جوابهاي داراي كيفيت پايين گير كنند. همان طور كه اشاره شد يكي از مشكلات مهم اين الگوريتمها با آن روبرو ميشوند افتادن در بهينههاي محلي است بدون اينكه هيچ شانسي براي فرار از آنها داشته باشند. براي بهبود اين الگوريتمها از اواسط دهه هفتاد، موج تازهاي از رويكردها آغاز گرديد. اين رويكردها شامل الگوريتمهايي است كه صريحاً يا به صورت ضمني تقابل بين ايجاد تنوع جستجو (وقتي علائمي وجود دارد كه جستجو به سمت مناطق بد فضاي جستجو ميرود) و تشديد جستجو (با اين هدف كه بهترين جواب در منطقه مورد بررسي را پيدا كند) را مديريت ميكنند.
اين الگوريتمها متاهيوريستيك ناميده ميشوند. از بين اين الگوريتمها ميتوان به موارد زير اشاره كرد:
بازپخت شبيهسازي شده
جستجوي ممنوع
الگوريتمهاي ژنتيك
شبكههاي عصبي مصنوعي
بهينهسازي مورچهاي يا الگوريتمهاي مورچه
يكي از عزيزان برنامه يا الگوريتم ماتريس معكوس رو خواسته بودند. در ضمن اينكه ذكر نكرده بودند به چه زباني و ...
من فرض مي كنم اين عزيز ترم اولي هستند و برنامه اش رو به زبان پاسكال مي گم.
اول بايد يك توضيحي در مورد مسأله بدهم. براي پيدا كردن دترمينان يا معكوس يك ماتريس به قول آقاي مرشد بايد يك سري اعمال سطري مقدماتي انجام بدهيم. حالا اين اعمال چيه خدا مي دونه ! !
من ابتدا فكر كردم شايد بايد از يك روش بازگشتي مساله را حل كنم امّا تحقيق كردم و فهميدم كه بايد از روش ديگري اين كار را كرد. حالا چون من نمي خوام شما خيلي زحمت نكشيده برنامه رو داشته باشين برنامه ي دترمينان ماتريس رو كه شبيه به معكوسه مي نويسم و شما خودت با چند تا تغيير كوچولو موچولو تبديلش كن به معكوس ماتريس(خيلي راحته فقط يك كم فكر كن و راهنمايي رو بخون).
● همه مي دونن كه اگه ماتريس به يك ماتريس بالا يا پايين مثلثي تبديل بشه دترمينان برابر است با حاصل ضرب اعداد روي قطر ماتريس
براي اينكه ماتريس رو تبديل كنيم به بالا يا پايين مثلثي سطر اول را در نظر مي گيريم آنقدر آن با سطرهاي ديگر جمع و تفريق و ضرب مي كنيم كه آن ها را صفر كند(مثلاً سطر اول و ستون اول را در نظر مي گيريم آن را در (عدد پايين آن در ماتريس تقسيم بر خود آن) ضرب مي كنيم البته توجه كنيد كه اين براي يكي از مولفه هاست براي بار دوم بايد سطر اول و ستون دوم را در نظر بگيريم و...). من از روي الگوريتم مي تونم اين رو كاملاً براي شما روشن كنم اما اول خودتون يه نگاهي بهش بياندازيد اگه متوجه نشديد ايميل من هست omid_rezvani67@yahoo.com مي تونيد بيشتر بپرسيد يا حضوري مراجعه كنيد.
Program Determinant;
Var
A: Array[1..100,1..100] of integer;
I,J,N,D,k : integer;
Begin
Write('Please insert number of columns and rows: ');
Readln(n);
For i:=1 to n do
For j:=1 to n do
Readln(a[i,j]);
For k:=1 to n-1
For i:=k+1 to n do
For j:=1 to n do
A[i,j]:=A[i,j]*(a[k,k]/a[i.k])-a[k,j];
D:=1;
For i:=1 to n do
D:=D*A[i,i];
Writeln('Determinant is: ',D)
End.
$اگه مي خواهيد بدونيد اين برنامه پايين مثلثي مي كنه ماتريس رو يا بالا مثلثي بايد بگم پايين به مثلثي تبديل مي كنه.
$پارامتر Var كه در ابتداي برنامه ها مي آيد به منزله ي اين است كه در ابتداي فيلم ها مي نويسند با شركت بازيگران... يا با تشكر از...
● (اين هم راهنمايي براي مسأله ي شما) اين رو هم بعضي ها مي دونن كه اگه ماتريس رو به يك ماتريس واحد يا همان ماتريس هماني تبديل كنيم و همان اعمال را(كه روي ماتريس اصلي انجام داديم تا به هماني برسيم) روي ماتريس هماني انجام دهيم ماتريس معكوس را به دست آورده ايم. پس كافيه كه شما اعمال بالا را با يك كم تغييرات انجام بدبد در ضمن اينكه ماتريس هماني را فرض كرده و اعمال را روي آن انجام دهيد.
**اگه اشتباهي رو در اينجا دچار شده ام خواهش مي كنم گوش زد بفرماييد.**
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#define Max 10
/***************************************************/
void Moarrefi( void )
{
clrscr();
cout << "\t\t\t\tBe Name Khoda\n"
<< "\n\nBarname Nevis : Mohammad Hasani Eghtedar"
<< "\n\nShomare Daneshjooti : 83525013"
<< "\n\nReshteye Tahsili : Olume Computer"
<< "\n\nMaghtae Tahsili : Karshenasi"
<< "\n\nSale Tahsili : 1384 - 1385 Nimehye Avval"
<< "\n\nMahale Tahsil : Daneshgahe Dolatiye Qom"
<< "\n\nOstad : Doktor Shir Del"
<< "\n\nE-Mail : mhe_hm@yahoo.com"
<< "\n\nSite : http://www.ecqom.tk"
<< "\n\nPersional Blog : http://360.yahoo.com/mhe_hm"
<< "\n\n\n\n\t\t\t\tKelidi Ra Befesharid";
getch();
clrscr();
}
/***************************************************/
struct Node
{
float Roll, Port;
}A[Max][Max];
int m, n;
char Choise;
/***************************************************/
void PrintMatrix( struct Node D[Max][Max] )
{
int i, j, k = -1;
if( Choise == '2' )
k = n / 2;
else if( Choise == '3' )
k = n - 1;
for( i = 0; i <= n; i++ )
{
cout << "[" << i << "]\t";
if( ( k != -1 ) && ( i == k ) )
cout << "|\t";
}
for( i = 0; i < m; i++ )
{
cout << "\n\n[" << ( i+1 ) << "]";
for( j = 0; j < n; j++)
{
if( ( k != -1 ) && ( j == k ) )
cout << "\t|";
cout << "\t" << setprecision( 3 ) << D[i][j].Roll / D[i][j].Port;
}
}
}
/***************************************************/
int MinRenge( void )
{
int n1 = n;
if( Choise == '3' )
n1 = n - 1;
if( m < n1 )
return m;
return n1;
}
/***************************************************/
void ChengeRow( int k, int t )
{
int i;
struct Node temp[Max];
for( i = 0; i < n; i++ )
{
temp[i] = A[k][i];
A[k][i] = A[t][i];
A[t][i] = temp[i];
}
}
/***************************************************/
void Evaluate( int Min )
{
int i, j;
char Harf;
if( m >= n - 1 )
for( i = Min; i < m; i++ )
if( A[i][n - 1].Roll != 0 )
{
cout << "\n\nIn dastgah nasazegar boodeh va javab nadarad . Zira :";
break;
}
cout << "\n\nDastgahe Moadelat :\n\n";
for( i = 0; i < m; i++ )
{
Harf = 'a' + i;
if( i < Min )
{
cout << Harf ;
Harf = 'a' + Min - 1;
}
else
cout << '0';
for( j = Min; j < n - 1; j++ )
if( A[i][j].Roll != 0 )
{
if( ( A[i][j].Roll / A[i][j].Port ) >= 0 )
cout << " +";
cout << " " << A[i][j].Roll / A[i][j].Port << ++Harf;
}
else
Harf++;
cout << " = " << A[i][n - 1].Roll / A[i][n - 1].Port << "\n";
}
}
/***************************************************/
void G_J( void )
{
int i, j, k, t, Min;
Min = MinRenge();
for( k = 0; k < Min; k++ )
{
t = k + 1;
do
{
if( ( A[k][k].Roll == 0 ) && ( t < m ) )
ChengeRow( k, t++ );
else if( A[k][k].Roll == 0 )
{
cout << "\n\n# Matris R :\n\n";
PrintMatrix( A );
return;
}
}
while( A[k][k].Roll == 0 );
for( j = n-1; j >k ; j-- )
{
A[k][j].Roll = A[k][j].Roll * A[k][k].Port;
A[k][j].Port = A[k][j].Port * A[k][k].Roll;
}
A[k][k].Roll = A[k][k].Port = 1;
for( i = 0; i < m; i++ )
{
if( i != k )
{
for( j = k + 1; j < n; j++ )
{
A[i][j].Roll = ( A[i][j].Roll * A[k][j].Port * A[i][k].Port ) - ( A[i][j].Port * A[k][j].Roll * A[i][k].Roll );
A[i][j].Port = A[i][j].Port * A[k][j].Port * A[i][k].Port;
}
}
}
for( i = 0; i < m; i++ )
{
if( i != k )
{
A[i][k].Roll = 0;
A[i][k].Port = 1;
}
}
}
if( Choise == '1' )
cout << "\n\n# Matris [ R ] :\n\n";
else if( Choise == '2' )
cout << "\n\n# Matris [ I|A' ] :\n\n";
else
cout << "\n\n# Matris [ R|B' ] :\n\n";
PrintMatrix( A );
if( Choise == '3' )
Evaluate( Min );
}
/***************************************************/
void ReadMatrix( void )
{
int i, j;
cout << "Lotfan gozinehye morede nazar ra entekhab konid :\n\n"
<< "1: Be dast avardane matrise tahvili shodehye satri - pellekani\n"
<< "2: Be dast avardane matris makoos\n"
<< "3: Be dast avardane javab dastgahe moadelate be soorate ( Ax = B )";
Choise = getch();
clrscr();
if( ( Choise == '1' ) || ( Choise == '2' ) || ( Choise == '3' ) )
cout << "Lotfan renge matris [ A ] ra vared konid : ";
else
return;
if( Choise == '2' )
{
cin >> m;
n = m;
}
else
cin >> m >> n;
cout << "\nLotfan anasore matris [ A ] ra vared konid :\n\n";
cout << " i\t j\tMeghdar\n";
for( i = 0; i < m; i++ )
{
cout << "\n[" << ( i + 1 ) << "]";
for( j = 0; j < n; j++ )
do
{
cout << "\t[" << ( j + 1 ) << "]\t";
cin >> A[i][j].Roll;
cout << "\t\t /\n\t\t ";
cin >> A[i][j].Port;
if( A[i][j].Port == 0 )
cout << "\t\tERROR : Makhraj nemitavanad '0' bashad .\n";
}
while( A[i][j].Port == 0 );
}
if( Choise == '1' )
{
clrscr();
cout << "# Matris [ A ] :\n\n";
}
else if( Choise == '2' )
{
n = 2 * m;
for( i = 0; i < m; i++ )
A[i][i + 3].Roll = 1;
for( i = 0; i < m; i++ )
for( j = m; j < n; j++ )
A[i][j].Port = 1;
clrscr();
cout << "# Matris [ A|I ] :\n\n";
}
else
{
cout << "\nLotfan anasore matris [ B ] ra vared konid :\n\n";
for( i = 0; i < m; i++ )
{
cout << "[" << ( i + 1 ) << "]";
do
{
cout << "\t[" << ( j + 1 ) << "]\t";
cin >> A[i][n].Roll;
cout << "\t\t /\n\t\t ";
cin >> A[i][n].Port;
if( A[i][n].Port == 0 )
cout << "\t\tERROR : Makhraj nemitavanad '0' bashad .\n";
}
while( A[i][n].Port == 0 );
}
n++;
clrscr();
cout << "# Matris [ A|B ] :\n\n";
}
PrintMatrix( A );
getch();
G_J();
}
/***************************************************/
void main( void )
{
Moarrefi();
ReadMatrix();
getch();
}
#include<conio.h>
#include<math.h>
#include<iostream.h>
#include<iomanip.h>
#define Max 5
/***************************************************/
struct Node
{
float Roll, Port;
}A[Max][Max], L[Max][Max], U[Max][Max];
int n;
/***************************************************/
void Moarrefi( void )
{
clrscr();
cout << "\t\t\t\tBe Name Khoda\n"
<< "\n\nBarname Nevis : Mohammad Hasani Eghtedar"
<< "\n\nShomare Daneshjooti : 83525013"
<< "\n\nReshteye Tahsili : Olume Computer"
<< "\n\nMaghtae Tahsili : Karshenasi"
<< "\n\nSale Tahsili : 1384 - 1385 Nimehye Avval"
<< "\n\nMahale Tahsil : Daneshgahe Dolatiye Qom"
<< "\n\nOstad : Doktor Shir Del"
<< "\n\nE-Mail : mhe_hm@yahoo.com"
<< "\n\nSite : http://www.ecqom.tk"
<< "\n\nPersional Blog : http://360.yahoo.com/mhe_hm"
<< "\n\n\n\n\t\t\t\tKelidi Ra Befesharid";
getch();
clrscr();
}
/***************************************************/
void PrintMatrix( struct Node D[Max][Max] )
{
int i, j;
for( i = 0; i <= n; i++ )
cout << "[" << i << "]\t";
for( i = 0; i < n; i++ )
{
cout << "\n\n[" << ( i+1 ) << "]";
for( j = 0; j < n; j++)
cout << "\t" << setprecision( 4 ) << D[i][j].Roll / D[i][j].Port;
}
}
/***************************************************/
void ReadMatrix( void )
{
int i, j;
cout << "Lotfan renge matris ra vared konid : ";
cin >> n;
cout << "\nLotfan anasore matris ra vared konid :\n\n";
cout << " i\t j\tMeghdar\n";
for( i = 0; i < n; i++ )
{
cout << "\n[" << ( i+1 ) << "]";
for( j = 0; j < n; j++ )
{
do
{
cout << "\t[" << ( j+1 ) << "]\t";
cin >> A[i][j].Roll;
cout << "\t\t /\n\t\t ";
cin >> A[i][j].Port;
if( A[i][j].Port == 0 )
cout << "\t\tERROR : Makhraj nemitavanad '0' bashad .\n";
}
while( A[i][j].Port == 0 );
}
}
clrscr();
cout << "# Matris A :\n\n";
PrintMatrix( A );
}
/***************************************************/
int HasTajziyeh( void )
{
for( int i = 0; i < n; i++ )
if( A[i][i].Roll == 0 )
return 0;
return 1;
}
/***************************************************/
struct Node ZarbIJ( int i, int j )
{
struct Node x;
x.Roll = 0;
x.Port = 1;
for( int k = 0; k < n; k++ )
{
x.Roll = L[i][k].Roll * U[k][j].Roll * x.Port + L[i][k].Port * U[k][j].Port * x.Roll;
x.Port = L[i][k].Port * U[k][j].Port * x.Port;
}
return x;
}
/***************************************************/
void Dolitel( void )
{
struct Node temp;
int i, j;
for( i = 0; i < n; i++ )
L[i][i].Roll = 1;
for( i = 0; i < n; i++ )
for( j = 0; j < n; j++ )
L[i][j].Port = U[i][j].Port = 1;
for( i = 0; i < n; i++ )
for( j = 0; j < n; j++ )
{
temp = ZarbIJ( i, j );
if( i > j )
{
L[i][j].Roll = ( A[i][j].Roll * temp.Port * U[j][j].Port ) - ( A[i][j].Port * temp.Roll * U[j][j].Port );
L[i][j].Port = A[i][j].Port * temp.Port * U[j][j].Roll;
}
else
{
U[i][j].Roll = ( A[i][j].Roll * temp.Port * L[i][i].Port ) - ( A[i][j].Port * temp.Roll * L[i][i].Port );
U[i][j].Port = A[i][j].Port * temp.Port * L[i][i].Roll;
}
}
clrscr();
cout << "# Matris A :\n\n";
PrintMatrix( A );
cout << "\n\n# Matris L :\n\n";
PrintMatrix( L );
cout << "\n\n# Matris U :\n\n";
PrintMatrix( U );
}
/***************************************************/
void Karat( void )
{
struct Node temp;
int i, j;
for( i = 0; i < n; i++ )
U[i][i].Roll = 1;
for( i = 0; i < n; i++ )
for( j = 0; j < n; j++ )
L[i][j].Port = U[i][j].Port = 1;
for( i = 0; i < n; i++ )
for( j = 0; j < n; j++ )
{
temp = ZarbIJ( i, j );
if( i >= j )
{
L[i][j].Roll = ( A[i][j].Roll * temp.Port * U[j][j].Port ) - ( A[i][j].Port * temp.Roll * U[j][j].Port );
L[i][j].Port = A[i][j].Port * temp.Port * U[j][j].Roll;
}
else
{
U[i][j].Roll = ( A[i][j].Roll * temp.Port * L[i][i].Port ) - ( A[i][j].Port * temp.Roll * L[i][i].Port );
U[i][j].Port = A[i][j].Port * temp.Port * L[i][i].Roll;
}
}
clrscr();
cout << "# Matris A :\n\n";
PrintMatrix( A );
cout << "\n\n# Matris L :\n\n";
PrintMatrix( L );
cout << "\n\n# Matris U :\n\n";
PrintMatrix( U );
}
/***************************************************/
void Choleski( void )
{
struct Node temp;
int i, j;
for( i = 0; i < n-1; i++ )
for( j = i; j < n; j++ )
if( ( ( i < j ) && ( A[i][j].Roll != A[j][i].Roll ) && ( A[i][j].Port != A[j][i].Port ) ) || ( ( i == j ) && ( ( A[i][j].Roll / A[i][j].Port ) <= 0 ) ) )
{
cout << "ERROR : In matris tajziyehye choleski nadarad .";
return;
}
for( i = 0; i < n; i++ )
for( j = 0; j < n; j++ )
L[i][j].Port = U[i][j].Port = 1;
for( i = 0; i < n; i++ )
for( j = i; j < n; j++ )
{
temp = ZarbIJ( i, j );
if( i < j )
{
L[j][i].Roll = U[i][j].Roll = ( A[i][j].Roll * temp.Port * L[i][i].Port ) - ( A[i][j].Port * temp.Roll * L[i][i].Port );
L[j][i].Port = U[i][j].Port = A[i][j].Port * temp.Port * L[i][i].Roll;
}
else if( ( ( A[i][j].Roll / A[i][j].Port ) - ( temp.Roll / temp.Port ) ) >= 0 )
{
float R = A[i][j].Roll * temp.Port - A[i][j].Port * temp.Roll;
float P = A[i][j].Port * temp.Port;
L[j][i].Roll = U[i][j].Roll = sqrt( R );
L[j][i].Port = U[i][j].Port = sqrt( P );
}
else
{
cout << "ERROR : In matris tajziyehye choleski nadarad .";
return;
}
}
clrscr();
cout << "# Matris A :\n\n";
PrintMatrix( A );
cout << "\n\n# Matris L :\n\n";
PrintMatrix( L );
cout << "\n\n# Matris U :\n\n";
PrintMatrix( U );
}
/***************************************************/
void main( void )
{
Moarrefi();
ReadMatrix();
cout << "\n\n# Gozinehye morede nazar ra entekhab konid : \n\n"
<< "1 : Tajziyeh DoLitel \n"
<< "2 : Tajziyeh Karat \n"
<< "3 : Tajziyeh Choleski \n\n";
if( HasTajziyeh() )
switch( getch() )
{
case '1' :
Dolitel();
break;
case '2' :
Karat();
break;
case '3' :
Choleski();
break;
}
else
cout << "ERROR : In matris hich kodam az tajziyeh ha ra nadarad .";
getch();
}

#include<conio.h>
#include<iostream.h>
#define Max 30
/*********************************************************/
class string;
class Sparse;
/*********************************************************/
class SparseNode
{
int row, col;
float value;
friend class Sparse;
};
/*********************************************************/
class Sparse
{
int Row, Col, Terms;
SparseNode Data[Max];
public:
void ReadSparse( void );
void WriteSparse( void );
void WriteMatrix( void );
void AddSparse( Sparse a, Sparse b );
void ManfiSparse();
void FastTranspose( Sparse b );
int StoreSum( int sum, int&LastInResult, int r, int c );
void Sparse :: MulSparse( Sparse a, Sparse b );
};
/*********************************************************/
void Sparse :: ReadSparse( void )
{
clrscr();
int i = 0;
cout << "\n\n@ Lotfan Ettelaat Zir Ra Dar Mored Matrise Sparse Vared Konid : \n\n"
<< "$ Tadade Satrha : ";
cin >> Row;
cout << "$ Tedade Sotoonha : ";
cin >> Col;
do
{
cout << "$ Tedade Anasore Gheyre Sefr : ";
cin >> Terms;
if( Terms > ( Row * Col ) || Terms < 0 )
cerr << "\nERROR ! ( In Tedad Ghabele Ghabool Nemibashad )\n\n";
}
while( Terms > ( Row * Col ) || Terms < 0 );
while( i < Terms )
{
cout << "\n# Lotfan Shomarehye Satr Va Sotoone Onsore "
<< ( i + 1 )
<< " -om Ra Vared Konid : ";
cin >> Data[i].row
>> Data[i].col;
if( Data[i].row > Row || Data[i].col > Col || Data[i].row < 1 || Data[i].col < 1 )
cerr << "\nERROR ! ( In Jayegah Dar Moshakhkhasat Matris Nemigonjad )\n";
else
{
cout << "* Lotfan Meghdar Onsor Ra Vared Konid : ";
cin >> Data[i].value;
i++;
}
}
clrscr();
}
/*********************************************************/
void Sparse :: WriteSparse( void )
{
int i;
cout << "\n\n# Moshakhkhasat Matris Be Soorate Zir Ast :"
<< "\n\n~ Tedade Satrha = "
<< Row
<< "\n~ Tedade Sotoonha = "
<< Col
<< "\n~ Tedade Anasore Gheyre Sefr = "
<< Terms
<< "\n\n~ Liste Anasor Gheyre Sefre Matris Be Sharhe Zir Ast :\n\n"
<< "Satr\tSotoon\tMeghdar\n";
for( i = 0; i < Terms; i++ )
cout << Data[i].row
<< "\t"
<< Data[i].col
<< "\t"
<< Data[i].value
<< endl;
getch();
}
/*********************************************************/
void Sparse :: WriteMatrix( void )
{
clrscr();
int i, j;
float Matrix[Max][Max] = {0};
cout << "\n\nMatrix Vaghei :\n\n";
for( i = 0; i < Terms; i++ )
Matrix[Data[i].row-1][Data[i].col-1] = Data[i].value;
for( i = 0; i <= Col; i++ )
cout << "[" << ( i ) << "]\t";
for( i = 0; i < Row; i++ )
{
cout << "\n\n"
<< "[" << ( i+1 ) << "]";
for( j = 0; j < Col; j++ )
{
cout << "\t"
<< Matrix[i][j];
}
}
getch();
clrscr();
}
/*********************************************************/
void Sparse :: AddSparse( Sparse a, Sparse b )
{
int i, j, k;
i = j = k = 0;
if( a.Row != b.Row || a.Col != b.Col )
{
cout << "\n*** ERROR !!! Nemitavan In 2 Matris Ra Ba Ham Jame Kard ***";
return;
}
Row = a.Row;
Col = a.Col;
while( i < a.Terms && j < b.Terms )
{
if( a.Data[i].row < b.Data[j].row || ( a.Data[i].row == b.Data[j].row && a.Data[i].col < b.Data[j].col ) )
{
Data[k].row = a.Data[i].row;
Data[k].col = a.Data[i].col;
Data[k++].value = a.Data[i++].value;
}
else if( a.Data[i].row > b.Data[j].row || ( a.Data[i].row == b.Data[j].row && a.Data[i].col > b.Data[j].col ) )
{
Data[k].row = b.Data[j].row;
Data[k].col = b.Data[j].col;
Data[k++].value = b.Data[j++].value;
}
else if( a.Data[i].value + b.Data[j].value )
{
Data[k].row = a.Data[i].row;
Data[k].col = a.Data[i].col;
Data[k++].value = a.Data[i++].value + b.Data[j++].value;
}
else
{
i++;
j++;
}
}
while( i < a.Terms )
{
Data[k].row = a.Data[i].row;
Data[k].col = a.Data[i].col;
Data[k++].value = a.Data[i++].value;
}
while( j < b.Terms )
{
Data[k].row = b.Data[j].row;
Data[k].col = b.Data[j].col;
Data[k++].value = b.Data[j++].value;
}
Terms = k;
}
/*********************************************************/
void Sparse :: ManfiSparse()
{
for( int i = 0; i < Terms; i++ )
Data[i].value *= -1;
}
/*********************************************************/
void Sparse :: FastTranspose( Sparse a )
{
int i, k;
int RowSize[Max], RowStart[Max];
Row = a.Col;
Col = a.Row;
Terms = a.Terms;
for( i = 0; i < a.Col; i++ )
RowSize[i] = 0;
for( i = 0; i < a.Terms; i++ )
RowSize[a.Data[i].col-1]++;
RowStart[0] = 0;
for( i = 1; i < a.Col; i++ )
RowStart[i] = RowStart[i-1] + RowSize[i-1];
for( i = 0; i < a.Terms; i++ )
{
k = RowStart[a.Data[i].col-1]++;
Data[k].row = a.Data[i].col;
Data[k].col = a.Data[i].row;
Data[k].value = a.Data[i].value;
}
}
/*********************************************************/
int Sparse :: StoreSum( int sum, int&LastInResult, int r, int c )
{
if( sum != 0 )
if( LastInResult < Max-1 )
{
LastInResult++;
Data[LastInResult].row = r;
Data[LastInResult].col = c;
Data[LastInResult].value = sum;
return 0;
}
else
{
cerr << "\n*** ERROR !!! Tedade Anasore Gheyre Sefr Az Fazaye Arayeh Biroon Mizanad ***\n";
return 1;
}
else
return 0;
}
/*********************************************************/
char compare( int x, int y )
{
if( x < y )
return '<';
else if( x == y )
return '=';
return '>';
}
/*********************************************************/
void Sparse :: MulSparse( Sparse a, Sparse b )
{
if( a.Col != b.Row )
{
cout << "\n*** ERROR !!! Zarbe 2 Matris Emkan Pazir Nist ***";
Row = 0;
Col = 0;
Terms = 0;
return;
}
if( ( a.Terms == Max ) || ( b.Terms == Max ) )
{
cout << "*** ERROR !!! Yek Fazaye Khali Dar Matris 'A' Ya 'B' Lazem Ast ***";
Row = 0;
Col = 0;
Terms = 0;
return;
}
Sparse d;
d.FastTranspose( b );
int currRowIndex = 0, LastInResult = -1, currRowBegin = 0, currRowA = a.Data[0].row;
a.Data[a.Terms].row = a.Row;
d.Data[b.Terms].row = b.Col;
d.Data[b.Terms].col = -1;
int sum = 0;
while( currRowIndex < a.Terms )
{
int currColB = d.Data[0].row;
int currColIndex = 0;
while( currColIndex <= b.Terms )
{
if( a.Data[currRowIndex].row != currRowA )
{
if( StoreSum( sum, LastInResult, currRowA, currColB ) )
{
Row = 0;
Col = 0;
Terms = 0;
cout << "\n *** ERROR !!! ***";
return;
}
else
sum = 0;
currRowIndex = currRowBegin;
while ( d.Data[currColIndex].row == currColB )
currColIndex++;
currColB = d.Data[currColIndex].row;
}
else if( d.Data[currColIndex].row != currColB)
{
if( StoreSum( sum, LastInResult, currRowA, currColB ) )
{
Row = 0;
Col = 0;
Terms = 0;
cout << "\n *** ERROR !!! ***";
return;
}
else
sum = 0;
currRowIndex = currRowBegin;
currColB = d.Data[currColIndex].row;
}
else switch( compare( a.Data[currRowIndex].col, d.Data[currColIndex].col ) )
{
case '<' :
currRowIndex++;
break;
case '=' :
sum += a.Data[currRowIndex].value * d.Data[currColIndex].value;
currRowIndex++;
currColIndex++;
break;
case '>' :
currColIndex++;
}
}
while( a.Data[currRowIndex].row == currRowA )
currRowIndex++;
currRowBegin = currRowIndex;
currRowA = a.Data[currRowIndex].row;
}
Row = a.Row;
Col = b.Col;
Terms = LastInResult + 1;
}
/*********************************************************/
void Moarrefi( void )
{
clrscr();
cout << "\t\t\t\tBe Name Khoda"
<< "\n\n\nBarname Nevis : Mohammad Hasani Eghtedar"
<< "\n\nShomare Daneshjooti : 83525013"
<< "\n\nReshteye Tahsili : Olume Computer"
<< "\n\nMaghtae Tahsili : Karshenasi"
<< "\n\nSale Tahsili : 1384 - 1385 Nimehye Avval"
<< "\n\nMahale Tahsil : Daneshgahe Dolatiye Qom"
<< "\n\nOstad : Aghaye Sayyed Esmaeili"
<< "\n\n\n\n\t\t\t\tKelidi Ra Befesharid";
getch();
}
/*********************************************************/
void Meno( void )
{
clrscr();
cout << "\n# Lotfan Alamat Morede Nazar Ra Vared Konid :\n"
<< "\n+ : Jam Ba Matrisi Digar"
<< "\n- : Tafrigh Az Matrisi Digar"
<< "\n* : Zarb Dar Matrisi Digar"
<< "\nP : Chape Matrise Vagheyi"
<< "\nT : Tarane Hadeye Matris";
}
/*********************************************************/
void main( void )
{
Moarrefi();
Sparse a, b, c;
a.ReadSparse();
a.WriteSparse();
Meno();
switch( getch() )
{
case '+' :
b.ReadSparse();
b.WriteSparse();
c.AddSparse(a,b);
cout << "\n\nAnswer Is : ";
c.WriteSparse();
break;
case '-' :
b.ReadSparse();
b.WriteSparse();
b.ManfiSparse();
c.AddSparse(a,b);
cout << "\n\nAnswer Is : ";
c.WriteSparse();
break;
case '*' :
b.ReadSparse();
b.WriteSparse();
c.MulSparse(a,b);
clrscr();
cout << "\n\nAnswer Is : ";
c.WriteSparse();
break;
case 'p' :
a.WriteMatrix();
break;
case 't' :
c.FastTranspose( a );
clrscr();
cout << "\n\nAnswer Is : ";
c.WriteSparse();
break;
}
}
BST : تعریف :
یک درخت جستجوی دو دویی یک درخت دودویی است که ممکن است تهی باشد . اگر درخت دو دویی تهی نباشد ، آنگاه دارای ویژگی های زیر است :
۱- هر عضو دارای یک کلید ( Data ) است و دو عنصر نباید دارای کلید یکسان باشند ، در واقع کلید ها مجزا ( منحصر به فرد ) هستند .
۲- کلید های واقع در زیر درخت غیر تهی چپ ( در صورت وجود ) باید کمتر از مقدار کلید واقع در ریشه باشند .
۳- کلید های واقع در زیر درخت راست ( در صورت وجود ) باید بزرگ تر از مقدار کلید واقع در ریشه باشند .
۴- زیر درختان چپ و راست نیز خود درختان جستجوی دو دویی می باشند .
#include <iostream.h>
#include <conio.h>
/*********************************************/
class TreeNode
{
friend class Tree;
TreeNode *Left, *Right;
int Data;
};
/*********************************************/
class Tree
{
TreeNode *Root;
public:
Tree( void );
void Input( void );
void Insert( void );
void InOrder (TreeNode *t);
void InOrder(void) { InOrder( Root ); }
};
/*********************************************/
Tree :: Tree( void )
{
Root = NULL;
}
/*********************************************/
void Tree :: Input( void )
{
char Puling;
Root = new( TreeNode );
cout << "@ Enter a number : ";
cin >> Root->Data;
Root->Left = Root->Right = NULL;
do
{
cout << "# Do you want to enter another number ( y = yes ) : ";
Puling = getche();
if( Puling == 'y' )
{
cout << " @ Enter a number : ";
Insert();
}
else
break;
}
while( 1 );
}
/*********************************************/
void Tree :: Insert( void )
{
TreeNode *Temp, *Node;
Temp = Root;
Node = new( TreeNode );
Node->Left = Node->Right = NULL;
cin >> Node->Data;
while( Temp != NULL )
{
if( Node->Data > Temp->Data )
{
if( Temp->Right != NULL )
Temp = Temp->Right;
else
{
Temp->Right = Node;
break;
}
}
else
{
if( Temp->Left != NULL )
Temp = Temp->Left;
else
{
Temp->Left = Node;
break;
}
}
}
}
/*********************************************/
void Tree :: InOrder( TreeNode *t )
{
if(t)
{
InOrder( t->Left );
cout << t->Data << " ";
InOrder( t->Right );
}
}
/*********************************************/
void main( void )
{
Tree TreeObject;
cout << "*** Binary Search Tree Maker Program ***\n\n";
TreeObject.Input();
clrscr() ;
cout << "Traverse Binary Search Tree in inorder :\n";
TreeObject.InOrder();
getch();
}

#include<conio.h>
#include<iostream.h>
/***************************************************/
enum Boolean{FALSE,TRUE};
/***************************************************/
struct Triple
{
int value,row,col;
};
/***************************************************/
class Matrix;
/***************************************************/
class MatrixNode
{
friend istream& operator>>(istream& is,Matrix& matrix);
friend ostream& operator<<(ostream& output,Matrix& matrix);
friend class Matrix;
MatrixNode *down,*right;
Boolean head;
union
{
MatrixNode *next;
Triple triple;
};
public:
MatrixNode(Boolean b,Triple *t);
};
/***************************************************/
MatrixNode::MatrixNode(Boolean b,Triple *t)
{
head=b;
if(b)right=next=this;
else triple=*t;
}
/***************************************************/
typedef MatrixNode *MatrixNodePtr;
/***************************************************/
class Matrix
{
friend istream& operator>>(istream& is,Matrix& matrix);
friend ostream& operator<<(ostream& output,Matrix& matrix);
MatrixNode *headnode;
public:
~Matrix();
};
/***************************************************/
MatrixNode *av;
/***************************************************/
Matrix::~Matrix(void)
{
if(!headnode)return;
MatrixNode *y,*x=headnode->right;
headnode->right=av;
av=headnode;
while(x!=headnode)
{
y=x->right;
x->right=av;
av=y;
x=x->next;
}
headnode=0;
}
/***************************************************/
istream& operator>>(istream& is,Matrix& matrix)
{
Triple s;
int p;
cout<<"Moshakhkhasat Matrise Esparse Ra Vared Konid :"<<endl;
cout<<" Tedade Satrha = ";
is>>s.row;
cout<<" Tedade Sotoonha = ";
is>>s.col;
cout<<" Tedade Anasore Gheyre Sefr = ";
is>>s.value;
if(s.row>s.col)p=s.row;
else p=s.col;
matrix.headnode=new MatrixNode(FALSE,&s);
if(p==0)
{
matrix.headnode->right=matrix.headnode;
return is;
}
MatrixNodePtr *head=new MatrixNodePtr[p];
for(int i=0;i<p;i++)head[i]=new MatrixNode(TRUE,0);
int CurrentRow=0;
MatrixNode *last=head[0];
for(i=0;i<s.value;i++)
{
Triple t;
cout<<endl<<"Onsore Geyre Sefre Shomarehye "<<i+1<<" : "<<endl;
cout<<" i = ";
is>>t.row;
cout<<" j = ";
is>>t.col;
cout<<" a["<<t.row<<"]["<<t.col<<"] = ";
is>>t.value;
if(t.row>CurrentRow)
{
last->right=head[CurrentRow];
CurrentRow=t.row;
last=head[CurrentRow];
}
last=last->right=new MatrixNode(FALSE,&t);
head[t.col]->next=head[t.col]->next->down=last;
}
last->right=head[CurrentRow];
for(i=0;i<s.col;i++)head[i]->next->down=head[i];
for(i=0;i<p-1;i++)head[i]->next=head[i+1];
head[p-1]->next=matrix.headnode;
matrix.headnode->right=head[0];
delete[]head;
return is;
}
/***************************************************/
ostream& operator<<(ostream& output,Matrix& matrix)
{
cout<<endl<<"Moshakhkhasat Matris Be Soorate Zir Ast :";
cout<<endl<<"Tedade Satrha = "<<matrix.headnode->triple.row<<" ; Tedade Sotoonha = "<<matrix.headnode->triple.col<<" ; Tedade Anasore Gheyre Sefr = "<<matrix.headnode->triple.value;
cout<<endl<<"Liste Anasor Gheyre Sefre Matris Be Sharhe Zir Ast :"<<endl;
cout<<endl<<"i\tj\ta[i][j]"<<endl<<endl;
MatrixNode *HeadR,*HeadD;
for(HeadD=matrix.headnode->right;HeadD!=matrix.headnode;HeadD=HeadD->next)
for(HeadR=HeadD->right;HeadR!=HeadR->right&&HeadR->right->triple.value!=0;HeadR=HeadR->right)
{
output<<HeadR->triple.row<<"\t"<<HeadR->triple.col<<"\t"<<HeadR->triple.value;
HeadR->triple.value=0;
cout<<endl;
}
return output;
}
/***************************************************/
void main(void)
{
Matrix matrix;
cin>>matrix;
cout<<matrix;
}
برنامه نویس : محمد حسنی اقتدار

#include<conio.h>
#include<iostream.h>
/***************************************************/
enum Boolean{False,True};
/***************************************************/
class Expression;
/***************************************************/
class TokenNode
{
friend Expression;
char Data;
TokenNode *Link;
};
/***************************************************/
class Expression
{
TokenNode *Top;
public:
Expression(void){Top=NULL;};
~Expression(void);
Boolean IsOperator(char Token);
int Expression::isp(char Token);
int Expression::icp(char Token);
void Expression::CreatExpression(void);
void AddExpression(char Token);
char DeleteExpression(void);
char NextToken();
void Postfix(void);
float Calculate(float Digit_1,float Digit_2,char x);
float EvaluateExpression(char Success[25]);
};
/***************************************************/
Expression::~Expression(void)
{
TokenNode*After;
while(Top)
{
After=Top->Link;
delete(Top);
Top=After;
}
}
/***************************************************/
Boolean Expression::IsOperator(char Token)
{
if(Token=='+'||Token=='-'||Token=='*'||Token=='/'||Token=='('||Token==')'||Token==13)return(True);
return(False);
}
/***************************************************/
int Expression::isp(char Token)
{
switch(Token)
{
case'*':return(1);
case'/':return(1);
case'+':return(2);
case'-':return(2);
case'(':return(3);
case 13:return(3);
}
}
/***************************************************/
int Expression::icp(char Token)
{
switch(Token)
{
case'(':return(0);
case'*':return(1);
case'/':return(1);
case'+':return(2);
case'-':return(2);
}
}
/***************************************************/
void Expression::CreatExpression(void)
{
TokenNode *Before,*Current;
cout<<"Please enter expression :"<<endl;
Top=Before=new(TokenNode);
Before->Data=getche();
while(Before->Data!=13)
{
Current=new(TokenNode);
Before->Link=Current;
Before=Current;
Before->Data=getche();
}
Before->Link=NULL;
}
/***************************************************/
void Expression::AddExpression(char Token)
{
TokenNode *Temp;
Temp=new(TokenNode);
Temp->Data=Token;
Temp->Link=Top;
Top=Temp;
}
/***************************************************/
char Expression::DeleteExpression(void)
{
TokenNode *Temp;
char Token;
if(!Top)cout<<"No exprission is available";
else
{
Temp=Top;
Top=Top->Link;
Token=Temp->Data;
delete(Temp);
return Token;
}
}
/***************************************************/
char Expression::NextToken()
{
char Temp=Top->Data;
Top=Top->Link;
return(Temp);
}
/***************************************************/
void Expression::Postfix(void)
{
Expression Stack;
char Success[25];
int i=1;
char y;
Stack.AddExpression(13);
for(char x=NextToken();x!=13;x=NextToken())
{
if(!IsOperator(x))
{
cout<<x;
Success[i++]=x;
}
else if(x==')')for(y=Stack.DeleteExpression();y!='(';y=Stack.DeleteExpression())
{
cout<<y;
Success[i++]=y;
}
else
{
for(y=Stack.DeleteExpression();isp(y)<=icp(x);y=Stack.DeleteExpression())
{
cout<<y;
Success[i++]=y;
}
Stack.AddExpression(y);
Stack.AddExpression(x);
}
}
while(Stack.Top)
{
char Temp=Stack.DeleteExpression();
cout<<Temp;
Success[i++]=Temp;
}
Success[i]=13;
cout<<EvaluateExpression(Success);
}
/***************************************************/
float Expression::Calculate(float Digit_1,float Digit_2,char x)
{
switch(x)
{
case'+':return(Digit_1+Digit_2);
case'-':return(Digit_1-Digit_2);
case'*':return(Digit_1*Digit_2);
case'/':return(Digit_1/Digit_2);
}
}
/***************************************************/
float Expression::EvaluateExpression(char Success[25])
{
float Result[20],Digit_1,Digit_2,Digit;
int i=1,j=1;
cout<<endl<<endl;
for(char x=Success[j];x!=13;x=Success[++j])if(!IsOperator(x))
{
cout<<"Enter Digit "<<x<<" : ";
cin>>Digit;
Result[i++]=Digit;
}
else
{
Digit_2=Result[--i];
Digit_1=Result[--i];
Result[i++]=Calculate(Digit_1,Digit_2,x);
}
cout<<endl<<"Evaluation of postfix expression is :"<<endl;
return(Result[1]);
}
/***************************************************/
void main(void)
{
Expression EXPRESSION;
EXPRESSION.CreatExpression();
cout<<endl<<endl<<"Postfix of expression is :"<<endl;
EXPRESSION.Postfix();
}
برنامه نویس : محمد حسنی اقتدار

#include<conio.h>
#include<iostream.h>
#define Max 30
class string;
class Sparse;
class SparseNode
{
int row,col;
float value;
friend class Sparse;
};
class Sparse
{
int Row,Col,Terms;
SparseNode Data[Max];
public:
void ReadSparse(void);
void WriteSparse(void);
void AddSparse(Sparse a,Sparse b);
void Sparse::ManfiSparse();
void Sparse::FastTranspose(Sparse b);
int Sparse::StoreSum(int sum,int&LastInResult,int r,int c);
void Sparse::MulSparse(Sparse a,Sparse b);
};
void Sparse::ReadSparse(void)
{
int i;
cout<<"\n\n@ Lotfan Ettelaat Zir Ra Dar Mored Matris Vared Konid : \n"<<"$ Tadade Satrha : ";
cin>>Row;
cout<<"$ Tedade Sotoonha : ";
cin>>Col;
cout<<"$ Tedade Anasore Gheyre Sefr : ";
cin>>Terms;
for(i=0;i<Terms;i++)
{
cout<<"\n# Lotfan Shomarehye Satr Va Sotoone Onsore "<<i<<" -om Ra Vared Konid : ";
cin>>Data[i].row>>Data[i].col;
cout<<"* Lotfan Meghdar Onsor Ra Vared Konid : ";
cin>>Data[i].value;
}
}
void Sparse::WriteSparse(void)
{
int i;
cout<<"\n\n~ Moshakhkhasat Matris Be Soorate Zir Ast :";
cout<<"\n~ Tedade Satrha = "<<Row<<" ; Tedade Sotoonha = "<<Col<<" ; Tedade Anasore Gheyre Sefr = "<<Terms;
cout<<"\n~ Liste Anasor Gheyre Sefre Matris Be Sharhe Zir Ast :\n\n";
cout<<"Satr\tSotoon\tMeghdar\n";
for(i=0;i<Terms;i++)cout<<Data[i].row<<"\t"<<Data[i].col<<"\t"<<Data[i].value<<endl;
}
void Sparse::AddSparse(Sparse a,Sparse b)
{
int i,j,k;
i=j=k=0;
if(a.Row!=b.Row||a.Col!=b.Col)
{
cout<<"\n*** ERROR !!! Nemitavan In 2 Matris Ra Ba Ham Jame Kard ***";
return;
}
Row=a.Row;
Col=a.Col;
while(i<a.Terms&&j<b.Terms)
{
if(a.Data[i].row<b.Data[j].row||(a.Data[i].row==b.Data[j].row&&a.Data[i].col<b.Data[j].col))
{
Data[k].row=a.Data[i].row;
Data[k].col=a.Data[i].col;
Data[k++].value=a.Data[i++].value;
}
else if(a.Data[i].row>b.Data[j].row||(a.Data[i].row==b.Data[j].row&&a.Data[i].col>b.Data[j].col))
{
Data[k].row=b.Data[j].row;
Data[k].col=b.Data[j].col;
Data[k++].value=b.Data[j++].value;
}
else if(a.Data[i].value+b.Data[j].value)
{
Data[k].row=a.Data[i].row;
Data[k].col=a.Data[i].col;
Data[k++].value=a.Data[i++].value+b.Data[j++].value;
}
else
{
i++;
j++;
}
}
while(i<a.Terms)
{
Data[k].row=a.Data[i].row;
Data[k].col=a.Data[i].col;
Data[k++].value=a.Data[i++].value;
}
while(j<b.Terms)
{
Data[k].row=b.Data[j].row;
Data[k].col=b.Data[j].col;
Data[k++].value=b.Data[j++].value;
}
Terms=k;
}
void Sparse::ManfiSparse()
{
for(int i=0;i<Terms;i++)Data[i].value*=-1;
}
void Sparse::FastTranspose(Sparse a)
{
int i,k;
int RowSize[Max],RowStart[Max];
Row=a.Col;
Col=a.Row;
Terms=a.Terms;
for(i=0;i<a.Col,RowSize[i]=0;i++);
for(i=0;i<a.Terms;i++)RowSize[a.Data[i].col]++;
RowStart[0]=0;
for(i=1;i<a.Col;i++)RowStart[i]=RowStart[i-1]+RowSize[i-1];
for(i=0;i<a.Terms;i++)
{
k=RowStart[a.Data[i].col]++;
Data[k].row=a.Data[i].col;
Data[k].col=a.Data[i].row;
Data[k].value=a.Data[i].value;
}
}
int Sparse::StoreSum(int sum,int&LastInResult,int r,int c)
{
if(sum!=0)
{
if(LastInResult<Max-1)
{
LastInResult++;
Data[LastInResult].row=r;
Data[LastInResult].col=c;
Data[LastInResult].value=sum;
return 0;
}
else
{
cerr<<"\n*** ERROR !!! Tedade Anasore Gheyre Sefr Az Fazaye Arayeh Biroon Mizanad ***\n";
return 1;
}
}
else return 0;
}
char compare(int x,int y)
{
if(x<y)return'<';
else if(x==y)return'=';
return'>';
}
void Sparse::MulSparse(Sparse a,Sparse b)
{
if(a.Col!=b.Row)
{
cout<<"\n*** ERROR !!! Zarbe 2 Matris Emkan Pazir Nist ***";
Row=0;
Col=0;
Terms=0;
return;
}
if((a.Terms==Max)||(b.Terms==Max))
{
cout<<"*** ERROR !!! Yek Fazaye Khali Dar Matris 'A' Ya 'B' Lazem Ast ***";
Row=0;
Col=0;
Terms=0;
return;
}
Sparse d;
d.FastTranspose(b);
int currRowIndex=0,LastInResult=-1,currRowBegin=0,currRowA=a.Data[0].row;
a.Data[a.Terms].row=a.Row;
d.Data[b.Terms].row=b.Col;
d.Data[b.Terms].col=-1;
int sum=0;
while(currRowIndex<a.Terms)
{
int currColB=d.Data[0].row;
int currColIndex=0;
while(currColIndex<=b.Terms)
{
if(a.Data[currRowIndex].row!=currRowA)
{
if(StoreSum(sum,LastInResult,currRowA,currColB))
{
Row=0;
Col=0;
Terms=0;
cout<<"\n *** ERROR !!! ***";
return;
}
else sum=0;
currRowIndex=currRowBegin;
while(d.Data[currColIndex].row==currColB)currColIndex++;
currColB=d.Data[currColIndex].row;
}
else if(d.Data[currColIndex].row!=currColB)
{
if(StoreSum(sum,LastInResult,currRowA,currColB))
{
Row=0;
Col=0;
Terms=0;
cout<<"\n *** ERROR !!! ***";
return;
}
else sum=0;
currRowIndex=currRowBegin;
currColB=d.Data[currColIndex].row;
}
else switch(compare(a.Data[currRowIndex].col,d.Data[currColIndex].col))
{
case'<':
currRowIndex++;
break;
case'=':
sum+=a.Data[currRowIndex].value*d.Data[currColIndex].value;
currRowIndex++;
currColIndex++;
break;
case'>':
currColIndex++;
}
}
while(a.Data[currRowIndex].row==currRowA)currRowIndex++;
currRowBegin=currRowIndex;
currRowA=a.Data[currRowIndex].row;
}
Row=a.Row;
Col=b.Col;
Terms=LastInResult+1;
}
void main(void)
{
char Sign;
Sparse a,b,c;
a.ReadSparse();
a.WriteSparse();
cout<<"\nLotfan Alamat Ra Vared Konid (+,-,*) : ";
cin>>Sign;
b.ReadSparse();
b.WriteSparse();
switch(Sign)
{
case'+':
c.AddSparse(a,b);
break;
case'-':
b.ManfiSparse();
c.AddSparse(a,b);
break;
case'*':
c.MulSparse(a,b);
break;
}
cout<<"\n\nAnswer Is : ";
c.WriteSparse();
getche();
}
نویسنده : محمد حسنی اقتدار

#include<conio.h>
#include<iostream.h>
#define Max 20
class Poly;
class PolyNode
{
friend Poly;
float Coef;
int Pow;
};
class Poly
{
int n;
PolyNode Data[Max];
public:
void Poly::SortPoly(void);
void ReadPoly(void);
void WritePoly(void);
void AddPoly(Poly a,Poly b);
void SubtractPoly(Poly a,Poly b);
void MulPoly(Poly a,Poly b);
void Poly::ItemPoly(float Coef,int Pow,Poly b);
void Poly::TaghsimPoly(int k,Poly a,Poly b);
};
void Poly::SortPoly(void)
{
int i,j;
PolyNode item;
for(i=n-1;i>0;i--)
for(j=0;j<i;j++)
if(Data[j].Pow<Data[j+1].Pow)
{
item=Data[j];
Data[j]=Data[j+1];
Data[j+1]=item;
}
while(i<n-1)
if(Data[i].Pow==Data[i+1].Pow)
{
Data[i].Coef+=Data[i+1].Coef;
for(j=i+1;j<n-1;j++)Data[j]=Data[j+1];
n--;
}else i++;
}
void Poly::ReadPoly(void)
{
int i;
cout<<"\nPlease enter parts of poly : ";
cin>>n;
cout<<"\nPlease enter Polynomial : \n\n";
for(i=0;i<n;i++)
{
cin>>Data[i].Coef;
cout<<" x^"<<endl;
cin>>Data[i].Pow;
cout<<" +"<<endl;
}
}
void Poly::WritePoly(void)
{
int i;
cout<<"\n";
for(i=0;i<n;i++)cout<<Data[i].Coef<<"X^"<<Data[i].Pow<<" + ";
}
void Poly::AddPoly(Poly a,Poly b)
{
int i,j,k;
i=j=k=0;
while(i<a.n&&j<b.n)
{
if(a.Data[i].Pow>b.Data[j].Pow)
{
Data[k].Coef=a.Data[i].Coef;
Data[k++].Pow=a.Data[i++].Pow;
}
else if(a.Data[i].Pow<b.Data[j].Pow)
{
Data[k].Coef=b.Data[j].Coef;
Data[k++].Pow=b.Data[j++].Pow;
}
else if(a.Data[i].Coef+b.Data[j].Coef)
{
Data[k].Coef=a.Data[i].Coef+b.Data[j].Coef;
Data[k++].Pow=a.Data[i++].Pow;
j++;
}
else
{
i++;
j++;
}
}
while(i<a.n)
{
Data[k].Coef=a.Data[i].Coef;
Data[k++].Pow=a.Data[i++].Pow;
}
while(j<b.n)
{
Data[k].Coef=b.Data[j].Coef;
Data[k++].Pow=b.Data[j++].Pow;
}
n=k;
}
void Poly::SubtractPoly(Poly a,Poly b)
{
int i,j,k;
i=j=k=0;
while(i<a.n&&j<b.n)
{
if(a.Data[i].Pow>b.Data[j].Pow)
{
Data[k].Coef=a.Data[i].Coef;
Data[k++].Pow=a.Data[i++].Pow;
}
else if(a.Data[i].Pow<b.Data[j].Pow)
{
Data[k].Coef=b.Data[j].Coef;
Data[k++].Pow=b.Data[j++].Pow;
}
else if(a.Data[i].Coef-b.Data[j].Coef)
{
Data[k].Coef=a.Data[i].Coef-b.Data[j].Coef;
Data[k++].Pow=a.Data[i++].Pow;
j++;
}
else
{
i++;
j++;
}
}
while(i<a.n)
{
Data[k].Coef=a.Data[i].Coef;
Data[k++].Pow=a.Data[i++].Pow;
}
while(j<b.n)
{
Data[k].Coef=b.Data[j].Coef;
Data[k++].Pow=b.Data[j++].Pow;
}
n=k;
}
void Poly::MulPoly(Poly a,Poly b)
{
int i,j,k;
i=j=k=0;
while(i<a.n)
{
j=0;
while(j<b.n)
{
Data[k].Coef=a.Data[i].Coef*b.Data[j].Coef;
Data[k++].Pow=a.Data[i].Pow+b.Data[j++].Pow;
}
i++;
}
n=k;
}
void Poly::ItemPoly(float Coef,int Pow,Poly b)
{
int j,t;
j=t=0;
while(j<b.n)
{
Data[t].Coef=Coef*b.Data[j].Coef;
Data[t++].Pow=Pow+b.Data[j++].Pow;
}
n=t;
}
void Poly::TaghsimPoly(int k,Poly a,Poly b)
{
Poly d,e;
p:
if(a.Data[0].Pow>=b.Data[0].Pow)
{
Data[k].Pow=a.Data[0].Pow-b.Data[0].Pow;
Data[k].Coef=a.Data[0].Coef/b.Data[0].Coef;
d.ItemPoly(Data[k].Coef,Data[k].Pow,b);
e.SubtractPoly(a,d);
k++;
}
n=k;
if(e.Data[0].Pow>=b.Data[0].Pow)TaghsimPoly(k,e,b);
else
{
cout<<"\nMod Is : \n";
e.WritePoly();
}
}
void main(void)
{
Poly a,b,c;
char Sign;
a.ReadPoly();
a.SortPoly();
cout<<"\nPlease enter sign(+,-,*,/) : ";
cin>>Sign;
b.ReadPoly();
b.SortPoly();
switch(Sign)
{
case'+':
c.AddPoly(a,b);
break;
case'-':
c.SubtractPoly(a,b);
break;
case'*':
c.MulPoly(a,b);
c.SortPoly();
break;
case'/':
c.TaghsimPoly(0,a,b);
break;
}
cout<<"\n\nAnswer Is : \n";
c.WritePoly();
getche();
}
نویسنده : محمد حسنی اقتدار

در این برنامه شاهد توپی هستیم که تحت زاویه در مستطیلی حرکت می کند ودر بر خورد با دیواره های مستطیل بیب زده و بر می گردد .
#include<graphics.h>
#include<alloc.h>
int changedirnx(int xcur);
int changedirny(int ycur);
void main(void)
{
int gd=DETECT,gm,area,m,n,xmin=0,xmax=630,ymin=0,ymax=470,xcur=300,ycur=30;
char *buff;
int xch,ych,ini=0;
initgraph(&gd,&gm," ");
cleardevice();
setcolor(3);
outtextxy(225,185,"TOOPPE MOTEHARREK");
getch();
cleardevice();
setcolor(7);
rectangle(2,2,630,479);
rectangle(3,3,629,478);
setcolor(13);
circle(7,7,3);setfillstyle(SOLID_FILL,13);floodfill(7,7,13);
area=imagesize(4,4,11,11);
buff=malloc(area);
getimage(4,4,11,11,buff);
setcolor(0);
circle(7,7,3);setfillstyle(SOLID_FILL,0);floodfill(7,7,0);
while(!kbhit())
{
delay(200);if(ini!=0)putimage(m,n,buff,XOR_PUT);
m=xcur;n=ycur; ini=1;
putimage(xcur,ycur,buff,XOR_PUT);
if(xcur>xmax || xcur<xmin)xch=changedirnx(xcur);
if(ycur>ymax || ycur<ymin)ych=changedirny(ycur);
if(xch==1)xcur++;else xcur--;
if(ych==1)ycur++;else ycur--;
}
closegraph();restorecrtmode();
clrscr();printf("Thank You.\n");
getch();
}
/*-----------------end of main()-------------------*/
changedirnx(int xcur)
{
int xch;
if(xcur>630)xch=0;
if(xcur<0)xch=1;
sound(100);delay(80);nosound();
return(xch);
}
changedirny(int ycur)
{
int ych;
if(ycur>460)ych=0;
if(ycur<0)ych=1;
sound(100);delay(80);nosound();
return(ych);
}
#include<conio.h> //To detect keyboard press
#include<graphics.h> //Basic drawing operations
#include<dos.h> //For Date & Time
#include<math.h> //Cos,Sin
#include<stdlib.h> //itoa
#include<string.h> //strcpy,strcat,strlen
const float PI=3.1415926535; //PI value
int sec,min,hr; //Store time
struct time t; //Get time
struct dosdate_t d; //Get Date
char p[8]={0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55}; //User defined fill pattern
char strhr[5]="",strmin[5]="",strsec[5]=""; //Store date.
char strdate[30];
//Select day of Month
char strday[][3]={"01","02","03","04","05","06","07","08","09","10",
"11","12","13","14","15","16","17","18","19","20",
"21","22","23","24","25","26","27","28","29","30","31"};
//Select month of Year
char strmonth[][9]={"January","February","March","April","May","June",
"July","August","September","October","November","December"};
char stryr[5]=""; //Store year
//Select day of Week
char strwday[][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
void main() //Program entry
{
int gd=DETECT,gm; //Graphics initialisation
sec=min=hr=0; //Remove garbage values
initgraph(&gd,&gm,"E:\\tc\\bgi"); //Switch to graphics
setfillstyle(SOLID_FILL,RED); //Background- style & color
bar(0,0,639,479); //Background
float angle; //Inclination of the hands of the clock
setcolor(YELLOW); //Dial border of the clock
setfillstyle(SOLID_FILL,YELLOW);
fillellipse(320,240,240,240); //Dial border
setcolor(LIGHTBLUE); //Dial of the clock
setfillstyle(SOLID_FILL,LIGHTBLUE);
fillellipse(320,240,235,235);
setcolor(DARKGRAY); //Inside color of the clock
setfillstyle(SOLID_FILL,LIGHTGRAY);
fillellipse(320,240,190,190);
setcolor(BLACK);
settextstyle(10, 0, 1); //Bold_Font
outtextxy(306,5,"XII");
outtextxy(312,430,"VI");
outtextxy(520,215,"III");
outtextxy(102,215,"IX");
setfillpattern(p,WHITE);
bar(560,215,575,265); //Showing the key to the watch
bar(575,220,580,260); //Just a sho
/* setfillpattern(p,LIGHTGRAY);
bar(560,215,575,219);
setfillpattern(p,DARKGRAY);
bar(560,261,575,265); */
setfillstyle(SOLID_FILL,WHITE); //Making the textbox for Date
bar(210,310,445,350);
setcolor(DARKGRAY);
rectangle(210,310,445,350);
setcolor(BLACK);
rectangle(211,311,444,349);
setcolor(WHITE);
line(210,350,446,350);
line(446,350,446,310);
setcolor(LIGHTGRAY);
rectangle(212,312,443,348); //End of textbox for Date
while(!kbhit())
{
gettime(&t); //Load system time into structure t
sec=t.ti_sec; //Store seconds
min=t.ti_min; //Store minutes
hr=t.ti_hour; //Store hours
setfillstyle(SOLID_FILL,BROWN);
fillellipse(320,240,10,10); // -------|
setfillstyle(SOLID_FILL,WHITE); // | Display center of
fillellipse(320,240,7,7); // -------|-> the Clock
setfillstyle(SOLID_FILL,GREEN); // |
fillellipse(320,240,4,4); // -------|
itoa(hr,strhr,10); //Get hours in a string
if(strlen(strhr)==1) //Make it a string having len = 2
{
strhr[2]='\0';
strhr[1]=strhr[0];
strhr[0]='0';
}
itoa(min,strmin,10); //Get minutes in a string
if(strlen(strmin)==1) //Make it a string having len = 2
{
strmin[2]='\0';
strmin[1]=strmin[0];
strmin[0]='0';
}
itoa(sec,strsec,10); //Get seconds in a string
if(strlen(strsec)==1) //Make it a string heving len = 2
{
strsec[2]='\0';
strsec[1]=strsec[0];
strsec[0]='0';
}
setcolor(BLACK);
settextstyle(5,0,4);
moveto(244,117);
outtext(strhr);
outtext(":");
outtext(strmin);
outtext(":");
outtext(strsec); //Display the time in the given region
_dos_getdate(&d); //Load system date into structure d
strcpy(strdate,strwday[d.dayofweek]);
strcat(strdate,",");
strcat(strdate,strmonth[d.month-1]);
strcat(strdate," ");
strcat(strdate,strday[d.day-1]);
strcat(strdate,",");
itoa(d.year,stryr,10);
strcat(strdate,stryr);
settextstyle(1,0,1);
moveto(225,320);
outtext(strdate);
setlinestyle(SOLID_LINE,0,3);
int totsec=((t.ti_hour%12)*60)+(t.ti_min);
angle=(float)(((float)totsec/(float)720)*2*PI);
angle-=PI/2;
setcolor(BLACK);
line(320+2,240+2,320+(100*cos(angle))+2,240+(100*sin(angle))+2);
setcolor(BROWN);
line(320,240,320+(100*cos(angle)),240+(100*sin(angle)));
angle=((float)min/60)*2*PI;
angle=angle-(PI/2);
setcolor(BLACK);
line(320+3,240+3,320+(175*cos(angle))+3,240+(175*sin(angle))+3);
setcolor(RED);
line(320,240,320+(175*cos(angle)),240+(175*sin(angle)));
setlinestyle(SOLID_LINE,0,1);
angle=((float)sec/60)*2*PI;
angle=angle-(PI/2);
setcolor(BLACK);
line(320+5,240+5,320+(180*cos(angle))+5,240+(180*sin(angle))+5);
setcolor(RED);
line(320,240,320+(180*cos(angle)),240+(180*sin(angle)));
delay(900);
setcolor(LIGHTGRAY);
setlinestyle(SOLID_LINE,0,3);
totsec=((t.ti_hour%12)*60)+(t.ti_min);
angle=(float)(((float)totsec/(float)720)* 2 *PI);
angle-=PI/2;
line(320,240,320+(100*cos(angle)),240+(100*sin(angle)));
line(320+2,240+2,320+(100*cos(angle))+2,240+(100*sin(angle))+ 2);
angle=((float)min/60)*2*PI;
angle=angle-(PI/2);
line(320,240,320+(175*cos(angle)),240+(175*sin(angle)));
line(320+3,240+3,320+(175*cos(angle))+3,240+(175*sin(angle))+ 3);
setlinestyle(SOLID_LINE,0,3);
angle=((float)sec/60)*2*PI;
angle=angle-(PI/2);
line(320+5,240+5,320+(180*cos(angle))+5,240+(180*sin(angle))+5);
line(320,240,320+(180*cos(angle)),240+(180*sin(angle)));
setlinestyle(SOLID_LINE,0,1);
setfillstyle(SOLID_FILL,WHITE);
bar(240,127,390,160);
setcolor(BLACK);
rectangle(241,128,389,159);
setcolor(DARKGRAY);
line(240,160,240,127);
line(240,127,390,127);
setcolor(WHITE);
line(240,160,390,160);
line(390,160,390,127);
setcolor(LIGHTGRAY);
rectangle(242,129,388,158);
if((sec>19&&sec<41)||(hr>19&&hr<41)||(min>19&&min<41))
{
setfillstyle(SOLID_FILL,WHITE);
bar(210,310,445,350);
setcolor(DARKGRAY);
rectangle(210,310,445,350);
setcolor(BLACK);
rectangle(211,311,444,349);
setcolor(WHITE);
line(210,350,446,350);
line(446,350,446,310);
setcolor(LIGHTGRAY);
rectangle(212,312,443,348);
}
}
}
در این پروژه کار های زیر انجام می شود :
۱- مشخص کردن طول متن ( تابع strlen )
۲- معکوس کردن متن ( تابع strrev )
۳- کپی کردن متن در آرایه ای از کارکتر ( تابع strcpy )
۴- مقایسه ی دو متن ( تابع strcmp )
۵- ادغام کردن دو متن ( تابع strcat )
۶- پاک کردن قسمتی از یک متن
۷- تبدیل عددی از نوع رشته ای به عددی ( تابع atoi )
۸- تبدیل عددی از نوع عددی به رشته ای ( تابع itoa )
#include<stdio.h>
#include<conio.h>
char str1[20],str2[20],str3[20];
int i,j;
/*---------------------------------*/
char meno(void)
{
clrscr();
printf("\n\t\t\t\tIN THE NAME OF GOD\n");
printf("\n\n 1.Mohasebehye Toole Matn");
printf("\n\n 2.Makoos Kardane Matn");
printf("\n\n 3.Copy Kardane Matn Dar Arayehei Az Character");
printf("\n\n 4.Moghayesehye Matn Ba Matni Digar");
printf("\n\n 5.Edgham Kardane Matn Ba Matni Digar");
printf("\n\n 6.Pak Kardane Ghesmati Az Matn");
printf("\n\n 7.Tabdil Adadi Az Noe Reshteh Be Integer");
printf("\n\n 8.Tabdil Adadi Az Noe Integer Be Reshteh");
printf("\n\n 9.Khorooj Az Barnameh");
printf("\n\n\n\t\t\t*** Kode Morede Nazar Ra Vared Konid ***");
return(getch());
}
/*---------------------------------*/
int no_1(void)
{
printf("\n Lotfan Matn Ra Vared Konid :\n\n ");
scanf("%s",str1);
while(str1[++i]);
return(i);
}
/*---------------------------------*/
void no_2(void)
{
printf("\n Lotfan Matn Ra Vared Konid :\n\n ");
scanf("%s",str1);
printf("\n Makoose Matn =\n\n ");
while(str1[i++]);
i-=1;
while(i>0)
printf("%c",str1[--i]);
}
/*---------------------------------*/
void no_3(void)
{
printf("\n Lotfan Matn Ra Vared Konid :\n\n str 1 = ");
scanf("%s",str1);
while(str1[i])
str2[i++]=str1[i];
printf("\n str 2 = %s",str2);
}
/*---------------------------------*/
int no_4(void)
{
i=j=-1;
while(str1[++i]&&str2[++j])
{
if(str1[i]>str2[j])
return(1);
else
if(str1[i]<str2[j])
return(-1);
}
if((!str1[i])&&(!str2[j]))
return(0);
else
if(!str1[i])
return(-1);
else
return(1);
}
/*---------------------------------*/
void no_5(void)
{
printf("\n Lotfan Matn 1 Ra Vared Konid =\n\n ");
scanf("%s",str1);
printf("\n Lotfan Matn 2 Ra Vared Konid =\n\n ");
scanf("%s",str2);
while(str1[i])
str3[j++]=str1[i++];
i=0;
while (str2[i])
str3[j++]=str2[i++];
str3[j]='\0';
}
/*---------------------------------*/
void no_6(void)
{
i-=1;
while(str1[j])
str1[i++]=str1[j++];
str1[i]='\0';
}
/*---------------------------------*/
long int no_7(void)
{
int sum=0;
while(str1[i])
sum=(str1[i++]-'0')+sum*10;
return(sum);
}
/*---------------------------------*/
void no_8(void)
{
while(i%10!=0)
{
str1[j++]=i%10+'0';
i=i/10;
}
}
/*---------------------------------*/
void main(void)
{
int exit=0;
printf("\n\n\n\n\n\t\tBarnameh Nevis : Mohammad Hasani Eghtedar\n\n\t\tDaneshgah : Qom\n\n\t\tReshteh : Olume Copmputer\n\n\t\tOstad : Aghaye Seyyed Esmaeili\n\n\t\tPoshtibani : 09125521498\n\n\t\tSale Tahsili : Nimehye Dovvom 1383-1384");
getch();
while(exit==0)
{
i=j=0;
switch(meno())
{
case'1':clrscr();
printf("\n Toole Matn = %i",no_1());
getch();
break;
case'2':clrscr();
no_2();
getch();
break;
case'3':clrscr();
no_3();
getch();
break;
case'4':clrscr();
printf(" -1 : Matne 1 Bozorgtar Ast\t\t1 : Matne 2 Bozorgtar Ast");
printf("\n\n Lotfan Matn 1 Ra Vared Konid =\n\n ");
scanf("%s",str1);
printf("\n Lotfan Matn 2 Ra Vared Konid =\n\n ");
scanf("%s",str2);
printf("\n\n%i",no_4());
getch();
break;
case'5':clrscr();
no_5();
printf("\n Edghame 2 Matn =\n\n %s",str3);
getch();
break;
case'6':clrscr();
printf("\n Lotfan Matn Ra Vared Konid :\n\n ");
scanf("%s",str1);
printf("\n Lotfan Andis Aghazin Va Payani Ra Baraye Pak Kardan Vared Konid =");
printf("\n\n Aghazin = ");
scanf("%i",&i);
printf("\n Payani = ");
scanf("%i",&j);
no_6();
printf("\n Matn = %s",str1);
getch();
break;
case'7':clrscr();
printf("\n Lotfan Adad Az Noe String Ra Vared Konid =\n\n ");
scanf("%s",str1);
printf("\n\n Noe Integer Adad = %i",no_7());
getch();
break;;
case'8':clrscr();
printf("\n Lotfan Adad Az Noe Integer Ra Vared Konid =\n\n ");
scanf("%i",&i);
no_8();
printf("\n\n Noe String Adad = ");
while(j-->0)
printf("%c",str1[j]);
getch();
break;;
case'9':exit=1;
}
}
}

PROGRAM DONBALEHYE_FIBONACHI;
USES WINCRT;
VAR
I,A,B,C:INTEGER;
BEGIN
CLRSCR;
I:=3;
A:=0;
B:=1;
WRITELN('*****SERYE FIBONACHI*****');
WRITELN;
WRITE(A,' ',B);
WHILE I<=20 DO
BEGIN
C:=A+B;
A:=B;
B:=C;
I:=I+1;
WRITE(' ',C)
END;
READLN
END.
نویسنده : محمد حسنی اقتدار

مسیر یاب یکی از بازی ها و معما های جالب است که در آن باید مسیر هایی را که از یک گوشه به گوشه دیگر منتهی می شود را پیدا کنید .
#include<stdio.h>
#include<conio.h>
#define max1 10
#define max2 10
struct plus
{
int up,right,down,left;
};
int f,k,K,i=1,j=1,m=0,count=0,rah[2][max1*max2];
char code='n';
int arr[max1][max2]={{0,0,0,0,0,0,0,0,0,0},
{0,1,1,1,1,0,0,0,0,0},
{0,1,0,0,1,1,1,0,0,0},
{0,1,1,1,0,0,1,0,0,0},
{0,1,0,1,0,0,1,1,0,0},
{0,1,0,1,0,0,0,1,1,0},
{0,1,0,1,1,1,0,0,1,0},
{0,1,0,0,0,1,0,0,1,0},
{0,1,1,1,1,1,1,1,5,0},
{0,0,0,0,0,0,0,0,0,0}};
struct plus plan[max1][max2];
void chap(void);
void back(void);
void plus(void);
void search(void);
void main(void)
{
clrscr();
printf("5");
for(k=1;k<=max1-2;k++)
{
printf("\n");
for(K=1;K<=max2-2;K++)
printf("%i ",arr[k][K]);
}
printf("\n\n Chand ta masir az 5 be 5 vojood darad ? ");
getchar();
printf("\n\n Ba ham javabe dorost ra bebinim : ( Enter a key )");
getch();
rah[0][m]=1;
rah[1][m]=1;
plus();
getch();
}
void plus(void)
{
k=1;
if((plan[i][j].up=arr[i-1][j])==1)++k;
if((plan[i][j].right=arr[i][j+1])==1)++k;
if((plan[i][j].down=arr[i+1][j])==1)++k;
if((plan[i][j].left=arr[i][j-1])==1)++k;
if((arr[i][j]=k)>2)count+=k-2;
if(code=='t')arr[rah[0][m+1]][rah[1][m+1]]=1;
code='n';
search();
}
void search(void)
{
if(plan[i][j].up==1)
{
rah[0][++m]=--i;
rah[1][m]=j;
plus();
}
else if(plan[i][j].right==1)
{
rah[0][++m]=i;
rah[1][m]=++j;
plus();
}
else if(plan[i][j].down==1)
{
rah[0][++m]=++i;
rah[1][m]=j;
plus();
}
else if(plan[i][j].left==1)
{
rah[0][++m]=i;
rah[1][m]=--j;
plus();
}
else chap();
}
void back(void)
{
while(m>=0)
if(arr[rah[0][m-1]][rah[1][m-1]]>2)
{
arr[rah[0][m]][rah[1][m]]=2;
code='t';
arr[rah[0][--m]][rah[1][m]]-=1;
count-=1;
i=rah[0][m];
j=rah[1][m];
plus();
}
else
{
arr[rah[0][--m]][rah[1][m]]=1;
back();
}
}
void chap(void)
{
int k;
if((plan[i][j].up==5)||(plan[i][j].right==5)||(plan[i][j].down==5)||(plan[i][j].left==5))
{
rah[0][++m]=max1-2;
rah[1][m]=max2-2;
printf("\n\n\n Masir %i : ",++f);
for(k=0;k<=m;k++)printf("[%i,%i]->",rah[0][k],rah[1][k]);
}
if(count!=0)back();
}
نویسنده : محمد حسنی اقتدار


#include
#include
#include
#include
const int chessboardsize=8; //size of chessboard
enum{empty,queen,used}; //status
struct move //movement direction
{
int x;
int y;
};
struct chessboard //chessboard type
{
int size;
int square[chessboardsize][chessboardsize];
int usedsquares;
int noqueens;
};
void setqueenmovdi(move*whatmove,chessboard*board,move*curcoor);
void main(void)
{
move curcoor; // define digonal movements
move NE;
NE.x=1;
NE.y=1;
move NW;
NW.x=-1;
NW.y=1;
move SE;
SE.x=1;
SE.y=-1;
move SW;
SW.x=-1;
SW.y=-1;
chessboard board;
board.size=chessboardsize;
srand(time(0));
while(board.noqueens!=board.size)
{
board.usedsquares=0;
board.noqueens=0;
for(int i=0;i
while(board.usedsquares
curcoor.x=rand()%board.size;
curcoor.y=rand()%board.size;
if(board.square[curcoor.x][curcoor.y]==empty)
{
board.square[curcoor.x][curcoor.y]=queen;
++board.usedsquares;
++board.noqueens;
}
else
continue;
for(int horiz=0;horiz
{
board.square[horiz][curcoor.y]=used;
++board.usedsquares;
}
for(int verti=0;verti
{
board.square[curcoor.x][verti]=used;
++board.usedsquares;
}
board.square[curcoor.x][curcoor.y]=queen;
setqueenmovdi(&NE,&board,&curcoor);
setqueenmovdi(&NW,&board,&curcoor);
setqueenmovdi(&SE,&board,&curcoor);
setqueenmovdi(&SW,&board,&curcoor);
}
}
cout<
for(int j2=0;j2
cout<
}
cout<
}
void setqueenmovdi(move*whatmove,chessboard*board,move*curcoor)
{
move next;
next.x=curcoor->x+whatmove->x;
next.y=curcoor->y+whatmove->y;
if(next.x<0||next.x>board->size-1||next.y<0||next.y>board->size-1)
return;
if(board->square[next.x][next.y]==empty)
{
board->square[next.x][next.y]=used;
++board->usedsquares;
}
setqueenmovdi(whatmove,board,&next);
return;
}

یك بازی فكری که باید تمام دیسك ها ئی را كه روی یك میله قرار دارد را به میله ای دیگر منتقل كنید .
قوانین بازی عبارتند از :
1- هر بار تنها می توانید یك دیسك را جا به جا كنید .
2- همیشه باید دیسك كوچك تر را بر روی بزرگ تر قرار دهید .
Source Code
#include<stdio.h>
int t=0;
void tower(char from,char to,char aux,int n)
{
if(n==1)printf("%d = Move disk 1 from peg %c to peg %c \n",++t,from,to);
else
{
tower(from,aux,to,n-1);
printf("%d = Move disk %1d from peg %c to peg %c \n",++t,n,from,to);
tower(aux,to,from,n-1);
}
}
void main(void)
{
char from='1',to='3',aux='2';
int n;
printf(" How many disks ? ");
scanf("%d",&n);
printf("\n");
tower(from,to,aux,n);
}