sambass0313
一般會員
發表:8 回覆:5 積分:2 註冊:2004-11-11
發送簡訊給我
|
0.123 0.123 0.123
0.123 0.123 0.123 假如我要一行一行讀取值
然後放入
DOUBLE X
DOUBLE Y
DOUBLE Z 值與值之間 有 空個 我要怎ㄇ丟入 X Y Z 我看有人用 GETC 讀取一行
但還是很暸九它ㄉ用法
|
RedSnow
版主
發表:79 回覆:1322 積分:845 註冊:2003-12-15
發送簡訊給我
|
sambass0313 您好: 您可以使用 TStringList 以及它的 LoadFromFile() 函式來讀取資料,這樣子應該比較方便些,讀入的每行字串資料則可透過 TStringList 的 CommaText 或是自定函式來拆解成個別的子字串,然後再做其它的相應處理。 以下這一篇文章是討論一個自定的拆解函式,拆解後的資料也是放在 TStringList 變數中,您可以將拆解後獲得的子字串資料以 strtod() 函式轉為 double 來設給您的 double 變數:
Split () 分割字串函數
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=70382
發表人 - RedSnow 於 2005/05/29 22:22:05
|
RedSnow
版主
發表:79 回覆:1322 積分:845 註冊:2003-12-15
發送簡訊給我
|
sambass0313 您好: 給您一個範例參考一下好了,以下是假設條件: 1. C:\data.txt 是存放資料的路徑與檔案名稱。
2. 檔案內的資料為:
A. 每行三組數字。
B. 每組數字之間均以空白字元分隔。
C. 三組數字依序要轉為 double 型態,並設給 x, y, z 變數使用。
處理範例: TStringList *mainStr = new TStringList;
mainStr->LoadFromFile("c:\\data.txt"); TStringList *subStr = new TStringList;
double x, y, z;
for(int i=0; iCount; i ){
subStr->CommaText = mainStr->Strings[i]; // 使用 CommaText
// subStr = Split(mainStr->Strings[i], ' '); // 或使用 Split()
x = strtod(subStr->Strings[0].c_str(), NULL);
y = strtod(subStr->Strings[1].c_str(), NULL);
z = strtod(subStr->Strings[2].c_str(), NULL);
.... 其它的處理 ....
}
delete subStr;
subStr = NULL; delete mainStr;
mainStr = NULL;
上述的 Split() 是一個自定函式,也就是前一篇所提到那個連結所討論的那個函式。 發表人 - RedSnow 於 2005/05/29 22:40:35
|
sambass0313
一般會員
發表:8 回覆:5 積分:2 註冊:2004-11-11
發送簡訊給我
|
void train(double ,double ,double ,double ,int); void main()
{ TStringList *mainStr = new TStringList;
mainStr->LoadFromFile("c:\\test.txt");
TStringList *subStr = new TStringList;
double H, S, V,y;
int c=0;
for(int i=0; iCount; i ){
subStr->CommaText = mainStr->Strings[i];
H = strtod(subStr->Strings[0].c_str(), NULL);
S = strtod(subStr->Strings[1].c_str(), NULL);
V = strtod(subStr->Strings[2].c_str(), NULL);
y = strtod(subStr->Strings[3].c_str(), NULL);
train(H,S,V,y,c);
c ;
} delete subStr;
subStr = NULL; delete mainStr;
mainStr = NULL; } void train(double H,double S,double V,double y,int c);
{
//做我ㄉ程式
} ------------------------------------ c builder 無法呼叫ㄇ 因為我是一邊用 vc 然後再改成 c builder 可是沒反應><
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
您好: PO程式碼的方式請參考版規說明,煩請修改謝謝您的配合
>
|
RedSnow
版主
發表:79 回覆:1322 積分:845 註冊:2003-12-15
發送簡訊給我
|
引言:c builder 無法呼叫ㄇ 因為我是一邊用 vc 然後再改成 c builder 可是沒反應 我的範例是使用 BCB 撰寫的,裡邊用的 TStringList 也是 BCB 的 Class,同時程式碼也是經過測試無誤後才貼上來的,不懂你為何要用 vc 去寫,然後再改成 BCB? 我剛才測試過你貼上來的程式碼 (雖然你沒按規定貼程式碼,有些程式碼未顯示出來),也一樣的可以執行,不瞭解你說的 "沒反應" 是指什麼?可以說清楚些嗎?
|
GeorgeKu
中階會員
發表:1 回覆:120 積分:74 註冊:2004-10-13
發送簡訊給我
|
sambass0313, 有個簡單的方式去讀取檔案內的值(每次讀3個值)
void show(double,double,double);
int main(int argc, char *argv[])
{
double x,y,z;
FILE *file;
file=fopen("test.txt","r");
if(file!=NULL){
while(fscanf(file,"%lf %lf %lf",&x,&y,&z)!=EOF)
{
show(x,y,z);
}
}
system("pause");
return 0;
}
void show(double x,double y,double z)
{
printf("%lf %lf %lf\n",x,y,z);
}
|
sambass0313
一般會員
發表:8 回覆:5 積分:2 註冊:2004-11-11
發送簡訊給我
|
#include
#include
#include <forms.hpp>
#include
#include
#include
#include<math.h>
#pragma hdrstop
#include
#pragma hdrstop
#include "MyFuncA.h"
#include "math.h"
void train(double ,double ,double ,double ,int); void main()
{
TStringList *mainStr = new TStringList;
mainStr->LoadFromFile("c:\\test.txt");
TStringList *subStr = new TStringList;
double H, S, V,y;
int c=0;
for(int i=0; iCount; i ){
subStr->CommaText = mainStr->Strings[i]; // 使用 CommaText
H = strtod(subStr->Strings[0].c_str(), NULL);
S = strtod(subStr->Strings[1].c_str(), NULL);
V = strtod(subStr->Strings[2].c_str(), NULL);
y = strtod(subStr->Strings[3].c_str(), NULL);
train(H,S,V,y,c);
c ;
} delete subStr;
subStr = NULL; delete mainStr;
mainStr = NULL;
}
void train(double H,double S,double V ,double y, int count) // 學習
{
FILE *WW;
double yd=y;
double in[3]={H,S,V};
double hn[3];
double Wij[3][3];
double Wjk[3][1];
double UPWij[3][3];
double UPWjk[3][1];
double sigma=0;
double e;//y-dy絕對誤差
//double sqr_e=0;//全局誤差平方
//double sum_sqr_e=0;//全局誤差平方
double eo;//OUTPUT神經元誤差
double r=0.1;//學習率
double e_hn[3];//hidden神經元誤差
int sgn[2]={-1,1};
int i,j,k;
int w;
int W;
//------------------------------------------- W V 權值初始 for ( i=0;i<3;i ){
for ( j=0;j<3;j ){
w=rand()%2;
W=sgn[w];
Wij[i][j]=W*((rand()%8)*0.1);
//cout<<"Wij "< 發表人 - sambass0313 於 2005/05/31 20:47:28
|
RedSnow
版主
發表:79 回覆:1322 積分:845 註冊:2003-12-15
發送簡訊給我
|
sambass0313 您好: 真的很難看懂您的程式,程式中既使用 VCL 又使用 cout,可否請您提供下列資訊?
1. 程式是在 Console 模式還是 GUI (視窗) 模式執行的? 2. 您使用的編譯環境與步驟為何?
另外提醒您一下,taishyang 副站長已經告知,您張貼程式碼的方式不正確,請按照taishyang 副站長的指引,前去看一下相關規定與張貼程式碼的方式,並且重新貼一次前文的程式碼。
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
引言:
另外提醒您一下,taishyang 副站長已經告知,您張貼程式碼的方式不正確,請按照taishyang 副站長的指引,前去看一下相關規定與張貼程式碼的方式,並且重新貼一次前文的程式碼。 沒錯,煩請更改,否則此討論串將會刪除
謝謝RedSnow前輩
|
RedSnow
版主
發表:79 回覆:1322 積分:845 註冊:2003-12-15
發送簡訊給我
|
taishyang 您好: 引言:沒錯,煩請更改,否則此討論串將會刪除
謝謝RedSnow前輩 您太客氣了,K.Top 的品質與秩序不能單是靠站長、副站長、各版版主來維持,大家都應該盡點心力的,尤其是舉手之勞應樂而為之。
|
sambass0313
一般會員
發表:8 回覆:5 積分:2 註冊:2004-11-11
發送簡訊給我
|
#include
#include
#include <forms.hpp>
#include
#include
#include
#include<math.h>
#pragma hdrstop
#include
#pragma hdrstop
#include "MyFuncA.h"
#include "math.h"
void train(double ,double ,double ,double ,int);
void main()
{ TStringList *mainStr = new TStringList;
mainStr->LoadFromFile("c:\\test.txt");
TStringList *subStr = new TStringList;
double H, S, V,y;
int c=0;
for(int i=0; iCount; i ){
subStr->CommaText = mainStr->Strings[i]; // 使用 CommaText
H = strtod(subStr->Strings[0].c_str(), NULL);
S = strtod(subStr->Strings[1].c_str(), NULL);
V = strtod(subStr->Strings[2].c_str(), NULL);
y = strtod(subStr->Strings[3].c_str(), NULL);
train(H,S,V,y,c);
c ;
} delete subStr;
subStr = NULL;
delete mainStr;
mainStr = NULL; }
void train(double H,double S,double V ,double y, int count) // 學習
{
FILE *WW;
double yd=y;
double in[3]={H,S,V};
double hn[3];
double Wij[3][3];
double Wjk[3][1];
double UPWij[3][3];
double UPWjk[3][1];
double sigma=0;
double e;//y-dy絕對誤差
double eo;//OUTPUT神經元誤差
double r=0.1;//學習率
double e_hn[3];//hidden神經元誤差
int sgn[2]={-1,1};
int i,j,k;
int w;
int W;
//------------------------------------------- W V 權值初始 for ( i=0;i<3;i ){
for ( j=0;j<3;j ){
w=rand()%2;
W=sgn[w];
Wij[i][j]=W*((rand()%8)*0.1);
}
}
for ( j=0;j<3;j ){
for ( k=0;k<1;k ){
w=rand()%2;
W=sgn[w];
Wjk[j][k]=W*((rand()%8)*0.1);
}
}
//-------------------------------------------------------------
for ( i=0;i<3;i ){
for ( j=0;j<3;j ){
sigma=in[j]*Wij[j][i];
}
hn[i]=sigma;
hn[i]=1.0/(1.0 exp(-hn[i]));
}
for ( j=0;j<3;j ){
for ( k=0;k<1;k ){
sigma=hn[i]*Wjk[j][i];
}
}
yd=sigma;
yd=1.0/(1.0 exp(-yd)); //-------------------------------------------輸出層ERROR
e=y-yd;//期望-實際輸出
eo=yd*(1-yd)*e;
for ( j=0;j<3;j ){
for ( k=0;k<1;k ){
UPWjk[j][k]=r*hn[j]*eo;
}
} //-------------------------------------------隱藏層ERROR for ( j=0;j<3;j ){
for( k=0;k<1;k ){
e_hn[j]=hn[j]*(1-hn[j])*eo*Wjk[j][k];
}
}
for ( i=0;i<3;i ){
for ( j=0;j<3;j ){
UPWij[j][i]=r*in[j]*e_hn[i];
}
}
//---------------------------------------------更改 W權重
for ( i=0;i<3;i ){
for ( j=0;j<3;j ){
Wij[i][j]=Wij[i][j] UPWij[i][j];
}
} for ( j=0;j<3;j ){
for ( k=0;k<1;k ){
Wjk[j][k]=Wjk[j][k] UPWjk[j][k];
}
}
WW=fopen("WW.txt","a ");
for(i=0;i<3;i ){
for(j=0;j<3;j ){
fprintf(WW,"WW=%lf\n",Wij[i][j]);
}
}
for(j=0;j<3;j ){
for(k=0;k<1;k ){
fprintf(WW,"UW=%lf\n",Wjk[j][k]);
}
}
fclose(WW);
} ------------------------------
在最後 我有寫 輸出至 ww.txt 檔
但沒跑出來 >< 還市一樣 問題
我卡在這李卡一星期 這樣有符合貼code的歸定??
我會注意看板規的
不要砍><....
|
RedSnow
版主
發表:79 回覆:1322 積分:845 註冊:2003-12-15
發送簡訊給我
|
sambass0313 您好: 請提供我在前一篇回覆中所要求的資訊,我無法在缺乏資訊的情況下再提供進一步的協助,再不行的話,請將整個專案上傳至 "會員求助程式檔案上傳區",並將您的整個測試環境與過程 (包含使用的編譯工具,編譯步驟) 簡述一下。
|
sambass0313
一般會員
發表:8 回覆:5 積分:2 註冊:2004-11-11
發送簡訊給我
|
我想我應該再多看看書 在多想 在試看看...^^ 謝謝大家ㄉ幫忙!! 感恩阿!~
|