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


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

C言語なら俺に聞け(入門篇) Part 27



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/


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勉強をしていきます。

364 名前:側近中の側近 ◆0351148456 [2008/05/05(月) 17:23:39 ]
(っ´▽`)っ
正確には
(っ´▽`)っ
b = LEFTB(a, n)

strncpy(b, a, n);
b[n] = '\0';

b = MIDB(a, m, n)

strncpy(b, &a[m-1], n-m+1);
b[n-m+1] = '\0';
だ。

strncpyの第3引数はバイト数。
LEFTとMIDを使いたければwcsncpyを使えばいいような気がする。

365 名前:336 [2008/05/05(月) 17:35:16 ]
>>362
共にがんばりましょう。



366 名前:デフォルトの名無しさん [2008/05/05(月) 17:44:26 ]
 unsigned __int32 hentai, doutei;
 hentai = 293317826;
 doutei = 899523;

仮に上のように hentai と doutei に格納された数値において、
hentai += doutei;  // 293000000 + 899253
のように hentai の下6桁を0にして doutei を加算し、下6桁を doutei にしたい。

条件は
if ( hentai > doutei &&
  doutei >= 0 &&
  doutei < 1000000)

で、思いついたのが
hentai = ((hentai / 1000000) * 1000000) + doutei;

納得がいかないのでスマートなやり方教えてくれ。

367 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 17:50:49 ]
>>366
十分スマートと思うが、どういう点で納得がいかないんだ。

hentai += doutei - hentai % 1000000;






[ 続きを読む ] / [ 携帯版 ]

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

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