1 名前:デフォルトの名無しさん [2008/02/28(木) 00:01:39 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.49【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1203478421/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
838 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 15:30:49 ] #define GENERATE_CLASS(x) class x{hogehoge ではないの?
839 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 15:48:28 ] template使えば?
840 名前:837 mailto:sage [2008/03/12(水) 15:58:32 ] >>838 その方法はGENERATE_CLASS(Hoge)と使った時、Hogeの部分でエラーが出た気がしたのですが、 今もう一度試してみたらできました。(別の部分で間違いがあったようです) 簡単すぎること聞いて申し訳ないです。 >>839 template引数のバインドができない関係で、マクロでクラスを書くことになってので、templateでは無理なのです。
841 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 16:04:21 ] >>840 まさかとは思うが、業務上のプログラムを2ちゃんで質問しながら書くなよ。
842 名前:837 mailto:sage [2008/03/12(水) 16:06:27 ] >>841 趣味グラマです。
843 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 17:21:29 ] Visual C++ 6.0の課題で分からないところがあるので助言お願いします。 「main関数において、返却値の値によって表示の方法を変えよ」 とあるのですが“表示の方法を変える”とはどのようなことをすれば良いのでしょうか? 返却値は1、2、3の三つです。
844 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 17:32:05 ] printf("%dがきたー\n", henkyakuchi)
845 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 17:33:57 ] 変化球がきたに見えた
846 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 17:43:04 ] >>844 ありがとうございます とりあえずその方向でやってみます
847 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:06:09 ] >>843 もし問題文が 「main関数において、返却値の値によって表示の方法を変えよ」 だけなら、回答はこうだ 「日本語でおk」
848 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:12:25 ] うむ、出題の意味がわからん。 そして宿題は宿題スレへ。
849 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:12:32 ] こういうことか! switch(henkyakuchi) { case 1: printf("きたー"); break; case 2: puts("きたー"); break; case 3: cout << "きたー"; break; }
850 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:18:14 ] >>843 switch (henkyakuti) { case 1: printf("0"); break; case 2: fputs("0", stdout); break; case 3: putchar('0'); break; }
851 名前:850 mailto:sage [2008/03/12(水) 18:18:48 ] ネタかぶったorz
852 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:35:01 ] >>847 まあ全文じゃないけどな >>848 スマン、ヒントが欲しかったんだ >>849 ,850 そういうことなのか?
853 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:40:31 ] 全文載せないでまともなヒントあげれると思ってんの? 載せるなら宿題スレ池だが
854 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:45:01 ] >>853 お前>>843 読んでないだろ
855 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 19:11:36 ] >>843 の文章だけでは題意が読み取れない これが分かっただけでもいいんじゃないか? っつーか問題の意図は出題者に聞けよ
856 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 19:24:25 ] >>852 問題文を他人に意味が伝わるように要約できない=テメーが問題文の意味を理解していない
857 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:00:24 ] >>856 理解できてないから質問してるんじゃないか?
858 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:04:09 ] 理解できてないなら要約すべきではないわけで >>852 みてイラっときた俺はたぶん短気なんだろう
859 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:04:20 ] まとめると、質問するなら要約するなってことだな
860 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:19:52 ] ある変数の値に応じて特定の処理をさせたいのですが、 値のパターンがかなり多い場合、 switch〜case文とif〜elseif文ではどっちのほうが処理が早いでしょうか ひとつの値に対しひとつの処理なので、どちらの文を使っても同じように処理できます (switch〜caseの場合はbreakで抜けるので) あんまり多い場合、関数の配列でも用いた方がいいのかもしれませんが……
861 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:23:18 ] 試せるなら実測しろ 試せないならどっちを使っても一緒。気にするだけ無駄。
862 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:27:22 ] switch 文にはジャンプテーブル最適化というのがあってだな、 その最適化が効けば case ラベルの位置のアドレスの表を使ってジャンプするようになる。
863 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:33:39 ] しかし分岐予測の効き方を考えるとジャンプテーブルの方が遅い場合もある 実測して比べるしかない
864 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:37:03 ] 多くの場合においてある1つの条件に集中するような場合は それだけ if して、その他を switch にするとか?
865 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:37:40 ] >>860 一般的にはswtichが効率的。 なぜならswitchはジャンプテーブルなり、各個比較なり、 コンパイラが最適なものを選択すると期待できるから。
866 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:13:05 ] >>857 問題が理解できないのなら、問題の意味を教えてくれと問うべきだし、 問題が理解できているのなら、その解決策に関して問うべきだし、 解決策があるていど目星が付いてるが、ひっかかる所があるならば、その点を問うべきだろ。 自分が理解できない問題を一部だけ示して教えろなんて、どんなバカだ。
867 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:14:30 ] 処理を後々追加する羽目になる可能性があればswitchの一択でしょ。
868 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:23:08 ] 顔真っ赤なやつがいるな いいかげんその話題は終われ
869 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:26:07 ] 上と似たようなどうでもいい質問なんだけど bool z = a() && b() && c() && d() && e(); みたいな文があったとき、a()から順に、最悪e()まで調べていくと思う。(&&演算子は必ず左から調べるよね ということは、e()が最も高確率でfalseを返す場合、e()を一番左に持って行った方が効率よくなりますよね? あと↑が正しいとして、コードの見栄や保守を考えて順番を変えたくないって場合、どうしますか?
870 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:30:01 ] あ、でも関数だから、ショートサーキットな評価は行われないのか… 書いた後に気づいた…
871 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:39:01 ] >>868 「その話題」がどの話題かわからないけど、「顔真っ赤」とか刺激してる時点で たぶん君も「終わらせない気満々」なんだよね。 終わらせようとしているのに同時に刺激してるなら、馬鹿丸出しだし。
872 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:39:13 ] >>870 > 関数だから なんでそう思うんだ?
873 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:39:48 ] >>870 ?
874 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:45:30 ] >>872 関数が実行されるかされないかによって、プログラムの挙動が変わることがあるから、って思った。 よく考えてみれば、 if (ptr && ptr->func()) とか書きますね・・・
875 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:49:23 ] > if (ptr && ptr->func()) これptrがNULLでも安全なの?
876 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:51:53 ] 871 これでも舐めておちつけ(´・ω・`)つ〔きゃらめる〕
877 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:55:45 ] >>875 ptrがNULLなら&&を通らないから大丈夫じゃない?
878 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:56:26 ] >>875 ptrがNULLの場合でも問題ない。 でも、ptrがNULLじゃなくても変なとこ指してる可能性は忘れるな。 それだけ見て本当の意味で安全かどうかはなんともいえない。
879 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:57:29 ] &&の評価順は左からと決まっている。
880 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 00:02:46 ] >>869 前半部分が正しい。 効率が良くなるが順番を変えたくない場合は個人的にケースバイケース。 効率が求められる部分ならば変更かける。(実測して効果があるかも試して) とはいえ、関数内に副作用があったり、今後そうなる可能性だってあるから 基本的に短絡評価をあてにした効率は求めないようにしている。 >>875 NULLなら短絡評価でptr->func()は評価されないため問題なし。
881 名前:デフォルトの名無しさん [2008/03/13(木) 00:49:53 ] make && make installみたいなものだよな。
882 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 02:25:29 ] >>869 割と適当に答えるけど、通常見かける && や || は短絡評価をあてにして cond && (cond が非ゼロの時のみ可能な処理) や (非ぜロの確率が低い式) && (非ゼロの確率が高い式) あるいは (軽い処理) && (重い処理) または (先に必要な副作用のある式) && (その後にのみ評価されるべき式) 等、 すでに正しい順序で記述されているので、並べ替えは不可ということが多いように思う。 もしそうでない場合はコードの質を疑っちゃうから、もしちゃんと動いているならなるべく 触らない⇒やはり並べ替えないだろうなあ。
883 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 03:13:39 ] #include <studio.h> int main(void) { puts("ローゼン「ローザmstcを入れて」"); puts("「次に、目玉を入れて」"); puts("真紅「ぎゃあああああああ」"); puts("ローゼン「あ、順番間違えた」"); return 0; } コンパイル通りません><
884 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 03:21:04 ] >>883 そうですね。ではおやすみ。
885 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 03:39:10 ] >>883 studio
886 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 05:08:18 ] 質問です。現在猫でもわかるC言語プログラミングというので勉強しているのですが、 関数の再帰呼び出しというところで #include<stdio.h> int main() { static int i = 1; if (i <= 10) { printf("i = %d\n", i); i++; main(); } return 0; } というのがあり、これを実行すると i = 1 i = 2 ・・・ i = 10 になるとなっていて、試してみたところ確かにそうなるのですが、 main内でmainをもう一度呼び出した際に static int i = 1; の部分でなぜ再度 i に1が代入されないのでしょうか? 初心者過ぎてバカかと思われるかと思いますが ご教授願えるとありがたいです。
887 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 05:17:07 ] static i = 1; //宣言かつ初期化 static i; //宣言のみ i=1; // 代入 初期化と代入は違うのです。 下のように書き換えてみるとどうなります?
888 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 05:20:28 ] ごめん、書き込んですぐだけど、そんなプログラムまわすべきじゃないね。 延々回り続けちゃう。 static int i=1; static int j; j=1; if(i<10){ printf("%d %d",i,j); i++; j++ main(); } return 0; } まわすならこっち。
889 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 05:23:47 ] >>886 >main内でmainを ml.tietew.jp/cppll/cppll_novice/article/1584 >static int i = 1; の部分でなぜ再度 ttp://d.hatena.ne.jp/unageanu/20070826
890 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 05:27:30 ] >>885 わかった!ありがとう!
891 名前:886 mailto:sage [2008/03/13(木) 05:59:43 ] なるほど、初期化というのが代入とごっちゃになって、 ちゃんと理解できてなかったことがよく分かりました。 887さん、889さん、ありがとうございました。
892 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 16:35:10 ] vector型で push_backの反対で、先頭に要素を追加するには どのようにすればいいのでしょうか
893 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 16:37:34 ] できません。 listとか使ってください。
894 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 16:42:01 ] そうですか 残念です。すごく これが出来れば完成なのに
895 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 16:50:34 ] 単純な質問があります。 Mainループ { @の計算 whilie(永久にループ) { Aの計算 } } このようなプログラムでは、@の計算をし続け、かつAの計算をし続けてもらえると思ったのですが @を一度計算したあとはAの実行をループします。 こういった処理をしたい場合はマルチスレッド処理?というのをしなければならないのでしょうか?
896 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 16:51:40 ] ジャパニーズでおk
897 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 16:52:15 ] >>892 vectorの先頭への挿入は効率が悪いからpush_frontは提供されていない。 どうしても必要ならinsert
898 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 16:55:00 ] 無限ループ作ったらずっとそこで回り続けるに決まってるじゃないか。
899 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 16:57:24 ] >>898 ありがとうございます。やっぱりそうゆうものですよね。
900 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 17:17:11 ] 待てよお前らwww vectorでpush_frontを使いたいって言われて、なんでlist薦めたり、insert薦めたりなんだよwww deque教えてやれよちゃんとww
901 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 17:34:44 ] それよりもっと良いのは ufcpp.net/study/stl/characteristics.html www5c.biglobe.ne.jp/~ecb/cpp/07_04.html のようなページを教えてあげること。 そして一番良いのは、今後同じ様な問題を自己解決出来るようにしてあげること。 「stl コンテナ」でググれ。
902 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 18:59:00 ] >>900 >これが出来れば完成なのに この言葉に心奪われたんだ。
903 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 18:59:58 ] >>900 dequeにもvectorに劣る欠点はあるしなあ。なんともいえん。
904 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 20:04:03 ] 初心者なんざ全部vectorで充分
905 名前:デフォルトの名無しさん [2008/03/13(木) 20:39:41 ] 窓の杜も忘れないであげて。
906 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 21:08:38 ] そういえば、去年だかの窓の社で紹介されていたいもうとデスクトップ、 どうやら動くものが出来つつあるらしいな。
907 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 01:36:10 ] C++ の入門書を探しています。C言語の知識はありません。 ネットで検索してみると 柴田望洋『新装版 プログラミング講義C++』(ソフトバンククリエイティブ) 塚越一雄『はじめてのC++』(技術評論社) 日経ソフトウエア編『ゼロから学ぶC/C++』(日経BP社) あたりがC言語の知識が無い初心者にとっての C++ の入門書らしいのですが, この3冊の中で特にお薦めなものとその理由を教えていただけませんか?
908 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 01:42:59 ] すべての書籍を持ってる人なんているのかな?個人的にはどれでもいいと思う。というより、別にネットでもいいのでは? 書籍がいいというのであれば、大きめの本屋にいって立ち読みで少し目を通してわかりやすそうなのを選ぶ。
909 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 01:48:40 ] 本気でやるなら三冊とも買えばいいと思う 出費したくないなら入門サイトでも探して勉強するのがいい
910 名前:907 mailto:sage [2008/03/14(金) 01:53:06 ] 確かに,3冊とも持っている方はほぼいないでしょうね。 では,この3刷のどれかを読んで感じた長所・短所を教えていただけませんか?
911 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 02:00:34 ] >>910 つ pc11.2ch.net/test/read.cgi/tech/1202273631/
912 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 02:16:07 ] 独習と林晴比古ってどうなんだろう。
913 名前:デフォルトの名無しさん [2008/03/14(金) 03:14:18 ] >>912 独習は基礎知識と問題集 林はC言語で知識止まってる
914 名前:デフォルトの名無しさん [2008/03/14(金) 08:03:07 ] 林と柴田の本はケツを拭く紙にもならない
915 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 09:12:16 ] C++はロベール見ておけばよくね? ロベールでぐぐれば一番上にくるよ
916 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 09:49:23 ] テンプレート周りまでカッチリやりたかったらC++Primer 4/Eにしとけ。 値段は張るがまあいい本だ。
917 名前:デフォルトの名無しさん [2008/03/14(金) 11:43:37 ] 循環小数のことについて知りたいのですが。 vc6.0からC#に移って久しぶりにこの問題に直面 しました。 double d; d=1.2-1.1; が0.0999999になりますが循環小数でない数の 0.0999999とどうやって見分けをつけたらいいのでしょうか。 0.1だけだったら分かるかも知れませんが他にも循環小数が いっぱいあるし自動的に調べられるようにしたいです。 丸めればいいとか1000000倍して必要なときだけ/10000000 すればいいとかいろいろ意見はあるでしょうが単に見分ける方法 とか聞きたいです。
918 名前:デフォルトの名無しさん [2008/03/14(金) 11:50:05 ] プログラムに循環小数は無いだろう 無限の値を保存できない
919 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 11:57:42 ] >>917 double d1 = 1.2 - 1.1; //d1 == 0.099999999999999867 double d2 = 0.099999999999999867; で、 d1 != d2ということが知りたいの?
920 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 12:03:20 ] その手の誤差は浮動小数点の宿命。 完全に一致したり不一致したりを確認することはできないから、 その計算で出る誤差の最大を取って±誤差に収まってるものを一致するとみなしたりする。 そういう誤差が許されない処理をしたいなら整数型でなんとかするしかない。
921 名前:デフォルトの名無しさん [2008/03/14(金) 12:36:02 ] >>917 一応C++で浮動小数点の比較をやりたいときは、 double a,b;//こいつらには適当な数値がはいってるとして if (abs(a-b)<=std::numeric_limits<double>::min()) { // a == b } else { // a != b } おれはこんな書き方を習ったけど、これでもすべてのケースを正しく判定できるわけではないからなあ。
922 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 12:39:43 ] あるクラスのメンバ変数に関数へのポインタを与え、 そのクラスのメンバ関数にアクセスしたいのですが、 代入の仕方が分かりません グローバル関数へのポインタなら問題なく出来るのですが
923 名前:デフォルトの名無しさん [2008/03/14(金) 12:40:05 ] int ary[100] = {0}; int100個の配列を0で初期化したいとき、このコードは規格に沿ってますか? 手元のg++だと動くんですが、、、
924 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 12:41:29 ] そもそも 1.2 とか 1.1 とか 0.1 って定数が正しく 1.2 や 1.1 や 0.1 を表してるわけじゃないから、 正しく判定ったって、何がどう正しいのやら
925 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 12:42:19 ] >>922 メンバ関数ポインタでぐぐる >>923 沿ってます
926 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 12:42:37 ] >>923 沿ってない ary[1]〜ary[99]は初期化されない
927 名前:922 mailto:sage [2008/03/14(金) 12:57:06 ] >>925 ちょっと説明不足でした インスタンスごとにポインタに代入するメンバ関数を変えたいんですよね main関数内で宣言・代入する方法はいくらでも見つかるんですが、 コンストラクタのようなメンバ関数内で宣言・代入する方法が分からなくて
928 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 13:03:04 ] こうか? class Foo { public: void (Foo::*func)(); Foo(int){ func = &Foo::bar; } Foo(bool){ func = &Foo::hoge; } void foo(){ (this->*func)(); } void bar(){ cout << "bar"; } void hoge(){ cout << "hoge"; } }; int main() { Foo a(1); Foo b(true); a.foo(); b.foo(); }
929 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 13:15:08 ] >>923 C++なら規格に沿ってる Cだと沿ってなかったような気がするが…
930 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 13:18:03 ] >>928 それです! >void (Foo::*func)(); ここが分かっていませんでした ありがとうございました
931 名前:デフォルトの名無しさん [2008/03/14(金) 13:49:37 ] >919 そうです。 >921 確かに整数値に直すしかなさそうですね。 丸める方法も0.00001の誤差を判定するときも 0.09999の次の9を丸めて0.1にしたらえらい違い になりそうな気がするし。 確実に循環してると分かっているなら丸めてもいいと思うけど そうでない場合は困るね。 >921 それでも確実じゃないと言われると絶望的? VC6.0はどうやって判断していたんだろう。
932 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 13:50:09 ] >>930 >main関数内で宣言・代入する方法はいくらでも見つかるんですが これ嘘くせえな おまえちゃんと読んでないだろ
933 名前:デフォルトの名無しさん [2008/03/14(金) 14:08:50 ] >>929 Cでも沿っている。
934 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 14:17:17 ] しつもんです。 int hoge [][3] = { {0,0,0}, {1,1,1}, {0,1,0}, }; のような配列で hoge[1]; とやると hoge[1][0]のアドレスを返して来るでよろしいでしょうか?
935 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 14:19:14 ] >>931 別に循環はしてないよ これ実行してみ int main() { printf("%.70f\n", 1.2); printf("%.70f\n", 1.1); printf("%.70f\n", 1.2 - 1.1); }
936 名前:デフォルトの名無しさん [2008/03/14(金) 14:24:19 ] >>931 どうやって判別しているのかは、仮数部と指数部が完全一致だろう
937 名前:デフォルトの名無しさん [2008/03/14(金) 14:28:56 ] >>934 うん。 int a[3];でa==&a[0]なのと一緒だからね。
938 名前:デフォルトの名無しさん [2008/03/14(金) 14:29:38 ] 扱う数によってどの位の誤差ならいっちしていると見なすか各自で判定すればいい 100億と100億1くらいならば同一と見なすとか・・ 0.0001なら1の誤差は大きい GOSA = 0.999と定義して、x = yであることを x*GOSA < y < x/GOSA としたらどうか?
939 名前:デフォルトの名無しさん [2008/03/14(金) 14:33:04 ] 計算量を減らすなら 0.999 < x/y < 1.001 の判定にすれば良いか
940 名前:デフォルトの名無しさん [2008/03/14(金) 14:49:12 ] >935 すいません。VC6.0からC#間がないので、 stdio.hをインクルードする方法(できるの?)が分かりません。 代わりに次のようにしてみたら・・・、 static void Main(string[] args) { Console.WriteLine(1.2 - 1.1); } 0.0999999999999999 となりました。
941 名前:デフォルトの名無しさん [2008/03/14(金) 14:51:41 ] >939 なるほど。参考にしてみます。
942 名前:デフォルトの名無しさん [2008/03/14(金) 15:01:04 ] 初めに|x - y| < 1 などを調べておくと高速化できるな
943 名前:デフォルトの名無しさん [2008/03/14(金) 15:03:12 ] 仮数部、指数部を直接調べていけばより高速化出来るな 指数部が2以上ずれていれば駄目だろう
944 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 15:29:33 ] >>940 C#ならdecimal型を使えば解決 static void Main(string[] args) { decimal d = 1.2m - 1.1m; Console.WriteLine(d); }
945 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 15:35:36 ] 初心者スレで >>926 みたいな嘘付くのは良くないよね・・・
946 名前:デフォルトの名無しさん [2008/03/14(金) 16:00:02 ] #include <iostream> #include <cstdlib> using namespace std; int main() { cout << rand() << endl; cout << rand() << endl; } このようにプログラムをコンパイルし実行してみると何度やっても 0 1481765933 となります。乱数当てプログラムみたなのも全部0が生成されてしまいます。 コンパイラはcygwinのg++です。なぜなんでしょうか???
947 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 16:04:10 ] >>946 しょせん擬似乱数だから srandで異なるシード値を与えれば変わる
948 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 16:36:37 ] class X { public: const int tbl[2]; }; 非staticでconstの配列をメンバーに持たせることは可能ですか?
949 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 16:44:49 ] >>948 こう? class X { public: const int tbl[2]; }; int main() { X x = {{96,43}}; cout<<x.tbl[0]<<x.tbl[1]<<endl; }
950 名前:デフォルトの名無しさん [2008/03/14(金) 16:54:23 ] >943 ここまでしないとだめ? 確かにそれだと指数部を見ただけで二つの値が違うかどうか 分かりそうだけど。
951 名前:デフォルトの名無しさん [2008/03/14(金) 17:00:01 ] >944 いいですね。しかし128ビットも使うのは少し嫌ですね。 unsigned short decimal とか使いたい^^
952 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 17:05:54 ] >>946 ちゃんとsrandにガンダムシードを与えないと。
953 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 17:24:35 ] >>949 説明不足でした。 コンストラクタで初期化できるかどうかです。 もう少し込み入ったクラス class X { public: int mi; virtual void mf(); double md; private: const int tbl[2]; };
954 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 17:28:42 ] >>953 むり
955 名前:バラ [2008/03/14(金) 17:31:15 ] c言語で ”山田太郎”は0008バイトあります。 とmystrlenを使ってと表示させたいのですが やり方教えてください。 お願いします。
956 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 17:34:16 ] #define mystrlen strlen
957 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 17:47:22 ] >>954 thx 規格でもそうなってる?
958 名前:バラ [2008/03/14(金) 17:48:53 ] 956 mystrlen関数だけをを使いたいのですが。 strlenは使用禁止だそうせす。 詳しく教えてください。
959 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 17:53:04 ] 宿題スレ行け
960 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 17:53:19 ] > strlenは使用禁止 仕方がないな。 int mystrlen(const char*p){ return strchr(p,0) - p; }
961 名前:デフォルトの名無しさん [2008/03/14(金) 17:55:00 ] 素直にdecimal型を使うことにします。 皆さま、いろいろとありがとうございました。
962 名前:バラ [2008/03/14(金) 17:57:35 ] ほ〜^^。 ありがとうございます。
963 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 18:26:55 ] まず間違いなく先生にツっこまれるな
964 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 18:42:37 ] じゃあこれでどうだ? int mystrlen(const char *str) { char buff[512]; return sprintf(buff, "%.500s", str); }
965 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 18:43:43 ] void mystrlen() { printf("\"山田太郎\"は0008バイトあります。"); } 一応質問文からだとこれでもあながち間違いじゃない
966 名前:バラ [2008/03/14(金) 19:20:51 ] #include <stdio.h> #include <stdlib.h> #define STRING "山田太郎" int mystrlen(char *p) { /*i初期化*/ int i = 0; /*\0ならば抜ける*/ while(*p != '\0') { /*pを増やす*/ p++; /*iを増やす*/ i++; } /*iを返す*/ return i; } int main() { /*バイトを表示*/ printf("%s は %04d バイトです.\n", STRING, mystrlen(STRING)); /*0を返す*/ return 0; } できました。ありがとうございます
967 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 19:22:29 ] 圧倒的なひらめき っ BCD
968 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 19:31:19 ] 「先生に車輪の再発明は不毛です。」と告げるのじゃ。
969 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 19:34:10 ] 車輪の再発名は勉強にはいいのじゃ。
970 名前:パラ mailto:sage [2008/03/14(金) 19:38:27 ] 何をどうやっても山田太郎が12バイトになってしまいます… どうやったら8バイトにすることでができるんでしょうか…
971 名前:教えてください>< mailto:sage [2008/03/14(金) 19:39:08 ] 関数ってなんですか?
972 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 19:39:31 ] UTF-8 なら 12 バイトだから正常だと思うぜ。
973 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 19:40:07 ] >>971 中学校からやり直してください
974 名前:教えてください>< mailto:sage [2008/03/14(金) 19:46:37 ] この歳では中学校に通う暇がないんです>< c++における関数の定義が知りたいんです><
975 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 19:49:48 ] その歳なら本買え。
976 名前:教えてください>< mailto:sage [2008/03/14(金) 19:51:32 ] 本を買いに行ってる時間が無いんです>< 今教えていただけませんか?><
977 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 19:52:30 ] ならググれ。 C++ の入門サイトがあるだろう。
978 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 19:53:14 ] googleで検索したほうが時間の節約になる
979 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 19:55:35 ] 問題解決能力がないとこの先生きのこれないしな。
980 名前:教えてください>< mailto:sage [2008/03/14(金) 19:56:18 ] なんで皆さんそんなに冷たいんですか?>< 分かる人から分かりやすく聞いた方が理解しやすいと思って書き込んだのに!>< 何のための掲示板ですか?!><
981 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 19:58:08 ] お前のためを思ってるからこう言ってるんだ。 こんな質問するなんて、お前のこの先が凄く心配だからな。
982 名前:教えてください>< mailto:sage [2008/03/14(金) 20:01:41 ] 分かりました。さてはあなたたちも説明できないのですね>< 説明してくれる人が現れるのを待つことにします。 このスレッドが1000行くまで待ちます><
983 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:03:21 ] f(6)=2 fが関数。中の構造は何でもいい。
984 名前:教えてください>< mailto:sage [2008/03/14(金) 20:04:17 ] ラーメンうめえwwwwwww
985 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:04:40 ] >>976 ほれ ttp://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0
986 名前:教えてください>< mailto:sage [2008/03/14(金) 20:05:08 ] 誤爆しました><
987 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:06:10 ] これはひどい
988 名前:教えてください>< mailto:sage [2008/03/14(金) 20:08:50 ] 985さん つまりc++の関数とはサブルーチン機能のことなんですね!>< ありがとうございました>< ラーメンおいしいです
989 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:39:56 ] スレ違いかもしれんが自転車こいで電力ためるのってどういう装置がいるんだ?
990 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:40:57 ] 蓄電池だろ
991 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:48:48 ] 重りを上に上げて、位置エネルギーから電気を取り出す機械ってのもあったな スレチだが
992 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:58:50 ] 揚水発電もその一種だな
993 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 21:01:17 ] 今更だけど本屋行く時間はないのに誰かが答えを書くのを待つ時間はあるんだな。
994 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 21:02:45 ] 建てた。 【初心者歓迎】C/C++室 Ver.51【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1205496128/l50
995 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 21:08:15 ] >>994 乙 >>989 発電機もいる コイル+磁石 で電磁誘導がどうたら 発生する電流は交流だから整流してこうたら 蓄電池に充電する際には一定以上の電圧(蓄電池による)が必要になるからうんたら で、スレチというより板違い
996 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 21:16:01 ] どう考えてもスレチなのに答えてくれるお前らに感動した
997 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 21:29:31 ] こんなんでましたけど〜 無かった事にしておこうか… 【初心者歓迎】C/C++室 Ver.50【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1204124447/ 実はこのスレよりも古いようだ 【初心者歓迎】C/C++室 Ver.50【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1204124499/
998 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 21:29:38 ] >>994 乙
999 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 21:41:19 ] 【初心者歓迎】C/C++室 Ver.50【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1204124447/ こっちまだ残ってるけど使わないの?
1000 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 21:54:54 ] 1000 なら 【初心者歓迎】C/C++室 Ver.50【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1204124447/ は超高速質疑応答で消費される
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。