[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 12/22 20:21 / Filesize : 245 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.50【環境依存OK】



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

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






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<245KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef