mhbitarafan
دوشنبه 24 تیر 1392, 22:14 عصر
سلام دوستان
من یه برنامه کوچیک به زبان c دارم باید تا فردا صبح تبدیلش کنم به c++ و به عنوان پروژه تحویل استادمون بدم ... (درس طراحی الگوریتم ... موضوع : روش تقسیم و حل)
لطفا اگه میتونید این تبدیل رو برام انجام بدید یا حداقل راهنماییم کنید ...
ممنون
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
static int h;
static int fill=1;
int pw(int n,int x)
{
int i;
int y=1;
for(i=1;i<=x;i++)
y=y*n;
return y;
}
main()
{
int **a,i,m,j,n,x=1;
printf("Enter the value of n\n");
scanf("%d",&n);
x=pw(2,n);
h=n-3;
printf("Tromino Puzzle :: %dx%d \n",x,x);
a=(int**)malloc(sizeof(int)*x*x);
for(i=0;i<x;i++)
a[i]=(int*)malloc(sizeof(int)*x);
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
{
a[i][j]=0;
}
}
printf("Enter the i & j value of empty block\n");
scanf("%d%d",&i,&j);
while(i>x || j>x)
{
printf("Enter correct i & j values\n");
scanf("%d%d",&i,&j);
}
a[i][j]=10000;
tromino(1,a,n);
a[i][j]=0;
for(i=0;i<x;i++)
{
printf("\n\n");
for(j=0;j<x;j++)
{
printf("%d\t",a[i][j]);
}
}
printf("\n\n");
}
tromino(int br,int **k,int n)
{
int **b,i,j,x,flag1=0,flag2=0,flag3=0,flag4=0,c,d;
x=pw(2,n);
b=(int**)malloc(sizeof(int)*(x/2)*(x/2));
for(i=0;i<(x/2);i++)
b[i]=(int*)malloc(sizeof(int)*(x/2));
for(i=0;i<(x/2);i++)
for(j=0;j<(x/2);j++)
{
if(k[i][j]!=0)
flag1=1;
}
for(i=(x/2);i<x;i++)
for(j=0;j<(x/2);j++)
{
if(k[i][j]!=0)
flag2=1;
}
for(i=0;i<(x/2);i++)
for(j=(x/2);j<x;j++)
{
if(k[i][j]!=0)
flag3=1;
}
for(i=(x/2);i<x;i++)
for(j=(x/2);j<x;j++)
{
if(k[i][j]!=0)
flag4=1;
}
/*printf("%d%d%d%d",flag1,flag2,flag3,flag4);*/
if(flag1==1)
{
k[(x/2)][(x/2)]=fill;
k[((x/2)-1)][(x/2)]=fill;
k[(x/2)][((x/2)-1)]=fill;
fill++;
}
else if(flag2==1)
{
k[(x/2)][(x/2)]=fill;
k[((x/2)-1)][(x/2)]=fill;
k[((x/2)-1)][((x/2)-1)]=fill;
fill++;
}
else if(flag3==1)
{
k[(x/2)][(x/2)]=fill;
k[(x/2)][((x/2)-1)]=fill;
k[((x/2)-1)][((x/2)-1)]=fill;
fill++;
}
else
{
k[(x/2)][((x/2)-1)]=fill;
k[((x/2)-1)][(x/2)]=fill;
k[((x/2)-1)][((x/2)-1)]=fill;
fill++;
}
if(br<=(n+h))
{
for(i=0;i<(x/2);i++)
for(j=0;j<(x/2);j++)
{
b[i][j]=k[i][j];
}
tromino((br+1),b,(n-1));
for(i=0;i<(x/2);i++)
for(j=0;j<(x/2);j++)
{
k[i][j]=b[i][j];
}
for(c=0,i=(x/2);i<x&&c<(x/2);i++,c++)
for(j=0;j<(x/2);j++)
b[c][j]=k[i][j];
tromino((br+1),b,(n-1));
for(c=0,i=(x/2);i<x&&c<(x/2);i++,c++)
for(j=0;j<(x/2);j++)
k[i][j]=b[c][j];
for(i=0;i<(x/2);i++)
for(d=0,j=(x/2);j<x&&d<(x/2);j++,d++)
b[i][d]=k[i][j];
tromino((br+1),b,(n-1));
for(i=0;i<(x/2);i++)
for(d=0,j=(x/2);j<x&&d<(x/2);j++,d++)
k[i][j]=b[i][d];
for(c=0,i=(x/2);i<x&&c<(x/2);i++,c++)
for(d=0,j=(x/2);j<x&&d<(x/2);j++,d++)
b[c][d]=k[i][j];
tromino((br+1),b,(n-1));
for(c=0,i=(x/2);i<x&&c<(x/2);i++,c++)
for(d=0,j=(x/2);j<x&&d<(x/2);j++,d++)
k[i][j]=b[c][d];
}
}
من یه برنامه کوچیک به زبان c دارم باید تا فردا صبح تبدیلش کنم به c++ و به عنوان پروژه تحویل استادمون بدم ... (درس طراحی الگوریتم ... موضوع : روش تقسیم و حل)
لطفا اگه میتونید این تبدیل رو برام انجام بدید یا حداقل راهنماییم کنید ...
ممنون
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
static int h;
static int fill=1;
int pw(int n,int x)
{
int i;
int y=1;
for(i=1;i<=x;i++)
y=y*n;
return y;
}
main()
{
int **a,i,m,j,n,x=1;
printf("Enter the value of n\n");
scanf("%d",&n);
x=pw(2,n);
h=n-3;
printf("Tromino Puzzle :: %dx%d \n",x,x);
a=(int**)malloc(sizeof(int)*x*x);
for(i=0;i<x;i++)
a[i]=(int*)malloc(sizeof(int)*x);
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
{
a[i][j]=0;
}
}
printf("Enter the i & j value of empty block\n");
scanf("%d%d",&i,&j);
while(i>x || j>x)
{
printf("Enter correct i & j values\n");
scanf("%d%d",&i,&j);
}
a[i][j]=10000;
tromino(1,a,n);
a[i][j]=0;
for(i=0;i<x;i++)
{
printf("\n\n");
for(j=0;j<x;j++)
{
printf("%d\t",a[i][j]);
}
}
printf("\n\n");
}
tromino(int br,int **k,int n)
{
int **b,i,j,x,flag1=0,flag2=0,flag3=0,flag4=0,c,d;
x=pw(2,n);
b=(int**)malloc(sizeof(int)*(x/2)*(x/2));
for(i=0;i<(x/2);i++)
b[i]=(int*)malloc(sizeof(int)*(x/2));
for(i=0;i<(x/2);i++)
for(j=0;j<(x/2);j++)
{
if(k[i][j]!=0)
flag1=1;
}
for(i=(x/2);i<x;i++)
for(j=0;j<(x/2);j++)
{
if(k[i][j]!=0)
flag2=1;
}
for(i=0;i<(x/2);i++)
for(j=(x/2);j<x;j++)
{
if(k[i][j]!=0)
flag3=1;
}
for(i=(x/2);i<x;i++)
for(j=(x/2);j<x;j++)
{
if(k[i][j]!=0)
flag4=1;
}
/*printf("%d%d%d%d",flag1,flag2,flag3,flag4);*/
if(flag1==1)
{
k[(x/2)][(x/2)]=fill;
k[((x/2)-1)][(x/2)]=fill;
k[(x/2)][((x/2)-1)]=fill;
fill++;
}
else if(flag2==1)
{
k[(x/2)][(x/2)]=fill;
k[((x/2)-1)][(x/2)]=fill;
k[((x/2)-1)][((x/2)-1)]=fill;
fill++;
}
else if(flag3==1)
{
k[(x/2)][(x/2)]=fill;
k[(x/2)][((x/2)-1)]=fill;
k[((x/2)-1)][((x/2)-1)]=fill;
fill++;
}
else
{
k[(x/2)][((x/2)-1)]=fill;
k[((x/2)-1)][(x/2)]=fill;
k[((x/2)-1)][((x/2)-1)]=fill;
fill++;
}
if(br<=(n+h))
{
for(i=0;i<(x/2);i++)
for(j=0;j<(x/2);j++)
{
b[i][j]=k[i][j];
}
tromino((br+1),b,(n-1));
for(i=0;i<(x/2);i++)
for(j=0;j<(x/2);j++)
{
k[i][j]=b[i][j];
}
for(c=0,i=(x/2);i<x&&c<(x/2);i++,c++)
for(j=0;j<(x/2);j++)
b[c][j]=k[i][j];
tromino((br+1),b,(n-1));
for(c=0,i=(x/2);i<x&&c<(x/2);i++,c++)
for(j=0;j<(x/2);j++)
k[i][j]=b[c][j];
for(i=0;i<(x/2);i++)
for(d=0,j=(x/2);j<x&&d<(x/2);j++,d++)
b[i][d]=k[i][j];
tromino((br+1),b,(n-1));
for(i=0;i<(x/2);i++)
for(d=0,j=(x/2);j<x&&d<(x/2);j++,d++)
k[i][j]=b[i][d];
for(c=0,i=(x/2);i<x&&c<(x/2);i++,c++)
for(d=0,j=(x/2);j<x&&d<(x/2);j++,d++)
b[c][d]=k[i][j];
tromino((br+1),b,(n-1));
for(c=0,i=(x/2);i<x&&c<(x/2);i++,c++)
for(d=0,j=(x/2);j<x&&d<(x/2);j++,d++)
k[i][j]=b[c][d];
}
}