PDA

View Full Version : کلی برنامه برای ساختمان داده ها



powerboy2988
یک شنبه 01 بهمن 1385, 11:47 صبح
برنامه نویسی C - دوران خط حول محور

برنامه ای که در حالت گرافیکی یک خط حول محور دوران کند.


/* CHARKHESHE KHAT HOLE MEHVAR */
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
#include<stdlib.h>
#include<math.h>
main(){
int gm,gd,x,y,l;
double a;
gd=DETECT;
initgraph(&gd,&gm,"c: cBGI");
x=getmaxx()/2;
y=getmaxy()/2;
l=200;
for (a=0;!kbhit();a+=.1){
setcolor(10);
line(cos(a)*l+x,sin(a)*l+y,x-1*cos(a),y-1*sin(a));
delay(50);
setcolor(0);
line(cos(a)*l+x,sin(a)*l+y,x-1*cos(a),y-1*sin(a));
}
getch();
closegraph();}

powerboy2988
یک شنبه 01 بهمن 1385, 11:48 صبح
ساختمان داده ها - جمع ماتریس اسپارس

برنامه ای که حاصلجمع دو ماتریس اسپارس را حساب کند.


#include "stdio.h"
#include "conio.h"
void readArray(int [][3], int row);
void add(int a[4][3], int b[5][3], int c[5][3]);
int compare(int, int);
int main()
{
int w,i, j, a[4][3], b[5][3], c[5][3];
clrscr();
w=2;
gotoxy(1,++w);
//read a[4][3]
printf("***Read first sparse array***");
gotoxy(1,++w);
readArray(a, 4);
//read b[5][3]
clrscr();
w=2;
gotoxy(1,++w);
printf("***Read second sparse array***");
gotoxy(1,++w);
readArray(b, 5);
clrscr();
w=2;
gotoxy(1,++w);
add(a, b, c);
gotoxy(1,++w);
printf("***Sum of two sparse matrix***");
gotoxy(1,++w);
for(i = 0; i < 5; i ++)
{
for(j = 0; j < 3; j++)
printf("%5d", c[i][j]);
gotoxy(1,++w);
}
getch();
return 0;
}
//***********************
void readArray(int x[][3],int row)
{
int i,j;
for(i = 0; i < row; i ++)
{
printf("Enter three numbers for row %d :", i);
for(j = 0;j < 3; j ++)
scanf("%d", &x[i][j]);
}
}
//*********************
void add(int a[4][3], int b[5][3], int c[5][3])
{
int i, j, k, x, h;
c[0][0] = a[0][0];
c[0][1] = a[0][1];
i = j = k = 1;
while(i <= a[0][2] && j <= b[0][2])
{
switch(compare(a[i][0], b[j][0]))
{
case -1:
c[k][0] = a[i][0];
c[k][1] = a[i][1];
c[k][2] = a[i][2];
k ++;
i ++;
break;
case 0:
switch(compare(a[i][1], b[j][1]))
{
case -1:
c[k][0] = a[i][0];
c[k][1] = a[i][1];
c[k][2] = a[i][2];
k ++;
i ++;
break;
case 0:
x = a[i][2] + b[j][2];
if(x)
{
c[k][0] = a[i][0];
c[k][1] = a[i][1];
c[k][2] = x;
k ++;
}//enf of if
i ++;
j ++;
break;
case 1:
c[k][0] = b[j][0];
c[k][1] = b[j][1];
c[k][2] = b[j][2];
k ++;
j ++;
break;
}
break;
case 1:
c[k][0] = b[j][0];
c[k][1] = b[j][1];
c[k][2] = b[j][2];
k ++;
j ++;
break;
}
}//end of while
for(h = i; h <= a[0][2]; h ++)
{
c[k][0] = a[h][0];
c[k][1] = a[h][1];
c[k][2] = a[h][2];
k ++;
}
for(h = j; h <= b[0][2]; h++)
{
c[k][0] = b[h][0];
c[k][1] = b[h][1];
c[k][2] = b[h][2];
k ++;
}
c[0][2] = k - 1;
}
//*********************
int compare(int x, int y)
{
if(x < y)
return -1;
else if(x == y)
return 0;
else
return 1;
}

powerboy2988
یک شنبه 01 بهمن 1385, 11:49 صبح
ساختمان داده ها - جمع و تفریق دو ماتریس ۳ در ۳

برنامه ای که حاصلجمع و تفریق دو ماتریس سه در سه را حساب کند.


#include "stdio.h"
#include "conio.h"
void subAdd(int [][3], int [][3], int [][3], int [][3]);
int main()
{
const int n = 3;
int i, j,w, a[n][n], b[n][n], sub[n][n], add[n][n];
clrscr();
//read a[n][n]
for(i = 0; i < n; i ++)
for(j = 0; j < n; j ++)
{
printf("Enter a[%d][%d] : ",i, j);
scanf("%d", &a[i][j]);
}
//read b[n][n]
for(i = 0; i < n; i ++)
for(j = 0; j < n; j ++)
{
printf("Enter b[%d][%d] : ",i, j);
scanf("%d", &b[i][j]);
}
subAdd(a, b, sub, add);
//print sub[n][n]
printf(" press a key...");
getch();
w=10;
gotoxy(30,w);
printf("sub[n][n] is:");
gotoxy(30,++w);
for(i = 0; i < n; i ++)
{
for(j = 0; j < n; j ++)
printf("%5d", sub[i][j]);
gotoxy(30,++w);
}
gotoxy(30,++w);
printf("add[n][n] is:");
gotoxy(30,++w);
for(i = 0; i < n; i ++)
{
for(j = 0; j < n; j ++)
printf("%5d", add[i][j]);
gotoxy(30,++w);
}
getch();
return 0;
}
//**********************
void subAdd(int a[][3], int b[][3], int sub[][3], int add[][3])
{
const int n = 3;
int i, j;
for(i = 0; i < n; i ++)
for(j = 0; j < n; j ++)
{
sub[i][j] = a[i][j] - b[i][j];
add[i][j] = a[i][j] + b[i][j];
}}

powerboy2988
یک شنبه 01 بهمن 1385, 11:50 صبح
ساختمان داده ها - جستجوی دودویی در آرایه ها

برنامه ای که تعدادی عدد را در یک آرایه ذخیره کند و یک عدد را به روش دودویی جستجو نماید.


#include "stdio.h"
#include "conio.h"
int bSearch(int [], const int, int);
int main()
{
const int n = 5;
int i, item, x[n];
clrscr();
printf("Enter %d ascending sorted numbers :", n);
for(i = 0; i < n; i ++)
scanf("%d", &x[i]);
printf("Enter item to search:");
scanf("%d", &item);
if(bSearch(x, n, item))
printf("Item exist.");
else
printf("Item not exist.");
getch();
return 0;
}
//******************
int bSearch(int x[], const int n, int item)
{
int loc, found = 0, first = 0, last = n - 1;
while(first <= last && ! found)
loc = (first + last) / 2;
if(item < x[loc])
last = loc - 1;
else if(item > x[loc])
first = loc + 1;
else
found = 1;
}
return found;
}

powerboy2988
یک شنبه 01 بهمن 1385, 11:52 صبح
ساختمان داده ها - جستجوی خطی یا ترتیبی

برنامه ای که تعدادی عدد را در یک آرایه ذخیره کرده و عددی را در آنها به روش خطی یا ترتیبی جستجو کند.


#include "stdio.h"
#include "conio.h"
int lSearch(int [], const int, int);
int main()
{
const int n = 5;
int i, item, x[n];
clrscr();
printf("Enter %d numbers :", n);
for(i = 0; i < n; i ++)
scanf("%d", &x[i]);
printf("Enter item to search:");
scanf("%d", &item);
if(lSearch(x, n, item))
printf("Item exist.");
else
printf("Item not exist.");
getch();
return 0;
}
//******************
int lSearch(int x[], const int n, int item)
{
int loc, found = 0;
for(loc = 0; loc < n && !found; loc ++)
if(x[loc] == item)
found = 1;
return found;
}

powerboy2988
یک شنبه 01 بهمن 1385, 11:55 صبح
ساختمان داده ها - ترانهاده ماتریس اسپارس

برنامه ای که ترانهاده یک ماتریس اسپارس را حساب کند.


#include "stdio.h"
#include "conio.h"
void sTranspose(int b[5][3], int bt[5][3]);
int main()
{
int i, j, b[5][3], bt[5][3];
clrscr();
w=2;
gotoxy(1,++w);
for(i = 0; i < 5; i ++)
for(j = 0; j < 3; j ++)
{
printf("Enter b[%d][%d] :", i, j);
scanf("%d", &b[i][j]);
}
sTranspose(b, bt);
gotoxy(20,++w);
printf("Transpose of sparse matrix b: ");
gotoxy(21,++w);
for(i = 0; i < 5; i ++)
{
for(j = 0; j < 3; j ++)
printf("%5d ",bt[i][j]);
gotoxy(21,++w);
}
getch();
return 0;
}
//************
void sTranspose(int b[5][3], int bt[5][3])
{
int i, j, k;
int m = b[0][1]; //number of columns
int t = b[0][2]; //number of non zero elements
bt[0][0] = m;
bt[0][1] = b[0][0];
bt[0][2] = t;
k = 1;
for(i = 0; i < m; i ++)
for(j = 1; j <= t; j ++)
if(i ==b[j][1])
{
bt[k][0] = b[j][1];
bt[k][1] = b[j][0];
bt[k][2] = b[j][2];
k ++;
}
}

powerboy2988
یک شنبه 01 بهمن 1385, 11:57 صبح
ساختمان داده ها - ضرب دو ماتریس معمولی

برنامه ای که حاصلضرب دو ماتریس ۳*۲ و ۴*۳ را حساب کند.


#include "stdio.h"
#include "conio.h"
void multiply(int m1[][3], int m2[][4], int m3[][4]);
int main()
{
int m1[2][3], m2[3][4], m3[2][4]={0} ;
int i, j,w ;
clrscr();
//read mat1
for(i = 0 ; i < 2 ; i++)
for(j = 0 ; j<3 ;j++)
{
printf("Enter m1[%d][%d]: ",i, j);
scanf("%d", &m1[i][j]) ;
}
//read mat2
for(i = 0 ; i < 3 ; i++)
for(j = 0 ; j < 4 ; j++)
{
printf("Enter m2[%d][%d]: ",i, j);
scanf("%d", &m2[i][j]) ;
}
multiply(m1, m2, m3);
printf(" press a key...");
getch();
clrscr();
w=10;
gotoxy(1,w);
printf(" Produc of mat1 & mat2 is : ") ;
gotoxy(1,++w);
for(i = 0 ;i < 2 ; i++) {
for(j = 0 ; j < 4 ; j++)
printf("%5d", m3[i][j]) ;
gotoxy(1,++w);
}
getch();
return 0;
}
//*******************
void multiply(int m1[][3], int m2[][4], int m3[][4])
{
int i, j, k;
//multiply mat1 by mat2
for(i = 0 ; i < 2 ; i++)
for(j = 0 ; j < 4 ; j++)
for(k = 0 ;k < 3 ; k ++)
m3[i][j] = m3[i][j] + m1[i][k]* m2[k][j];
}

powerboy2988
یک شنبه 01 بهمن 1385, 11:59 صبح
ساختمان داده ها - ترانهاده ماتریس معمولی

برنامه ای که ترانهاده ماتریس معمولی را حساب کند.


#include "stdio.h"
#include "conio.h"
void transpose(int m[3][4], int t[4][3]);
int main()
{
int m[3][4], t[4][3] ;
int i, j,w ;
clrscr();
gotoxy(1,2);
//read m[3][4]
for(i = 0 ; i < 3 ; i++)
for(j = 0 ; j < 4 ;j++)
{
printf("Enter m1[%d][%d]: ",i, j);
scanf("%d", &m[i][j]) ;
}
transpose(m, t);
printf(" press a key...");
getch();
w=20;
gotoxy(1,++w);
printf("Transpose of m is : ") ;
gotoxy(1,++w);
for(i = 0 ;i < 4 ; i++)
{
for(j = 0 ; j < 3 ; j++)
printf("%5d", t[i][j]) ;
gotoxy(1,++w); ;
}
getch();
return 0;
}
//*******************
void transpose(int m[3][4], int t[4][3])
{
int i, j;
for(i = 0 ; i < 4 ; i++)
for(j = 0 ; j < 3 ; j++)
t[i][j] = m[j][i];
}

powerboy2988
یک شنبه 01 بهمن 1385, 12:02 عصر
معکوس آرایه

برنامه ای که تعدادی عدد را در آرایه ای ذخیره کرده و سپس معکوس کند و چاپ نماید.


//Makoose Araye
#include<stdio.h>
#include<conio.h>
void main()
{
clrscr();
gotoxy(1,10);
int a[10],i,n,temp;
printf("enter the length of array:");
scanf("%d",&n);
gotoxy(1,12);
for(i=0;i<n;i++){
printf("enter your number:");
scanf("%d",&a[i]);
}
for(i=0;i<n/2;i++){
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
getch();}

powerboy2988
یک شنبه 01 بهمن 1385, 12:03 عصر
معکوس آرایه

برنامه ای که تعدادی عدد را در آرایه ای ذخیره کرده و سپس معکوس کند و چاپ نماید.



//Makoose Araye
#include<stdio.h>
#include<conio.h>
void main()
{
clrscr();
gotoxy(1,10);
int a[10],i,n,temp;
printf("enter the length of array:");
scanf("%d",&n);
gotoxy(1,12);
for(i=0;i<n;i++){
printf("enter your number:");
scanf("%d",&a[i]);
}
for(i=0;i<n/2;i++){
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
getch();}

powerboy2988
یک شنبه 01 بهمن 1385, 12:05 عصر
ضرب اسپارس

برنامه ای که دو ماتریس اسپارس را در هم ضرب کند.


// Mul Matrix sparse A,B
#include<stdio.h>
#include<conio.h>
void main(){
int A[5][2],B[5][2],C[25][2],i,j,k,n,m,s,w;
clrscr();
w=2;
gotoxy(1,w);
printf("please enter tedade Jomalate f(x1) ");
scanf("%d",&n);
w=w+2;
gotoxy(1,w);
printf("Enter f(x)1:");
printf(" first Enter zarib , Next Enter tavan");
w=w+2;
gotoxy(1,w);
for(i=0;i<n;i++)
for(j=0;j<2;j++)
{ printf(" f(x1) [%d][%d]: ",i,j);
scanf("%d",&A[i][j]); }
w=w+4;
printf("press a key...");
getch();
clrscr();
w=2;
gotoxy(1,w);
printf("please enter tedade Jomalate f(x2) ");
w=w+2;
gotoxy(1,w);
scanf("%d",&m);
w=w+2;
gotoxy(1,w);
printf("Enter f(x)2:");
printf(" first Enter zarib , Next Enter tavan");
w=w+4;
gotoxy(1,w);
for(i=0;i<m;i++)
for(j=0;j<2;j++)
{
printf(" f(x2) [%d][%d]: ",i,j);
scanf("%d",&B[i][j]);
}
k=m*n;
s=0;
for(i=0;i<k;i++)
for(j=0;j<2;j++)
C[i][j]=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
C[s][1]=A[i][1]+B[j][1];
C[s][0]=A[i][0]*B[j][0];
if(C[s][1]+C[s][0])
s++;
}
printf("press a key...");
getch();
clrscr();
w=10;
gotoxy(1,10);
printf("Mul Matrix A , B is : ");
for(i=0;i<s;i++)
for(j=0;j<2;j++)
{
w++;
gotoxy(1,w);
printf(" c[%d][%d]: %d",i,j,C[i][j]);
}
getch();
}

powerboy2988
یک شنبه 01 بهمن 1385, 12:06 عصر
ساختمان داده ها - ماتریس پایین مثلثی

برنامه ای که یک آرایه پایین مثلثی را به آرایه خطی تبدیل کند.


// Convert Matrise paeen Mosallasi to Khatti
// Source of Program is:
#include<stdio.h>
#include<conio.h>
main(){
int i,j,k,a[4][4],x[10];
k=0;
a[0][0]=1;
a[0][1]=0;
a[0][2]=0;
a[0][3]=0;
a[1][0]=2;
a[1][1]=3;
a[1][2]=0;
a[1][3]=0;
a[2][0]=4;
a[2][1]=5;
a[2][2]=6;
a[2][3]=0;
a[3][0]=7;
a[3][1]=8;
a[3][2]=9;
a[3][3]=1;
for (i=0;i<4;i++)
for (j=0;j<=i;j++)
{
x[k]=a[i][j];
k++;
}
clrscr();
gotoxy(1,10);
printf(" Matis is :");
gotoxy(1,12);
printf(" 1 0 0 0");
gotoxy(1,14);
printf(" 2 3 0 0");
gotoxy(1,16);
printf(" 4 5 6 0");
gotoxy(1,18);
printf(" 7 8 9 1");
gotoxy(10,22);
for(i=0;i<10;i++)
printf("%d ",x[i]);
getch();}

powerboy2988
یک شنبه 01 بهمن 1385, 12:08 عصر
ساختمان داده ها - محاسبه میانگین وانحراف معیار

برنامه ای که با استفاده از فرمول میانگین و انحراف معیار ده عدد را محاسبه کند و ارزش هر عدد را نمایش دهد.

فرمول محاسبه میانگین برابر است با مجموع اعداد تقسیم بر تعدادشان و فرمول انحراف معیار نیز برابر است با جذر میانگین اختلاف هر عدد با میانگین به توان دو


#include<stdio.h>
#include<conio.h>
#include<math.h>
main()
{
int w,i;
float sum,m,s,x[10],t,q,l1,l2,l3,l4;
clrscr();
w=10;
gotoxy(1,w);
printf("Enter 10 Numbers:");
w++;
gotoxy(1,w);
for(i=0;i<10;i++)
scanf("%f",&x[i]);
printf(" press a ket to continue...");
getch();
clrscr();
w++;
gotoxy(1,w);
for(i=0;i<10;i++)
sum+=x[i];
m=(float)(sum/10);
printf(" Miangin is %5.2f",m);
for(i=0;i<10;i++)
t+=pow((x[i]-m),2);
q=sqrt((float)(t/10));
w++;
gotoxy(1,w);
printf(" Enheraf Meyar is %5.2f",q);
l1=m-(1.5*q);
l2=m-(0.5*q);
l3=m+(0.5*q);
l4=m+(1.5*q);
w++;
gotoxy(1,w);
for(i=0;i<10;i++){
w++;
gotoxy(1,w);
if(x[i]<l1) printf(" %5.2f : F",x[i]);
else
if(x[i]>l1 && x[i]<l2) printf(" %5.2f : D",x[i]);
else
if(x[i]>l2 && x[i]<l3) printf(" %5.2f : C",x[i]);
else
if(x[i]>l3 && x[i]<l4) printf(" %5.2f : B",x[i]);
else
if(x[i]>l4) printf(" %5.2f : A",x[i]); }
getch();
}

aidinwashere
یک شنبه 01 بهمن 1385, 22:18 عصر
با تشکر از دوست عزیزمون.
من فقط میترسم این برنامه ها جنبه آموزشی نداشته باشن و به سیستم کپی-پیست کمک کنن.
بازم ممنون.
مطمئنا نیت شما خیر هست و میشه از این برنامه ها هردو استفاده خوب و بد رو برد.

mortez maya
شنبه 07 بهمن 1385, 20:09 عصر
ممنون دوست عزیز اگه یه چند تا برنامه هم در مورد درختها و گرافها می گذاشتید آموزشی تر می شد./

sjj
دوشنبه 09 بهمن 1385, 01:25 صبح
واقعا از شما ممنونم.امیدوارم الگوریتم های پیچیده تر رو هم مطرح کنید.
پیشنهاد : بهتر نیست به جای قرار دادن کد ، الگوریتم ها رو توضیح بدیم که به قول دوستمون به سیستم Copy & Paste کمک نشه؟!
در ضمن ، از این که با پستم توالی کارتون رو خراب کردم عذر می خوام.

mortez maya
جمعه 13 بهمن 1385, 16:03 عصر
شما تا چه حد برنامه رو تکمیل کردین ؟
اونچه که مسلمه باید از یک پشته استفاده کنید./

sjj
جمعه 13 بهمن 1385, 20:12 عصر
برای نوشتن برنامه تبدیل postfix , prefix به infix کسی می تونه کمک کنه
تو کتاب ساختمان داده ها (حمیدرضا مقسمی) می تونید جوابتون رو پیدا کنید.

someCoder
جمعه 13 بهمن 1385, 20:19 عصر
برای نوشتن برنامه تبدیل postfix , prefix به infix کسی می تونه کمک کنه

اینو ببین. (http://www.barnamenevis.org/forum/showthread.php?p=304477#post304477)توش تبدیل عبارت infix به postfix هم استفاده کردم.

aliahmadpoor
دوشنبه 09 خرداد 1390, 22:23 عصر
برای نوشتن برنامه
الگوريتم ارزيابي عبارت پسوندي با استفاده از پشته کسی میتونه کمک کنه؟