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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 06:39:50 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 17
pc11.2ch.net/test/read.cgi/tech/1185286631/

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 94代目
pc11.2ch.net/test/read.cgi/tech/1185452895/

445 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 18:52:51 ]
sprintf(fname, "sample%02d.txt", i);

446 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 19:08:26 ]
あまりの入門レベルにワロタwww

447 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 19:17:16 ]
入門篇だからいいんじゃね?

448 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 22:00:31 ]
でも入門書くらい読めよ、てのが少なくない。

449 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 22:41:01 ]
>>445
うまくいきそうです!ありがとうございました!!

450 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:38:58 ]
>>429
できなくはないが、C言語入門の範疇じゃないな。
OS関連のプログラミングを勉強しないと無理。

451 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 01:05:03 ]
>>444
char filename[5][100];

for (i = 0; i < 5; i++) {
  sprintf(filename[i], "sample%02d.txt", i + 1);
  printf("%s\n", filename[i]);
}

452 名前:デフォルトの名無しさん [2007/09/01(土) 23:22:05 ]
uintptr_t とかsize_t型ってなんなんですか
これもwindowsプログラミング特有の、#defineした型なんでしょうか?

453 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 23:23:29 ]
#defineはしてないと思うよ^^



454 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 23:35:05 ]
>>452
size_tは標準の型。
unsigned intとかunsigned longあたりのtypedef。
strlen()のリターン値とかで使われてる。

uintptr_tは知らんけど、
docs.sun.com/source/806-4836/conv_v9.html
これを見ると、導入が予定されてるのかな?

455 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 00:12:21 ]
size_tは標準Cに入っている記憶域の大きさを表す型、
sizeof演算子の結果の型と定められている。

uintptr_tはC99から導入された<stdint.h>で宣言されている型の1つで、
ポインタをキャストしても表現を失わないと規定されている符号無し整数型。
VC++でも最近はuintptr_t/intptr_tだけ<stdlib.h>で宣言されている。
<stdint.h>ごと入れればいいものを。

Windowsプログラムなら、uintptr_tよりUINT_PTRのほうが良く見かけるな。
こっちはWindows APIの型とされているし、
VC++にuintptr_tが入るよりも前から存在していたから。

456 名前:デフォルトの名無しさん [2007/09/02(日) 00:43:43 ]
一週間ほど前にプログラミングをCから始めまして現在、
ttp://homepage3.nifty.com/mmgames/c_guide/05-02.html
まで勉強しました。そこで、もっといいサイトがあるよ〜
っていうのがあれば教えてくださいm(_ _)m
できれば書籍等も・・・・

教えて君で失礼しますた(´・ω・`)

457 名前:452 [2007/09/02(日) 00:48:08 ]
>>453-455
ありがとうございます。
なるほど、typedefでしたか・・・・。



458 名前:デフォルトの名無しさん [2007/09/02(日) 00:49:16 ]
>>456
とりあえずこのサイト全部終わらせればいいんでない

459 名前:デフォルトの名無しさん [2007/09/02(日) 01:12:37 ]
Cで正規表現を自前で実装しようと思っていますが速度面で微妙

アセンブラのほうがいいですかね?



460 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:14:35 ]
Cで速度でないなら、アセンブラでやっても大差ないと思う

461 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:14:41 ]
>>459
アルゴリズムの問題だと思われ。

462 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:15:54 ]
>>459
grepか何かのソース読んでみるのはどーか

463 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:23:43 ]
なにの正規表現と比べて遅いと思ったのか分からないけど、
その比較した正規表現の処理系も、おそらくCで書かれてると思われ。



464 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:28:48 ]
Cってメモリと文字列処理がだるいよな

465 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:35:56 ]
何をいまさら

って初心者ですか
そうですね

466 名前:デフォルトの名無しさん [2007/09/02(日) 05:17:20 ]
>>456
俺としては、今はもう読むこと無いけど
「C言語入門本物志向が身に付く本」;入門
「ポインタ完全制覇」:ポインタ関連
「文字列操作+ファイル入出力完全制覇」:文字通りの内容
全部「科学技術評論社」
あとは、一応K&R。入門本じゃないけど。
まぁサイトでいえばwisdomsoftかな。
他にも色々あるけど。まぁ、がんばってね

それにつけても、俺が今のレベルまでどうやって勉強してきたのか
さっぱりわからん。学びはじめの頃は
[putchar()//一文字出力する関数]なんてコメントを書きながら
ソース書いてたな。

467 名前:デフォルトの名無しさん [2007/09/02(日) 06:45:53 ]
今更Cなんてやっても・・・

CでOSや組み込み系のドライバをサクサク書けるようになるには10年はかかる

やっと使えるなって感じた頃は全く需要がない恐れがある

468 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 07:10:17 ]
>>467
10年もかからないよ
それに、C言語とOS、ドライバーは関係がない

469 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 07:12:09 ]
ドライバをCで書くなんてえらい時代になったもんだな
ってアセンブラ厨の老人が沸いてくるよ

470 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 08:05:57 ]
tuhsなんか読んでるとUnixはversion 6の時代(1974)にすでにデヴァイス
ドライヴァはCで書かれている。
むしろmkdirだのpasswdとかのユーザープログラムがアセンブラで書かれて
たりして笑える。

471 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 08:06:54 ]
version 6じゃなくてversion 5だった

472 名前:456 [2007/09/02(日) 08:46:32 ]
>>458,466
レス((ヾ(。・ω・)ノ☆゚+.ァリガトゥ
とりあえず今のサイト最後までがんばってみて、
終わったら466さんの紹介してくださった書籍
よんでみます^^

473 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:27:38 ]
>>464
個人的には文字列操作はダルいけど、メモリ操作は楽。



474 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 13:44:29 ]
>>469
C て高級アセンブラだよね
こんな言語で業務アプリ書くアホいないよな
って感じてた老人ならここにいますが...


475 名前:デフォルトの名無しさん [2007/09/02(日) 14:22:06 ]
>>468
あんたアフォですか?
OSを作成するためにCが作成されたのに・・・

476 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 14:26:53 ]
もはや関係がないってことだろう

477 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:22:49 ]
1000から9999までの4桁の数字で、各桁を足した数で自分を割りきれる数がいくつあるか調べるプログラムを作りました。
今回は1325という正しい答えを知っていたのでエラーに気づきましたが、答えがわからない場合はどんな風にデバッグしていますか?

478 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:26:44 ]
全部出力して、検算する。

479 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:30:12 ]
各桁の合計を求める部分、割り切れるかどうかを判定する部分、個数を数える部分を
それぞれ個別にテストしてみる。

480 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:34:28 ]
別のアルゴリズムで解いてみる。

481 名前:デフォルトの名無しさん [2007/09/02(日) 15:36:56 ]
>>477
そのようなプログラムをCで書かなきゃいけないか?w

excelで十分だろ

482 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:40:25 ]
答えを知ってるってことは課題かなんかだろう
それで>>477みたいな疑問を持ったんだからやる価値があったってことだろう

483 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 16:52:58 ]
cat.cより抜粋

/* Buffer for line numbers.
An 11 digit counter may overflow within an hour on a P2/466,
an 18 digit counter needs about 1000y */
#define LINE_COUNTER_BUF_LEN 20
static char line_buf[LINE_COUNTER_BUF_LEN] =
{
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0',
'\t', '\0'
};

/* Position in `line_buf' where printing starts. This will not change
unless the number of lines is larger than 999999. */
static char *line_num_print = line_buf + LINE_COUNTER_BUF_LEN - 8;

/* Position of the first digit in `line_buf'. */
static char *line_num_start = line_buf + LINE_COUNTER_BUF_LEN - 3;

/* Position of the last digit in `line_buf'. */
static char *line_num_end = line_buf + LINE_COUNTER_BUF_LEN - 3;



484 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 16:55:36 ]
>>483の続き

/* Compute the next line number. */

static void
next_line_num (void)
{
char *endp = line_num_end;
do
{
if ((*endp)++ < '9')
return;
*endp-- = '0';
}
while (endp >= line_num_start);
if (line_num_start > line_buf)
*--line_num_start = '1';
else
*line_buf = '>';
if (line_num_start < line_num_print)
line_num_print--;
}

Cの基本的なことを勉強して、cat.cのソースを読んでいますが
この行を計算する関数の処理が何が言いたいのかわかりません。
line_bufを参照しながらカウントしているように見えますが、いまひとつわかりません。
どなたかご教授お願いします。

485 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 17:16:14 ]
www.google.co.jp/search?q=%E3%81%94%E6%95%99%E6%8E%88
>何が言いたいのかわかりません
何を聞きたいのかわかりません

486 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 17:37:21 ]
行番号を表す文字列をポインタ使って変更してるんじゃない?
"399" → "400"みたいに。

487 名前:468 mailto:sage [2007/09/02(日) 18:25:16 ]
>>475
OSを作成するためにCを勉強しているわけではないだろ
そう意味で関係ない

488 名前:デフォルトの名無しさん [2007/09/02(日) 18:37:35 ]
じゃぁ、なん為にやってるの?

文字列を逆順に表示したりするプログラムを書くためですか?hw


489 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:41:38 ]
普通はアプリケーションを作成するためにC言語を勉強するんじゃない?

490 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:42:26 ]
この先必要となる基礎としての勉強じゃないんですか?>>488

491 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:43:35 ]
英語を習うときに、目的を持つかどうかの違い棚。

492 名前:デフォルトの名無しさん [2007/09/02(日) 19:06:28 ]
失礼します。
変数Aに一秒ごとに1を追加していくようにしたいのですが、どうしたらいいのでしょうか。

493 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:07:30 ]
どうしてそんなことをする必要があるのかってところから考えたほうがいいよ。



494 名前:デフォルトの名無しさん [2007/09/02(日) 19:09:41 ]
>>493
いや、タイマーに使いたいのですが。

495 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:14:44 ]
>>492

main()
{
  int A = 0;
  while (1) {
    sleep(1);
    A++;
  }
}

496 名前:デフォルトの名無しさん [2007/09/02(日) 19:16:24 ]
>>492
つ time.h
使った事無いけど…orz

497 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:21:45 ]
CでMMOのBOT作れるんでしょうか?

498 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:22:16 ]
いいえ

499 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:29:53 ]
タイマーの値が必要なときに、現在時刻を取得すればいいんじゃない?
時刻の取得の仕方は環境依存

500 名前:デフォルトの名無しさん [2007/09/02(日) 19:35:31 ]
>>495-496
ありがとうございます
試してきます

501 名前:487 mailto:sage [2007/09/02(日) 20:03:34 ]
>>488
> 文字列を逆順に表示したりするプログラムを書くためですか?hw
なかなかよいポイントをついているね

プログラミングの本質はデータの加工と入出力
世の中のすべてのプログラムは「文字列を逆順に表示したりするプログラム」

データーベースのアプリだって通信モジュールだって高度な科学技術計算のプログラムだって
みーんな本質的には「文字列を逆順に表示したりするプログラム」だ
OSもね


502 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 05:33:18 ]
もっと軽い言語がたくさんありますよ今は

503 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:21:34 ]
例えば何?



504 名前:デフォルトの名無しさん [2007/09/03(月) 23:10:59 ]
おい、五輪実況(男)で看板とか名無しとかLRとか決めるからおちょくりに来いよ
ヒント:なんかVIPの同盟国とかほざいてるから

live24.2ch.net/test/read.cgi/ootoko/1188634806/


505 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 16:12:59 ]
>>503
スクリプト系の言語のことをいってんじゃないの?

506 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 16:17:54 ]
スクリプト系はゲロ重だろ

507 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 18:12:15 ]
int main(void)
{
do {
switch (getnum("番号を入力してください\n")) {
case 1:
question(1);
break;
}
} while (0);
return 0;
}

int getnum(const char *msg)
{
int n;

for (printf(msg); scanf("%d", &n) != 1;) {
while (getchar() != '\n');
}

return n;
}
ここで使われているgetnumがいまいち理解できません。
何をしてるいるのか教えてください。

508 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 18:18:44 ]
printf(msg) は msg を表示
scanf("%d", &n) は数字を入力
!= 1 は scanf で数字が正しく入力されたか確認
while (getchar() != '\n'); は改行が来るまで入力を読み飛ばす
return n; は入力された数字を返す

これでおk?

509 名前:507 mailto:sage [2007/09/04(火) 18:40:35 ]
>>508さん
よくわかりました。
ありがとうございます。

510 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 16:50:33 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4898.txt
質問させてください。
+と-と|を使って升目を出力するプログラムです。
第一に40行目のところのコメントをはずすと最初のループはなぜ止まるのですか?
第二に40行目の部分のコメントをはずしたときに
47行目を切り取り、49行目の後に記述すると結果が変わるのはなぜですか?
いろいろ試すうちに2つ目の問題もでてきて分からなくなりました。
よろしくおねがいします。

511 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 16:54:42 ]
意味がわからない変数名はやめろ

512 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 17:09:32 ]
continueやめてbreakにすれば?

513 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 17:45:26 ]
>>510
> 第二に40行目の部分のコメントをはずしたときに
> 47行目を切り取り、49行目の後に記述すると結果が変わるのはなぜですか?
コンパイラのバグだと思われる。



514 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:09:57 ]
>>510
>>512も言っているけどswitch内のcontinueやめてbreakにするとこうなる

+---+
|   |
+---+
|   |
+---+


515 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:14:27 ]
>>510
確認してないけどたぶんあれね

continueにしちゃっているから44行目からwhile()の式評価にとんじゃっているんだと思う
実際には47〜49行目は実行されていない
本来は47行目に行かなきゃ行けないのでbreakにする

516 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:20:35 ]
32行目を下のように変更するだけで動作が変わるから、バグでしょ
while (d < e){

while (d < e){printf("");

517 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:26:23 ]
gcc は期待したとおりの動作になったが
bcc だと >>516 の変更前後で出力内容が変化した

変更前
+---+

変更後
+---+
|   |
+---+
|   |
+---+

518 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:28:46 ]
あっwhile (d < e)があったの気づかんかった
とりあえず>>515は忘れて

>>514は目的の動作が分からんので保留かな

519 名前:510 mailto:sage [2007/09/05(水) 18:42:26 ]
皆さん見ていただきありがとうございました。
continueで戻ることばかり考えていてbreakを忘れていました、
while文の中にあるのでcontinueを使わずとも繰り返しになるのですね、
whileとbreakとcontinueの使い方を再確認します。
変数名も以後気をつけます。

コンパイラのバグということで
他のコンパイラを試してみようと思っていたのですが
>>517さん試していただきありがとうございました。

520 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 21:23:40 ]
>>519
switch があるから、breakはそっちを抜けるだけで
whileにまで影響しないんだよ
switchとwhileが同じbreakなのは
たまに不便だがな

521 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 22:16:45 ]
まぁそういう時は多少見辛くてもif-else使うかな。俺は。
ループフラグとかgotoとかキラーイ

522 名前:デフォルトの名無しさん [2007/09/06(木) 02:48:24 ]
struct node *hoge(struct node* a)
{
struct node *b;
    b = a;
    a = NULL;
 free( b );
 return a;
}

free関数の形式を調べてみるとvoid free(void *ptr);と書いてありました
ttp://www.bohyoh.com/CandCPP/C/Library/free.html

つまり、上記の関数を実行すると、引き数で渡されたポインタaがNULLを代入される前に指していた領域を開できるということでしょうか?

自分で調べてみて「たぶんあっているな。」とは思ってもどうしても確信できなくて不安になってしまいます。みなさんはそんなことありませんでしたか?(このレス二つ目の疑問です)

523 名前:デフォルトの名無しさん [2007/09/06(木) 04:23:10 ]
適当な結果を標準出力に出力しつつ時々
y/n を聞いてくるコマンド ques が
あったとします。y/n を検知して
代わりに y を入力してくれる
プログラムを書きたいのですが、
何をキーワードに検索してよいのか
すらわかりません。パイプで検索したのですが
何か違う感じでした。
よろしくお願いします。




524 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 07:33:36 ]
>>522
・できる。
・根本的にポインタを理解できていればそんなことはないと思う。

>>523
他に標準入力する項目がなく、quesが確実に標準入力を利用しているというのなら、
yes | ques
でOK。

525 名前:デフォルトの名無しさん [2007/09/06(木) 10:22:16 ]
>>524
すいません。C言語でやりたいのです。
それと質問に応じて no と答える場面もあります。
よろしくお願いします。


526 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:01:35 ]
>>525
それなら、パイプで間違ってないと思う。
コマンドの標準出力/標準エラー出力を監視しながら特定のパターンを認識したら、
コマンドの標準入力に対して、yまたはnを投げる。

>何か違う感じでした。
何を期待しているか知らないが、コンソールアプリでは
WindowsのGUIアプリのように、入力待ちになったとかのイベントが
飛んできて、そこに処理を記述するわけではない。
実装はどうしても泥臭くなると思うが。

527 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:03:40 ]
ファイル操作について質問なのですが、
もし現在の日付をfprintf("%d %d %d %d %d %d\n",local->tm_year・・・以下略
こういう風にファイルに保存したとしますよね。
このファイルを読み込むとき、
fscanf("%d%d%d%d%d%d",&year,・・・以下略という風に読み込んだとき、
何故yearという変数にはしっかりとyearで保存した数字が格納されるのですか?
説明下手ですみません。

528 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:07:05 ]
fprintf("%d %d %d %d %d %d\n",local->tm_year・・・
で書き込むと当然、
2007 09 06 ・・・
となるから、fscanf("%d%d%d%d%d%d",&year,・・・で読み込むときは
空白か改行まで読まれるので
2007
09
06
・・・
と順に読み込まれる

529 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:08:05 ]
なぜって言われても、それが fscanf という関数の機能なんだし。
どういう結果になると思ってた?

530 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:10:00 ]
なるほど・・・左上から順に変数に格納されるんですね。それなら呼び出す
順番に気をつけないとメチャクチャになりますね。分かって良かった。
ありがとうございました。

531 名前: mailto:sage [2007/09/06(木) 16:45:10 ]
すいません。gccの拡張命令について知りたいのですが
どこかに命令一覧が載ってるサイトってありますか?

532 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 16:52:09 ]
配列を引数として関数にいれて、関数でその配列の中身を表示しておいて
mainでその関数を100回くらいまわしたら
値がかわってくるんだけど何が原因だと思われますか?

配列は20要素で
引数は4つ使ってます。

533 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 16:56:09 ]
>>532
そりゃプログラムのバグでしょ
具体的にコード見せてくれないとそれ以上はわからん



534 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:09:10 ]
void makemake(---){ (これをmainと思ってください)
double ma[120][20];
double h1[20],h2[20],n[120];
int num;

fileinput(h1,h2,num);
for(i=0;i<120;i++){
n[i]=fmake(ma[i],h1,h2,num);
}
}

そしてfmake関数に渡します
double fmake(double a[20],double b1[20],double b2[20],int n){
int i;

for(i=0;i<20;i++){
printf("b1:%lf b2:%lf",b1[i],b2[i]);
}

}

まー一部なんでわかりにくいかもしれませんが。
fmake関数のprintfで20ループくらいまでは
きちんと表示されるんですけど途中でnanとかおかしな数字が表示されるんです。



535 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:10:21 ]
not a number

536 名前:532 mailto:sage [2007/09/06(木) 17:13:30 ]
534ですけどお願いします。

537 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:25:07 ]
そのファイルがおかしいんじゃないの

538 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:26:57 ]
>>536
思わず笑ってしまった。
>>535の not a number は>>534の nan を指してる。

NaN (Not a number)、日本語だと非数。

浮動小数点演算で、0除算など計算結果が正しく求められない計算を
したときに、値が正常でないことを示す特別な値が格納される。その値のこと。

繰り返しはまったく同じものを表示しているわけではないみたいだけど、
fileinputで読んできた値がすでにおかしいんじゃないの?

539 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:45:24 ]
>>534
fileinput をでっちあげて動かしてみたが、まったく問題ない。
省略した部分がおかしいと思われ。

540 名前:532 mailto:sage [2007/09/06(木) 17:46:27 ]
ファイル入力が間違ってるんじゃないかって指摘するってことは
プログラムはあってるってことですか
ありがとうございます。

どうしようもなくなったら直接fmakeにb1,b2のファイルいれますわ。

541 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:49:45 ]
>>540
プログラムもなにも、挙げられた断片だけでは何もしないコードに見え
る。fmake()は何も返してないし。


542 名前:532 mailto:sage [2007/09/06(木) 17:53:22 ]
正規分布のプログラムなんすよ。
double a[20],  データ120X20
double b1[20],  20次元の平均
double b2[20],  20次元の分散
int n      平均・分散の組。
式は書くの大変だから省いてるだけです。

543 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 18:02:25 ]
予想ではたぶんその式が悪い



544 名前:532 mailto:sage [2007/09/06(木) 18:04:15 ]
double fmake(double a[20],double b1[20],double b2[20],int n){
int i;

for(i=0;i<20;i++){
printf("b1:%lf b2:%lf",b1[i],b2[i]);
}

以上

545 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 18:06:14 ]
わからなければ計算したり配列弄るごとに中身出力してみ






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

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

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