| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2241 人关注过本帖
标题:这简单的代码怎翻译成C语言?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
先給你一個初步的模型,看自己能不能把後續的完成了,不行再説。
程序代码:
#include <iostream>
#include <cstdlib>
#include <vector>
#include <conio.h>

const size_t Max_Size = 100;

struct PinInfo
{
    char PinName[Max_Size];
    char PinPoF[1];
    float LO_LIMIT;
    float HI_LIMIT;
    float LO_SPEC;
    float HI_SPEC;
    float PinResult;
    char UNITS[1];
};

struct BIN
{
    short int SoftBin;
    short int HwardBin;
};

struct IC
{
    std::vector<PinInfo> ICData;
    char ItemType[1];
    int PinNum;
    int PinTestTime;
    int ICNumber;
    short int X;
    short int Y;
};

struct Site
{
    std::vector<IC> SiteData;
    std::vector<BIN> SiteBin;
    char SubTestName[Max_Size];
};

struct SubTest
{
    std::vector<Site> SubTestData;
};

struct Flow
{
    std::vector<SubTest>* FlowData;
};

void Pause(const char* message);

int main(int argc, char* argv[])
{
    std::vector<Flow>* ProjectD = new std::vector<Flow>(2);
    std::cout << ProjectD->size() << std::endl;
    for each (Flow p in *ProjectD)
    {
        p.FlowData = new std::vector<SubTest>(10);
        std::cout << p.FlowData->size() << std::endl;
    }

    Pause("Press any key to continue...");
    return EXIT_SUCCESS;
}

void Pause(const char* message)
{
    if (message == NULL)
    {
        message = "Press any key to continue...";
    }
    std::cout << std::endl << message;
    _getch();
}

/*
void InitFlowStruct(Flow *Project)//从这开始就不会了..
{
Project->FlowData = new SubTest*[SubCount];

for(int i=0;i<FlowCount;i++)
{
FlowData[i] = new SubTest[SubCount];
//InitSubTestStruct(Project->FlowData);
}
Project->FlowNumber = 0 ;
}

void main(int argc, char* argv[])
{
Flow **ProjectD = new Flow*[FlowCount];
for(int i=0;i<FlowCount;i++)
{
ProjectD[i] = new Flow[FlowCount];
InitFlowStruct(ProjectD[i]);
}
}
*/



授人以渔,不授人以鱼。
2015-04-01 02:31
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
for each (Flow p in *ProjectD)代码在VC6不能用
特地开2008去试是OK,但看不懂C++语法.残念.....
图片附件: 游客没有浏览图片的权限,请 登录注册


依样画葫芦应该可以,但是实际应用就要再研揪研揪了..

[ 本帖最后由 wube 于 2015-4-1 18:13 编辑 ]

不要選我當版主
2015-04-01 18:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
ざんねん,我再想想怎么包装成你能用的形式。

授人以渔,不授人以鱼。
2015-04-01 18:16
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
反正現在做到合併CSV為止算第一段完成,前幾天試過轉1.3GB的檔案出來,資料多到用EXCEL開起來會出現異常,應該是寬度超過65535行了吧。
再把版主上次貼的C合併CSV檔案源碼改成DLL版,主程式去呼叫起來運行(速度上是有比較慢一點,一次合併一千多個檔案),時間大約在2分
內吧,解檔花了快1分鐘,合併感覺也花了一分多。1.3GB的檔案是目前可知最大檔的四分之一。

把目前合併出來的CSV檔案視為一個數據庫,之後再從此CSV做其他資料分析繪圖的二次應用,剛好現在公司有組個Tream來搞這個,
後段就分下去,各自去完成,最後再看要不要整合起來,這問題就讓領導去煩惱,我就專心想前段要怎麼改得更結構化一點。

不要選我當版主
2015-04-01 20:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你是整張表象BASIC那样鋸齒狀的吧?

授人以渔,不授人以鱼。
2015-04-01 20:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我早説你用Excel是不能處理這種數據量的。分散處理的效率比合併在一個文檔更高。

授人以渔,不授人以鱼。
2015-04-01 20:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
改動了一下界面(interface),你看看main()中的形式,會用嗎?
程序代码:
/*
http://bbs.bccn.net/viewthread.php?tid=443029&extra=&page=3
*/

#include <iostream>
#include <cstdlib>
#include <vector>
#include <conio.h>
#include "MyTools.h"

using namespace TonyDeng::MyTools;

const size_t Max_Size = 100;

struct PinInfo
{
    char PinName[Max_Size];
    char PinPoF[1];
    float LO_LIMIT;
    float HI_LIMIT;
    float LO_SPEC;
    float HI_SPEC;
    float PinResult;
    char UNITS[1];
};

struct BIN
{
    short int SoftBin;
    short int HwardBin;
};

struct IC
{
    std::vector<PinInfo> ICData;
    char ItemType[1];
    int PinNum;
    int PinTestTime;
    int ICNumber;
    short int X;
    short int Y;
};

struct Site
{
    std::vector<IC> SiteData;
    std::vector<BIN> SiteBin;
    char SubTestName[Max_Size];
};

struct SubTest
{
    std::vector<Site> SubTestData;
};

struct Flow
{
    std::vector<SubTest> SubTestData;

    Flow()
    {
        SubTestData.reserve(_reserve);
    }

    void Create(size_t subTestCount)
    {
        SubTestData.resize(subTestCount);
#ifdef _DEBUG
        std::cout << "in Flow: " << std::endl;
        std::cout << SubTestData.size() << std::endl;
        std::cout << SubTestData.capacity() << std::endl;
#endif
    }

    private:

        std::vector<SubTest>::size_type _reserve = 100;
};

struct Project
{
    std::vector<Flow> FlowData;

    Project()
    {
        FlowData.reserve(_reserve);
    }

    void Create(size_t flowCount)
    {
        FlowData.resize(flowCount);
#ifdef _DEBUG
        std::cout << "in Project: " << std::endl;
        std::cout << FlowData.size() << std::endl;
        std::cout << FlowData.capacity() << std::endl;
#endif
    }

    private:

        // 預設最少分配元素的數量,可視實際情形調整。
        std::vector<Flow>::size_type _reserve = 100;

};

int main(int argc, char* argv[])
{
    Project projectD;
    projectD.Create(2);
    projectD.FlowData[0].Create(5);
    projectD.FlowData[1].Create(10);

    Pause("Press any key to continue...");
    return EXIT_SUCCESS;
}

/*
void InitFlowStruct(Flow *Project)//从这开始就不会了..
{
Project->FlowData = new SubTest*[SubCount];

for(int i=0;i<FlowCount;i++)
{
FlowData[i] = new SubTest[SubCount];
//InitSubTestStruct(Project->FlowData);
}
Project->FlowNumber = 0 ;
}

void main(int argc, char* argv[])
{
Flow **ProjectD = new Flow*[FlowCount];
for(int i=0;i<FlowCount;i++)
{
ProjectD[i] = new Flow[FlowCount];
InitFlowStruct(ProjectD[i]);
}
}
*/


收到的鲜花
  • wube2015-04-07 11:02 送鲜花  10朵   附言:好文章

授人以渔,不授人以鱼。
2015-04-02 21:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
解释一下37楼代码的意图:建立一个Project类型的數據projectD,里面包含Flow类型的“变长数组”FlowData[2],而FlowData[0]和FlowData[1]所包含的SubTestData[]数组,不是一样尺寸,前者是[5],后者是[10]。这应是你梦寐以求的BASIC二维数组效果,鋸齒形的。如此类推,后面嵌套的数据结构,也是一般的实现。

授人以渔,不授人以鱼。
2015-04-02 22:21
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
太強悍了,從沒想過結構裡還能寫運算式,這到底是結構還是變為類了?
C++真是博大精深身...

話說鋸齒形的意思是?

不要選我當版主
2015-04-03 02:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
C++号称增强的C,最开始发展,就是在struct中添加函数功能,令类型(type)除了整合数据之外还有行为。在C++中,struct和class是同义词,仅在成员的默認可见性上有差别,即struct默認其成员是public的,而class则默认是private的。这你可从我的代码中看出来,struct中祇有一个private标识,表示后面的东西才是私有的,前面没明确写的,就是公开可见的。

鋸齒形数据:C的“二维数组”,比如s[2][10],它是2行10列的一个矩阵,每个行必定是10个元素的,你没有办法让一行是5,另一行是10,这是因为C实际上祇有一维数组中嵌套一维数组,它没有真正的二维和多维数组机制。这就是对齐的,你可能为了满足一个庞大的矩阵仅有一行是10而迫不得已把边界取到最大值,而实际上大多数的行却仅仅是5,那就是浪费空间。鋸齒形阵列,可以做到不对齐,那是C无法做到的,它必须用指针元素构成数组,但给你编程带来的麻烦比方便多。

授人以渔,不授人以鱼。
2015-04-03 09:31
快速回复:这简单的代码怎翻译成C语言?
数据加载中...
 
   



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

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