| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 939 人关注过本帖
标题:帮忙帮c++的东西改为c语言吧
只看楼主 加入收藏
密码学菜鸟
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-4-15
收藏
 问题点数:0 回复次数:4 
帮忙帮c++的东西改为c语言吧
/*
  Name:  梅西迭代算法的实现              万分感谢
  Copyright: 2003(C)
  Author:  徐岩柏
  Date: 31-10-03 16:09
  Description: 该问题是线性移位寄存器的综合问题提出的,给定一个N长的
               二元序列,如何求出产生这一序列的级数最小的线性移位寄存
               器,即最短的线性移位寄存器
*/

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <fstream>
using namespace std;

int main(int argc, char *argv[])
{
  typedef vector<bool> MyArray; file://定义自己的数据类
  MyArray a;   file://状态数组 ,用来保存给定的m序列?
  vector<int>l;   file://线性移位寄存器的级数数组
  MyArray temp;
  vector<MyArray> f; file://为线性移位寄存器对应的多项式
  int N =0;
  ifstream infile("input.txt"); file://从文件中读取数据
  ofstream outfile("output.txt"); file://把结果写入文件中。
  if(!infile)
  {
    cout << "Aata file input.txt is not ready! Please check it"<<endl;
    exit (-1);
  }
  string strTemp;
  infile>>strTemp; file://读入N
 // cout << strTemp <<endl;
  N = atoi(strTemp.c_str());
  infile>>strTemp; file://读入序列
  for( int i = 0 ;i<N; ++i)
  {
     a.push_back(strTemp[i]=='1'); file://把序列保存
  }
 file://cout << strTemp <<endl;
 int n=0;
 l.push_back(0);
 temp.push_back(1); file://形成f0
 f.push_back(temp); file://把f0加到f数组中。
 do{
     int dn =0;
     for (int i = 0;i<=l[n];++i)
     {
          dn += f[n][i]*a[n-i];   file://计算dn
     }
     dn = dn % 2; file://取余
  //   cout <<"d"<<n<<"= "<<dn <<endl;
     int isum = 0;
     for (int i =0;i<=n ;++i)
     {
          isum +=l[i]; file://判定是不是所有的ln都等于0就是把所有的ln加起来看是不是零
     }
     if( dn == 0) file://如果dn =0
     {
          f.push_back(f[n]); file://fn+1 = fn
          l.push_back(l[n]); file://ln+1 = ln
     }
     else if (!isum) file://所有的ln都是零
     {
          temp.clear();
          for(int i =0;i<n+2;++i)
          {
               temp.push_back(0);
          }
          temp[0] = 1;
          temp[n+1] = 1;
          f.push_back(temp);
          l.push_back(n+1);
     }
     else  file://lm<lm+1 = ...=ln
     {
          int m =0;
          for (int i = n;i>=0; --i)
          {
               if(l[i]<l[n])
               {
                  m= i;  file://找到m
                  break;
               }
          }//end for
          temp.clear();//把临时的目的数组清空
          for (int i =0;i<n-m;++i)
          {
               temp.push_back(0); file://fm乘x^n-m次方就是在多项式数组前面插入n-m个零
          }
          temp.insert(temp.end(),f[m].begin(),f[m].end()); file://构造fm*x^n-m
          vector<bool> ft; file://用来保存两个多项式相加的结果
          int len = max(temp.size(),f[n].size()); file://取出多项式系数最大值
          ft.insert(ft.begin(),len,0); file://把目的数组填入len个零初始化
          for (int i = 0 ;i<temp.size(); ++i)
          {
              ft[i] = temp[i]; file://先把temp的值拷贝到ft目的数组中。
          }
          for (int i = 0 ;i<f[n].size(); ++i) file://把两个多项式加到一起
          {
              if(ft[i] != f[n][i]) file://如果多项式的对应系数不等,加后系数是1
                   ft[i] = 1;
              else
                   ft[i] = 0;  file://如果多项式的对应系数相等,加后系数是0
          }         
          f.push_back(ft); file://f[n+1] = ft
          len = max(l[n],n+1-l[n]);
          l.push_back(len);//找L(n+1)=max(ln,n+1-ln)
     }
  /*   cout <<"f(x)=1" ; file://如需要可以输出中间结果
     for (int i=1; i<f[n].size();++i) file://常数项已经是1了,故忽略第一个
    {
       if (f[n][i])
           cout<<"+X^"<<i;
     }
     cout <<endl;
      getchar();
    */  
     if(n>=N-1) break;
     ++n;
 }while(1);
 if(outfile) file://输出文件合法
 {
      outfile <<"ln="<<l.back()<<endl; file://输出ln
      outfile <<"f(x)=1" ;  file://输出结果多项式,并赋常数项为1  
      for (int i=1; i<f[N].size();++i) file://常数项已经是1了,故忽略第一个
      {
        if (f[N][i])
             outfile<<"+X^"<<i;
      }
      outfile<< endl;
      cout <<"结果已经同时写入到output.txt文件中了。"<<endl;
 }
 cout << "本算法的最终结果是:"<<endl;     
 cout <<"ln="<<l.back()<<endl; file://输出ln
 cout <<"f(x)=1" ;  file://输出结果多项式,并赋常数项为1  
 for (int i=1; i<f[N].size();++i) file://常数项已经是1了,故忽略第一个
 {
      if (f[N][i])
            cout<<"+X^"<<i;
 }
 cout<< endl<<endl<<endl;
 cout << "请按任意健退出!" ;
 getchar();
 return 0;
}
搜索更多相关主题的帖子: c语言 include 线性 vector int 
2008-05-04 11:35
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
不是简单的事,还要自己设计VECTOR

雁无留踪之意,水无取影之心
2008-05-04 11:45
密码学菜鸟
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-4-15
收藏
得分:0 
[bo]以下是引用 [un]PcrazyC[/un] 在 2008-5-4 11:45 的发言:[/bo]

不是简单的事,还要自己设计VECTOR

是呀 所以才请教你这样的高手
2008-05-04 11:53
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
请楼主自己理解算法后重写

[color=white]
2008-05-04 12:07
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
改写stl的vector?只能重写了..c不支持类的...

学习需要安静。。海盗要重新来过。。
2008-05-04 12:10
快速回复:帮忙帮c++的东西改为c语言吧
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013328 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved