C言語何でも質問掲示板


アンケートにご協力下さい → >> アンケートフォーム <<

規約と使い方

 
   当たり判定をしようと ....   
     ・[3416] box 
     ・[3418] 夢霧 
   無題   
     ・[3417] バグ 
     ・[34131182927645] 娘と二人三脚 
   fscanf でファイルから ....   
     ・[3406] box 
     ・[3407] dash 
     ・[3409] box 
     ・[3414] dash 
   無題   
     ・[3411] バグ 
     ・[3412] 大介 
   テキストファイルの処 ....   
     ・[3400] 名無しさん 
   Segmentation fault   
     ・[3281] 大工 
     ・[3287] box 
     ・[3297] 大工 
     ・[3314] box 
     ・[3315] 大工 
     ・[3318] box 
     ・[3326] 大工 
     ・[3329] Justy 
     ・[3332] 大工 
     ・[3333] Justy 
     ・[3334] 大工 
     ・[3335] Justy 
     ・[3336] 大工 
     ・[3337] Justy 
     ・[3352] 大工 
     ・[3356] mas 
     ・[3359] 大工 
     ・[3362] mas 
     ・[3363] mas 
     ・[3366] 大工 
     ・[3396] Interest 
     ・[3397] 大工 
   テキストファイルを読 ....   
     ・[3376] バグ 
     ・[3390] MIK 
     ・[3391] バグ 
     ・[3394] MIK 
     ・[3395] バグ 
   敵機と自機の当たり判 ....   
     ・[3372] バグ 
     ・[3373] Justy 
     ・[3383] 管理人 
     ・[3393] 夢霧 
   似たような問題ですが   
     ・[3368] Justy 
     ・[3374] けいすけ 
     ・[3375] Justy 
     ・[3385] けいすけ 
     ・[3386] けいすけ 
     ・[3387] けいすけ 
     ・[3388] けいすけ 
     ・[3392] Justy 
   コラムス作ってみまし ....   
     ・[3134] 管理人 
     ・[3153] バグ 
     ・[3155] 管理人 
     ・[3156] バグ 
     ・[3160] 管理人 
     ・[3161] バグ 
     ・[3163] 管理人 
     ・[3166] バグ 
     ・[3167] 管理人 
     ・[3170] バグ 
     ・[3173] 管理人 
     ・[3174] Justy 
     ・[3175] 管理人 
     ・[3177] 管理人 
     ・[3178] 管理人 
     ・[3179] Justy 
     ・[3180] 管理人 
     ・[3181] Justy 
     ・[3182] 管理人 
     ・[3193] バグ 
     ・[3195] 管理人 
     ・[3196] 管理人 
     ・[3197] 管理人 
     ・[3198] Justy 
     ・[3199] 管理人 
     ・[3205] バグ 
     ・[3206] バグ 
     ・[3208] バグ 
     ・[3210] 管理人 
     ・[3211] Justy 
     ・[3277] バグ 
     ・[3304] GPGA 
     ・[3308] Justy 
     ・[3364] バグ 
     ・[3365] 管理人 
     ・[3369] バグ 
     ・[3384] 管理人 
     ・[3389] バグ 
   斜め移動が・・・   
     ・[3379] スネ夫 
     ・[3382] 管理人 
   C0W32.OBJ が開けない   
     ・[3380] しっぽ 
     ・[3381] 管理人 
   ビットマップの白と黒 ....   
     ・[3361] Justy 
   で、で、データが・・ ....   
     ・[3325] ダッシュ 
     ・[3328] Justy 
     ・[3330] 管理人 
     ・[3338] Justy 
     ・[3339] 管理人 
     ・[3340] ダッシュ 
     ・[3342] 管理人 
     ・[3344] GPGA 
     ・[3345] 管理人 
     ・[3348] GPGA 
     ・[3349] 管理人 
     ・[3350] keichan 
     ・[3351] Justy 
     ・[3353] GPGA 
     ・[3354] Justy 
     ・[3355] 管理人 
     ・[3357] keichan 
     ・[3358] 管理人 
   関数についてわからな ....   
     ・[3322] 管理人 
     ・[3346] 匿名 
     ・[3347] 管理人 
   ただいま帰りました。 ....   
     ・[3023] 管理人 
     ・[3026] ダッシュ 
     ・[3027] 管理人 
     ・[3060] バグ 
     ・[3068] ダッシュ 
     ・[3077] 管理人 
     ・[3080] ダッシュ 
     ・[3115] 管理人 
     ・[3135] 管理人 
     ・[3141] ダッシュ 
     ・[3143] 管理人 
     ・[3168] ダッシュ 
     ・[3169] 管理人 
     ・[3187] ダッシュ 
     ・[3190] 管理人 
     ・[3191] 管理人 
     ・[3192] ダッシュ 
     ・[3194] 管理人 
     ・[3204] 管理人 
     ・[3207] ダッシュ 
     ・[3209] 管理人 
     ・[3230] ダッシュ 
     ・[3232] 管理人 
     ・[3259] ダッシュ 
     ・[3266] 管理人 
     ・[3268] 管理人 
     ・[3269] 管理人 
     ・[3271] Justy 
     ・[3272] 管理人 
     ・[3275] Yuki 
     ・[3327] ダッシュ 
     ・[3331] 管理人 
     ・[3341] ダッシュ 
     ・[3343] 管理人 
   1次元配列について   
     ・[3216] バグ 
     ・[3219] 管理人 
     ・[3220] 困ったさん 
     ・[3222] box 
     ・[3223] 困ったさん 
     ・[3224] バグ 
     ・[3226] 管理人 
     ・[3227] box 
     ・[3228] 困ったさん 
     ・[3231] 管理人 
     ・[3235] 困ったさん 
     ・[3236] box 
     ・[3237] 管理人 
     ・[3239] バグ 
     ・[3241] 管理人 
     ・[3254] 困ったさん 
     ・[3260] 困ったさん 
     ・[3267] フリオ 
     ・[3276] box 
     ・[3279] 困ったさん 
     ・[3282] box 
     ・[3284] 管理人 
     ・[3286] box 
     ・[3290] 困ったさん 
     ・[3291] バグ 
     ・[3292] box 
     ・[3295] 困ったさん 
     ・[3296] box 
     ・[3298] 困ったさん 
     ・[3299] 管理人 
     ・[3300] 困ったさん 
     ・[3301] 管理人 
     ・[3302] 管理人 
     ・[3303] 管理人 
     ・[3305] 管理人 
     ・[3307] 困ったさん 
     ・[3309] 管理人 
     ・[3310] 管理人 
     ・[3311] 困ったさん 
     ・[3312] box 
     ・[3313] box 
     ・[3317] 困ったさん 
     ・[3319] フリオ 
     ・[3320] box 
     ・[3323] 管理人 
   勉強以前に・・・   
     ・[3263] Justy 
     ・[3265] 管理人 
     ・[3273] helloworld 
     ・[3285] 管理人 
     ・[3293] helloworld 
     ・[3306] たのもー 
     ・[3321] 管理人 
   C言語の種類について   
     ・[3243] 管理人 
     ・[3244] バグ 
     ・[3245] keichan 
     ・[3246] helloworld 
     ・[3247] 管理人 
     ・[3248] GPGA 
     ・[3249] Justy 
     ・[3252] helloworld 
     ・[3283] 管理人 
     ・[3289] Yuki 
     ・[3294] helloworld 
   関数の課題   
     ・[3264] 管理人 
     ・[3278] box 
   クラスのこと   
     ・[3221] バグ 
     ・[3225] Justy 
     ・[3229] meigin 
     ・[3233] バグ 
     ・[3234] バグ 
     ・[3253] meigin 
     ・[3255] Justy 
     ・[3257] meigin 
     ・[3262] Justy 
     ・[3274] meigin 
   無題   
     ・[3251] バグ 
     ・[3258] Justy 
     ・[3270] 管理人 
   DrawText   
     ・[3022] 管理人 
     ・[3062] keichan 
     ・[3064] keichan 
     ・[3073] roppongi 
     ・[3074] GPGA 
     ・[3086] roppongi 
     ・[3088] keichan 
     ・[3238] roppongi 
     ・[3240] GPGA 
   初めて質問させていた ....   
     ・[3213] 管理人 
     ・[3214] box 
     ・[3218] float 
   グラフの書き方   
     ・[3203] 管理人 
   二次方程式の解と一次 ....   
     ・[3069] box 
     ・[3070] 困ったさん 
     ・[3078] 管理人 
     ・[3079] 困ったさん 
     ・[3081] box 
     ・[3082] 困ったさん 
     ・[3083] box 
     ・[3084] 困ったさん 
     ・[3085] box 
     ・[3091] 困ったさん 
     ・[3092] box 
     ・[3094] 困ったさん 
     ・[3105] box 
     ・[3108] 困ったさん 
     ・[3109] box 
     ・[3113] 困ったさん 
     ・[3118] box 
     ・[3121] 困ったさん 
     ・[3122] box 
     ・[3126] 困ったさん 
     ・[3142] 困ったさん 
     ・[3144] 管理人 
     ・[3145] 管理人 
     ・[3147] 困ったさん 
     ・[3148] box 
     ・[3149] 困ったさん 
     ・[3150] box 
     ・[3151] 困ったさん 
     ・[3152] box 
     ・[3154] 困ったさん 
     ・[3157] box 
     ・[3158] 管理人 
     ・[3162] 管理人 
     ・[3164] 困ったさん 
     ・[3165] box 
     ・[3171] 困ったさん 
     ・[3172] 管理人 
     ・[3189] 困ったさん 
   最小二乗法   
     ・[3185] box 
     ・[3186] box 
     ・[3188] 管理人 

Name: 夢霧  ..ぴよぴよ(579ポイント)   Date: 2007/01/04(木) 10:26   No:3415       
Title: 当たり判定をしようとしたら    
何度もすみません・・・orz
またまた、教えていただきたいことがあります。
プレイヤーの弾と敵との当たり判定を参考にして、敵とプレイヤーとの当たり判定をしようとしたのですが、

エラー   + 演算子が使われたがクラス BODY_player_t では int 型のための定義が存在しない

と言うようなエラーが4つほど出てしまいます。

どうしたらいいのでしょうか?
教えてください、お願いします。


166ポイント を手に入れた。


Name: box  ..プログラマー(28,836ポイント)   Date: 2007/01/04(木) 10:53   No:3416     
Title: Re:当たり判定をしようとしたら    
> どうしたらいいのでしょうか?

まずは、
・ソースコード
・エラーメッセージの正確な内容
・開発環境、OS
に関する情報を開示してください。

情報不足のため、誰も回答できないと思います。


61ポイント を手に入れた。

Name: 夢霧  ..ぴよぴよ(585ポイント)   Date: 2007/01/04(木) 15:24   No:3418 解決!     
Title: Re:当たり判定をしようとしたら    
あ・・・どうにかなりました。
ありがとうございました。


6ポイント を手に入れた。



Name: lot  ..ぴよぴよ(5ポイント)   Date: 2007/01/04(木) 01:04   No:3413       
Title: 無題    
プログラムを作ろうとすると
BSCMAKE: error BK1506 : : No such file or directory

こんなエラーがでます。どうすればいいんですか?


5ポイント を手に入れた。


Name: バグ  ..上級者(19,061ポイント)   Date: 2007/01/04(木) 13:22   No:3417     
Title: Re:無題    
どうすればいいんですか?と言われても、これだけの情報では、どうしようもないのでは…(;^_^A
とりあえず、エラーメッセージでネット検索してみて、エラーの意味を調べてみて下さい。


68ポイント を手に入れた。

Name: 娘と二人三脚   Date: 2007/06/27(水) 16:00   No:34131182927645     
Title: Re:無題    
通りすがりのものです。
とりあえずエラーを出ないようにすれば良いだけなら、
プロジェクトのプロパティページを開いて
-構成プロパティ
-C/C++
ブラウザ情報
を選んで、「ブラウザ情報を作成する」を「なし」にすればエラーは出なくなります。

ブラウザ情報を出力したい時は、私もしっかり調査してないのでわかりません^^
…プロジェクトのファイル名やフォルダ名が長過ぎるか、
 日本語を含めてるからだめなのかといった原因だと思ってるんですが…
ブラウザファイル名をしっかり設定してやれば動作するのかな?と思ってます。




Name: dash  ..ぴよぴよ(235ポイント)   Date: 2007/01/03(水) 19:13   No:3405       
Title: fscanf でファイルから入力    

#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fp;
double x, y;
int num=0;
if( (fp = fopen("data.txt", "r")) == NULL ){
printf("ファイルが開けませんでした。\n");
exit(2);
}
while(fscanf(fp, "%lf %lf", &x, &y) != EOF){
num++;
}
printf("%d\n", num);
fclose(fp);
return(0);
}


このような感じで fscanf を用いて値を取得していくとき、
参照されるファイル data.txt に記述されている値が不正な場合(数値以外の記述があるなど)を判定する方法はありますか?

不正な記述があると入力が止まらないようなので num > 1000 などとすればできそうなのですが、
もっとスマートな方法はないかと思い質問させていただきました。
より適した方法があれば教えて頂きたいのですが…。

また、fscanfではプログラムで示したように2つずつ値を入力していますが、
data.txt に記述されている値が奇数個であった場合、最終的に y には 0 が代入されるのでしょうか?
それともコンパイラ等によって異なってしまうのでしょうか?



初歩的な内容かもしれませんが宜しくお願いします。


235ポイント を手に入れた。


Name: box  ..プログラマー(28,551ポイント)   Date: 2007/01/03(水) 19:43   No:3406     
Title: Re:fscanf でファイルから入力    
> 参照されるファイル data.txt に記述されている値が不正な場合(数値以外の記述があるなど)を判定する方法はありますか?

fscanf関数の戻り値について調べてみてください。

> data.txt に記述されている値が奇数個であった場合、最終的に y には 0 が代入されるのでしょうか?

data.txtをその状態にしておき、yの値を出力するコードを書いて
実験してみてください。


50ポイント を手に入れた。

Name: dash  ..ぴよぴよ(308ポイント)   Date: 2007/01/03(水) 19:53   No:3407     
Title: Re:fscanf でファイルから入力    
> fscanf関数の戻り値について調べてみてください。

入力を受け付けた値(入力が成功した値)の個数ですよね?
これを利用してどうするのでしょうか?

> data.txtをその状態にしておき、yの値を出力するコードを書いて
> 実験してみてください。

Visual C++ では 0 が与えられたのですが、これが一般的なのか(保証されるのか)を質問させていただきました。

回答頂ければ幸いです。


73ポイント を手に入れた。

Name: box  ..プログラマー(28,775ポイント)   Date: 2007/01/03(水) 20:10   No:3409     
Title: Re:fscanf でファイルから入力    
> 入力を受け付けた値(入力が成功した値)の個数ですよね?
> これを利用してどうするのでしょうか?

今回は、double型の変数を2個受け取ろうとしていますね。
にもかかわらず、fscanf関数の戻り値が0や1(つまり2以外)だったら、
入力ファイルの中にdouble型以外が混じっていると判断できるのではないでしょうか。

> Visual C++ では 0 が与えられたのですが、これが一般的なのか(保証されるのか)を質問させていただきました。

data.txtに1個だけdouble型の数値が入っている状態だと、
yの値はたまたま0になるかもしれませんし、0以外になるかもしれません。
yのために割り当てられた領域の状態がどうなっているかによります。
コンパイラにはよらないと思います。

data.txtに、3個以上の奇数個のdouble型の数値が入っている状態だと、
最終的なyの値は最後に読み取りが成功したときのものになっていると思います。


224ポイント を手に入れた。

Name: dash  ..ぴよぴよ(440ポイント)   Date: 2007/01/04(木) 01:52   No:3414 解決!     
Title: Re:fscanf でファイルから入力    
演算子の優先度について不適切な部分があって正しい戻り値を評価できていませんでした。
修正したら理想どおりの結果が得られました!
ご指導ありがとうございました。

yの入力については思い違いをしていました。
奇数であればxにしか代入されませんよね。
ありがとうございました。


132ポイント を手に入れた。



Name: 大介  ..ぴよぴよ(125ポイント)   Date: 2007/01/03(水) 23:52   No:3410       
Title: 無題    
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{int y, m, l;

srand( (unsigned)time( NULL ) );
y=rand() % 2500 + 1600;
m=rand() % 12 + 1;
l=rand() % 29 + 1;
printf("西暦%d年%d月%d日",y,m,l);
return(0);
}今回は乱数発生でランダムにだされた西暦年月日をつくりましたが、y=rand() % 2500 + 1600;
というのがありこれはyという乱数が2500以下1600以上という意味なのですがなぜかプログラムを実行しても3000いくつとか4000いくつなんてのもでてきます。m=rand() % 12 + 1;はちゃんと12以下1以上でできるのですがなぜですか?本当にわかりません。是非だれか教えてください。


124ポイント を落としてしまった。


Name: バグ  ..上級者(18,993ポイント)   Date: 2007/01/04(木) 00:00   No:3411     
Title: Re:無題    
y = rand() % 2500 + 1600;

これでは、1600〜4099の間の乱数が発生してしまいますよ。下記のようにすればOKです。

y = rand() % 901 + 1600;

rand() % 901 は、0〜900の乱数を発生させます。この乱数に1600を足すので、1600〜2500の乱数になる訳です。


105ポイント を手に入れた。

Name: 大介  ..ぴよぴよ(168ポイント)   Date: 2007/01/04(木) 00:21   No:3412     
Title: Re:無題    
本当にありがとうございました。完璧に数学の罠?みたいなものにひっかかっていました。やっと乱数が理解できましたー。ありがとう。

43ポイント を手に入れた。



Name: 名無しさん  ..ぴよぴよ(58ポイント)   Date: 2007/01/02(火) 21:28   No:3399       
Title: テキストファイルの処理について    
以前一度ここを利用させていただきましたが、名前を忘れてしまいましたorz

さっそくなのですが、現在ファイル処理にてちとつまづいております。
読み込んだファイルを最後まで一行づつ fgets でよみこんでいるのですが、
途中、削除したい行があります。
一行削除する方法をお教えいただけますでしょうか?

また、テキスト内を指定の文字で検索する方法もできればお願いします。

参考になるサイトの記載などでもかまいません。

よろしくおねがいします。


58ポイント を手に入れた。


Name: 名無しさん  ..ぴよぴよ(145ポイント)   Date: 2007/01/02(火) 21:31   No:3400 解決!     
Title: Re:テキストファイルの処理について    
すみません;
過去ログを読み直していたら参考になるサイトを見つけました。

一応、同じ悩みを持つ方への保守としてはっておきます。

http://always-pg.com/c/runtime_rd/


87ポイント を手に入れた。



Name: 大工  ..かけだし(1,300ポイント)   Date: 2006/12/26(火) 12:35   No:3280       
Title: Segmentation fault    
初投稿ですバタン♪Ю―(^O^ )おじゃましマース

ダイクストラ法を用いて最短経路問題を解くプログラムが完成したのですが。。。

問題が発生しました。
Segmentation fault とCygwinで表示され
gdbで調べてみたんですが。。
#0  0x00401649 in daijkstra (a=14) at C_2~extra.c:135

#1 0x00401651 in daijkstra (a=57) at C_2~extra.c:135
#2 0x00401651 in daijkstra (a=14) at C_2~extra.c:135
#3 0x00401651 in daijkstra (a=57) at C_2~extra.c:135
#4 0x00401651 in daijkstra (a=14) at C_2~extra.c:135
#5 0x00401651 in daijkstra (a=57) at C_2~extra.c:135
#6 0x00401651 in daijkstra (a=14) at C_2~extra.c:135
#7 0x00401651 in daijkstra (a=57) at C_2~extra.c:135
#8 0x00401651 in daijkstra (a=14) at C_2~extra.c:135
#9 0x00401651 in daijkstra (a=57) at C_2~extra.c:135
#10 0x00401651 in daijkstra (a=14) at C_2~extra.c:135
#11 0x00401651 in daijkstra (a=57) at C_2~extra.c:135
#12 0x00401651 in daijkstra (a=14) at C_2~extra.c:135
#13 0x00401651 in daijkstra (a=57) at C_2~extra.c:135
#14 0x00401651 in daijkstra (a=14) at C_2~extra.c:135
#15 0x00401651 in daijkstra (a=57) at C_2~extra.c:135
#16 0x00401651 in daijkstra (a=14) at C_2~extra.c:135
#17 0x00401651 in daijkstra (a=57) at C_2~extra.c:135
#18 0x00401651 in daijkstra (a=14) at C_2~extra.c:135
#19 0x00401651 in daijkstra (a=57) at C_2~extra.c:135
#20 0x00401651 in daijkstra (a=14) at C_2~extra.c:135
#21 0x00401651 in daijkstra (a=57) at C_2~extra.c:135
#22 0x00401651 in daijkstra (a=14) at C_2~extra.c:135
#23 0x00401651 in daijkstra (a=57) at C_2~extra.c:135
---Type <return> to continue, or q <return> to quit--

となり135行目はちょうど矢印の部分です。

いったい何が起こっているのでしょうか??

再帰の無限ループになっているのでしょうか??

でも、同じ点はten * hen 以上アクセスできないようにして、そのうちその点はアクセスできないようになり再帰は起こらない(count[]の要素にならないから)はずなんですが。。hen * ten の部分を 1 に変えてみるとうまくいきごくたまにSegmentation faultと表示されます。この場合はある点aは2回以上アクセスできないということになるので、2回目でアクセスしたときに2回目の方が1回目より短い場合変更できなくなります。ten * hen は全ての点にネットワーク(無向グラフです)の辺が付いたと考えた場合です(これ以上の数はないという条件です・たぶん間違ってます;;)

どなたかSegmentation faultを表示しなくなる方法を教えて下さい.


1,300ポイント を手に入れた。


Name: 大工  ..入門者(2,714ポイント)   Date: 2006/12/26(火) 12:36   No:3281     
Title: main関数です    
削除

1,414ポイント を手に入れた。

Name: box  ..プログラマー(27,705ポイント)   Date: 2006/12/26(火) 14:06   No:3287     
Title: Re:無題    
> ダイクストラ法を用いて最短経路問題を解くプログラムが完成したのですが。。。
>
> 問題が発生しました。

入力パラメータの具体例を教えてください。


19ポイント を落としてしまった。

Name: 大工  ..入門者(3,184ポイント)   Date: 2006/12/26(火) 16:21   No:3297     
Title: すみません    
失礼しました..

ダイクストラのスペルが間違ってますが気になさらず

確率は小数で入力して下さい.
入力>>>>>0.004234
何個の点を対象としますか
入力>>>>>600
何個のネットワークを生成しますか
入力>>>>>200

Program received signal SIGSEGV, Segmentation fault.
0x00401649 in daijkstra (a=0) at C_2~extra.c:135
135 daijkstra(f);


何個の点を対象としますか
入力>>>>>150
何個のネットワークを生成しますか
入力>>>>>20

Program received signal SIGSEGV, Segmentation fault.
0x00401649 in daijkstra (a=0) at C_2~extra.c:135
135 daijkstra(f);


↓これはうまくいった時のものです

確率は小数で入力して下さい.
入力>>>>>0.005345
何個の点を対象としますか
入力>>>>>40
何個のネットワークを生成しますか
入力>>>>>2
ネットワークの直径の平均値: 2.000000
ネットワーク不完全数 → 0
Program exited normally.


470ポイント を手に入れた。

Name: box  ..プログラマー(27,942ポイント)   Date: 2006/12/26(火) 20:49   No:3314     
Title: Re:すみません    
> 確率は小数で入力して下さい.
> 入力>>>>>0.004234
> 何個の点を対象としますか
> 入力>>>>>600
> 何個のネットワークを生成しますか
> 入力>>>>>200

コードをすべて追いかけたわけではないのですが、
もしかすると、入力データの内容によっては
再帰のレベルが深くなりすぎているのかもしれません。


51ポイント を手に入れた。

Name: 大工  ..入門者(3,217ポイント)   Date: 2006/12/26(火) 22:25   No:3315     
Title: Re:すみません    
再帰のレベルですか。。。。

すみません、初心者なんでもうすこし詳しくお願いします.


33ポイント を手に入れた。

Name: box  ..プログラマー(28,395ポイント)   Date: 2006/12/26(火) 23:28   No:3318     
Title: Re:すみません    
> 再帰のレベルですか。。。。

daijkstra関数では、

自分から自分を呼び出して→また自分から自分を呼び出して→
またまた自分から自分を呼び出して→…→

ということを行なっています。
この、再帰呼び出しを行なう際には、いずれ元へ戻ってきたときのために、
・戻ってきた後、次に実行する命令のアドレス
・その時点でのローカル変数の状態
など、さまざまな情報を保持した上で、次の再帰呼び出しを行なっています。

再帰のレベルというのは、最初に書いた矢印の数だと思ってくださってよいと思います。
自分を呼び出して、さらに自分を呼び出して、…というレベルがあまり深くなりすぎると、
上に書いた保持しておくべき情報が多くなりすぎて、
保持するための領域(スタック)をはみ出してしまうのかもしれません。

はみ出してしまったとき、通常は「スタックオーバーフロー」という
現象が起きるように思うのですが、今回のプログラムではたまたま
「segmentation fault」(これも、アクセスしてはいけない領域を
アクセスしてしまった、という種類のエラーです)が発生してしまった、
ということであるのかもしれません。

問題の解決に直接つながる回答でなくて、申し訳ありません。


453ポイント を手に入れた。

Name: 大工  ..入門者(3,235ポイント)   Date: 2006/12/27(水) 00:57   No:3326     
Title: Re:すみません    
難しいんですね。。

ありがとうございます


18ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(50,617ポイント)   Date: 2006/12/27(水) 01:37   No:3329     
Title: Re:すみません    
 スタックオーバーフローが原因ならスタックサイズを増やしてあげれば解決すると思います。
 リンカの設定の項目を調べて増やしてみて下さい。


10ポイント を手に入れた。

Name: 大工  ..入門者(3,252ポイント)   Date: 2006/12/27(水) 01:42   No:3332     
Title: Re:Segmentation fault    
リンカの設定(?)ですかすみません、よくわかんないです

17ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(50,621ポイント)   Date: 2006/12/27(水) 01:50   No:3333     
Title: Re:Segmentation fault    
 コンパイラ・リンカは何を使っていますか?

4ポイント を手に入れた。

Name: 大工  ..入門者(3,273ポイント)   Date: 2006/12/27(水) 01:56   No:3334     
Title: Re:Segmentation fault    
Cygwinです(これって答えになってます?)

21ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(50,696ポイント)   Date: 2006/12/27(水) 02:24   No:3335     
Title: Re:Segmentation fault    
 Cygwin上でということは gccでしょうか。

 なら --stack 4096 のようにオプションに追加してスタックサイズを指定できます(たしか)。
 数値は適当なので、増やして試してみて下さい。
(手っ取り早く 1048576くらいまで一気に増やしてみてもいいかも)


75ポイント を手に入れた。

Name: 大工  ..入門者(3,339ポイント)   Date: 2006/12/27(水) 02:34   No:3336     
Title: Re:Segmentation fault    
回答ありがとうございます。

やってみたんですが、cc1: error: unrecognized command line option "-fstack"

と表示されます。これはいったい。。


66ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(50,921ポイント)   Date: 2006/12/27(水) 03:16   No:3337     
Title: Re:Segmentation fault    
 このオプションはリンカに対するオプションなので、コンパイラに指定してもダメです。

 うーん、少し linuxから試してみましたが、リンカ側も認識しませんでした、そのオプション。
 今の gccはうまくいかないのでしょうか・・・。


 ただ、今回のケースは元々再帰が深すぎるのに問題があるので、アルゴリズム面から見直した方がいいかもしれません。
 tenの数が多ければ多いほど・・・ 20とかの数値でも 3000階層以上の再帰を行うことがあるようです。


225ポイント を手に入れた。

Name: 大工  ..入門者(3,369ポイント)   Date: 2006/12/27(水) 13:39   No:3352     
Title: Re:Segmentation fault    
そぅなんですか。。。。_| ̄|〇

1からやり直しか。。
どこかちょっと変えるだけじゃ無理ですよね


30ポイント を手に入れた。

Name: mas  ..入門者(3,896ポイント)   Date: 2006/12/27(水) 16:18   No:3356     
Title: Re:Segmentation fault    
スタックオーバーフローを防ぐだけなら、
再帰の部分を自前のstackで置き換えるのはどうでしょう?


void func(int n) {
if(flag)
func(next_n);
}

int main() {
func(i);
}

このような再帰呼び出しを


int main() {
int top = 0;
int stack[STACK_SIZE];
stack[top] = i;
while(top >= 0) {
// このnは再帰関数のnと等価
int n = stack[top];
top--;

if(flag) {
top++;
stack[top] = next_n;
}
}
}

再帰を使わずにループで表現できます。

根本的な解決にはならないかもしれませんけど。


2倍のポイントを手に入れた! 408ポイント を手に入れた。

Name: 大工  ..入門者(3,386ポイント)   Date: 2006/12/27(水) 17:33   No:3359     
Title: Re:Segmentation fault    
それっていったいなにが起こってるんですか?

17ポイント を手に入れた。

Name: mas  ..入門者(4,309ポイント)   Date: 2006/12/28(木) 08:38   No:3362     
Title: Re:Segmentation fault    
> それっていったいなにが起こってるんですか?
再帰をループに置き換えています。
具体的な例)


#include <stdio.h>

void func(int n)
{
if(n != 0) {
int i;
for(i=0;i<n;i++)
printf("%d", i);
printf("\n");
func(n-1);
}
}

int main()
{
func(5);
return 0;
}

----------------------------------------------

#include <stdio.h>

#define STACK_SIZE 10

int main()
{
int top = 0;
int stack[STACK_SIZE];
stack[top] = 5;
while(top >= 0) {
int n = stack[top];
top--;

if(n != 0) {
int i;
for(i=0;i<n;i++)
printf("%d", i);
printf("\n");

top++;
stack[top] = n-1;
}
}
return 0;
}


実行してみるとわかると思いますが、上の2つのプログラムは同じ動作をします。
見比べると共通点が多いこともわかると思います。

同様に、ダイクストラ法の再帰関数もループにして置き換えることができます。


413ポイント を手に入れた。

Name: mas  ..初心者(5,743ポイント)   Date: 2006/12/28(木) 08:46   No:3363     
Title: Re:Segmentation fault    
大工さんのプログラムをもとに再帰をループに置き換えたものを載せます。


#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <time.h>

#define ARRAY_MAX 10000

#define STACK_SIZE 1000000

static int ten, hen, count[ARRAY_MAX];
static int adj[ARRAY_MAX][ARRAY_MAX], place[ARRAY_MAX], no_loop[ARRAY_MAX], result[ARRAY_MAX], net_max[ARRAY_MAX];

int a_stack[STACK_SIZE];


int main (void)
{
int sum = 0, sub = 0;
//各要素を格納する
int length[ARRAY_MAX], begin[ARRAY_MAX], end[ARRAY_MAX];
int a, b, c, d, e, f, g, h, i, receive, net_kosuu;
double ran, kakuritu, re_result;


printf("確率は小数で入力して下さい.\n");
printf("入力>>>>>");
scanf(" %lf", &kakuritu);
printf("何個の点を対象としますか\n");
printf("入力>>>>>");
scanf(" %d", &ten);
printf("何個のネットワークを生成しますか\n");
printf("入力>>>>>");
scanf("%d", &net_kosuu);

// srand((unsigned)time(NULL));
srand(0);

for(h = 0;h != net_kosuu;h++){

net_max[h] = -INT_MAX;

//辺にINT_MAXを入力する.
for(a = 0;a != ten;a++){
for(b = 0;b != ten;b++){
adj[a][b] = INT_MAX;
}
}

for(a = 0, hen = 0;a != ten;a++){
for(b = 0;b != ten;b++){
ran = (double)rand() / RAND_MAX;//0から1の値を生成.
if(a == b) continue;
if(kakuritu >= ran){
adj[a][b] = 1;
adj[b][a] = 1;
hen++;
}
}
}
//ネットワーク作成完了.


for(i = 0;i != ten;i++){
result[i] = -INT_MAX;
for(b = 0;b != ten;b++){
no_loop[b] = 0;
}

for(b = 0;b != ten;b++){
place[b] = INT_MAX; /*十分大きな値を入力する*/
} /*0番目は始点なので */
place[i] = 0; /* 0を入力する*/

// daijkstra(i);
{
int top = 0;
a_stack[top] = i;
while(top >= 0) {
int a = a_stack[top];
int g, b, c, d, e, f;
top--;
//アクセス出来る点を探索.
for(b = 0, c = 0;b != ten;b++){
if(adj[a][b] == INT_MAX || a == b) continue;
else{
if(no_loop[b] != ten * hen){
count[c] = b;//アクセス出来た点を入力.
c++;
no_loop[b] = no_loop[b] + 1;
}
}
}
count[c] = -1;

for(d = 0;count[d] != -1; d++){
c = count[d];
if(place[c] == INT_MAX){
place[c] = adj[a][c] + place[a];
}
else{
g = adj[a][c] + place[a];
if(g < place[c]){
place[c] = g;
}
}
}

for(e = 0;count[e] != -1;e++){
f = count[e];
// daijkstra(f);/*←ここです.*/
top++;
a_stack[top] = f;
}

// return;
}
}

for(c = 0;c != ten;c++){
if(place[c] == INT_MAX) continue;
else if(result[i] < place[c]) result[i] = place[c];
}
}
for(d = 0;d != ten;d++){
if(net_max[h] < result[d]) net_max[h] = result[d];
}
}
for(a = 0, sum = 0;a != net_kosuu;a++) {
if(net_max[a] == 0) sub++;
sum += net_max[a];
}

net_kosuu = net_kosuu - sub;

if(net_kosuu != 0) {
re_result = (double)sum / net_kosuu;
printf("ネットワークの直径の平均値: %lf\n", re_result);
}
printf("ネットワーク不完全数 → %d", sub);

return EXIT_SUCCESS;
}


私の環境では
> 確率は小数で入力して下さい.
> 入力>>>>>0.004234
> 何個の点を対象としますか
> 入力>>>>>150
> 何個のネットワークを生成しますか
> 入力>>>>>20
このくらいの条件であれば時間はかかりますがスタックオーバーフローをおこすこともなく実行できました。

# もしかしたら大工さんのダイクストラ法の実装が間違っている可能性もあります。
# 記憶が定かではありませんが、ダイクストラ法を用いれば数百程度の点であれば、
# それほど時間をかけずに最短経路が求まった覚えが…


1,434ポイント を手に入れた。

Name: 大工  ..入門者(3,449ポイント)   Date: 2006/12/28(木) 15:14   No:3366     
Title: Re:Segmentation fault    
わざわざありがとうございます。

高速化したいんですけどなかなか参考できるWebがなくて。。

どこかにないでしょうか??自分ではフィボナッチヒープが速いと調べたんですが色々聞くと実はそんなに速くないとか。。


63ポイント を手に入れた。

Name: Interest  ..ぴよぴよ(0ポイント)   Date: 2006/12/31(日) 09:37   No:3396     
Title: Re:Segmentation fault    
http://okwave.jp/qa2627756.html の人です。

高速化する前に,正しく動く事を優先しましょうよ。
間違ったプログラムが高速で動いても結果が間違っていたら意味がない。



Name: 大工  ..入門者(3,503ポイント)   Date: 2006/12/31(日) 15:29   No:3397     
Title: Re:Segmentation fault    
そのプログラミングは捨てました。もっといいのが思いついたので

2倍のポイントを手に入れた! 54ポイント を手に入れた。



Name: MIK  ..ぴよぴよ(93ポイント)   Date: 2006/12/28(木) 20:11   No:3370       
Title: テキストファイルを読み込んで、グラフを表示させたいです。    
はじめまして。
かなりの初心者ですが、質問させていただきます。

現在VC++6.0 MFC ダイアログベースで体重の推移グラフを作成しようとしています。
グラフを描画するところにはピクチャーを貼り付けています。

テキストファイルに保存してある数値を読み込んで、
折れ線グラフで表示したいのですが。。。
数値を読み込むにはifstreamやCStdioFileを使うので
いいのでしょうか?
どのように読み込んで、どのように表示すればいいのでしょうか?
初心者なりの浅知恵で、テキストに保存してある数値を配列に読み込んで、
pDC->MoveToとpDC->LineToで描画するのかなと考えています。

もっと基本から勉強したほうがいいのはわかっているのですが、
あまり時間がないので申し訳ありませんが、よろしくお願いします。


93ポイント を手に入れた。


Name: バグ  ..上級者(18,649ポイント)   Date: 2006/12/29(金) 06:02   No:3376     
Title: Re:テキストファイルを読み込んで、グラフを表示させたいです。    
体重の数値データに関しては、配列に取り込むのが分かりやすくて良さそうですね。
表示の仕方は、GetClientRect関数でピクチャ領域の大きさを取得し、その領域の大きさの数値と体重データを基に座標を計算して、MoveToとLineToで繋げばいいと思います。


2倍のポイントを手に入れた! 238ポイント を手に入れた。

Name: MIK  ..ぴよぴよ(37ポイント)   Date: 2006/12/30(土) 12:03   No:3390     
Title: Re:テキストファイルを読み込んで、グラフを表示させたいです。    
返信遅くなってしまい申し訳ありませんでした。

やはり配列に取り込むのがいいのですね。
まだまだ勉強不足でこの件はまだ解決には至らないのですが、
バグさんに教えていただいたGetClientRect関数を含め、
もう少し自分で考えてみます。
本当にありがとうございました。
また、何かあればよろしくお願いします。


37ポイント を手に入れた。

Name: バグ  ..上級者(18,835ポイント)   Date: 2006/12/30(土) 12:31   No:3391     
Title: Re:テキストファイルを読み込んで、グラフを表示させたいです。    
実は私、ダイエット中でして、個人的に体重推移を見るプログラムを欲しいと思いましたので、正月休みを利用して作ってみようかと思います(;^_^A
もし、いい物が出来て、管理人さんのOKが出たら公開してもらおうかと思います。


79ポイント を手に入れた。

Name: MIK  ..ぴよぴよ(112ポイント)   Date: 2006/12/30(土) 15:24   No:3394     
Title: Re:テキストファイルを読み込んで、グラフを表示させたいです。    
そうなんですか!
私もこのプログラムを作りながらダイエットの知識を増やせればいいなと思ってます(^^)
バグさんのプログラムぜひ公開してほしいです。
すごくステキな物が出来そうですね!楽しみにしています。
私もちゃんとしたプログラム作れるように頑張らないと・・・!


75ポイント を手に入れた。

Name: バグ  ..上級者(18,862ポイント)   Date: 2006/12/30(土) 22:13   No:3395     
Title: Re:テキストファイルを読み込んで、グラフを表示させたいです。    
もし、VC++にこだわらないんであれば、エクセルを使えば簡単に出来てしまいそうではあるんですけどね…(;^_^A

27ポイント を手に入れた。



Name: 夢霧  ..ぴよぴよ(364ポイント)   Date: 2006/12/28(木) 20:29   No:3371       
Title: 敵機と自機の当たり判定    
こんにちは。
また教えてもらいたいことがあります。
敵機に当たり判定をつけることは出来たのですが、自機につけるのが上手くいきません。
私の作っているシューティングは、敵機から攻撃弾の発射されないタイプで、
敵機と自機が直接ぶつかる感じになります。
そして、自機は3回敵機にぶつかるとゲームオーバーという形にしたいのですが、
どうすればいいのでしょうか?
敵機に当たり判定をつけたようにしようとしているのですが、全く上手くいきません。

できれば、ソースサンプル等をいただけるとうれしいのですが、そこまで贅沢は言いません。
どうか、助けてください。



227ポイント を手に入れた。


Name: バグ  ..上級者(18,411ポイント)   Date: 2006/12/28(木) 20:42   No:3372     
Title: Re:敵機と自機の当たり判定    
自機の表示座標から逆算すればいいんではないでしょうか?

18ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(52,015ポイント)   Date: 2006/12/28(木) 23:16   No:3373     
Title: Re:敵機と自機の当たり判定    
 単純に自分と敵との距離を計ればいいのではないですか?
 距離が自分の半径よりも小さかったら接触、ってかんじで。


敵機に当たり判定をつけたようにしようとしているのですが、全く上手くいきません
 どういう方法でやろうとしてうまくいかなかったのでしょうか。


2倍のポイントを手に入れた! 18ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(165,089ポイント)   Date: 2006/12/30(土) 00:24   No:3383     
Title: Re:敵機と自機の当たり判定    
お返事遅くなってごめんなさい。

えぇと、私が作るときは、


sqrt ( (敵のy座標-自分のy座標)^2 + (敵のx座標-自分のx座標)^2 )

が特定の範囲内になるなら当たったと判定します。

つまり三平方の定理ですね。

敵と自分の当たり判定範囲が両方四角形ならば、単純に

y座標の差が○以下 && x座標の差が△以下

で判定すればいいはずです。

しかし、あたったら、次に無敵である時間が必要です。

あたった直後も当たった状態なはずです。あたったと判定した0.01秒後もきっと当たった状態のはずでしょう。

ですから無敵状態にさせないと一瞬で何回も死んでしまいます。

一定の無敵時間を作りましょう。

3秒なら3秒たったら、機数を1減らして通常モードに戻します。

もっと具体的に処理内容を示してもらえたら詳しいアドバイスが出来るかもしれません。


218ポイント を手に入れた。

Name: 夢霧  ..ぴよぴよ(413ポイント)   Date: 2006/12/30(土) 13:04   No:3393 解決!     
Title: Re:敵機と自機の当たり判定    
皆様のおかげでどうにかなりそうです。
また分からなくなったら来ます。
ありがとうございました!


49ポイント を手に入れた。



Name: けいすけ  ..初心者(5,936ポイント)   Date: 2006/12/28(木) 16:02   No:3367       
Title: 似たような問題ですが    
四角形をx方向に30、y方向に60移動させるプログラムを作成しました。
文法的に間違っているところがあればご指摘いただきたいと思って投稿しました。
よろしくお願いします。


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MS 200
void move(unsigned char *,int,int);
main()
{
char fi[50];
int i,j;
FILE *fp;
unsigned short header[13]={0x4d42,54490,1,0,0,26,0,12,0,MS,MS,1,24};
unsigned char *bmp;
bmp=(unsigned char *)malloc(MS*MS*3);
for(i=0;i<MS*MS;i++)
{
bmp[i*3+0]=0;
bmp[i*3+1]=0;
bmp[i*3+2]=0;
}
for(i=75;i<=124;i++)
{
for(j=75;j<=124;j++)
{
bmp[(i*MS+j)*3+0]=0;
bmp[(i*MS+j)*3+1]=255;
bmp[(i*MS+j)*3+2]=255;
}
}
move(bmp,30,60);
printf("Input file name : ");
scanf("%s",fi);
if((fp=fopen(fi,"wb"))==NULL)
{
printf(stderr,"Error : file open[%s].\n",fi);
exit(1);
}
fwrite(header,2,13,fp);
fwrite(bmp,1,200*200*3,fp);
fclose(fp);
return 0;
}
void move(unsigned char *b,int x0,int y0)
{
int i,j,x,y;
unsigned char *a;
a=(unsigned char *)malloc(MS*MS*3);
for(i=0;i<MS*MS;i++)
{
a[i*3+0]=0;
a[i*3+1]=0;
a[i*3+2]=0;
}
for(i=0;i<MS;i++)
{
y=i-y0;
if(0<y0 && y0<MS)
{
for(j=0;j<MS;j++)
{
x=j-x0;
if(0<x0 && x0<MS)
{
a[(i*MS+j)*3+0]=b[(y*MS+x)*3+0];
a[(i*MS+j)*3+1]=b[(y*MS+x)*3+1];
a[(i*MS+j)*3+2]=b[(y*MS+x)*3+2];
}
}
}
}
for(i=0;i<MS*MS*3;i++)
{
b[i]=a[i];
}
free(a);
}


749ポイント を手に入れた。


Name: Justy  ..熟練のプログラマー(51,997ポイント)   Date: 2006/12/28(木) 17:12   No:3368     
Title: Re:似たような問題ですが    
文法的に間違っているところがあればご指摘いただきたい
 あからさまな文法的な間違いはコンパイラが指摘してくるでしょうから除くと、
・ mainの引数が (void)でない
 くらいでしょう(C++なら特に問題なし)。


 余談ですがロジック的にはいろいろ気になるところはあります。

・ 二重の for分内で何やら範囲チェックをしているが、意味を成していません。
・ y方向に移動するはずが、−y方向に移動しようとしています。


164ポイント を手に入れた。

Name: けいすけ  ..初心者(5,965ポイント)   Date: 2006/12/29(金) 00:14   No:3374     
Title: Re:似たような問題ですが    
mainの引数がvoidではないとはどういう意味でしょうか?

なぜだかうまくこのプログラムが動いてくれないのです><


29ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(51,682ポイント)   Date: 2006/12/29(金) 00:57   No:3375     
Title: Re:似たような問題ですが    
mainの引数がvoidではないとはどういう意味でしょうか?
 メイン関数を main() と書いてますよね?
 C言語では int main(void)int main(int , char*[]) のどちらかが標準で、main() のように空の仮引数は「引数は不明」という意味になります。


なぜだかうまくこのプログラムが動いてくれないのです
 とりあえずコンパイルエラーと上記の「ロジック的に気になるところ」の2点を見てみてはどうでしょうか。


333ポイント を落としてしまった。

Name: けいすけ  ..初心者(5,970ポイント)   Date: 2006/12/30(土) 06:06   No:3385     
Title: Re:似たような問題ですが    
問題

5ポイント を手に入れた。

Name: けいすけ  ..初心者(5,964ポイント)   Date: 2006/12/30(土) 06:06   No:3386     
Title: Re:似たような問題ですが    
ヒント1

6ポイント を落としてしまった。

Name: けいすけ  ..初心者(5,972ポイント)   Date: 2006/12/30(土) 06:07   No:3387     
Title: Re:似たような問題ですが    
ヒント2

8ポイント を手に入れた。

Name: けいすけ  ..初心者(6,057ポイント)   Date: 2006/12/30(土) 06:08   No:3388     
Title: Re:似たような問題ですが    
これと一緒に作ったつもりなのですが、なぜか動いてくれません泣

このヒントが間違っているのでしょうか・・・?

あと、コンパイラとは何なのでしょうか?組み立てる装置みたいなものでしょうか?

再度アドバイス頂けたらうれしいです。よろしくお願いいたします。


85ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(52,044ポイント)   Date: 2006/12/30(土) 12:43   No:3392     
Title: Re:似たような問題ですが    
なぜだかうまくこのプログラムが動いてくれないのです
 上記のプログラムを実行するためにコンパイル・リンクをしますよね?
 これが成功しない、という意味でしょうか。

 でしたら、printfの使い方が間違っている箇所があります。
(というかこれにも指摘したはずです)


二重の for分内で何やら範囲チェックをしているが、意味を成していません
 ヒントは合っています。書かれたプログラムがヒントと一致していません。
 印を付けましたので、そこを重点的にチェックしてみて下さい。


y方向に移動するはずが、−y方向に移動しようとしています
 これは撤回します。
 てっきり +y方向は下な座標系と思っていましたが、+y方向が上向きならプログラムは合っています。


# ヒント通りじゃないと減点だったりするんですか?


362ポイント を手に入れた。



Name: バグ  ..上級者(16,422ポイント)   Date: 2006/12/22(金) 16:47   No:3123       
Title: コラムス作ってみました(雑談板)    
以前作った、カラードロップのソースをかなり流用しまして、コラムスを作ってみました。
勿論、コンソールです。
見た目の印象を少しでも変えて、手抜きだと思われない為に敢えて色を変えてみました(笑)


90ポイント を手に入れた。


Name: 管理人 [URL]  ..ハッカー(150,166ポイント)   Date: 2006/12/22(金) 20:41   No:3134     
Title: Re:コラムス作ってみました(雑談板)    
バグさん、送っていただいたゲームですが、一瞬で終わってしまいます;
始まって0.1秒位で、終了画面になってしまいます;

おそらくすごいはやさでブロックが落ちているのではないでしょうか^^;


20ポイント を手に入れた。

Name: バグ  ..上級者(16,495ポイント)   Date: 2006/12/23(土) 12:01   No:3153     
Title: Re:コラムス作ってみました(雑談板)    
え?私の家では普通に動いているんですけど…?(^_^;)
うーん…カーソルキーの上が押しっぱなしになっていると一瞬でブロック落ちてゲームオーバーにはなるんですけど、そうではないですよね?


73ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(153,574ポイント)   Date: 2006/12/23(土) 12:10   No:3155     
Title: Re:コラムス作ってみました(雑談板)    
私の環境が悪いのでしょうか;

ゲーム始めるためにZボタン押しますよね?
そうするとどこも押さなくてもやはり一瞬でゲームオーバーになってしまいます;

そのまま公開してもいいですか?
公開して使ってもらってやっぱり私と同じような状況になるならやはりバグがあると言うことに・・。

どうします?


96ポイント を手に入れた。

Name: バグ  ..上級者(16,612ポイント)   Date: 2006/12/23(土) 12:14   No:3156     
Title: Re:コラムス作ってみました(雑談板)    
一度、管理人さんの環境でリビルドしてみてもらってもいいですか?
添付していたソースを全て空のコンソールアプリのプロジェクトに入れてもらえばビルドできるはずなので(^_^;)
その実行ファイルで同じ現象が起こるようならば、ソースを見直してみますんでm(__)m


117ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(153,780ポイント)   Date: 2006/12/23(土) 12:22   No:3160     
Title: Re:コラムス作ってみました(雑談板)    
ビルドしました。
やはり一瞬でおわります(T_T)

修正前のデータとか、完成品じゃないのを間違って送ってたりってことありません?


20ポイント を手に入れた。

Name: バグ  ..上級者(16,659ポイント)   Date: 2006/12/23(土) 12:31   No:3161     
Title: Re:コラムス作ってみました(雑談板)    
管理人さんに送ってから、手を入れてないので間違いないとは思うんですが…
ちょっと、ソースを見直してみますね。お手数おかけしましたm(__)m


47ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(154,054ポイント)   Date: 2006/12/23(土) 12:37   No:3163     
Title: Re:コラムス作ってみました(雑談板)    
手順でおかしいところがあればおしえてください。

実行

Simple Columns

最高得点00000
最大連鎖  0

の画面

Zボタン または エンターを押す

何か一瞬ものがすごいスピードで落ちるようなモーションが見え、

0.1秒後位に

終了

再挑戦(Y/N)

の画面

これが何度やっても延々とループされます^^;


128ポイント を手に入れた。

Name: バグ  ..上級者(16,697ポイント)   Date: 2006/12/23(土) 13:35   No:3166     
Title: Re:コラムス作ってみました(雑談板)    
手順は問題無さそうなんですけど…何が問題なんだろう…(;^_^A
MAIN.cppのmain関数のnWaitの初期値は3000になってますよね?
高速落下するということは、mSecTimerクラスがうまく機能してないっぽい感じがしてるんですが…原因不明です…(T_T)


38ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(154,076ポイント)   Date: 2006/12/23(土) 13:52   No:3167     
Title: Re:コラムス作ってみました(雑談板)    
初期値は3000になってます。


う〜ん、とりあえず公開してみます?

もしかしたらどなたかバグ発見してくださるかも^^;

ほかの環境でも私のような状況になるかわかりませんし‥。


50ポイント を手に入れた。

Name: バグ  ..上級者(16,709ポイント)   Date: 2006/12/23(土) 14:19   No:3170     
Title: Re:コラムス作ってみました(雑談板)    
そうですね。お願いします(;^_^A

12ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(154,877ポイント)   Date: 2006/12/23(土) 14:44   No:3173     
Title: Re:コラムス作ってみました(雑談板)    
http://dixq.net/game.html

こちらからコラムスがダウンロード出来るようにしておきました。

おかしいとこあったら教えてください^^;


44ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(48,829ポイント)   Date: 2006/12/23(土) 15:56   No:3174     
Title: Re:コラムス作ってみました(雑談板)    
  管理人さんのところで巧く動かないのはこれが原因だったりしませんか?

http://support.microsoft.com/kb/327809/ja



51ポイント を落としてしまった。

Name: 管理人 [URL]  ..ハッカー(155,090ポイント)   Date: 2006/12/23(土) 16:02   No:3175     
Title: Re:コラムス作ってみました(雑談板)    
こ、、こんな事あるんですか;

CPUはCore2DuoのE6700を使っています。

http://www.intel.co.jp/jp/products/processor/core2duo/specifications.htm

2.66GHz x2

なので、2Ghz以上ってことになりますが、デュアルコアはあまり普及していないにしても、2Ghz以上のCPUはもうかなりのパソコンに普及しているんじゃないですか??

なるパソコンとならないパソコンの違いってなんなのでしょう・・・。

今大学にいるので、このパソコンでも試してみます。


213ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(155,175ポイント)   Date: 2006/12/23(土) 16:15   No:3177     
Title: Re:コラムス作ってみました(雑談板)    
大学のパソコンではうまくいきました;

CPU: Pentium 4 3.4GHz



あ〜QueryPerformanceFrequencyってミリ秒以下の細かい測定が出来るあれですか!

周波数が高いから値が格納可能な31ビットの範囲の数値を超えてしまっているのが原因でしょうか。


23ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(155,147ポイント)   Date: 2006/12/23(土) 16:18   No:3178     
Title: Re:コラムス作ってみました(雑談板)    
・・・ということは、

QueryPerformanceFrequency( &Timer.Counter );

ここのCounterがlongなのが原因だとすると、ここをlonglong型にすると直るかも?


28ポイント を落としてしまった。

Name: Justy  ..熟練のプログラマー(48,951ポイント)   Date: 2006/12/23(土) 16:20   No:3179     
Title: Re:コラムス作ってみました(雑談板)    
周波数が高いから値が格納可能な31ビットの範囲の数値を超えてしまっているのが原因でしょうか
 ではないかなぁ、と。

 32bit目が 1な場合、キャストしたときに負になってしまえば完全におかしくなるでしょうし、正のままだったとしても値は元のからするとかなり小さくなるので、やっぱり何かしらの影響があるかと思います。
 


122ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(155,203ポイント)   Date: 2006/12/23(土) 16:22   No:3180     
Title: Re:コラムス作ってみました(雑談板)    
struct	TIMER

{
long Start; // 計測開始時のカウンタ
long End; // 計測終了時のカウンタ
long Now; // 現在のカウンタ
long long Count; // 1/1000秒間にカウントされた回数保持用
LARGE_INTEGER Counter; // カウンタ管理用
};


では、このように変更して、家にかえってやってみます!

こんな簡単な事でいいんでしょうか?


2倍のポイントを手に入れた! 56ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(48,973ポイント)   Date: 2006/12/23(土) 16:35   No:3181     
Title: Re:コラムス作ってみました(雑談板)    
こんな簡単な事でいいんでしょうか?
 どうでしょう。
 Start/End/Nowとかそれに絡む計算が longで行われているので、そのあたりも直さないといけないかもしれません。


22ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(155,165ポイント)   Date: 2006/12/23(土) 16:41   No:3182     
Title: Re:コラムス作ってみました(雑談板)    
そうですね。一度、バグさんにlong long型で検討してもらってみましょう><

24ポイント を手に入れた。

Name: バグ  ..上級者(16,788ポイント)   Date: 2006/12/24(日) 00:14   No:3193     
Title: Re:コラムス作ってみました(雑談板)    
ということは、管理人さんのPCがハイスペックだったが故に起きた不具合だった訳ですかぁ…なるほど(;^_^A

で、早速、longlong型への変換作業を行なってみたのですが、BCCはlonglong型がサポートされてないみたいで、コンパイルすら通りませんでしたよ…_| ̄|〇

明日、会社で使ってるVC++6.0の入っているノートを持って帰って、組み込んでみます(^-^)


79ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(156,448ポイント)   Date: 2006/12/24(日) 00:35   No:3195     
Title: Re:コラムス作ってみました(雑談板)    
おかしいですね・・大学のPCは3.4Ghzなのにそんなことおきませんでしたが・・。

理論的に2.1Ghz以上っていうだけであって実質の計算速度は理論値と同じにはならないでしょうから、そういう感じで大学のPCではバグが起きなかったんでしょうかね。

ムムム。バイト代貯めて生活費カツカツになりながら、夢のCPUでパソコン作ったもののそのせいでバグがおきるとは・・。


155ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(156,553ポイント)   Date: 2006/12/24(日) 00:37   No:3196     
Title: Re:コラムス作ってみました(雑談板)    
あ、バグさんlong long型はlong(スペース)longと入力しないとコンパイル通りませんが、そんな簡単なことじゃ・・・ないですよね^^;

初めてロングロングをつかったとき、スペースあけずに入力してコンパイル通らなかった覚えがあるので・・一応^^;


105ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(156,581ポイント)   Date: 2006/12/24(日) 00:45   No:3197     
Title: Re:コラムス作ってみました(雑談板)    
TIMER.h TIMER.cppのlongを全てlong longに変更したらうまくいきました^^

28ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(48,303ポイント)   Date: 2006/12/24(日) 01:13   No:3198     
Title: Re:コラムス作ってみました(雑談板)    
@管理人さん
TIMER.h TIMER.cppのlongを全てlong longに変更したらうまくいきました
 やはりこのあたりが原因でしたか。


大学のPCは3.4Ghzなのにそんなことおきませんでしたが
 キャストした結果がオリジナルの値とどれだけ異なるか、そしてキャストした結果負になるかどうか、負になっても問題のないコードになっているかが分かれ道になります。

 こちらの環境では正常に動作いしているように見えるのでテストできないのですが、管理人さんのところで QueryPerformanceFrequency() / QueryPerformanceCounter()実行時、Timer.Counterに入った値が 64bit値としてみたときどういう値になっているか、longにキャストしたときどういう値になっているかを見てみると、はっきりするかと思います。


@バグさん
BCCはlonglong型がサポートされてないみたいで

 ボーランドって long longはなかったでしたっけ?
 と、boostを確認してみたところ

#if __BORLANDC__ >= 0x561
#endif

 この中を通過するならあるようです。
 最新の BCCなら通過すると思いますが、ひょっとするとフリー版は通過しないかもしれませんね。

 だとすると確認したことはないのですが Borlandの環境 ONLYで __int64という型が使えるかもしれません

    // サンプル

__int64 i ;
i = 1i64 << 50;
printf("%Ld\n", i);

 確証はないですが。

 ダメなら double型にしてしまってはどうでしょう。


670ポイント を落としてしまった。

Name: 管理人 [URL]  ..ハッカー(156,693ポイント)   Date: 2006/12/24(日) 01:24   No:3199     
Title: Re:コラムス作ってみました(雑談板)    
>longにキャストしたときどういう値になっているかを見てみると、はっきりするかと思います。

そうですね。longをlong longにしたら直ったってことは、値がオーバーしてしまっていたのでしょうね。
unsigned long longの方がいいかも?・・そこまでいらないか^^;


112ポイント を手に入れた。

Name: バグ  ..上級者(17,151ポイント)   Date: 2006/12/24(日) 07:50   No:3205     
Title: Re:コラムス作ってみました(雑談板)    
今回の件とは別にBCCでビルドした時に起こる不具合を2つも見つけてしまいましたよ(^_^;)
まず、CONSOLE.h内で定義している色に関する定数がconio.hの内部で定義されてある物と名前がかぶっていたようでして、コンパイルが通りません…

それから2つ目が、getch関数でキーボード入力を行っているのですが、カーソルキーの上下左右が押された時の戻り値がVC++を使用して作成した時と違うようでして、コンパイルは通りますが、ゲーム中でブロックの移動が出来ません…

カーソルキーを入力した時の戻り値は2回に分けて返ってくるのですが、VC++の時は1度目の戻り値が0xE0なのですが、BCCの場合は0x00になります。2度目の戻り値は同じだったので、MAIN.cpp内のInputKey関数内にあるswitch文のcase式を変更してやらなければいけませんでした。

環境の違いでこんなに色々と起こるとは…今回は本当に勉強になりましたよ(^_^;)


363ポイント を手に入れた。

Name: バグ  ..上級者(17,213ポイント)   Date: 2006/12/24(日) 08:07   No:3206     
Title: Re:コラムス作ってみました(雑談板)    
>>Justyさん
__int64型を試してみたところ、正常に動作しました(^-^)
あと、前記の不具合を修正することで、BCCへ移植できました。
環境が違うだけで、色々と細かい部分が違うものなんですねぇ…(^_^;)


62ポイント を手に入れた。

Name: バグ  ..上級者(17,270ポイント)   Date: 2006/12/24(日) 10:11   No:3208     
Title: Re:コラムス作ってみました(雑談板)    
>>管理人さん
あ!そういえば、COLOR-DROPも同じタイマーを使用しているので、同じような不具合を抱えている事になりますね…(;´Д`)
近い内に対応してVC++版とBCC版のソースを添付してメールさせてもらいますねm(__)m


57ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(157,594ポイント)   Date: 2006/12/24(日) 12:46   No:3210     
Title: Re:コラムス作ってみました(雑談板)    
あれ、カラードロップだとうまく動くんですが何故でしょう;

確かに思ったより早く落ちてくるので難しいなとは思ってたんですけど・・・ってそれは関係ないですねw

オーバーしていない限り正常な時間で落ちているはずか^^;

私の力ではあの速さ難しいですw


118ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(48,809ポイント)   Date: 2006/12/24(日) 14:02   No:3211     
Title: Re:コラムス作ってみました(雑談板)    
conio.hの内部で定義されてある物と名前がかぶっていたようでして
 あー、Borlandの conio.hには最初からテキスト画面処理関数が入っているんですね。


カーソルキーを入力した時の戻り値
 getch()は戻り値は実装依存だから、ってところですかね。
 ただ MSの方も
 
http://support.microsoft.com/default.aspx?scid=kb;ja;57888
のように拡張文字を読み出す場合についてはこう書いてますから、こうしておけばどっちでも動くかもしれません。



C++版とBCC版のソースを添付
 幸い、MSVCと BCCは事前定義マクロでコンパイラの判別もできますから、差異を吸収する為のコンパイラコンフィグ用のヘッダを作ったり、ライブラリを作っておくとソースを2つも用意しなくても済むと思います。

 今回のケースですと例えばコンフィグヘッダの構成を
+ config

+ compile_config
msvc.h
bcc.h
compile_config.h
config.h
CONSOLE.h
CONSOLE.cpp
MAIN.cpp

 のようにしておいて、ユーザは config/config.hだけをインクルードします。

 config/config.hは事前定義マクロを判別して config/compile_config/msvc.hか config/compile_config/bcc.hのどちらかだけをインクルードします。

 で、後は msvc.hと bcc.hに 64bit整数の型の定義とかをすれば、 MSVC/BCCどちらの環境でもコンパイルできるようになるはずです。
 それに今後環境が増えたとしても拡張しやすいのではないでしょうか。


506ポイント を手に入れた。

Name: バグ  ..上級者(18,102ポイント)   Date: 2006/12/26(火) 09:40   No:3277     
Title: Re:コラムス作ってみました(雑談板)    
うちの環境のVC++6.0ではlong long型が無いみたいです(T_T)
代わりにLONGLONG型というのが用意されていました。符号あり64bit整数型だそうです。ちなみに、符号なし64bit整数型は用意されてないようです(^_^;)
とりあえず、mSecTimerクラスの中身をLONGLONG型にしておきました。高速CPUにも対応できるはずです(苦笑)


154ポイント を手に入れた。

Name: GPGA  ..上級者(16,509ポイント)   Date: 2006/12/26(火) 18:13   No:3304     
Title: Re:コラムス作ってみました(雑談板)    
VC環境で64bit型は__int64が標準だと思います。
以下のように使用できます。

符号あり)
__int64 a;

符号なし)
unsigned __int64 ua;


48ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(50,421ポイント)   Date: 2006/12/26(火) 19:13   No:3308     
Title: Re:コラムス作ってみました(雑談板)    
 まとめると

・ _MSC_VER >= 1200
__int64が使える

・ _MSC_VER >= 1310 且つ 言語拡張が有効
long long型が使える

・ __BORLANDC__ >= 0x561
long long型が使える

・ __BORLANDC__ >= 0x530 且つ bccの予約語が有効
__int64が使える

 ってところでしょうか。


103ポイント を手に入れた。

Name: バグ  ..上級者(18,014ポイント)   Date: 2006/12/28(木) 11:48   No:3364     
Title: Re:コラムス作ってみました(雑談板)    
結局__int64型を採用して、getch()の戻り値対策としてcase式を増やして、定数の名前を変更することで対応しました。これならば、VC++でもBCCでもコンパイルできるはずなので(^_^;)

ついでに、スピード重視のバージョン2を作ってみました。まだバランス調整中なので、『テストプレイしてやってもいいぜ!』という方がいましたら、連絡ください(^-^)


7ポイント を落としてしまった。

Name: 管理人 [URL]  ..ハッカー(164,716ポイント)   Date: 2006/12/28(木) 13:18   No:3365     
Title: Re:コラムス作ってみました(雑談板)    
バグさん、送っていただいたコラムス修正版アップロードしておいたのですが、よかったですか?

まだ、あっぷしちゃいけなかったかな^^;
もしかして違うゲームとして扱ったほうがよかったのでしょうか?

私の環境ではうまくいきました^^
お邪魔ブロックが邪魔です(笑


59ポイント を手に入れた。

Name: バグ  ..上級者(18,393ポイント)   Date: 2006/12/28(木) 17:30   No:3369     
Title: Re:コラムス作ってみました(雑談板)    
『お邪魔ブロック』という位ですから、邪魔でなければ困ります(笑)

それはさておき…

Dixqさんに送ったバージョン2でバグがみつかりました(^_^;)
時々ブロックが空中停止するんですよ。これはこれで面白いから放っておこうかとも思った(笑)んですが、すぐに原因が分かったので直しておく事にしました。あと、バランスの微調整もしてみたので、これから送るものを完成版として扱っていただけたら…と思います。

今回のバージョン2は3つ並べたら消えるという部分は同じですが、スピードだけが求められるゲーム性は、通常のコラムスからはかなり掛け離れてきていますので、タイトルを変更しようかと思っています。

それにコラムスというタイトルもヤバイかもしれないので、変えた方がいいですよね…(苦笑)
ただ全然、良いタイトル名が思いつかないんで、とりあえずColorDrop2という事でお願いします。

旧バージョンのスペースに掲載していただいて構いませんので、旧バージョンは無かった事にしてください(笑)


379ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(165,186ポイント)   Date: 2006/12/30(土) 00:43   No:3384     
Title: Re:コラムス作ってみました(雑談板)    
COLOR-DROP2のページ作りました^^
内容あってるか、あれでよいか確認してもらえますか?

http://dixq.net/game.html

ウィンドウが小さいとプレイしにくいと思うので、画面を大きくする方法も紹介しておきました^^



97ポイント を手に入れた。

Name: バグ  ..上級者(18,756ポイント)   Date: 2006/12/30(土) 10:39   No:3389     
Title: Re:コラムス作ってみました(雑談板)    
おぉ〜!キレイに紹介していただいて、有難うございます(^-^)

今回のカラドロ2は全10ステージと書いてありますが、作者の私も9面めでが限界で、全クリアはできてません。

10面クリアした方は、是非報告してほしいです(^_^;)


107ポイント を手に入れた。



Name: スネ夫  ..ぴよぴよ(65ポイント)   Date: 2006/12/29(金) 19:48   No:3378       
Title: 斜め移動が・・・    
始めまして。
ゲームプログラミングの館のソースを参考に、クォータービュー仕様のゲームを作っているのですが、斜め移動がどうもうまくいきません。どうしたらいいのでしょうか。


65ポイント を手に入れた。


Name: スネ夫  ..ぴよぴよ(89ポイント)   Date: 2006/12/29(金) 19:59   No:3379 解決!     
Title: Re:斜め移動が・・・    
すいません。解決しました・・・
過去ログにありあました。


24ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(164,871ポイント)   Date: 2006/12/30(土) 00:16   No:3382     
Title: Re:斜め移動が・・・    
お返事遅くなりました。
ゲームプログラミングの館を元に、色々作ってくださる方がいらっしゃるようで、光栄です^^

頑張ってくださいね☆


59ポイント を手に入れた。



Name: 義也  ..ぴよぴよ(194ポイント)   Date: 2006/12/29(金) 13:30   No:3377       
Title: C0W32.OBJ が開けない    
 始めまして義也と言います。昨日、僕はC言語を始めました。コンパイラはボーランドのbcc32で、ソフトは、
BCC Developerを使っています。僕は
#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine
, int nCmdShow ){
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数

LoadGraphScreen( 0 , 0 , "test1.bmp" , TRUE ) ;//画像を表示する関数

WaitKey() ;//何か入力があるまで待つ関数
DxLib_End() ;//終了処理をする関数
return 0 ;
}

と言うソースコードをメイクしたいのですがエラーメッセージにFatal: ファイル C0W32.OBJ が開けませんと出てしまいます。どうしたらいいでしょう。


194ポイント を手に入れた。


Name: しっぽ  ..ぴよぴよ(15ポイント)   Date: 2006/12/29(金) 21:33   No:3380     
Title: Re:C0W32.OBJ が開けない    
「C0W32.OBJ 」で検索をしてみましたか?


15ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(164,812ポイント)   Date: 2006/12/30(土) 00:15   No:3381     
Title: Re:C0W32.OBJ が開けない    
こんにちは^^

お返事遅くなってしまったごめんなさい><;

http://72.14.235.104/search?q=cache:2ZQglr4kr7oJ:hpcgi2.nifty.com/natupaji/aska.cgi+C0W32.OBJ&hl=ja&gl=jp&ct=clnk&cd=5

DXライブラリの本家掲示板に似たような事が書いてありますので参考にしてください^^


96ポイント を手に入れた。



Name: hoso  ..ぴよぴよ(244ポイント)   Date: 2006/12/27(水) 23:01   No:3360       
Title: ビットマップの白と黒のドットを数えるプログラム    
初めて質問させて頂きます。
白と黒だけで描かれたビットマップ画像を用意し、縦のラインで白は幾つあるか、黒は幾つあるかを画像全体に関して求めたいのです。

例えばWindowsのペイントでペンツールだけで適当に絵を描いた大きさ640×384のビットマップ画像の場合、ある縦のラインでは白は120、黒は264あり、その隣の縦のラインでは白は124、黒は260あり、、、とこれを640回繰り返して画像の縦のラインでの白値と黒値の値を順次求めていきテキストファイルに出力するようなプログラムを考えています。

と、構想は考えているのですが、買ったC言語の本には画像処理に関してあまり記述が無く、どうか力をお貸しください。


244ポイント を手に入れた。


Name: Justy  ..熟練のプログラマー(51,833ポイント)   Date: 2006/12/28(木) 00:23   No:3361     
Title: Re:ビットマップの白と黒のドットを数えるプログラム    
 BMPファイルを普通にバイナリとして読み込んで先頭から随時解析していく必要があります。
(既存の bmpを扱えるクラスとかライブラリとかを使うのであれば別ですが)


 BMPのフォーマットはこちらを参考にしてファイルフォーマットを理解して下さい。

bmp ファイルフォーマット
http://www.kk.iij4u.or.jp/~kondo/bmp/
http://www.kk.iij4u.or.jp/~kondo/bmp/dib_form.txt


 ファイルの先頭からファイルヘッダの bfOffBitsの分だ進んだアドレス以降に画像データがあります。

 問題なのはペイントツールで保存したときに 24bit / 256色 / 16色 / モノクロのどの bmpで保存したのか、です。
 これによって画像データの解析方法が若干変わってきます。


 あとはこれも参考になるでしょうか。
http://a-gamyl.hp.infoseek.co.jp/Clang/bmpread.html


218ポイント を手に入れた。



Name: 管理人 [URL]  ..ハッカー(163,238ポイント)   Date: 2006/12/27(水) 00:28   No:3324       
Title: で、で、データが・・(雑談板)    
せ、、先日パソコンを新しくした時、USBメモリスティックにプログラム系のデータを移しておきました。
旧パソコンはもうありません。
プログラム系のデータとは、http://dixq.net/sakuhin.htmlこちらで紹介している、私の過去に作ったアプリ達です。
データを新しいパソコンに移そうと、さしてみると・・・
「フォーマットされていません。フォーマットしますか?」
というメッセージが出て、
「はい」
を押すと
「フォーマットが完了しませんでした。」
と出ます。。。
もう一度さすと
「フォーマットされていません。フォーマットしますか?」
というメッセージが出て、
「はい」
を押すと・・・(エンドレス)

これってUSBメモリが壊れたときの症状ですよね。。
(フォーマットしたらデータは消えてしまうわけですが、それすら完了しません・・・。)

もうデータ戻ってこないのでしょうか?;:


38ポイント を手に入れた。


Name: ダッシュ  ..初心者(6,318ポイント)   Date: 2006/12/27(水) 00:55   No:3325     
Title: Re:で、で、データが・・(雑談板)    
僕にはよく分からないのですが・・・。

それって、大学の発表のとかではないのですか?


2倍のポイントを手に入れた! 52ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(50,607ポイント)   Date: 2006/12/27(水) 01:29   No:3328     
Title: Re:で、で、データが・・(雑談板)    
これってUSBメモリが壊れたときの症状ですよね
 ですね。
 
 それがダメなら、コマンドプロンプトからの formatコマンドで出来るかもしれません。
 その後、改めてデータ回復・復旧ソフトを試してみるとなんとかなるかもしれません。


 私も何ヶ月かまえに50GB-HDDを吹っ飛ばして、認識しなくなりました。
 フォーマットができない、という症状ではなかったのですが、「フォーマットしますか?」と訊かれてもそれをするわけにもいかず困っていたのですが、この手の復旧ソフトで全データを取り戻しました(全ての復旧に丸一日かかりましたが)。


186ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(163,423ポイント)   Date: 2006/12/27(水) 01:41   No:3330     
Title: Re:で、で、データが・・(雑談板)    
卒論のデータは消えては洒落にならないので、大学のPC、大学のサーバー、家のパソコンの3箇所に常に保存しているので、
大丈夫です^^
しかし、最近大学のサーバーとの通信がおかしくて・・。
春休みに大学のバイトで、学校のサーバーの通信プログラム書いたの私なんでみんなの消えてしまったら、私のせいかも^^;

なんかワードサーバーから引っ張ってくると「音声データは失われました」とかって出るんですよね。
音声データなんかないのになんででしょ・・。

>コマンドプロンプトからの formatコマンドで出来るかもしれません。

フォーマットしてから復旧するってことできるんですか?
フォーマットしたらデータは永久に消えてしまうものかと思っていました。

しかし、過去に作ったゲームが全て消えてしまう事になっては悲しい:;


185ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(51,184ポイント)   Date: 2006/12/27(水) 03:37   No:3338     
Title: Re:で、で、データが・・(雑談板)    
フォーマットしてから復旧するってことできるんですか?
 状況にもよりますが、フォーマット(非物理フォーマット)してもデータのそのものは残っているので、ある程度は復旧可能です。
 
 物理フォーマットだったとすると一般人には難しいですが、専門の業者なら取り出せるそうです(HDDの場合ですが。USBメモリでもできるかどうかはわかりません)。

 そういうこともあって NSAとかの基準では HDDとかを破棄するときにデータ取り出せないようにするために3回はランダム値で上書きするそうです。


 でも今回のケースではフォーマットもできない、ということなので、セクタスキャンして復旧を試みるソフトを使ってみてはどうでしょうか。

 体験版とかがあるはずなので、それを使って復旧可能なファイルリストを見て、該当データがあったら購入するなどしてみるといいと思います。


263ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(163,494ポイント)   Date: 2006/12/27(水) 03:51   No:3339     
Title: Re:で、で、データが・・(雑談板)    
セクタスキャンですね!
挑戦してみます^^


21ポイント を手に入れた。

Name: ダッシュ  ..初心者(6,476ポイント)   Date: 2006/12/27(水) 07:04   No:3340     
Title: Re:で、で、データが・・(雑談板)    
卒論ではないのですか。少し安心しました(いえ、どちらにしろいいことではないですが・・・。)

データがとんだ時ってこれほど悔しいことはないですからね。復旧することを祈ります。


僕はそろそろ駅に行かないといけないので、この辺で。1週間くらいの旅になりそうです。


65ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(163,526ポイント)   Date: 2006/12/27(水) 10:16   No:3342     
Title: Re:で、で、データが・・(雑談板)    
お〜、関西旅行ですね^^
行ってらっしゃいませ☆
よい旅を^^


32ポイント を手に入れた。

Name: GPGA  ..上級者(16,599ポイント)   Date: 2006/12/27(水) 10:54   No:3344     
Title: Re:で、で、データが・・(雑談板)    
プライベートのデータなら自己責任なのでまだいいのですが、会社のPCのデータが逝きかけたときは本気で焦りました。
今年の3月のことだったのですが、納期が結構迫っているときに、開発効率を上げるため
購入したVS2005 Standard Editionをインストールしたところ、インストール途中にブルーバック。

再起動後はOS立ち上がらず、再びブルーバック。
復旧用のソフトはあったのですが、HDDを2台以上つなげられるPCがほとんど無く
HDDを2台つなげられるPCでも、型が古いためにシリアルATAのHDDを認識できないという悲惨な状態に。

仕方ないので、即座にHDDを持って会社から帰宅し、家でデータ復旧作業を行って夜中に会社に戻り
泊まりで、OS再インストールしました。そして、懲りずにVS2005インストールし、今度は正常にインストールできました。
まさに丸一日(24時間)かけた復旧作業でした。
なお、納期にはぎりぎり間に合いました。

一部復旧できなかったデータもあったので
バックアップはちゃんと取らないとまずいことになるということを肌で感じました。


90ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(163,608ポイント)   Date: 2006/12/27(水) 11:35   No:3345     
Title: Re:で、で、データが・・(雑談板)    
ホントですねぇ;
今度から2重にデータは保存しておきます・・。
しかし、なぜブルーバックしたんですか?


46ポイント を手に入れた。

Name: GPGA  ..上級者(16,765ポイント)   Date: 2006/12/27(水) 12:55   No:3348     
Title: Re:で、で、データが・・(雑談板)    
> なぜブルーバックしたんですか?
正直原因はわかっていません。
やっていたことは、インストール中にネット上の掲示板を閲覧していたくらいです。
いきなりPCが重くなって、その後ブルーバックしました。

とりあえず、VSインストールするときは、起動中の全てのアプリケーションは落としとけってことですね。
VSで思い出しましたが、VS2005のSP1の正式版が12/18に公開されました。
http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/vs2005/sp1/

SP1のインストールは通常VS2005をインストールするのと同じくらい時間がかかります。
インストール時には、起動中の全てのアプリケーションを終了させておくことをお勧めします。
SPだからとなめてかかって、インストール中に作業をしていたら
10分くらいPCが操作を受け付けなり、めちゃめちゃ焦りました。


166ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(163,752ポイント)   Date: 2006/12/27(水) 13:03   No:3349     
Title: Re:で、で、データが・・(雑談板)    
インストールも結構怖いものなんですね。

SP1のリリース知りませんでした。
十分気をつけてインストールしてみますm(_ _)m


37ポイント を手に入れた。

Name: keichan  ..中級者(9,237ポイント)   Date: 2006/12/27(水) 13:11   No:3350     
Title: Re:で、で、データが・・(雑談板)    
一つはまった事を載せておきます。

>VSで思い出しましたが、VS2005のSP1の正式版が12/18に公開されました。
SP1beta を当てている状態で SP1 はインストールできませんでした。
SP1beta をアンインストールしてから SP1 をインストールする必要があります。

#これくらい対応してくれてもよさそうな気もしますが。。。


86ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(51,545ポイント)   Date: 2006/12/27(水) 13:31   No:3351     
Title: Re:で、で、データが・・(雑談板)    
会社のPCのデータが逝きかけたときは本気で焦りました
 焦りますよね、会社のマシンで起こると。
 開発末期ではなかったのですが、ちょっと構成をいじって再起動したら Blue Screen of Death。

 幸い、セーフモードで起動したので、エラーメッセージを隣のマシンからネットで調べて手動で原因を取り除きましたが。

 XPは BSODになってもセーフモードだったり、最後に正常に起動した構成で起動を試みると結構起動することが多いので助かります。


インストールも結構怖いものなんですね
 中で何やっているのかわからないから怖いですよね。
 特にOSをいじくるもの全般。


#これくらい対応してくれてもよさそうな気もしますが
 私もそう思うこともあるのですが・・・。

 ここ
http://itpro.nikkeibp.co.jp/free/NT/WinColumn/20040722/1/
http://itpro.nikkeibp.co.jp/free/NT/WinColumn/20041104/1/
 を読んだ後、自分がその立場だったらと思うと「あー、確かに大変だ。ご苦労様です」と言いたくなりました(w


361ポイント を手に入れた。

Name: GPGA  ..上級者(16,999ポイント)   Date: 2006/12/27(水) 13:56   No:3353     
Title: Re:で、で、データが・・(雑談板)    
> XPは BSODになってもセーフモードだったり、最後に正常に起動した構成で起動を試みると結構起動することが多いので助かります
私もXP使っているのですが、そのときの壊れ方が半端ではありませんでした。
まず、セーフモードで起動しないのは当たり前としまして
リカバリCD入れて、回復コンソールを起動するとCの直下に行くわけですが
そこで、ディレクトリ構成を見ようと思ってdirコマンドを入れたらエラーが返ってきました。
ここまできたらOS最インストール以外で復旧できるとは思えませんでした。


2倍のポイントを手に入れた! 234ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(51,615ポイント)   Date: 2006/12/27(水) 14:15   No:3354     
Title: Re:で、で、データが・・(雑談板)    
私もXP使っているのですが、そのときの壊れ方が半端ではありませんでした
 ここまでくると、ハードディスク自体の方も疑いたくなりますね。


70ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(164,441ポイント)   Date: 2006/12/27(水) 15:14   No:3355     
Title: Re:で、で、データが・・(雑談板)    
今日は学校の研究室のパソコン画面がいきなりファミコンがバグった時のような画面に!
スーファミとかよくカセットに手があたるとシマシマのカーテンのような映像になってフリーズしますよね。
あんな画面で止まりました。

とりあえず、パソコンいじるのが大好きなので、待ってましたとばかりに分解!
・・・の前に一度電源を付け直してみましたが、マザーボードのロゴすら出ず。

HDDが死んでいても、マザーのロゴだけは出るはずなんで、これはCPUかマザーのどちらかがダメなんだと思い、正常なパソコンとパーツを交換してみることに。
マザーが壊れていると電源すら付かなくなることがあるのでCPUかなと思い、とりあえずCPUの交換作業にうつりました。

・・・すると・・、パソコンの内部はそれはそれはひどいものでした!
作った会社はパソコ○工房です。

フロントからのびるコネクタはきちんとさされていなく、1本線が抜けていましたし、
普通ピンをマザーに刺すとき、さしてからテープで止めると思うのですが、それもしてなく、外れていました。

それだけならまだしも、CPUをはずしてみるとなんとシルバーグリスの塗り方が超いい加減!
右側にはダラっと流れ出し、CPUの接続部分まで達しているにもかかわらず、左側には塗られていない!
CPUは熱くなるものだと思いますが、ものすごく熱くなっていたので、恐らく熱暴走なんでしょうか。

CPUは他のPCに繋いでも動くことは無く、死んでしまったようです。マザーボードには温度センサーがあって一定の温度になったら自動的に切れるようですが、CPUの温度上昇は感知してくれないんでしょかね?
結局壊れるまで熱が上がってしまったようです。

アルミ電解コンデンサは温度が10度高くなると寿命は半分と言われていますが、ホントに熱の管理は大切ですね。
熱対策のために3つもファンがついていて、爆音仕様にもかかわらず、こんな事が起きるとは。

しかも私のパソコンもフロントのLEDがつかず、時々ガガガ・・とか言うので開けてみると
これもまたフロントのピンが外れていました。
ガガガ・・という音の正体は当然のように配線がきちんとまとまっていないので、ファンにかかっていたためでした。

教授にこの会社は相当ダメだといいにいったら、来年から他の会社にするということに。
フェイスやドスパラはきちんとした製品を送ってきましたけど、仮にもあれだけ大企業がこんなずさんな事するとは酷いですね。
個人で購入してたら故障したCPU絶対モンクいいますよ。


689ポイント を手に入れた。

Name: keichan  ..中級者(9,375ポイント)   Date: 2006/12/27(水) 16:21   No:3357     
Title: Re:で、で、データが・・(雑談板)    
>CPUは他のPCに繋いでも動くことは無く、死んでしまったようです。マザーボードには温度センサーがあ
>って一定の温度になったら自動的に切れるようですが、CPUの温度上昇は感知してくれないんでしょかね?
たいていのMBには付いてると思いますよ。温度センサー。
何度以上になると強制的に電源を切るとかいう設定もあったはずです。(MBの種類によってはないかも)



138ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(164,657ポイント)   Date: 2006/12/27(水) 16:45   No:3358     
Title: Re:で、で、データが・・(雑談板)    
>何度以上になると強制的に電源を切るとかいう設定もあったはずです。

調べてみたらありました。
う〜ん、ちゃんと作ってたらこんなの設定しなくて良い話なのに・・。

パソコ○工房の口コミいい評価もあれば悪い評価もありますね。
あれだけ大企業になれば手作業で作る製品の品質にばらつきが生じても仕方ないということでしょうか・・。
いい加減な従業員もいれば、熱心な従業員もいると。
そこをいかに教育するかが会社の信用につながっていくと思うんですけどね〜。


216ポイント を手に入れた。



Name: 匿名  ..ぴよぴよ(60ポイント)   Date: 2006/12/26(火) 23:05   No:3316       
Title: 関数についてわからないところがあります。    
 制限時間を設定するときはTimeout関数を使うといいといいますが、その使い方がさっぱりわかりません。
 
 お願いします。


60ポイント を手に入れた。


Name: 管理人 [URL]  ..ハッカー(163,173ポイント)   Date: 2006/12/27(水) 00:14   No:3322     
Title: Re:関数についてわからないところがあります。    
私はtimetouは使った事ないですが、manpageを読んで見たらよくわかるのではないでしょうか。

http://www.linux.or.jp/JM/html/netatalk/man1/timeout.1.html


80ポイント を手に入れた。

Name: 匿名  ..ぴよぴよ(175ポイント)   Date: 2006/12/27(水) 12:05   No:3346     
Title: あの    
Timeout関数についての質問をしたものですが、僕の環境はLinuxではなく、Windowsなんですけど、Windows上ではその関数は使えないのでしょうか。
 探しているんですけど、なかなか、いいことが書いてなくって困っています。
 
お願いします。


115ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(163,715ポイント)   Date: 2006/12/27(水) 12:27   No:3347     
Title: Re:あの    
う〜ん、使ったことが無いので・・。

timeout関数は標準関数に無い関数ですよね?違ったらごめんなさい。

後はこの位しか出てきませんね・・。

http://itpro.nikkeibp.co.jp/article/Windows/20051007/222465/


107ポイント を手に入れた。



Name: ダッシュ  ..入門者(4,450ポイント)   Date: 2006/12/20(水) 20:46   No:3019       
Title: ただいま帰りました。(雑談)    
北海道の修学旅行より無事帰還いたしました。いや〜、こっちは暖かいですね。向こうは氷点下が当たり前ですから。帰りの飛行機では琵琶湖(?)っぽいものも見えました。だから「ああもしかしたら、この下に管理人さんが・・・」なんてことを考えてました。写真をアップしようかな。
返事待ってます。


86ポイント を手に入れた。


Name: 管理人 [URL]  ..ハッカー(146,724ポイント)   Date: 2006/12/20(水) 21:21   No:3023     
Title: Re:ただいま帰りました。(雑談)    
おぉ〜お帰りなさいダッシュさん^^

北海道さむいですよね〜!私の時はマイナス20度で晴天だったので、ダイヤモンドダスト見れたんですよ!
とっても好条件がそろわないと見れないものらしく、とても貴重なものを見ました^^

しかし!たとえるならば、長時間座っていたり、風呂に入っていたとき急に立つと、ふらっとなって目の前に若干テレビの砂嵐みたいにテンテン見てますよね。
あれそっくりですww
なんというロマンのない表現でしょう^^;

そのスキー場はひらふ国際スキー場でしたが、頂上は一年に3回位しか晴れないらしいのに雲ひとつなくて、ものすごく綺麗でした!
これといって特技のない私ですが、田舎育ちのためスキーだけは得意で、私達の班はリフトの無い頂上付近まであがらせてもらいました^^

>「ああもしかしたら、この下に管理人さんが・・・」

琵琶湖沿いに住んでるんで、ダッシュさんの目線の先にもしかしたら私の家があったかもしれませんね^^

>写真をアップしようかな。

お〜是非お願いします♪

主にどこに行ったんですか?私達はスキーばかりだったので小樽位しか行ってないのですが、小樽の町並みは好きですよ〜♪
お土産屋大好きなんでw


212ポイント を手に入れた。

Name: ダッシュ  ..入門者(4,719ポイント)   Date: 2006/12/20(水) 21:48   No:3026     
Title: Re:ただいま帰りました。(雑談)    
ダイヤモンドダストですか。いいなぁ。僕も見たかったんですけど、何しろ氷点下2、3度くらいでしたから、叶いませんでした。

で、まず、アイヌの民族館に行きました。アイヌの血を引いてるって人がアイヌ語の講義をしてくれました。
「ク サパ ピリカ」で、「私の頭はいい」という意味になるらしいです。それに教え方凄くうまくて、ひたすら感心してましたよ。
小樽にも今日行ってきましたよ。でも、ガラス製品高くて買えませんでした↓↓

うう〜。やっぱり今日は疲れちゃいました。もっと話したいところですが、今夜は早めに休みます。また明日来ます!!


269ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(147,156ポイント)   Date: 2006/12/20(水) 21:58   No:3027     
Title: Re:ただいま帰りました。(雑談)    
お〜アイヌ語ですか〜!
北海道には変な字書く地名がありますよね。あれ全部アイヌ語らしいですよ。

聞きなれてるからおかしいと思わないけど、札幌っていうじ「ぽろ」なんて普通言わないですよね。
これもアイヌ語らしいです。
オシンコシンの滝とかオロンコ岩とか有名ですよね。
よく考えてみたら変な変わった名前^^
稚内とかもじゃないのかな?

ガラス工芸品ありましたね〜!細かい細工してあるやつなんて予算より一桁も二桁も高いし^^;

お疲れでしょうね!おやすみなさい☆  お土産話待ってます^^


205ポイント を手に入れた。

Name: バグ  ..上級者(16,163ポイント)   Date: 2006/12/21(木) 07:54   No:3060     
Title: Re:ただいま帰りました。(雑談)    
アイヌと聞くとサムライスピリッツのナコルルが真っ先に思い浮かんでしまう私…横レス失礼しました(苦笑)

38ポイント を手に入れた。

Name: ダッシュ  ..入門者(4,865ポイント)   Date: 2006/12/21(木) 12:12   No:3068     
Title: Re:ただいま帰りました。(雑談)    
「北海道」そのものもアイヌ語の名残らしいです。日本人がつけた名前ですが、アイヌ語を尊重してるところがいいですよね。アイヌ人は今、日本中に住んでるらしいです。昔は漁業をしたり、交易をしたりして生活していたそうです。本当に自然と一体になった生活をしていたみたいで、感動しました。でも、そんな民族を昔の日本人が戦で攻め立てたのは、とても胸が痛くなる気持ちです。戦争の悲惨さと平和の大切さを学べたような気がします。戦争は最低です。世界の人と人が殺しあうなんて、本当になくなって欲しいものです。

146ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(150,263ポイント)   Date: 2006/12/21(木) 14:40   No:3077     
Title: Re:ただいま帰りました。(雑談)    
>バグさん

ナコルルですか??検索してみると、対戦キャラクタのようで…、知りませんでした^^;

>ダッシュさん

北海道もそうなんですかぁ、知りませんでした。
そういえば江戸時代の頃は蝦夷地でしたもんね。
アイヌといっても肌の色が違ったり、目の色が違ったりするわけじゃないからわからないですよね。
これだけ交通機関が発達しているんだし、アイヌは今でもアイヌだけで生活しているわけではないんだから
全国にいてもおかしくないですね。

そういえば北海道に「広島」って地名があるとか・・?
広島の人間が開拓して付いた名前だと聞きましたが、広島出身のため、小学生の時地図を眺めてて、
「広島こんなとこにあるじゃん!」と思ってしまいました^^;


171ポイント を手に入れた。

Name: ダッシュ  ..初心者(5,349ポイント)   Date: 2006/12/21(木) 15:21   No:3080     
Title: Re:ただいま帰りました。(雑談)    
ホントだ!千歳の上の方ですね。ガイドさんが言ってましたけど、北海道を切り開いた時は、熊やら、原生林やらで、血のにじむような努力を要したらしいです。きっと「広島」を切り開いた時もそうだったんでしょうね。

こんなことを言うとおかしいようですが、実は何より感動したのは飛行機なんです。(やっぱりへんかなぁ。)空を飛ぶ瞬間の興奮や、いつもは下から見上げている雲を上から見下ろすということ、人類の英知で空を飛んでいるという事実。何回か外国に行っている友達は「雲ばっかりで飽きるよ」と言ってましたが、僕は正直2時間見続けても飽きませんでした。空ってホントに素敵です。

それと、やっぱり旅っていいですね。日ごろの苦しいことを忘れさせてくれるから、時間に振り回されて、よく考えれないことなんかがよく分かってきます。C言語なんかもそうです。最近は受験勉強で全然手をつけれなかったのですが、よくよく考えてみるとCの勉強と受験勉強を両立させるために早くから計画して始めたのに、いつの間にか受験勉強に振り回されてました。北海道の雄大な大地を見てると2つの両立も可能ではないか。と思えました。


484ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(150,310ポイント)   Date: 2006/12/22(金) 01:26   No:3115     
Title: Re:ただいま帰りました。(雑談)    
今日は忘年会でした。
2次会(ポイ?)までやってしまい、フラフラしながら帰ってきました^^;

センダ!
ミツヲ!
ナハナハナハハ・・・・・。

眠くてしかたありません^^; 明日またお返事します。おやすみなさい・・・zzグゥ


89ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(150,763ポイント)   Date: 2006/12/22(金) 20:55   No:3135     
Title: Re:ただいま帰りました。(雑談)    
飛行機確かにドキドキですよね〜初めてだと^^

私達の時は、嵐の中離陸したので、揺れて揺れて満喫するどころではなかったですが^^;

受験シーズンですね!といっても、まだ2年生でしたっけ?

私はホントに始めたのは三年の10月位だったかな?(オイ

受験は やらないと・・やらないと・・

と思うばかりでは全然実に入らないので、今の授業の予習をして、今の授業に興味を持って、今の授業のテストで100点目指す方が

ずっと効率よかったなと体験して思いました^^

早くから大学受験の準備をしろと回りはみんな言うでしょうけど、高校のうちにしか出来ないことがあることも確か!

2年生のうちは今一番したいことを優先して、将来悔いは残らないと思いますよ^^

私は高校の時はアホほどテニス三昧でしたが、そのときは本当に楽しかったので、三年になって苦労したり、第一希望に落ちたりしても、

今ではそれに対して後悔はしていません。

どこの大学に行っても自分にやる気があれば何でも出来るし、「名誉のために大学に入る」のではないのなら

どこの大学に入っても関係ないですよ、一方で名前だけかっこいい大学に入ってもやる気ないやつは

シュウカツで負け組みになります。

高校は一生のうちで今だけ!今やりたいことを優先して生きることも大事ですよ^^

友達は三年の夏までクラブをやってましたが、東大に現役合格しました。

だらだら勉強せな・・としながら勉強しないよりも、

やりたいことやって、勉強するときはきっちり勉強モードにどれだけ切り替えられるかが一番重要です♪


597ポイント を手に入れた。

Name: ダッシュ  ..初心者(5,374ポイント)   Date: 2006/12/22(金) 23:50   No:3141     
Title: Re:ただいま帰りました。(雑談)    
それ言えますね。いくら受験勉強に集中しなくてはいけないと言っても、時間のすべてをそれにつぎ込むことはないんじゃないかと思います。それに「そんなことやっとる暇はない」といいつつ何も出来ないことのほうがよっぽど虚しいですし。そんな人結構いるんじゃないですかね。むしろ、二つを求めようとすれば、当然時間がなくなるわけだから、背水の陣で頑張れるような気がします。

今日から冬休みに入ったので学校の課題も、自分の課題も忘れずにやっていこうと思ってます!管理人さんは冬休みいつからですか?(大学ってそういうの無いんでしょうか?)


25ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(151,645ポイント)   Date: 2006/12/23(土) 01:51   No:3143     
Title: Re:ただいま帰りました。(雑談)    
私は冬休みはあってないような物で‥。そもそも「学校の日」ってのもないんですよね。
好きなときに研究に来いって感じなんで。
家で研究できる人は学校にさっぱりこなかったりします。
私は大学に行く派なのでほぼ毎日行っています。特になかなかスムーズに卒論がまとまらないので
苦労してます。
12/27が予備発表なので、それまでになんとか仕上げなければ・・と必死です。
今も書いてます。文章書いてはみたものの書き出しの要旨と内容があってなくて書き直したり試行錯誤しています(_ _|||)

>「そんなことやっとる暇はない」といいつつ何も出来ないことのほうがよっぽど虚しいですし

そんな事で空回りしている人いますねw
遊びにとか誘うと「そんな暇ない!!」とかいって、結局その間何した?と聞かれたら答えられないとか。
私も何か遊ぶの我慢してもその遊んでいる2時間、3時間の間に結局なにやったっけ?って事よくあります。
夕食後、ぼけっとテレビ1時間見るのが習慣だとしたらその1時間やりたいことにあてれば普段の生活になんら支障ないですし、
要はいかに効率よく時間を使うかですね。私のまわりにいる頭いい人はみんなそれがうまいです。
勉強しているときは何時間でも全くしゃべりませんし、勉強モード。
遊ぶときはしっかり遊んでます。
まぁそれはみんなわかってるけどなかなか出来ないもんですよね。
とにかく、私の場合、今思い起こしてみれば、2年生のうちは高校生のうちにしかできないその時やりたかったことをやった方が悔いが残らずよかったと思いました。

私の場合勉強ほったらかしすぎですけどねw


372ポイント を手に入れた。

Name: ダッシュ  ..初心者(5,531ポイント)   Date: 2006/12/23(土) 13:54   No:3168     
Title: Re:ただいま帰りました。(雑談)    
C言語は趣味としてもやっていきたいんですが、前にも言ったように友達と計画してることがあるんです。
実をいうとこれは管理人さんがアドバイスしてくれたことが起因してたりします。(ダッシュさんも、パソコン関係詳しくなられるでしょうから、私位の年頃になったら・・・というあれです。)
その友達とは大学でたぶん別れてしまいますが、大学に入ってもこの計画だけは続けていこうと約束しています。ソフトを共同開発するのですが、プログラミングの腕さえあれば、たとえ離れていても開発を進めることは可能でしょうか?(確か、前に管理人さんも開発を持ちかけられていましたよね。あれとかでも、ネット上で進めていくと言うことなんでしょうか?)


157ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(154,652ポイント)   Date: 2006/12/23(土) 14:06   No:3169     
Title: Re:ただいま帰りました。(雑談)    
共同開発するときには必ず「仕様書」が必要になるので、変にリアルで話をしたり電話で話をするよりメールに添付された仕様書に従って作る方が確実ですよ^^

きっぱりモジュールやシステムを分割して作るなら仕様書はいらないかもしれませんが、
モジュールを2人で作るようなときは、関数の受け渡しの形まで詳細に書いた仕様書が必要になってきます。

「ここの関数の引数はdoubleでここがintで、返り値は時間にして・・」とか口頭で言うより、
書き記したものを渡された方が、作りやすいですよね。

そりゃ全体像の話や、こんな感じのシステムを作ろうという話はリアルの方がしやすいと思いますが、その辺は電話でも出来るでしょうし、
遠く離れていても、パソコンでリアルタイムで絵描きながら説明したりできますし、
全然大丈夫ですよ^^

特にお互い共同開発が始めてだったりするのなら余計仕様書が必要です。
仕様書なしに6人でシステム作ってラスト大変な目にあいましたw


2倍のポイントを手に入れた! 576ポイント を手に入れた。

Name: ダッシュ  ..初心者(5,797ポイント)   Date: 2006/12/23(土) 22:09   No:3187     
Title: Re:ただいま帰りました。(雑談)    
そうなんですか!
なんだか共同開発というとどうも話し合う感じが抜けなくて・・・
でも安心しました。これで少しはのんびりやっていけます。一応大学の中盤までには形にしようと言うことになっています。結構大きな作品になりそうなので、高校のうちに仕上げるのはちょっと無理そうです。(管理人さんの手にかかったら速攻かも知れませんが・・・)

そう言えば、大阪行きの日が近づいてきました。それまでには宿題終わらせたいところですが、向こうの古本屋も調べておかなくてはいけません。ファインマン物理学と言うのが欲しいのですが、大阪・京都間で、そういう本(専門書)の強いお店ご存知ないですか?


266ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(155,917ポイント)   Date: 2006/12/23(土) 23:21   No:3190     
Title: Re:ただいま帰りました。(雑談)    
それにしても、大きな計画ですね^^;

えぇと、こんな事をいうとお気を悪くさせてしまうかもしれません・・

水をさすようですが、ダッシュさん自身初めてのソフト作りですよね?

作った経験が無いとわからないことってこの分野にはすごく沢山あるんですよね・・><。私もまだわからない事だらけですが。

最初から大きなものを作ろうとすると大変すぎて挫折してしまいかねないと思いますので、

一番いいのは最初小さなソフトから作っていって、慣れてきてから大掛かりな開発をした方がいいように思いますが・・。

・・というのも私がそれを身を持って体験したので。

共同開発したこと無いのに、ソフトウェアロボット(なんちゃって人工知能)を6人で作ったことあるんですが、これがみんな始めてで大変で大変で・・。

仕様書も作ったことないし、おおざっぱにやったので、それぞれの担当の関数をくっつけるとき修正にものすごい手間がかかってしまいました。

おそらく学校の課題でなかったら投げ出していたと思います。

仕様書の作り方も作っているうちに書き方わかってきますし、そもそもソフト自体作ったことが無いと全体像の詳細がつかめないのではないでしょうか。

・・と夢が膨らんでいるときに現実的な話をしてぶち壊してごめんなさい^^;

別にそれを断念せざるを得ない状況になったからといって借金したり、するわけじゃないでしょうから、

やってみてダメだったねって事からも学ぶことがあるでしょうから、突き進めるだけ突き進んでみるのもありかもしれません。

人にこれはやってはダメだよっていわれるより、自分で一度体験してみた方がよりよくわかったり、間違ったことをしたことから、学ぶよりよい方法も大いにあるでしょう。

特に私なんか参考書全然よまない我流タイプなんで今までものすごい数の間違いをしてきいましたが、

自分で導き出したよりよい方法は、参考書をだらだら読んで得た知識よりよっぽど身によくつきました。

ですから今のうちに小さなソフトをちまちま作ったりして、その計画を目指していってみたりしてみるといいかもしれませんよ^^


660ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(156,162ポイント)   Date: 2006/12/23(土) 23:29   No:3191     
Title: Re:ただいま帰りました。(雑談)    
う、横で人と話しながらうったので読み返してみるとなんともまとまっていないおかしな文章になっている^^;

探してらっしゃるのは古本ですか?

私は古本は見に行かないのでよくわかりません、、ごめんなさい><;

本屋で一番大きいのは紀伊国屋本店じゃないでしょうか?

紀伊国屋って大きな本屋があるじゃないですか。あれの本店が梅田にあります。

ここは日本で2番目に大きな本屋なので、おそらく、今までみた本屋の中で一番大きいのではないでしょうか。

梅田というのは、JR大阪駅の事で、同じ場所を指します。

JR新大阪とJR大阪は違うのでお間違いなく。

大阪駅で紀伊国屋本店はどこにあるか聞けばすぐわかると思います。

参考程度に^^

いつから行かれるんですか?


245ポイント を手に入れた。

Name: ダッシュ  ..初心者(5,940ポイント)   Date: 2006/12/24(日) 00:00   No:3192     
Title: Re:ただいま帰りました。(雑談)    
あ、もちろんいきなりは無理だと思います。チョコチョコ小さいのを作りつつ練習をして最終的に・・・。ってことです。でも学校の宿題で出されるものが、6人がかりであたふたするんですから、大学の中盤で自作ソフトは、やはり無理でしょうか。。。orz

今路線確認してみたら、ちゃんと大阪駅が入ってました。朝早くから出ようと思うので、何時間か遊んでからいけそうです。ちなみに27日出発の予定です。


143ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(156,293ポイント)   Date: 2006/12/24(日) 00:32   No:3194     
Title: Re:ただいま帰りました。(雑談)    
>大学の中盤で自作ソフトは、やはり無理でしょうか。。。orz

全くそんな事無いと思いますよ^^
少なくとも高校のうちからC言語やっているんですもの、向かうとこ敵なしですよw

失敗しても あぁ失敗したね で済ませれる話ですから、また作り直せばいいし、そこで学ぶ教訓もあるし、ドンドン意欲的にあれこれ作ってみて損はないですよ^^

なるほど、27日というと卒論の模擬発表会・・。やばい・・・▄█▀█●


131ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(157,297ポイント)   Date: 2006/12/24(日) 04:41   No:3204     
Title: Re:ただいま帰りました。(雑談)    
そういえば、卒論の発表会にインフルエンザにかかってしまっては大変と思い、
予防注射を受けに行ったのですが、ネットをみてみると・・。

「効果は、だいたい35%」




・・・・・・・・え〜〜〜!!!!!
と言うことは半分以上の人は予防注射を受けていても発症してしまうってことか?!

・・・どこのサイトで調べても似たようなことがかいてありました・・。

うぅ、冬って安心して暮らせないのですね(T_T)

もっと確実な予防注射作れよ・・・。


179ポイント を手に入れた。

Name: ダッシュ  ..初心者(6,298ポイント)   Date: 2006/12/24(日) 09:44   No:3207     
Title: Re:ただいま帰りました。(雑談)    
へぇ。予防注射ってそんなもんなんですか。ちなみに僕は中三の冬、インフルエンザの予防注射をしたのですが、受験前日に「風邪」をひいてしまい、本当に落ちるかと思いました。風邪ひいてると思考停止しちゃいますからね。

>>もっと確実な予防注射作れよ・・・。

僕の夢は予防注射ではないですが、化学系の学部に進んで全てのウイルスに効く薬を開発することです。今までの薬学の考え方を打破した全く新しい薬です。色々調べてはいるのですが、それ研究してるとこあんまりないです・・・。(はぁ、進路どうしよぅ・・・)

とにかく管理人さんも風邪ひかないように頑張ってください。僕はよくダラダラしてたり、逆に張り切りすぎて疲れた時によくなります。ほら、「病は気から」って言いますし。
「絶対そんなもんにはかからん」という気合と、こまめな健康維持してたら免疫力も上がるんじゃないでしょうか。僕はそんな風に考えて乗り切ってます。


358ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(157,476ポイント)   Date: 2006/12/24(日) 12:25   No:3209     
Title: Re:ただいま帰りました。(雑談)    
>、「病は気から」って言いますし。

そうですね、そんなことってホントにありますよね^^

私は進路、情報より物理大好きだったんで、物理コース行きたかったんですけど、将来就職考えたら、物理はダメかな・・と思ってやめました。

一方で心理学学びたかったので、そこでも悩みました^^;

ダッシュさん、今から進路選べるなんていいですね〜^^

私はこのコースに進んでよかったと思ってます☆


179ポイント を手に入れた。

Name: ダッシュ  ..初心者(6,180ポイント)   Date: 2006/12/25(月) 00:52   No:3230     
Title: Re:ただいま帰りました。(雑談)    
>>私はこのコースに進んでよかったと思ってます☆

僕も実は憧れたりします。自由自在にパソ操れるのって凄くカッコいいって思います。今では管理人さんからも何度も励まされたせいもあり、独学ででもなんとか極めてみたいと思っています。それに最先端の研究には絶対不可欠になってくるはずですし。。。シミュレーションとか。。。うわぁ。自分で言っててわくわくする・・・。


118ポイント を落としてしまった。

Name: 管理人 [URL]  ..ハッカー(159,050ポイント)   Date: 2006/12/25(月) 01:31   No:3232     
Title: Re:ただいま帰りました。(雑談)    
あははw
何かC言語を特別なものと勘違いしてませんか?^^
まだ何の知識も付いてない私が言うのもなんですが、私位のスキルでしたらダッシュさんなら数ヶ月もあれば追い抜いてしまうはずですよ^^

それに簡単な放物運動のシュミレーションなんかだったら初めて1ヶ月もすれば出来てしまうはずです☆
バグさんなんて、めっちゃ最近C言語を勉強始められたらしいですが、すでに私と比べて遠い雲の上の存在ですw

私も卒論忙しくなかったら、やりたいこと沢山あるんですが・・。C++やVC、DirectXと勉強予定でやってないことが沢山・・。


185ポイント を手に入れた。

Name: ダッシュ  ..初心者(6,266ポイント)   Date: 2006/12/26(火) 00:34   No:3259     
Title: Re:ただいま帰りました。(雑談)    
僕も時間と戦いつつ、あのHPで勉強中です(こうなりゃ意地です)そこで質問なんですが、HP丸ごとコピーすることって出来ますか?管理人さんがよく勉強していたというC言語入門のページをコピーして大阪でも勉強したいのですが、やり方がさっぱり・・・。

86ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(160,813ポイント)   Date: 2006/12/26(火) 01:33   No:3266     
Title: Re:ただいま帰りました。(雑談)    
リンク先の特定の拡張子のファイルを一括ダウンロードするようなソフトは沢山ありますので、
そういうの使ってみてはいかがでしょうか?

こういうソフトの使い方はネットランナーや、沢山でているパソコン誌見てたらわかるようになりますよ^^

後、実際に出来るかどうか確かめてからそのソフト紹介しますね。


125ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(160,985ポイント)   Date: 2006/12/26(火) 02:09   No:3268     
Title: Re:ただいま帰りました。(雑談)    
う〜ん、以前使っていたソフトの名前を忘れてしまった・・。
新しいパソコンにしてから使ってたソフトの大半は消えてしまったので覚えていません・・。

とりあえず、画像収集ソフトで検索すれば、大量に見つかります。

http://www.vector.co.jp/vpack/filearea/win95/net/www/download/index_002.html

画像だけじゃなく、指定拡張子のファイルをリンクを自動でたどって片っ端からダウンロードしてくれます。

・・あ、それじゃページについてる画像がダウンロードできないのか・・。

もうちょっと考えて見ます。


172ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(161,023ポイント)   Date: 2006/12/26(火) 02:11   No:3269     
Title: Re:ただいま帰りました。(雑談)    
この辺参考になりそうです。

http://www.google.co.jp/search?hl=ja&q=%E3%82%A6%E3%82%A7%E3%83%96%E3%83%9A%E3%83%BC%E3%82%B8%E3%80%80%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89&lr=

みてみてください。


38ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(50,318ポイント)   Date: 2006/12/26(火) 02:33   No:3271     
Title: Re:ただいま帰りました。(雑談)    
 個人的にはWeb Catcherを使ってます。
 これなら簡単に htmlにするだけでなく chmにまでサクっとできるので。


82ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(161,122ポイント)   Date: 2006/12/26(火) 02:53   No:3272     
Title: Re:ただいま帰りました。(雑談)    
おぉ、有料ソフトを使用するとはさすがJustyさん一般人とは違うw
便利そうなソフトですね^^


2ポイント を手に入れた。

Name: Yuki  ..かけだし(1,126ポイント)   Date: 2006/12/26(火) 08:50   No:3275     
Title: Re:ただいま帰りました。(雑談)    
Web巡回ソフトですね。

ネットで公開しているソフトを探すなら、Vector窓の杜がおススメです。
#個人的には窓の杜のほうが好きです。

Vector:http://www.vector.co.jp/vpack/filearea/win/net/www/auto/
窓の杜:http://www.forest.impress.co.jp/lib/inet/websupt/webpilot/

何個か試してみて、自分で使いやすいものを選んでみてください。


115ポイント を手に入れた。

Name: ダッシュ  ..初心者(6,411ポイント)   Date: 2006/12/27(水) 01:01   No:3327     
Title: Re:ただいま帰りました。(雑談)    
う〜む。今日はごたごたしててあまり書き込めませんでした。皆さんが教えてくれたとこ色々と探してみたのですが、なかなか自分にあったのがありませんでした。(なんか申し訳ない。)とりあえず、今回はちまちまコピーしてもって行くことにします。帰ってきたらまた探してみます。

何はともあれ、管理人さん、Justyさん、Yukiさん、ご回答ありがとう御座いました。


93ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(163,473ポイント)   Date: 2006/12/27(水) 01:42   No:3331     
Title: Re:ただいま帰りました。(雑談)    
行ってらっしゃいませ〜^^
28日は京都に私も行くのでひょっとしたらすれ違ってるかもしれませんねw


50ポイント を手に入れた。

Name: ダッシュ  ..初心者(6,576ポイント)   Date: 2006/12/27(水) 07:09   No:3341     
Title: Re:ただいま帰りました。(雑談)    
あ、こっちのスレ見ずに、他のスレで書いてしまった。よし、こっちにも書いとこう。

>>28日は京都に私も行くのでひょっとしたらすれ違ってるかもしれませんねw

28ですか。僕もたぶんその日になりそうです。お互い1目でわかったりして(笑)

それでは本当に行ってきます。


100ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(163,562ポイント)   Date: 2006/12/27(水) 10:18   No:3343     
Title: Re:ただいま帰りました。(雑談)    
京都駅で「あ、ダッシュさんじゃないですか〜。」なんて・・・

なんでやねん(*゜ー゜ノノ゛☆バシ

お気をつけて〜、行ってらっしゃい〜♪


36ポイント を手に入れた。



Name: 困ったさん  ..入門者(4,815ポイント)   Date: 2006/12/24(日) 20:52   No:3215       
Title: 1次元配列について    
1つ目の問題ではみなさん詳しくお答えいただきありがとうございました。では、2つ目の問題についても
おたずねさせて頂きます。問題は

まず1 次元整数型配列(配列名data,要素数は任意)を準備する.キーボードから任意個の整数デ
ータを入力させ,入力されたデータの @最大値,A最小値,B平均,C標準偏差 を求めて画面表
示するプログラムを作成しなさい.ただし,上記の4 つの処理について,それぞれ下記の条件を満た
す関数を作成すること.
@ 最大値: int max( int *, int )
第1 引数: 配列アドレス 第2 引数: データ数 返り値: 最大値
A 最小値: int min( int *, int )
第1 引数: 配列アドレス 第2 引数: データ数 返り値: 最小値
B 平均: float average( int *, int )
第1 引数: 配列アドレス 第2 引数: データ数 返り値: 平均値
C 標準偏差: float std_dev( int *, int )
第1 引数: 配列アドレス 第2 引数: データ数 返り値: 標準偏差

というものです。こちらの問題について少々あつかましいお願いになってしまうんですが、
どなたかにサンプルプログラムを書いていただいてそのプログラムの分からないところについて
質問させていただくという形にはならないでしょうか?正直わかることが無く分からない所だらけなので
一度完成したプログラムを見てみたいと思ったんですがどうでしょうか?あつかましいお願いしてすいません。
よろしくお願いしますm(_ _)m


470ポイント を手に入れた。


Name: バグ  ..上級者(17,415ポイント)   Date: 2006/12/24(日) 21:08   No:3216     
Title: Re:1次元配列について    
:データ数を入力させる。(scanf関数でいけそうですね。)

:で得た数の領域だけint型でメモリを動的に確保する。

とりあえず、ここまで作ってみて下さい。教科書なり参考書なりを読めば必ず載っていますので頑張ってください。

自分でコーディングしなければ、絶対に理解できませんよ。他人のコードを見て分かった気になったとしても、身につかないですから。


145ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(158,238ポイント)   Date: 2006/12/24(日) 22:07   No:3219     
Title: Re:1次元配列について    
>サンプルプログラムを書いていただいてそのプログラムの分からないところについて、質問させていただくという形にはならないでしょうか?

このような勉強スタイルはこれから先、いつも出来るわけじゃないです。

いつも、誰かに完成品を作ってもらってから理解するという勉強スタイルをとっていたのではいつまでたっても自力で書けませんし、いつもそのように丁寧にコードを書いてくれる人がいるとは限りません。

これはコードを書いてあげることが面倒で言っているわけではないんです。質問してくださった日に、全てコードは書いてみました。

1つの関数に付き、4〜5行で実装できるごく基本的な物でした。

前回の質問で関数の使い方について詳しくご説明しましたよね。

厳しいことを言うようですが、説明した文章をしっかり読んでいただいて、次に活かしていただかないと困ったさんの力にならないので。

どうか、自分の力で頑張ってみてください。

まず、複数回入力を受け付ける処理を作ってください。

次に、最大値を求めるプログラムを作ってみましょう。

次に・・

と少しずつ作ってみましょう。そのたびにあっているか、どうしたらいいか聞いてもいいですので、是非一から自分の力でやってみてください。


469ポイント を手に入れた。

Name: 困ったさん  ..入門者(4,841ポイント)   Date: 2006/12/24(日) 22:15   No:3220     
Title: Re:1次元配列について    
そうですよね。どうもすいませんm(_ _)m 自分の考えは浅はかでした。

プログラムの書き始めは

#include<stdio.h>
#define k (3)

int main(void){
int data[k];
int i,j;
for(i = 0 ; i < 3 ; i++)
{
printf("要素を入力 ->");
scanf("%d",&data[i]);
}

という感じでいいんですか?


26ポイント を手に入れた。

Name: box  ..プログラマー(26,495ポイント)   Date: 2006/12/24(日) 22:43   No:3222     
Title: Re:1次元配列について    
> #define k (3)

3は半角にしてください。

> for(i = 0 ; i < 3 ; i++)

せっかくkを#defineしているので、
i < k
とする方がよいでしょう。
そうしておけば、配列の要素数を変更する際、
#defineのところだけを修正すればすみます。

> という感じでいいんですか?

よいと思います。


73ポイント を手に入れた。

Name: 困ったさん  ..入門者(4,859ポイント)   Date: 2006/12/24(日) 23:01   No:3223     
Title: Re:1次元配列について    
3はうっかりミスでした。わかりました。では、入力をしたので次は最大値とかですね。最大値はどうすれば求められるんでしょうか?

18ポイント を手に入れた。

Name: バグ  ..上級者(17,707ポイント)   Date: 2006/12/24(日) 23:06   No:3224     
Title: Re:1次元配列について    
OKです(^-^)
ただ、int型の変数であるjは未使用なので警告が出ると思います。消しておいた方がよいですよ。

次は最大値を求める関数の作成です。

int max(int *pData, int Val)
{
//ここに処理を書き込む
}

最大値の求め方で最も簡単な方法は、全ての組み合わせを調べる方法ですね。

データの個数分だけfor文でループさせ、*pDataと*(pData + n )の値を比較して、大きかった方を最大値格納用の変数に代入すれば、ループを抜けた時に最大値が求められるはずです。


230ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(158,629ポイント)   Date: 2006/12/24(日) 23:29   No:3226     
Title: Re:1次元配列について    
なかなか突っ込んだ解説が出来ずに、すみません。

そうそう、そうやって1つずつ解いていけばいつか必ず完成しますから。

もうちょっといいscanfの作り方を説明します。

こうすれば、入力された個数が判別できます。

入力された回数は不定ですよね?

ですから、何回入力が行われたか数えなければなりません。

EOFというものをご存知でしょうか?ctrl + Zを押すと入力はEOFとなります。

これが入力されるまで格納を続けてみます。

while(scanf("%d",&dat[n])!=EOF)

n++;


これです。scanfで、EOFが入力されたと判定されるまで、nを増加させていきます。

dat配列にいれていくので、要素数nが入力回数となります。

EOFが入力されるとループを抜けます。



とりあえず、書式をフォーマットしたものを示しますので、これにそってやってみてください。

#include <stdio.h>

#include <math.h>

int min(int dat[],int n){
int minium;//最小値を格納する変数

/*ここに最小値を求めるプログラム*/

return minium;
}

int main(){
int n=0,dat[1024];
while(scanf("%d",&dat[n])!=EOF)
n++;
printf("最小値=%d\n",min(dat,n));
return 0;
}


配列を動的に確保したほうがよりよいのでしょうが、難しくなるので、ちょっとそれは完成してから挑戦することにしましょう。


391ポイント を手に入れた。

Name: box  ..プログラマー(26,920ポイント)   Date: 2006/12/24(日) 23:45   No:3227     
Title: Re:1次元配列について    
> 最大値はどうすれば求められるんでしょうか?

プログラムとは関係なしに、手で求める場合を考えてみましょう。

ここに5枚のカードがあって、裏に数字が書いてあります。
最終的に、いちばん大きい数字のカードを箱に入れることにします。
1枚ずつカードをめくって、書いてある数字を順に見ていくと13, 29, 4, 35, 12でした。
さて、どれがいちばん大きい数字でしょうか?

【最大値を求める手順の例】
1)1枚目のカードをめくる。書いてある数字(13)のカードを、とりあえず箱に入れる。
2)2枚目のカードをめくる。書いてある数字(29)は、箱に入っているカードの数字(13)より大きい。
29のカードを箱に入れる。13のカードは箱から出す。
3)3枚目のカードをめくる。書いてある数字(4)は、箱に入っているカードの数字(29)より小さい。
箱の中のカードは29のまま。
4)4枚目のカードをめくる。書いてある数字(35)は、箱に入っているカードの数字(29)より大きい。
35のカードを箱に入れる。29のカードは箱から出す。
5)5枚目のカードをめくる。書いてある数字(12)は、箱に入っているカードの数字(35)より小さい。
箱の中のカードは35のまま。
6)すべてのカードをめくり終えた時点で箱に入っているカードの数字(35)が答え。

この手順をプログラムに落とし込めばよいです。
もちろん、他にも方法はあるでしょう。


425ポイント を手に入れた。

Name: 困ったさん  ..入門者(4,894ポイント)   Date: 2006/12/24(日) 23:53   No:3228     
Title: Re:1次元配列について    
わからないです…。ちょっと考えてみたんですけど最大値が要素の数になっちゃってます。数値の比較はどう書くのですか?

35ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(158,865ポイント)   Date: 2006/12/25(月) 01:27   No:3231     
Title: Re:1次元配列について    
boxさんのおっしゃる説明は非常にわかりやすいと思います。

処理の内容はboxさんがおっしゃった通りに実装するだけで完成します。

よくよく考えて見ましょう。

難しい。最初からどうせ考えてもわからない。となげやりになってしまっていませんか?

数値の比較はどうやるのかとおっしゃっていますが、前述の困ったさんの知識を拝見するとすぐにかけるはずです。

落ち着いて考えてみてください。

今必要なのは「比較の対象 と 最大値を入れる箱」です。つまりカードと箱が必要なんです。

具体的に言えば変数である(最小値を計算するのなら) dat[]とminimumです。

比較はなんら難しくないですよね。

if( x > y )

ですから。

これ以上言ってしまうと答えそのものを書いてしまうことになるので、boxさんのご回答とこの回答がギリギリのヒントです。

boxさんのおっしゃる事を最初からループ文で書くのが難しければ、1つずつ全部書き並べてもいいので、一度書いてみましょう。

ループ文は最初から書かずに、全部手書きしてから作り直すというのも手です。


236ポイント を手に入れた。

Name: 困ったさん  ..初心者(5,147ポイント)   Date: 2006/12/25(月) 13:14   No:3235     
Title: Re:1次元配列について    
途中経過です。

#include<stdio.h>
#define k (3)

int main(void){
int data[k];
int i,max;
for(i=0;i<k;i++)
{
printf("要素を入力 ->");
scanf("%d",&data[i]);
}
max=max(&data[i],k);
printf("最大値は%d\n",max);
return 0;
}

int max(int *pData,int Val){
int max;
max=*pData;
for(Val=1;Val<3;Val++){
if(max< *(pData+Val))
max=*pData+Val;
}
return max;
}

こんな感じになっちゃったんですけど、「関数でないものを呼び出している」ってエラーが出ちゃって
どこがおかしいのでしょうか?


253ポイント を手に入れた。

Name: box  ..プログラマー(27,051ポイント)   Date: 2006/12/25(月) 13:38   No:3236     
Title: Re:1次元配列について    
> max=max(&data[i],k);

変数名maxと関数名maxは、別々の名前にしましょう。

max関数の第1引数が正しくありません。
配列dataのi番目の要素のアドレスではなく、配列data全体を渡しますので、
配列dataの先頭要素のアドレス、つまり&data[0]を渡します。
&data[0]は、単にdataと書くことができます。
配列名は、その配列の先頭要素のアドレスを表わすからです。

また、今回のようにmax関数の定義がmain関数の後ろにある場合、
max関数のプロトタイプ宣言が必要です。

max関数の中身も正しくありませんが、それはまた別途。


131ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(159,220ポイント)   Date: 2006/12/25(月) 13:50   No:3237     
Title: Re:1次元配列について    
前に私がお書きしたフォーマットは見ていただけました?

最大値を求めるプログラムのフォーマットを示します。

#include <stdio.h>

#include <math.h>

int max(int dat[],int n){
int maximum;//最大値を格納する変数

/*ここに最大値を求めるプログラム*/

return maximum;
}

int main(){
int n=0,dat[1024];
while(scanf("%d",&dat[n])!=EOF)
n++;
printf("最大値=%d\n",max(dat,n));
return 0;
}


私が変数名をmaximumとしたのは、関数名maxと競合しないためです。
変数名・関数名を同じ名前にしてはいけません。

>任意個の整数データを入力させ

というからには、入力回数はdefineで決めない方がいいと思います。

配列の考え方をもう少し勉強してみてください。

http://www5c.biglobe.ne.jp/~ecb/c/c00.html

この辺の配列とかを読んでみてください。

datが示すものと、dat[0]が示すものと、&dat[0]がどう違うか、これだけ最小限理解出来るようになってください。

そうすれば、先ほどのような間違いはなくなると思います。


170ポイント を手に入れた。

Name: バグ  ..上級者(17,977ポイント)   Date: 2006/12/25(月) 14:12   No:3239     
Title: Re:1次元配列について    
>>管理人さん
int max(int dat[],int n){
管理人さんはこう記述するんですね〜(^-^)

int max(int *pData,int Val){
私はこう記述するんですよ。

こんなところにも人の癖が出てなんだか楽しいですね。
っとと、スレの邪魔してはマズイですね(^_^;)

私も勉強を始めた頃、配列とポインタについては理屈を並べられてもなかなか理解できなかった覚えがあります。
ただ、C言語でプログラムを組む以上、絶対に避けて通れないものでもありますからねぇ…。
結局は自分でトライ&エラーを繰り返して感覚的に理解するのが結局は一番の近道なんじゃないかな…と思います。

>>困ったさん
困ったさんはやる気はあるみたいですし、↑の理解の為のお手伝いはできると思うので、応援しますよ(^-^)


273ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(159,309ポイント)   Date: 2006/12/25(月) 14:18   No:3241     
Title: Re:1次元配列について    
ポインタを意識せずにプログラムを紹介したい時は、なるべくdat[]このように書くようにしています。
ポインタがまだわからなければ、*datと書いても、これが配列を示すとはピンとこないと思いますので・・。

慣れてきたらバグさんの方がいいと思いますよ。名前からして受け取った配列だってことピンときますしね^^


89ポイント を手に入れた。

Name: 困ったさん  ..初心者(5,087ポイント)   Date: 2006/12/25(月) 23:24   No:3254     
Title: Re:1次元配列について    
管理人さんすいません。要素の数は任意というのは作成者が要素の数を自由に設定していいということなんです。だから今回は3にさせてもらいました。

60ポイント を落としてしまった。

Name: 困ったさん  ..初心者(5,260ポイント)   Date: 2006/12/26(火) 00:49   No:3260     
Title: Re:1次元配列について    
最大値を求めるプログラムだけですけど書いてみました。

#include<stdio.h>
#define k (3)

int max(int*,int);
int main(void){
int data[k];
int i;
for(i=0;i<k;i++)
{
printf("要素を入力 ->");
scanf("%d",&data[i]);
}
printf("最大値は%d\n",max(data,k));
return 0;
}

int max(int *pData,int Val){
int maximum;
maximum=*pData;
for(Val=1;Val<3;Val++){
if(maximum< *(pData+Val))
maximum=*(pData+Val);
}
return maximum;
}

これで一応最大値はもとめられるんですけど大丈夫でしょうか?


173ポイント を手に入れた。

Name: フリオ  ..かけだし(2,244ポイント)   Date: 2006/12/26(火) 01:45   No:3267     
Title: Re:1次元配列について    
 
 コードは、"pre"タグを使って字下げしたほうが見易いです。

 "value"という値がどういう意味を持つのか、なぜその値を引数にして、
関数にわたす必要があるのか、を考えてみてはどうでしょう。
 


76ポイント を手に入れた。

Name: box  ..プログラマー(27,261ポイント)   Date: 2006/12/26(火) 09:35   No:3276     
Title: Re:1次元配列について    
> maximum=*pData;
> for(Val=1;Val<3;Val++){
> if(maximum< *(pData+Val))
> maximum=*(pData+Val);
> }
> return maximum;
> }
>
> これで一応最大値はもとめられるんですけど大丈夫でしょうか?

大丈夫じゃないです。
max関数の第2引数Valについて、main関数からせっかく受け取った値
(今回は3)を、forループの入口で1に初期化してしまっています。
ループ制御用にVal以外の変数を用意して、
その変数が1からVal未満の場合にループを回すようにしてください。

また、上に引用した
*pData
*(pData+Val)
には別の書き方があることも覚えておくとよいでしょう。
*pDataはpData[0]と、
*(pData+Val)はpData[Val]とも書けます。

引数のところの*pDataはpData[0]とは書けません、念のため。


210ポイント を手に入れた。

Name: 困ったさん  ..初心者(5,541ポイント)   Date: 2006/12/26(火) 11:32   No:3279     
Title: Re:1次元配列について    
 
>  コードは、"pre"タグを使って字下げしたほうが見易いです。

字下げはどのように使うのですか?また、それはコメント入力時に使うのですか?

>max関数の第2引数Valについて、main関数からせっかく受け取った値
>(今回は3)を、forループの入口で1に初期化してしまっています。
>ループ制御用にVal以外の変数を用意して、
>その変数が1からVal未満の場合にループを回すようにしてください。

そうですか。Valがデータの数だからメインでいうiと同じものだとか勘違いしてました。
仮にmax関数でnを使った場合、i→n,data→*pData,k→Valになるということでしょうか?
それともこの考えも間違っているのでしょうか??

同じ名前は使わないほうがいいということでしたが、例えば

int max(int *pData,int Val)
int min(int *mData,int m)

というように違う関数でも同じ名前は避けたほうがいいのですか?





281ポイント を手に入れた。

Name: box  ..プログラマー(27,638ポイント)   Date: 2006/12/26(火) 13:17   No:3282     
Title: Re:1次元配列について    
> 字下げはどのように使うのですか?また、それはコメント入力時に使うのですか?

ソースコードを入力する際、

if (n == 10) {
/* 何か */
} else {
/* 別の何か */
}

のようにして、見やすくするための字下げを行なっていますか?
ここの掲示板にソースコードを投稿する場合、コメント入力欄に
ソースの内容を貼り付け、その前後をHTMLタグの一種である
<pre>と</pre>とで囲みます。<と>は、ここでは便宜上
全角を使っていますが、実際は半角です。お間違えなきよう。

> そうですか。Valがデータの数だからメインでいうiと同じものだとか勘違いしてました。
> 仮にmax関数でnを使った場合、i→n,data→*pData,k→Valになるということでしょうか?
> それともこの考えも間違っているのでしょうか??

main関数でmax関数を呼び出しているのは

>printf("最大値は%d\n",max(data,k));

ここです。一方、max関数の本体は

>int max(int *pData,int Val){

で始まっています。呼出し側と本体側で、
引数の数と型が一致していなければなりません。
よって、今回の場合は、
・main関数のdataとmax関数のpData
・main関数のkとmax関数のVal
の2組が対応付いています。

今回、max関数でnという変数を使ったとして、それがmain関数の
何かの変数と対応付くことはありません。

> というように違う関数でも同じ名前は避けたほうがいいのですか?

いえ、そういうことはありません。
int max(int *pData, int Val)
int min(int *pData, int Val)
のように、異なる関数の中で同じ引数名や変数名を使うことができます。
変数名が同じでも、各々は別物です。
上手な例えかどうかはわかりませんが、
1年1組の鈴木さんと1年2組の鈴木さんは、同じ「鈴木」さんでも
クラスが違うので別人であるのと同じことです。


77ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(162,018ポイント)   Date: 2006/12/26(火) 13:29   No:3284     
Title: Re:1次元配列について    
>要素の数は任意というのは作成者が要素の数を自由に設定していいということなんです。だから今回は3にさせてもらいました。

これでは関数で要素数を受け取る意味が無いですがいいんでしょうか・・。
最初からdefineで決まっていて、その値を使うのでしたらこの受け取りは必要なくなってしまいます。
任意の数っていうのはそのときに変わるようにしたほうがいいんじゃないでしょうか。

なお、ポインタを表記するとどうしても難しく思えるので、私がお書きしたフォーマットに従ったほうがわかりやすいように思います・・。

dat[]で受け取ればポインタを意識しなくていいと思いますし、dat[0]とすれば配列の最初を示します。

>> というように違う関数でも同じ名前は避けたほうがいいのですか?

>1年1組の鈴木さんと1年2組の鈴木さんは、同じ「鈴木」さんでも クラスが違うので別人であるのと同じことです。

わかりやすいご説明ですね。
グローバル変数とローカル変数の違いを抑えておいてください。
グローバル変数はプログラムの最初、defineと同じ位置に書いて、どの関数でも宣言なしで使える変数です。
ローカル変数は、関数の中で宣言して使うもので、その関数の中でしか有効ではありません。
なお、関数名と変数名は異なるものにしてください。



524ポイント を手に入れた。

Name: box  ..プログラマー(27,724ポイント)   Date: 2006/12/26(火) 13:51   No:3286     
Title: Re:1次元配列について    
> これでは関数で要素数を受け取る意味が無いですがいいんでしょうか・・。

確かに、要素数を#defineしていたら引数にしなくても
かまわないことは確かですが、まあ今回はよいのではないでしょうか。

それよりも、
○最大値・最小値・平均値・標準偏差の求め方を理解する
○関数の引数の意味合いを理解する
○ローカル変数とグローバル変数の違いを理解する
といったことの方が大切でありましょう。


86ポイント を手に入れた。

Name: 困ったさん  ..初心者(5,733ポイント)   Date: 2006/12/26(火) 14:50   No:3290     
Title: Re:1次元配列について    
> これでは関数で要素数を受け取る意味が無いですがいいんでしょうか・・。

そう言われるとちょっと疑問に感じてきました。もし、入力時に任意個入力する場合は
管理人さんが書いてくれたフォーマット(EOFのやつ)を参考にすればいいんですよね?

平均値は入力したものを足して入力個数で割ればでますよね?最大値を参考に平均値も書いて
みたんですけど、平均値が0しか表示されなくてうまくいきません。平均値は最大値とかとは記述に
大きな違いがありますか?また、標準偏差はどうすれば求められるのですか?


192ポイント を手に入れた。

Name: バグ  ..上級者(18,021ポイント)   Date: 2006/12/26(火) 14:56   No:3291     
Title: Re:1次元配列について    
平均を求める関数はfloat型になっていますよね?
という事は計算する際に、受け取ったint型の変数をfloat型にキャストしてやらなければ、計算ができません。
キャストは分かりますか?


81ポイント を落としてしまった。

Name: box  ..プログラマー(27,817ポイント)   Date: 2006/12/26(火) 14:57   No:3292     
Title: Re:1次元配列について    
> 平均値は入力したものを足して入力個数で割ればでますよね?最大値を参考に平均値も書いて
> みたんですけど、平均値が0しか表示されなくてうまくいきません。平均値は最大値とかとは記述に
> 大きな違いがありますか?また、標準偏差はどうすれば求められるのですか?

平均値を求める関数のコードを見せてください。
平均値の前に、最小値は求まりましたか?
標準偏差の求め方は、検索エンジンなどで調べてみてください。


112ポイント を手に入れた。

Name: 困ったさん  ..初心者(6,022ポイント)   Date: 2006/12/26(火) 16:02   No:3295     
Title: Re:1次元配列について    
> 平均を求める関数はfloat型になっていますよね?
> という事は計算する際に、受け取ったint型の変数をfloat型にキャストしてやらなければ、計算ができません。
> キャストは分かりますか?

int n=10;
float k;
k=(float)n;

みたいな書き方をするやつではなかったでしたっけ?

>平均値を求める関数のコードを見せてください。

最大値のプログラムをいじっただけなので、また例によって大きな間違いがあるんでしょうけど…。

float average(int *pData,int Val){
 int ave,sum,n;

  sum=*pData;

 for(n = 1; n < Val ; n++){

  sum += *(pData + n);

  }

ave = sum/Val;

return ave;

}

今のところこうなっています。

>平均値の前に、最小値は求まりましたか?

最小値は不等号を逆にすればいいんですよね?てか、それで求められました。

ついでに・・・いまいちpreの使い方がわかりません。


289ポイント を手に入れた。

Name: box  ..プログラマー(27,733ポイント)   Date: 2006/12/26(火) 16:17   No:3296     
Title: Re:1次元配列について    
> 今のところこうなっています。

aveとsumをfloat型にしてください。

> ついでに・・・いまいちpreの使い方がわかりません。

ソースコードの行ごとに入れなくてもいいです。
<pre>
ソースコード全体
(何行でも)
</pre>
のように、ソースコード全体という具材を1回だけ
サンドイッチしてください。


84ポイント を落としてしまった。

Name: 困ったさん  ..初心者(6,466ポイント)   Date: 2006/12/26(火) 17:00   No:3298     
Title: Re:1次元配列について    
最大値・最小値・平均値を求めるプログラムはこれで大丈夫ですか?

#include<stdio.h>

#define k (3)

int max(int*,int);
int min(int*,int);
float average(int*,int);

int main(void){
int data[k];
int i;
for(i = 0; i < k; i++){
printf("要素を入力 ->");
scanf("%d",&data[i]);
}
printf("最大値は%d\n",max(data,k));
printf("最小値は%d\n",min(data,k));
printf("平均値は%f\n",average(data,k));
return 0;
}

int max(int *pData,int Val){
int maximum,n;
maximum = *pData;
for(n = 1 ;n < Val; n++){
if(maximum < *(pData+n))
maximum = *(pData+n);
}
return maximum;
}

int min(int *pData ,int Val){
int minimum,n;
minimum = *pData;
for(n = 1; n < Val; n++){
if(minimum > *(pData+n))
minimum = *(pData+n);
}
return minimum;
}

float average(int *pData,int Val){
int n;
float sum,ave;
sum = *pData;
for(n = 1; n < Val; n++){
sum += *(pData + n);
}
ave = sum/Val;
return ave;
}


どうでしょうか?これで大丈夫なら後は標準偏差だけですが、標準偏差についてちょっと調べなければ!です。


2倍のポイントを手に入れた! 444ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(162,513ポイント)   Date: 2006/12/26(火) 17:32   No:3299     
Title: Re:1次元配列について    
標準偏差についてですが、平均を求める関数を利用するとスマートになるかもしれません。

wikiなんかで調べたら標準偏差の求め方はわかります。

よければ今までのプログラムで私が書いたものをみてみてください。考え方は全く同じです。

#include <stdio.h>

#include <math.h>

int min(int dat[],int n){
int minium=dat[0];
for(int i=0;i<n;i++)
if(minium>dat[i])
minium=dat[i];
return minium;
}

int max(int dat[],int n){
int maxium=dat[0];
for(int i=0;i<n;i++)
if(maxium<dat[i])
maxium=dat[i];
return maxium;
}

float average(int dat[],int n){
float ave=0;
for(int i=0;i<n;i++)
ave+=(float)dat[i];
return ave/(float)n;
}

int main(){
int n=0,dat[1024];
while(scanf("%d",&dat[n])!=EOF)
n++;
printf("最小値=%d\n最大値=%d\n平均=%f\n",min(dat,n),max(dat,n),average(dat,n));
return 0;
}
入力が0回の時の条件分岐も余裕があればつけたほうが良いと思います。


5ポイント を手に入れた。

Name: 困ったさん  ..初心者(7,390ポイント)   Date: 2006/12/26(火) 18:02   No:3300     
Title: Re:1次元配列について    
私は結局こういうプログラムになりました。標準偏差は

√((各データの2乗の平均)−(各データの平均の2乗))

で求めていますが式は合っているのでしょうか?

#include<stdio.h>

#include<math.h>
#define k (3)

int max(int*,int);
int min(int*,int);
float average(int*,int);
float std_dev(int*,int);

int main(void){
int data[k];
int i;
for(i = 0; i < k; i++)
{
printf("要素を入力 ->");
scanf("%d",&data[i]);
}
printf("最大値は%d\n",max(data,k));
printf("最小値は%d\n",min(data,k));
printf("平均値は%f\n",average(data,k));
printf("標準偏差は%f\n",std_dev(data,k));
return 0;
}

int max(int *pData,int Val){
int maximum,n;
maximum = *pData;
for(n = 1 ;n < Val; n++){
if(maximum < *(pData+n))
maximum = *(pData+n);
}
return maximum;
}

int min(int *pData ,int Val){
int minimum,n;
minimum = *pData;
for(n = 1; n < Val; n++){
if(minimum > *(pData+n))
minimum = *(pData+n);
}
return minimum;
}

float average(int *pData,int Val){
float ave,sum;
int n;
sum = *pData;
for(n = 1; n < Val; n++){
sum += *(pData + n);
}
ave=sum/Val;
return ave;
}

float std_dev(int *pData,int Val){
float sigma,dat,sum,ave;
int n;
sum = *pData;
for(n = 1; n < Val; n++){
sum += *(pData + n);
}
ave = sum/Val;
dat = pow(*pData,2);
for(n = 1; n < Val ; n++){
dat += pow(*(pData + n),2);
}
sigma = sqrt((dat/Val) - pow(ave,2));
return sigma;
}


これで完成といえるのなら、入力個数を任意にしたり、個数が0個の時のプログラムも考えてみたいと思います。あ、平均値や標準偏差のところでfloatにキャストしてないんですけど、キャストしないと正しい結果はえられないですよね?
ところで管理人さん。管理人さんのフォーマットは入力時にprintfが使われてなくて何も表示されない状態で入力待ちになっていますよね?これを例えば「要素を入力(C-zで入力終了)->」と表示して入力待ちにしたい場合はどう記述すればよいのでしょうか?ちょっとやってみたんですけど,どうにも正しい表示が行なわれなくて・・・。


924ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(162,605ポイント)   Date: 2006/12/26(火) 18:08   No:3301     
Title: Re:1次元配列について    
ただ前に書いたらいいだけではなくてですか?

printf("要素を入力(C-zで入力終了)-> ");

while(scanf("%d",&dat[n])!=EOF){
n++;
}


ループさせて毎回書きたいのでしたらprintf文をループの中にも書いていただけたら毎回表示されます。


92ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(162,541ポイント)   Date: 2006/12/26(火) 18:10   No:3302     
Title: Re:1次元配列について    
後者判定したいなら
	int n=-1,dat[1024];

do{
n++;
printf("input ->");
}while(scanf("%d",&dat[n])!=EOF);


このようにかけるでしょう。


64ポイント を落としてしまった。

Name: 管理人 [URL]  ..ハッカー(162,614ポイント)   Date: 2006/12/26(火) 18:12   No:3303     
Title: Re:1次元配列について    
実行例
input ->1

input ->2
input ->3
input ->4
input ->5
input ->6
input ->^Z
最小値=1
最大値=6
平均=3.500000


73ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(162,749ポイント)   Date: 2006/12/26(火) 18:16   No:3305     
Title: Re:1次元配列について    
前にも言った事と重複しますが、pow関数に渡す引数の型に注目してください。

double pow(double x, double y);

float powf(float x, float y);

long double powl(long double x, long double y);

pow関数を使うにはdoubleで渡す必要があり、floatで渡すならpowf、int型で渡す関数はないので、

2は任意の型に変換しましょう。


135ポイント を手に入れた。

Name: 困ったさん  ..初心者(7,582ポイント)   Date: 2006/12/26(火) 18:28   No:3307     
Title: Re:1次元配列について    
> pow関数を使うにはdoubleで渡す必要があり、floatで渡すならpowf、int型で渡す関数はないので、

powやsqrtなどは引数の型によって記述が少し変わるんですね。これはmath.hを使う関数なら共通して
言える事なのですか?

> ループさせて毎回書きたいのでしたらprintf文をループの中にも書いていただけたら毎回表示されます。

すいません。ちょっとした記述ミスでした({}の付け忘れ)・・・。ちゃんとできました。
ありがとうございますm(_ _)m


2倍のポイントを手に入れた! 192ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(162,857ポイント)   Date: 2006/12/26(火) 19:50   No:3309     
Title: Re:1次元配列について    
関数と言うものは渡す型と受け取る方は同じでないといけません。
intで受け取る関数なのにdoubleで渡してはいけませんし、このことはどの関数でも共通して言えることです。

manpageなどみてください。

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/pow.3.html

関数には全て型があり、その仕様がちゃんとかかれていますので、これにそってください。

名前が変わることについても別にmathに限ったことでは無いと思います。
標準関数については、検索すれば見れますので一度確認してみてはいかがでしょうか。


108ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(162,997ポイント)   Date: 2006/12/26(火) 19:55   No:3310     
Title: Re:1次元配列について    
例えば、引数の数や型がかわると

scanf
int scanf(const char *format, ...)
scanf( ... ) は fscanf(stdin, ... ) と同じである.

fscanf
int fscanf(FILE *stream, const char *format, ...)
出力フォーマット format に従って stream から読み込む.

sscanf
int sscanf(char *s, const char *format, ...)
入力文字列が文字列 s から取られる以外は scanf と同じ.

似たような処理でもこのように名前も変わります。
名前が1文字でも違えば全く違う関数と同じ事なので、特に意識する必要はないかと思いますが。


140ポイント を手に入れた。

Name: 困ったさん  ..初心者(7,621ポイント)   Date: 2006/12/26(火) 20:15   No:3311     
Title: Re:1次元配列について    
理解を完璧にするには時間が少しかかりそうですけど、ちゃんと勉強してくだらないことで質問しないようにしたいです。
ありがとうございましたm(__)m


39ポイント を手に入れた。

Name: box  ..プログラマー(27,783ポイント)   Date: 2006/12/26(火) 20:19   No:3312     
Title: Re:1次元配列について    
> 最大値・最小値・平均値を求めるプログラムはこれで大丈夫ですか?

正しいプログラムの一例であるといえます。
一例といったのは、他にもいろいろな書き方があるからです。


50ポイント を手に入れた。

Name: box  ..プログラマー(27,891ポイント)   Date: 2006/12/26(火) 20:35   No:3313     
Title: Re:1次元配列について    
> 私は結局こういうプログラムになりました。標準偏差は

std_dev関数で、データの平均値を求める際は
average関数の戻り値を利用するとよいでしょう。
同じロジックを複数回書いてバグを発生させるより、
既存のロジックを使う方が安上がりです。

> キャストしないと正しい結果はえられないですよね?

float型のsumにint型の*pDataを代入する際、
自動的に型変換を行ないます。
sum = *pData;
と書いても
sum = (float) *pData;
と書いても同じです。


108ポイント を手に入れた。

Name: 困ったさん  ..初心者(7,818ポイント)   Date: 2006/12/26(火) 23:17   No:3317     
Title: Re:1次元配列について    
なんか本当にプログラムが出来上がったのが信じられないです。最初はこんなのわかんないよ〜って感じで丸投げ投稿してたのに、少しずつ諦めずにやったら完成できちゃいました。これもみなさんが飽きずにどんなくだらないことにも答えてくれたおかげです。本当にありがとうございましたm(__)m このトピもすごく長くなってしまいましたね。その証拠にみなさんみたく答える側じゃないのに質問だけですごくポイントが貯まっちゃいました。なんかすいません…。
とにかくみなさん長いことお付き合いくださいましてありがとうございました。


197ポイント を手に入れた。

Name: フリオ  ..かけだし(2,289ポイント)   Date: 2006/12/26(火) 23:28   No:3319     
Title: Re:1次元配列について    
 
 "sqrtf" "sqrtl""powf""powl"が標準関数としてサポートされるのは C99 からで、
それ以前はあくまで各コンパイラの独自仕様になりますから使用する際には、
注意が必要です。
 


45ポイント を手に入れた。

Name: box  ..プログラマー(28,439ポイント)   Date: 2006/12/26(火) 23:32   No:3320     
Title: Re:1次元配列について    
人が書いたコードを単に読むだけではなくて、
ご自分で実際に書いてみる方が理解が進むことを
実感できたのでしたら、よかったです。


44ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(163,200ポイント)   Date: 2006/12/27(水) 00:22   No:3323     
Title: Re:1次元配列について    
少しずつやっていけば必ず出来ますよ♪
これからも頑張ってくださいね^^


27ポイント を手に入れた。



Name: たのもー  ..ぴよぴよ(64ポイント)   Date: 2006/12/26(火) 01:07   No:3261       
Title: 勉強以前に・・・    
私はC言語を勉強しはじめたばっかりですが、
最近C言語で何ができるのだろうと思いました。
ゲームがつくれることは知っていますがそれ以外に何ができますか?
教えてください。
あと、C言語以外の言語では何ができるのですか?
併せて教えてください。お願いします。


64ポイント を手に入れた。


Name: Justy  ..熟練のプログラマー(50,236ポイント)   Date: 2006/12/26(火) 01:22   No:3263     
Title: Re:勉強以前に・・・    
ゲームがつくれることは知っていますがそれ以外に何ができますか?
 対象のOS上で表現可能なことなら何でもできるかと。
 グラフィック、ユーティリティ、サウンド、データベース、エデュケーションなどなど。


あと、C言語以外の言語では何ができるのですか?
 主だった言語では、できることは大体同じです。
 せいぜい言語によって実装しやすい・しにくいなど、扱いやすい・扱いにくいなどの得手不得手があることくらいです。


239ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(160,688ポイント)   Date: 2006/12/26(火) 01:30   No:3265     
Title: Re:勉強以前に・・・    
たのもーさん、こんにちは^^

おぉ、それはまさしく私が初心の頃抱いたことを同じです!
時間があれば詳しく私の実体験を含めてご説明したいところですが、時間がなく、残念です。

とりあえず、Windows(windowsアプリーケーション)自体C言語で出来ています。
つまりウィンドウズ上で動作するアプリなら何でも作れます。

何でもと言いすぎると厳密な訂正を食らってしまうかもしれませんが、
最初のうちは何でも出来ると思って間違いないです。

とりあえず、私がクイックソート解説アプリ作っているのでそんなものも簡単に作れるんだと言うこと参考にみてみてください。

ワードやパワーポイントのようなオフィスのソフトは使ったことありますか?
あんなソフトも作れますよ。
windowsアプリケーションを学べばウィンドウズで動作するものなんでもできます。
味気ないコンソール画面にprintfしか出力が出来ず、面白くないと思っていたC言語も、
そんなウィンドウズアプリを作りだすと本当に面白くなってきます。

単にコンソールと馬鹿にしてよく言われるものですが、実は華やかに彩ることも出来、
バグさん作成のゲームはあれはコンソール画面でできています。
HPトップのダウンロードからダウンロードできるので一度使ってみてください。


とにかく何でも出来ます!特に「具体的にこんなの作れるの?」と聞いてくださればお答えしますよ!


526ポイント を手に入れた。

Name: helloworld  ..ぴよぴよ(216ポイント)   Date: 2006/12/26(火) 06:59   No:3273     
Title: Re:勉強以前に・・・    
>  対象のOS上で表現可能なことなら何でもできるかと。
>  グラフィック、ユーティリティ、サウンド、データベース、エデュケーションなどなど。

私もC言語初心者なのでC言語で何ができるかとても興味があります。
  特にグラフィック、データベース、ネットワーク等に興味を持っています。
  これらの事が書かれている書籍等があれば教えていただきたいです。
  よろしくお願いします。


102ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(162,508ポイント)   Date: 2006/12/26(火) 13:40   No:3285     
Title: Re:勉強以前に・・・    
とりあえず大きな本屋にいけば、プログラミングのコーナーにわんさかこんな本ありますよ。

私は使いこなしている範囲が狭いので狭い範囲でしかご紹介出来ませんが、

特に私が普段紹介しているのはDXライブラリで、

http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html

ここに書かれている関数を使ってプログラムします。

小規模通信も出来るのでチャットソフトもこれで作りました。

グラフィックも上のサイトのように2Dなら何でも出来ます。

3Dで表現しようとするとOpenGLやDirect3Dのようなライブラリが必要になってくると思います。

ただサーバーを使ったプログラムを組んだことが無いので、(2人でゲームが出来る位の小規模なものは作りましたが)大規模オンラインゲームを作るようなプログラムは作ったことありませんがもちろん出来ます。

そのような分野の書籍をご紹介すると、その実装方法やプログラムの内容が書かれている書籍の紹介になってしまうので、
プログラミング経験や専門知識が無いとちょっと難しいと思います。

大まかに全体像がかかれている書籍などがあればいいのでしょうけど、そういうのは雑誌とかで発行されていそうですね。

実際にウィンドウズアプリなど色々作ってらっしゃる方に聞けばもっとよくわかる説明が得られるかもしれません。


490ポイント を手に入れた。

Name: helloworld  ..ぴよぴよ(238ポイント)   Date: 2006/12/26(火) 15:13   No:3293     
Title: Re:勉強以前に・・・    
HPの紹介ありがとうございました。
HPにのっているようなライブラリを組み合わせて
システムを作っていくんですね。
マスターするまで時間がかかりそうですががんばって
いきたいと思います。


22ポイント を手に入れた。

Name: たのもー  ..ぴよぴよ(130ポイント)   Date: 2006/12/26(火) 18:25   No:3306 解決!     
Title: Re:勉強以前に・・・    
皆さん、早い回答や質問の拡大ありがとうございました。
ほんと感謝、感謝です(^-^)
また質問ができたときもよろしくお願いしますm(_ _)m


66ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(163,093ポイント)   Date: 2006/12/27(水) 00:12   No:3321     
Title: Re:勉強以前に・・・    
はい、プログラムの醍醐味がわかれば、テレビゲームや漫画を読んでいる時間をおしんでプログラミングがしたくてしかたなくなるはずですよ♪

これからもつまったり壁にぶつかったらいつでも聞いてください☆


96ポイント を手に入れた。



Name: 初心者  ..入門者(4,381ポイント)   Date: 2006/12/25(月) 17:28   No:3242       
Title: C言語の種類について    
C言語をこれから勉強しようと思っているのですがC言語の種類がたくさんあり
どのような順序で勉強すればいいのかわかりません。以下の言語について役割と
勉強順序を教えていただければと思います。
C
C++
C#
visual C#
visual c++
visual c++ .net
visual c# .net
他にもC言語ベースの言語があれば教えてください


82ポイント を手に入れた。


Name: 管理人 [URL]  ..ハッカー(159,749ポイント)   Date: 2006/12/25(月) 17:52   No:3243     
Title: Re:C言語の種類について    
初心者さん、こんにちは^^

これからC言語の勉強ですか!
そんな中こんなコアなサイトを見つけていただきありがとうございます^^

まず、最初にお願いが・・。
「初心者」さんのお名前は既に他の方がつかっていらっしゃるので、他のお名前を使っていただけないでしょうか?
すみません><

では、回答です。

まず、最初に学ぶべきものは「C」です。「C++」から勉強したって人もいますけど、
やはりCが基本です。

C#やVC++などはもっと後で学ぶ分野ですので、とりあえず最初の2つについてご説明します。

「C」とはCに関する分野の基礎となるものです。
C++というのはオブジェクト指向という概念を取り入れた言語で・・・って言っても難しいですよね。
うぅん、簡単に言えば、よりソフトウェア開発を研究して出来た言語とでもいいましょうか、Cをより拡張して出来た言語です。
ですのでCが基本となっています。

とりあえず、概念ばかり聞いていてもピンとこないでしょうから、まず簡単なコードを書いてコンパイルしてみてください。コンパイルというのは、書いたプログラムの文章を機械語に変換して実行できる形式のファイルを作ることです。

家でCを書く環境を作るには
・コンパイラ
・環境変数の設定
・エディタ
が必要です。

コンパイラはこの辺を参考にしてください。

http://homepage3.nifty.com/mmgames/c_guide/p_compiler.html

エディタはメモ帳でも出来ますが、秀丸やStareditなど、プログラムを書くためのソフトを使った方がよいでしょう。
両者ともぐぐればすぐでてきます。

頑張ってください。


440ポイント を手に入れた。

Name: バグ  ..上級者(17,999ポイント)   Date: 2006/12/25(月) 18:05   No:3244     
Title: Re:C言語の種類について    
あ、VC++、VC#なんかは開発環境の名前であって、言語の種類ではありませんよ(^-^)

22ポイント を手に入れた。

Name: keichan  ..中級者(9,151ポイント)   Date: 2006/12/25(月) 18:13   No:3245     
Title: Re:C言語の種類について    
先頭に visual がついているものは windows OS限定の開発プラットフォームになります。
"言語"を勉強なさるのであれば visual が付いていない"言語"から始められることをお勧めします。

また、勉強順序についてですが、個人的にはどれから始めてもそんなに変わりはないかな。と思います。
Cから始めるもよし、C++からでも、C#からでも。

やってることは一緒でも書き方が違ってくる。という解釈で大体okだと思いますので。
(C#は大分見た目違いますが、根本は同じ)

しかしC#に関しては、.NET Frameworkがインストールされている必要があるので
現状ではwindowsでしか開発することができません。

お手持ちのマシンがwindows OS以外であれば選択肢はCかC++しかありません。

最後に各言語における役割を説明します:
といってもこの言語はこう使う!というのは規定されているわけではありません。
成果物に要求される度合い/プラットフォームによって使い分ける。というのが"仕事"上での振り分け方になります。
ゲーム等の高負荷の中でパフォーマンスを出さないといけないような開発ではCやC++が、
豊潤なリソースと短い納期な場合はC#、Visual Basic等

プログラム言語というのは基本的に出来ないことがある言語はない。
と思っていただいて結構です(本当はそんなことありませんが、それはある程度プログラムに慣れてくるまでは必要とされない)


490ポイント を手に入れた。

Name: helloworld  ..ぴよぴよ(12ポイント)   Date: 2006/12/25(月) 18:14   No:3246 解決!     
Title: Re:C言語の種類について    
ご回答ありがとうございました。
とりあえずC→C++の順で勉強していこうと思います。
C++まで勉強し終わったら次に勉強する分野を質問したいと
思いますのでその折はよろしくお願いします。


12ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(160,044ポイント)   Date: 2006/12/25(月) 18:59   No:3247     
Title: Re:C言語の種類について    
公式HPによると
Visual C++ =
ネイティブコードとマネージコードの融合による Visual C++。
Visual C++ は、C++ 開発言語を使用して Windows ネイティブなコードと、.NET Framework ベースのマネージコードでのアプリケーション開発を促進します。

とあります。何故VisualStudioの事をVC++というんでしょうね。

・・おそらく質問者さんの思っていらっしゃるVC++はウィンドウズアプリケーションや特定のライブラリを使用するようなプログラムする時に使うものという感じだと思います。


>C++まで勉強し終わったら次に勉強する分野を質問したいと

はい、またいつでもお越しください。とりあえずC、C++を全て勉強し終わるのはかなり時間がかかると思いますし、その間に付いた知識で次に自分が何を学ぶべきか解ってくるはずです。

頑張ってください☆


295ポイント を手に入れた。

Name: GPGA  ..上級者(16,461ポイント)   Date: 2006/12/25(月) 19:31   No:3248     
Title: Re:C言語の種類について    
helloworldさん

> 他にもC言語ベースの言語があれば教えてください
Cω(シー・オメガ)という言語が一応存在しています。


管理人さん

> 何故VisualStudioの事をVC++というんでしょうね。
「Visual Studio」はVC++、VB、VJ#、VC#の総称の事をいいます。

VC++6.0までは、「Visual C++ 6.0」「Visual Basic 6.0」というように
一つ一つの製品でした。

VS2002になって、全てを統合しようということで、.NETというものが
現れました。
そのときに、いままでは個別に「Visual C++」などとなっていたものが
「Visual Studio .NET 2002」の中の「C++」というように変更されたのです。


つまるところ、昔の言い方をそのまま使っているだけです。
VSの中のC++っていう言い方も長いですしね。

あんまり自身ないので、ちょっと違っているかもしれません。
もし私の発言に間違っている部分がありましたら、ご指摘願います。


261ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(49,382ポイント)   Date: 2006/12/25(月) 19:49   No:3249     
Title: Re:C言語の種類について    
あんまり自身ないので
 だいたいそんな感じでしたね。
 Visual Studio 6.0の中に Visual InterDev / Visual J++で IDEが1つ、Visual Basic / Visual C++でそれぞれ1つずつ IDEがあって計3つの IDEが共存してました。

 これを .Net2002で1つの IDEにした、と。


159ポイント を手に入れた。

Name: helloworld  ..ぴよぴよ(114ポイント)   Date: 2006/12/25(月) 22:18   No:3252     
Title: Re:C言語の種類について    

> ・・おそらく質問者さんの思っていらっしゃるVC++はウィンドウズアプリケーションや特定のライブラリを使用するようなプログラムする時に使うものという感じだと思います。

その通りです。VC++は画面を作成するときに利用するライブラリだと思っていました。
では画面を作成したりDBの処理を行うようなライブラリ(javaのSWINGやJDBCのようなもの)はあるのでしょうか?また、もしあるとしたら参考になる良い書籍を紹介していただければ幸いです。



102ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(161,494ポイント)   Date: 2006/12/26(火) 13:21   No:3283     
Title: Re:C言語の種類について    
なるほど。GPGAさん、Justyさん、ありがとうございます。

今まで微妙に突っかかっていたものが綺麗に取れました^^

helloworldさん、画面を作成したり・・というのはウィンドウズプログラミングって言うことでしょうか。

書籍は存じませんが、ネット上で色々勉強も出来るものですよ。

ネットでちょろっと導入を覚えてから自分で本屋に行って実際に読んで見るとよりよいかもしれません。


2倍のポイントを手に入れた! 372ポイント を手に入れた。

Name: Yuki  ..かけだし(1,286ポイント)   Date: 2006/12/26(火) 14:26   No:3289     
Title: Re:C言語の種類について    
画面を作成、DBを操作するにあたり、C++の知識も必要になってきます。
その前に、C(特にポインタ)の知識を身に着けておいたほうが良いかと思われます。

もしJavaの経験がおありでしたら、CをすっとばしてC++やC#から勉強するというのも
アリかもしれません。

自分はCから勉強した(そおいう時代でした)のでそのほうがスムーズに理解できた感はあります。



56ポイント を手に入れた。

Name: helloworld  ..ぴよぴよ(293ポイント)   Date: 2006/12/26(火) 15:29   No:3294     
Title: Re:C言語の種類について    
みなさんご回答ありがとうございました。
僕も早く皆さんのように知識を身につけて人に教えることができるような
技術者になれるようがんばっていきたいと思います。
ありがとうございました。


55ポイント を手に入れた。



Name:  ..ぴよぴよ(395ポイント)   Date: 2006/12/25(月) 23:35   No:3256       
Title: 関数の課題    
学校の課題で
px,py,pzが指す三つの浮動小数点(double)数値が*px<=*py<=*pzと昇順になるようにソートする関数を作成しましょう。
という問題をだされました。が、いまいち解き方がわかりません。。

昇順という言葉の意味がわかってないためどう手をつければよいか・・・。
どなたか模範解答を教えてくれませんか?




104ポイント を手に入れた。


Name: 管理人 [URL]  ..ハッカー(160,162ポイント)   Date: 2006/12/26(火) 01:24   No:3264     
Title: Re:関数の課題    
とりあえず、昇順という意味は
小さい数から大きな数へ並べることです。
日本語は辞書で調べられます。
http://dictionary.goo.ne.jp/search.php?MT=%BE%BA%BD%E7&search_history=&kind=&kwassist=0&mode=0&jn.x=12&jn.y=13

とりあえず、ご自分で調べられるだけ頑張って調べ、プログラムを組んでみましょう。


118ポイント を手に入れた。

Name: box  ..プログラマー(27,561ポイント)   Date: 2006/12/26(火) 09:44   No:3278     
Title: Re:関数の課題    
> px,py,pzが指す三つの浮動小数点(double)数値が*px<=*py<=*pzと昇順になるようにソートする関数を作成しましょう。

まずは、プログラムと関係なしに、手で求めることを考えてみましょう。
3つの浮動小数点数を、順に3.0, 1.0, 2.0とします。
これらを昇順に(小さい値が先頭にくるように)並べるには、
どういう手順を踏むでしょうか?

【手順の例】
1)1個目(3.0)と2個目(1.0)を比べる。
1個目の方が大きいので、入れ替える。その結果、1.0, 3.0, 2.0の順になる。

2)1個目(1.0)と3個目(2.0)を比べる
1個目の方が小さいので、入れ替えない。1.0, 3.0, 2.0の順のまま。

3)2個目(3.0)と3個目(2.0)を比べる。
2個目の方が大きいので、入れ替える。その結果、1.0, 2.0, 3.0の順になる。

4)これ以上比べる必要がなくなったので、結果を出力する。

上記の手順を、ソースコードに落とし込んでみてください。


300ポイント を手に入れた。



Name: meigin  ..入門者(4,802ポイント)   Date: 2006/12/24(日) 21:39   No:3217       
Title: クラスのこと    
こんにちは

取りあえずクラスを使っています。

データーを保持するクラスAをB,C,Dに継承します。
EクラスにAのポインタを保持して、B,C,Dのアドレスを渡します。

この方法ではB,C,Dそれぞれにデーターが保持されてしまいます。

データーを1つにして、B,C,Dを入れ替える方法はないんでしょうか?

Aは画像の管理です。

B,C,Dは表示のクラスです。
(マップチップの並べ方が違い、座標修正もここで行っています)

Eは、操作のクラスです。
(マウス等)

何か方法がありましたら教えて下さると嬉しいです。
お願いします。


229ポイント を手に入れた。


Name: バグ  ..上級者(17,477ポイント)   Date: 2006/12/24(日) 22:21   No:3221     
Title: Re:クラスのこと    
AのメンバにB、C、Dのポインタを持たせてしまうのはマズイのでしょうか?
E.Aー>B
E.Aー>C
E.Aー>D

これならデータは1つになるような気がしますが…


62ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(49,223ポイント)   Date: 2006/12/24(日) 23:17   No:3225     
Title: Re:クラスのこと    
@meiginさん
 継承は基本的に B is A のとき、Aを継承して Bを作るものです。
 Aと B〜Dの関係を見る限り、このケースでは継承はふさわしくないでしょう。

 となると、B/C/Dに Aへのポインタを持たせるか、描画を行う抽象クラス Fを作って、Fが Aへのポインタを持ち、B/C/Dは Fを継承させて作る方法がいいのではないかと思います。
 で、Eは Fの持つ描画関数を使って描画する、と。


@バグさん
AのメンバにB、C、Dのポインタを持たせてしまうのはマズイのでしょうか?
 設計上、ちょっとどうでしょう。
 今後、B/C/Dのお仲間が増えたときにAにメンバ変数を増やさなければならない(ひょっとすると内部処理も)となるとAの独立性が失われていきます。

 もし、この方法をとるのであればAに1つの描画メンバ関数を追加します。このメンバ関数は引数にクラスGへのポインタ(ないしは参照)をとり、このGを使って描画を行います。
 クラスGは描画の(Aへのポインタないしは参照を引数にとる)純粋仮想関数を持つインターフェースクラスとし、B/C/DはGを継承して描画の詳細を実装するようにすれば、今後お仲間が増えてもAのクラスの変更は原則的に必要がなくなります。


 他にもテンプレートを使った手法とかいろいろありますが、実際どの方法がベストかは、まだちょっとこれだけの情報では判断しにくい、ってのが正直なところです・・・。


414ポイント を手に入れた。

Name: meigin [URL]  ..入門者(4,996ポイント)   Date: 2006/12/25(月) 00:23   No:3229     
Title: Re:クラスのこと    
バクさん

AにBのポインタを持たせると、
BはAのデーターをどうやって使えばいいのか解らないので
それが出来ませんでした。


Justyさん

ソースを公開しているのですが、多すぎても返って解りづらいような。
C Dに当たるクラスは入ってないです。
マップチップの並べ方が違い、6方向に対応しています。
マップが半分ずれて表示され、移動経路が6方向になります。

純仮想関数のクラスに継承しているのがBに当たります。


設計ミスをしているので、作り直そうと思っているのです。
そこで、出来なかったことも聞いてみようかなとなったわけです。
多重継承している上、意味のない継承も……。


寝ますので、明日試してみます。
色々ありがとう御座います。


194ポイント を手に入れた。

Name: バグ  ..上級者(17,806ポイント)   Date: 2006/12/25(月) 06:48   No:3233     
Title: Re:クラスのこと    
かなりゴチャゴチャになりそうだし、汎用性のないスマートなやり方ではないので、あまりオススメではありませんが…(;^_^A

BにAのデータを使わせるだけならば、Aの中にBを初期化するメンバ関数を追加してはどうでしょうか?

うーん、自分で書いておきながら、なんて苦し紛れな方法なんだろう…と思ってしまいましたよ(;´Д`)


99ポイント を手に入れた。

Name: バグ  ..上級者(17,704ポイント)   Date: 2006/12/25(月) 06:54   No:3234     
Title: Re:クラスのこと    
今、読み返すとムチャクチャな事を書いてしまった…(;´Д`)
Justyさんの言われるように、B、C、DにAへのポインタを持たせるのがベストではないでしょうか?
1つ前の私の書き込みは無視しておいてください…m(__)m


102ポイント を落としてしまった。

Name: meigin  ..初心者(5,158ポイント)   Date: 2006/12/25(月) 22:29   No:3253     
Title: Re:クラスのこと    
Justyさん バクさん

ありがとう御座います。
上手く行きました。

思っていたより簡単でした。
継承をポインタに変えるだけで上手く行きました。

問題点も解決出来て棚からぼた餅のような嬉しさです。


継承って、思っていたのと感じが違うんですね。
AのクラスのデーターをB→C→Dと渡していけるのかと思っていたのです。
B=Cとしたら当然エラーでした。

あはは……。


162ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(49,114ポイント)   Date: 2006/12/25(月) 23:24   No:3255     
Title: Re:クラスのこと    
ソースを公開しているのですが、多すぎても返って解りづらいような
 それほど複雑な構成という訳でもなさそうなので、doxygenでパースしつつちょっと見てみました。
 継承関係からするとAは ClFightPlaceクラスで、Bは ClFourDirectionsクラスで、Cに相当するのがまだ見ぬ ClSixDirections(仮)ってところでしょうか。


上手く行きました
 それは何よりです。


継承って、思っていたのと感じが違うんですね
 継承と内包をどう使い分ければいいのか、内包も実体を持てばいいのかポインタで持てばいいのか。
 それがオブジェクト指向言語の最初の壁ですよね。


268ポイント を落としてしまった。

Name: meigin  ..初心者(5,197ポイント)   Date: 2006/12/26(火) 00:26   No:3257     
Title: Re:クラスのこと    
Justyさん

Aに当たるのはもう一つ上です。
ClFightPlaceクラスは、抽象クラスのFになりました。

名前空間を使って関数をまとめた方が楽な様な気がするのですが、
クラスの方が良いのかな?

オブジェクト指向って難しいですね。
継承って使い所があんまりない様な……。
内包は継承と殆ど同じですよね?
(メンバ変数になるだけですよね)

うーん。


39ポイント を手に入れた。

Name: Justy  ..熟練のプログラマー(49,997ポイント)   Date: 2006/12/26(火) 01:13   No:3262     
Title: Re:クラスのこと    
Aに当たるのはもう一つ上です
 あ、そうか。Aは画像を扱うクラスでしたよね。


継承って使い所があんまりない様な……。
 んー、作る物によりけりですなところはあります。
 例えば今回の kageSだと、売り買いできる物として武器・防具・アイテムがありますよね?
 これらのクラス全てに価格というメンバ変数がありますが、「売り買い可能なものというクラス」を基底として名前とか価格をメンバ変数を入れておけば、将来お店クラスを作ったときに武器とか防具とかの生々しいクラスを個別に扱わなくても「売り買い可能なもの」クラスだけを相手にすれば売買できるようになります。

 その他インターフェースの為に継承したり、実装を引き継ぎたい為に継承したりと結構使いどころはあると思います。



内包は継承と殆ど同じですよね?
 内包という言い方がまずかったかもしれませんが、メンバ関数になるのと継承するのとでは全然違います。

 継承する場合(主に public継承)は、元のクラスの特殊版を作っていく感覚になります(特化)。
 例えばよくある例ですが、犬や猿や人は全てほ乳類であり、それらはほ乳類としての特徴を全て引き継いでいるので、ほ乳類を継承して犬や猿や人のクラスを作ることはそういう意味では正当です。

 では犬や猿や人が必ず持っている手足や頭は、というとこれはそれらが「所有」するものなので継承関係ではなく内包というか集約関係にあります。
 この場合はメンバ変数として実装するのが正当となります。


 継承の場合(public)、元のクラスの性能をそのまま引き継ぐので基底の publicメンバ関数は全て派生側でも使用できるようになります。
 もちろん継承を使わないでメンバ関数にしても、それを公開すれば同じメンバ関数を使用できるのですが、日本語で考えるといろいろ不自然さが目立ちます。
 
 例えばほ乳類は呼吸する、という動作を行う場合を想定し、ほ乳類クラスに呼吸するという関数があったとします。

 継承で作れば「人->呼吸する・・・人が呼吸する」で実行できます。
 が、集約で作ると「人->ほ乳類->呼吸する・・・人が持っているほ乳類が呼吸する」と何やら不自然さが目立ってきます。


 つたない説明ですが、こういう違いがあります。
 もっと詳しい&正確なことは憂鬱なプログラマのためのオブジェクト指向開発講座とかEffective C++ 第3版
の本を読むと、すごくよく判ると思います。


871ポイント を手に入れた。

Name: meigin  ..初心者(5,341ポイント)   Date: 2006/12/26(火) 07:35   No:3274 解決!     
Title: Re:クラスのこと    
Justyさん

オブジェクトと言うのでブロックのようなイメージを持っていて、
単に繋げれば良いのかなと思っていました。

意味というか概念も考えて作らないといけないんですね。
もっと、本を読んで勉強します。

ありがとう御座います。


2倍のポイントを手に入れた! 144ポイント を手に入れた。



Name: つき  ..ぴよぴよ(6ポイント)   Date: 2006/12/25(月) 21:05   No:3250       
Title: 無題    
ライフゲージのつくり方なんですけど、どうしたらいいか教えて下さい!

6ポイント を手に入れた。


Name: バグ  ..上級者(17,948ポイント)   Date: 2006/12/25(月) 21:30   No:3251     
Title: Re:無題    
どんなゲージか分かりませんが、簡単なものでよければ、私が作ったコラムスの魔法石ゲージなんか参考になるかもしれませんよ。

51ポイント を落としてしまった。

Name: Justy  ..熟練のプログラマー(49,126ポイント)   Date: 2006/12/26(火) 00:30   No:3258     
Title: Re:無題    
 質問が漠然としすぎてよくわからないのですが、基本的にはライフの数値に従って表示画面を更新していくだけです。

 具体的にどんなゲージを想定していますか?


12ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(161,120ポイント)   Date: 2006/12/26(火) 02:20   No:3270     
Title: Re:無題    
とりあえず、体力ゲージについて。
HP:100をマックスにします。
今のHPが50なら半分塗りつぶしたらいいことがわかりますね。
これはどうやって計算したか自分で考えて見ましょう。

50/100をやったんですね。ですから

全体の

今の体力/マックスの体力

分だけ左から塗りつぶしたらいいのです。

こんな感じでしょうか?


97ポイント を手に入れた。



Name: roppongi  ..ぴよぴよ(8ポイント)   Date: 2006/12/20(水) 18:00   No:3018       
Title: DrawText    
ここはDirectXの質問もいいんでしょうか。駄目だったら言ってください。

Direct8でDrawTextを使って文字を表示させると変に表示されてしまいます。
解決策はないんでしょうか。


8ポイント を手に入れた。


Name: 管理人 [URL]  ..ハッカー(146,512ポイント)   Date: 2006/12/20(水) 21:15   No:3022     
Title: Re:DrawText    
こんにちは。

管理人である私はすみませんが力不足のためDirect8はよくわかりません。

しかし、賢い方が何人かこの掲示板を見てお答えいただいているので、どなたかお答えいただけるかもしれません。

一度投稿されてみてはいかがでしょうか。

私は力になれず申し訳ないです。


102ポイント を手に入れた。

Name: keichan  ..初心者(8,423ポイント)   Date: 2006/12/21(木) 09:23   No:3062     
Title: Re:DrawText    
変に表示とは具体的に「どういった文字列」を表示させようとしたら
「どうなった」のか明記してみてください。


32ポイント を手に入れた。

Name: keichan  ..初心者(8,439ポイント)   Date: 2006/12/21(木) 09:28   No:3064     
Title: Re:DrawText    
またVCのバージョンもお願いします。

16ポイント を手に入れた。

Name: roppongi  ..ぴよぴよ(47ポイント)   Date: 2006/12/21(木) 13:43   No:3073     
Title: Re:DrawText    
環境はVisual Studio.net 2003です。

画像は「文字の表示」と表示させたところです。
文章が長くなると変な部分が増えます。


39ポイント を手に入れた。

Name: GPGA  ..上級者(16,146ポイント)   Date: 2006/12/21(木) 14:08   No:3074     
Title: Re:DrawText    
表示部分のプログラムを提示してください。

12ポイント を手に入れた。

Name: roppongi  ..ぴよぴよ(128ポイント)   Date: 2006/12/21(木) 16:22   No:3086     
Title: Re:DrawText    
void FontDrow(char *str, int x, int y, D3DCOLOR color)
{
RECT rect={x,y,SCREEN_WIDTH,SCREEN_HEIGHT};

g_pFontObject->DrawText(str, -1, &rect, DT_LEFT, color);
}

SCREEN_WIDTHとSCREEN_HEIGHTは#defineで640と480に各々置き換えています。


81ポイント を手に入れた。

Name: keichan  ..初心者(8,483ポイント)   Date: 2006/12/21(木) 16:46   No:3088     
Title: Re:DrawText    
なんとなくですが、バックバッファをクリアしていないだけな様な気がします。
確認してみてください。


44ポイント を手に入れた。

Name: roppongi  ..ぴよぴよ(194ポイント)   Date: 2006/12/25(月) 13:57   No:3238     
Title: Re:DrawText    
すごい根本的な質問なんですけど、バックバッファのクリアーは
具体的にどうすればいいんでしょうか。
毎ループ呼び出すClearとはまた違うものですよね。


66ポイント を手に入れた。

Name: GPGA  ..上級者(16,200ポイント)   Date: 2006/12/25(月) 14:14   No:3240     
Title: Re:DrawText    
IDirect3DDevice8::Clearのことだと思います。



2倍のポイントを手に入れた! 54ポイント を手に入れた。



Name: float  ..ぴよぴよ(444ポイント)   Date: 2006/12/24(日) 18:15   No:3212       
Title: 初めて質問させていただきます。    
『円周率πを求める』という課題についてなのですが、いくつか指定がありまして、
1、マチンの公式を使用すること。ただし、tan-1乗*1/5とtan-1乗*1/239はグレゴリ級数というを使い、xに1/5と1/239を代入してそれぞれ求めること。
2、math.hのatan()関数は使用してはならない。
3、tan-1乗*xで求めるときの級数の項数は30項目(つまりn=30)以上とする。
4、小数点以下は15桁まで表示すること。
という指定です。
いろいろ調べて、自分は下のような感じに書いてみました。

#include<stdio.h>
#include<math.h>

int main(void)
{
int i;
double PI, a1, a2, x;

a1 = 0.0;
x = 1.0/5.0;

for( i=1; i<=30; i++){
a1 =16 * pow( (-1), i-1 )/ (2*i-1)* pow( x, (2*i-1));

}

a2 = 0.0;
x = 1.0/239.0;

for( i=1; i<=30; i++){

a2 = 4 * (pow( (-1), i-1 ) / (2*i-1) )* pow( x, (2*i-1));

}

PI = a1 - a2;

printf("円周率:%18.15f\n" ,PI);

return 0;
}

でもこの式でデバックすると、うまくいかないんです。
pow( x, (2*i-1))とpow( x, (2*i-1))の式にうまく1/5と1/239を代入できなくて、
もう自分ではどうしたらよいか分からなくなってしまいました。
どうかよろしくお願いします。


444ポイント を手に入れた。


Name: 管理人 [URL]  ..ハッカー(157,769ポイント)   Date: 2006/12/24(日) 19:06   No:3213     
Title: Re:初めて質問させていただきます。    
こんにちは。
すみませんが、詳しくは拝見していないのですが、
pow( x, (2*i-1))とpow( x, (2*i-1))がうまくいかないということで、ここだけ回答します。

googleなどでpowと検索してみましょう。

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/pow.3.html

このようなページが出てきます。そこに

double pow(double x, double y);

と書かれています。つまりこの関数に渡す型はdouble型でなくてはならず、返り値もdouble型です。

今はiがint型ですので、型が合わないので、統一しましょう。


175ポイント を手に入れた。

Name: box  ..プログラマー(26,422ポイント)   Date: 2006/12/24(日) 19:22   No:3214     
Title: Re:初めて質問させていただきます。    
> a1 = 0.0;
> x = 1.0/5.0;
>
> for( i=1; i<=30; i++){
> a1 =16 * pow( (-1), i-1 )/ (2*i-1)* pow( x, (2*i-1));
> }

a1, a2とも同じなんですが、ループの中で毎回値を上書きしているのはまずいです。
今のコードでは、30回目に計算した値「だけ」が残っています。
総和を求める必要があります。

また、pow関数を使っている箇所は、係数の16と4を除いて同じ内容です。
その、同じ内容を関数にしておくと、より美しいコードになるでしょう。


81ポイント を手に入れた。

Name: float  ..ぴよぴよ(470ポイント)   Date: 2006/12/24(日) 22:05   No:3218     
Title: Re:初めて質問させていただきます。    
管理人様、box様、御回答ありがとうございます!
教えていただいたことをふまえてやってみようと思います。


26ポイント を手に入れた。



Name: しずちゃん  ..ぴよぴよ(31ポイント)   Date: 2006/12/24(日) 02:45   No:3202       
Title: グラフの書き方    
初めて投稿させていただきます。
授業で、今直線の書き方などを習ったのですが、2次関数の曲線などを書くにはどうしたらいいのかわからず困っています。
横方向をx軸とし、縦方向をy軸とする。y=2xを描け。というものです。よろしくお願いします。


31ポイント を手に入れた。


Name: 管理人 [URL]  ..ハッカー(157,118ポイント)   Date: 2006/12/24(日) 02:50   No:3203     
Title: Re:グラフの書き方    
しずちゃんさん、こんにちは^^

えぇと、関数の書き方ということなんですが、どういう描き方をするんですか?
コンソール画面に*を出力するような感じでいいんでしょうか?
それとも何か特定なライブラリを使って綺麗にグラフを作るんでしょうか?

また、1次関数を描くプログラムがあるのでしたら、それを教えていただければ、そこから解りやすく変更して解説できるかと思いますので、一度投稿してもらえませんか?

私の書いたプログラムでよければ一から書いて説明いたしますが。

また、表示する範囲の決定はどうします?
最大値、最小値を探索して自動的に最適な表示範囲を決定すると少々複雑になると思いますが、
最初からy=2xしか表示しないようなプログラムならごくシンプルに作れると思います。
y=2xは直線ですが、y=x^2ということでしょうか?


189ポイント を手に入れた。



Name: 困ったさん  ..入門者(2,568ポイント)   Date: 2006/12/21(木) 11:17   No:3066       
Title: 二次方程式の解と一次元配列    
こんにちは。いつもお世話になっております。
学校の課題で

「2 次方程式 x2 + ax + b = 0 の実数解を求め,画面表示するプログラムを作成しなさい.ただし,
以下に示した条件を満たすこと.
係数a,b の条件: 実数型とし,キーボードから入力させること.
関数の条件: プロトタイプ: int solve( float, float, float *, float * )
第1 引数: x の係数 第2 引数: 定数項
第3 引数: 第1 解へのポインタ 第4 引数: 第2 解へのポインタ
返り値: 解の個数
画面表示の条件: 関数からの返り値を利用し,画面表示を適切に変化させること.
平方根を計算するためには,関数「double sqrt(double)」を使用することができる.ただし,プログラ
ムの冒頭に「#include math.h」と記述し,コンパイルオプションとして「-lm」を指定すること」

というのと

「まず1 次元整数型配列(配列名data,要素数は任意)を準備する.キーボードから任意個の整数デ
ータを入力させ,入力されたデータの @最大値,A最小値,B平均,C標準偏差 を求めて画面表
示するプログラムを作成しなさい.ただし,上記の4 つの処理について,それぞれ下記の条件を満た
す関数を作成すること.
@ 最大値: int max( int *, int )
第1 引数: 配列アドレス 第2 引数: データ数 返り値: 最大値
A 最小値: int min( int *, int )
第1 引数: 配列アドレス 第2 引数: データ数 返り値: 最小値
B 平均: float average( int *, int )
第1 引数: 配列アドレス 第2 引数: データ数 返り値: 平均値
C 標準偏差: float std_dev( int *, int )
第1 引数: 配列アドレス 第2 引数: データ数 返り値: 標準偏差」

というのが出たんですけど、今回、講義のほうを欠席してしまった関係で何をすればいいのか分かりません(>_<)
どなたかレクチャーお願いしますm(_ _)m 2つも課題丸投げになっちゃってすいません…。


765ポイント を手に入れた。


Name: box  ..上級者(24,459ポイント)   Date: 2006/12/21(木) 13:03   No:3069     
Title: Re:二次方程式の解と一次元配列    
現状を整理する意味をこめて、まずは、
2つの問題について
・わかっていること
・わからないこと
を書き出してみましょう。

【例】
・2次方程式の解の公式はわかっている
・標準偏差の計算方法がわからない


33ポイント を手に入れた。

Name: 困ったさん  ..入門者(2,715ポイント)   Date: 2006/12/21(木) 13:23   No:3070     
Title: Re:二次方程式の解と一次元配列    
じゃあ、まず1つめの課題の方から…。
「わかっていること」
・二次方程式の解を表示するだけのプログラム
・プロトタイプ宣言の仕方

「わからないこと」
・ポインタの使い方
・返り値について
・プロトタイプ宣言の中の[float *]はなんなのか。

考えられるのはこんな感じです。あとは何がわからないのか分からないのかも知れません。


147ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(150,221ポイント)   Date: 2006/12/21(木) 14:41   No:3078     
Title: Re:二次方程式の解と一次元配列    
とりあえず、わかっている部分だけで書いたプログラムでいいので、
投稿してみてください。
そこからはじめてみましょう。


42ポイント を落としてしまった。

Name: 困ったさん  ..入門者(2,996ポイント)   Date: 2006/12/21(木) 15:14   No:3079     
Title: Re:二次方程式の解と一次元配列    
まだ全然書いてないんですけど…。とりあえず

#include<stdio.h>
#include<math.h>
int solve(float,float,float*,float*)
int solve(float a,float b,float* r1 ,float* r2)
{
double D;
D=a*a-4*b;
if(D>0){
*r1 = (-a + sqrt(D))/2;
*r2=(-a-sqrt(D))/2;
return2;
}
if(D==0){
*r1 = -a/2;
return 1;
}
if(D<0)
return -2;
}
if(a!=0){
*r1 = -c/b;
return 1;
}
if(b!=0)
return 0;
else
return -1;

と、まだメインのほうは書けてないんですけど、こんな感じです。こんな状態でもすでに間違いが
ある気がして情けないです。


281ポイント を手に入れた。

Name: box  ..上級者(24,549ポイント)   Date: 2006/12/21(木) 15:37   No:3081     
Title: Re:二次方程式の解と一次元配列    
> int solve(float,float,float*,float*)

プロトタイプ宣言の最後に、セミコロンが必要です。

> if(D<0)
> return -2;
> }
> if(a!=0){
> *r1 = -c/b;
> return 1;
> }
> if(b!=0)
> return 0;
> else
> return -1;

solve関数の戻り値(実数解の個数)は、判別式Dの符号だけによって
決まります。引用した箇所で係数a, bを使う必要はありません。


2倍のポイントを手に入れた! 90ポイント を手に入れた。

Name: 困ったさん  ..入門者(2,975ポイント)   Date: 2006/12/21(木) 15:49   No:3082     
Title: Re:二次方程式の解と一次元配列    
> > if(D<0)
> > return -2;
> > }
> > if(a!=0){
> > *r1 = -c/b;
> > return 1;
> > }
> > if(b!=0)
> > return 0;
> > else
> > return -1;
>
> solve関数の戻り値(実数解の個数)は、判別式Dの符号だけによって
> 決まります。引用した箇所で係数a, bを使う必要はありません。

では、これらは記述する必要がないのですか?
すいません。やっぱりあまり分かってなかったみたいで…。



21ポイント を落としてしまった。

Name: box  ..上級者(24,614ポイント)   Date: 2006/12/21(木) 15:55   No:3083     
Title: Re:二次方程式の解と一次元配列    
> では、これらは記述する必要がないのですか?

大部分は。

D > 0 のとき、実数解は2個 → if文で return 2; している
D == 0 のとき、実数解は1個 → if文で return 1; している
D < 0のとき、実数解は何個ですか? return いくつ; にすればよいですか?


65ポイント を手に入れた。

Name: 困ったさん  ..入門者(3,022ポイント)   Date: 2006/12/21(木) 16:03   No:3084     
Title: Re:二次方程式の解と一次元配列    
参考にしたサイトでは実数解が0個の時は「ー2」にしていましたが
それでいいでしょうか?


47ポイント を手に入れた。

Name: box  ..上級者(24,714ポイント)   Date: 2006/12/21(木) 16:09   No:3085     
Title: Re:二次方程式の解と一次元配列    
出題文で「返り値: 解の個数」となっています。
実数解が0個のときに返り値を-2にするのは、
出題文の趣旨と合っていますか?

他のサイトを参考にするのは一向にかまいません。
しかし、大前提は出題文に載っていることを忘れないでください。


100ポイント を手に入れた。

Name: 困ったさん  ..入門者(3,007ポイント)   Date: 2006/12/21(木) 18:38   No:3091     
Title: Re:二次方程式の解と一次元配列    
すいません。じゃあ、返り値は0でいいですか?

15ポイント を落としてしまった。

Name: box  ..上級者(24,909ポイント)   Date: 2006/12/21(木) 18:44   No:3092     
Title: Re:二次方程式の解と一次元配列    
出題の趣旨に従うなら、そうなります。

14ポイント を手に入れた。

Name: 困ったさん  ..入門者(2,816ポイント)   Date: 2006/12/21(木) 19:07   No:3094     
Title: Re:二次方程式の解と一次元配列    
では、このようになるのでしょうか?

#include<stdio.h>
#include<math.h>
int solve(float,float,float*,float*);
int solve(float a,float b,float* r1 ,float* r2)
{
double D;
D=a*a-4*b;
if(D>0){
*r1 = (-a + sqrt(D))/2;
*r2=(-a-sqrt(D))/2;
return2;
}
if(D==0){
*r1 = -a/2;
return 1;
}
if(D<0)
return 0;
}

そしてこの後はどうしていくべきなのでしょうか?


191ポイント を落としてしまった。

Name: box  ..上級者(24,968ポイント)   Date: 2006/12/21(木) 21:46   No:3105     
Title: Re:二次方程式の解と一次元配列    
> return2;

returnと2の間に、1個以上の空白をあけてください。
今のままでは、コンパイル時にエラーが出ます。

> そしてこの後はどうしていくべきなのでしょうか?

main関数のコードを書いてください。
・必要な変数を定義する
・係数a, bを入力する
・solve関数を呼び出す
・solve関数の戻り値に応じた内容を出力する


59ポイント を手に入れた。

Name: 困ったさん  ..入門者(2,878ポイント)   Date: 2006/12/21(木) 22:29   No:3108     
Title: Re:二次方程式の解と一次元配列    
returnはうっかり凡ミスでした。すいません。
main関数内で書くことがいまいちわかりません。宣言した関数はメインプログラム内ではどのように用いるのですか?また返り値はどのように使いますか?


62ポイント を手に入れた。

Name: box  ..プログラマー(25,410ポイント)   Date: 2006/12/21(木) 22:39   No:3109     
Title: Re:二次方程式の解と一次元配列    
main関数の中で他の関数を呼び出す、
というコードを書いたことがないですか?

授業で、そういう内容はありませんでしたか?


2ポイント を手に入れた。

Name: 困ったさん  ..入門者(2,934ポイント)   Date: 2006/12/21(木) 23:37   No:3113     
Title: Re:二次方程式の解と一次元配列    
確かに授業で過去にやりましたが…恥ずかしながら理解できなかったので投げやりにしてしまいました。ちゃんと理解しておかないと後々響くんですね。

56ポイント を手に入れた。

Name: box  ..プログラマー(25,568ポイント)   Date: 2006/12/22(金) 10:04   No:3118     
Title: Re:二次方程式の解と一次元配列    
下のコードが何をしているか、解読してみてください。
その後、実際に実行してください。
そして、解読結果と実行結果を比べてください。

#include <stdio.h>

int f(int m, int *n);

int main(void)
{
int a, b, c;

for (a = 1; a <= 3; a++) {
c = f(a, &b);
printf("a=%d, b=%d, c=%d\n", a, b, c);
}
return 0;
}

int f(int m, int *n)
{
*n = m * 100;
return 2 * m + 1;
}


158ポイント を手に入れた。

Name: 困ったさん  ..入門者(3,076ポイント)   Date: 2006/12/22(金) 13:16   No:3121     
Title: Re:二次方程式の解と一次元配列    
まずa=1のときはf関数の中のmにaの値1が代入される。そして*nの値が計算されてその解である100がbの値として格納される。また返り値2*m+1が計算されその解である3がcの値として格納される。以後、a=2,3の時も同様に考えて解読結果は
a=1,b=100,c=3
a=2,b=200,c=5
a=3,b=300,c=7
となりました。実行結果もこうなりました。読めはするんですけどいまいち使い方がわからないんです…。


142ポイント を手に入れた。

Name: box  ..プログラマー(25,765ポイント)   Date: 2006/12/22(金) 13:46   No:3122     
Title: Re:二次方程式の解と一次元配列    
「読めるけど書けない」という状況はプログラミングに限らず、
漢字の書き取りなど、よくある話ではあります。

この状況を抜け出すにはどうするか?
自分の頭と手を使ってひたすら書く以外にありません。
人が書いたコードを「見るだけ」では、自分で書けるようにはなりません。

授業で何かテキストを使っていて、それに練習問題が載っていれば、
解答を見ないでコードを書く練習を積んでみてください。


197ポイント を手に入れた。

Name: 困ったさん  ..入門者(3,108ポイント)   Date: 2006/12/22(金) 17:00   No:3126     
Title: Re:二次方程式の解と一次元配列    
わかりました!やってみます。

2倍のポイントを手に入れた! 32ポイント を手に入れた。

Name: 困ったさん  ..入門者(3,635ポイント)   Date: 2006/12/23(土) 01:32   No:3142     
Title: Re:二次方程式の解と一次元配列    
少し頑張ってみました…。それで自分なりにプログラムを書いてみたんですけどわけわかんなくなっちゃいました。一応二次方程式の解は求められるんですけど課題文にだいぶ反している気がします。ちなみに今現在のプログラムはこうなっています。

#include<stdio.h>
#include<math.h>

int solve(float,float,float*,float*);
int main(void){
 double D;
 float a,b,r1,r2;
 printf("xの係数を入力 ->");
 scanf("%f",&a);
 printf("定数項を入力 ->");
 scanf("%f",&b);
r1=solve(&r1);
r2=solve(&r2);
printf("二次方程式の解は[%f]と[%f]です\n",r1,r2);
printf("二次方程式の解は[%f] 重解です\n",r1);
printf("二次方程式の実数解はありません\n");
return 0;
}

int solve(float m,float n,float* y1,float* y2){
double D;
D=m*m-4*n;
if(D>0){
*y1=(-m+sqrt(D))/2;
*y2=(-m-sqrt(D))/2;
return 2;
}
if(D==0){
*y1=-m/2;
return 1;
}
if(D<0)
return 0;
}

どうでしょうか?正直いろいろ間違っていて根本的に理解出来てないんだと思います……


527ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(151,710ポイント)   Date: 2006/12/23(土) 02:14   No:3144     
Title: Re:二次方程式の解と一次元配列    
一応、こういう条件で計算します。

65ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(153,246ポイント)   Date: 2006/12/23(土) 02:54   No:3145     
Title: Re:二次方程式の解と一次元配列    
いつも最近返事が遅くなってしまってすみません。


頑張っていらっしゃいますね。

基本的に大きな間違いがいくつかありますけど、作成した関数の処理はほぼ正解でした。

最初からみていきましょう。ほとんど数値がfloatなので、計算はfloatに統一しました。

とりあえず最初の

 double D;

は必要ないですね。次に

r1=solve(&r1);

ここは大きく違います。処理の構造をしっかり掴みましょう。

まず、solve(○);と書くと、○はどこにいきますか?

solve関数に処理がうつったとき、

int solve(float m,float n,float* y1,float* y2){

と書いた、それぞれのm,n,ya,y2に渡されます。

おかしいところがわかるでしょうか?

○つまり1つしか値を渡していないのに、solve関数の受け取る値である引数は4つになっています。

○はsolve関数に渡してやる変数ですから、4つ受け取るように指定しているなら4つ渡さないといけませんね。

今、a,b,y1,y2の変数を渡したいのですから、

solve(a,b,&y1,&y2);でないといけませんね。

ポインタの使い方がちゃんとなっていたのはすばらしいと思いましたが、受け取り方が間違っているので、たまたま書いた書き方があっていただけなのかな?受け取りについては☆1へ。

solve(a,b,&y1,&y2); と書いたとき、solve関数に処理がわたったとき、

int solve(float m,float n,float* y1,float* y2){

mにはaが、nにはbが、y1にはy1が、y2にはy2が入ります。

(ちなみに、受け取る値は無理にmやnといった変数名に変更しなくても、同じaやbでも使えます。)


☆1

返り値の受け取り方ですが

r1=solve(&r1);

これは間違いです。何が帰ってきているかに注目してください。

r1をポインタで渡したということは、r1にxの解の値を入れていることを期待しているのですよね。

r1でせっかくxの解、(例えば4.75234だとか)をいれたのに、後から返り値である

解の個数を入れてしまったのでは、計算した意味がありません。

return 2;

の2の意味がわかりますか?

#include <stdio.h>


int solve(int m){
m = m+10;
return m;
}

int main(){
int a;
a=solve(5);
printf("a=%d\n",a);
return 0;
}


一度このプログラムの意味を考えましょう。

main関数内でからsolve関数を呼んでいるとき、引数に5を指定しています。
solve関数ではその5を受け取り、mには5が入ります。
solve関数内で、mは10がたされ、15となり、mの値はreturnで帰ります。
returnで帰ってきた値は
a=solve(5);
のaに代入されます。
ですからprintfでは15が出力されるとわかりますね。

ではこのようなとき、

#include <stdio.h>


int solve(int *m){
*m = *m+10;
return *m/2;
}

int main(){
int a,b;
a=4;
b=solve(&a);
printf("a=%d,b=%d\n",a,b);
return 0;
}


最初、aには4が入ります。aの変数の住所がsolve関数へ渡されます。aの住所ははmのポインタとなり、
m自身がaと自身となり、mを変更することで、aも変更されます。
(だってデータを示している住所が同じもので、ただ変数名が違うだけだから。つまり示している先のデータは同じもの)

return でmの半分の値が返ります。

returnで返されたmの半分の値はbに格納されます。

処理の内容わかりますか?

つまり、solve関数で定義した解の個数を返すreturnは、受け取る時、解の個数を格納する変数にいれないといけないですね。

解の個数をnumという変数にいれるとすると

num=solve(a,b,&r1,&r2);

と書くことで、帰ってきた解の個数を格納できます。

printf("二次方程式の解は[%f]と[%f]です\n",r1,r2);
printf("二次方程式の解は[%f] 重解です\n",r1);
printf("二次方程式の実数解はありません\n");

これはご自分でもわかっていらっしゃるでしょうけど、毎回全部表示されてしまうのでダメですね。

それは「解の個数がどこにはいっているかわからない」から条件文がかけなかったんだと思います。

今はnumに解の個数が入っているので条件文がかけますね?

if文でもかけますが、ちょっといじってswitch文で書いてみました。

switch文も使ってみてください。

なお、solve関数内の計算部分は

float D;
*y1=(-m+sqrt(D))/2.0f;

このように全てフローとになるようにしてください。計算にint型、float型、double型が混合していましたので。

2.0fというのは2.0がfloat型ですよと明示的に言っているのです。

上記の事をしっかり見てから下のサンプルをみてください。

お書きになったプログラムを最大限生かしながら修正しました。

#include<stdio.h> 

#include<math.h>

int solve(float,float,float*,float*);
int main(void){
int num;
float a,b,r1,r2;
printf("xの係数を入力 ->");
scanf("%f",&a);
printf("定数項を入力 ->");
scanf("%f",&b);
num=solve(a,b,&r1,&r2);
switch(num){
case 0:
printf("二次方程式の実数解はありません\n");
break;
case 1:
printf("二次方程式の解は[%f] 重解です\n",r1);
break;
case 2:
printf("二次方程式の解は[%f]と[%f]です\n",r1,r2);
break;
default:
printf("error\n");
break;
}
return 0;
}

int solve(float m,float n,float* y1,float* y2){
float D;
D=(m*m-4*n);
if(D>0){
*y1=(-m+sqrt(D))/2.0f;
*y2=(-m-sqrt(D))/2.0f;
return 2;
}
if(D==0){
*y1=-m/2.0f;
return 1;
}
if(D<0)
return 0;
}


実行例

xの係数を入力 ->4.0
定数項を入力 ->3.0
二次方程式の解は[-1.000000]と[-3.000000]です。


よく確かめてないので計算結果がちゃんとあってるか、確かめてください。


どこかわからないところがあれば聞いてください。


1,536ポイント を手に入れた。

Name: 困ったさん  ..入門者(3,718ポイント)   Date: 2006/12/23(土) 09:47   No:3147     
Title: Re:二次方程式の解と一次元配列    
わかりやすいご説明ありがとうございます。一度読んでみてだいぶ理解できたと思うのでもう一度読み返してみてわからないところがあればまた質問させていただきますね。
ところで問題文に「double sqrt(double)を使うことができる」とありますがこれはどういった意味でどのように使うのでしょうか?


83ポイント を手に入れた。

Name: box  ..プログラマー(26,155ポイント)   Date: 2006/12/23(土) 10:14   No:3148     
Title: Re:二次方程式の解と一次元配列    
> ところで問題文に「double sqrt(double)を使うことができる」とありますがこれはどういった意味でどのように使うのでしょうか?

solve関数の中で、判別式の平方根を求めるときに使ってますよね。
sqrtは「SQuare RooT」の略です。
引数がdouble型で、戻り値もdouble型です。
プロトタイプ宣言はmath.hに書いてあります。
だから、sqrt関数を使うときにはmath.hのインクルードが必要です。


89ポイント を手に入れた。

Name: 困ったさん  ..入門者(3,778ポイント)   Date: 2006/12/23(土) 10:35   No:3149     
Title: Re:二次方程式の解と一次元配列    
sqrtのプロトタイプ宣言はmath.hに書いてあるのでプロトタイプ宣言をする代わりにmath.hをインクルードするという事ですか?
あと、math.hをインクルードした場合、コンパイル時に-lmを渡すのはどういう意味ですか?


60ポイント を手に入れた。

Name: box  ..プログラマー(25,925ポイント)   Date: 2006/12/23(土) 11:06   No:3150     
Title: Re:二次方程式の解と一次元配列    
> sqrtのプロトタイプ宣言はmath.hに書いてあるのでプロトタイプ宣言をする代わりにmath.hをインクルードするという事ですか?

math.hの中に、sqrt関数や他の数学関数(三角関数、指数・対数関数など)の
プロトタイプ宣言が書いてあります。
#include <math.h>
と書けば、自分で
double sqrt(double);
と書かなくてもよいのです。

> あと、math.hをインクルードした場合、コンパイル時に-lmを渡すのはどういう意味ですか?

授業で利用している開発環境では、数学関数用のライブラリが
他の標準関数用のライブラリとは別のファイルになっているのでありましょう。
そういう環境では、数学関数を使うプログラムを書く場合、

・ソースに#include <math.h>と書く
・コンパイル時に-lm(lはリンクLinkの頭文字、mは数学Mathematicsの頭文字)の
オプションを指定することで、数学関数用のライブラリを使うことをコンパイラに知らせる

の2点が必要です。


230ポイント を落としてしまった。

Name: 困ったさん  ..入門者(4,079ポイント)   Date: 2006/12/23(土) 11:13   No:3151     
Title: Re:二次方程式の解と一次元配列    
なるほど。boxさん丁寧に教えて頂きましてありがとうございます。

管理人さんがswitch文で書いてくれたので自分はif文で書いてみました。プログラムはこれで大丈夫でしょうか?

#include<stdio.h>
#include<math.h>
int solve(float,float,float*,float*);
int main(void){
float a,b,r1,r2;
int num;
printf("xの係数を入力 ->");
scanf("%f",&a);
printf("定数項を入力 ->");
scanf("%f",&b);
num=solve(a,b,&r1,&r2);
if(num==2)
printf("二次方程式の実数解は[%f]と[%f]です\n",r1,r2);
if else(num==1)
printf("二次方程式の実数解は[%f] 重解です\n",r1);
if else(num==0)
printf("二次方程式の実数解はありません\n");
else
printf("error\n");
return 0;
}
int solve(float m,float n,float* y1 ,float* y2)
{
float D;
D=m*m-4*n;
if(D>0){
*y1 = (-m + sqrt(D))/2.0f;
*y2=(-m-sqrt(D))/2.0f;
return 2;
}
if(D==0){
*y1 = -m/2.0f;
return 1;
}
if(D<0)
return 0;
}

あと、一回メインプログラムの方に
else{
printf("error\n");
}
っていうのを入れてみたんですけど、実数解があるときにerrorも一緒に表示されてしまうんです。なにか間違っているんでしょうか?


301ポイント を手に入れた。

Name: box  ..プログラマー(25,943ポイント)   Date: 2006/12/23(土) 11:58   No:3152     
Title: Re:二次方程式の解と一次元配列    
> 管理人さんがswitch文で書いてくれたので自分はif文で書いてみました。プログラムはこれで大丈夫でしょうか?

正しく動きます。

> っていうのを入れてみたんですけど、実数解があるときにerrorも一緒に表示されてしまうんです。なにか間違っているんでしょうか?

どこに入れたときですか?


18ポイント を手に入れた。

Name: 困ったさん  ..入門者(4,171ポイント)   Date: 2006/12/23(土) 12:03   No:3154     
Title: Re:二次方程式の解と一次元配列    
> どこに入れたときですか?

メインプログラムのif文の最後です。

if(num==2)
printf("二次方程式の実数解は[%f]と[%f]です\n",r1,r2);
if(num==1)
printf("二次方程式の実数解は[%f] 重解です\n",r1);
if(num==0)
printf("二次方程式の実数解はありません\n");
else{
printf("error\n");
}
return 0;
}

という風にしてみたんですけど…。


92ポイント を手に入れた。

Name: box  ..プログラマー(26,189ポイント)   Date: 2006/12/23(土) 12:16   No:3157     
Title: Re:二次方程式の解と一次元配列    
> if(num==0)
> printf("二次方程式の実数解はありません\n");
> else{
> printf("error\n");
> }

この場合、elseに来るのは、numが0でない場合です。
numは0か1か2の値をとりますから、numが1か2の場合、
つまり実数解がある場合にelseのところへ来てしまい、
"error"と表示します。
これを防ぐには、

if(num==2)
printf("二次方程式の実数解は[%f]と[%f]です\n",r1,r2);
else if(num==1)
printf("二次方程式の実数解は[%f] 重解です\n",r1);
else if(num==0)
printf("二次方程式の実数解はありません\n");
else{
printf("error\n");
}

のように、numと1との判定、numと0との判定のところに
elseを追加します。
こうすることで、numが2でも1でも0でもない、想定外の値になったときだけ
"error"と表示します。


246ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(153,732ポイント)   Date: 2006/12/23(土) 12:17   No:3158     
Title: Re:二次方程式の解と一次元配列    
おはようございます。

else文は、直前のif文に対応します。
つまり3つめのif文に入らない条件は全てelseになってしまいます。
1のifでもなく2のifでもなく、3のifでもないとき、elseにしたいときは

if
else if
else if
else

とかかないといけません。
elseはその他ですね。その他のとき、もし・・といった感じです。


158ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(153,926ポイント)   Date: 2006/12/23(土) 12:33   No:3162     
Title: Re:二次方程式の解と一次元配列    
あ、御回答中だったのですね^^; ありがとうございます、すみません^^;


そういえばsqrtの返り値がそろってないですね。
sqrtfを使った方がいいように思いますが、問題文はdoubleを使うように成っています。

先生のミスなんでしょうか?なんでわざわざfloatやdoubleが混合するようにするんでしょうね。。
問題文にsqrtを使えと書いてあるので、それを使うなら

(float)でfloat型にdouble型の返り値を変換した方がいいと思います。

平方根を求める関数はその型に応じて、3つあります。

#include <math.h>

double sqrt(double x);

float sqrtf(float x);

long double sqrtl(long double x);

今回sqrtfを使った方がスムーズにいくはずですが、sqrtを使えと書いてあるので、その返り値をfloatに変換してください。


ちょっと長くなってしまったので、2つ目の質問をするときは、コピーペーストでいいので新しいトピをたててもらえますか?

この問題は最後までここに投稿してもらって大丈夫ですので。

よろしくお願いしますm(_ _)m


146ポイント を手に入れた。

Name: 困ったさん  ..入門者(4,245ポイント)   Date: 2006/12/23(土) 12:46   No:3164     
Title: Re:二次方程式の解と一次元配列    
あ〜elseはそういう風に使うんですね。一つのifにしか対応してないとは…すっかり忘れてました。
sqrtをdouble型にするとどこがどのように変わるんですか?


2倍のポイントを手に入れた! 74ポイント を手に入れた。

Name: box  ..プログラマー(26,223ポイント)   Date: 2006/12/23(土) 13:16   No:3165     
Title: Re:二次方程式の解と一次元配列    
> sqrtをdouble型にするとどこがどのように変わるんですか?

一般に、float型は4バイト、double型は8バイトの領域をとります。
領域が大きいほど、扱える値の範囲が広くなります。


34ポイント を手に入れた。

Name: 困ったさん  ..入門者(4,308ポイント)   Date: 2006/12/23(土) 14:25   No:3171     
Title: Re:二次方程式の解と一次元配列    
boxさん、ありがとうございます。

管理人さん。2つめの質問は新しくトピをたてさせてもらいます。すごく長いトピになってしまって
すいませんでした。おそらく最後の質問になると思うんですが・・・返り値をfloat型に変換とはどのようにやるのですか?


63ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(154,833ポイント)   Date: 2006/12/23(土) 14:33   No:3172     
Title: Re:二次方程式の解と一次元配列    
いえいえ、別に一つの質問で話が長くなる文には全然問題ないですよ。
ただ一つのトピでいくつも話題・問題があると、題名と異なる内容になったりして、
閲覧者が混乱したりしてはいけないと思っているだけなので、
特に深くお考えにならないでください。

1トピ、1質問 =閲覧者が見やすい

そう思っているだけですので。

floatの変換は上記私のプログラムを参考にしてください。

int a=3,b=2;

float c;
c=a/b;        ‥@
c=(float)a/(float)b; ‥A


@の計算結果は1ですが、Aの計算結果は1.5です。
(float)と書くことで、変換できます。


181ポイント を手に入れた。

Name: 困ったさん  ..入門者(4,345ポイント)   Date: 2006/12/23(土) 23:08   No:3189     
Title: Re:二次方程式の解と一次元配列    
みなさん一つの問題に長々とありがとうございました。もう一つの問題はまた別にトピをたてさせていただきますのでよろしくお願いします。

37ポイント を手に入れた。



Name: たつみ  ..ぴよぴよ(810ポイント)   Date: 2006/12/23(土) 17:34   No:3184       
Title: 最小二乗法    
何時間も考えてわけわからなくなりました。
手助けお願いします。
問題は x=(-4,-3,-2,-1,0,1,2,3,4,5,6)
y=(13.4,7.2,2.7,1.2,0.6,3.1,6.9,12.5,20.8,31.7,44.0)
を観測点とし、それに最もよく近似すると思われるf(x)を求めることです。
ガウス・ヨルダン法を使って解きます。
ガウス・ヨルダンのプログラムは確実にあっています。
わからないのはそれに渡す配列の作り方。
main関数。
結果をエクセルのグラフで表すこと。
作ったエラーだらけのソース貼ります。


#include<stdio.h>
#include<math.h>
#include<stdlib.h>

#define ERROR -1 //エラーリターン値
#define NORMAL 0 //ノーマルリターン値
#define mabs(x) ( ( (x) > 0 ) ? (x):-(x)) //絶対値を返すマクロ
#define DBL_EPSILON 0.000000001


//Gauss_Jに渡す配列を作る↓

double setmatrixa(double x,int m,int n){

int i,j,k;
double a[100];

for(i=0;i<m;i++){

for(j=0;j<m;j++){

for(k=0;k<n;k++){

a[(m+2)*i+j]+=Mypow(x[k],(i+j));

}
}
}

return(a);

}

//Gauss_Jに渡す配列を作る↓

double setmatrixb(double y,int m,int n){

int i,k;
double b[100];

for(i=0;i<m;i++){

for(k=0;k<n;k++){

b[i]+=y[k]*Mypow(x[k],i);

}

}

return(b);

}

//POW関数だとなぜかエラーが出るため、代用の関数↓

double Mypow(double x,int s){

double buf_x;
int i;
buf_x=x;

if(s==0){

x=1;

}
else{

for(i=0;i<s-1;i++){

x=x*buf_x;

}

}
return(x);

}

//ここから


int Gauss_J(int n,double *a,double *b);
int partial(int n,int p,double *a,double *b);
void mswap(double *a,double *b);

int Gauss_J(int n,double *a,double *b){

int p,i,j,l; //カウンタ
double pivot,c; //ピボット値

for(p=0;p<n;p++){ //1行目からn行目まで繰り返す

if((partial(n,p,(double *)a,(double *)b))==ERROR){

return(ERROR);

}
pivot=a[p*n+p]; //ピボットを取得
for(i=p;i<n;i++){ //p行目のp列からn列まで

a[p*n+i]/=pivot; //係数行列のp行をpivotで割る

}
b[p]/=pivot; //定数ベクトルのp行をpivotで割る

for(l=0;l<n;l++){ //1行目からn行目まで

if(l!=p){ //p行を除いて

c=a[l*n+p]; //掃きだす
for(j=p;j<n;j++){

a[l*n+j]-=c*a[p*n+j];

}
b[l]-=c*b[p];

}

}
}
return(NORMAL);

}

int partial(int n,int p,double *a,double *b){

int l,m,max; //l:カウンタ max:絶対値が最大値の係数を持つ行
double pivot; //ピボット

for(l=max=p,pivot=a[p*n+p];l<n;l++){ //n行目まででp列の絶対値が最大のものを選ぶ

if(mabs(pivot)<mabs(a[l*n+p])){

max=l;
pivot=a[l*n+p];

}

}
if(mabs(pivot)<DBL_EPSILON){ //選ばれたピボットが0ならERROR(-1)を返す

return(ERROR);

}
if(p!=max){ //選ばれた行がp行でなければ、行の交換を行う

for(m=0;m<n;m++){ //係数行列のpとmaxを交換

mswap(&a[p*n+m],&a[max*n+m]);

}
mswap(&b[p],&b[max]); //定数のp行とmax行を交換

}
return (NORMAL);
}

void mswap(double *a,double *b){

double temp;

temp=*a;
*a=*b;
*b=temp;

}


//ここまで教科書丸写し



void main(void){

double x[100],y[100],a[100],b[100];
int i,n,m;
int r;

printf("データ数 = ");
scanf("%d",&n);
printf("%d\n",n);

printf("次元数 = ");
scanf("%d",&m);
printf("%d\n",m);

for(i=0;i<n;i++){

printf("x = ");
scanf("%lf",&x[i]);
printf("%f",x[i]);

printf("y = ");
scanf("%lf",&y[i]);
printf("%f",y[i]);

}

a=setmatrixa(x,m,n);
b=setmatrixb(y,m,n);

r=Gauss_J(m,a,b);

if(r==0){ //エラー判定

printf("isw = %d\n",r);

for(i=0;i<m;i++){

printf("X%d = %lf\n",i+1,b[i]); //結果出力

}

}

else{

printf("isw = %d",r);

}
}


810ポイント を手に入れた。


Name: box  ..プログラマー(26,297ポイント)   Date: 2006/12/23(土) 19:05   No:3185     
Title: Re:最小二乗法    
> 問題は x=(-4,-3,-2,-1,0,1,2,3,4,5,6)
> y=(13.4,7.2,2.7,1.2,0.6,3.1,6.9,12.5,20.8,31.7,44.0)
> を観測点とし、それに最もよく近似すると思われるf(x)を求めることです。

f(x)の式を求めたいのですか?
f(x)に条件はないのですか?例えば2次式であるとか。

あ、それとも、(x,y)の組が11個あるから、
xの10次式の係数(11個)を、11元連立一次方程式を立てて求めなさい、
ということなのでしょうか?


74ポイント を手に入れた。

Name: box  ..プログラマー(26,341ポイント)   Date: 2006/12/23(土) 20:09   No:3186     
Title: Re:最小二乗法    
> あ、それとも、(x,y)の組が11個あるから、
> xの10次式の係数(11個)を、11元連立一次方程式を立てて求めなさい、
> ということなのでしょうか?

与えられている条件だけでは、この考え方は無理っぽいですか…。
よくわからないですけど。


44ポイント を手に入れた。

Name: 管理人 [URL]  ..ハッカー(155,257ポイント)   Date: 2006/12/23(土) 23:07   No:3188     
Title: Re:最小二乗法    
>わからないのはそれに渡す配列の作り方。

計算内容は拝見しておりませんが、渡す配列の渡し方を知りたいならそこだけ個別に聞いたほうが聞きたい内容の情報が手に入るのではないでしょうか。

行いたいことの実装の仕方を質問されてはいかがでしょうか。


92ポイント を手に入れた。




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +