⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smallwe001view.cpp

📁 在AVR上实现jpeg的解码
💻 CPP
字号:
// smallwe001View.cpp : implementation of the CSmallwe001View class
//

#include "stdafx.h"
#include "smallwe001.h"

#include "smallwe001Doc.h"
#include "smallwe001View.h"
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<stdio.h>
#include"math.h"
#define N 4608
#define TRUE 1
#define FALSE 0

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// CSmallwe001View

IMPLEMENT_DYNCREATE(CSmallwe001View, CView)

BEGIN_MESSAGE_MAP(CSmallwe001View, CView)
	//{{AFX_MSG_MAP(CSmallwe001View)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSmallwe001View construction/destruction

CSmallwe001View::CSmallwe001View()
{
	// TODO: add construction code here

}

CSmallwe001View::~CSmallwe001View()
{
}

BOOL CSmallwe001View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CSmallwe001View drawing

void CSmallwe001View::OnDraw(CDC* pDC)
{
	CSmallwe001Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

 void gauss(float *p[],int *s_exist);
  void pivot(float *p[N],
	   int i , int *piv_found);
  void gen_G(float *p[N],float g[][2*N]) ;
  void xch(char c[],float aug[][2*N]);
  void xch2(float *g[],int f[6*N]);

float aug[N][2*N],g[N][2*N]; /*aug作为原始的数组,g为生成的树组*/
char *arr;             /*定义指针作数组去应用数据*/
char arry[4*6*N];        /*定义arr的初地址*/

int f[6*N];                /*得到最后结果中1的列数传给xch函数*/
  int s_exist;
  int  i;
float *p[N];               /*定义一指针数组作为数据的主单元*/

/*对文件库中的数据进行引用*/
FILE *in;
FILE *out;
arr=arry;

 if((in=fopen("data.txt","r"))==NULL)
   {
    exit(0);
   }
 while(!feof(in))
    *(arr++)=fgetc(in);
fclose(in);
 *(++arr)='\0';

/*程序开始*/
xch(arr,aug);
  for(i=0;i<N;++i)
	 p[i]=aug[i];

  gauss(p,&s_exist);

gen_G(p,g);


for(i=0;i<N;++i)
p[i]=g[i];

xch2(p,f);

arr=arry;

 if((out=fopen("data000.txt","w"))==NULL)
   {
    exit(0);
   }
for(i=0;i<10;++i)
    fputc('c',out);

 fclose(out);
}


/*gauss子程序*/
void gauss(float *p[N],int *s_exist)
{
int i,j,k,m,n;
float r_rece,xmult;
*s_exist=TRUE;
for(k=0;*s_exist&&k<(N-1);++k)
   {

    pivot(p,k,s_exist);
/*    for(m=0;m<N;++m)
	{for(n=0;n<2*N;++n)
	  printf("%6.2f",p[m][n]);
	 printf("\n");}
	 printf("%d\n",*s_exist);  */

    if(*s_exist)    /*主元素行标准化*/
	{r_rece=1.0/p[k][k+N];
	 p[k][k+N]=1.0;
         for(j=0;j<N;++j)
	   p[k][j]*=r_rece;
	 for(j=k+1;j<N;++j)
	   p[k][j+N]*=r_rece;
	 /*消去主元素下面的系数*/
	 for(i=k+1;i<N;++i)
	    {if(p[i][k+N])
	      {xmult=-p[i][k+N];
	       p[i][k+N]=0;
	       for(j=0;j<N;j++)
	         p[i][j]+=xmult*p[k][j];
	       for(j=k+1;j<N;++j)
	         p[i][j+N]+=xmult*p[k][j+N];
               }
             }
	/*消去主元素上面的系数*/
	 for(i=k-1;i>=0;--i)
	   {if(p[i][k+N])
	     {xmult=-p[i][k+N];
	      p[i][k+N]=0;
	      for(j=0;j<N;j++)
	        p[i][j]+=xmult*p[k][j];
	      for(j=k+1;j<N;++j)
	        p[i][j+N]+=xmult*p[k][j+N];
             }
	    }
	}
   }

/*若最后系数为零,则没有唯一解*/
if(p[N-1][2*N-1]==0)
   *s_exist=FALSE;
else if(*s_exist)  /*最后一行标准化*/
  {r_rece=1.0/p[N-1][2*N-1];
   p[N-1][2*N-1]=1.0;
   for(i=0;i<N;++i)
     p[N-1][i]*=r_rece;
   for(i=N-2;i>=0;--i)
	{if(p[i][2*N-1])
	   {xmult=-p[i][2*N-1];
	    p[i][2*N-1]=0;
            for(j=0;j<N;++j)
	       p[i][j]+=xmult*p[N-1][j];
           }
	}

  }
}

/*gauss_pivot子程序*/
void pivot(float *p[],
           int i , int *piv_found)
{float xmax;
 int j=0,k=0;
 float *exchange;
/*找出最大主元素*/
 xmax=fabs(p[i][i+N]);
 printf("%f\n",xmax);
 for(j=i+1;j<N;++j)
  {
  if (fabs(p[j][i+N])>xmax)
     {
     xmax=fabs(p[j][i+N]);
      k=j;
   
     }
  }
  if(xmax==0)
        *piv_found=FALSE;
  else
	{exchange=p[k];
	 p[k]=p[i];
	 p[i]=exchange;
        }
}

void gen_G(float *p[N],float g[][2*N])
{int i,j;
 for(i=0;i<N;++i)
   {   for(j=0;j<N;++j)
	{ g[i][j]=0;
	  g[i][j+N]=p[j][i];
	}
      g[i][i]=1;
   }
}

#define M 6

void xch(char c[],float aug[][2*N])
{
 char *p;
 int test[6*N],i,k,j,sum,b;

 p=c;
 for(i=0;i<N;++i)
   { j=0;
     while(*p!=32&&*p!='\0')
        {++p;
	 ++j;
        }
     b=1;
     for(k=1,b=1,sum=0;k<=j;++k)
	{sum+=((*(p-k)-48)*b);
	 b=b*10;
        }
     test[i]=sum-1;
     ++p;
   }
  for(i=0;i<N;++i)
      for(j=0;j<2*N;++j)
          aug[i][j]=0;
 for(i=0;i<N;++i)
   for(j=0;j<M;++j)
      aug[i][test[6*i+j]]=1;
}

void xch2(float *g[N],int f[6*N])
{int i,j,k=0;
  for(i=0;i<N;++i)
      for(j=0;j<2*N;++j)
	if(g[i][j]==1)
          {f[k]=j;
           ++k;
          }
}

/////////////////////////////////////////////////////////////////////////////
// CSmallwe001View printing

BOOL CSmallwe001View::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CSmallwe001View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CSmallwe001View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CSmallwe001View diagnostics

#ifdef _DEBUG
void CSmallwe001View::AssertValid() const
{
	CView::AssertValid();
}

void CSmallwe001View::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CSmallwe001Doc* CSmallwe001View::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSmallwe001Doc)));
	return (CSmallwe001Doc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSmallwe001View message handlers

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -