スレを勃てるまでもないC/C++の質問はここで 10at TECH
スレを勃てるまでもないC/C++の質問はここで 10 - 暇つぶし2ch67:デフォルトの名無しさん
09/05/15 23:36:45
大体は判る

その大体すら教えてくれないのにそういわれても

68:デフォルトの名無しさん
09/05/15 23:39:53
>>67
CPUすら教えてくれないのにそう言われても。

69:デフォルトの名無しさん
09/05/15 23:40:42
>>63
実測するのが早い。
実測できないのなら、MIPS値がわかれば一秒間に実行できる大体の命令数がわかる。


70:デフォルトの名無しさん
09/05/15 23:42:36
環境によって変わり過ぎる
ハードウェア等の動かない前提のものならともかく、
OSやサービスパックの有無、画面のサイズなどの描画関係やアンチウィルスソフトなんかも走ってればかなり差も出る
ってか、実測すれば??

71:デフォルトの名無しさん
09/05/15 23:47:19
そのためのプロファイラだろ

72:デフォルトの名無しさん
09/05/15 23:50:22
アセンブラで局所的にパフォーマンスどうこうって話をしてるのに、
サービスパックの有無とか安置ウイルスソフトどうこうとかって話はないだろ。

73:デフォルトの名無しさん
09/05/15 23:54:23
だよねw

74:デフォルトの名無しさん
09/05/16 00:01:32
例えアセンブラでも、>>67の書いた情報だと、
「全フットプリント合計の最悪値以下」しか答えようがないでしょ。
キャッシュやらパイプラインやら環境要因/外的要因が多すぎる。

組み込み用のMMUもないCPUを割り込み禁止で使えば、
好きなだけアセンブラから完全な精度で値を割り出せるよw

75:デフォルトの名無しさん
09/05/16 00:50:28
みんなわかりきってて言及を控えた事だから書かなくていいよ

76:デフォルトの名無しさん
09/05/16 01:15:54
unionの話ちょっと前に出てるけど
unionをどんな時に使ってるんだ?

77:デフォルトの名無しさん
09/05/16 08:09:09
上にも出てたが、最有力はネットワークのパケット関連だろ。
あとは特定のファイル形式のヘッダとか。
俺は組み込みやらんから知らないけど、メモリの制約が大きい環境では勿論メモリ節約の意味で使うだろうし。

78:デフォルトの名無しさん
09/05/16 13:17:22
インストール完了して、ライブラリなどの参照先を全て設定してあるのですが
コンパイルで3回ほどやったら固まったり
ビルドですぐに固まったりして 何度も強制終了して困っています。

何か解決策はありますでしょうか?

使用 VC++6.0
OS WindowsXP Proffesional
メモリ 4GB
CPU Core2 Duo 3GHz

です。


79:デフォルトの名無しさん
09/05/16 13:50:07
それは C/C++ の質問とは言わん。が、まあいい。
>使用 VC++6.0
これを新しくするか
>OS WindowsXP Proffesional
これを古くする。

80:デフォルトの名無しさん
09/05/16 14:14:42
>>レスありがとうございます。

新しくするというのは
VC++ 2008にするという事ですか?

81:デフォルトの名無しさん
09/05/16 14:40:06
VC++6.0は時代の遺物じゃね。
もう使い物にならん。

82:デフォルトの名無しさん
09/05/16 17:21:57
小林健一郎さんの、「これならわかるC++」と
矢沢久雄さんの「C++クラスの継承」を読み終わって
平山尚さんの「ゲームプログラマになる前に覚えておきたい技術」を読んでみたのですが
最初のプログラムって、初心者が思いつくようなものなのでしょうか?orz
初心者向けと聞いて開いてみたのですが、難しくて挫折しそうです・・・。
平山さんの本を読むために、読んでおくべき本があったら教えてください・・・。

83:デフォルトの名無しさん
09/05/16 17:26:42
読むだけじゃだめ、何か作っていかないと

84:デフォルトの名無しさん
09/05/16 17:29:36
追加、本読めば作れるようになれっると思うのはひじょーーに甘い。
簡単なものからで良いから、数を作ることが必要。
例えば、マラソンの本を1万冊読もうがマラソン選手になれるわけではない。

85:デフォルトの名無しさん
09/05/16 17:35:44
>>83-84
即レスありがとうございます。
プログラムも自分なりに作ってはいるのですが
x軸やy軸などの基本書に書いてなかった概念が出てきて
何か足りない知識があるのだろうか、と思っています。

86:デフォルトの名無しさん
09/05/16 17:37:50
まて、それは数学の知識や物理の知識で、2Dなら中学程度でOKだけど。
本当に知りたいのはなに?

87:デフォルトの名無しさん
09/05/16 17:47:14
>>86
数学の知識があればいけるのでしょうか?
私の単なるプログラムの経験不足でしょうか・・・。
目にしたことない単語が多く出てきたので、難しく感じています。

数学は大学センター試験で1A,2B両方とも80点取れる程度です。

88:デフォルトの名無しさん
09/05/16 17:53:15
>>87
なんとなくスレ違だが、>>85の例題が悪い。
>私の単なるプログラムの経験不足でしょうか・・・。
これが答え。
易しく言うと、ある現象、キャラガX軸方向に歩いていきます。とした場合。
あなたなら、簡単に計算式が予想できると思う。しかしだ、
それをプログラムとした場合のモデル化が予想できない状態である。
この解決策は、ずばり、経験だけ。あなたなら経験すればすぐ作れるようになる

89:デフォルトの名無しさん
09/05/16 17:54:24
ゆとりの理想像にだいぶ近いな

90:デフォルトの名無しさん
09/05/16 17:56:46
>>88
レスありがとうございます。
やはり経験不足なのですね。
色々なプログラムに触れて勉強したいと思います。
どうもありがとうございました。

91:デフォルトの名無しさん
09/05/16 18:10:06
宿題スレの問題を自分の力だけで解けば、糸口が見えてくると思う。
解けない時は、他の人の回答を 手打ちで入れる。
コピペは駄目ぜったい

92:デフォルトの名無しさん
09/05/16 18:40:04
ゲーム作りたいのなら、HSPあたりがいいんじゃない?

93:デフォルトの名無しさん
09/05/16 23:41:39
誕生日を祝ってくれるプログラムを作りましたが何も表示されません。
やはり誰も祝ってくれないのでしょうか。

int main(void){
int i;
for(i=0;i>100;i++)
printf("お前、お誕生日おめでとう。\n");
return 0;
}

94:デフォルトの名無しさん
09/05/16 23:43:28
>>93
釣り?マジ?コマンドラインからそのプログラムを起動しろ

95:94
09/05/16 23:46:16
>>93
その前に
i>100
この停止条件がおかしいじゃん。


96:デフォルトの名無しさん
09/05/16 23:48:54
俺が祝ってやる
int main(void){
while(1) {
printf("お前、お誕生日おめでとう。\n");
return 0;
}

97:デフォルトの名無しさん
09/05/16 23:49:54
あーーーーーーーっ  }   何も言うな  orz  やはり祝えなかった

98:デフォルトの名無しさん
09/05/16 23:51:05
ありがとうございます。
しかしこういうエラーが出るんです。

'int' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

99:デフォルトの名無しさん
09/05/16 23:53:37
まじで、コマンドプロンプトなのか? ちょっとOS何か言ってみ

100:デフォルトの名無しさん
09/05/16 23:57:08
OSはウインドウズです。
もしかしてウインドウズだとできないんですか?

101:93
09/05/17 00:01:30
解決しました。
一年後よろしくお願いします。

102:デフォルトの名無しさん
09/05/17 00:01:36
>>100
んなわけがない
まさかソースを直接実行してないよね?
コンパイルはしてるよね?

103:デフォルトの名無しさん
09/05/17 00:10:25
コンパイルはコマンドラインでするんですよね?
ちゃんとプログラムを打ち込んでるつもりなのですが・・・

104:デフォルトの名無しさん
09/05/17 00:12:42
DOS窓でコンパイルか、なにC使ってるか疑問だ

105:デフォルトの名無しさん
09/05/17 00:13:03
>>98
拡張子はcだぞ。batじゃ無いぞ

106:デフォルトの名無しさん
09/05/17 00:14:41
おまえら全力で釣られてていいの?

107:デフォルトの名無しさん
09/05/17 00:15:50
int main(void){
printf("今日、僕ね、万個からこんにちはしたんです。\n");
main();
return 0;
}

108:デフォルトの名無しさん
09/05/17 00:24:22
コマンドラインで
int main(void){
って入力するとそのエラーになるなw

109:デフォルトの名無しさん
09/05/17 09:24:08
>>107
関係ないけど
>万個からこんにちはしたんです
「中に誰もいませんよ」を思い出した。

110:デフォルトの名無しさん
09/05/17 11:59:56
C++にて
unsigned x=10;
と言ったらxの型は何になるんでしょうか?
unsigned intですか?

111:デフォルトの名無しさん
09/05/17 12:04:29
yes

112:110
09/05/17 12:09:42
>>111
unsigned intと書かずに
unsignedとだけ書くメリットは短い以外に何かありますか?
今後の互換性とか何か?


113:デフォルトの名無しさん
09/05/17 12:12:59
なんのメリットもない気がする


114:デフォルトの名無しさん
09/05/17 12:32:51
省略かっこいい 俺すげー(゚∀゚)神のヨカーンな気分にひたれる

115:デフォルトの名無しさん
09/05/17 12:39:46
ギャル語みたいなもんか

116:デフォルトの名無しさん
09/05/17 12:48:36
R&K を厨二病だなんて言ってやるな。

117:110
09/05/17 12:56:34
まあ確かに
long intと書かずにlongで済ませたりしますが、そんな感じですか。
ありがとうございました。

118:デフォルトの名無しさん
09/05/17 13:07:04
ポインタ → 整数型(64bit) → ポインタの変換って仕様的に保証されていますか?
C で確保したリソースを他システムにハンドル値として渡し、他システム側からの
解放命令やセッション中断で解放したいんですが。

119:デフォルトの名無しさん
09/05/17 14:23:34
>>118
reinterpret_cast

120:デフォルトの名無しさん
09/05/17 14:28:23
thankyou

121:デフォルトの名無しさん
09/05/17 16:44:31
整数型への相互変換自体は保証されているが、それが64bitというのは保証されて無い

というのが建前で
そのためにわざわざintptr_tとかUINT_PTRとかが用意されているんだけど
まあC以外との通信なら仕方ないかな。
既に環境依存だし、64bitってのも問題ないんだろう。

キャストの方法(構文)はどうでもいい。

122:デフォルトの名無しさん
09/05/18 21:41:16
テキストの改行コード \r \n を削除して
バイナリファイルとしてファイルに出力後

メモ帳でみると1024文字目で改行されて表示されるのです

バイナリで開くと改行コードは取り除かれているのですが
これはWindowsのメモ帳の仕様でしょうか?

123:デフォルトの名無しさん
09/05/18 21:45:45
コマンドプロンプトから type [ファイル名] で改行されていなかったらメモ帳の仕様

124:デフォルトの名無しさん
09/05/18 23:03:54
質問です。

・・・
俺:「RSA暗号で暗号化されているので安全です」
上司:「RSA暗号とは?」
俺:「素数を使った暗号なのですが・・・要するに解読しようと思ったら何万年もかかってしまうから、
   実際には解読しようと試みる人はいないだろうという意味で安全な暗号なのです。」
上司:「高速なコンピュータを使ったら解けてしまうのではないか?」
俺:「TOP500という世界で一番速いコンピュータのリストがあるのですが、その上位のコンピュータでも私たちが生きている間には解けませんよ。
   まぁ、量子コンピュータなんかがあれば一瞬で解けてしまうと聞いたことがありますが、幸か不幸か量子コンピュータをまだ誰も完成させていません。」
上司:「でもお前が知らないだけかもしれない」
俺:「いえいえ、量子コンピュータなんかができたらすごいニュースになりますよ」
上司:「ほかの企業や組織が秘密裏に作っていたりしたらお前にわかるのか?」
俺:「・・・」

↑の「俺」がRSA暗号が安全だと上司を説得するにはこの後どのように続ければ良いでしょうか?
正論でお願いします。

125:デフォルトの名無しさん
09/05/18 23:09:04
「他の企業でも積極的に使われていますよ」

126:デフォルトの名無しさん
09/05/18 23:09:34
>>124
100%開かない鍵のかかった扉は、もはや誰にも明けられない扉だと思わなければなりません。
それと同じで、正当な手順で暗号を解除して元に戻すことが出来るようにしておく以上、
100%の確率で不正な解除を防げるようなことはありえません。

現行の規格で利用可能な現実的な意味で安全な暗号なんです。

これでどうだ?
つーかスレちがいじゃね?

127:デフォルトの名無しさん
09/05/18 23:42:44
>>124
2048ビット値の素因数分解してもらえ
もしくはできるプログラムを書いてもらえ

128:デフォルトの名無しさん
09/05/18 23:45:49
上司:「でも俺が書けないだけかもしれない」

129:デフォルトの名無しさん
09/05/18 23:48:41
つい最近始めた者です。
知り合いのサンプルコードをみてみると
グローバル変数に
OBJ gPlayer;
という欄があったのですが、これはどういう変数なのでしょうか?

130:デフォルトの名無しさん
09/05/18 23:52:56
OBJ型のgPlayerという名前の変数です

131:デフォルトの名無しさん
09/05/18 23:56:48
OBJ型っていうのが本に書いてないんですが
どういう型なんですか?

132:デフォルトの名無しさん
09/05/19 00:00:44
学校でUNIXでC++やってるんですが、
どうやってプログラム書く画面開くんですか?
lsとか色々入れてたんですが、どこに何を入れればテキストエディタ開けますか。
どうすれば、コンパイルかけれますか?

133:デフォルトの名無しさん
09/05/19 00:03:12
>>124
おまえは本当に俺の上司なのか?

134:デフォルトの名無しさん
09/05/19 00:06:35
>>132
先生に聞け。

135:デフォルトの名無しさん
09/05/19 00:06:52
>>131
サンプル内で定義されてる型だろ

136:デフォルトの名無しさん
09/05/19 00:15:47
>>134
教えてくださいよorz

137:デフォルトの名無しさん
09/05/19 00:22:26
>>136
プログラムを書く画面はviで開くよ。

138:デフォルトの名無しさん
09/05/19 00:22:45
>>135
なるほど
探してみます
ありがとうございましたー

139:デフォルトの名無しさん
09/05/19 00:22:47
>>132
lsとか打ち込む画面で、viと打ち込めばエディタが立ち上がる。
プログラム打ち込んだら、
cc プログラム
でコンパイルできる。

140:デフォルトの名無しさん
09/05/19 00:39:19
>>124
「見つけた人はCIAとFBIから消されますので、公的には発表できません。ですから安心です」

とでも言っておけ。

141:デフォルトの名無しさん
09/05/19 00:49:46
つまんね

142: ◆ZtXjKqCmiQ
09/05/19 05:38:02
>>132
% vi hello.c (プログラム)と打ち込めばviエディタが立ち上がる。
 [a]または[i]プログラム main(){} と打ち込んだら、
 [Esc][:][w][q][Enter] でエディターを終了する。
% cc hello.c (プログラム)でコンパイルできる。

143:デフォルトの名無しさん
09/05/19 10:11:12
バカな上司は持ちたくないですな

144:デフォルトの名無しさん
09/05/19 15:41:16
DOS窓に出力したいんですが、どうすればいいのですか?

145:デフォルトの名無しさん
09/05/19 16:05:40
>>144 = >>132 か?何処まで出来た?

146:デフォルトの名無しさん
09/05/19 20:14:59
AllocConsole

147:デフォルトの名無しさん
09/05/19 20:16:41
HTMLを解析するライブラリはないでしょうか?
言語はC/C++です

148:デフォルトの名無しさん
09/05/19 20:38:47
久しぶりにプログラムを行ったらすごく基本的なところで躓きました

double x;
x=2/5;
printf("%f\n",x);

この結果が0.0000になります
もちろん0.4000にしたいのですが何が悪いんでしょうか?

149:デフォルトの名無しさん
09/05/19 20:54:59
>>148
x = 2.0 / 5/0;

150:デフォルトの名無しさん
09/05/19 20:55:41
>>149
まちがえた。
x=2.0/5.0;

151:デフォルトの名無しさん
09/05/19 21:53:51
今ゲームや単純な練習用プログラムを作ってるんですが、
どこからどこまでクラスを使うべきか、等がよくわかりません
○○の場合は△△を使うのが良い、というようなことを書いてあるサイトなどはありますか?

152:デフォルトの名無しさん
09/05/19 21:57:26
>>151
デザパタの本でも読めばいいんじゃね?
って思ったけど、本読んでも試行錯誤した経験がないとピンとこないかもしれない。

153:デフォルトの名無しさん
09/05/19 21:59:32
OOPで作るなら、全部オブジェクトでつく霊

154:デフォルトの名無しさん
09/05/19 22:10:05
>>152
ありがとうございます
作りながらそういう分野も勉強してみます

155:デフォルトの名無しさん
09/05/20 00:50:51
float型の変数の値をRS-232で送りたいので8bitずつに分けたいんですが、どうすればできますか?
ビットシフトや論理積とろうとしてもエラーがでてしまいます。

156:デフォルトの名無しさん
09/05/20 00:52:50
union {
flaute fdat
struct {
char cdat[4];
}
} udat;

157:デフォルトの名無しさん
09/05/20 01:28:14
ありがとうございます。unionで出来ました。unionってこう使うものだったんですね
でも、何故structでchar cdat[4]を括ってるのか分かりません。何故ですか?

158:デフォルトの名無しさん
09/05/20 03:47:29
IDAという解析ツールのver5.2の体験版が欲しいんですが、誰か持ってませんか?

159:デフォルトの名無しさん
09/05/20 04:17:27
製品版買え

160:デフォルトの名無しさん
09/05/20 09:08:34
>>157
別に括りたくなければ括らなくていいよ。それと、unionを使うことは環境依存という修羅の道に進むことだと言うこともお忘れなく。
# 尤も、float値をバイナリのままシリアル伝送しようと言う時点で既に修羅の道だけど。

161:デフォルトの名無しさん
09/05/20 09:41:13
>>155
memcpyでいいじゃん

162:デフォルトの名無しさん
09/05/20 09:42:14
int i = *(int*)&f;

163:デフォルトの名無しさん
09/05/20 09:45:50
>>161
このケースでどのようにmemcpy()を使うのか、詳しく。

164:デフォルトの名無しさん
09/05/20 09:54:42
できた

unsigned char c[sizeof(float)];
float f;
f = 10000000.0f;
memcpy(c, &f, sizeof(f));
for (int i=0; i<sizeof(c);i++) {
printf("%#x,", c[i]);
}


165:デフォルトの名無しさん
09/05/20 10:13:59
memcpyしなくてもできた
float f;
f = 10000000.0f;
for (int i=0; i<sizeof(f);i++) {
printf("%#x,", ((unsigned char*)&f)[i]);
}


166:デフォルトの名無しさん
09/05/20 10:21:42
>>124
団塊世代の上司ってそんな感じのやつが多いよなあ。
解りもしないくせに説明しろだの言ってくるから困る。
解るためには自分で理解しようという努力が必要なのにその努力もせずに、
自分が理解できないのは説明しているやつが悪いからだ、と責任の押しつけまでしてくることもある。
んで結局は他の何人かが良いと思うか悪いと思うか聞いて直感で判断するわけなんだが、
解らないなら最初からそうしろ、と思うわけなんだよ。
結局のところ、団塊世代は対抗意識が非常に強くて教育者あるいは指導者しての能力が致命的に欠落していると言わざるを得ない。

167:デフォルトの名無しさん
09/05/20 10:25:30
ろくに説明もできないのに何言ってんだか。
内容が知りたいわけじゃなくて、当人がちゃんと理解してるか判断するために
説明させてるんだよ、たぶんw。

168:デフォルトの名無しさん
09/05/20 10:33:30
新しい暗号技術でも開発しろというのか?

169:デフォルトの名無しさん
09/05/20 10:45:23
>>167
つまり部下を信用していないということか。
社内にまで敵を作って大変ですね。
どうせムズカシイ理論とかは理解できないんだから、せめて成果で判断すりゃいいのにね。
最初は小さいことから成果を積ませて、だんだん大きいことをやらせれば良いのに。

170:デフォルトの名無しさん
09/05/20 11:08:12
>>164>>165
わざわざコピーする理由は? 元質は転送が目的なんだから、コピーしなければいけないなんて要件ないよね。

171:デフォルトの名無しさん
09/05/20 11:12:52
>>170
だからコピーやめたやーん

172:デフォルトの名無しさん
09/05/20 11:13:57
わざわざunionにする理由は? 元質は転送が目的なんだから、unionにしなければいけないなんて要件ないよね。

173:デフォルトの名無しさん
09/05/20 11:17:51
で、コピーするコストを掛ける理由は?

174:デフォルトの名無しさん
09/05/20 11:18:39
頭悪いな

175:デフォルトの名無しさん
09/05/20 11:21:20
またメモリ節約厨か

176:デフォルトの名無しさん
09/05/20 11:22:11
>>173
charの配列にコピーすれば取り出せるんじゃね?
って思ったけど、じゃあcharにキャストすればいいんじゃね?
という具合に思考が遷移したんだよ。
ごめんよ。

177:デフォルトの名無しさん
09/05/20 12:05:38
>>167
いや、技術的に正確かどうかなんてどうでもいいんだよ。
納得させられるかどうかだけが問われる。

178:デフォルトの名無しさん
09/05/20 12:08:56
>>177
だから、単に自分の権威を見せつけたいというのと対抗意識の現れでしかないんだよ。

179:デフォルトの名無しさん
09/05/20 12:12:13
団塊世代は技術もなければ精神性も低い。
社会のゴミですね。

180:デフォルトの名無しさん
09/05/20 12:14:42
>>178
うん、そうかもね。
だから?w
それで出世あきらめるの?

181:デフォルトの名無しさん
09/05/20 12:17:26
>>180
技術盗んだら海外におさらばするつもり

182:デフォルトの名無しさん
09/05/20 12:18:53
もう俺が悪いって事でいいからけんかはよせ

183:デフォルトの名無しさん
09/05/20 12:26:22
あーあ 団塊世代のせいでまた人材が日本から流出していく。
さすが社会のゴミ 国賊 団塊世代は日本をつぶす気か

184:デフォルトの名無しさん
09/05/20 12:30:53
何でも他人のせいにするところはどっかの民族とそっくりだな。

185:デフォルトの名無しさん
09/05/20 12:40:46
>>183
団塊世代が悪いかどうかは知りませんが、うちの会社でも団塊世代の天下りを受け入れない方針になったみたいですよ。
まぁ、最近の世論的に天下りはまずいからでしょうが。

186:デフォルトの名無しさん
09/05/20 16:43:34
Windows上でLinuxを起動させたいのですが
VMwareソフトウェアのどのシリーズを選んだらいいのでしょうか?

187:デフォルトの名無しさん
09/05/20 16:44:38
vmware serverをダウンロードしてインストールしる

188:デフォルトの名無しさん
09/05/20 17:14:03
ようしゃなく英語やったorz

189:デフォルトの名無しさん
09/05/20 17:18:15
日本人のくせに英語もできないのか

190:デフォルトの名無しさん
09/05/20 18:17:16
敵性言語として長く使用を禁じられていたので…

191:デフォルトの名無しさん
09/05/20 19:13:14
じゃぁ なでしこでWMwareと同レベルのものを作ってください

192:デフォルトの名無しさん
09/05/20 19:15:49
今は属国なんだからしっかりしる!

193:デフォルトの名無しさん
09/05/20 22:47:50
#include <iostream>
using namespace std;
int main(){
int tmppl;
cin>>tmppl;
int const pl=tmppl;
int php[pl];
return 0;
}

あらかじめ数字を入力して変数tmpplに入れておき
const plの初期化の際にtmpplを使おうと思ったのですがコンパイルエラーが出ます
これは無理なんでしょうか?

また配列の要素数をキーボードで入力した数字で決めたいのですが、どうすればよいでしょうか?

194:デフォルトの名無しさん
09/05/20 22:54:38
>あらかじめ数字を入力して変数tmpplに入れておき
>const plの初期化の際にtmpplを使おうと思ったのですがコンパイルエラーが出ます
>これは無理なんでしょうか?

無理です

>また配列の要素数をキーボードで入力した数字で決めたいのですが、どうすればよいでしょうか?

std::vector

195:デフォルトの名無しさん
09/05/20 22:58:06
int *php=new int [pl];

196:デフォルトの名無しさん
09/05/20 23:07:30
>>194>>195
ありがとうございます!
初期化と代入の違いが何となく分かりました

197:デフォルトの名無しさん
09/05/21 00:31:36
それは初期化とか代入の話じゃなくて
配列の添え字はコンパイル時定数でなければならないという仕様の話じゃないのかい?
っていうか、前にもまったく同じ回答をした気配がする。

198:デフォルトの名無しさん
09/05/21 03:35:38
extern就職誌というのを知らなかったので試してみたら疑問がでました。
(main.cpp)
#include <iostream>
int global = 100;
extern void func(); //ココをexternとっても動作する
int main() {
std::cout << ::global << std::endl;
::func();
return 0;
}

(another.cpp)
#include <iostream>
extern int global;
void func() {
std::cout << ::global << std::endl;
}

俺の理解している範囲ではexternをつけると「この変数もしくは関数はグローバルだ。ただし定義自体はこのファイルでなくて
別のソースファイルでしているから気をつけろ。」ということなのだが、上記のソースではどうも動作が違う。
最初にメイン関数内でグローバル変数のglobalを表示するのはいいだろう。
次にグローバル関数のfuncに突入するのだがfuncはexternがついているので別ファイル、すなわち
another.cppで定義されている。それで実行は可能なのだが試しにメインのextern void func()からexternをとってみた。それでも
動作したのだが、なんで動くんだ?

199:デフォルトの名無しさん
09/05/21 03:57:19
>>extern就職誌

素晴らしい

200:デフォルトの名無しさん
09/05/21 03:59:50
で、とりあえず、externは、「この名前がグローバルだ」とするためのもの。
そのコンパイル単位で定義されているかどうかは関係ない。

それと、関数はデフォルトでextern。
つまり、staticを付けないで宣言(定義も)されたものは、全てexternと同等となる。

201:デフォルトの名無しさん
09/05/21 04:00:00
海外転職誌みたいだな。

202:デフォルトの名無しさん
09/05/21 04:00:17
本題に答えろ

203:デフォルトの名無しさん
09/05/21 04:07:44
URLリンク(eow.alc.co.jp)

通勤医師の就職誌か。

204:デフォルトの名無しさん
09/05/21 04:12:30
おまえ、辞書引いたのか。。

205:デフォルトの名無しさん
09/05/21 08:10:30
>>200
んー、よくわからんのですがとりあえず関数はおいておいて変数については
「この変数はグローバルだ。ただし定義自体はこのファイルでなくて 別のソースファイルでしているから気をつけろ。」
この定義は間違っていますか?それとも合っている?今、同じソースファイルで宣言だけでなく定義もしたらエラーに
なったのですが。。わかりやすい説明モトム
(main.cpp)
#include <iostream>
extern int global;
int global = 4;
void func();
int main() {
std::cout << ::global << std::endl;
::func();
return 0;
}

(another.cpp)
#include <iostream>
void func() {
std::cout << ::global << std::endl;
}


206:デフォルトの名無しさん
09/05/21 08:20:02
どんなエラーだよ
まさか宣言しないシンボルを使おうとかしてないよな

207:デフォルトの名無しさん
09/05/21 08:24:49
another.cppの中ではglobalが何者かわからん。

208:デフォルトの名無しさん
09/05/21 08:45:54
動けばいいんだよ。動けば。

209:デフォルトの名無しさん
09/05/21 11:26:55
コンパイルできない なんでか教えて

#include <iostream>
class Point {
private:
int m_x;
int m_y;
public:
Point(int x = 0, int y = 0): m_x(x), m_y(y) {}
void show() {
std::cout << "m_x = " << m_x;
std::cout << ", m_y = " << m_y << std::endl;
}
Point *operator+(Point *p) {
m_x = m_x + p->m_x;
m_y = m_y + p->m_y;
return *this;
}
};

int main() {
Point *p1 = new Point(3, 4);
Point *p2 = new Point(5, 8);
p1->show();
p2->show();
Point *p3;
p3 = p1 + p2;
p3->show();
return 0;
}

210:デフォルトの名無しさん
09/05/21 11:50:47
>>209
Point *operator+(Point *p) {
...
return this;
}

p3 = *p1 + p2;

コンパイルするだけならこう変更する

211:デフォルトの名無しさん
09/05/21 11:53:23
ありがとうございます
仮にp3 = p1 + p2;
を計算させたい場合は関数定義はどうすればいいですか?

212:デフォルトの名無しさん
09/05/21 13:01:54
ポインタ演算をオーバーロードするのはオススメできない
どうしてもやりたいなら「フレンド関数 オーバーロード」あたりでぐぐれ

あと補足だけど>>210はp1==p3になるから気を付けてね

213:デフォルトの名無しさん
09/05/21 15:22:46
了解しました。

214:デフォルトの名無しさん
09/05/21 16:32:56
std::cout << "ABCDEFGHIJKLMN";
std::cout << "\r12345\n";

とすると12345ABCDEFGHIJKLMNと表示される。
\rは復帰、現表示位置がその行の先頭に移動する。

というのはわかるが、一体何の役に立つんだこれ?
マジで使ったことある人いたら教えてくれ

215:デフォルトの名無しさん
09/05/21 16:40:09
歴史的遺物

216:214
09/05/21 16:41:05
興味程度にどんな歴史的遺物か教えてくれ

217:デフォルトの名無しさん
09/05/21 16:42:37
コマンドライン上で簡易進捗バー出すのに便利。

218:デフォルトの名無しさん
09/05/21 16:49:36
>>205
externは、別のファイルで定義しているリソース(変数とか)を
このファイルでも流用するよ、っていう宣言。
C++では、変数名・関数名などは、その変数・関数を使用するより前に、
それが何なのかを同じファイル中でコンパイラに教えてやらないとエラーになる。

お前さんのソースの中で、グローバル的に使用されているのは、
void func()とint globalの2つ。
func()を使用しているのはmain.cppだが、ここではfunc()を使用するより
前に
void func();
と宣言してあるから無問題。
一方、another.cpp内で使用されているglobalは、定義はmain.cppでしているが、
another.cpp内で宣言していない。
だからコンパイラはanother.cppのglobalという識別子が何なのかという
情報を教えてもらってないのでエラーになる。


219:デフォルトの名無しさん
09/05/21 16:52:01
歴史というなら、それこそ5,60年代とかに遡れるんじゃね?

URLリンク(ja.wikipedia.org)

220:デフォルトの名無しさん
09/05/21 17:05:44
>>214
つか、それ12345FGHIJKLMNって表示されないか?
処理系依存なんかな。

221:デフォルトの名無しさん
09/05/21 21:03:52
すまん質問させてもらう

void *operator new(size_t size,const char *pname, int nline );
#define new new(__FILE__, __LINE__)

とnewを実行したソース名と行数を取ってるんだが
これのdelete版が出来ない
もしかしてdeleteの方は無理?
STL使ったら、妙なdeleteが増えて特定したいんだ

222:デフォルトの名無しさん
09/05/21 21:43:31
>>220
処理系っつーか、出力装置 (と、その状態) による。

223:デフォルトの名無しさん
09/05/21 22:21:07
MFCを使ってライブラリを利用するのと
SDKで一からアプリケーションを作成するのは
どちらがいいでしょうか?

224:デフォルトの名無しさん
09/05/21 22:27:33
MFC。間違いない。マクロやキャスト使いまくりで興奮する。

225:デフォルトの名無しさん
09/05/22 00:48:32
最初のうちはSDKで必死になって窓の基本を覚え、その後MFCをさわって逝く

まあ俺のことだが

226:205
09/05/22 01:07:35
>>218
やっと理解できたー!有難う。
というわけで俺んなかでの結論;
「extern就職誌をつけられた変数・関数はこのファイルでこれから使うけどどっか別のソースファイルで
指定されてるからね!ちなみに関数のプロトタイプがあるとしたらそれはextern就職誌つけなくてもそれは
externとみなされてるから、別のファイルで指定されてるかもしんないし、ひょっとするとこのファイルの
後で定義されてるかもしんない」

という感じか。
なんか認識にまだ問題有ったら指摘して

227:デフォルトの名無しさん
09/05/22 11:00:27
就労意欲は汲み取れた。

228:デフォルトの名無しさん
09/05/22 11:55:10
ワロタ

229:デフォルトの名無しさん
09/05/22 15:31:37
まずはexternなしでソースを書いてコンパイルしてエラーが
出たらexternをつければよい

230:デフォルトの名無しさん
09/05/22 16:45:03
そもそもexternって使う機会あんまなくないか?

231:デフォルトの名無しさん
09/05/22 17:56:56
グローバル変数

232:デフォルトの名無しさん
09/05/22 17:59:49
グローバル変数そのものをほとんど使わないからな

233:デフォルトの名無しさん
09/05/22 18:32:07
グローバル変数を使うとしても、
初期化の問題を恐れてほとんど全部
関数スコープ内でのstatic変数の参照の呼び出しにしちゃうし
(つまり結局グローバルスコープではない。)



234:デフォルトの名無しさん
09/05/22 18:39:49
グローバル変数でもグローバル変数を入れるクラスを作るからね

235:デフォルトの名無しさん
09/05/22 19:22:42
グローバル変数がグローバル関数になり、グローバル関数がグローバルオブジェクトになるわけですね。

236:デフォルトの名無しさん
09/05/23 09:48:22
template <int N> foo bar(Hoge hoge1, Hoge hoge2, … , Hoge hogeN)
みたいな感じでtemplate <int N>のNに対応して引数の数を変える関数とかって標準で作れますか?

237:デフォルトの名無しさん
09/05/23 10:04:52
多重定義しかありません

238:デフォルトの名無しさん
09/05/23 12:05:47
可変引数リストじゃだめなんだろうか

239:デフォルトの名無しさん
09/05/23 12:21:57
Cを使ってlsライクなプログラムを作ろうとしてて、自分の環境下で動いているlsコマンドの動作を元に作ろうと思ってるんだけど
ls-オプションの動作のCで書かれたソースはコンピュータ内にあるのでしょうか?

240:デフォルトの名無しさん
09/05/23 12:38:52
引数の個数が変化すれば bar() の中身も変える必要があるしね

241:デフォルトの名無しさん
09/05/23 12:48:05
>>239
lsは、Coreutilsに含まれているはずだから
URLリンク(www.gnu.org)
から手に入れることができるはずだよ

242:デフォルトの名無しさん
09/05/23 13:22:25
今加速度センサから値を得て速度を出してるんですが、ノイズや誤差の影響で
加速度を積分した値が静止させても0に戻りません。
そこで出来るだけ正確に無理矢理0に戻そうとしているんですが、何かいい方法ありませんか?
あと、このようなフィルタ処理?とかを扱ってるスレってありますか?

243:デフォルトの名無しさん
09/05/23 15:12:40
getopt

244:デフォルトの名無しさん
09/05/23 18:32:35
C/C++でHTMLのパーサってないでしょうか?

245:デフォルトの名無しさん
09/05/23 21:26:05
なんでop[]は引数をひとつしか取れないようにしたんだろう

246:デフォルトの名無しさん
09/05/23 21:34:12
>>245
ハゲに聞いてくれ

247:デフォルトの名無しさん
09/05/23 21:45:27
>>245
C++はPascalじゃないよ
[a, b]なんて書き方はないから

248:デフォルトの名無しさん
09/05/23 21:53:10
何をブチ込んでもいいんだから
気が済むまでメンバ変数詰め込んだクラスを引数にとる[]を定義すればいいじゃないか

249:デフォルトの名無しさん
09/05/23 22:03:42
delete a, b;
とかやるのと一緒だな>>247

250:246
09/05/23 22:09:52
>>247
別に>>245はPascalとごっちゃにしているわけではないだろう。
オペレータオーバーロードとしては[a, b]の形も認めてもいいんじゃないかって
>>245は言いたいんじゃないの?

251:デフォルトの名無しさん
09/05/23 22:24:41
C++はカンマ演算子の意味が違うから無理
関数呼び出しはむしろ特別な場合

252:246
09/05/23 22:28:16
>>251
そりゃ知っているけどさ、
出来たら便利じゃない。
今からじゃ互換性の関係があって無理だけど、
最初の段階で可能であるように仕様を定めておけばよかったのでは。

・・・ということも踏まえた上で、
だから俺は「ハゲに聞いてくれ」と言ったのだ。

253:デフォルトの名無しさん
09/05/23 22:31:00
C言語で連立方程式を解くにはどんな方法がありますか?
2次方程式だけじゃなく3次4次と応用が利くようなやり方で

254:デフォルトの名無しさん
09/05/23 22:32:35
>>253
Gaussの消去法でぐぐれ

255:デフォルトの名無しさん
09/05/23 22:35:21
あほか
ガウス法は一元一次方程式にしか使えん
反復法なら使える

256:デフォルトの名無しさん
09/05/23 22:35:38
もしかして: ガウスの消去法

257:デフォルトの名無しさん
09/05/23 22:36:27
掃き出し法だろ常考

258:デフォルトの名無しさん
09/05/23 22:45:46
お前ら・・・(汗

3次とか4次にも使えるようにって書いてあるのが読めないのか?

259:デフォルトの名無しさん
09/05/23 22:46:09
Gauss-Seidel反復法マジオススメ

260:デフォルトの名無しさん
09/05/23 22:57:23
反復法で10万次方程式解いて悦にひたるのがマイブーム

261:デフォルトの名無しさん
09/05/23 23:02:55
long num=100;
このとき
++(++(++(++num)));
って動作は未定義になりますか?
一つの式の中で値が複数回変更されているように見えるのですが。

262:デフォルトの名無しさん
09/05/23 23:04:42
>>261
ならない
カッコがついているので副作用完了点がカッコの中で終了するから

263:261
09/05/23 23:14:35
>>262
となると、自作クラスの前置インクリメント演算子のオーバーロードの返り値は、
const参照で*thisを返すのではなく
非constな参照で*thisを返すべきなのですね。
ありがとうございました。

264:デフォルトの名無しさん
09/05/23 23:15:13
>>261
そもそも
++(++foo)
は、++fooが評価後に値なので、++を作用させることができない気がするのだが
これがC++の参照返す++演算子のオーバーロードならどうなるか知らないけど

265:261
09/05/23 23:19:51
>>264
でも一応
long num=100;
++(++(++(++num)));
はコンパイル可能です。

266:デフォルトの名無しさん
09/05/23 23:20:04
Cでは前置も後置も値のコピーを返すけど
C++の前置は自身を左辺値として帰すので有効。

267:デフォルトの名無しさん
09/05/23 23:24:35
ああ、cとc++では扱いが違ったのですね。
c++脳なので知りませんでした。


268:デフォルトの名無しさん
09/05/24 10:29:25
HTMLパーサ自作できたのだわ
1時間もかからなかったのだわ
こんなに簡単なのでググってもでないわけだわ

JAVA, Ruby でパーサ使ってる奴って・・・

269:デフォルトの名無しさん
09/05/24 12:02:03
+は可算演算子だよね。

では%は何演算子と呼べばいい?


270:デフォルトの名無しさん
09/05/24 12:05:10
剰余演算子

271:デフォルトの名無しさん
09/05/24 12:14:19
>>268

天才だな

272:デフォルトの名無しさん
09/05/24 12:46:43
よく言われる

273:269
09/05/24 13:00:27
>>270
ああなるほどね。
ありがと。

274:デフォルトの名無しさん
09/05/24 13:14:03
そこらへんのパーサって非標準(タグ閉じ忘れとか含め)のHTML読めるの?

275:デフォルトの名無しさん
09/05/24 14:24:58
STLの投げる例外の一覧みたいなサイトってありますか?

276:269
09/05/24 14:39:30
+num

-num
といった、符号をあらわす演算子はなんて言えばいい?
単項演算子じゃおかしいし、符号演算子とか??

277:デフォルトの名無しさん
09/05/24 14:44:18
性符号・フフ郷

278:デフォルトの名無しさん
09/05/24 14:51:04
>>277
サンクス!

279:デフォルトの名無しさん
09/05/24 17:02:00
int foo(bool arg1, bool arg2)
{
if(arg1){return 1;}
else if(arg2){return 2;}
else return 3;
}
この関数をこれ以上速く記述することって可能でしょうか?
例えばelseを無くしたりすることによって。



280:デフォルトの名無しさん
09/05/24 17:15:45
速く記述する、ってどういうこと?
短くの間違い?

281:デフォルトの名無しさん
09/05/24 17:19:50
>>279

int foo(bool arg1, bool arg2)
{
return arg1 ? 1 : arg2 ? 2: 3;
}


282:デフォルトの名無しさん
09/05/24 17:32:52
static int f[][] = {{3, 2}, {1, 1}};
int foo(bool arg1, bool arg2){
  return f[arg1][arg2];
}

283:デフォルトの名無しさん
09/05/24 17:46:34
static int* f = {3, 2, 1, 1};
int foo(bool arg1, bool arg2){
  ASSERT((!!arg1) == arg1 && (!!arg2) == arg2);
  return f + ((arg1 << 1) | arg2);
}

284:デフォルトの名無しさん
09/05/24 17:47:21
>>279

速くするんだったらinline asmかな
やり方知らんから教えられないけど

285:279
09/05/24 18:06:32
>>280
速く動作するように記述したいという意味です。
確かに速記でもするかのような書き方でした。

>>281-283
ありがとうございます。

>>284
ありがとうございます。
一応標準C++だけで書きたいと思っております。


みなさんありがとうございます。
連続質問で申し訳ないのですが、
int bar(bool arg1, bool arg2)
{
if(arg1&&arg2){return 1;}
else if(arg1||arg2){return 2;}
else return 3;
}
でしたらどう記述するのが(動作速度的に)ベストでしょうか?

286:デフォルトの名無しさん
09/05/24 18:11:24
前のもそうだがその程度ならそのまま書くのが一番良いと思う。
特定の環境を想定しないのなら尚更だ。

287:デフォルトの名無しさん
09/05/24 18:12:35
>>286
たしかに、ボトルネックにならないなら素直な書き方が一番ですかね。
ありがとうございました。

288:デフォルトの名無しさん
09/05/24 18:15:00
ここ行けば、そういうの好きな人いっぱい居るぞ。
スレリンク(tech板)

俺は面倒くさいからパス。

289:デフォルトの名無しさん
09/05/24 20:14:35
数人の身長が記されているtxtファイルを読み込んで、

140 ー 145cm **
145 ー 150cm *
150 ー 155cm **
155 ー 160cm **
160 ー 165cm ****
165 ー 170cm **

の、ようにヒストグラムで出力するプログラムの作り方を教えてください。

290:デフォルトの名無しさん
09/05/24 20:17:07
読み込んで出力すればいいよ

291:デフォルトの名無しさん
09/05/24 21:35:54
>>289
1.テキストファイルを読み込む
2. int配列にそれぞれの範囲の要素を加算していく
3 配列の要素の値の数だけ*を表示する。

順番に作っていけばいい。


292:287
09/05/24 21:47:55
>>288
ありがとうございます。
・・・ボトルネックになるようでしたら挑戦してみます。

293:デフォルトの名無しさん
09/05/24 21:49:47
float A[4][21];
でA[2]とA[4]を入れ替える方法教えてください

294:デフォルトの名無しさん
09/05/24 21:56:24
>>293
std::swap(A[2][x],A[4][x])
でxを0~21まで回せばいいんじゃない?


295:デフォルトの名無しさん
09/05/24 21:58:01
for(int i = 0; i < 21; i++){
float t = A[2][i];
A[2][i] = A[4][i];
A[4][i] = t;
}

296:デフォルトの名無しさん
09/05/24 21:58:36
普通にmemcpy3回じゃない?
ビットスワップでもいいけど

297:デフォルトの名無しさん
09/05/24 22:03:43
どうかなぁ。並列化考えたらmemcpyは不利な気がした。

298:デフォルトの名無しさん
09/05/24 22:09:07
どのデーター量なら>>295が一番早い

299:デフォルトの名無しさん
09/05/24 22:14:08
㌧ 一個一個交換する方法でやってみます

こんな風にしてたんだけど何故か変な値になっちゃうんだよね。
memcpy(B,A[i],sizeof(float)*(n+1));
memcpy(A[i],A[i+j],sizeof(float)*(n+1));
memcpy(A[i+j],B,sizeof(float)*(n+1));

300:デフォルトの名無しさん
09/05/24 22:15:50
A[4][n+1]; B[n+1];としてね

301:デフォルトの名無しさん
09/05/24 22:16:02
クラスの2次元配列を用いるにはどう宣言すればよいでしょうか
具体的には、
class Complex {
public:
double re;//実部
double im;//虚数部
};
という複素数のクラスを用いて行列を作成したいのですが、メインで
#define SIZE 5
int main(){
Complex **comp_mat;
comp_mat = new Complex[SIZE][SIZE];
}
のようにしますと(*)[5]型は**型に変換できませんとエラーが出ます。

どのようにすればいいのかわからないので1次元で宣言して以下のように
アクセスしていました。(comp + i * SIZE + j )の記述がわかりにくいので
簡単にしたいのですが、よろしくお願いします
int main(){
int i , j ;
Complex *comp_mat ;
comp_mat = new Complex[SIZE*SIZE] ;
//compを(-1 , -1)の値で埋める
for( i = 0 ; i < SIZE ; i++ ){
for( j = 0 ; j < SIZE ; j++){
(comp + i * SIZE + j ) ->re = -1.0 ;
(comp + i * SIZE + j ) ->im = -1.0 ;
}
}
・・・・省略・・・・
}

302:デフォルトの名無しさん
09/05/24 22:20:57
>>291
ありがとうございます

303:デフォルトの名無しさん
09/05/24 22:42:23
>>293
std::swap(A[2],A[4])はどう?

304:デフォルトの名無しさん
09/05/24 22:52:58
C++で
fout << "Hello World" << endl ;
などでファイル書き込みができますが、
foutで複数ファイルへの書き込みを区別するにはどうすればいいのでしょうか

FILE *f_eng_p , *f_jpn_p ;
fprintf( f_p , "Hello World ") ;
fprintf( f_s_p , "こんにちは 世界") ;
のようにファイルポインタを2つ宣言してfprintfで行うのでしょうが、
fprintfは記述がめんどくさいのでどなたか知恵をお貸しください

305:デフォルトの名無しさん
09/05/24 22:54:40
すみません、上の f_p と f_s_p は以下の間違いです
FILE *f_eng_p , *f_jpn_p ;
fprintf( f_eng_p , "Hello World ") ;
fprintf( f_jpn_p , "こんにちは 世界") ;

306:294
09/05/24 23:04:25
>>303
配列へのポインタだから無理だろ。
だから>>294を提唱するぜ。

307:デフォルトの名無しさん
09/05/24 23:04:51
>>304
出力ストリームを複数持てばいいだけじゃないの?

308:デフォルトの名無しさん
09/05/24 23:15:46
>>303
それだとエラーでちゃいます。swap(A[2][x],A[4][x])の方法で上手くうごきました。
あと、すみませんがもう一つ質問お願いします。

void func(二次元配列を受け取る){
  処理
}

int main(){
  float A[x][y];
  A[0~x][0~y]に値を代入;
  func(?);
  return 0;
}

ここで関数funcはA[4][5]でもA[99][99]でもどんな大きさの二次元配列でも
受け取れるようにしたいんですが、関数funcの宣言の引数と、main関数内で
関数funcに渡す引数はどのようにすればいいですか?

309:デフォルトの名無しさん
09/05/24 23:29:22
それは無理なので
std::vector< std::vector< float > >
使っとけ

310:デフォルトの名無しさん
09/05/24 23:33:40
void func(float *a, int m, int n){
 処理
}

int main(){
  float A[x][y];
  A[0~x][0~y]に値を代入;
  func((float*)A, x, y);
  return 0;
}


311:デフォルトの名無しさん
09/05/24 23:34:59
ありがとうございます。無理なんですね。どうりで調べてもA[][5]とかしか出てこないわけだ
C言語でしたいのでA[]にしてA[y*x+y]でアクセスすることにします。

312:デフォルトの名無しさん
09/05/24 23:45:01
>>311
前にも同じような質問が出ていましたが、最近のCの規格では

void func (int m, int n, float a[m][n]) { 処理 }

といった書き方ができますよ。mとnは呼び出し側で決められます。

【初心者歓迎】C/C++室 Ver.65【環境依存OK】
スレリンク(tech板)
>>836 あたりからの書き込みにも情報があります。

313:デフォルトの名無しさん
09/05/24 23:57:32
>>312
これは知らなかった。でも、VS2008でやってみたらエラー出て無理だった

314:デフォルトの名無しさん
09/05/24 23:59:01
マイクロソフトはC99シカトしてます。

315:デフォルトの名無しさん
09/05/25 00:04:33
0Xどうするんだろうね。

でも、C++/CLIはもはやC++なのかどうなのかも怪しいw

316:デフォルトの名無しさん
09/05/25 00:19:10
>>314
VS2010でauto、decltype、λ式、右辺値参照、static_assertは取り敢えず入れる
予定だそうだ

それ以上のC++0x対応は今の所未定

317:デフォルトの名無しさん
09/05/25 00:29:27
C++ なんだから配列には vector 使おうよとか
配列の配列をポインタのポインタに置き換えられないことは
大概の教科書で懇切丁寧に説明しているはずなのでもう一度教科書読んでねとか
全力でマクロは避けろ( C++ Coding standards )とか
なぜに FILE 構造体?とか

いろいろ思った^^

318:デフォルトの名無しさん
09/05/25 00:37:58
>>317
その辺りはD&Eを読んでもらえば歴史的経緯がよくわかる

Cは一人、いや二人の人間が独善で作った言語だが
C++はコミュニティに属する数多くの人の意見を元に作られてる

中心人物は禿だったがもはや禿が一人で作ったC++とは絶対に言えまい

319:デフォルトの名無しさん
09/05/25 00:45:46
>>301
動的二次元配列の作成と削除は
Complex **comp_mat = new Complex *[SIZE];
for ( size_t i = 0; i != SIZE; ++i )
comp_mat[i] = new Complex();
for ( size_t i = 0; i != SIZE; ++i )
delete [] comp_mat[i];
delete [] comp_mat;

でも、C++でこんなことしちゃらめ。

320:デフォルトの名無しさん
09/05/25 00:58:46
>>319
なんでダメなの?
俺はよく使ってるぜ
コンストラクタとデストラクタにぶち込んでおけば十分じゃん

vectorを使う事もあるけど少なくとも速度が最大要求の
科学技術計算では>>319の方法をよく使うぞ

321:デフォルトの名無しさん
09/05/25 01:13:03
速度重視ならクラスで包んじゃダメでしょ。

・・・それはさておき、C++のモダンなスタイルは可読性重視になってるからっていう弱い理由。
もちろん、わかって使う分には問題ないよ。


322:デフォルトの名無しさん
09/05/25 01:19:41
「速度が最大要求」ならクラスはおろか関数呼び出しもNGでしょ^^
なにより new と delete 自体が遅い。
memcpy を使うほうが一般的。
どうしても C++ ライクに書きたいなら、せめて allocator クラス使おうよ。


323:デフォルトの名無しさん
09/05/25 01:22:42
memcpy じゃなくて malloc の間違いでした^^スマンコ

324:デフォルトの名無しさん
09/05/25 01:38:26
そもそも速度優先なら、そんなに頻繁にメモリの確保/解放はしない。
どうしてもって言うのなら、自前でメモリ管理する。

325:デフォルトの名無しさん
09/05/25 01:38:35
>>321-322
いや速度重視ならmallocもそのままでは使わないだろ。自前でプールとかしてさ。

326:デフォルトの名無しさん
09/05/25 01:41:30
だな。つか new 遅すぎ。

327:デフォルトの名無しさん
09/05/25 01:45:08
っていうかC++が速くない
Cより5%遅いが開発の指標だったから

328:デフォルトの名無しさん
09/05/25 01:51:20
OCN規制で携帯でしか書けないのが辛いぜ。

329:デフォルトの名無しさん
09/05/25 01:53:35
支援

330:デフォルトの名無しさん
09/05/25 02:56:08
これlj(x)の分子が0になっちゃうんだけど、これで合ってるの?

331:デフォルトの名無しさん
09/05/25 02:56:25
URLリンク(ja.wikipedia.org)

URL忘れてたこれ

332:デフォルトの名無しさん
09/05/25 06:04:25
なんか一気にレベル低くなってね?

333:デフォルトの名無しさん
09/05/25 09:36:57
※スレを勃てるまでもない低俗なC/C++の質問はここでお願いします

334:デフォルトの名無しさん
09/05/25 19:27:15
C++で文字列を入力し、そこに指定されていた文字が含まれている場合、そうでない場合に分けて処理を行いたいです。
どう書けばいいでしょうか?
文字列はアルファベットなのですが、
指定するすべての文字についてif,elseifで判別するしかないのでしょうか?

335:デフォルトの名無しさん
09/05/25 19:31:35
>>334
そうだよ

336:デフォルトの名無しさん
09/05/25 19:45:53
>>335
ありがとうございます。

もう一つお願いします。

たとえば、
abddみたいな文字列があって、
先頭の1文字づつ判別していきたいです。つまり、
1回目の処理はaについて、
2回目の処理はbについて・・・
のような感じです。
どう考えればいいでしょうか?

337:デフォルトの名無しさん
09/05/25 20:29:58
何をどう判別するのかわからん。
具体的な入力例と、期待される結果を示してくれ。

338:デフォルトの名無しさん
09/05/25 20:45:19
>>337
アルファベットと書きましたが、半角英数すべてで、
accaと入力したとすれば

aが1個存在するので coutで1と出力
cが2個存在するので coutで2と出力
aが1個存在するので coutで1と出力
みたいな感じです。

よろしくお願いします。

339:デフォルトの名無しさん
09/05/25 21:03:30
#include <iostream>
#include <string>
using namespace std;
int main(){
    int n = 0;
    string s;
    cin >> s;
    for(int i=0; i<s.size(); i++){
        n++;
        if(s[i]==s[i+1]) continue;
        cout << n << endl;
        n = 0;
    }
    return 0;
}

340:デフォルトの名無しさん
09/05/25 21:40:58
ファイル操作にはいろいろとエラーチェック用のメソッドが用意されてますが、例外機構をつかわない理由はあるのでしょうか?

341:デフォルトの名無しさん
09/05/25 23:11:06
例外を使いたくない環境ってのが結構あるからかも

342:デフォルトの名無しさん
09/05/26 22:31:02
C言語そのものの質問とはちょっと違うのですが#ifdef,#ifndefに対応する#endifを見つけて、
どれとどれが対応しているかのコメントを追加するようなツールは無いでしょうか?


//////////入力///////////
#if AAA
...
#if BBB
...
#endif
...
#endif

///////////出力///////////
#if AAA
...
#if BBB
...
#endif //BBB
...
#endif // AAA


343:デフォルトの名無しさん
09/05/26 23:16:37
>>342
知らないなぁ。

俺は大抵はコメントを毎回記載しちゃう派だし。
あるいはエディタの機能で対応する#~に飛んだりするし。

良い課題として作ってみてよ。
そして是非とも公開してくれ!

344:デフォルトの名無しさん
09/05/27 17:04:28
charで配列の要素数を変数にしています。
cinで入力後、この要素数の最大値を調べたいのですがどうしたらいいでしょうか?

345:馬牛
09/05/27 17:14:21
C++です。
a=10,b=3,c=2として、!aかつb>cの戻り値、!aまたはb>cの戻り値はそれぞれどうなりますか?
よろしくです。

346:デフォルトの名無しさん
09/05/27 17:15:56
felse true

347:デフォルトの名無しさん
09/05/27 17:33:15
18時まで引っ張ろうぜw

348:デフォルトの名無しさん
09/05/27 17:44:52
>>345
君は、C++をやる前に離散数学を勉強することをお薦めする。

>>347
どこの誤爆だ

349:デフォルトの名無しさん
09/05/27 17:46:29
スレリンク(tech板:346番)
これだろ

350:デフォルトの名無しさん
09/05/27 18:03:03
https通信をOSによらずに行いたいと思っているのだが、手の込んだことするのは
面倒になりcurl.exeを呼び出すことで解決することにした。
先頭の10KBとかは読めないと思っていたら対応していた。

351:デフォルトの名無しさん
09/05/27 21:26:13
main{

func1();

}


func1{
char array[100];
array[1] = 10;

func2();

}

func2{

char sum[10];

sum[0] = array[1];
}

このようにプログラムする場合、func2にてarray[1]をセットする場合、
グローバル宣言するしかないのでしょうか?

できれば、main内でfunc1が終了した時点でarrayで使用していた変数を消滅させたいのです。
メモリ使用量を少なくする意味で

352:デフォルトの名無しさん
09/05/27 21:29:16
func2(array[1] );

353:デフォルトの名無しさん
09/05/27 21:31:49
>>350
何のことを言っているのだい?
curl.exeはWindows専用ではないのかい?

354:デフォルトの名無しさん
09/05/27 21:36:15
>>352

func1{
char array[100];
array[1] = 10;
array[2] = 5;

func2();

}
func2{

char sum[10];

sum[0] = array[1];
sum[1] = array[2];
}

こうだった場合は、func2();
の中は何になるのでしょうか?

355:デフォルトの名無しさん
09/05/27 21:39:11
>>354
参考書とにらめっこしてこい。 コードの書き方からしてお前は根本的に理解できていない。

356:デフォルトの名無しさん
09/05/27 21:48:55
すみませんお願いします

357:デフォルトの名無しさん
09/05/27 21:50:33
353
SYSTEMの中身を対応するのに変える MACでもUNIXでもあるはず
curl.hの使い方がわかればいいんだけど、メモリやファイルに読み書きするのに
専用の関数を用意しなければならず難しかった。
それなら直接exeを動かしたら簡明と思った。

358:デフォルトの名無しさん
09/05/27 21:51:13
func2(array);

359:353
09/05/27 22:57:24
>>357
UNIX系でも~.exeって名前なの?


360:デフォルトの名無しさん
09/05/27 22:59:06
>>354
お前ふざけてんの?
何言ってるの?
スレタイ読めよ、ここはC/C++の質問部屋だぞ!!
そんな謎の言語は知りません!


361:デフォルトの名無しさん
09/05/28 02:25:31
質問します。

Windows環境で、とあるC++用ライブラリ hoge.lib があります。
このライブラリには、関数を呼び出すためのヘッダファイル hoge.h が用意されていますが、
実際のソースは提供されていないものとします。
また、ライブラリ内部だけで使われている関数は、hoge.h には記述されていないようです。

さて、このライブラリには名前空間は設定されていません。
そのままでは使いにくいので、Hoge::~ という名前でライブラリの関数を呼び出せたら便利だと思いました。

この状況(*.h と *.lib のみ)で、ライブラリの関数に名前空間をセットすることは可能でしょうか?


362:デフォルトの名無しさん
09/05/28 06:25:28
>>361
君がhoge_ns.hとかいうヘッダを自作して、
hoge_ns.hでは
namespace Hoge
{
inline int bar(int x)
{
return bar(x);//hoge.hの。
}

//...etc
}
のようにラップしたらだめかな?

363:デフォルトの名無しさん
09/05/28 06:30:49
c/c++で仕事している人たちに質問です。
基本情報技術者試験って、最低限必要な資格ですか?

364:デフォルトの名無しさん
09/05/28 07:01:46
5000円程度で取れるんだから、とっとけ。

365:デフォルトの名無しさん
09/05/28 07:09:15
生産性と資格には関連はないだろ。
未経験なら持っていたら考慮されるとか一時金や給料がすこしだけ良くなるとかだろう。

366:デフォルトの名無しさん
09/05/28 07:18:18
>362
ありがとうございます。
諦める決心がつきそうです。

367:デフォルトの名無しさん
09/05/28 07:29:43
webページを解析したいのですが、HTMLを整形済みXMLに変換するライブラリはありますか

368:デフォルトの名無しさん
09/05/28 07:57:22
自己解決しました。 
HTMLのパーサーがあるみたいでそっちのします。

369:デフォルトの名無しさん
09/05/28 10:06:12
くわしく

370:デフォルトの名無しさん
09/05/28 10:32:40
>>366
C用のライブラリだったら
namespace hoge {
extern "C" {
#include "hoge.h"
}
}
である程度ごまかせるんだけどな。

それにusing hoge::hogedata_t
とか#pragma comment(lib)とかも使って。

371:デフォルトの名無しさん
09/05/28 17:29:11
fstream& getLogFile() {
static fstream logFile;
return logFile;
}
として、非局所的なオブジェクトのコンストラクタ内でもログを取れる用にしたんですけど、
logFileの破壊と非局所的なオブジェクトの破壊はどちらが先に起こるか決まってるんですか?
非局所オブジェクトの破壊時にもログをとるのに使えるのか知りたいので。

372:デフォルトの名無しさん
09/05/28 19:02:56
フーリエ級数展開をするプログラム を作ったんだけど異常値しか出ないのでどこが悪いか教えてください
↓のプログラムの場合はf(x)=x [xが0-5] , 0 [xが5-10] で波長が10でループするような式
//最初にxの値を入力してから
hani_suu = 2;//範囲の数
hani[0]=0.0; hani[1]=5.0; hani[2]=10.0; //(0~5),(5~10)という意味

double temp=0,temp_cos,temp_sin;

for(int j=0;j<hani_suu ;j++)//以下a0の計算
for(double i = hani[j];i<hani[j+1];i+=0.1)temp += 0.1 * kansuu(i,j);//積分計算   ※kansuu(i,j)はjが0のときf(x)=x,1のときf(x)=0を返す

for(int n=1;n<50;n++)//以下an,bnの計算 
{
temp_cos=0; temp_sin=0;

for(int j=0;j<hani_suu;j++)
for(double i = hani[j];i<hani[j+1];i+=0.1) //積分計算
{
temp_sin+= 0.1 * kansuu(i,j)*sin((2.0*PI*i*n)/10);
temp_cos+= 0.1 * kansuu(i,j)*cos((2.0*PI*i*n)/10);
}

cos_v[n] = temp_cos; //an
sin_v[n] = temp_sin;//bn
}

temp = temp/2.0; //以下a0+Σ(ancos+bnsin)
for(int n=1;n<50;n++)
temp = temp + cos_v[n] * cos((2.0* PI * n * x )/10) + sin_v[n] * sin((2.0* PI * n * x )/10);
//最終的なtempが答え
見にくいですがお願いします

373:デフォルトの名無しさん
09/05/28 19:05:24
勉強用に、シンプルな多倍長加算を作ってるのですが
もっとシンプルに出来ますでしょうか
効率は意識していません

string add(string l,string r){
int carry=0;
stringstream ss;
if(l.size()>r.size()){swap(l,r);}
reverse(l.begin(),l.end());
reverse(r.begin(),r.end());
int i=0;
for(;i<l.size();++i){
unsigned int tmp=(l[i]-'0')+(r[i]-'0')+carry;
if(tmp/10){carry=1;}else{carry=0;}
tmp%=10;
ss<<tmp;
}
for(int j=i;j<r.size();++j){
unsigned int tmp=r[i]-'0'+carry;
if(tmp/10){carry=1;}else{carry=0;}
tmp%=10;
ss<<tmp;
}
if(carry){ss<<'1';}
string ret=ss.str();
reverse(ret.begin(),ret.end());
return ret;
}

374:デフォルトの名無しさん
09/05/28 19:40:36
>>372
感覚で読むとfor ( ; i<hani[j+1]; )が臭うコードに見える。

>>373
C++は、よくわからないが、やりたいことはなんとなく伝わる。
for()は、二つに分ける必要があったのかな。
似たようなことをしているから、for()のなかで、if()するようなコードが浮かびそう。
引数を参照にしたり、const char *foo = bar.c_str()で添字アクセスとか
ただの高速化だけど。

375:デフォルトの名無しさん
09/05/28 20:17:36
ヘッダファイルでプログラムソースファイルを分割することができますが
ヘッダファイルも分割する方法があったら教えて下さい

376:デフォルトの名無しさん
09/05/28 20:20:20
ヘッダファイルはいくらでも分割できます。

377:デフォルトの名無しさん
09/05/28 20:38:31
VC++2008を使ってるのですが
自動修復情報の保存ってのが左下にでてしょっちゅう重いです
なんですかこれ

378:デフォルトの名無しさん
09/05/28 20:59:40
事故解決
URLリンク(blog.goo.ne.jp)

379:デフォルトの名無しさん
09/05/28 21:38:47
実際の数学みたいにxを数字にせずxとして計算するにはどうしたらいいですか?
例えば2x*3x=6x^2みたいな感じで計算して、あとで6x^2のxに色々な数字を代入
できるようにしたいんですが

380:デフォルトの名無しさん
09/05/28 21:54:57
関数電卓のソースを探して見てみよう!

381:デフォルトの名無しさん
09/05/28 22:08:34
ある関数内でnewして得たアドレスを返り値にして
それを外で受け取ったらそのまま、受け取らなかったらdeleteする
みたいな記述はどうやったらできますか?

382:デフォルトの名無しさん
09/05/28 22:39:54
>>381
受け取らなかったらとは、どういう状態?

383:デフォルトの名無しさん
09/05/28 22:50:55
>>382
pHoge = allocHoge(); // OK

allocHoge(); // 自動でdelete したい!

384:デフォルトの名無しさん
09/05/28 23:01:55
>>383
生のポインタじゃムリじゃね?
スマートポインタを使うとか。

385:デフォルトの名無しさん
09/05/29 00:23:19
wrap_allocHoge( void* p )的なものを外側に作って
p==NULLならそのまま削除
p!=NULLなら入れて返すとか


386:デフォルトの名無しさん
09/05/29 00:34:41
>>383
C++なら>>385に引数無しの関数をオーバーロードするのもアリだと思う

387:372
09/05/29 04:19:06
>>372では
for(double i = hani[j];i<hani[j+1];i+=0.1)temp += 0.1 * kansuu(i,j);//積分計算 
こんな風に小さい範囲を刻んで積分計算してるんですが
もっと精度を上げたり計算量を少なくするためにはどんな方法がありますか?

388:デフォルトの名無しさん
09/05/29 05:51:59
>>387
完全にスレ違いだろ。
数学スレに行ってくれ。

389:デフォルトの名無しさん
09/05/29 07:16:23
RPGの戦闘部分を作っています。
FFみたいなアクティブタイムバトル(パラメータのすばやさに毎秒1ずつ足して行き、規定値になったら行動)
というものですが、勝利判定はどこでどういう風にすればよいでしょうか?

行動が終わった時に、goto文で戦闘部分の処理を抜け出すのが一般的でしょうか?

390:デフォルトの名無しさん
09/05/29 07:24:55
goto文が一般的じゃない。break使え

391:デフォルトの名無しさん
09/05/29 07:48:35
>>390
ありがとうございます。危うく道を踏み外すところでした

392:デフォルトの名無しさん
09/05/29 19:50:28
STLにupper_boundとlower_boundってありますが
lower:指定した値"以上"の値が最初に現れる位置を返す
upper:指定した値"より大きい"の値が最初に現れる位置を返す
となっていて、どちらも指定した値以上の値が帰ってきます。

そうではなくて、指定した値を超えない最大の値を得たい場合
アルゴリズムを組み合わせたりして
それを簡単に行うような方法ってありますでしょうか

具体的に言うと
1 7 10という列に対して
upper/lower_boundに値2を与えると
どちらも7が帰ってきますが、
1が帰ってくるアルゴリズムはありますか

393:デフォルトの名無しさん
09/05/29 20:06:26
デクリメントすれば?

394:392
09/05/29 20:24:57
自己解決しました
find_if(v.begin(),v.end(),bind2nd(less<int>(),n));

395:392
09/05/29 20:38:47
すみません、解決していませんでした
デクリメントってこういうことでしょうか
vector<int>::iterator it = lower_bound(v.begin(),v.end(),n);
--it; //ここ(*)
int lower = *it;

確かにこれで期待した動作はするのですが
ちょっと気になるのは
(*)の箇所でイテレータが範囲外、例えばitが最初の要素だったりした場合
どう範囲チェックすれば良いのでしょうか
if(it)やif(it!=NULL)などは型チェックが通りませんし

396:デフォルトの名無しさん
09/05/29 21:07:16
begin()でもrend()でも使えばいいじゃない

397:デフォルトの名無しさん
09/05/29 21:43:34
includeファイルが増えてくると面倒なので
include_iroiro.h----------
#include "foo.h"
#include "bar.h"



#include "hoge.h"
----------------------
のように、よく使うものを全部includeするヘッダを使ってます
この場合includeしたcppで実際には使わなかったクラスなども無意味にコンパイルされるんでしょうか?

398:デフォルトの名無しさん
09/05/29 21:46:39
.h ということならYES


399:デフォルトの名無しさん
09/05/29 21:55:46
そうなんですか・・・ショック!

400:デフォルトの名無しさん
09/05/29 22:05:33
プリコンパイルヘッダを使えばいい

401:デフォルトの名無しさん
09/05/29 22:11:28
450 step -1 until 1 do
ってどういう意味ですか?

402:デフォルトの名無しさん
09/05/29 22:15:57
450が1なるまで-1しながらdo以下の処理を繰り返す??

403:デフォルトの名無しさん
09/05/29 22:23:14
while(条件){
cin >> x1 >> x2;
(以下if文)

のように記述して、ループさせています。
EOFでwhileのループを終了させたいとき条件はどう書いたらいいのでしょうか?

よろしくおねがいします。

404:デフォルトの名無しさん
09/05/29 22:24:33
>>402
ありがとうございます。
ということは、「1が53になるまで+1しながらdo以下の処理を繰り返す」っていうのは、
1 step +1 until 53 do
であってますか?

405:デフォルトの名無しさん
09/05/29 22:43:57
それC/C++じゃないじゃん。スレ違い

406:デフォルトの名無しさん
09/05/29 22:55:58
>>401
どこの言語だ。
最近スレ違いがおおいな。

407:デフォルトの名無しさん
09/05/30 10:46:34
VS2005proです
#pragma region
~処理を記述~
#pragma endregion
このおまじないは、どういう意味を持つのですか?教えてくださいエロイ人

408:デフォルトの名無しさん
09/05/30 10:48:14
>>407
折りたたみ機能

409:デフォルトの名無しさん
09/05/30 10:53:12
>>408thx
syntaxには関係ないものか、あまり役に立たない機能だな

410:デフォルトの名無しさん
09/05/30 11:24:58
templateを展開した後のコードを生成するようなフリーソフトってなんかいい感じのありますか?

411:デフォルトの名無しさん
09/05/30 11:39:14
すいません、質問です。
アマゾンで古本を販売していて
販売価格を簡単に改定できるソフトを探しています。
改定ソフトは.netフレームワークでプログラムが作られてるようなのですが
プログラミングの知識がまったくない素人が売ってるのを購入せず
同じようなものを作るにはどれぐらいの時間がかかりそうですか?

プログラム自体はアマゾンサイトから価格データを集めるのがメインで
それほど難しくなさそうに見えるのですが。(素人なので直感です)

価格改定ソフトの一例です
URLリンク(6plan.net)

やっぱりめちゃくちゃ難しいんですかね?

412:デフォルトの名無しさん
09/05/30 12:01:41
>>411
とりあえず君のプログラミングスキルを教えてくれ。
ここはC/C++スレだからC/C++のスキルに関しても。


413:デフォルトの名無しさん
09/05/30 12:06:15
>>412
すいません、プログラミング知識はゼロです。

コンピュータ用語がわかる程度
良く言ってシスアドレベルだと思います。

414:デフォルトの名無しさん
09/05/30 12:08:47
>>413
0からだと果てしなく険しいと思う。
少なくともC/C++でやるなら相当苦労しそうだ。

他の人の意見も聞きたいところだけど、
やるにしてもせめて初心者にやさしい超高級言語で挑戦したとして
果たして何ヶ月かかるだろうか。。。

415:デフォルトの名無しさん
09/05/30 12:15:27
プログラムの取得にかかる時間は個人差がある。
独学ならなおさら。

半年で5つの言語を習得してプログラミング言語自体を作ってしまう高校生もいれば、
いくら頑張っても途中で挫折する人間も大勢いる。

416:デフォルトの名無しさん
09/05/30 12:18:48
>>415
>半年で5つの言語を習得してプログラミング言語自体を作ってしまう高校生もいれば、
だれ?

417:デフォルトの名無しさん
09/05/30 12:44:48
>>411
業務時間内に作ろうと思ってるならやめた方がいい
よほどの天才じゃない限り買った方が安い

418:デフォルトの名無しさん
09/05/30 12:52:16
>>415-417

レスありがとうございます。
それほど難しいものなんですか。
おとなしく製品を購入することにします。

ちなみにシスアド程度の素人がプログラムを楽しもうと
思う場合、ExcelとかのVBAなら比較的簡単に習得できるものなんですか?
あくまでも趣味程度しか時間はさけませんので。

419:デフォルトの名無しさん
09/05/30 13:16:37
極端な例を出して話をはぐらかすやつって馬鹿なの?

420:デフォルトの名無しさん
09/05/30 15:04:51
char x1,x2;としてこれをwhileで繰り返し、if文でx1==x2の判定をしながら、
文字列のランレングス符号化をしたいです。
どう書けばいいでしょうか?

421:デフォルトの名無しさん
09/05/30 18:59:17
グローバル変数と性的変数ってどっちのほうがメモリ容量多く使うのでしょうか?
また、staticを何個も書くのはまずいですか?

422:デフォルトの名無しさん
09/05/30 19:00:00
静的変数の間違いでした。

423:デフォルトの名無しさん
09/05/30 19:25:54
>>421
たいていの場合、グローバル変数とstatic変数は同じ扱いになる
static変数を何個も書くこと自体は問題ない。
性能面、安全面で自動変数より劣ることはあるかもしれない。

424:デフォルトの名無しさん
09/05/30 19:32:11
グローバル変数のほうが、シンボル情報がオブジェクトファイルに含まれるので
.objなり.oなりが大きくなる

と全然意味の無いことを言ってみる

425:デフォルトの名無しさん
09/05/30 19:43:53
ヘッダーファイルの値をいくら変えても反映されません。
どうやらパソコンを起動してから最初に実行した時の値が以後ずっと使われているようです。
PCを変えて実行してみましたが、同じ不具合が発生しています。
原因がわかるかたいませんか?

426:デフォルトの名無しさん
09/05/30 19:53:43
日本語でおk

427:デフォルトの名無しさん
09/05/30 20:02:01
説明しようにも不具合の原因がわからなすぎて、上手く説明できません。

ソースファイルの更新はしっかり反映されるのに、ヘッダーファイルの更新は最初の一度しか反映されないのです。

428:デフォルトの名無しさん
09/05/30 20:05:58
その.hをincludeした.cで printfしてみれ
それでも反映されないのなら、コンパイラのバグじゃね

429:デフォルトの名無しさん
09/05/30 20:14:43
どうやら値事態はしっかり反映されているようです。
しかし、その値と変数を比較する部分が正しく動作しません。
友人と全く同じプログラムですが、実行結果が違います。(アカウントは違います。)

430:デフォルトの名無しさん
09/05/30 20:20:44
ヘッダーを書き換えた後にそれをインクルードしているソースはコンパイルしなおしているよな?
一応OSと環境(VC++とかgccとか)よろ

431:デフォルトの名無しさん
09/05/30 20:20:56
学校の課題は先生に訊きなさい

432:デフォルトの名無しさん
09/05/30 20:24:59
複数あるソースファイルのうち、その比較部分があるファイルにprintf文をつけたところ、値の比較が正しく行われるようになりました…。
当然、友人らはこのソースファイルには手をつけなくても正しく動作しています。
全くもって理解不能です。

433:デフォルトの名無しさん
09/05/30 20:32:11
こんな言葉がある
『プログラムは思ったとおりに動かない。書いたとおりに動くのだ』

434:デフォルトの名無しさん
09/05/30 20:37:43
printf文をつけることで関係無い部分が正しく動くようになったのですよ。
理解不能(^q^)

435:デフォルトの名無しさん
09/05/30 20:41:57
>>430の言ってることが答えな気がする
printf文を加えたソースファイルをコンパイルしなおしたことでヘッダファイルの変更が反映されたと

436:デフォルトの名無しさん
09/05/30 20:47:47
>>435
別のソースファイルにつけたときは正しく比較部分が正しく動かなかったです。
(ヘッダーで設定した数値は正しく表示された)

日本語が不自由ですみません。

437:デフォルトの名無しさん
09/05/30 20:58:48
そんなときにはソリューションのクリーン→ビルド

438:デフォルトの名無しさん
09/05/30 21:11:50
>>436
いやだから、別のソースファイルの時は今回直したソースファイルをコンパイルしなおしていないんじゃないか?ってこと

439:デフォルトの名無しさん
09/05/30 22:44:16
とりあえず環境、ヘッダとかのファイル名と実行したコマンドを書け。

440:デフォルトの名無しさん
09/05/30 23:53:16
C言語の質問です。お願いします。
{
int i;
char ch;
scanf("%d", &i);
printf("%dです。\n", i);
scanf("%c", &ch);
printf("%cです。\n", ch);
return 0;
}
というプログラムを実行し例えば4と打つと
4
4です。

です。
と表示されてしまいます。
何故、scanf("%c", &ch)は無視されるのでしょうか?
4
4です。
s
sです。
と言った具合に表示させたいです。

441:デフォルトの名無しさん
09/05/30 23:59:06
URLリンク(www.google.co.jp)

442:デフォルトの名無しさん
09/05/31 00:01:12
virtualってつけれるところは全部つけとけばおkなんですか?

443:デフォルトの名無しさん
09/05/31 00:12:38
>>440
4の次に入力された改行文字が、2回めのscanfで読み込まれるから。
scanf("%d%*c", &i);
のようにして、改行文字を1回めのscanfで読み込ませればいい。

444:デフォルトの名無しさん
09/05/31 00:21:25
>>441
>>443
ありがとうございました。
おかげさまで解決しました。

445:デフォルトの名無しさん
09/05/31 00:25:31
>>442
副作用としては、
・オーバーライドするつもりのない関数を間違ってオーバーライドする可能性がある
・多分、メモリ使用量が幾分増える
ってのがある。

446:デフォルトの名無しさん
09/05/31 03:57:21
Cの乱数をsrandとtimeを使って毎回違うようにするのは
わかったのですが、二つの乱数をほぼ同時に出す場合、どうすれば
その二つの乱数をバラバラにする事ができますか?

具体的には戦闘ゲームなのですが、
コチラの攻撃が1~30までで、相手も1~30までの値で
攻撃してくるときに、1~30までの値を返す関数を
srandで初期化してrand()%30+1の値を返すという風に作りました。
しかし、自分の攻撃値も上の関数でけっていし、それにほぼ同時
(すぐ次の行で)相手の攻撃値も決定しているのですが、そうすると
どうしても自分の攻撃値と相手の攻撃値が同じになってしまいます。
時間がほぼ同時ぐらいのタイミングで処理するとどうしても
このようになってしまうと思うのですが、どのようにすれば別々の値に
できるでしょうか?よろしくおねがいします。

447:デフォルトの名無しさん
09/05/31 04:04:51
srandで初期化するのは、プログラム中1回だけでいい。

面倒なら、srand呼ばないようにすればとりあえずランダムな値は取れる。

448:デフォルトの名無しさん
09/05/31 04:16:45
同じだったらもう一回randすればいいんじゃないの

449:デフォルトの名無しさん
09/05/31 04:30:35
乱数シードに IP アドレスとかプロセス ID とかを加算
てか同じプロセス内のコードか??? なら初期化は一回だけであとは rand を呼べばいい

450:デフォルトの名無しさん
09/05/31 05:18:53
質問なのですがお願いします。
c++、bccを使用しています。

char si[1000];
char sj[1000];
cin>>s1;
cin>>s2;

と二つの配列を作って、こんぱいる実行したら

「_             」

とうまく入力待ちになりました。しかし、

char si[1000];
char sj[1000];
cin>>s1;
cin>>s2;
array[1000][1000][5];

では、


 c:\bcc\test>      」

と表示されて、たぶん実行終了した状態になるのですが、
原因を教えてくださいませんでしょうか?おれがうんこなのでしょうか?

451:450
09/05/31 05:20:12
全力で間違えました。

char si[1000];
char sj[1000];
cin>>s1;
cin>>s2;
int array[1000][1000][5];

でうまくいかないのでしあt

452:デフォルトの名無しさん
09/05/31 05:23:32
領域確保しすぎてスタックオーバーフロー?
配列をグローバルにしてみよう

453:デフォルトの名無しさん
09/05/31 05:24:01
>>451
>int array[1000][1000][5];

これ単純に大きさを計算したら1000×1000×5×4=約19MBとなって
スタックのデフォルトの大きさ1MBを超えるから異常終了する

スタックを大きくするかstaticを付けてBSSに配置するかだな

454:デフォルトの名無しさん
09/05/31 06:35:37
Visual Studio 2005 Proですが
array<String^>^ getFilterName_St();
Bitmap^ sample_grab();
Bitmap^ sample_grab2(Bitmap^ bmp);
こういう書き方って、.NET対応CLIの実装ですよね、NativeなC/C++では使えないコードですよね。


455:デフォルトの名無しさん
09/05/31 08:37:19
うん

456:デフォルトの名無しさん
09/05/31 09:06:28
>>455Thx分かりました。
.NETのCLIって、C/C++のコードも混在することができるんですね、templateや関数オブジェクトがすらすら書けない俺には無用なものですね。

457:450
09/05/31 11:42:01
ありがとうございました。
mainの外に追い出したところ、何とか起動しました。
途中で強制終了されたけど。。。なんかでかい配列を扱うのはすごく大変ですね。

ありがとうございました!

458:デフォルトの名無しさん
09/05/31 13:25:55
ある動的配列の要素全てが0以下である
をループを抜ける条件としたいのですが、何か良い方法はありますか?

今はforで要素全てを判定させて、全て0以下なら
変数aを1、このaが1ならループを抜けるとしています

459:デフォルトの名無しさん
09/05/31 13:47:38
O(n)未満の方法はないんじゃないかな
なのでその方法がベスト
もし、STLに関数型言語のforallやexistsのようなものがあれば
記述的に楽は出来るだろうが
やる計算的には>>458の方法と同じになるし

460:デフォルトの名無しさん
09/05/31 13:49:41
Pstade.Ovenライブラリを使って

oven::forall(xs, _1 <= 0)
を終了条件にすればいい

ただしxsは対象である動的配列の型で、かつ
xsの型がsingle pass rangeのコンセプトを満たす必要がある
vectorやlistはこのコンセプトを満たす

461:デフォルトの名無しさん
09/05/31 13:52:40
>>458
それでいいんじゃないの?

あまりにも大量のデータを頻繁にチェックするというのなら、
配列に書き込む時点で値が0以下かどうかチェックするという方法もあるけど。
(配列への書き込みが大量に発生するようだと、これも効率的でなくなるが)

462:デフォルトの名無しさん
09/05/31 13:58:53
while( !isAllNegative(array, size) ) ~;

isAllNegative(int *array, int size){
    for(int i = 0; i < size; ++i)
        if(array[i] >= 0)
            return false;

    return true;
}

463:デフォルトの名無しさん
09/05/31 14:00:15
ああ、そのほうが良いな。アホだった
あと、そのプログラム、条件>=じゃなくて>にしないと

464:458
09/05/31 14:31:22
ありがとうございます!
全部試してみますね

465:デフォルトの名無しさん
09/05/31 16:34:51
他人の作ったクラスを継承するのって危険ですかね?

466:デフォルトの名無しさん
09/05/31 16:37:52
継承する想定で設計しているならそうでもないんじゃないの。
まぁ作った奴のスキルがどれだけ信用できるかだが。

467:デフォルトの名無しさん
09/05/31 16:56:40
自分で定義したクラスでも意識してないと
Liscov Sutstitution Principleは簡単にぶっ壊れるのになにをかいわんやだ

468:デフォルトの名無しさん
09/05/31 17:06:56
プライベート継承しただけで壊れるんだっけ

469:デフォルトの名無しさん
09/05/31 17:09:19
女でプログラマは何割くらいいますか?

470:デフォルトの名無しさん
09/05/31 17:32:53
一割いないね。

471:デフォルトの名無しさん
09/05/31 17:42:00
トンクス 

472:デフォルトの名無しさん
09/05/31 17:42:25
女でプログラマで美人で性格いい人は何割ぐらいいますか?

473:デフォルトの名無しさん
09/05/31 18:55:38
本当に人口の半分は女なのか疑わしくなってくる

474:デフォルトの名無しさん
09/05/31 18:59:10
女優遇社会だからな。酷い男社会とは別の贅沢な環境で生活してるんだよ。

475:デフォルトの名無しさん
09/05/31 19:06:42
主夫になりたい

476:デフォルトの名無しさん
09/05/31 19:18:18
前にも質問したんですが、メモリをファイルに見せかける方法か、
ramディスクを動的に生成する方法ありますか。

477:デフォルトの名無しさん
09/05/31 19:21:25
DOSコマンドでファイルへ出力するものを直接メモリに入れたいのですが。無理でしょうか。
標準出力ではなく、ファイルへの出力の場合です。

478:デフォルトの名無しさん
09/05/31 20:06:40
mmapとか、MapViewOfFileとか、その辺を調べるといいかも。

ただし俺だったら出力関数にファイルに出力するかメモリに書き込むかを
指定するフラグをつけるけどな。

479:デフォルトの名無しさん
09/05/31 20:08:14
>>476
メモリマップドファイルというのがある
それ専用のWindowsAPIがあるから、他でもOSレベルのAPIがあるんじゃね

480:デフォルトの名無しさん
09/05/31 20:12:08
ファイルをメモリのように扱うのではなく、
メモリをファイルのようにしたいのですが。
メモリを借りてきて、Zドライブを作るとかです。
普通のドライブのようにアクセスする方法はないですか

481:デフォルトの名無しさん
09/05/31 20:14:51
えっ

482:デフォルトの名無しさん
09/05/31 20:14:55
---hoge.h---
class Hoge{
public:
メンバ関数;
private:
void *mMember;
};
-----------
--hoge.cpp--
namespace{
struct Member{hoge hg}; //コンストラクタでmMember = (void *) new Member; アクセスは(Member *)mMember
privateメンバ関数の代わりの関数;
}
メンバ関数;
-----------
めんどくさそうだけど、カプセル化にこだわるならこんな感じのほうがいいんでしょうか?

483:デフォルトの名無しさん
09/05/31 20:18:54
>>480
RAMディスク Windows
とかでぐぐれ。

484:デフォルトの名無しさん
09/05/31 20:21:30
>>482
こだわるならそんな感じだけど、そこまでこだわる必要があるケースは稀。

485:デフォルトの名無しさん
09/05/31 20:21:33
RAMディスクをプログラムが動いているときだけ生成して、終了したら解放する方法はないですか?
既存のDOS EXEで、出力がファイルのやつを直接メモリに格納して高速化したいです。

486:デフォルトの名無しさん
09/05/31 20:25:52
RAMディスクつくるソフトを制御して
起動時にRAMディスク作らせて、終了時にRAMディスク開放させればいいのでは?

487:デフォルトの名無しさん
09/05/31 20:29:44
汎用性がある方法はないですか
ソフトをインストールしてもらわないと出来ません

488:デフォルトの名無しさん
09/05/31 20:40:26
単に、バーチャルなファイルシステムをかますだけでしょ。作った方が早い

489:デフォルトの名無しさん
09/05/31 20:43:05
USBカメラから画像を取り込みたいんですが、よくあるUSBカメラを使うソフト
とかってどうやってるんでしょうか?

490:デフォルトの名無しさん
09/05/31 20:58:48
既存のDOS EXEって何よ?

491:デフォルトの名無しさん
09/05/31 21:14:14
>>489
USBカメラがそうなっているかは分からんが、TWAINという共通化インターフェースがある

492:デフォルトの名無しさん
09/05/31 21:19:51
カプセル化という物を勉強したのですが、一度しか使わない計算でも
関数を定義して別ファイルに値を渡し、戻り値をmainに渡すようにしたほうがよいのでしょうか?


493:デフォルトの名無しさん
09/05/31 21:22:02
ありがとうございます。TWAIN初めてききました
直接カメラのドライバをたたいてるのかと思ってたけど、こんな便利なのがあったんですね

494:デフォルトの名無しさん
09/05/31 21:34:23
>>492
必要に従いカプセル化する。何でもかんでもカプセルにして密閉化すると。
オブジェクト指向原理主義者になるw

495:デフォルトの名無しさん
09/05/31 21:39:04
>>492
突き詰めると決着が付かないような議題
個人的にはほんの数行(最大4行ぐらい)で、そこでしか計算しないんだったら埋め込む
ただ
>関数を定義して別ファイルに値を渡し、戻り値をmainに渡す
が何を言ってるのかがわからなくて心配

496:デフォルトの名無しさん
09/05/31 21:51:10
>>492
それはカプセル化というよりはリファクタリングに関係してるように思う
俺の場合、ある処理を2回行うようになった時点で関数化する
逆に1回しか使う場所がないのに無駄に抽象化した関数は定義しないようにしている
C++の抽象化能力では、これは常に出来ないのは若干悩みの種

カプセル化は、ライブラリのように
他人もそのコードを使うケースで意識すればよいと思う

497:デフォルトの名無しさん
09/05/31 21:54:50
>>477
出力ファイル名にCONを指定して標準出力へ出せるようにならない?
それで動くなら、あとはリダイレクトできるでしょ。

498:デフォルトの名無しさん
09/05/31 22:01:18
>>494-496
ありがとうございます
一人だから問題ないのですが、逆に指摘してくれる人がいないのが難点です


499:デフォルトの名無しさん
09/06/01 00:08:32
スタイルの問題で答えはないと思うけど、マクロってインデントするべきかな?

#ifndef CLASS
 namespace Name
 {
  class Class
  {
  public:
   foo bar();
   #ifdef _DEBUG
    hoge fuga();
   #endif
  }
 }
#endif

#ifndef CLASS
namespace Name
{
 class Class
 {
 public:
  foo bar();
#ifdef _DEBUG
  hoge fuga();
#endif
 }
}
#endif

悩む・・・

500:デフォルトの名無しさん
09/06/01 00:26:03
#ifndef CLASS
なんたらかんたら
# ifdef _DEBUG
なんたらかんたら
# endif /* _DEBUG */
なんたらかんたら
#endif /* CLASS */
とやるのが普通かな。

プリプロセッサディレクティブは、行の先頭を#で始めなければならない。
規格のどのセクションだったかもう覚えてないけど。

フリーソフトウェアのソースを読んで勉強したら良いかもしれない。

501:デフォルトの名無しさん
09/06/01 00:53:26
そう?
手元のANSI C言語辞典には#の前に空白類があってもよいと書いてあるけど。
もちろんそんな書き方誰もしないということは同意だ。

502:デフォルトの名無しさん
09/06/01 00:59:31
#if foo
 #if bar
  #include <momo.h>
 #else
  #include <taro.h>
 #endif
#endif

のような例はよくみかける。 

503:デフォルトの名無しさん
09/06/01 01:25:41
自分は普段はこう書くな。

#if foo
# if bar
# include <momo.h>
# else
# include <taro.h>
# endif
#endif

行頭に#があったほうが見た目わかりやすいと思う。




504:503
09/06/01 01:27:01
#if foo
# if bar
#  include <momo.h>
# else
#  include <taro.h>
# endif
#endif

こうな。


505:デフォルトの名無しさん
09/06/01 01:36:32
Windows98のメモ帳でのプログラムの実行の仕方を教えて下さい
因みに入力したのはC言語のprintf何たらの簡単なプログラムです


506:デフォルトの名無しさん
09/06/01 01:41:44
書いたコードをここに貼り付けて、右下のボタンを押せ。
URLリンク(codepad.org)


507:デフォルトの名無しさん
09/06/01 05:53:03
>>502
俺もそう書くわ。
特に多いのが
#ifndef __BORLANDC__
 高度な処理;
#else
 低度な処理;
#endif
みたいにコンパイラで処理を分けたりとか、あとはデバッグの時かな。


508:デフォルトの名無しさん
09/06/01 06:27:58
1.下の多重ループで「A」は何行何列に表示されるか.
for(j=1;j<=2;j++) {
for(k=1;k<=3;k++) {
printf("A");
}
printf("\n");
  }
2.下の多重ループで「A」は何行何列に表示されるか.
for(j=1;j<=5;j++) {
for(k=1;k<=4;k++) printf("A");
printf("\n");
  }

1は2行3列で2は4行5列ですか?


509:デフォルトの名無しさん
09/06/01 07:30:16
>>506
すみません
ネットに繋げてないのでメモ帳での方法を教えて下さい

510:デフォルトの名無しさん
09/06/01 10:56:47
>509
別にメモ帳だろうが何だろうが、Cのプログラムには関係ないよ。
もちろん効率とかは違うだろうけど。

511:デフォルトの名無しさん
09/06/01 11:32:44
>>509
エスパーすると、コンパイラの使い方がわからないんだろう
そもそも509はC言語のコンパイラを持っているのか?
例えばVC,BCC,GCCなど。

512:デフォルトの名無しさん
09/06/01 12:13:08
持ってないだろうねえ。でも、
最初の一歩も自分で踏み出せない奴を
どうにか歩かせたところで無駄じゃね?

513:デフォルトの名無しさん
09/06/01 13:27:29
最小2乗法によるm次の多項式近似を行うプログラムを教えてください
教えて

xがー2の時yが3.02
-1の時0.98
0の時1.22
1の時2.16
2の時2.61         の時のです
出来ればソース全文書いてください




514:デフォルトの名無しさん
09/06/01 14:16:58
>出来ればソース全文書いてください
>出来ればソース全文書いてください
>出来ればソース全文書いてください

515:デフォルトの名無しさん
09/06/01 14:20:25
>>513
マルチすんなカス

516:デフォルトの名無しさん
09/06/01 16:18:56
符号なしenumがほしいんですが、なにか代替案はありますかね?今は
typedef const unsigned long uenum_t;
uenum_t foo = 0, bar = 1, hoge = 2 ・・・;
みたいに地道に書いて我慢してるんですが
省略記法が使えなくてめんどいし、メモリももったいない気がします

517:デフォルトの名無しさん
09/06/01 17:25:11
半角テキストファイルを読み込んで使用する場合
空白文字も含めて一つの変数orクラスに格納したいんですが
どうすればいいでしょうか?
というかなぜ空白で一々区切られるのでしょうか?
EOFでいいじゃないですか?

518:デフォルトの名無しさん
09/06/01 17:27:29
getlineでいいんじゃない?

519:デフォルトの名無しさん
09/06/01 17:49:17
getlineって一行だけじゃなかったっけ?

520:デフォルトの名無しさん
09/06/01 20:39:48
whileのループをEOFで抜けだし、出力するようにしたのですが、
出力後、プロンプトが出てきません。ctrl+Zで中止しないといけない状態です。
なぜ出てこないのでしょうか?

よろしくお願いします。

521:デフォルトの名無しさん
09/06/01 20:44:30
ループにでも入ってるんじゃない?

522:デフォルトの名無しさん
09/06/01 22:51:06
for(a=0;a<3;a++){
for(b=0;b<20;b++){
     if(hensu<0){
       処理1;
}
else{
       処理2;
     }
}
}

このようなfor文で、処理1もしくは処理2を実行したら
二つのfor文を一度に抜けたいのですが、どうすれば可能でしょうか?
処理のあとにbreakひとつじゃ後のfor文しかぬけないため、また処理1か2を実行してしまうので
困ってます。
goto文?というのはなるべく使いたくないのでそれ以外で何か簡潔にできますでしょうか?

523:デフォルトの名無しさん
09/06/01 22:55:08
俺は普通に終了フラグを作る

524:デフォルトの名無しさん
09/06/01 22:56:20
典型的な「gotoを使うと綺麗に書ける例」だな。

どうしても使いたくないなら
 ・ループ終了を示すフラグ用の変数を用意しておき、そのフラグの値をチェックして外側のforループから抜ける
 ・全体を関数にしてしまい、returnで抜ける
とかどうか。


525:デフォルトの名無しさん
09/06/01 22:58:27
int end = 0;
for(a=0;a<3 && !end;a++){
for(b=0;b<20 && !end;b++){
if(hensu<0){
処理1;
end = 1;
}
else{
処理2;
end = 1;
}
}
}

もしくは関数化して、returnで抜けるとか。

526:デフォルトの名無しさん
09/06/01 23:00:31
男3人が結婚かよ

527:デフォルトの名無しさん
09/06/01 23:09:54
C言語の本を買ってきて、printfなるものをWindowsのメモ帳に入力したけど、どうしたら実行出来るの?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch