求牛人解答

SouKen 2014-05-07 02:15:29
#include<string.h>
#include <memory.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#define PI 3.1415926
int N;
void DCT(double *f,double *F)
{
int n,m,x;
double *dTemp = new double[N*N];//中间矩阵
double *coff = new double[N*N];//变换系数
coff[0] = 1/sqrt(N);
for( m=1; m<N; m++ )
coff[m] = sqrt(2)/sqrt(N);
memset( dTemp, 0, sizeof(double)*N*N );
memset( F, 0, sizeof(double)*N*N );
//一维变换
for(n=0;n<N;n++)
for(m=0;m<N;m++)
for(x=0;x<N;x++)
dTemp[m*N+n] += f[x*N+n] * coff[m] * cos( (2*x+1) * PI * m/(2*N) );
//第二次一维变换
for(m=0;m<N;m++)
for(n=0;n<N;n++)
for(x=0;x<N;x++)
F[m*N+n] += dTemp[m*N+x] * coff[n] * cos( (2*x+1) * PI * n/(2*N) );
delete []dTemp;
delete []coff;
}
void iDCT(double *f,double *F)
{
int m,y,x;
double *dTemp=new double[N*N];//中间矩阵
double *coff=new double[N*N];//变换系数
coff[0]=1/sqrt(N);
for(m=1;m<N;m++)
coff[m]=sqrt(2)/sqrt(N);
memset(dTemp,0,sizeof(double)*N*N);
memset(F,0,sizeof(double)*N*N);
//一维变换
for(x=0;x<N;x++)
for(y=0;y<N;y++)
for(m=0;m<N;m++)
dTemp[x*N+y]+=F[x*N+m]*coff[m]*cos((2*y+1)*PI*m/(2*N));
//第二次一维变换
for(y=0;y<N;y++)
for(x=0;x<N;x++)
for(m=0;m<N;m++)
F[x*N+y]+=dTemp[m*N+y]*coff[m]*cos((2*x+1)*PI*m/(2*N));
delete []dTemp;
delete []coff;
}
void main()
{
char chn[500],sd[500]; //存储'/0'
int i=0,j=0,nLen,max,m,n,w1,k=0;
float w;
double bt[500], ew[100][100];
scanf("%s",chn); //这里输入汉字
nLen=strlen(chn);
for(i=0;i<nLen;i=i+2)
{
bt[i]=(chn[i]&0xff)*1000+(chn[i+1]&0xff);
printf("%f\n",bt[i]);//输出对应的数字,与0xff做且运算是为了保证输出正数
}
for(m=1;m<nLen;m++)
{
bt[m]=bt[2*m];
}
w=sqrt(nLen);
w1=sqrt(nLen);
if(w>w1)
w=w1;
printf("%f\n",w);
for(i=0;i<w;i++)
{
for(j=0;j<w;j++)
{
if(((i+1)*(w+1)+j)<=nLen)
ew[i][j]=bt[k];
else
ew[i][j]=0;
k=k+1;
printf("%f\t",ew[i][j]);
}
printf("\n");
}
//汉字输入部分以及一位数组变二维数组部分
long L=5;
N=w;
double *f=new double[N*N];//初始矩阵
double *F=new double[N*N];//变换后输出矩阵
memset(F,0,sizeof(double)*N*N);//初始化为0
printf("初始矩阵:\n");
j=0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
f[i*j]=ew[i][j];
printf("%lf\t",f[i*j]);
}
printf("\n");
}
//输出初始矩阵
for(i=0;i<=L;i++)
DCT(f,F);//变换
//输出变换后矩阵
printf("变换后:\n");
for(i=1;i<=N*N;i++)
{
printf("%f\t",F[i-1]);
if(i%N==0)
printf("\n");
}
for(i=0;i<L;i++)
iDCT(f,F);
//输出反变换后矩阵
printf("反变换后:\n");
for(i=1;i<=N*N;i++)
{printf("%f\t",f[i-1]);
if(i%N==0)
printf("\n");
}
}




这是我的毕业设计代码,想把ew数组的数据存入f数组中,然后进行DCT变换,可是这么输出总是错的,求大神指点。
...全文
133 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你的思路就有问题
SouKen 2014-05-08
  • 打赏
  • 举报
回复
引用 1 楼 ilikehigame 的回复:
你的思路就有问题
麻烦具体说一下好不,我是在网上找了一个DCT变换的程序,然后向把自己编的文字转化成代码的数组带入到DCT变换的矩阵里面,可是发现带入之后只能带入最后一行。求指导。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧