C_and_CPP 板


LINE

我的 一個作業 要找出eq的根 固定一個x 將根(y)帶入 判斷y是否為解 compile 時沒問題 但在run 時 跑到一半時(還不到設到的x) 它在出現"error 請按任意鍵" 我有對過 前面跑出來的答案是對的 但它無法跑到我要的X 但直接算那個最後停住的X 可以出現解(y)且是正確的 我想不知道是不是跟電腦有關西嗎? 我的筆電有五年的歷史了>< #include <stdio.h> #include <stdlib.h> #include <math.h> double test(void); double fun(double,float); void loop(float,double,double,double,double); double max(double,double); double dee(double,float); double dii(double,float); int main() { int i; float x; double y[100000],eq2,eq1; //------------------ FILE *fptr; //開啟檔案 if((fptr=fopen("root.txt","w"))==NULL) { printf("error"); system("pause"); } //----------------------- // y的初始直 並設定要帶入的y值 範圍0.001~100 固定一個x 將y值帶入 判斷y是否為 eq=0的解 y[0]=0.001; for(i=0;i<100000;i++) {y[i+1]=y[i]+0.001;} x=0.01; //x的初始值 while(x<10.0)//x的終點 { printf("x=%f\t",x); fprintf(fptr,"%f\t",x); for(i=0;i<100000;i++)//一一將y值帶入 { eq1=fun(y[i],x); eq2=fun(y[i+1],x); if((eq1*eq2)<=0.0)//兩相鄰的y值 使eq位在一正一負 則可找出解 { if(fabs(eq1)<=pow(10.0,-10)) { fprintf(fptr,"a=%e\t",y[i]);} else {loop(x,y[i],y[i+1],eq1,eq2);}//找出較精準的y值 } } printf("\n"); fprintf(fptr,"\n"); x=x+0.01; } system("pause"); return 0; } double fun(double y,float x) { float pi,angle,a,b,wpi,wpe,we,wi,ck,ik,ek; double de,di,d1,d2,d3,d4,d5,d6,eq; pi=4*atan(1); angle=pi/4; a=cos(angle); b=sin(angle); wpi=1000.0; wpe=42850; we=1836; wi=1.0; ck=10000.0*x; ik=0.2*x; ek=42.0*x; de=y*y*(y*y-we*we)-ek*ek*(y*y-we*we*a*a); di=y*y*(y*y-wi*wi)-ik*ik*(y*y-wi*wi*a*a); d1=1.0-wpe*wpe*(y*y-we*we*a*a)/de-wpi*wpi*(y*y-wi*wi*a*a)/di; d2=1.0-(ck*ck)/(y*y)-wpe*wpe*(y*y-ek*ek-we*we*b*b)/de-wpi*wpi*(y*y-ik*ik-wi*wi*b*b)/di; d3=1.0-(ck*ck)/(y*y)-wpe*wpe*(y*y-ek*ek)/de-wpi*wpi*(y*y-ik*ik)/di; d4=wpe*wpe*we*we*a*b/de+wpi*wpi*wi*wi*a*b/di; d5=wpe*wpe*y*we*b/de-wpi*wpi*y*wi*b/di; d6=wpe*wpe*we*a*(y*y-ek*ek)/(y*de)-wpi*wpi*wi*a*(y*y-ik*ik)/(di*y); eq=d1*d2*d3-2.0*d4*d5*d6-d3*d4*d4-d2*d5*d5-d1*d6*d6; return eq; } void loop(float x,double y1,double y2,double eq1,double eq2) { int i; double y3,eq3,c,di,cc,de; //------------------ FILE *fptr; //開啟檔案 if((fptr=fopen("root.txt","w"))==NULL) { printf("error"); system("pause"); } //----------------------- // 因為分母也有y值 找出y使分母=0 (他會使eq趨向無限大)這是不要解 所以y1右邊的點 涮出的eq的絕對值會大於y1 c=fabs(fun(y1+0.000001,x)); cc=fabs(fun(y1,x)); de=(dee(y1,x));/ di=(dii(y1,x)); if(di>=0.00001 && de>=0.00001 && c-cc<0.0) / { y3=y1+0.01*fabs(eq1)/(fabs(eq1)+fabs(eq2)); fprintf(fptr,"b=%f\t",y3); printf("b=%f\t",y3); } } double dee(double y,float x) { float we,ek,a; double de; we=1836.0; ek=42.0*x; a=cos(atan(1)); //pi/4 de=y*y*(y*y-we*we)-ek*ek*(y*y-we*we*a*a); return fabs(de); } double dii(double y,float x) { float wi,ik,a; double di; wi=1.0; ik=0.2*x; a=cos(atan(1)); //pi/4 di=y*y*(y*y-wi*wi)-ik*ik*(y*y-wi*wi*a*a); return fabs(di); } --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.138.128.123
1F:→ dendrobium:這不看code有人猜得出來問題嗎@@? 09/27 10:15
2F:推 joefaq:我猜是違規存取記憶體 09/27 10:31
3F:→ joefaq:看看是不是十誡第二條 09/27 10:32
※ 編輯: scws 來自: 140.114.229.88 (09/27 15:18) ※ 編輯: scws 來自: 140.114.229.88 (09/27 15:48)
4F:推 VictorTom:"error"明明就是程式裡自己印的, "請按任意鍵...."明明 09/27 18:06
5F:→ VictorTom:就是system("pause")產生的; 這個程式明明就照著程式的 09/27 18:07
6F:→ VictorTom:邏輯走, step by step跟一下就知道是開檔開失敗了, 怎麼 09/27 18:08
7F:→ VictorTom:會猜跟電腦舊不舊有關....Orz 09/27 18:08
8F:推 VictorTom:至於為什麼會開檔失敗??八成跟程式習慣不好有關; 寫程式 09/27 18:12
9F:→ VictorTom:請養成成對coding的好習慣, 你的程式裡有N個地方在開檔 09/27 18:12
10F:→ VictorTom:(fopen)可是卻沒有一個關檔(fclose)存在....Orz 09/27 18:13
11F:→ scws:謝謝V大 但我可以再請問你 我的flose要放那里? 它在跑迴圈時 09/27 19:28
12F:→ scws:不是還要再開檔案 還是把fclosez放在最後就行了 謝謝 09/27 19:31
13F:推 VictorTom:老實說我覺得你應該自己去研究開關檔的時機, 因為程式是 09/27 19:40
14F:→ VictorTom:你寫的, 由你來決定何時需要開關檔才對. 理論上, 當我需 09/27 19:41
15F:→ VictorTom:要存取檔案時我需要開檔, 當存取檔案結束時就應該關檔; 09/27 19:41
16F:→ VictorTom:另外, 我還沒存取完, 但我知道會有其他程序要存取同樣的 09/27 19:42
17F:→ VictorTom:檔案時我也應該先關檔, 等我下次要用的時候再重新開檔. 09/27 19:42
18F:→ VictorTom:有多個程式同時存取一個檔案時這是另外一個課題, 估計你 09/27 19:43
19F:→ VictorTom:的case不用考慮; 輪流存取時考慮好上面推的應該就夠了. 09/27 19:44







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP