- 1 名前:volatileな名無しさん mailto:sage [2008/11/15(土) 05:04:45 ]
- C言語の入門者向け解説スレです。
教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題を片付けます 117代目 pc11.2ch.net/test/read.cgi/tech/1225320579/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 38 pc11.2ch.net/test/read.cgi/tech/1225451731/ 過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
- 37 名前:12 [2008/11/15(土) 18:18:11 ]
- >>33
授業は全部出てるしちゃんと聞いてる. 今回のreturnについては変だったから准教授にも聞いたんだ. そしたら double normalize(double th) { while(th > PI) { th -= PID; } while(th <= -PI) { th += PID; } return th; } はだめで, double normalize(double th) { static double out; while(th > PI) { th -= PID; } while(th <= -PI) { th += PID; } out=th; return out; } としろって話だったんだ. > 引数 th が関数に渡されるときに関数内部では別の変数が用意されて,その変数 > にコピーされます.この関数内の変数は当然 static ではないはずですので, > return によって正しく返却されることは保証されないと思います.ですから, > やはり static 変数を別に用意してください. > なお,数式の評価値も正しく返却されるのか不安なので,私は static 変数に代 > 入してから return しています.たとえ仕様上は保証されていてもバグがあるか > も知れないので,こうすれば安心です. とのことだった. 仮引数の書き方はとくに指示されてはいないし,malloc による文字列操作どころかmallocはまだ名前以外出てきた事がない. 仮引数の書き方に適切なものがあるなら是非教えてくれ.
- 38 名前:デフォルトの名無しさん [2008/11/15(土) 18:19:59 ]
- >>34
実行速度が速いから,1秒たつまでに終わっちゃうんだと思うよ. 100とするところを,1000000くらいにして試してみると,少しは変わるかも.
- 39 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 18:23:11 ]
- >>37
教授がなんか勘違いしてんだろうね。 仮引数の件 char *func4(char *a,*b) { ↓ char *func4(char *a, char *b) {
- 40 名前:34 [2008/11/15(土) 18:25:07 ]
- >>38
なるほどほんとだ。 ありがとうございます。
- 41 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 18:27:43 ]
- >>37
その準教授なり教授なりの返答はあまりにも稚拙だな。 あなたはstatic変数にしないと不安で仕方ないかもしれませんが、 私はそのようなことで不安になることもありませんし、メモリを浪費したくもありません。 とでも言っておけば?
- 42 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 18:31:11 ]
- 追記。
仕様で保証されているものをバグだ何だと騒ぎ立てるんだったら staticにすれば大丈夫なんていうのも保証はないし、 そもそもnormalizeにthが壊れずに渡されるかどうかも心配すべき。 ちょっとどうかしてるよ。
- 43 名前:12 [2008/11/15(土) 18:34:50 ]
- >>39
ですよね…… 名古屋大出てるのにOrz 仮引数. なるほど.次からちゃんと分けて書くようにするよ. でもなんでそう書く方がよろしいんだ?? さっき,GNU libcを落としてきて,ソース漁ってみた. printf.cのソースで, int __printf (const char *format, ...) { va_list arg; int done; va_start (arg, format); done = vfprintf (stdout, format, arg); va_end (arg); return done; } ってなってたよ.次からいちいちstaticにするのはやめておくことにする.
- 44 名前:デフォルトの名無しさん [2008/11/15(土) 18:42:23 ]
- printfで%lfで表示すると同じなのに、比較すると(if分で!=de)異なると
なってしまいます。片方は計算で得た5.0000、もう片方は5をdouble型に 入れたものです。 この二つをどうにかして同じ値として扱いたいんですが何かいい方法はないでしょうか?
- 45 名前:デフォルトの名無しさん [2008/11/15(土) 18:44:20 ]
- 日本語がおかしくてすみません
簡単に言うとif文の条件として二つの変数を比較するときだけ 小数点5桁とか4桁だけで比較したいんですがどうしたらいいでしょうか?
- 46 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 18:45:22 ]
- >>44
浮動小数点では単純に==で比較すると誤差で涙目になる。 適当に許容する誤差を決めて #define EPS 1e-5 if(fabs(a-b) < EPS){//aとbが等しいなら } みたいにやるのを薦める
- 47 名前:33 [2008/11/15(土) 18:50:37 ]
- >>37
それは失礼した しかし痛い教授にあたったものだな、ご愁傷様 試験のときも教授と同じ間違え方をしないと減点されかねないから気をつけてな
- 48 名前:デフォルトの名無しさん [2008/11/15(土) 18:50:50 ]
- ありがとうござます!!
- 49 名前:デフォルトの名無しさん [2008/11/15(土) 19:00:53 ]
- >>35
一つ言っておこう 授業で習うことなんて8割方嘘だ 初心者向けにかなり誤魔化しが入っとるけん、 全部鵜呑みにせんと、概要だけふーんと聞いておけばいいよ
- 50 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:10:07 ]
- なぜ伊予弁
- 51 名前:34 mailto:sage [2008/11/15(土) 19:15:30 ]
- すみませんもうひとつ質問なのですが、
たとえばゲームとかを作る時、キャラクターを動かす部分のプログラムは、 「今xに表示しているキャラ画像を、○○秒後にx+10に表示する」 みたいになると思うのですが、 そもそもこの部分の処理に○○秒以上かかっちゃっう場合はどうするんですか?
- 52 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:19:07 ]
- >>51
動きがガクガクになる。
- 53 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:19:20 ]
- 教授なんて名大を出ててもそんなものか。。。
かったるくて日進月歩に合わせられないんだろうな。 法科、会計、情報系は教授もリアルタイムに日進月歩しないと駄目じゃね? 古いままだと実態に合わなく使い物にならなくなるから。
- 54 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:25:07 ]
- >>51
タイマー割り込みの手法を使って、差分を計算してキャラを動かす。 キャラが増えて負荷が高くなったら、一部を間引いて処理する工夫を入れるか タイマー間隔を延ばして処理する工夫を入れる。
- 55 名前:12 [2008/11/15(土) 19:25:23 ]
- >>47
俺は授業よりも,Cの本の方を重点的にやってるから, 今回の返り値の謎に気がついたからよかったけど,他の連中に返り値がどうのとかいうと, 「返り血」と思われてしまうよww 困ったもんだ.准教授といえども,間違うってことか. そう言えば,scanfのフォーマットで[]とか*とかもしらなかったもんな. そんなもんなのかな? >>49 准教授の授業3割,本4割,libcとかのGNUのソース2割,どっかのサイト1割くらいで参考にしてるから, それは大丈夫だと思いたい. 質問の結論は返り値は値渡し. みんなありがと.ずっと変なソース書き続けるとこだったよ. 聞いてみてよかった.
- 56 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:34:09 ]
- >>37
誰か指摘してたが、関数内で不用意に性的変数を 参照するのは避けるべき なぜなら再入可能でなくなるから つまりマルチスレッドで同時にその関数を使用すると不具合が起こる 要はマルチスレッドプログラミングも したことない助教授は明らかに素人なので 気をつけろってことさ
- 57 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:36:24 ]
- 人員不足で担当させられてるだけの門外漢だったりして
- 58 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:38:06 ]
- なんという痛み分けw
- 59 名前:34 mailto:sage [2008/11/15(土) 19:40:46 ]
- >>52
なるほど・・・ >>54 なんかよくわかりませんがいろいろ解決法があるのですね。 調べてみます。
- 60 名前:デフォルトの名無しさん [2008/11/15(土) 19:40:48 ]
- >>55
つかさーアセンブラやってんなら返り血を 渡すコードがどうなってるか見てみるといいぜ 返す型でも変わるし
- 61 名前:デフォルトの名無しさん [2008/11/15(土) 19:51:26 ]
- しかしこの返り値クンは、なんやかんやと言い訳ばかりでむかつくなw
後から伸びないタイプだわw
- 62 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:02:13 ]
- 管理職タイプ
- 63 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:09:43 ]
- >>61
それはどうでしょうか。 >>55 こちらで返り血を浴びながら修練するのも一興 pc11.2ch.net/test/read.cgi/tech/1225320579/
|

|