【初心者歓迎】C/C++室 Ver.54【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/05/14(水) 01:00:02ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.53【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1208989385/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0708デフォルトの名無しさん
2008/06/07(土) 14:13:32ありがとうございます、初歩的な質問ですみませんでした
0709デフォルトの名無しさん
2008/06/07(土) 14:18:38結合規則の問題で悩んでます。
|A| = |B|*|C|*|D|の式をプログラムで表現するときに、
MATRIX matA, matB, matC, matD;
matA = matB * matC * matD;
と書いて表現させたいのですが、普通にやると
|A| = (|B|*|C|)*|D|
と認識してしまいます。
()などを使わずに
右辺を右から左の順序で乗算させる方法が何かありませんでしょうか
0710デフォルトの名無しさん
2008/06/07(土) 14:26:29結合律が成り立たない場合は括弧で括ってください。
0711デフォルトの名無しさん
2008/06/07(土) 14:30:13ありがとうございました。
それでやろうと思います。
0712デフォルトの名無しさん
2008/06/07(土) 14:31:44(B×C)×D = B×(C×D) でしょ?
どっちでも一緒じゃん?
0713デフォルトの名無しさん
2008/06/07(土) 14:33:05結合順によって計算量が変わる可能性は高い
0714デフォルトの名無しさん
2008/06/07(土) 14:55:30行列演算で×を使うと意味が変わっちゃうよ
0715デフォルトの名無しさん
2008/06/07(土) 15:14:340716デフォルトの名無しさん
2008/06/07(土) 15:28:01ただ外積は順番によっては計算量が著しく変わる。内積はどんな順番でも行 * 列 * 項の数で一定
0717デフォルトの名無しさん
2008/06/07(土) 15:50:05そもそも行列積に operator* を使わない方がいいと思うが。
0718デフォルトの名無しさん
2008/06/07(土) 15:51:07A 100x100
B 100x100
C 10x100
(AB)C
100x100x100+100x10x100=1100000
A(BC)
100x10x100+100x10x100=200000
0719デフォルトの名無しさん
2008/06/07(土) 16:00:330720デフォルトの名無しさん
2008/06/07(土) 16:16:160721デフォルトの名無しさん
2008/06/07(土) 16:20:51ない。
0722デフォルトの名無しさん
2008/06/07(土) 16:27:47それならスカラーになるから>>716の言ってるのはアダマール積のことだと思う。
0723デフォルトの名無しさん
2008/06/07(土) 16:54:150724デフォルトの名無しさん
2008/06/07(土) 17:07:16そして行列の外積って何を表しているんだろう?
0725デフォルトの名無しさん
2008/06/07(土) 17:09:18Σij AijBji のことか? と聞こうとしたんだった。
要するに tr A^T B
0726デフォルトの名無しさん
2008/06/07(土) 19:08:48_,,....,,_ _人人人人人人人人人人人人人人人_
-''":::::::::::::`''> ゆっくりしていってね!!! <
ヽ::::::::::::::::::::: ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
|::::::;ノ´ ̄\:::::::::::\_,. -‐ァ __ _____ ______
|::::ノ ヽ、ヽr-r'"´ (.__ ,´ _,, '-´ ̄ ̄`-ゝ 、_ イ、
_,.!イ_ _,.ヘーァ'二ハ二ヽ、へ,_7 'r ´ ヽ、ン、
::::::rー''7コ-‐'"´ ; ', `ヽ/`7 ,'==─- -─==', i
r-'ァ'"´/ /! ハ ハ ! iヾ_ノ i イ iゝ、イ人レ/_ルヽイ i |
!イ´ ,' | /__,.!/ V 、!__ハ ,' ,ゝ レリイi (ヒ_] ヒ_ン ).| .|、i .||
`! !/レi' (ヒ_] ヒ_ン レ'i ノ !Y!"" ,___, "" 「 !ノ i |
,' ノ !'" ,___, "' i .レ' L.',. ヽ _ン L」 ノ| .|
( ,ハ ヽ _ン 人! | ||ヽ、 ,イ| ||イ| /
,.ヘ,)、 )>,、 _____, ,.イ ハ レ ル` ー--─ ´ルレ レ´
0727デフォルトの名無しさん
2008/06/07(土) 19:09:230728デフォルトの名無しさん
2008/06/07(土) 19:12:52電磁気の話だと物理的意味があるよ
0729デフォルトの名無しさん
2008/06/07(土) 19:15:48行列でouter productって言ったらテンソル積のことじゃね。
0730デフォルトの名無しさん
2008/06/07(土) 19:19:10http://www.jspf.or.jp/cd2/7505cd/75-5/sakagami/2-11.html
などのサイトに乗っている15種類の状態からでは2^8=256通りではなく254通りしか
生成できません
具体的には立方体のうち向かい会う2面のそれぞれ対角線上の格子点が垂直をなすように
ON(OFF)になっているケースの2通りの状態が含まれていません。
どこのサイトを見てもこのことに関する情報はありませんでした。
マーチングキューブ法ではこのような状態は異常として無視して描画しないのでしょうか?
しかしどこを見ても必ず「256通り」の記述があるのがどうにも・・
0731デフォルトの名無しさん
2008/06/07(土) 19:24:10おまいら頭だけはでかいんだな
0732デフォルトの名無しさん
2008/06/07(土) 19:25:290733デフォルトの名無しさん
2008/06/07(土) 19:28:2614通りのうち表の左上が0。
そしてトポロジーにより0の状態が2つある。
よって2^256 - 2 = 254
0734デフォルトの名無しさん
2008/06/07(土) 19:34:221+Σ(1/i!) (1〜10まで)
やってみたのですが分かりません。
何がおかしいでしょうか?
#include <stdio.h>
main(){
int i,fact;
double j,e;
fact=1;
i=1;
while(i<=10){
fact=fact*i;
j=1/fact;
i=i+1;
}
e=1+j;
printf("e=%lf\n",e);
}
0735デフォルトの名無しさん
2008/06/07(土) 19:36:100736デフォルトの名無しさん
2008/06/07(土) 19:36:13とりあえず
1/fact;
これの結果は切り捨てになるぞ?
0.いくつとかにはならずに
0737デフォルトの名無しさん
2008/06/07(土) 19:37:14main(){
int i,fact;
double j = 0.0,e;
fact=1;
i=1;
while(i<=10){
fact=fact*i;
j+=1.0/fact;
i=i+1;
}
e=1+j;
printf("e=%lf\n",e);
}
0738デフォルトの名無しさん
2008/06/07(土) 19:38:4813番目の状態が>>730で欠落している2箇所にあたります
ポリゴンは正しいけど黒丸の表示位置がそれとずれていました
0739デフォルトの名無しさん
2008/06/07(土) 19:46:36doubleで定義すると1.0としないとだめなんですか?
>>736
なぜですか?
>>737
なぜそういう風にしないといけないのか教えてもらいたいのですが・・・
0740デフォルトの名無しさん
2008/06/07(土) 19:50:150741デフォルトの名無しさん
2008/06/07(土) 19:53:34整数同士の演算結果は整数だから、そんでその結果をdoubleにして代入だから
暗黙の型変換とかでぐぐれ
0743デフォルトの名無しさん
2008/06/07(土) 21:25:22doubleだけだとちょっと辛いだろw
0744デフォルトの名無しさん
2008/06/07(土) 21:27:380745デフォルトの名無しさん
2008/06/07(土) 21:30:340746デフォルトの名無しさん
2008/06/08(日) 09:04:59[2]問題文
三つの整数値を読み込んで、それらの値が全て等しければ、「三つの値は等しいです。」と、どれか二つの値が等しければ、「二つの値が等しいです。」と、そうでなければ、「三つの値は異なります。」と表示するプログラムを作る。
[3-1]windows
[3-2]gcc
[3-3]C言語
[4]明後日まで。
[5]if文を使って下さい。お願いいたします。
0747デフォルトの名無しさん
2008/06/08(日) 09:07:45スレ違いです
こちらへどうぞw
http://pc11.2ch.net/test/read.cgi/tech/1211980711/944
0748デフォルトの名無しさん
2008/06/08(日) 09:19:330749デフォルトの名無しさん
2008/06/08(日) 10:20:13[5]が増えてるw
0750デフォルトの名無しさん
2008/06/08(日) 12:18:02ttp://moyashi.air-nifty.com/hitori/2006/09/gsplayer225_0036.html
を読んでGSPlayerをビルドしようとしたんですが上手くいきません
そこに書いてあるようにVisual C++ 4.0などを入れてファイルを開いたら固まるので
Visual C++ 2005 Express EditionとPlatform SDKを入れてみたんですが上手くいきません
他に何かインストールしなきゃダメな物があるんでしょうか?
0751デフォルトの名無しさん
2008/06/08(日) 12:21:51目的はWin32版のビルドです
0752デフォルトの名無しさん
2008/06/08(日) 12:39:540753デフォルトの名無しさん
2008/06/08(日) 12:40:10上手くいきません、だけじゃ回答の仕様が無い。
何をやって、どういう状況になったか明確に説明せずに、回答者側にそれを想像することを求めている?
そもそも、そのブログに
>eVC++ 4.0、eVC++ 4.0のサービスパッチ、PPC2003 SDK、PPC2003のエミュレータを順次インストールすればOK。
と書いてあるのに、勝手にVC++2005を使って上手くいかないと言われても。
VC++2005の他に何かインストールしなければいけないのではなく、上記のものを正しくインストールすべき。
>Visual C++ 4.0などを入れてファイルを開いたら固まるので
これについてはどこか他スレで。
0754デフォルトの名無しさん
2008/06/08(日) 12:43:34自分では試せないので、上記を参考に試してみてください。
現在GSPlayer2は「Windows Mobile 2005」にも対応してます。この場合は、「Visual Studio 2005 Standard Edition」でビルドするんですかね。
相応のSDKも必要になるでしょう。
ただ、上記の手順で作ったバイナリは、H/PC系を除き、各種WMで動くと思います。
をやろうとしたんだと思う。多分。
0755750
2008/06/08(日) 13:02:52>VC++ 4.0、eVC++ 4.0のサービスパッチ、PPC2003 SDK、PPC2003のエミュレータを順次インストール
はやったのですが固まってしまうので下の方に書いてあるVisual Studio 2005 Standard Editionを入れました。
libmad.vcwを開くとあるのですが見つからないので、libmad.dspをダブルクリックで開くと
「Visual C++ プロジェクト形式に変換されなければなりません」と出たので変換して開いてソリューションのビルドをすると1 失敗となってしまいます
>>754
それをやろうとしたんですが上手くいきませんでした
>相応のSDKも必要
とあるので何かインストールしなければならない物があるのかと思ったのですが見当違いでしょうか
0756デフォルトの名無しさん
2008/06/08(日) 13:19:11勝手に、インクルードのパス変えてみたりフォルダの構造変えてみたり・・・
聴いてみれば、あれがなかったからかえてみた。とか、パスを通すの面倒だからコピーしたとか・・・・
どんな経験者でも、他人が作ったプロジェクトのどこにノウハウが隠れているか分からないものを変更するのは細心の注意が必要なのにな。
0757デフォルトの名無しさん
2008/06/08(日) 13:37:33>ソリューションのビルドをすると1 失敗となってしまいます
ビルドエラー時にもっと詳細なメッセージが出ているはずだけど、それについて調べる努力はした?
自分にとって意味不明なメッセージはスルー?
>>753も書いているけど、失敗というだけでなくもっと詳細な情報を出さなければ回答してもらえないよ。
たぶんこのスレで聞く様な問題ではなく、visual stdioとかそっち系を探すべきだとは思うけど。
0758750
2008/06/08(日) 13:54:49すみません
エラーが多いので環境自体が整ってないのかと思っていました。
長いのでttp://uproda.2ch-library.com/src/lib030582.txt
スレ違いのようでしたら移ります。
0759デフォルトの名無しさん
2008/06/08(日) 14:13:530760デフォルトの名無しさん
2008/06/08(日) 14:18:09d:\gsplayer\libmad\libmad.c(2) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory
0761デフォルトの名無しさん
2008/06/08(日) 15:42:11++a; /* lvalue required as increment operand */
printf("%p", &a);でアドレスは取れるのにもかかわらず、このaは左辺値じゃないんですか?
0762デフォルトの名無しさん
2008/06/08(日) 15:43:040763デフォルトの名無しさん
2008/06/08(日) 15:49:24lvalueでもmodifiableなものとそうでないものがある。
その例のほかに、たとえばconst修飾されたlvalueはmodifiableでない。
0764761
2008/06/08(日) 16:00:36代入が不可能である時点でインクリメントが出来ないんだろうなという気はするんですが、
>lvalue required as increment operand
というような表現なんで不思議に思ったのですよ
>>763
じゃあこのエラーメッセージは罠で、
aが変更不可能な変数であることがポイントって事なんでしょうか?
0765デフォルトの名無しさん
2008/06/08(日) 16:06:37char a[] は、
char* const a だと思っておけ。
0766デフォルトの名無しさん
2008/06/08(日) 16:14:06The pointer shall be created explicitly, using the unary & operator, or
implicitly using a non-type template parameter of pointer type, or using
an expression of array (4.2) or function (4.3) type.
このルールで右辺値じゃないけど&でポインタをとれる
0767デフォルトの名無しさん
2008/06/08(日) 16:15:13そもそもa[0]などがlvalueであって、a自体はlvalueではないだろ。
&演算子が使えるかどうかはlvalueであることとは無関係では?
0768デフォルトの名無しさん
2008/06/08(日) 16:18:320769デフォルトの名無しさん
2008/06/08(日) 16:18:44lvalue の解釈を「アドレスが取れるもの」とせずに、素直に「代入式の左辺に置けるもの」と
考えておけば何も問題ないエラーメッセージじゃないか?
0770768
2008/06/08(日) 16:19:34modifiableでないlvalueだ
0771デフォルトの名無しさん
2008/06/08(日) 16:25:07左辺値なら何でも代入可能とは限らない。
0772デフォルトの名無しさん
2008/06/08(日) 17:58:07#include <bitset>
#include <boost/lambda/lambda.hpp>
#include <boost/cstdint.hpp>
int main() {
double d=1.0;
std::bitset<64> b(*((boost::int64_t *) &d));
namespace bl=boost::lambda;
for (int i=0; i < b.size(); ++i)
std::cout << b[i];
}
doubleのビット表現をbitsetにぶちこむ為に一時変数使ってポインタのキャストしてるんですが
こういう面倒臭いことせずに
std::bitset<64> b( foo(1.0) );
みたいに一発でできる方法ってないですかね?
0773デフォルトの名無しさん
2008/06/08(日) 18:16:38std::string("0110110101")みたいな
0774デフォルトの名無しさん
2008/06/08(日) 18:48:03一時変数を使うほうが分かりやすいと思うぞ。
reinterpret_cast<boost::uint64_t const&>(static_cast<double const&>(1.0))
そもそも標準のbitsetでは、コンストラクタが
773も言っているstringを取るやつと、unsigned longを取るやつ、
あとコピーコンストラクタしかないからうまくいかなくても知らないぞ。
0775デフォルトの名無しさん
2008/06/08(日) 19:00:00double型を引数としてビット表現を文字列表記したstd::string型を返す関数fooを用意すれば
>std::bitset<64> b( foo(1.0) );
という風にかけるんじゃない?
以下は適当に書いてみた。テストもコンパイルもしてない。
template<typename T>
std::string foo(T d)
{
char buf[sizeof(T)];
for (int i= 0 ; i < sizeof(T) ; i++)
{
buf[i] = *(reinterpret_cast<char*>(&d))[i/8] & (0x80 >> i%8);
}
return std::string(buf);
}
0776デフォルトの名無しさん
2008/06/08(日) 19:00:53○ (reinterpret_cast<char*>(&d))
0777デフォルトの名無しさん
2008/06/08(日) 20:13:530778デフォルトの名無しさん
2008/06/08(日) 20:16:040779デフォルトの名無しさん
2008/06/08(日) 20:30:490780デフォルトの名無しさん
2008/06/08(日) 21:35:470781デフォルトの名無しさん
2008/06/08(日) 23:46:000782デフォルトの名無しさん
2008/06/08(日) 23:47:520783デフォルトの名無しさん
2008/06/08(日) 23:50:170784デフォルトの名無しさん
2008/06/08(日) 23:51:520785デフォルトの名無しさん
2008/06/09(月) 00:02:360786デフォルトの名無しさん
2008/06/09(月) 00:10:190787デフォルトの名無しさん
2008/06/09(月) 00:18:270788デフォルトの名無しさん
2008/06/09(月) 00:19:080789デフォルトの名無しさん
2008/06/09(月) 00:19:540790デフォルトの名無しさん
2008/06/09(月) 00:32:22#undef nagato
#endif
0791デフォルトの名無しさん
2008/06/09(月) 00:56:190792デフォルトの名無しさん
2008/06/09(月) 01:13:110793デフォルトの名無しさん
2008/06/09(月) 01:14:500794デフォルトの名無しさん
2008/06/09(月) 01:42:570795デフォルトの名無しさん
2008/06/09(月) 23:34:24構造体の配列をユーザ関数で作って
それをメイン関数に返したいのですが可能ですか?
0796デフォルトの名無しさん
2008/06/09(月) 23:35:40staticな変数なら返してもおk
0797デフォルトの名無しさん
2008/06/09(月) 23:36:250798デフォルトの名無しさん
2008/06/09(月) 23:43:18T data[L];
};
array_wrapper<int, 10> function(){
array_wrapper<int, 10> result_value;
/* ... */
return result_value;
}
0799デフォルトの名無しさん
2008/06/09(月) 23:45:29どうすればメイン関数で使えるか分からないんです
返却値を構造体の配列の0番目の要素のアドレスにして、
メイン関数で使おうとしたら、0番目の要素以外には処理に使えなくて…
どうすれば、メイン関数ですべての構造体の配列が使えるようになりますか?
0800795
2008/06/09(月) 23:47:39使ってるのはCです
0801デフォルトの名無しさん
2008/06/09(月) 23:47:57使えるよ。
どう使えないの?
0802デフォルトの名無しさん
2008/06/09(月) 23:48:500803デフォルトの名無しさん
2008/06/09(月) 23:56:010804デフォルトの名無しさん
2008/06/09(月) 23:57:190805795
2008/06/09(月) 23:57:59printf("%d n",a[i]->num);
}
見たいな処理を関数内とメイン関数内ですると
構造体を作った関数内では表示できるんですけど
メインでは0番目の要素を処理した後に処理が止まります
0806デフォルトの名無しさん
2008/06/09(月) 23:58:570807デフォルトの名無しさん
2008/06/10(火) 00:18:560808デフォルトの名無しさん
2008/06/10(火) 11:20:43■ このスレッドは過去ログ倉庫に格納されています