スレを勃てるまでもないC/C++の質問はここで 4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/09/17(水) 15:41:48過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
0675デフォルトの名無しさん
2008/12/18(木) 16:41:23簡略化した奴をちょっと書いてみるんだが
ランダムに配列から数字を引っこ抜く関数を二回呼び出してるんだけど、それが必ず同じ値を引っ張ってくる
なんでだ???
int array[50]={1,2,3,…,48,49,50};
int randomNumber(int x){
return array[(int)((rand() / ((double)RAND_MAX+1.0f)) * x)];
}
void main(void){
int a,b;
srand(time(NULL));
a=randomNumber(50);
b=randomNumber(50);
if(a==b){
printf("同じだよ");
}
}
0676デフォルトの名無しさん
2008/12/18(木) 16:46:56time(NULL)は1秒以内なら同じ数値を返すから1秒以内なら同じで当然。
そもそもsrandを毎回呼ぶ必要はない。
0677デフォルトの名無しさん
2008/12/18(木) 16:49:11数字表示させてみて。全部0じゃないのそれ?
0678デフォルトの名無しさん
2008/12/18(木) 16:49:56srand(time(NULL));を消してやってみたけど同じ値がでてくるよ!
0679デフォルトの名無しさん
2008/12/18(木) 16:57:500680デフォルトの名無しさん
2008/12/18(木) 16:58:530681デフォルトの名無しさん
2008/12/18(木) 17:08:4350が返る可能性はないと思うが
0682デフォルトの名無しさん
2008/12/18(木) 17:12:07この部分は 0 〜 1に満たない範囲で値になるので、1にならない以上
50にはならないから大丈夫。
0683デフォルトの名無しさん
2008/12/18(木) 17:54:410684デフォルトの名無しさん
2008/12/18(木) 17:57:340685デフォルトの名無しさん
2008/12/18(木) 18:03:07それに50を掛けても、50に近い値にはなるが、50には満たない。
その値の整数部分をとっているわけだし。
0686デフォルトの名無しさん
2008/12/18(木) 18:08:47↑
int array[50]={1,2,3,…,48,49,50};
0687デフォルトの名無しさん
2008/12/18(木) 18:52:010688デフォルトの名無しさん
2008/12/18(木) 19:00:21クラスをベクタコンテナで宣言してvt.at(i).swap(vt.at(i+1))みたいなアルゴリズムを考えています。
0689デフォルトの名無しさん
2008/12/18(木) 19:03:460690デフォルトの名無しさん
2008/12/18(木) 19:14:560691688
2008/12/18(木) 19:28:45どういう意味ですか?
vt1.swap(vt2)
で
temp=vt1,vt1=vt2,vt2=tempになるのは解るんですが
vt.at(i)とvt.at(k)のスワップ方法が解らないんです。
0692デフォルトの名無しさん
2008/12/18(木) 19:37:20std::swap(vt.at(i), vt.at(k));
0694デフォルトの名無しさん
2008/12/19(金) 00:21:53初心者にお勧めのサイトとか教えてください#
0695デフォルトの名無しさん
2008/12/19(金) 00:24:24ぼうようはどうよう?
0696デフォルトの名無しさん
2008/12/19(金) 00:32:24初心者なら素直に本を一冊買った方がいいと思うなぁ…
0697デフォルトの名無しさん
2008/12/19(金) 00:32:590698デフォルトの名無しさん
2008/12/19(金) 00:42:390699デフォルトの名無しさん
2008/12/19(金) 00:42:510700デフォルトの名無しさん
2008/12/19(金) 00:50:20つまり、・・・・どうすればいいのか.....
0701デフォルトの名無しさん
2008/12/19(金) 00:52:040702デフォルトの名無しさん
2008/12/19(金) 01:05:32http://www.geocities.jp/ky_webid/ProgrammingPlacePlus/c/000.html
最初は意味分からんことが多いと思うが、一つ一つ理解していけばいい。
ゆっくりしていってね。
0703デフォルトの名無しさん
2008/12/19(金) 01:25:160704デフォルトの名無しさん
2008/12/19(金) 02:51:30{
return 0;
}
エラーがでます。
0705デフォルトの名無しさん
2008/12/19(金) 02:58:220706デフォルトの名無しさん
2008/12/19(金) 02:58:310707デフォルトの名無しさん
2008/12/19(金) 07:14:06プログラミングの質問に限らず、エラーが出て質問する時は
出たエラーメッセージを貼ろうね、しまじろうとのお約束だよ
0708デフォルトの名無しさん
2008/12/19(金) 12:23:580709デフォルトの名無しさん
2008/12/19(金) 13:26:060710デフォルトの名無しさん
2008/12/19(金) 13:39:520711デフォルトの名無しさん
2008/12/19(金) 13:42:330712デフォルトの名無しさん
2008/12/19(金) 14:35:16#include <stdio.h>
int main(void)
{
int num = 567;
num = num / 10;
num = num % 10;
printf( "%d\n", num );
return 0;
}
どうしてこれで6になるのかわかりやすく教えて!偉い人
0713デフォルトの名無しさん
2008/12/19(金) 14:38:33int num = 567;
num = num / 10; < num=56
num = num % 10; < num=6
0714デフォルトの名無しさん
2008/12/19(金) 14:41:270715デフォルトの名無しさん
2008/12/19(金) 15:20:260716デフォルトの名無しさん
2008/12/19(金) 15:59:21時代によって違うから。
0717デフォルトの名無しさん
2008/12/19(金) 16:15:53|||
<#`Д´>=3
0718デフォルトの名無しさん
2008/12/19(金) 16:28:41なんで頭に●ンコが生えてんの?
0719デフォルトの名無しさん
2008/12/19(金) 16:31:14>残念、小学生レベル。
>自分基準で〜レベルとか、ランクをつけなくて良いから。
>残念、小学生レベル。
>自分基準で〜レベルとか、ランクをつけなくて良いから。
0720デフォルトの名無しさん
2008/12/19(金) 16:49:48いや、本当にそれは小学生レベルだろ?割り算、余りを求める算数を
あんたは中学で習ったのかい?w
0721デフォルトの名無しさん
2008/12/19(金) 16:53:39近代の義務教育でな。
0722デフォルトの名無しさん
2008/12/19(金) 16:57:54int main(void)
{
int no;
printf("数字を入力してください:");
scanf( "%d", &no); /*数字を読み込む*/
printf("あなたは%dと入力しましたね\n", no);
return 0;
}
ビルドエラーが発生しました。続行して、最後に成功したビルドを表示しますか?
教えて!偉い人
0723デフォルトの名無しさん
2008/12/19(金) 17:05:46/*数字を読み込む*/
^^^^^の全角空白かな
0724デフォルトの名無しさん
2008/12/19(金) 17:09:330725デフォルトの名無しさん
2008/12/21(日) 08:35:26vector<obj>::iteraot p, q;
p = playerbullet.begin()
while ( p != playerbullet.end() ) {
q = enemy.begin();
while( q != enemy.end() ) {
if( isHit(p,q) )
// 当たってたときの処理
}
}
のようにやってるんだけど
遅くて使い物にならない
何か高速化の方法ってありますか?
0726デフォルトの名無しさん
2008/12/21(日) 10:24:52敵を4分木に入れて、弾の直線と当たり判定を取るってのは?
弾をレイと捉えてレイトレースみたいなイメージ
0727デフォルトの名無しさん
2008/12/21(日) 11:21:03画面を数分割して敵弾の位置を大まかに分類しておいて、
明らかに無関係な領域にある敵弾は当たり判定自体をスキップする。
複雑な当たり判定を要する弾の場合は、
まずは判定の楽な円-円の判定で大まかに判定し、
明らかに離れているものは真面目に当たり判定を行わずスキップ。
0728デフォルトの名無しさん
2008/12/21(日) 12:28:110729デフォルトの名無しさん
2008/12/21(日) 12:41:23どう処理すればいい?
0730デフォルトの名無しさん
2008/12/21(日) 12:42:510731デフォルトの名無しさん
2008/12/21(日) 12:46:120732デフォルトの名無しさん
2008/12/21(日) 12:46:370733デフォルトの名無しさん
2008/12/21(日) 12:50:34つうか、例えば横512ドットだとして
左は、0 <= x < 256
右は、256 <= x < 512
とすれば、元から境目に存在はしない
0734デフォルトの名無しさん
2008/12/21(日) 12:56:530735デフォルトの名無しさん
2008/12/21(日) 13:21:21////////////////////////////////////////////////////////////////////////////////////////////////
// 指定された2つの RECT構造体が、重なっているか判定する
// 重なっていると true
// かさなっていないと false を返す。
bool RectLap( const RECT *a, const RECT *b )
{
// 改良失敗
// if( (a->top < b->bottom) && (a->bottom < b->top) && (a->left<b->right) && (a->right>b->left) )
// {
// return true;
// }
if( a->top < b->bottom )
if( a->bottom > b->top )
if( a->left < b->right )
if( a->right > b->left )
return true;
return false;
}
となります
改良の余地があればご指摘お願いします
0736デフォルトの名無しさん
2008/12/21(日) 13:41:57それで重いってことは、よほど沢山の弾があるのか?
0737デフォルトの名無しさん
2008/12/21(日) 13:53:01別スレッドで処理しているのですが、
CPUが割り当てられなくて処理落ちしてるとかも
考えられますか?
0738デフォルトの名無しさん
2008/12/21(日) 13:57:12別スレッドにするメリットってあんの?
0739デフォルトの名無しさん
2008/12/21(日) 14:00:43重たいわけもないでして
昔作ったやつは100発でもいけたので
不思議なのです
変えたといえばコンパイラだけですが
VC++6.0 -> VC++ 2008 Express にしただけです
0740デフォルトの名無しさん
2008/12/21(日) 14:02:09スレッドを使った理由は技術的好奇心だけです
元の1スレッドに戻してみます
0741デフォルトの名無しさん
2008/12/21(日) 14:08:59リリースモードでコンパイルしたら実用レベルになりました
スレ汚しすいません
0742デフォルトの名無しさん
2008/12/21(日) 16:01:12VC++ 2008 ExpressをPCに導入したのですが、
計算をさせて、結果を表示するプログラムを作って実行させたら
結果が出力される前にDOS窓が閉じてしまいます。
どうしてでしょうか?
0743デフォルトの名無しさん
2008/12/21(日) 16:05:28デバッグしないでいいならCtrl-F5(デバッグしないで実行)で。
それ以外にもとめる方法はいくつかあるが。
0744デフォルトの名無しさん
2008/12/21(日) 16:06:39あきらめろ
0745デフォルトの名無しさん
2008/12/21(日) 16:14:07ご親切にありがとうございました!
出力結果を無事に見ることができましたmm
0746デフォルトの名無しさん
2008/12/21(日) 16:22:200747デフォルトの名無しさん
2008/12/21(日) 16:49:43こういう場合は
1、グローバル変数を使う
2、ポインタで参照渡し
3、1つの関数を関数をいくつかに分ける
4、関数内で返したい値を1つの値に纏めた後、呼び出し先でまとめられた値を復元する
どれがスマート?
0748デフォルトの名無しさん
2008/12/21(日) 17:19:362 → どうしても同時に2つ返す必要があるのであれば、普通はそうする
3 → 同時に2つ値を返す必然性がないのであれば、そうする
4 → よほど制限された状況でなければあり得ない解決法
5、構造体にして返す。コピーのコストに見合えばアリ
0749デフォルトの名無しさん
2008/12/21(日) 18:08:53構造体に値を入れて、その入れた内容をポインタにキャストしたのですが
出来ませんでした(何も渡すことが出来なかった)
char *test;
test = (char *)&kouzoutai;
上記のようにしても駄目でした。
構造体をポインタにキャストする事は出来るのでしょうか?
0750デフォルトの名無しさん
2008/12/21(日) 18:13:110751デフォルトの名無しさん
2008/12/21(日) 19:14:24構造体ないに文字列持ってたんだろうな、それを直接(char * )でキャストしようとしたんだろ?
0752デフォルトの名無しさん
2008/12/21(日) 20:05:47マクロって何かありますか?
それが定義されていればセキュアな関数を使うようにしたいのです。
0753デフォルトの名無しさん
2008/12/21(日) 20:05:57kouzoutai の型が分からない限り答えようがない
0754デフォルトの名無しさん
2008/12/21(日) 20:30:29処理系名のマクロじゃないかな?
0755デフォルトの名無しさん
2008/12/21(日) 21:17:43一般的な方法はまだない。Open WatcomとVisual C++を個別にマクロで検出するしかない。
0756デフォルトの名無しさん
2008/12/21(日) 21:55:040757デフォルトの名無しさん
2008/12/21(日) 22:23:21_MSC_VER >= 1400
で判別してるものがあったのですが、これで大丈夫ですかね
0758デフォルトの名無しさん
2008/12/21(日) 23:29:530759デフォルトの名無しさん
2008/12/21(日) 23:32:190760デフォルトの名無しさん
2008/12/22(月) 15:54:01ご存知の方いないでしょうか?
メモリマップトファイル上にツリーを作って、複数のプロセスから参照したいと思っています。
0761デフォルトの名無しさん
2008/12/22(月) 16:23:15意味がわからん
0762デフォルトの名無しさん
2008/12/22(月) 16:29:33バイナリツリーが欲しい」
以外の解釈が可能か?
いや俺は見た事ないし、書くとしたら大変そうだが。
0763デフォルトの名無しさん
2008/12/22(月) 16:34:49いいだけじゃないの?
各データは固定長だろうから、それこそ配列にして
使用済みかどうかのフラグを持つだけでもいいし
0764デフォルトの名無しさん
2008/12/22(月) 16:40:25理解しているのはC言語の基礎だけです
DOS窓で動く、ジャンケンゲーム、数当て(BIGorSMALL)、石取りゲーム
くらいは作れるようになりました
この後一体どういう学習をすれば、Windows上で動く簡単なツールなんかを作れるようになりますか?
「GUI(?)をつくりたい」って言えばいいんですかね?
環境はWinXPhome/VC++2008
Windowsフォームアプリケーション?みたいなのもやってみたんですがさっぱりです
とりあえず、ウインドウを表示して、次に画像なんかを表示して〜
みたいなものはどうやってやればいいですか?
分かりにくかったらすいません宜しくお願いします
0765デフォルトの名無しさん
2008/12/22(月) 17:03:09C言語でWindowsAPIを使えばいい
Win32API,ウィンドウメッセージなんかでぐぐるといいが、
長いし(書くときはコピペするかウィザードで生成すればいいが)、少しとっつきにくいかもしれない
VCを使っているのなら、新規プロジェクト作成のウィザードから
Windowsアプリケーションを使うのもいい
どういうものを作りたいかによって選ぶべきと思う
0766デフォルトの名無しさん
2008/12/22(月) 17:05:05あなたの気のおもむくままに
0767デフォルトの名無しさん
2008/12/22(月) 17:05:59分かるには分かるが
面倒くせぇ
0768デフォルトの名無しさん
2008/12/22(月) 17:06:45回答ありがとうございます
Win32API?と、VCの機能を調べてみます
0769デフォルトの名無しさん
2008/12/22(月) 20:31:590770デフォルトの名無しさん
2008/12/22(月) 21:44:39CとC++は同じものだと考えてとりあえずは問題ない
というのも、C++はbetter Cという考えがあるから
「C++ではない純粋なC」でないといけないというのは
ちょっと特殊
0771デフォルトの名無しさん
2008/12/22(月) 21:47:21ファイルの拡張子を .c にすれば C になるはず
0772デフォルトの名無しさん
2008/12/22(月) 22:50:56なんでアドレスとか表示する意味があるんだ?
どうして、ポインターで指す必要があるんだ?
間接的にオブジェクトに代入してなんの意味がある?
ビット数の表示に意味なんてあるんだろうか?
いまやってることに、意味がない気がして・・
今、すげー・・やる気を失ってるところです・・
だれか・・元気付けてください・・
0773デフォルトの名無しさん
2008/12/22(月) 22:55:00すごく使うことになるのでとりあえず使い方をマスターしておけ
0774デフォルトの名無しさん
2008/12/22(月) 22:57:09お前の家の住所に意味はないのか?
例えば、「お前の家が見たい」って言われたとして、家ごとコピーして渡さなくても住所教えればいいだろ。そういうことだ。
■ このスレッドは過去ログ倉庫に格納されています