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
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を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。