1 名前:デフォルトの名無しさん [2008/04/29(火) 09:44:57 ] 言語の入門者向け解説スレです。 ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 26 pc11.2ch.net/test/read.cgi/tech/1206196600/ 過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 105代目 pc11.2ch.net/test/read.cgi/tech/1208268461/
263 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 22:11:47 ] 最後の要素のcolかlineに特別な値を割り当てておくしかないだろう
264 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 22:14:33 ] >>262 できない。 infoが配列の要素を指している以上、 その値は必ず配列上に存在する要素へのポインタにしかなりえない。
265 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 22:16:02 ] あとはline_cntを公開しておくしかないな こーゆーことやるならC++のほうが圧倒的に楽だけどね…
266 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 22:18:13 ] >262 文字列の最後を\0で検出できるのは、\0が文字型の特殊な値だから。 同じように任意の型の配列の末尾を検出したいなら、特殊な値を割り当てて検出する以外にない。
267 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 22:22:50 ] どうしてもやりたいなら、 match_infoの配列ではなく、 match_infoのポインタの配列を使う。 match_info **info; info=(match_info **)malloc((line_cnt+1) * (sizeof(match_info *))); for(i=0;i<line_cnt;i++) info[i]=(match_info *)malloc(sizeof(match_info)); info[line_cnt]=NULL; こうすれば出来るけど、当然一個一個freeする手間がかかる。
268 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 22:24:02 ] >>262 argv[argc]は'\0'ではなくNULLな。 これはargvがポインタの配列だから実現できる。 infoはmatch_info型の配列だから、 末尾要素をNULLにしようとしても型が違う。
269 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 22:28:56 ] >>256 それはもしかするとこう? match_info** info; // ← match_info の配列ですね? { info = (match_info**)malloc(line_cnt+1)*szeof(match_info)); int i; for(i = 0; i < line_cnt + 1; i++) info[i] = NULL+ // ...
270 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 22:30:16 ] >>267 ががん。かぶってしもた・・
271 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 22:33:43 ] 構造体の中身を公開したくないのに構造体の内容で判定することはできない。 公開するか、ポインタの配列で実現するかの二択。
272 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 22:57:51 ] >>263-271 みなさんありがとうございます。 argv[]がargv[argc]までスキャンされるのは、 argv[]が文字列の"ポインタ"だからですね。勘違いしていました。 >>267 >>269 でおっしゃられているようにポインタ配列で実装しようと思います。 >>267 >>269 のようにmalloc()がネストされている場合は、 中をfree()してから外側をfree()しなければなりませんか? 手間がかかるようなら、>>263 ,265も考えてみようと思います。
273 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 23:07:18 ] |>>267 >>269 のようにmalloc()がネストされている場合は、 |中をfree()してから外側をfree()しなければなりませんか? もちろん
274 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 23:17:03 ] 正規表現のアルゴリズムを勉強したいんスけど、なんかグレートなテキストってないっスかねぇ〜?
275 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 23:23:46 ] >>274 エディタのマニュアルに書いてないかな
276 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 23:27:29 ] >>274 grepのソース
277 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 23:34:41 ] >>274 www.amazon.co.jp/dp/4781905854 この本に一章だけ書いてある。 本自体は有名だけど、この説明がいいかどうかは判断できない。
278 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 23:40:46 ] >>277 レビューワロタ 参考にしてる人多すぎだろ
279 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 23:40:52 ] 「詳説 正規表現」のコラムでも、正規表現をさらに学びたい人は >>277 の三章を進めると書いてあるな。
280 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 00:05:26 ] せっ・・・性器表現の勉強を(ry お勧めの参考書を(ry
281 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 00:21:41 ] >>274 手元にある本をあげておきます。 オートマトン・言語理論, 富田悦次・横森 貴, 森北出版 1992, ISBN4627805500 これがベストというわけではありませんが、まず理論的な部分をしっかりおさえておかないと、後々どうにもならなくなると思います。
282 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 03:45:27 ] #include のことを、シャープインクルードって言っていた香具師、手を上げろ! ノシ
283 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 03:50:06 ] えっ、違うの!?
284 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 03:52:10 ] 本場の職人なら、パウンド・インクルードという。
285 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 03:52:32 ] # #は井桁、ナンバーサインでシャープは♯なんだな。 斜めになっているのが縦棒か横棒か、違うんだなぁ。 シャープは楽譜の記号で使われているんだなぁ。 ぼぼぼ、僕はおにぎりが欲しいんだなぁ。
286 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 04:18:42 ] C#とかあるし、シャープで伝わるからそう読んでるな むしろ井桁とかだと通じないことがあるし
287 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 04:29:29 ] シーナンバー・・・うむ・・・いや、いや、そうじゃなくて、C♯はちゃんと シャープと書かれているんでしょう。同一視してはならぬ、決して。
288 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 04:35:23 ] C#は間違いなく井桁だな まぁシャープの代わりに井桁を使っているから、井桁をシャープと読むのは不適切かも知れないが 井桁が通じないことがあるんだからしょうがない もっと普及させてこい。話はそれからだ
289 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 04:42:53 ] ♯の半角が存在しないから、代用しているのさ・・・そう思いたい・・・きっとそうだ。 ♯を英語圏にも広めよう!
290 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 07:35:58 ] >>284 マジなのか どうでもいいけど ttp://cplusplus.syntaxerrors.info/index.php?title=Extra_tokens_at_end_of_pound_include_directive
291 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 09:46:44 ] 英語だといろんな呼ばれ方があるみたいだ。「シャープ」も含めて。 en.wikipedia.org/wiki/Number_sign#Other_names_in_English
292 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 10:17:44 ] 値のビット列表示をしたいのですができません 共用体とビットフィールドを使って実現しようと思ったのですができませんでした 下のプログラムだとどこがだめなんでしょうか? #include <stdio.h> int main(void){ union bits{ char ch; unsigned char a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1; } bits; bits.ch = 'a'; printf("%d %d %d %d %d %d %d %d\n", bits.a, bits.b, bits.c, bits.d, bits.e, bits.f, bits.g, bits.h); bits.ch = 'b'; printf("%d %d %d %d %d %d %d %d\n", bits.a, bits.b, bits.c, bits.d, bits.e, bits.f, bits.g, bits.h); bits.ch = 'c'; printf("%d %d %d %d %d %d %d %d\n", bits.a, bits.b, bits.c, bits.d, bits.e, bits.f, bits.g, bits.h); return 0; } /* 実行結果: 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 */
293 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 10:18:38 ] fgets(str, 32, fp); こんな感じに書いたときに、 strの宣言がcharの配列だったらいいけど、 charへのポインタだったらだめだった。どうして?
294 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 10:31:08 ] >>293 運が悪くポインタの指す先が書き換えてはいけない場所だったから
295 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 10:54:19 ] >>292 a, b, c, d, e, f, g, h が union で共用されているから #include <stdio.h> int main(void){ union bits{ char ch; struct{ unsigned a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1; }; } bits; bits.ch = 'a'; printf("%d %d %d %d %d %d %d %d\n", bits.a, bits.b, bits.c, bits.d, bits.e, bits.f, bits.g, bits.h); bits.ch = 'b'; printf("%d %d %d %d %d %d %d %d\n", bits.a, bits.b, bits.c, bits.d, bits.e, bits.f, bits.g, bits.h); bits.ch = 'c'; printf("%d %d %d %d %d %d %d %d\n", bits.a, bits.b, bits.c, bits.d, bits.e, bits.f, bits.g, bits.h); return 0; }
296 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 10:56:19 ] >>293 ポインタを初期化していなかったに一票
297 名前:293 mailto:sage [2008/05/04(日) 11:04:20 ] >>294 >>296 そうだよね、何処にあるかわからない入れ物を渡してもダメに決まってるよね。 すっきりしますた。
298 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 11:10:44 ] >>295 unsigned とかやってるとサイズが4バイトになるから union bits{ char ch; struct{ unsigned char a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1; }; } bits; にしないとマズいかもしれない。 ただ、ビットフィールドを含む構造体のサイズは処理系依存なので難しい所だが。 さらに言えばビットフィールドのビットがどちら側から埋められるかは処理系依存だから、 union bits{ char ch; struct{ #ifdef BITFIELD_LITTLE_ENDIAN unsigned char h:1, g:1, f:1, e:1, d:1, c:1, b:1, a:1; #else unsigned char a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1; #endif }; } bits; として処理系ごとに切り替えられるようにするのが良い。
299 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 11:13:03 ] unsigned char に対応していない処理系を考慮するなら union bits{ char ch; struct{ #ifdef BITFIELD_LITTLE_ENDIAN #ifdef BITFIELD_INT_SIZE unsigned : sizeof (unsigned int) * CHAR_BIT - 8; unsigned h:1, g:1, f:1, e:1, d:1, c:1, b:1, a:1; #else unsigned char h:1, g:1, f:1, e:1, d:1, c:1, b:1, a:1; #endif #else #ifdef BITFIELD_INT_SIZE unsigned a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1; #else unsigned char a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1; #endif #endif }; } bits; とすることになるが、この共用体のサイズが1であることは期待できない。
300 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 11:28:45 ] >>295 ,298,299 ビットフィールドが全部同じ位置を使っていたということですね プリプロセッサディレクティブは未学習なのですが、イメージはつかめました ありがとうございました
301 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 12:05:18 ] 1ビットしかなくて読むだけなのにビットフィールドの共用体なんてフツー使わねえよ。 #define BIT(val, pos) (((val) >> (pos)) & 1) int ch; ch = 'a'; printf("%d %d %d %d %d %d %d %d\n", \ BIT(ch,7), BIT(ch,6), BIT(ch,5), BIT(ch,4), BIT(ch,3), BIT(ch,2), BIT(ch,1), BIT(ch,0));
302 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 12:08:57 ] >>301 普通って何さ
303 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 12:38:48 ] >>302 普通って普通さ
304 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 13:43:24 ] まあ確かにビットマスク使ったほうが楽だな
305 名前:デフォルトの名無しさん [2008/05/04(日) 17:45:50 ] コマンドプロントでテキストファイル.Cをコンパイルするにはどうすればいいの? パスはしたの通りです。 C:\Users\ユーザー名\Documents\Aディレクトリ\テキストファイル.C C:\Bディレクトリ\コンパイラ
306 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 18:18:23 ] > コンパイラ /? > コンパイラ /H $ コンパイラ -h $コンパイラ --help
307 名前:デフォルトの名無しさん [2008/05/04(日) 18:53:08 ] えwどういうことw
308 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 18:55:18 ] >>307 コンパイラによって方法が違うからコンパイラのマニュアルを見るか 有名なコンパイラなら名前を書け
309 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 18:55:53 ] ヘルプ見ろ
310 名前:デフォルトの名無しさん [2008/05/04(日) 19:05:39 ] え そうなんだ MinGWなんだけど
311 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 19:12:19 ] MinGWならgccかな > C:\Bディレクトリ\コンパイラ が気になるけどたぶん gcc C:\Users\ユーザー名\Documents\Aディレクトリ\テキストファイル.C C:\Bディレクトリ\コンパイラ C:\Users\ユーザー名\Documents\Aディレクトリ\テキストファイル.C どっちかかもね?
312 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 19:20:27 ] gcc --help と叩けば使いかたが出る。
313 名前:デフォルトの名無しさん [2008/05/04(日) 19:31:39 ] > C:\Bディレクトリ\コンパイラ は C:\TYC4TH\gcc ってことです その二つでためしたんですが、 gcc C:\Users\ユーザー名\Documents\Aディレクトリ\テキストファイル.Cの場合 'gcc' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 C:\Bディレクトリ\コンパイラ C:\Users\ユーザー名\Documents\Aディレクトリ\テキストファイル.Cだと 'C:\TYC4TH\gcc' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません
314 名前:デフォルトの名無しさん [2008/05/04(日) 19:33:02 ] ってでます><
315 名前:デフォルトの名無しさん [2008/05/04(日) 19:39:10 ] >>312 なんか英語がたくさんでて意味がわからない・・・
316 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 19:42:10 ] 日本語を含む場合は""で括る 例)gcc "C:\Bディレクトリ\コンパイラ" >'gcc' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。 gccコマンドのパスが通っていない、正しくない
317 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 19:49:07 ] gccインストールしてからMinGWインストールすると パス通すかの確認があった気がしたけど・・・ MinGWをインストールしなおして確認してみるか、 $HOME/.bashrcにexport PATH=$PATH:コンパイラの入ってるディレクトリ を追加してみ MinGWコンパイラの入ってるパスは$HOMEからの相対パスがいいかな ちなみにMSYSも入れるとうれしくなれるかも
318 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 19:49:48 ] >MinGWコンパイラの入ってるパスは コンパイラの入ってるパスは 訂正
319 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 19:51:13 ] >コンパイラの入ってるパスは コンパイラの入ってるディレクトリは 打つ出し脳
320 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 19:51:51 ] MinGW - Minimalist GNU for Windows OSはWindowsじゃないの? XP なのか 9x なのかによっても設定方法違うけど
321 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 19:55:06 ] c:\autoexec.batに PATH=c:\MinGWまでのディレクトリ\bin;%PATH% これを書き込んで再起動すればばよかった、、、はず・・・多分
322 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 19:57:08 ] 折角隔離スレがあるんだから誘導しろよ。 Cygwin + MinGW + GCC 相談室 Part 3 pc11.2ch.net/test/read.cgi/tech/1177944767/
323 名前:デフォルトの名無しさん [2008/05/04(日) 20:19:39 ] おぉ できたかもです!! みなさんありがとうございます。 さっそく勉強してきます。
324 名前:デフォルトの名無しさん [2008/05/04(日) 20:51:46 ] #include <windows.h> typedef HRESULT (STDMETHODCALLTYPE *LPFNGETCORSYSTEMDIRECTORY)(LPWSTR, DWORD, DWORD *); int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow) { WCHAR szBuf[256]; DWORD dwLength; HMODULE hmod; LPFNGETCORSYSTEMDIRECTORY lpfnGetCORSystemDirectory; 略 lpfnGetCORSystemDirectory = (LPFNGETCORSYSTEMDIRECTORY)GetProcAddress(hmod, "GetCORSystemDirectory"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (lpfnGetCORSystemDirectory == NULL) { MessageBox(NULL, TEXT("関数がエクスポートされていません。"), NULL, MB_ICONWARNING); FreeLibrary(hmod); return 0; } 略 } 上記のようなプログラムを見かけましたが波線の部分関数ポインタの動作いまいち理解できません。 どなたかご教示お願いします。
325 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 21:53:20 ] >>293 以下の記述で普通に動作しています。 環境 cygwin/WindowsXP, 処理系 gcc 3.4.4 #include <stdio.h> #define N 1024 int main() { char buffer[N], *p; p = buffer; fgets(p, N, stdin); printf(">%s", p); return 0; } /* end */ 動作しないソースと環境・処理系を教えていただければ、何かわかるかもしれません。
326 名前:325 mailto:sage [2008/05/04(日) 21:54:30 ] 失礼、解決ずみでした。
327 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 01:40:56 ] >>324 関数ポインタとは動作するものではありません もう少し質問内容を吟味してくださらないと答えようがありません
328 名前:デフォルトの名無しさん [2008/05/05(月) 04:08:44 ] >>81 ってどうやるのかな
329 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 06:47:41 ] >>324 何を聞きたいのか今ひとつわからんが、とりあえずMSDN。 msdn.microsoft.com/ja-jp/library/64tkc9y5 (VS.80).aspx
330 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 13:03:48 ] >>324 GetProcAddress は指定した関数へのアドレスを返すんだけど、 GetProcAddress の戻り値の型は1つに定めないといけないので GetProcAddress は関数へのアドレスをとりあえず FARPROC って型にして返すようにしてある。 実際にこの関数のアドレスを使う際には、 本来の関数ポインタ型へとキャストして使う必要がある。
331 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 14:15:49 ] stdlib.hにあるsystem関数って、標準ですか? どの処理系でもまともな動作が期待できる?
332 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 15:04:12 ] >>331 プログラマを目指すならもちとあいまいな問いにならないよう気をつけないと。 質問がとんでもなく飛んでいる。 どの処理系・・・列記してみて まともな動作・・まともってなによ(この質問はちょっとあほっポイ匂い)
333 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 15:19:24 ] >>331 標準じゃない
334 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 15:25:08 ] >>324 このソースって凄いね(大文字ばっかで・・・w) 関数のポインターについてだけど ポインターはアドレスを示すのは判りますね。 int body1(char* mes) { printf("body1 : %s¥n", mes); return 0; } int body2(char* mes) { printf("body2 : %s¥n", mes); return 0; } { int (*func)(char*); func = body1; func("message"); func = body2; func("message"); } みたいな。 lpfnGetCORSystemDirectory は関数へのポインターを示すけど希望するのがなければ NULL。 あとlpfnGetCORSystemDirectory() として適当に引数与えて呼び出せばいいということかな。
335 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 15:57:10 ] >>331 関数そのものは標準であり、 どの処理系であろうと「処理系の考えるところのまともな動作」をする それが「プログラマの期待するところの動作」と一致するかはわからない
336 名前:デフォルトの名無しさん [2008/05/05(月) 16:02:52 ] ここのレス見ても何も分からないほどの初心者ですが教えてほしいことがあります。 課題でこのプログラムを組まないといけないのですが、全く分かりません。 問、二次元配列のプログラムを利用し、行列の積を計算するプログラムを作成せよ。 ただし行列a,bは以下のものを使用する。 |0 1 2| |0 3 6| a=|3 4 5| b=|1 4 7| |6 7 8| |2 5 8| aの一列目とbの1,2,3行目をかけるのがどうすればいいかわかりません。
337 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 16:12:06 ] >>336 >aの一列目とbの1,2,3行目をかけるのがどうすればいいかわかりません。 行列の積の定義から勉強しような。 行と列が逆だと思うぞ。
338 名前:デフォルトの名無しさん [2008/05/05(月) 16:23:36 ] >>337 すいません。丁寧に指摘してくださってありがたいです。 一応僕が作ったプログラムを載せておきます。 #include<stdio.h> main(){ int a[3][3]={{0,1,2},{3,4,5},{6,7,8}}; int b[3][3]={{0,3,6},{1,4,7},{2,5,8}}; int c[3][3]={0}; int i,j; for(i=0;i<3;i++){ for(j=0;j<3;j++) c[i][j]=a[i][j]*b[i][j];} for(i=0;i<3;i++){ for(j=0;j<3;j++) printf("%d ",c[i][j]); printf("\n"); }} 足し算をするプログラムの演算子を+から*に変えただけなので積が出来るわけもないのですが、 どうすればよいのでしょうか、あつかましいですがよろしくお願いします。
339 名前:側近中の側近 ◆0351148456 [2008/05/05(月) 16:28:36 ] (っ´▽`)っ #include <stdio.h> int main(void) { int a[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}; int b[3][3] = {{0, 3, 6}, {1, 4, 7}, {2, 5, 8}}; int ab[3][3]; int i; int j; int k; for(i = 0; i < 3; i++){ for(j = 0; j < 3; j++){ ab[i][j] = 0; for(k = 0; k < 3; k++){ ab[i][j] += (a[i][k] * b[k][j]); } } } return 0; } 答えは{{5, 14, 23}, {14, 50, 86}, {33, 86, 149}
340 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 16:29:04 ] >>338 行列の掛け算は3重のループになるのだぞ。行列を勉強しましょう。
341 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 16:30:14 ] for(n = 0; n < 3; n++){ for(m = 0; m < 3; m++){ for(i = 0; i < 3; i++) c[n][m] += a[n][i] * b[i][m]; } } こんな感じ?
342 名前:側近中の側近 ◆0351148456 [2008/05/05(月) 16:33:49 ] >>338 (っ´▽`)っ x行n列の行列Aのi行j列成分をa(i, j)、 n行y列の行列Bのi行j列成分をb(i, j)、 ABのi行j列成分をab(i, j)と表示するとき、 ab(i, j) = Σ(k=1→n)a(i, k)b(k, j) 線形台数の教科書を見直せ☆
343 名前:デフォルトの名無しさん [2008/05/05(月) 16:51:00 ] >>339->>342 初歩的なことなのにわざわざ教えてくださってありがとうございます。 感謝しています。 あとほんとに初心者的なことなんですが、>>339 さんのプログラムで計算は出来ました。 しかし答えを表示させようと思ったら、なんか変な結果になりました。 以下プログラムと結果です。 (最初のほうは省略) for(i = 0; i < 3; i++){ for(j = 0; j < 3; j++){ ab[i][j] = 0; for(k = 0; k < 3; k++){ ab[i][j] += (a[i][k] * b[k][j]); printf("%d ",ab[i][j]);} } } return 0; } 結果 0 1 5 0 4 14 0 7 23 0 4 14 9 25 50 18 46 86 0 7 23 18 46 86 36 85 149
344 名前:デフォルトの名無しさん [2008/05/05(月) 16:52:39 ] >>342 ゆとり乙 数学3cのレベルです
345 名前:344 [2008/05/05(月) 16:54:36 ] >>342 ごめんなさいゆとりは俺でした 数学3cじゃねええええええええええ あああああああああああああ何か勘違いしてたああああああああ
346 名前:344 [2008/05/05(月) 16:55:21 ] やべえ今までで一番恥ずかしい書き込みだ
347 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 16:55:51 ] 最近Cを始めた者なんですが CってVBにあったLEFTやMIDに当たる関数はないのでしょうか? ポインタを使うような関数を自分で作る必要がありますか? 何かサンプルなどもありましたらお教えください。
348 名前:336 [2008/05/05(月) 16:55:51 ] 僕はちなみに本当のゆとりです。
349 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 16:56:55 ] 落ち着け 寿司食うか?
350 名前:344 [2008/05/05(月) 16:58:16 ] 大体3cとかあんまりやってねぇんだよ・・・ ケーリーはミルトンの公式ばっかり使って足し算引き算ぐらいだっけ? 行列式はなかったよな・・・あぁ・・・俺なにやってんだろう
351 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 16:58:59 ] > ab[i][j] += (a[i][k] * b[k][j]); > printf("%d ",ab[i][j]);} ~~~ 中括弧の位置
352 名前:側近中の側近 ◆0351148456 [2008/05/05(月) 17:03:14 ] >>343 (っ´▽`)っ printfを最も内側のループの外に出せ☆ #include <stdio.h> int main(void) { int a[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}; int b[3][3] = {{0, 3, 6}, {1, 4, 7}, {2, 5, 8}}; int ab[3][3]; int i; int j; int k; for(i = 0; i < 3; i++){ for(j = 0; j < 3; j++){ ab[i][j] = 0; for(k = 0; k < 3; k++){ ab[i][j] += (a[i][k] * b[k][j]); } printf("%d\t", ab[i][j]); } printf("\n"); } return 0; }
353 名前:344 [2008/05/05(月) 17:05:08 ] ああああああああああああああああああああああ
354 名前:344 [2008/05/05(月) 17:06:41 ] ダメだ・・・
355 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 17:08:02 ] 五月蝿い トイレでも篭ってろ
356 名前:344 [2008/05/05(月) 17:08:42 ] 線形台数の教科書読んできますノシ
357 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 17:10:23 ] >>347 >CってVBにあったLEFTやMIDに当たる関数はないのでしょうか? ない >ポインタを使うような関数を自分で作る必要がありますか? ある 文字列操作の概念自体が違うので、CでVBのようなことをやるという考え自体を捨てること まずCのやりかたというものを覚えるのが先
358 名前:側近中の側近 ◆0351148456 [2008/05/05(月) 17:12:08 ] >>347 (っ´▽`)っ b = LEFT(a, n) は strncpy(b, a, n); b[n] = '\0'; b = MID(a, m, n) は strncpy(b, &a[m-1], n-m+1); b[n-m+1] = '\0' で。
359 名前:側近中の側近 ◆0351148456 [2008/05/05(月) 17:13:30 ] (っ´▽`)っ 最後セミコロンが抜けたが気にしない☆
360 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 17:14:05 ] >>347 >CってVBにあったLEFTやMIDに当たる関数はないのでしょうか? どちらもsprintf()で代用可能。
361 名前:336 [2008/05/05(月) 17:14:14 ] >>351->>352 おかげさまでうまく答えも出ました。本当にありがとうございます。
362 名前:344 [2008/05/05(月) 17:14:54 ] >>361 俺と一緒に勉強しようぜ
363 名前:347 mailto:sage [2008/05/05(月) 17:17:36 ] >>357-360 ご回答ありがとうございました。 サンプルを参考にしながらC勉強をしていきます。