PDA

View Full Version : برنامه های درس کتاب ساختمان داده های آقای مقسمی به زبان C++



miladnoori67
دوشنبه 21 بهمن 1387, 01:07 صبح
با سلام خدمت همه دوستان عزیز
امروز با دست پر اومدم. و میخوام تمام برنامه هایی که این ترم توی درس ساختمان داده ها نوشتیم رو براتون بزارم.
البته برنامه ها در سطح بالایی نیستند و چیز خاصی ندارند ولی برای افراد مبتدی که تازه میخوان شروع کنن فکر میکنم نکته های جالبی داشته باشه. برنامه ها در حقیقت حل تمرینات آخر هر فصل کتاب ساختمان داده های آقای مقسمی هستند که ما حل کردیم و براتون گذاشتم. زبانی که توسط اون برنامه نویسی شده C++‎ هستش.
امیدوارم خشتون بیاد.
لیست برنامه ها اینا هستن :
فصل اول :
به دست آوردن فاکتوریل
به دست آوردن سری فیبوناچی به صورت بازگشتی و غیر بازگشتی
به دست آوردن بزرگترین مقسوم علیه مشترک به صورت بازگشتی
هانوی به صورت بازگشتی
و معکوس عدد به صورت بازگشتی و غیر بازگشتی
فصل دوم :
جستجوی باینری
فصل سوم :
تعداد تکرار کاراکترها در یک جمله
فصل چهارم :
الگوریتم میزینگ MAZING به دو صورت
فصل پنجم :
لیست پیوندی
لیست پیوندی حلقوی که کامل نیست
و پروژه :
الگوریتم میزینگ MAZING به صورت گرافیکی
و پیمایش INORDER یک درخت دودویی به صورت گرافیکی
که میزینگ گرافیکی رو به دلایلی براتون نمیزارم.
امیدوارم خوشتون بیاد.


فصل اول :
به دست آوردن فاکتوریل




// Programer : Milad Noori - 09358914951
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
main()
{
long int i,n,fact;
clrscr();
printf("Pleas Enter a Number =");
cin >> n;
cout << endl;
printf ("factory number is =");
fact = 1;
for (i=n;i>=1;i--)
{
printf (" %i ",i);
if (i>1)
printf ("*");
}
for (i=n;i>=1;i--)
fact = fact * i ;
cout << "= " << fact;
getch();
}




به دست آوردن سری فیبوناچی به صورت غیر بازگشتی





// Programer : Milad Noori - 09358914951
#include <conio.h>
#include <stdio.h>
#include <IOSTREAM.h>
void main(void)
{
clrscr();
long int a,b,c,i,n;
a=1;
b=1;
c=1;
cout<<"Number of digits u need to show: ";
cin>>n;
cout<<a;
cout<<" ";
cout<<b;
for(i=1;i<n;i++)
{
cout<<" ";
b=c+b;
c=a;
a=b;
cout<<b;
}
getch();
}

به دست آوردن سری فیبوناچی به صورت بازگشتی




//Programer : Milad Noori - 09358914951
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
int fibo(int n);
void main()
{
int n,i;
clrscr();
printf("Enter a Number = ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf(" %d",fibo(i-1));
}
getch();
}
int fib(int n)
{
if (n<=1) return 1;
else
return fibo(n-1)+fibo(n-2);
}


به دست آوردن بزرگترین مقسوم علیه مشترک به صورت بازگشتی



// Programer : Milad Noori - 09358914951
//------barnameh nevis = MiLaD NoOrI---------------------
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <PROCESS.H>
#include <STDLIB.H>
int gcd(long int,long int);
void main()
{
long int x,y;
for(;;) {
clrscr();
cout<<"Please enter a number : ";
cin>>x;
if (x<1) {exit(0);}
cin>>y;
cout<<"------------------------"<<endl;
cout<<"gcd=";
cout<< gcd(x,y);
cout<<endl;
cout<<"------------------------" ;
getch();
}


}
//------barnameh nevis = MiLaD NoOrI---------------------
//-----------------***Function***-----------------------------------------
int gcd(long int x,long int y)
{
if (x%y==0&y<=x)
return y;
if (x<y)
return gcd(y,x);
else
return gcd(y,x%y);
}
//------barnameh nevis = MiLaD NoOrI---------------------


هانوی به صورت بازگشتی



// Programer : Milad Noori - 09358914951
//------barnameh nevis = MiLaD NoOrI---------------------
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <PROCESS.H>
#include <STDLIB.H>
void tower(int,char,char,char);
int main()
{
int t;
for(;;) {
clrscr();
cout<<"Please enter a number : ";
cin>>t;
if (t<1) {exit(0);}
cout<<"------------------------"<<endl;
tower(t,'A','B','C');
cout<<"------------------------" ;
getch();
}
return 0;
}
//------barnameh nevis = MiLaD NoOrI---------------------
//-----------------***Function***------------------------
void tower(int n,char A,char B,char C)
{
if(n==1)printf("move a disk from %c to %c \n",A,C);
else{
tower(n-1,A,C,B);
printf("move a disk from %c to %c \n",A,C);
tower(n-1,B,A,C);
}
}
//------barnameh nevis = MiLaD NoOrI---------------------

و معکوس عدد به صورت غیر بازگشتی




// Programer : Milad Noori - 09358914951
//------barnameh nevis = MiLaD NoOrI---------------------
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <PROCESS.H>
#include <STDLIB.H>
void inverse(long int);
int main()
{
long int t;
for(;;) {
clrscr();
cout<<"Please enter a number : ";
cin>>t;
if (t<1) {exit(0);}
cout<<"------------------------"<<endl;
inverse(t);
cout<<endl;
cout<<"------------------------" ;
getch();
}
return 0;
}
//------barnameh nevis = MiLaD NoOrI---------------------
//-----------------***Function***-----------------------------------------
void inverse(long int n)
{
long int digit;
cout<<"inverse=";
do{
digit=n%10;
cout<<digit;
n/=10;
}while(n!=0);
}
//------barnameh nevis = MiLaD NoOrI---------------------

و معکوس عدد به صورت بازگشتی




// Programer : Milad Noori - 09358914951
//------barnameh nevis = MiLaD NoOrI---------------------
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <PROCESS.H>
#include <STDLIB.H>
void inverse(long int);
int main()
{
long int t;
for(;;) {
clrscr();
cout<<"Please enter a number : ";
cin>>t;
if (t<1) {exit(0);}
cout<<"------------------------"<<endl;
cout<<"inverse=";
inverse(t);
cout<<endl;
cout<<"------------------------" ;
getch();
}
return 0;
}
//------barnameh nevis = MiLaD NoOrI---------------------
//-----------------***Function***-----------------------------------------
void inverse(long int n)
{
long int digit;
if (n!=0) {
digit=n%10;
n/=10;
cout<<digit;
inverse(n);
}
}
//------barnameh nevis = MiLaD NoOrI---------------------

فصل دوم :
جستجوی باینری




// Programer : Milad Noori - 09358914951
#include<conio.h>
#include<iostream.h>
void main(void)
{
clrscr();
int A[10]={10,5,78,4,6,0,-9,4,47,5798},i,j,temp;
int mid,min,max,found=0,value=3;
//***********************Sort*********************** *******
// for (i=0;i<=9;i++)
// {
// cin>>A[i];
// }
for (i=0;i<=9;i++)
for (j=i;j<=9;j++)
{
if (A[i]>A[j])
{
temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
//*******************Sort End******************************
//*******************Bineri Search*************************
min=0;
max=9;
do
{
mid=(max+min)/2;
if(A[mid]==value) found=1;
else if(A[mid]<value) min=mid+1;
else max=mid-1;
}
while (found==0&min<=max);
if (found) cout<<"Found in: "<<mid+1;
else cout<<"Not found";
//****************End Search*******************************
getch();
}

فصل سوم :
تعداد تکرار کاراکترها در یک جمله




// Programer : Milad Noori - 09358914951
#include <iostream.h>
#include <conio.h>
void main(void)
{
clrscr();
char small[27]={"abcdefghijklmnopqrstuvwxyz "};
char big[26]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
int bign[26]={0};
int smalln[27]={0};
int word=0;
int i=0,j=0;
char key;
char str[100];
cout << "Enter String: " << endl;
while((key=getch()) != 27)
{
switch (key)
{
case 'a': smalln[0]++;cout<<'a';break;
case 'b': smalln[1]++;cout<<'b';break;
case 'c': smalln[2]++;cout<<'c';break;
case 'd': smalln[3]++;cout<<'d';break;
case 'e': smalln[4]++;cout<<'e';break;
case 'f': smalln[5]++;cout<<'f';break;
case 'g': smalln[6]++;cout<<'g';break;
case 'h': smalln[7]++;cout<<'h';break;
case 'i': smalln[8]++;cout<<'i';break;
case 'j': smalln[9]++;cout<<'j';break;
case 'k': smalln[10]++;cout<<'k';break;
case 'l': smalln[11]++;cout<<'l';break;
case 'm': smalln[12]++;cout<<'m';break;
case 'n': smalln[13]++;cout<<'n';break;
case 'o': smalln[14]++;cout<<'o';break;
case 'p': smalln[15]++;cout<<'p';break;
case 'q': smalln[16]++;cout<<'q';break;
case 'r': smalln[17]++;cout<<'r';break;
case 's': smalln[18]++;cout<<'s';break;
case 't': smalln[19]++;cout<<'t';break;
case 'u': smalln[20]++;cout<<'u';break;
case 'v': smalln[21]++;cout<<'v';break;
case 'w': smalln[22]++;cout<<'w';break;
case 'x': smalln[23]++;cout<<'x';break;
case 'y': smalln[24]++;cout<<'y';break;
case 'z': smalln[25]++;cout<<'z';break;
case ' ': smalln[26]++;cout<<' ';break;
//-----------------------------------------------------------------
case 'A': bign[0]++;cout<<'A';break;
case 'B': bign[1]++;cout<<'B';break;
case 'C': bign[2]++;cout<<'C';break;
case 'D': bign[3]++;cout<<'D';break;
case 'E': bign[4]++;cout<<'E';break;
case 'F': bign[5]++;cout<<'F';break;
case 'G': bign[6]++;cout<<'G';break;
case 'H': bign[7]++;cout<<'H';break;
case 'I': bign[8]++;cout<<'I';break;
case 'J': bign[9]++;cout<<'J';break;
case 'K': bign[10]++;cout<<'K';break;
case 'L': bign[11]++;cout<<'L';break;
case 'M': bign[12]++;cout<<'M';break;
case 'N': bign[13]++;cout<<'N';break;
case 'O': bign[14]++;cout<<'O';break;
case 'P': bign[15]++;cout<<'P';break;
case 'Q': bign[16]++;cout<<'Q';break;
case 'R': bign[17]++;cout<<'R';break;
case 'S': bign[18]++;cout<<'S';break;
case 'T': bign[19]++;cout<<'T';break;
case 'U': bign[20]++;cout<<'U';break;
case 'V': bign[21]++;cout<<'V';break;
case 'W': bign[22]++;cout<<'W';break;
case 'X': bign[23]++;cout<<'X';break;
case 'Y': bign[24]++;cout<<'Y';break;
case 'Z': bign[25]++;cout<<'Z';break;
}
}
cout<<endl;
for (i=0;i<=26;i++)
{
cout<<small[i]<<smalln[i]<<' ';
}
cout<<endl;
for (i=0;i<=25;i++)
{
cout<<big[i]<<bign[i]<<' ';
}
getch();
}


فصل چهارم :
الگوریتم میزینگ MAZING به دو صورت




// Programer : Milad Noori - 09358914951
#include<conio.h>
#include<stdio.h>
main()
{
clrscr();
int a[4][4],i,j;
for(i=0;i<=3;i++)
{
printf("row%d:\n",i+1);
for(j=0;j<=3;j++)
scanf("%d",&a[i][j]);
}
if(a[0][0]!=0 || a[3][3]!=0)
{
printf("this matris is false please try again....\n");
return 0;
}
//**************************************
j=0;i=0;
printf("[%d][%d]\t",i,j);
while (i<=3 && j<=3)
{
if(a[i+1][j]==0 && i+1<=3)
printf("[%d][%d]\t",++i,j);
else if(a[i][j+1]==0 && j+1<=3)
printf("[%d][%d]\t",i,++j);
else
break;
}
if (i<3 || j<3 )
printf("there isn't way...");
getch();
}


نوع دوم :




// Programer : Milad Noori - 09358914951
#include <iostream.h>
#include <conio.h>
void main (void)
{
const rows=6;
const cols=6;
int arr[rows][cols]={{1,0,0,0,0,0},
{1,1,0,0,0,0},
{0,1,1,1,0,0},
{0,0,0,1,1,1},
{0,0,0,0,0,0}};

int i,j;
cout<<"enter Start X:";
cin >> i;
cout<<"enter Start Y:";
cin >> j;
int dir=0, newmove;
do{
newmove = 0;
if (arr[i+1][j]==1 && dir != 2)
{
i = i + 1;
dir = 1;
newmove = 1;
}
if (arr[i-1][j]==1 && dir != 1)
{
i = i - 1;
dir = 2;
newmove = 1;
}
if (arr[i][j+1]==1 && dir != 4)
{
j = j + 1;
dir = 3;
newmove = 1;
}
if (arr[i][j-1]==1 && dir != 3)
{
j = j - 1;
dir = 4;
newmove = 1;
}
} while(newmove);
cout << "\nFinal X:" << i;
cout << "\nFinal Y:" << j;
getch();
}


فصل پنجم :
لیست پیوندی




// Project : Graphic Maze
// Programer : Milad Noori - 09358914951
// Teacher : Mr Atayi
// PROFESSOR HESABI //// SHIRVAN
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct node *p_node;
typedef struct node{
char name[20];
int ave;
p_node link;
};
void main()
{
node *temp,*x,*y;
int n,s;
clrscr();
//Creat List==============================================
printf("enter the number of node: \n");
scanf("%d",&n);
x=(struct node *)malloc(sizeof (struct node));
printf("enter the first name: ");
scanf("%s",x -> name);
printf("enter the first ave: ");
scanf("%d",&x -> ave);
x->link='\0';
temp=x;
for(int i=2;i<=n;i++)
{
y=(struct node *)malloc(sizeof (struct node));
printf("enter the name: ");
scanf("%s",y->name);
printf("enter the ave: ");
scanf("%d",&y->ave);
y->link='\0';
temp->link=y;
temp=temp->link;
}
gotoxy(10,25);
temp=x;
//Show======================================
do{
printf("%s : %d\t",temp -> name, temp ->ave);
temp=temp->link;
}while(temp -> link !='\0');
printf("%s : %d",temp -> name,temp->ave);
//Search=======================================
getch();
clrscr();
printf("enter your ave for search ....\t");
scanf("%d",&s);
temp=x;
while(temp->link!='\0')
{
if (temp->ave==s)
{
printf("%s",temp-> name);
break;
}
temp=temp->link;
}
if(temp->ave==s)
printf("%s",temp-> name);
else
printf("not found....\n");
getch();
}

لیست پیوندی حلقوی که کامل نیست




// Project : Graphic Maze
// Programer : Milad Noori - 09358914951
// Teacher : Mr Atayi
// PROFESSOR HESABI //// SHIRVAN
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct node *p_node;
typedef struct node{
char name[20];
int ave;
p_node link;
};
void main()
{
node *endp='\0',*x,*y,*s;
int n;
clrscr();
//Creat List============================================== =====
l1:n=getch();
if(n==27) goto show;
x=(struct node *)malloc(sizeof (struct node));
if (endp=='\0')
{
printf("enter the name: ");
scanf("%s",x -> name);
printf("enter the ave: ");
scanf("%d",&x -> ave);
x->link=x;
endp=y=x;
}
else
{
printf("enter the name: ");
scanf("%s",x -> name);
printf("enter the ave: ");
scanf("%d",&x -> ave);
x->link=endp -> link;
endp ->link=x;
}
goto l1;
printf("press any key to show...");
getch();
show: gotoxy(10,25);
//Show===========================================
endp->link=y->link;
do{
printf("%s : %d\t",endp -> name, endp ->ave);
endp=endp->link;
}while(endp->link != y->link);
///Search============================================ =
getch();
clrscr();
printf("enter your ave for stay it node....\t");
scanf("%d",&s->ave);
endp->link=y->link;
while(endp->ave != s->ave)
{ endp=endp->link;}
endp->link=s->link;
free(s);
printf("prees any key to show data....");
getch();
endp->link=y->link;
do{
printf("%s : %d\t",endp -> name, endp ->ave);
endp=endp->link;
}while(endp->link != y->link);
getch();
}

و پروژه :
الگوریتم میزینگ MAZING به صورت گرافیکی

و پیمایش INORDER یک درخت دودویی به صورت گرافیکی




// Project : Graphic Inorder
// Programer : Milad Noori - 09358914951
// Teacher : Mr Atayi
// PROFESSOR HESABI //// SHIRVAN
//--------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <iomanip.h>
//--------------------------------------------------------------
char A,B,C,D,E,F,G;
int timer;
void print(int x,int y,int c,int p);
void a(int a);
void rodb(int a);
void b(int a);
void rodd(int a);
void d(int a);
void rode(int a);
void e(int a);
void rodc(int a);
void c(int a);
void rodb(int a);
void rodf(int a);
void f(int a);
void rodg(int a);
void g(int a);
///////////////////////MAIN PROGRAM//////////////////////////////
void main()
{
clrscr();
//---------------------------------------------------------------
// A='a';B='b';C='c';D='d';E='e';F='f';G='g';
//-----------------------INPUT-----------------------------------
cout<<"How delay you need?(MiliSec)"<<endl;
cin>>timer;
cout<<"Please enter 7 NODE :"<<endl;
cout<<"A= ";
A=getche();
cout<<endl;
cout<<"B= ";
B=getche();
cout<<endl;
cout<<"C= ";
C=getche();
cout<<endl;
cout<<"D= ";
D=getche();
cout<<endl;
cout<<"E= ";
E=getche();
cout<<endl;
cout<<"F= ";
F=getche();
cout<<endl;
cout<<"G= ";
G=getche();
cout<<endl;
//---------------------DRAW--------------------------------------
a(7);
rodb(7);
b(7);
rodd(7);
d(7);
rode(7);
e(7);
rodc(7);
c(7);
rodf(7);
f(7);
rodg(7);
g(7);
//--------------------ANSERW--------------------------------------
gotoxy(21,20);
cout<<"INORDER =" ;
//"<<D<<B<<E<<A<<F<<C<<G;
//---------------------DRAW COLOR--------------------------------
// getch();
delay(timer);
d(2);
print(30,20,7,D);
delay(timer);
rodd(2);
delay(timer);
b(2);
print(31,20,7,B);
delay(timer);
rode(2);
delay(timer);
e(2);
print(32,20,7,E);
delay(timer);
rodb(2);
delay(timer);
a(2);
print(33,20,7,A);
delay(timer);
f(2);
print(34,20,7,F);
delay(timer);
rodf(2);
delay(timer);
c(2);
print(35,20,7,C);
delay(timer);
rodg(2);
delay(timer);
g(2);
print(36,20,7,G);
delay(timer);
rodc(2);
getch();
}
/////////////////////TAVABE/////////////////////////////
void print(int x,int y,int c,int p)
{
gotoxy(x,y);
textcolor(c);
cprintf("%c",p);
}
//================================================== ====
void a(int a)
{
print(38,3,a,A);
}
//================================================== ===
void rodb(int a)
{
print(37,4,a,47);
print(36,5,a,47);
print(35,6,a,47);
print(34,7,a,47);
}
//================================================== ===
void b(int a)
{
print(33,8,a,B);
}
//================================================== ===
void rodd(int a)
{
print(32,9,a,47);
print(31,10,a,47);
print(30,11,a,47);
}
//================================================== ====
void d(int a)
{
print(29,12,a,D);
}
//================================================== ====
void rode(int a)
{
print(34,9,a,92);
print(35,10,a,92);
print(36,11,a,92);
}
//================================================== =====
void e(int a)
{
print(37,12,a,E);
}
//================================================== =====
void rodc(int a)
{
print(39,4,a,92);
print(40,5,a,92);
print(41,6,a,92);
print(42,7,a,92);
}
//================================================== ======
void c(int a)
{
print(43,8,a,C);
}
//================================================== =======
void rodg(int a)
{
print(44,9,a,92);
print(45,10,a,92);
print(46,11,a,92);
}
//================================================== =======
void g(int a)
{
print(47,12,a,G);
}
//================================================== =======
void rodf(int a)
{
print(42,9,a,47);
print(41,10,a,47);
print(40,11,a,47);
}
//================================================== =======
void f(int a)
{
print(39,12,a,F);
}
//================================================== ========
/* gotoxy(36,5);
printf("%c",47);
gotoxy(35,6);
printf("%c",47);
print(38,3,0,A);
print(37,4,0,47);
print(36,5,0,47);
print(35,6,0,47);
print(34,7,0,47);
print(33,8,0,B);
print(32,9,0,47);
print(31,10,0,47);
print(30,11,0,47);
print(29,12,0,D);
//----------------------------
print(34,9,0,92);
print(35,10,0,92);
print(36,11,0,92);
print(37,12,0,E);
//----------------------------
print(39,4,0,92);
print(40,5,0,92);
print(41,6,0,92);
print(42,7,0,92);
print(43,8,0,C);
//-----------------------------
print(44,9,0,92);
print(45,10,0,92);
print(46,11,0,92);
print(47,12,0,G);
//-----------------------------
print(42,9,0,47);
print(41,10,0,47);
print(40,11,0,47);
print(39,12,0,F);
//-----------------------------
*/


خوب بچه ها تمام شد. امیدوارم خوب بوده باشه.
علت اینکه پروژه میزینگ رو نزاشتم کامل نبودن اون هستش که البته کار میکنه ولی خودم میخوام یه مقدار قشنگتر بشه. اگر دوست داشتید بگید تا اون رو هم بزارم.
میلاد نوری عضو سایت برنامه نویس

miladnoori67
یک شنبه 18 اسفند 1387, 17:37 عصر
این برنامه مربوط به فصل 2 هستش که به این مجموعه اضافه کردم:

به دست آوردن تمام زیر مجموعه های یک مجموعه n عضوی ( به درخواست یک دانشجوی خارجی )




#include<iostream.h>
#include<conio.h>
void main()
{
int num;
int i,j;
int n_set=1,n=0;
int one=1;

cout<<"enter number:\n";
while (cin>>num , num<0 || num>14)
cout<<"error";
for( i=1 ; i<=num ; i++ )
n_set*=2;
cout<<"\n "<<n_set<<"subset :\n\n";
for ( i=0 ; i<n_set ; i++ )
{
one = 1;
cout<<"{";
for (j=0 ; j<num ; j++ )
{
if ((one & i) != 0)
cout<<(j+1)<<" , ";
one=one*2;
}
cout<<"\b\b}\n";
}
getch();
}

shahinshyd
پنج شنبه 08 اردیبهشت 1390, 18:49 عصر
با سلام
دوست عزیزتمارین فصل بعدی رو نمیذارید

jaafar1363
شنبه 10 اردیبهشت 1390, 09:37 صبح
ممنونم بابت برنامه ها.
تا باشن آدمایی مث شما.
خیلی چاکریم داش میلاد