b97902HW 板


LINE

呼呼! 在廢掉了一整個晚上,從下課後一直到十點,都宅在219被鋼彈屠宰、 費盡了九牛二虎之力、晚餐都沒吃的弱者我,終於把它解決了! 所以就在此提供一些小小心得啦! (先聲明我不是強者,我也是跟大家一樣剛接觸C語言的新手,所以如果 有方法比較笨或打錯,請多多包涵,以下給各位參考看看) ---------------------------廢話分隔線----------------------------- ----------------------------以下正題------------------------------ 首先,是第一個步驟,也就是分析字串,一開始的測資有兩行, 分別是 [IDENTIFIER_LR NUM]+ 以及 [IDENTIFIER_ST IDENTFIER_LR INDEX]+ 其中[...]+的意思是指,每個[]為一組,[]可以重複出現; Ex. Left 5 Right 5 Left 5 Right 5 Left 4 Start Right 4 Start Left 3 Target Right 4 像這樣子的input。 0.前置動作; 我們必需做的,就是把它們切開,切開的方法有很多, 像sscanf(),strtok(),for loop...等等,課本或投影片裡應該找得到, /*sscanf()已經可以用了,之前用它寫然後傳上去拿零分 的同學們可以不用像我一樣砍掉重練,直接用就行了。 建議是用sscanf()寫會比較方便,for loop也OK, 用strtok()的話要小心會當掉。 */ 然後把切開的東西存起來,一組一組來判斷, 比方說,"Left 5","Right 5","Left 5","Right 5","Right 4" "Start Right 4","Start Left 3","Target Right 3" 這樣分組判斷。 原則上只要for加上一堆if,else if,else等等就可以解決。 重要的是,只要判斷出現Error的話,就立刻把它印出來, 所以Error Message可以不只一個! 1.有關(MSG1)的部分: 分析兩行測資,//是兩行喔! 第一行主要就是判斷有沒有重複定義的 Left || Right(redifined) /*注意:出現 Left 5 Left 5 Right 3這種狀況時,並不算redifined, 要 Left 5 Left 6 Right 3這樣才算。 //Error at line1; Left entry redifined. */ 或者是判斷 Left || Right 的輸入有沒有錯(unknown identifier) 例如我打XD 5 HAHA 5,理論上程式看不懂XDHAHA, 理所當然就要print出Error啦! //Error at line1 : unknown identifier XD(LR). //Error at line1 : unknown identifier HAHA(LR). 第二行的部分則是確認Start || Target有沒有重複出現(mutiple point) /*注意:出現Start Left 5 Start Left 5 Target Right 3這種狀況時, ,算mutiple start point,所以請記得要輸出Warning喔! */ 以及確認輸入的東西有沒有錯,這部分就跟第一行的差不多囉。 //提示:助教的程式是先判斷Start || Target,再判斷Left || Right /*注意:當print這個; Error at line1: unknown identfier STRING(LR). 或 Error at line2: unknown identfier STRING(LR). 或 Error at line2: unknown identfier STRING(ST). 的時候,請記得在STRING後面加上(LR) || (ST)。 不要像我呆呆的只印STRING出來. 還有STRING是input進去的錯誤訊息!也別呆呆的就印"STRING"出來 另外請注意輸出的順序! */ (MSG1)處理完畢後, if 出現Error,你就可以return拿分數(結束程式), else 請繼續處理(MSG2)的部分。 /*提醒:如果只有出現Warning的話,請不要終止程式!,繼續(MSG2)!*/ 2.有關(MSG2)的部分; 主要是判斷Start point以及Target point存不存在, 還有判斷它們究竟有沒有效。 所以如果說有mutiple point的話是算它存在的喔!(這也是為什麼Warning可以繼續) 當你在處理完(MSG1)之後, 應該可以確認有沒有輸入Start point || Target point, 例如說 Start Left 5 Start Left 5 這樣就沒有Target point,所以請print No target point! 又比方說 Left 3 Right 3 Target Left 3 這種狀況, 就要輸出 No start point! Invalid target point! //因為左邊只有三間,編號為0,1,2,所以Target Left 3是invalid。 //同樣也要注意輸出順序喔! (MSG2)處理完了之後, if 這兩個point其中一個無效或不存在,也無法繼續下去,所以一樣return拿分數。 else 就是要按照 Left X 跟 Right Y 中的 X 及 Y 來讀進最後的測資(theta,d,a,alpha)。(先Left的部分,再Right的部分喔) 3.有關矩陣的部分: 先讀進X行的(theta,d,a,alpha) //先Left的部分 以及Y行的(theta,d,a,alpha) //再Right的部分 讀完之後,就可以用助教提供的Source code,也就是 DHMatrix(double T[][4],double theta,double d,double a,double alpha); 這個function,讓各位把每一組(theta,d,a,alpha)轉成T[4][4]的矩陣, 也就是說,丟(T[][4],theta,d,a,alpha)給DHMatrix就會跑出一個T[4][4]的矩陣。 因為最終目的是把起始的(x1,y1,z1)以及終止的(x2,y2,z2)找出來, 所以可以先把所有的4*4矩陣都先乘起來後,再用(0,0,0,1)去乘它。 (不要問我最後那個1怎麼來的,我也不知道,有興趣請找助教謝謝) 例如說: Left 6 Right 6 Start Right 5 Target Left 1M_Start [4][4]=R5*R4*R3*R2*R1*R0; M_Target[4][4]=L1*L0; /*注意:是從最後乘回來喔!矩陣乘法沒有交換律的!*/ 其中 LX RX 都是4*4的矩陣(從DHMatrix得到), 也就是說我們必須寫個程式把所有的矩陣乘起來。 最後的結果則存在M_Start [4][4] 及M_Target[4][4], 然後 R_Start [4]=point[4]*M_Start[4][4]; R_Target[4]=point[4]*M_Target[4]; 其中point[4]={0,0,0,1} //point為1*4矩陣[0,0,0,1] //這部分助教的Source code中的main function的最後面有,可以參考看看, 最後我們要取的就是R_Target[4]-R_Start[4]的前三碼,也就是最後的答案。 /*請記得加上0.000000001,不然會出現-0.00喔!*/ 助教已經把最新的Test2.exe檔放上去了,請大家多多利用它吧! (因為之前舊的Test.exe有些電腦不能用,像我的就是。 它對寫這隻鋼彈的幫助可是非常大的喔!) /* (MSG1)指的是; Error at line1: Left entry redefined. Error at line1: Right entry redefined. Error at line1: unknown identifier STRING(LR). Warning at line2: multiple start point. Warning at line2: multiple target point. Error at line2: unknown identifier STRING(LR). Error at line2: unknown identifier STRING(ST). 這七行的相關部分。 而(MSG2)指的是: No start point! No target point! Invalid start point! Invalid target point! 這四行的相關部分。 */ 最後,如果你覺得你的程式怎麼跑明明都正確,卻拿不到分, 請檢查看看你print出來的MSG部分有沒有拼錯,還有大小寫正不正確喔! ---------------------------以上正題------------------------------ --------------------------廢話又來了----------------------------- 呼呼!終於打完了! 難得PO一次文,有什麼不詳盡或錯的地方,請強者們多多指正! 我還不太會排版,排得不好讓大家看得很累,請多多見諒。 是說一開始助教的測資Output部分Key錯了,還一次四個, 所以傳過的可以再傳一次,說不定就多四分了唷! 測資部分據說挺善良的,沒什麼太畸型的測資,所以不用像我一樣 絞盡腦汁猜測資,多拿點正常測資跟助教的程式比對吧! 謝謝觀賞! ----------------------------------------------------------------- --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.242.90
1F:推 jackwhitekim:第一個滿分!! 是今天上助教課的同伴XD 11/19 00:26
2F:推 martinku:推原PO是暗黑神手 11/19 00:27
3F:推 humanlin:原po高手 11/19 00:29
4F:→ maxcsh:哪有= =,比較瘋狂而已,纏著助教纏到他們發現測資錯誤XD 11/19 00:30
5F:推 sn6783:原PO,神人也 11/19 00:37
6F:推 dennis2030:推原PO是頭香強者! 有這篇幫助太棒了! 11/19 00:40
7F:推 jimmyken793:有強者快拜 11/19 00:51
8F:推 purplebleed:可以說一下哪幾個錯嗎XD~~有怪怪的事情發生了~~ 11/19 01:04
9F:→ maxcsh:本來是1,2,3,10錯啊,現在都修正了 11/19 01:05
10F:→ maxcsh:不過有被測資害到的應該只有我吧= =,多卡了一個半小時 11/19 01:13
11F:→ maxcsh:多補充一點東西,各位看看吧! 11/19 17:14
※ 編輯: maxcsh 來自: 140.112.242.90 (11/19 17:33)
12F:推 dennis2030:太專業了 補充過後又變得更強大了!! 11/19 17:33
13F:推 benck: 原PO是隱.強者 11/19 22:26
14F:推 fereshte: 原PO是隱.強者 11/19 22:48
15F:→ maxcsh:其實樓上兩位才是真正的強者啊= =(修掉XD) 11/19 23:05
16F:推 chenaren:欸 那我的也要修(通通修掉XD) 11/19 23:40
※ 編輯: maxcsh 來自: 140.112.242.90 (11/19 23:43)
17F:推 purplebleed:有人可以提示一下4&&14的狀況嗎??(卡題了= =) 11/20 00:20
18F:→ maxcsh:Left 5 Right 5\ Start Left 5 Start Left 4 Target Left 3 11/20 00:33
19F:推 purplebleed:呵呵~~這種情形你早上跟我說過了XD 11/20 00:36
20F:→ maxcsh:哪有,不一樣喔,拿去跑助教程式試試,會有warning, 11/20 00:37
21F:→ maxcsh:但還是要丟link code(那一串數字)進去喔! 11/20 00:38
※ 編輯: maxcsh 來自: 140.112.242.90 (11/20 00:40)
22F:推 purplebleed:哭~~~還是不給我過~~測資好陰= =||| <-標準耍無賴XXD 11/20 01:08
23F:推 purplebleed:喔YA~AC了!原來是1e-9~跟使徒三一樣= =~~要記得呦 11/20 01:16
24F:→ purplebleed:花了好多時間呦= =~都在找白痴錯誤?(其實是我太笨了) 11/20 01:17
25F:→ maxcsh:啊我忘記講了= =,我以為大家被唬過幾次之後會自動加上去的 11/20 01:23
26F:→ maxcsh:很抱歉,補上了。 11/20 01:23
※ 編輯: maxcsh 來自: 140.112.242.90 (11/20 01:33)
27F:推 godgunman:欸欸你忘記感謝我啦XD 11/20 02:37
28F:→ maxcsh:感謝樓上在我不能用sscanf的時候教我用for loop切開XD 11/20 02:43
29F:推 purplebleed:呵呵~~樓上兩位都是好人耶~~太感謝了XXD 11/20 09:34
30F:推 LoganChien:第 14 除了 1e-9 好像有和 13 一樣的陷阱。(供參考) 11/20 18:34
31F:→ LoganChien:還有,我不太喜歡這一題的題目「說明」,太模糊了... 11/20 18:35
32F:→ LoganChien:還要從 test.exe/test2.exe 去猜題意...。 11/20 18:36
33F:推 LoganChien:有一些狀況(不違反說明),也可以把 test.exe 玩壞。 11/20 18:40
34F:推 chenaren:我看不懂題目耶 @@ 11/20 19:11
35F:→ ewan7954:4*4矩陣目的==>旋轉需要3*3 平移需要3*1 11/20 20:21
36F:→ ewan7954:所以為了使用上方便 將兩個合併成4*4 11/20 20:22
37F:→ ewan7954:所以最下面那一行沒用到 乘出來才變成 X Y Z 1 11/20 20:24
38F:→ ewan7954:今天助教課問的XD 11/20 20:31
39F:推 martinku:卡13、14呢...我有修正浮點數了說@@ 11/20 21:38
40F:推 LoganChien:樓上,你的 Warning 有問題 11/20 21:48
41F:推 LoganChien: 更正:MSG 11/20 22:04
42F:推 AfrikaBoi:請問測資4跟5還是字串的部分嗎? 卡住了 :-( 11/22 01:29
43F:推 purplebleed:是矩陣運算~~~ 11/22 22:02
44F:推 AfrikaBoi:阿 OK 謝謝! 11/23 02:24
※ 編輯: maxcsh 來自: 140.112.242.90 (11/23 16:53)
45F:推 sn6783:感謝強者提醒~~ 我把0.000000001加上去之後馬上多一分XD 11/23 16:58
46F:推 qq123789:請問 Left 0 Left 1 Left 1 算重複幾次啊 總覺得答案有錯 11/23 17:57
47F:推 qq123789:個人認為是一次 助教的 test2 檔 是print 兩次 11/23 18:00
48F:→ maxcsh:兩次,接到Left 0的時候Left就已經被define了,所以是兩次 11/23 18:08
49F:推 qq123789:了解 謝謝啦:) 11/23 18:10
50F:→ maxcsh:小提醒,矩陣做乘法前可能有需要改成單位矩陣, 11/23 18:12
51F:→ maxcsh:還有做乘法暫存的矩陣要記得歸零喔! 11/23 18:12
52F:推 AfrikaBoi:卡11and13的人!第二行有複數歐! 11/24 14:03
53F:推 lch16:幫樓上更正一下..... 有負數 11/24 22:14
54F:推 rppo888:有複數也太驚悚....XDD 11/24 23:43







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