C言語何でも質問掲示板


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

規約と使い方

 
   分割?えらー   
     ・[7951] box 
     ・[7952] Justy 
     ・[8001] はぃさぃ 
     ・[8006] 管理人 
   バブルソートを使った ....   
     ・[7983] Hermit 
     ・[7984] 管理人 
     ・[7985] Hermit 
     ・[7986] 管理人 
     ・[7989] 管理人 
     ・[7991] 羽流布 
     ・[7992] 管理人 
     ・[7993] 羽流布 
     ・[7995] Hermit 
     ・[7996] 羽流布 
     ・[7998] 管理人 
   エラーLNK2001   
     ・[7946] box 
     ・[7963] BAZZ 
   アライメント   
     ・[7959] box 
     ・[7961] カルマ 
   逆引きゲームプログラ ....   
     ・[7820] asd 
     ・[7822] tower 
     ・[7824] Lbfuvab 
     ・[7825] asd 
     ・[7830] asd 
     ・[7831] tower 
     ・[7832] asd 
     ・[7897] tower 
     ・[7929] asd 
   ASCIIコードの文字をカ ....   
     ・[7877] Justy 
     ・[7883] 管理人 
     ・[7885] box 
     ・[7889] 管理人 
     ・[7890] box 
     ・[7892] 管理人 
     ・[7919] a_to_b 
   ウインドープロシージ ....   
     ・[7911] keichan 
     ・[7917] やっかい者 
   わからないんです。お ....   
     ・[7896] バグ 
     ・[7898] 管理人 
     ・[7899] 管理人 
   ファイル指定について   
     ・[7867] Hermit 
     ・[7868] 管理人 
     ・[7870] Sena 
     ・[7872] 管理人 
     ・[7887] Sena 
     ・[7893] 管理人 
     ・[7894] Sena 
   ループ   
     ・[7879] sub 
     ・[7882] 管理人 
   BCC Developer につい ....   
     ・[7812] 管理人 
     ・[7813] バグ 
     ・[7815] 管理人 
     ・[7848] 素人 
     ・[7851] バグ 
     ・[7854] 素人 
   C言語でクリーンアップ ....   
     ・[7817] YuO 
     ・[7850] 山田弘幸 
   BorlandC++ DXライブラ ....   
     ・[7845] いっちゃん 
     ・[7846] 管理人 
   C言語とLinux Unix   
     ・[7679] asd 
     ・[7689] ひろゆき 
     ・[7690] 管理人 
     ・[7819] asd 
     ・[7833] バグ 
     ・[7839] Lbfuvab 
   .NETについて   
     ・[7725] YuO 
     ・[7814] バグ 
   学校の課題です   
     ・[7772] 管理人 
     ・[7803] 徹夜 
     ・[7804] 徹夜 
     ・[7810] 管理人 
   構造体   
     ・[7746] ☆ 
     ・[7748] 管理人 
     ・[7750] ☆ 
     ・[7753] 管理人 
     ・[7755] 管理人 
     ・[7756] 管理人 
     ・[7767] ☆ 
     ・[7768] 管理人 
     ・[7781] ☆ 
     ・[7785] 管理人 
     ・[7788] ☆ 
     ・[7789] Justy 
     ・[7792] 管理人 
     ・[7794] Justy 
     ・[7795] 管理人 
     ・[7796] ☆ 
     ・[7797] 管理人 
     ・[7798] 管理人 
     ・[7799] ☆ 
     ・[7800] Justy 
     ・[7802] 管理人 
     ・[7806] ☆ 
     ・[7808] 管理人 
   register intって何?   
     ・[7776] 組木紙織 
     ・[7777] keichan 
     ・[7778] keichan 
     ・[7779] YuO 
     ・[7780] 組木紙織 
     ・[7783] YuO 
     ・[7784] 組木紙織 
     ・[7786] Justy 
     ・[7791] saimon 
     ・[7801] YuO 
     ・[7805] Hermit 
   ビットのコピーって出 ....   
     ・[7773] YuO 
     ・[7774] 組木紙織 
   積の法則(規則?)   
     ・[7732] 管理人 
     ・[7734] 大工 
     ・[7738] 組木紙織 
     ・[7758] 大工 
     ・[7759] 管理人 
     ・[7760] 管理人 
     ・[7761] 大工 
     ・[7762] 大工 
     ・[7763] ぽん太 
     ・[7770] 組木紙織 
   質問です   
     ・[7765] ぽん太 
     ・[7766] いさご 
   無題   
     ・[7736] miyaza 
     ・[7737] masa 
   スキルアップのコツ   
     ・[7696] 管理人 
     ・[7697] 管理人 
     ・[7706] Justy 
     ・[7707] 管理人 
     ・[7708] 管理人 
     ・[7709] 管理人 
     ・[7710] フリオ 
     ・[7711] フリオ 
     ・[7712] フリオ 
     ・[7713] Justy 
     ・[7714] 管理人 
     ・[7716] 大工 
     ・[7726] Hermit 
     ・[7730] ふぐお 
     ・[7733] Justy 
   和の法則   
     ・[7720] box 
     ・[7727] 大工 
   C言語の実数と整数につ ....   
     ・[7718] box 
     ・[7719] micheal 
     ・[7721] YuO 
     ・[7723] micheal 
     ・[7724] box 
   if文の条件について   
     ・[7646] 管理人 
     ・[7647] asd 
     ・[7705] マサキ 
   C言語(CGI)を使って、 ....   
     ・[7665] keichan 
     ・[7676] Justy 
     ・[7683] ドリーム 
     ・[7684] 通りすがり 
     ・[7704] Justy 
   白い枠線ができてしま ....   
     ・[7692] 管理人 
     ・[7703] 白線 
   雑談スレ   
     ・[6668] 一本杉 
     ・[6670] 管理人 
     ・[6673] むつ 
     ・[6676] 管理人 
     ・[6677] keichan 
     ・[6678] GPGA 
     ・[6681] keichan 
     ・[6682] GPGA 
     ・[6734] 管理人 
     ・[6760] 神魔 
     ・[6765] 管理人 
     ・[6812] 大工 
     ・[6813] 管理人 
     ・[6816] Justy 
     ・[6819] 大工 
     ・[6826] Justy 
     ・[6849] 大工 
     ・[6890] 大工 
     ・[6895] 一本杉 
     ・[6909] 管理人 
     ・[6910] 大工 
     ・[6922] parapara 
     ・[6924] 大工 
     ・[6934] parapara 
     ・[6941] 管理人 
     ・[6985] 大工 
     ・[6991] なぎ 
     ・[6992] 管理人 
     ・[6994] むつ 
     ・[6995] 管理人 
     ・[6996] むつ 
     ・[6997] 管理人 
     ・[6998] 管理人 
     ・[6999] 大工 
     ・[7016] 大工 
     ・[7017] 管理人 
     ・[7019] Justy 
     ・[7020] 大工 
     ・[7021] Justy 
     ・[7022] むつ 
     ・[7075] 管理人 
     ・[7106] むつ 
     ・[7109] かすてら 
     ・[7110] 管理人 
     ・[7145] 大工 
     ・[7164] 雷 
     ・[7193] 管理人 
     ・[7215] 大工 
     ・[7219] 管理人 
     ・[7248] 一本杉 
     ・[7251] 管理人 
     ・[7272] 一本杉 
     ・[7291] バグ 
     ・[7293] Justy 
     ・[7295] 管理人 
     ・[7379] 大工 
     ・[7380] Justy 
     ・[7381] 大工 
     ・[7387] 管理人 
     ・[7389] 大工 
     ・[7398] BAZZ 
     ・[7402] 一本杉 
     ・[7403] 管理人 
     ・[7682] 大工 
     ・[7686] parapara 
     ・[7687] 大工 
     ・[7691] 管理人 
     ・[7699] 大工 
   ファイルから該当デー ....   
     ・[7559] asd 
     ・[7560] chii☆ 
     ・[7591] 管理人 
     ・[7592] asd 
     ・[7593] 管理人 
     ・[7632] chii☆ 
     ・[7633] keichan 
     ・[7635] chii☆ 
     ・[7636] keichan 
     ・[7648] chii☆ 
     ・[7650] keichan 
     ・[7651] 管理人 
     ・[7652] 管理人 
     ・[7656] chii☆ 
     ・[7663] keichan 
     ・[7666] 管理人 
     ・[7667] 管理人 
     ・[7668] chii☆ 
     ・[7669] 管理人 
     ・[7670] 管理人 
     ・[7672] 管理人 
     ・[7673] 管理人 
     ・[7678] chii☆ 
     ・[7693] 管理人 
     ・[7694] 管理人 
   画像処理について。   
     ・[7681] asd 
     ・[7685] らんえぼ 
     ・[7688] asd 
   αブレンディングにつ ....   
     ・[7639] Justy 
     ・[7671] はね 
   無題   
     ・[7654] @とんぷぅ〜 
     ・[7655] box 
     ・[7657] @とんぷぅ〜 
     ・[7659] @とんぷぅ〜 
     ・[7660] @とんぷぅ〜 
     ・[7662] box 
     ・[7664] @とんぷぅ〜 
   ファイルが読み込めな ....   
     ・[7580] box 
     ・[7610] sub 
     ・[7613] box 
     ・[7618] sub 
     ・[7624] box 
     ・[7661] sub 
   最良の選択肢は?   
     ・[7582] 管理人 
     ・[7620] Justy 
     ・[7622] 管理人 
     ・[7627] Justy 
     ・[7628] 管理人 
     ・[7629] 管理人 
     ・[7630] YuO 
     ・[7631] Justy 
     ・[7634] Justy 
     ・[7645] 管理人 
   定数の割り当てについ ....   
     ・[7549] 管理人 
     ・[7552] YuO 
     ・[7554] やっかい者 
     ・[7557] keichan 
     ・[7643] やっかい者 
     ・[7644] YuO 
   無題   
     ・[7526] フリオ 
     ・[7527] 管理人 
     ・[7640] たのもー 
   .   
     ・[7614] 管理人 
     ・[7625] asd 
     ・[7626] 管理人 
     ・[7637] asd 

Name: はぃさぃ  ..ぴよぴよ(288ポイント)   Date: 2007/05/26(土) 16:57   No:7950       
Title: 分割?えらー    
はじめまして、はぃさぃと申します。
シューティングゲームを作ってみようと
こちらを利用させていただいているのですが、
「6.先ほどのプログラムを分割する」の章にて
メイク時にエラーが起こってしまい悩んでいます。

.hとつけた2つのファイル(ExternGV.h、GlobalVariable.h)
をメイク時にみていないきがするのですが・・。

環境は、
  BorlandC++ Compiler 5.5
  BCC Developer
になります。

エラー文は、
Error: 外部シンボル '_img_sound_load' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_initialization' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_SetColor' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_Background' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_PlayerControl' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_Background2' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_FpsTimeFanction' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)

** error 1 ** deleting Debug\test.exe
となっています。

プロジェクトツリーの画像も添付しておきます。

よろしくお願いいたします。



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


Name: box  ..比類無きプログラマー(69,619ポイント)   Date: 2007/05/26(土) 17:00   No:7951     
Title: Re:分割?えらー    
とりあえず、
 ・main.cpp
 ・ExternGV.h
 ・GlobalVariable.h
の3つのファイルを見せてください。


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

Name: Justy  ..ハッカー(103,816ポイント)   Date: 2007/05/26(土) 17:23   No:7952     
Title: Re:分割?えらー    
 多分これと同じ現象でしょう。

http://www.play21.jp/board/formz.cgi?action=res&resno=7473&page=&lognum=&id=dixq&rln=7503


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

Name: はぃさぃ  ..ぴよぴよ(305ポイント)   Date: 2007/05/28(月) 01:15   No:8001 解決!     
Title: Re:分割?えらー    
返信ありがとうございました。

過去ログにも同じような質問があったんですね。
自分が探したときにはみつけられなかったです。。

それで、自分も同じような方法で修正して
動くようになりました。

大変助かりました、ありがとうございました。


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

Name: 管理人 [URL]  ..伝説のハッカー(346,700ポイント)   Date: 2007/05/28(月) 01:43   No:8006     
Title: Re:分割?えらー    
過去の記事は「検索」である程度検索出来るのでよければ使ってください。
しかしなかなか過去の記事を全部調べてから投稿するのは大変ですよね。
特にこの検索システムは一度に全て検索することは出来ませんし・・・。


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



Name: 羽流布  ..ぴよぴよ(102ポイント)   Date: 2007/05/27(日) 20:21   No:7982       
Title: バブルソートを使った問題です    
有名人の姓をローマ字でn人分(n≧10)入力し,これをバブルソートで辞書式に昇順で整列し,結果を表示するプログラムを作れ.最初にnの値を入力すること.バブルソートはvoid bubble(char name[], int n)として実現させる.ここで,配列nameは姓を収納した文字列とし,文字列の比較などにはライブラリ関数を用いてよい.

 という問題なのですが、ネットで調べてもポインタを使用したものばかりで参考になりません。
 現在、ここまで出来てます。

#include <stdio.h>

void bubble(char name[], int n);

// メイン関数が未完成です
int main(void) {
char data[10][20], name[20];
int i, j, n;

printf("何人分?:n = "); scanf("%d", &n);
printf("有名人の姓を入力してください。\n");
for (i = 0; i < n; i++) {
scanf("%s", data[i][]);
}
return (0);
}

// バブルソート関数
void bubble(char name[], int n) {
int j, k, tmp;

for (j = 0; j < n; j++) {
for (k = n - 1; k > j; k--) {
if (name[k] < name[k-1]) {
tmp = name[k];
name[k] = name[k-1];
name[k-1] = tmp;
}
}
}
return;
}

 期限が明日までなので、とても焦っています。
 よろしくお願いします。


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


Name: Hermit  ..入門者(3,494ポイント)   Date: 2007/05/27(日) 20:38   No:7983     
Title: Re:バブルソートを使った問題です    
>void bubble(char name[], int n)として実現させる
問題は、本当にそうなってますか?
普通に考えると、それではできないはずなので、
void bubble(char *name[],int) とかではないでしょうか。
それだったら、ネットで調べたポインタを使用した物が使えるはずです。


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

Name: 管理人 [URL]  ..伝説のハッカー(344,518ポイント)   Date: 2007/05/27(日) 20:44   No:7984     
Title: Re:バブルソートを使った問題です    
こんにちは。
羽流布さん。このお名前はなんと読むのでしょうか??

期限が明日までと言う事で、急いでいる事理解します。
今回はちまちま説明しても、焦る気持ちが先に出て落ち着いて考えられないでしょうから、
今回だけ答えを先にお伝えします。
答えを教えてしまう事はこの掲示板の規約違反ですが、今回はその規約をやぶってお答えします。

しかし、一つだけ条件があります。
この以下のプログラムを改善して出来る3つのプログラムを作成してください。
3つ私から宿題を出しますので、それをやってくださいね。
答えをお伝えする代わりにこれだけはやってください、お願いします。
3つといっても以下のサンプルを改良したらいいだけでそんなに大変なものではありません。

一度私の書いたサンプルをじっくりみてください。


#include <stdio.h>
#include <string.h>

void bubble(char name[10][20], int n) {
int j, k;
char tmp[20];

for (j = 0; j < n; j++) {
for (k = n - 1; k > j; k--) {
if (name[k][0] < name[k-1][0]) {
strcpy(tmp,name[k]);
strcpy(name[k],name[k-1]);
strcpy(name[k-1],tmp);
}
}
}
return;
}

int main(void) {
char data[10][20], name[20];
int i,n;

printf("何人分?:n = "); scanf("%d", &n);
printf("有名人の姓を入力してください。\n");

for (i = 0; i < n; i++)
scanf(" %s", data[i]);

bubble(data,n);

printf("\n");

for (i = 0; i < n; i++)
printf("%s\n", data[i]);

return (0);
}

実行結果

何人分?:n = 4
有名人の姓を入力してください。
bleave
ain
ziv
fish

ain
bleave
fish
ziv

 
 
 
課題1
バブルソートではなく、単純ソートを用いた並び替えをするプログラムに改良してください。

課題2
scanfでは問題があるため、getchar関数を用いて1文字ずつ配列に格納するようにしましょう。また様々な行うべきエラー処理を必要な箇所に追加してください。例えば数値が入力されなければならないところに文字を入力するとエラーメッセージを出して終了するなど。

課題3
大文字と小文字が混ざっていても、ABC順にソートされるように改良してください。


以上3つです。もちろんわからなければ聞いてください。
明日の提出はサンプルを出せばいいはずです。
課題頑張ってください。


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

Name: Hermit  ..入門者(3,537ポイント)   Date: 2007/05/27(日) 20:53   No:7985     
Title: Re:バブルソートを使った問題です    
void bubble(char name[], int n)
に反しているので、
うるふさんに問題をもう一回確認してもらってからの方が良くないですか?>管理人さん


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

Name: 管理人 [URL]  ..伝説のハッカー(344,575ポイント)   Date: 2007/05/27(日) 20:56   No:7986     
Title: Re:バブルソートを使った問題です    
あら・・仕様を確認せず、単に示されているプログラムを自己流に改良しただけになってしまっていました。
書き直しますね(_ _||)
Hermitさんご指摘ありがとうございます。

しかも名前2文字目以降もチェックする必要がありましたね。


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

Name: 管理人 [URL]  ..伝説のハッカー(345,004ポイント)   Date: 2007/05/27(日) 21:39   No:7989     
Title: Re:バブルソートを使った問題です    
>バブルソートはvoid bubble(char name[], int n)として実現させる.ここで,配列nameは姓を収納した文字列とし,

という仕様の条件がわかりません・・。
文字列のそれぞれのアドレスの集合ならわかるんですが・・。
しかもポインタ利用してはいけないんですよね、、。

文字列の先頭アドレスの集合ということでないと私にはわかりません・・。
受け取る値は
void bubble(char *name[10], int n) {
私のやりかたでは、こうでなくてはなりません・・・。
つまり私の考えでは
void bubble(char name[10], int n) {
コレでは無理だということです。

d配列を用意するとするといかにようにかけると思うのですがコレではダメなんですよね。
考えて見ますけど、他の方の回答を待った方が早いかもしれません・・(_ _|||)
(((サンプルではまだ辞書順にはなってないです







#include <stdio.h>
#include <string.h>

void bubble(char *name[10], int n) {
int j, k;
char *tmp;

for (j = 0; j < n; j++) {
for (k = n - 1; k > j; k--) {
if (*name[k] < *name[k-1]) {
tmp=name[k];
name[k]=name[k-1];
name[k-1]=tmp;
}
}
}
return;
}

int main(void) {
char data[10][20], name[20];
char *d[10];
int i,n;

printf("何人分?:n = "); scanf("%d", &n);
printf("有名人の姓を入力してください。\n");

for (i = 0; i < n; i++){
scanf(" %s", data[i]);
d[i]=&data[i][0];
}

bubble(d,n);

printf("\n");

for (i = 0; i < n; i++)//
printf("%s\n", d[i]);

return (0);
}

 
 


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

Name: 羽流布 [URL]  ..ぴよぴよ(218ポイント)   Date: 2007/05/27(日) 21:50   No:7991     
Title: Re:バブルソートを使った問題です    
 すいません、説明不足でした。問題は、

バブルソートは以下のアルゴリズムを組み込んだ関数 void bubble(char name[], int n) として実現せよ.
for (j = 0; j < n; j++) {
  for (k = n - 1; k > j; k--) {
    if (name[k-1]がname[k]より大) {
      name[k-1]とname[k]を交換する
    }
  }
}

ということになってます。

ポインタは習っていないので、使用してはマズいんですよ。
宿題なので使わなくても出来るようにはなってると思うんですけど……。


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

Name: 管理人 [URL]  ..伝説のハッカー(345,026ポイント)   Date: 2007/05/27(日) 22:29   No:7992     
Title: Re:バブルソートを使った問題です    
私の知識の中では

void bubble(char name[], int n) {
int j, k, tmp;
for (j = 0; j < n; j++) {
for (k = n - 1; k > j; k--) {
if (name[k] < name[k-1]) {
tmp = name[k];
name[k] = name[k-1];
name[k-1] = tmp;
}
}
}
return;
}

この関数を使っただけでソートする事は出来ません。
出来る事は出来るんですが、処理の面倒な形になってしまいます。
この関数は少しも変更してはいけないということなんでしょうか?


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

Name: 羽流布 [URL]  ..ぴよぴよ(251ポイント)   Date: 2007/05/27(日) 22:39   No:7993     
Title: Re:バブルソートを使った問題です    
はい、問題に示されているバブルソートの関数を使ってやらないとマズいです。

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

Name: Hermit  ..入門者(3,933ポイント)   Date: 2007/05/27(日) 23:04   No:7995     
Title: Re:バブルソートを使った問題です    
先生の設問の仕方のミスか、羽流布さんの問題の転記ミスだと思われるので、
勝手に変えた方がいいですね。
以下、管理人さんの最初のサンプルをちょっと変更しただけの物です。
バブルソートはあまり考えてませんが・・・
出題通りでソートできてるから多分いいんじゃないかな(^^;
ポインタはいっぱい使ってはいますが、

#include <stdio.h> 

#include <string.h>
void bubble(char name[][20], int n) {
int j, k;
for (j = 0; j < n; j++) {
for (k = n-1; k > j; k--) {
if (strcmp(name[k],name[k-1])<0) {
char tmp[20];
strcpy(tmp,name[k]);
strcpy(name[k],name[k-1]);
strcpy(name[k-1],tmp);
}
}
}
return;
}
int main(void) {
char data[10][20];
int i,n;
printf("何人分?:n = "); scanf("%d", &n);
printf("有名人の姓を入力してください。\n");
for (i = 0; i < n; i++)
scanf(" %s", data[i]);
bubble(data,n);
printf("\n");
for (i = 0; i < n; i++)
printf("%s\n", data[i]);
return (0);
}



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

Name: 羽流布 [URL]  ..ぴよぴよ(193ポイント)   Date: 2007/05/27(日) 23:37   No:7996 解決!     
Title: Re:バブルソートを使った問題です    
ありがとうございます!

とりあえず、これで提出することにします。

管理人さんが出題された問題は後日考えてみることにします。


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

Name: 管理人 [URL]  ..伝説のハッカー(345,351ポイント)   Date: 2007/05/28(月) 00:40   No:7998     
Title: Re:バブルソートを使った問題です    
>Hermitさん、

私には日本語が通じないのではないかと自分で思うくらい人の書き込みを見ていませんね・・。
Hermitさんの最初の書き込み
>>void bubble(char name[], int n)として実現させる
>問題は、本当にそうなってますか?
全然見ていませんでした・・。
何故これで出来るのか本当に悩んでましたが、先に答えだしていらっしゃいましたね(汗

2文字目以降の比較変更ありがとうございます。

羽流布さん、きっとその関数を参考に、または改良して使えということではないでしょうか?

よく考えてみてください。

「文字型」の変数には0~255までの数値しか入りません。
にもかかわらず、アドレスは255以上の値になります。
ですので、「文字列の場所」を表す事も出来ません。
また、1次元配列では文字列自体をいれることもできません。
つまり
「データの場所もあらわせず、本体自体も表せない」
という論理的に不可能だと言う事になります。

名前の最初の1文字だけを比較する事のみで来ます。
しかしそれでは辞書順になりません。

ですので、先生の出題ミスか、羽流布さんの把握ミスかどちらかだと思います。

私にもっと力があれば、みただけで不可能とか、可能とかわかるのでしょうが、力不足で回答があれこれなってすみませんでした(_ _|||)


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



Name: BAZZ  ..かけだし(1,875ポイント)   Date: 2007/05/25(金) 23:22   No:7945       
Title: エラーLNK2001    
main.obj : error LNK2001: 外部シンボル ""unsigned int count" (?count@@3IA)" は未解決です。
ball.obj : error LNK2001: 外部シンボル ""struct chara ball" (?ball@@3Uchara@@A)" は未解決です。
laser.obj : error LNK2001: 外部シンボル ""struct chara ball" (?ball@@3Uchara@@A)" は未解決です。
init.obj : error LNK2001: 外部シンボル ""struct chara ball" (?ball@@3Uchara@@A)" は未解決です。
graph.obj : error LNK2001: 外部シンボル ""struct chara ball" (?ball@@3Uchara@@A)" は未解決です。
enemy.obj : error LNK2001: 外部シンボル ""struct chara enemy" (?enemy@@3Uchara@@A)" は未解決です。
laser.obj : error LNK2001: 外部シンボル ""struct chara enemy" (?enemy@@3Uchara@@A)" は未解決です。
init.obj : error LNK2001: 外部シンボル ""struct chara enemy" (?enemy@@3Uchara@@A)" は未解決です。
graph.obj : error LNK2001: 外部シンボル ""struct chara enemy" (?enemy@@3Uchara@@A)" は未解決です。
laser.obj : error LNK2001: 外部シンボル ""struct chara laser1" (?laser1@@3Uchara@@A)" は未解決です。
init.obj : error LNK2001: 外部シンボル ""struct chara laser1" (?laser1@@3Uchara@@A)" は未解決です。
graph.obj : error LNK2001: 外部シンボル ""struct chara laser1" (?laser1@@3Uchara@@A)" は未解決です。
laser.obj : error LNK2001: 外部シンボル ""unsigned int time" (?time@@3IA)" は未解決です。
laser.obj : error LNK2001: 外部シンボル ""struct chara * laser" (?laser@@3PAUchara@@A)" は未解決です。

こんなのが死ぬほど出てくるのですが・・・
これはなんなんですか??w
前も同じような症状になって何かしてたら直ってたと思ったのですが
治し方忘れてしまって困りました。。。。

分割コンパイルしようとしてたら急に出てきたんですが
これの対処法はどうしたらいいんでしょう。

ヘッダファイルで変数をextern宣言したときは
どうすればよいのでしょうか??

kwsk教えてください
よろしくお願いします


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


Name: box  ..比類無きプログラマー(69,483ポイント)   Date: 2007/05/26(土) 00:02   No:7946     
Title: Re:エラーLNK2001    

> main.obj : error LNK2001: 外部シンボル ""unsigned int count" (?count@@3IA)" は未解決です。

変数countの実体を、main.c以外のファイルで定義してあると思います。
どんな風に定義してありますか?

以下の同じ種類のエラーについても、同じように調べてみてください。

> ヘッダファイルで変数をextern宣言したときは
> どうすればよいのでしょうか??

externは、「どこか別のファイルで実体を定義した変数をこっちのファイルで使う」という意味です。
どこか一ヶ所で、実体を定義する必要があります。

例えば、main.c で int 型の変数 hoge の実体を定義して、それを他のファイル(sub.c)で使うときは、
こんな方法があると思います。

【main.c】
#define MAIN
#include "externs.h"
// MAIN を define しているので、EXTERN が無効となり、hoge の実体を定義する

【sub.c】
#include "externs.h"
// MAIN を define していないので、EXTERN が extern に置き換わり、main.c で定義した hoge の実体を参照する

【externs.h】
#ifndef __EXTERNS_H // 多重インクルードの防止
#define __EXTERNS_H
#ifdef MAIN
#define EXTERN /* 何もしない */
#else
#define EXTERN extern
#endif /* MAIN */
EXTERN int hoge;
#endif /* !__EXTERNS_H */


> kwsk教えてください

kwskって何ですか?「詳しく」の省略記法か何かですか?


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

Name: BAZZ  ..かけだし(1,986ポイント)   Date: 2007/05/27(日) 12:00   No:7963 解決!     
Title: Re:エラーLNK2001    
返信遅くなってすいません

なるほど
やっと意味がわかりました

だからヘッダファイルでextern宣言して、
それをインクルードすると他のファイルで使われている変数が使えるのですか

Dixqさまがhファイルをインクルードするってことは
hファイルをインクルードした場所にhファイルのソースがそのまんまかかれるみたいなものだと
おっしゃってましたし

自己解決しました
ありがとうございましたm(__)m


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



Name: カルマ  ..ぴよぴよ(0ポイント)   Date: 2007/05/26(土) 18:10   No:7954 解決!       
Title: アライメント    
先ほど自力で解決できました!
ありがとうございました!


1,895ポイント を落としてしまった。


Name: box  ..比類無きプログラマー(69,574ポイント)   Date: 2007/05/26(土) 21:49   No:7959     
Title: Re:アラインメント    
1つの例だけでは、プログラムの仕様がよくわかりません。
一般化した内容を教えていただけますか?

それから、alignLen()とmin3()がどういった機能を持つ関数であるかということと、
引数と戻り値の意味も教えてください。


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

Name: カルマ  ..かけだし(1,395ポイント)   Date: 2007/05/26(土) 23:23   No:7961 解決!     
Title: Re:アラインメント    
 

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



Name: tower  ..入門者(3,628ポイント)   Date: 2007/05/22(火) 10:41   No:7818       
Title: 逆引きゲームプログラミングという本の話なんですが    
このHPとは関係の無い話で恐縮ですが、秀和システムのHPからサンプルをダウンロードできるんですが、
私のパソコンではコンパイルできないというトラブルがあって困っています。
推測される原因としてBCCのBinフォルダへパスが通っていないとあるんですが、
BCCが見当たらなくてどうしていいか分かりません。
どなたか分かる方がいたら教えてください。


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


Name: asd  ..初心者(8,311ポイント)   Date: 2007/05/22(火) 10:55   No:7820     
Title: Re:逆引きゲームプログラミングという本の話なんですが    
まずはその本を持っていないので推測でしか助言できませんが、
その本にBCCが付いていて、手順に従ってインストールしたと言うことでよろしいでしょうか?

それともいきなりコンパイルをしようとなさっているんでしょうか?

その本にBCCがくっついている場合BCCのインストール方法などについても事前準備として書かれているように思います。

検索してみるとBCCにはインストーラーがついており、
>インストールするディレクトリ(デフォルトでは C:\Borland\Bcc55\)を指定します。
とあるので、マイコンピューターなどでC:\BorlandにBCCがあるかどうか確認してみるとよいかもです。
(引用元:http://www6.plala.or.jp/mnagaku/cmag/ac20005/)

もしそのフォルダがあるようなら、そのフォルダのBINフォルダにパスを通せば無事にコンパイルできるかと思います。


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

Name: tower  ..入門者(3,486ポイント)   Date: 2007/05/22(火) 14:41   No:7822     
Title: 遅くなってすみません    
asdさんが教えて下さった通りBCCのインストール手順が本に書いてありました。
しかし、手順どおりにやったのに今度は、外部シンボル 'DirectSoundCreate8' が
未解決などの多数のエラーが出てしまいました。
これは、サポートページにも載っていないエラーです。
後、すみませんが、"パスを通す"というのも良く分からないです。
それができればあるいは解決するかも知れませんが、"パスを通す"とは
どうすることを言うんでしょうか?


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

Name: Lbfuvab  ..ぴよぴよ(574ポイント)   Date: 2007/05/22(火) 16:04   No:7824     
Title: Re:遅くなってすみません    
面倒と思われましたらベクターからsetbccと言うソフトをダウンロードしてはいかがでしょうか

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

Name: asd  ..中級者(9,321ポイント)   Date: 2007/05/22(火) 16:22   No:7825     
Title: Re:遅くなってすみません    
> asdさんが教えて下さった通りBCCのインストール手順が本に書いてありました。
> しかし、手順どおりにやったのに今度は、外部シンボル 'DirectSoundCreate8' が
> 未解決などの多数のエラーが出てしまいました。

インストールは出来たようでよかったです。
外部シンボルが未解決のエラーについてですが、何をコンパイルしようとしてそのエラーが出てきてます?
本についているサンプルでしょうか?
本を順に読んでいくとインストールの項目のあとに簡単なプログラムをコンパイルしてみようという形で
Hello,Worldと表示するプログラムが載っていることが多いですが、
そういった簡単なプログラムでも同様のエラーが起きますでしょうか?

もし、秀和システムのHPからダウンロードしたサンプルでのみエラーが発生する場合はどのサンプルなのか分かればより詳しく調べることも可能かと思います。

やたらと長くなってしまいましたが私の方でも調べてみます。

---
以下、パスを通すことについて説明していますが、エラーメッセージから読み取ると既にパスは通っていて(もしくはパスを通さなくてもよい状態になっている)コンパイラを呼ぶことは出来ているようですので、
以下は参考程度にお読みください。
(分かりづらい上に雑談の域に入りつつありますが^^;)

> 後、すみませんが、"パスを通す"というのも良く分からないです。
> それができればあるいは解決するかも知れませんが、"パスを通す"とは
> どうすることを言うんでしょうか?
簡単に言うと実行ファイル名だけ指定したときにそのファイルがある場所をあらかじめ指定しておくことをパスを通すと言います。
例えばC:\Borland\Bcc55\Bin\にbcc.exeというファイルがあったとして、
その場所と別の場所を参照している状態で実行ファイル名のみを指定する場合を考えて見ましょう。
通常はどの場所にある何というファイルと言う風に指定します。

c:\>C:\Borland\Bcc55\Bin\bcc.exe

こうすると「CドライブのBorlandフォルダの中のBcc55フォルダの中のBinフォルダにあるbcc.exe」を実行してくれます。ここでいう"CドライブのBorlandフォルダの中のBcc55フォルダの中のBinフォルダ"にあたるファイルの場所を示す住所のようなものをパスと呼びます。

ただ毎回C:\Borland\Bcc55\Bin\を打つのが面倒ですよね?
そこでC:\Borland\Bcc55\Binのパスを通しておくとファイル名だけで実行可能になります。

c:\>bcc.exe

例えば手紙を送るときには”都道府県、市町村、番地”などを順に書いていきますが、
郵便番号が書いてあれば番地だけでも届いたりしますよね?(番地だけで分からなかったら郵便番号から探してねってことです)

それと似たようにもしファイル名だけが指定されている場合は登録されているパス(通してあるパス)を順に調べていってくれます。(ファイルが見つからなかったら通されているパスを順番に探してねってことです)

実際にパスを通すには環境変数Pathをいじることになりますが、このあたりは今は触れないでおきます。
興味があったら調べてみてもいいでしょう。


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

Name: asd  ..中級者(9,411ポイント)   Date: 2007/05/22(火) 17:30   No:7830     
Title: Re:遅くなってすみません    
ゲームプログラミングだということと、Direct〜系の未解決エラーが出ていることから、
以下のページは参考になりませんでしょうか?

このページのゲームプログラミング導入のページ
http://homepage2.nifty.com/natupaji/DxLib/dxuse_bcc.html


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

Name: tower  ..入門者(3,645ポイント)   Date: 2007/05/22(火) 17:40   No:7831     
Title: ありがとうございます    
悩み疲れてPCを付けっ放しで寝てたようです。(^^;)
丁寧に説明して頂いてありがとうございますasdさん。
お陰で"パスを通す"の意味は分かりました。
しかし、通常はVisual Studio .NET 2003の方を使っているので
コマンドラインというものがいまいち使えないです(TT)
環境変数PAthとか分かりませんし。BCCを使ってる方には当たり前の事なんでしょうか?
とりあえず色々やってみます。
Lbfuvabさんもありがとうございます。
早速setbccをダウンロードしてみたのですが、パス/環境変数の設定先というところで
Windows95/98かWindowsNT/2000の二通りの選択肢があるんですが、XPの場合はどうすれば良いんでしょうか?


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

Name: asd  ..中級者(9,670ポイント)   Date: 2007/05/22(火) 19:36   No:7832     
Title: Re:ありがとうございます    
> 悩み疲れてPCを付けっ放しで寝てたようです。(^^;)
> 丁寧に説明して頂いてありがとうございますasdさん。
> お陰で"パスを通す"の意味は分かりました。

疲れているときは無理せず休むことも必要ですから問題ないかと^^
私も寝落ち(PCつけっぱなしで寝る)したりしますし^^;

> しかし、通常はVisual Studio .NET 2003の方を使っているので
> コマンドラインというものがいまいち使えないです(TT)
> 環境変数PAthとか分かりませんし。BCCを使ってる方には当たり前の事なんでしょうか?

最初の質問文にBCCとあったので、BCCをコンパイラとしているのかと思っていましたが、
今もVisualStudio2003でコンパイルしてエラーになってます?

そういうことであれば、一つ前の私のURLはBCC用なので以下のVisualStudio用のページを参照してみてください。

http://dixq.net/g/#0

未解決のエラーがDirect〜系なので、このページの導入の項目を行っておくと解決できるのではないかと
思います。

また、パスを通す作業はVisualStudioの様な統合開発環境がなく、コマンドライン上でコンパイルを行う際に必要な作業なので、統合環境であるVisualStudioを使う場合は特に気にしなくてOKです
(ほぼ自動でやってくれますので^^)

> Lbfuvabさんもありがとうございます。
> 早速setbccをダウンロードしてみたのですが、パス/環境変数の設定先というところで
> Windows95/98かWindowsNT/2000の二通りの選択肢があるんですが、XPの場合はどうすれば良いんでしょうか?

開発環境としてVisualStudio2003をお使いであれば、setbccを利用する必要はありません。

ずっとBCCを使ってコンパイルしていると思い込んでいただけに、見当はずれな助言をしてしまったことをお詫びします。
無事にコンパイルできるようになることを願いつつ(^-^)


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

Name: tower  ..入門者(4,439ポイント)   Date: 2007/05/24(木) 12:41   No:7897 解決!     
Title: 無題    
>ずっとBCCを使ってコンパイルしていると思い込んでいただけに、見当はずれな助言をしてしまったことをお詫びします。

いえいえ、こちらこそややこしくしてしまってすみませんでした。(__)

この本で紹介しているサンプルはBCCでないと実行できないらしくて。
それゆえに使い慣れないBCCに悪戦苦闘していたわけなので、BCCに関する助言は間違ってないですよ。
こんな初心者に親切にして頂いて本当に感謝しています。

しかし、元々は今やっている制作の参考になればと思い購入した本でしたが
時間ばかり掛かってしまっているようで、今、サンプルに時間を掛けるのも
マズイかも知れないと思い始めている今日この頃(^^;;)

とりあえず、今までのアドバイスや紹介して頂いたHPなどを参考にして
暇な時を使って頑張ってみます。

後、これ以上お手間を掛けて頂くのも申し訳ないので多少なりとも状況が進展したら
また、新規投稿にて質問させて頂こうと思います。

本当にありがとうございました(__)と、すみませんでした。(何となく自分が身勝手な気がして気まずくなってしまったので。)



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

Name: asd  ..中級者(11,151ポイント)   Date: 2007/05/25(金) 12:52   No:7929     
Title: Re:無題    
そんな身勝手だなんて^^;謝る事はないですよ。
1度ハマってしまうとなかなか抜け出せないときもありますので、焦らず行きましょう♪


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



Name: a_to_b  ..ぴよぴよ(209ポイント)   Date: 2007/05/24(木) 00:12   No:7873       
Title: ASCIIコードの文字をカウント    
textファイルの文字の頻度をカウントするプログラムを作っているのですが、
課題では文字の種類はASCIIコードに限られていて、改行コードなど特殊文字も
一つの文字として扱わなければならないのですが、その特殊文字の数え方が分かりません。
一応、自分でやってみたのですが印字な可能な文字しか数えることが出来ませんでした(^_^;)
よろしくお願いします。


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

int data[256];

void countLtr(FILE *fp);

int main(void)
{
FILE *fp;
int c;

//強制終了
if ((fp = fopen("test.txt", "r")) == NULL) {
fprintf ( stderr, "Can't open.\n" );
exit (2);
}
printf("test.txt\n");

countLtr(fp) ;

printf("---------\n");
for (c = 0; c <= 127; c++){
printf("%c:%d\t", c, data[c] );
}

fclose(fp);

return 0;
}

//ファイル中の英文字の出現頻度を調べる関数
void countLtr(FILE *fp)
{
int c;

while ((c = getc(fp)) != EOF)
if (c >= 0 && c <= 127){
data[c]++;
}
}


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


Name: Justy  ..ハッカー(103,127ポイント)   Date: 2007/05/24(木) 02:13   No:7877     
Title: Re:ASCIIコードの文字をカウント    
印字な可能な文字しか数えることが出来ませんで
 カウント処理はほぼ正しく出来ています。

 ほぼといったのは fopenのところで モード指定が "r"になっているので改行コードの一部が
変化・欠落する可能性があるからです。


 次に、表示時の問題があります。
 表示できない文字を %cで表示しようとして失敗しているようです。

 for文の中で、それが表示できるかどうか調べて、出来ない場合は例えば以下のように


if(isprint(c))
printf(" %2c : %d\t", c, data[c] );
else
printf("[%02x]: %d\t", c, data[c] );

 表示してみてはどうでしょうか。


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

Name: 管理人 [URL]  ..伝説のハッカー(335,139ポイント)   Date: 2007/05/24(木) 09:50   No:7883     
Title: Re:ASCIIコードの文字をカウント    
Justyさんのおっしゃる内容でこちらでプログラムを書いてみたところきちんと表示されました。

後、配列の中身が初期化されていないので、宣言時
int data[256];

int data[256]={};
と書けばよいのではないでしょうか。


表示文字かどうかを判別する関数
isprintf

#include <ctype.h>
をインクルードする必要があります。
http://www.google.co.jp/search?hl=ja&q=isprint&lr=
この辺参考にどうぞ。

後、ループの中身を

printf("%c:%d\t", c, data[c] );

から

if(isprint(c))
printf(" %2c : %d\t", c, data[c] );
else
printf("[%02x]: %d\t", c, data[c] );
if(c%8==7)
printf("\n");

に変えてやることで、正常にかつきれいに表示されるでしょう。

 
 


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

Name: box  ..比類無きプログラマー(68,985ポイント)   Date: 2007/05/24(木) 10:05   No:7885     
Title: Re:ASCIIコードの文字をカウント    

> 後、配列の中身が初期化されていない

data[]は関数の外側にあるので、明示的な初期化は特にいりません。
仮に明示的な初期化を行なう場合は、

> int data[256]={};

ではなく(コンパイル時に「初期化子がない」のようなエラーが出ませんか?)、

int data[256]={ 0 };

です。


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

Name: 管理人 [URL]  ..伝説のハッカー(335,412ポイント)   Date: 2007/05/24(木) 10:34   No:7889     
Title: Re:ASCIIコードの文字をカウント    
>data[]は関数の外側にあるので、明示的な初期化は特にいりません。

うあ、知りませんでした。すみません。

>ではなく(コンパイル時に「初期化子がない」のようなエラーが出ませんか?)、

エラーは出ませんし、

>int data[256]={};

これでも正常に初期化が出来ると思うのですが、間違っているのでしょうか?


/*sample1*/

#include <stdio.h>

void main(void){
int a[5];
printf("%d",a[0]);
}

実行結果

4214511


/*sample2*/

#include <stdio.h>

void main(void){
int a[5]={};
printf("%d",a[0]);
}

実行結果

0
 
 


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

Name: box  ..比類無きプログラマー(69,057ポイント)   Date: 2007/05/24(木) 10:54   No:7890     
Title: Re:ASCIIコードの文字をカウント    

> int a[5]={};

当方の環境(Windows2000, BCC5.5.1)では
コンパイル時に「式が必要」のエラーが出ます。

ほぼすべてのコンパイラを通すには、初期化するための
値を明記する方がよさそうです。



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

Name: 管理人 [URL]  ..伝説のハッカー(335,900ポイント)   Date: 2007/05/24(木) 10:57   No:7892     
Title: Re:ASCIIコードの文字をカウント    
なるほど、そこはコンパイラによるのですね。
今までずっとこれで何の警告も出ないのでこちらが正しいのだと思っていました。
また人のトピで逆に勉強させてもらいました。ありがとうございますm(_ _)m


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

Name: a_to_b  ..ぴよぴよ(158ポイント)   Date: 2007/05/24(木) 18:38   No:7919 解決!     
Title: Re:ASCIIコードの文字をカウント    
みなさんありがとうございます!
無事表示させることが出来ました。

isprintfというのは知らなかったので、
とてもタメになりました(^_^)


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



Name: やっかい者  ..かけだし(1,342ポイント)   Date: 2007/05/24(木) 09:54   No:7884       
Title: ウインドープロシージャーについて    
またまた、お邪魔します。
下記のように本来「ウインドープロシージャー」内に記述するペイント命令ですが、
1部を注釈にしてWinMain関数内で実行すると、描画できました。

本来「ウインドープロシージャー」内に置いてInvalidateRect(hwnd,NULL,FALSE );で
強制描画させるのが一般的ですが、私のような描画方法は間違っているでしょうか?

今のところ成功していますが、グラフィックカードとか他の環境では失敗するでしょうか?
テキスト描画の場合も含めてお尋ねします。

HDC hdc=GetDC(hwnd);
PAINTSTRUCT ps;
//case WM_PAINT:
//hdc = BeginPaint(hwnd, &ps);
HPEN hPen = CreatePen(PS_SOLID , 1 , RGB(255 , 0 , 0));//スタイル,太さ,色
HBRUSH hBrush = CreateSolidBrush(RGB(0 , 255 , 0));//塗りつぶしの色
SelectObject(hdc , hPen);
SelectObject(hdc , hBrush);
Rectangle(hdc , 0 , 0 , 100 , 100 );//塗りつぶし長方形
MoveToEx(hdc, 0, 0, NULL); LineTo(hdc , 100 , 100);//線
DeleteObject(hBrush);
DeleteObject(hPen);
//EndPaint(hwnd, &ps);
//break;



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


Name: keichan  ..上級者(23,758ポイント)   Date: 2007/05/24(木) 16:46   No:7911     
Title: Re:ウインドープロシージャーについて    
メッセージループ内で処理しているのでしょうか?

であるならば、本来描画する必要がないときにも描画処理をしてしまって無駄にCPUコストを食います。

Windowsプログラミングの"お作法"に則っていないのでお行儀が悪い。という所ではないでしょうか?


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

Name: やっかい者  ..かけだし(1,542ポイント)   Date: 2007/05/24(木) 18:32   No:7917 解決!     
Title: Re:ウインドープロシージャーについて    
keichan 様
早速の回答感謝します。
さて、もはや時代はDOSではないのですね・・・
Windowsは共同社会でした・・・
自分の処理スピードのみ追及していましたが、これからは共同社会の
一員としてマナーを守って住み良い住人になります。


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



Name: IK  ..ぴよぴよ(113ポイント)   Date: 2007/05/24(木) 11:58   No:7895       
Title: わからないんです。お願いします。    

2階の微分方程式

y''+2ky'+(w^2)y=0
y(0)=1
y'(0)=0

を連立1階常微分方程式に変換し、オイラー法を用いて解き、GLSCをつかって、横軸t、縦軸yのグラフにせよ。k < ω でのグラフと k > ω でのグラフを見比べて違いに関して考察せよ。hを色々と変化させると数値解はどう変化するかも調べてみよ。ただし、提出するプログラムでは、ω=1、h= 0.0001とすること。

提出プログラムの注意点:

* ω=1、h=0.0001とする。
* グラフにするtの範囲は[0,20]とし、yの範囲は[-2:2]とする。
* 抵抗kの値をターミナルから入力するプログラムにすること。(scanf関数)


という問題なのですが、私にはわかりません。どなたかやっていただけないでしょうか?
大変ずうずうしいとは思いますがどうかよろしくお願いします。



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


Name: バグ  ..熟練のプログラマー(40,611ポイント)   Date: 2007/05/24(木) 12:40   No:7896     
Title: Re:わからないんです。お願いします。    
ここは質問すり場所なので、課題の丸投げは禁止ですよ。

何が分からないのかを明確にすれば答えてくれる人が居るかもしれませんけど…。

全く分からないのであれば、先生に聞いた方が良いかと思います。


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

Name: 管理人 [URL]  ..伝説のハッカー(336,755ポイント)   Date: 2007/05/24(木) 12:53   No:7898     
Title: Re:わからないんです。お願いします。    
IKさん、初めまして、管理人です。
ここの質問掲示板はプログラミングについて、自分ではなかなか解決しない問題についてアドバイスを受ける、またはプログラミング等の情報交換をする場です。

誰かに問題をやってくれ、という場ではありません。

IKさんは、社会人さんか、学生さんか解りませんが、プログラミング方面の知識を深めるためにその方面に進まれたのでしょう。
どこかから出された問題はIKさんの知識を増やすために出されたものですし、誰かにやってもらったのでは全く意味がないのではないでしょうか。

プログラミングは大変難しいものです。苦手意識を持ってしまうことも理解します。
しかし、苦手意識という物は過剰に持ちすぎている場合がほとんどです。
IKさんのスキルを存じませんが、一つ必ずいえることは、一つ一つ着実にやっていけばどんな課題でも必ず出来ると言うことです。
手元にプログラミングの入門書はありますか?もしないのであればウェブで参考となるサイト
http://www.google.co.jp/search?hl=ja&q=%EF%BC%A3%E8%A8%80%E8%AA%9E%E3%80%80%E5%85%A5%E9%96%80&lr=
を見ることが出来る環境にありますか?
これらを熟読し、実際に自分でプログラムを書いてコンパイルしてみて勉強し、
わからない部分を人に聞きながら一つずつわからないところを埋めていきましょう。
必ず課題は解けます。

IKさん、一緒に課題をやってみましょう。

まず、最初にどこまでわかっていて、どこがわかりませんか?
またIKさんはどの辺までプログラムを理解していますか?

例えばif,for文などは理解している、自分で関数化などはまだ出来ない、ポインタはまだわからない、配列は用意でき、内容は理解しているなど・・。

ただGLSCは私も使ったことがなく、よく知りません。
今探してみましたけど、これはどこからダウンロード出来るんでしょう?
使い方はウェブに色々あるようですね。

http://sparrow.math.ryukoku.ac.jp/~junta/edu/nc2000/glscman/glscm.html#wait_mouse
http://www.math.meiji.ac.jp/~mk/labo/howto/intro-glsc/

とりあえず先にprintfで計算結果を出力できるようにしてみてはいかがでしょう。


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

Name: 管理人 [URL]  ..伝説のハッカー(336,827ポイント)   Date: 2007/05/24(木) 12:58   No:7899     
Title: Re:わからないんです。お願いします。    
数学的には解けるのでしょうか?
まず、紙に書いて数学的に解けなければプログラムも出来るはずないので、もしそれがまだならそちらを先にお願いします。

出来たら数式の提示お願いします。


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



Name: Sena  ..ぴよぴよ(481ポイント)   Date: 2007/05/23(水) 17:26   No:7865       
Title: ファイル指定について    
質問よろしくお願いします。

ファイルに読み書きする際に、一般的になぜコマンドラインからファイルを
指定するのでしょうか??

また、ソースに直接ファイルを指定するとは何が違うのでしょうか??


よろしくお願いします!!


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


Name: Hermit  ..入門者(3,321ポイント)   Date: 2007/05/23(水) 19:22   No:7867     
Title: Re:無題    
>ファイルに読み書きする際に、一般的になぜコマンドラインからファイルを
>指定するのでしょうか??
色々ファイルを指定できるので、いろんなパターンの物が同じ実行ファイルで選択できるからです。

>また、ソースに直接ファイルを指定するとは何が違うのでしょうか??
コンパイルしたソースに指定されたファイルしか選択肢がないと言うだけです。
プログラムの設定用ファイルなどは、この様に直接ソースで指定している物も良く有ります。


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

Name: 管理人 [URL]  ..伝説のハッカー(334,268ポイント)   Date: 2007/05/23(水) 20:04   No:7868     
Title: Re:無題    
>>また、ソースに直接ファイルを指定するとは何が違うのでしょうか??

例えば、Senaさんが作成された実行ファイルが製品化されたとしましょう。

製品化されたソフトの形はコンパイル済みの実行ファイルですよね。
まさかソースコードの状態で配布して、ユーザーでそれぞれコンパイルしてくれなど言いません。

その時、ユーザーはmemory.JPGというファイルを読み込ませたいかも知れませんし、flower.PNGというファイルを読み込ませたいかもしれません。
この時

fopen("ryoko.JPG", "r");

こんな風にコードを書いてしまったのではこの名前のファイルしか読み込めません。
ユーザーに「この名前のファイルにしてから読み込ませてください」というのは現実的では有りません。
しかし

int main(○○){
fopen(○○, "r");

このように書いておけばコマンドラインから受け取ったファイル名を開く事が出来ますので、
あらゆる名前のファイルが読み込めます。

もし自分しか使わないもので、簡単なそのファイルしか利用する機会のないプログラムなら直接書いてもどちらも同じ事だといえるでしょうね。


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

Name: Sena  ..かけだし(1,012ポイント)   Date: 2007/05/23(水) 21:27   No:7870     
Title: 無題    
なるほどぉ☆
言われて見れば、便利性がかなりアップしますね!!

>製品化されたソフトの形はコンパイル済みの実行ファイルですよね。
>まさかソースコードの状態で配布して、ユーザーでそれぞれコンパイルしてくれなど言いません。

>その時、ユーザーはmemory.JPGというファイルを読み込ませたいかも知れませんし、flower.PNGというファイ>ルを読み込ませたいかもしれません。
>この時

>fopen("ryoko.JPG", "r");

>こんな風にコードを書いてしまったのではこの名前のファイルしか読み込めません。
>ユーザーに「この名前のファイルにしてから読み込ませてください」というのは現実的では有りません。

そうですよね!!!
ユーザーのコトを考えると、よくわかります。勉強になりました。

Hermit
管理人さん
ありがとうござぃます。

もう1つ質問なのですが、ファイルを読み込む時や、書き込む時に

"r"
"w"と、

バイナリーの

"br"
"bw"

を使い分ける時の違いは何でしょうか??

どういう時に"r""w"を使用して、
どういう時に"wr""wr"を使用するのでしょうか?

参考書やサイトを見てもイマイチ、ピンとこなくて・・

すいませんがよろしくお願いします!!


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

Name: 管理人 [URL]  ..伝説のハッカー(334,291ポイント)   Date: 2007/05/23(水) 22:53   No:7872     
Title: Re:無題    
この辺ごらんいただくと解るかもしれません。
http://www9.plala.or.jp/sgwr-t/c/sec17.html

http://www.google.co.jp/search?hl=ja&lr=&pwst=1&q=fopen+%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA&suggest=5&sa=X&oi=cjkrefinements&ct=result&cd=6


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

Name: Sena  ..かけだし(1,105ポイント)   Date: 2007/05/24(木) 10:25   No:7887     
Title: Re:無題    
管理人さんが紹介してくださったサイトを拝見させて頂きました。

要するに、数字が含まれている時は”バイナリーファイル”とし、
文字列のみの時は”テキストファイル”と考えればいいのでしょぅか??



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

Name: 管理人 [URL]  ..伝説のハッカー(336,277ポイント)   Date: 2007/05/24(木) 11:02   No:7893     
Title: Re:無題    
数字が含まれると言う意味がよくわかりませんが、

テキストファイルというものは、文字コードで扱える範囲内の文字コードで出来ているファイルです。
そのためこれに書かれている情報は全部文字に置き換えることが出来るので、テキストエディタで正常に表示できます。

一方でバイナリファイルは音声データや画像データ等を収めた文字コードの扱える以外のデータを含んでいるため、テキストエディタで開こうとすると意味不明な記号の羅列となるはずです。
何かのバイナリファイルを
テキストエディタで開いてみるとよくわかります。
バイナリファイルを開くときは、バイナリエディタを使います。私は
http://www.zob.ne.jp/~c.mos/soft/bz.html
普段これを使っています。(普段開けないようにしてあるファイルもここをいじればひらけたりして)

要するに

テキストファイル=文字で表せるデータの集合
バイナリファイル=文字で表せないデータを含むデータの集合

ということです。


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

Name: Sena  ..かけだし(1,275ポイント)   Date: 2007/05/24(木) 11:09   No:7894 解決!     
Title: Re:無題    
>一方でバイナリファイルは音声データや画像データ等を収めた文字コードの扱える以外のデータを含んでいるため、
>テキストエディタで開こうとすると意味不明な記号の羅列となるはずです。
>何かのバイナリファイルを
>テキストエディタで開いてみるとよくわかります。

ありますね!!あれがバイナリーファイルですかぁ。
わかりやすく説明して頂いてありがとうございます☆

とてもわかりやすかったです。

ありがとうございました!!


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



Name: sub  ..初心者(5,551ポイント)   Date: 2007/05/24(木) 00:56   No:7875       
Title: ループ    
質問させていただきます。

経過分を入力してそれが今年のはじめから数えると今年の何月何日何分になっているかを表示するプログラムです。



#include <stdio.h>

int whattime(int minute, char**, char**);

int main(void)
{
int minute,Day;
char *Month,*Hhmm;

printf("経過分入力:");
fflush(stdout);
scanf("%d", &minute);

Day = whattime(minute, &Month, &Hhmm);
if(Day<0){
return (0);}

printf("%s %d %s\n", Month, Day, Hhmm);

return(0);
}

int whattime(int minute, char **month, char **hhmm)
{
int day, h, d, m ;
char ch1[2], ch2[2], ch3[2], ch4[2];
static char *pm;
static char time[6];
int mday[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
static char *name[12] = {"January", "Febrary", "March", "April", "May", "Jun", "July", "Augast", "September", "Octorber", "Novenber", "December"};

m = minute % 60;
minute -= m;
minute = minute / 60;

h = minute % 24;
minute -= h;

d = minute / 24;


if(d>=365){
printf("Error!!\n");
return (-1);
}

sprintf(ch1, "%d", h/10);
sprintf(ch2, "%d", h%10);
sprintf(ch3, "%d", m/10);
sprintf(ch4, "%d", m%10);
sprintf(time, "%s%s:%s%s", ch1,ch2,ch3,ch4);
pm=time;



// ここがわかりません・・・

*hhmm=pm;

return (day);
}


↑のような状況までは友達に教えてもらいつつなんとかできたのですが・・・

dayの数値と月の名前を出す段階でどのようなループにすればday、月の名前をだすことができるのかわかりません。

ifを12個使えばできると思うのですが、それだと見栄えが悪いのでこれはやめておきたいと思うのです・・・

教えていただけないでしょうか?よろしくお願いします。
他にも間違いがあれば教えていただけるとうれしいです。




あとほんとに全く関係ないのですが、友達はどんどん理解していっていて私だけが置いてけぼり食らっているような感じがあります・・・
地道にやっていけば理解できるようになるのでしょうか?


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


Name: sub  ..初心者(5,572ポイント)   Date: 2007/05/24(木) 08:29   No:7879 解決!     
Title: Re:ループ    
自己解決できそうです!

どうももうしわけありませんでしたー^^;


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

Name: 管理人 [URL]  ..伝説のハッカー(334,946ポイント)   Date: 2007/05/24(木) 09:39   No:7882     
Title: Re:ループ    
昨日はバイトで深夜になってしまい、答えられずすみませんでした。(_ _|||)
ご自分で解決出来ればそれに越した事はないですね、頑張ってください。

何かつまってしまったらまたお越し下さい。


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



Name: 素人  ..初心者(7,318ポイント)   Date: 2007/05/22(火) 00:47   No:7811       
Title: BCC Developer について    
 初めまして。
 本日貴サイトを発見し、私もC++を勉強してみようと思い早速インストールを開始しました。
 ダウンロードから設定の方法まで親切に記載されていたので、安心してインストール作業を
進めていきました。
 ところが、最初のテストプログラム(画面に点を表示するもの)を起動する段階でエラーが
続出し、作業はストップしてしまいました。
 エラーの内容は・・・

エラー E2209 D:\・・・\DxLib.h 40: インクルードファイル 'windows.h' をオープンできない
エラー E2209 D:\・・・\DxLib.h 41: インクルードファイル 'stdio.h' をオープンできない
エラー E2209 D:\・・・\DxDirectX.h 806: インクルードファイル 'windows.h' をオープンできない
エラー E2209 D:\・・・\DxDirectX.h 807: インクルードファイル 'mmreg.h' をオープンできない
エラー E2209 D:\・・・\DxDirectX.h 808: インクルードファイル 'unknwn.h' をオープンできない
エラー E2303 D:\・・・\DxDirectX.h 847: 型名が必要
エラー E2139 D:\・・・\DxDirectX.h 847: 宣言に ; がない
エラー E2303 D:\・・・\DxDirectX.h 848: 型名が必要
エラー E2238 D:\・・・\DxDirectX.h 848: 'tagD_DSCAPS::DWORD' の宣言が複数見つかった
エラー E2344 D:\・・・\DxDirectX.h 847: 一つ前の 'tagD_DSCAPS::DWORD' の定義位置
エラー E2139 D:\・・・\DxDirectX.h 848: 宣言に ; がない
エラー E2303 D:\・・・\DxDirectX.h 849: 型名が必要
エラー E2238 D:\・・・\DxDirectX.h 849: 'tagD_DSCAPS::DWORD' の宣言が複数見つかった
エラー E2344 D:\・・・\DxDirectX.h 848: 一つ前の 'tagD_DSCAPS::DWORD' の定義位置
エラー E2139 D:\・・・\DxDirectX.h 849: 宣言に ; がない
エラー E2303 D:\・・・\DxDirectX.h 850: 型名が必要
エラー E2238 D:\・・・\DxDirectX.h 850: 'tagD_DSCAPS::DWORD' の宣言が複数見つかった
エラー E2344 D:\・・・\DxDirectX.h 849: 一つ前の 'tagD_DSCAPS::DWORD' の定義位置
エラー E2139 D:\・・・\DxDirectX.h 850: 宣言に ; がない
エラー E2303 D:\・・・\DxDirectX.h 851: 型名が必要
エラー E2238 D:\・・・\DxDirectX.h 851: 'tagD_DSCAPS::DWORD' の宣言が複数見つかった
エラー E2344 D:\・・・\DxDirectX.h 850: 一つ前の 'tagD_DSCAPS::DWORD' の定義位置
エラー E2139 D:\・・・\DxDirectX.h 851: 宣言に ; がない
エラー E2303 D:\・・・\DxDirectX.h 852: 型名が必要
エラー E2238 D:\・・・\DxDirectX.h 852: 'tagD_DSCAPS::DWORD' の宣言が複数見つかった
エラー E2228 D:\・・・\DxDirectX.h 852: エラーあるいは警告が多すぎる

・・・というものでした。
現在の環境はWindows2000 SP4、Borland C++ Compiler 5.5 を使用しています。
はじめからつまずいてしまい、恥ずかしいのですが、これからCを勉強していきたいと思っていますので
是非解決方法を教えてください。よろしくお願いします。


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


Name: 管理人 [URL]  ..伝説のハッカー(331,774ポイント)   Date: 2007/05/22(火) 02:11   No:7812     
Title: Re:BCC Developer について    
DXライブラリを使用するにはある程度の設定が必要です。

なお、コンパイラはマイクロソフトのVisualStudioが便利ですよ。

http://www.microsoft.com/japan/msdn/vstudio/express/

こちらから無料でダウンロード出来ます。
VisualStudioExpressEditionです。
VisualStudio2005などの有料版を使えば設定は何も必要ありません。

無料版を使用する場合は、DXライブラリ本家で設定方法を見てください。
Borlandがいいという場合、こちらも説明がありますので、お好きな方をご覧下さい。

http://homepage2.nifty.com/natupaji/DxLib/dxuse.html


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

Name: バグ  ..熟練のプログラマー(40,426ポイント)   Date: 2007/05/22(火) 08:22   No:7813     
Title: Re:BCC Developer について    
雑談ですm(__)m

個人的には、VisualStudioよりは、BCC Developerの方がシンプルで好きかな?

ただ、前者のメンバ表示機能はコーディングしている時に、非常に有り難いんですよね。後者にあの機能があれば最高なんだけどなぁ…。


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

Name: 管理人 [URL]  ..伝説のハッカー(332,090ポイント)   Date: 2007/05/22(火) 08:43   No:7815     
Title: Re:BCC Developer について    
あ、Borland® C++Compilerと間違いましたm(_ _)m

ただBCC Developerの設定方法は本家DXライブラリになく、
ウェブで配布されているサンプルもVSで構築されたものの方が多いように思うので、
最初のうち使用するにはVSの方が便利なように思うのですが、どうでしょうか。

Developerは使ったことがないため、わからないので、おそらくバグさんのおっしゃるとおりBCCの方が使いやすいのだとは思いますが、何を求めるかでわかれそうですね。


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

Name: 素人  ..初心者(7,529ポイント)   Date: 2007/05/23(水) 01:09   No:7848 解決!     
Title: Re:BCC Developer について    
 早速の回答ありがとうございます。
 あれからBCC Developerを何度か試してみたのですが、やはりどうしても動きませんでした。
 結局どうにもならなかったので、諦めてVisualStudioExpressEditionを導入したところ
あっさりと動きました(何故?)。
 なんとなく悔しさが残りますが、これからはVisual C++で頑張ろうと思います。

 これまで、プログラミングはMSX BasicやZ80のマシン語、Visual Basic6.0しか使ったこと
がないので、全くの開拓です。


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

Name: バグ  ..熟練のプログラマー(40,572ポイント)   Date: 2007/05/23(水) 05:34   No:7851     
Title: Re:BCC Developer について    
VB6.0の環境があるのならば、VC++6.0もいいかもしれませんよ(^-^)

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

Name: 素人  ..初心者(7,698ポイント)   Date: 2007/05/23(水) 11:47   No:7854     
Title: Re:BCC Developer について    
実は、少し前までVB6.0を使っていたのですが、事情があって一度アンインストールしてしまいました。
ところが、それ以来インストールしようとしても受付けてもらえなくなってしまいました。

「16ビット MS-DOS サブシステム:config.nt は MS-DOS および
      Microsoft Windows アプリケーションを実行するのに適していません」

このエラーを解決するために、ネットを調べまくり、configやcommandを修正したりしたのですが、全く効果が
ありませんでした。
一度HDDをフォーマットするか、OSをダウングレードしてみようかとも思いましたが、思いとどまり、これを切
欠として新しい言語に挑戦しようと考え直しました。


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



Name: 山田弘幸  ..ぴよぴよ(7ポイント)   Date: 2007/05/22(火) 10:24   No:7816       
Title: C言語でクリーンアップコード?    
はじめまして、山田と申します。
C++いじり初めて半年がたった初級者です。よろしくお願いします!
Pascalだと、

obj := THoge.create;
try
if IsValid then
exit;
if IsHoge then
exit;

Showmessage('hoge');
finally
obj.free;
end;

というような、クリーンアップコードというのがありますがCではないですよね。
どうも不便でしかたありません。そこんとこをうまく書くのが上級者なんですが、
みなさんは、関数内で最後に必ず実行しなければならないコードがある場合は
どのようにされてますか?

(関数の最後にFINALLY:などとラベルを置こうかとかも考えました。
が、goto文を使うと、その後にSTLのiteratorを使うとコンパイルできなかったりしました。
あとは別関数に切り出すとかですかね??)



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


Name: YuO  ..かけだし(2,301ポイント)   Date: 2007/05/22(火) 10:36   No:7817     
Title: Re:C言語でクリーンアップコード?    
CなんだかC++なんだか……。


C++の例外機構にはtry/catchはあるもののfinallyはありません。
しかし,デストラクタによる確定的な破棄が保障されています。

これらの特性から,C++では広義のスマートポインタを使ってリソースを管理します。
「RAII」あたりをキーに調べてみると良いでしょう。


で,C言語には例外機構がないですから,setjmp/longjmpを除いて,関数からの脱出方法はreturnのみになります。
よって,returnの箇所でgotoする方法で,十分なクリーンアップ処理が可能です。


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

Name: 山田弘幸  ..ぴよぴよ(51ポイント)   Date: 2007/05/23(水) 02:00   No:7850 解決!     
Title: Re:C言語でクリーンアップコード?    
返信ありがとうございました。

なるほど!
setjmp/longjmpなど、トリッキーな情報ありがとうございました!
なんとか頑張ってみます!


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



Name: いっちゃん  ..ぴよぴよ(129ポイント)   Date: 2007/05/23(水) 00:26   No:7844       
Title: BorlandC++ DXライブラリの導入について    
http://homepage2.nifty.com/natupaji/DxLib/dxuse_bcc.html
で手順8で「プロジェクト」→「メイク」としたところ、

Fatal: ファイル MSACM32.LIB が開けません

と表示されました。ソースコードは自分で手順7のとおりに記入したソースコード、手順7をコピーしたソースコード共に同じ結果となりました。
ネットで調べてもMSACM.LIBの内容がわからなかったので自作もできません。
このエラーを無くすにはMSACM.LIBを作成する必要があると思うのですが、内容を教えてもらえませんでしょうか。


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


Name: いっちゃん  ..ぴよぴよ(277ポイント)   Date: 2007/05/23(水) 00:44   No:7845     
Title: Re:BorlandC++ DXライブラリの導入について    
削除キー入力をしなかったので削除ができません。

bcc32.cfgとilink32.cfgのパス入力をやり直したところ、うまくいきました。
ご迷惑おかけしました。


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

Name: 管理人 [URL]  ..伝説のハッカー(333,993ポイント)   Date: 2007/05/23(水) 00:51   No:7846     
Title: Re:BorlandC++ DXライブラリの導入について    
ここの掲示板は私以外削除出来ない設定にさせてもらっています。
というのも、解決したら、回答してくださった方々の記事も全て消して去ってしまう方が以前いらっしゃったため、このような設定にさせてもらいました。

また、無用なトピに見えても、このように自己解決された方法も書いていただければ過去トピとして参考になると思いますので、このまま残させてください。

DXライブラリの楽しさ是非堪能してくださいね☆


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



Name: カイ  ..ぴよぴよ(34ポイント)   Date: 2007/05/18(金) 07:25   No:7677       
Title: C言語とLinux Unix    
みなさんはじめまして!C言語を勉強されてると思うのですが、LinuxやUnixも使えるように勉強してますか?

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


Name: asd  ..初心者(6,474ポイント)   Date: 2007/05/18(金) 10:31   No:7679     
Title: Re:C言語とLinux Unix    
質問の意図が不明ですが、C言語をやっているとLinuxやUnixが使えるわけではないですし。
何が聞きたいんでしょう?


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

Name: ひろゆき  ..ぴよぴよ(238ポイント)   Date: 2007/05/18(金) 21:31   No:7689     
Title: Re:C言語とLinux Unix    
LinuxなどはCでできているというだけで、別にLinuxができるからCもできるというわけではありません。逆にWindowsの方が個人的な意見としては統合開発環境などそろってますのでいいとおもいます。Linuxは「CでOS作るとこんなんになるんだな」ぐらいでいいと思いますよ。

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

Name: 管理人 [URL]  ..伝説のハッカー(322,834ポイント)   Date: 2007/05/18(金) 21:41   No:7690     
Title: Re:C言語とLinux Unix    
きっと質問者さんは、大学などのC言語の演習で、Linuxを使用されたんじゃないでしょうか?
windowsと違ってコマンド入力などで操作する機会の多いLinuxは専門性の高いOSのようにお感じになったんではないかと思います。

そこでC言語を勉強している人はLinuxなんかもちょちょいと操作してしまうのかな??
という疑問が生まれたのではないでしょうか。
全然違ってたらすみません。

私もはじめてLinuxを触った時そんな印象を受けたので。
私の知っている中では何か専門的に深い知識を有している方は色んなOSを使用でき、
しかもブラックボックスだらけのwindowsは毛嫌いするというイメージを持っています。
マサチューセッツの教授の講義を何度か聞いたことあるのですが、
教授のまわりの人間はみなwindowsは使わないとか。
それは確かに一部の人かもしれませんし、windowsしか使わないけど、すごく詳しい人もいらっしゃるでしょう。

プログラム関係に深い知識を有している人はいろんな環境を使いこなせる傾向にあるということはいえると思います。
私は現在大学院生なんですが、「うちの研究室はwindows使用禁止」という研究室もあります。
そこでは皆linuxを使っています。
私はwindowsを主に使います。もう今まで慣れてしまってますから・・。

え〜何かまとまらない回答になってしまいましたけど、色んな環境を経験する事は大事だと思います。


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

Name: asd  ..初心者(8,039ポイント)   Date: 2007/05/22(火) 10:48   No:7819     
Title: Re:C言語とLinux Unix    
私はWindowsから使い始めた人間ですが、Windows3.1時代だったので
DOSコマンドを使うことも多く、初めてFreeBSDを使ったときもさほど違和感なく使えました。

ちなみにC言語をやり始めたのはその後からです。
なのでC言語に関係なくLinux/Unixは使えていたということです。

最近はWindowsGUIで完全に慣れてしまってパスの概念などが分かっていない学生さんも多いようで
ちょっと寂しいなぁと思ったりします。

一応LinuxをWindowsをデュアルで入れてありますがここ最近Linux起動してないなぁ(遠い目)


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

Name: バグ  ..熟練のプログラマー(40,538ポイント)   Date: 2007/05/22(火) 19:58   No:7833     
Title: Re:C言語とLinux Unix    
私が初めて触れたOSは、FM−TOWNSという富士通のPCのTOWNS−OSというOSで、一応(笑)、GUIでした。

その後、高校時代に授業でMS−DOSを初めて見たので、『なんて不親切なOSなんだ』と思いましたよ(;^_^A

ちなみに、仕事ではWINDOWSばかりです。


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

Name: Lbfuvab  ..ぴよぴよ(593ポイント)   Date: 2007/05/22(火) 22:38   No:7839     
Title: Re:C言語とLinux Unix    
そう言えば、昔お世話になった人がFreeBSDを使っていたのですが、
英語だったので見た瞬間アレルギーが出ました(笑
まぁ、Windowsはなかなか初心者には使いやすくていいと思うんですけどね


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



Name: バグ  ..熟練のプログラマー(40,350ポイント)   Date: 2007/05/19(土) 21:02   No:7722       
Title: .NETについて    
.NETについての質問なのですが、VS2005でマネージドアプリを作成した場合、.NETがインストールされているPCならば実行ファイルの移動のみで動くものなのでしょうか?
たとえば、Windows上で組んだソフトがMacOS上で、そのまま動くかどうかという事なのですが…どうなんでしょう?(?_?)


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


Name: YuO  ..かけだし(1,348ポイント)   Date: 2007/05/19(土) 21:26   No:7725     
Title: Re:.NETについて    
MacOS上で,ということだと,MONO 1.2.4あたりをインストールすれば動くと思われます。
ただし,アンマネージコードへの直接アクセスが無いことが前提ですが。


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

Name: バグ  ..熟練のプログラマー(40,427ポイント)   Date: 2007/05/22(火) 08:26   No:7814     
Title: Re:.NETについて    
なるほど、制約はあるものの、それさえ守っていれば基本的には動くと考えてよさそうですね。
ありがとうございました(^O^)


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



Name: 徹夜  ..ぴよぴよ(39ポイント)   Date: 2007/05/21(月) 13:21   No:7771       
Title: 学校の課題です    
はじめまして。C言語初心者です。
問題はキーボードから2つの整数を入力(a、bとする)して、(a<=b)ならば1ずづ増加させる
(a>b)ならば1ずつ減少させるプログラムを作るということです。
自分でこう書いてみたのですが、1ずつ増加することはできてもelse で減少させることができません。else文を教えてください。そもそもこれが間違っていたら教えてください。
    int a,b;
printf("a=");scanf("%d",&a);
printf("b=");scanf("%d",&b);
int i=a;
while(i<=b){printf("i=%d\n",i);if(a<=b)i=i+1;}


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


Name: 管理人 [URL]  ..伝説のハッカー(329,153ポイント)   Date: 2007/05/21(月) 14:07   No:7772     
Title: Re:学校の課題です    
徹夜さん、こんにちは。

>問題はキーボードから2つの整数を入力(a、bとする)して、(a<=b)ならば1ずづ増加させる

とありますが、何を増加させるんでしょうか?
プログラムから拝見するに、aの値をiにいれてiを増加させたいようですが、後々aの値を使用しないのならaを増減させた方がわかりやすいのではないでしょうか?

もしiに入れる必要がないのであればいかのようにかけます。


#include <stdio.h>

int main( void ){
int a,b;
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
while(a!=b){
printf("a=%d b=%d\n",a,b);
if(a<=b)
a++;
else
a--;
}
printf("a=%d b=%d\n",a,b);
return 0;
}

 
 
上記プログラムを実際にコピーして実行してみてください。
a++;
というのは、aの値を1つ増やす
a--;
というのは、aの値を1つ減らす
と言う事です。

elseの使い方を教えてくださいと言う事ですが、
この辺の事は入門書にはもちろん、ウェブにも沢山説明がかかれています。
C言語入門系のサイトをみてまわって勉強しましょう。

たとえば
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
3-2 単一分岐
を見ればifとelseの書き方がわかります。

もしまだ何かわからなければ言ってください。


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

Name: 徹夜  ..ぴよぴよ(58ポイント)   Date: 2007/05/21(月) 23:15   No:7803     
Title: Re:学校の課題です    
ありがとうございました。質問がわかりにくくてすみませんでした。

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

Name: 徹夜  ..ぴよぴよ(81ポイント)   Date: 2007/05/21(月) 23:15   No:7804 解決!     
Title: Re:学校の課題です    
解決押すの忘れていました。
本当にありがとうございました


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

Name: 管理人 [URL]  ..伝説のハッカー(331,551ポイント)   Date: 2007/05/22(火) 00:22   No:7810     
Title: Re:学校の課題です    
勝手にiをaに変更してしまいましたけど、よかったのでしょうか(?_?
解決なさったようでよかったです、
頑張ってください☆


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



Name:  ..中級者(13,508ポイント)   Date: 2007/05/20(日) 21:06   No:7745       
Title: 構造体    
またまたやってきました。
構造体ついての質問です。。

「学生の名前と国語、英語、数学の3科目の点数、合計点を保存するためのデータ構造を設計しなさい型名は StdData とすること。また、キーボードから人数と、人数分のそれらのデータを StdData 型の配列に格納し、配列の要素のデータを順に出力するプログラムを作成しなさい。」
こんな問題です。

こんな実行結果になります。


The number of students: 7
1: kim 82 57 74
2: otsuki 78 92 65
3: atsumi 88 64 83
4: hachisu 63 74 69
5: miyazawa 76 57 79
6: yokomori 95 89 81
7: nakamiti 73 64 92
name | jpn eng math| sum
kim | 82 57 74 | 213
otsuki | 78 92 65 | 235
atsumi | 88 64 83 | 235
hachisu | 63 74 69 | 206
miyazawa | 76 57 79 | 212
yokomori | 95 89 81 | 265
nakamiti | 73 64 92 | 229 」



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


Name:  ..中級者(14,250ポイント)   Date: 2007/05/20(日) 21:10   No:7746     
Title: Re:構造体    
私の作ったプログラムです。
まだ、合計がでてなかっtりと未完成なのですが・・・・・


#include <stdio.h>

struct stddata{
char student_name[100]; /*生徒の名前*/
int jpn; /*国語の点数*/
int eng; /*英語の点数*/
int math; /*数学の点数*/
};

void getdata(struct stddata *sp,char *name,int jpn,int eng,int math);
void printdata( struct stddata *sp );


int main( void ){
struct stddata student[20];
int i,n,jpn,eng,math;
char name[100];

printf( "The number of students:" );
scanf("%d",&n);
for(i=0;i<n;i++){
printf("%d:",i);
scanf("%s %d %d %d",name,&jpn,&eng,&math);

getdata(&name,jpn,eng,math); /* データ表示 */
}
for(i=0;i<n;i++){
printdata(&student[i]);
}
return 0;
}

void getdata(struct stddata *sp,char *name,int jpn,int eng,int math){
strcpy(sp->student_name,name);
sp->jpn=jpn;
sp->eng=eng;
sp->math=math;
}

void printdata( struct stddata *sp ){
printf( "name | jpn eng math\n" );
printf( "%s %5d %4d %5d \n", sp->student_name,sp->jpn,sp->eng,sp->math);
}

 
 

ここで、getdataの引数の事でコンパイル時にエラーが出てしまいました。

どう違うんでしょうか??
御指導お願いします。


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

Name: 管理人 [URL]  ..伝説のハッカー(326,891ポイント)   Date: 2007/05/20(日) 21:20   No:7748     
Title: Re:構造体    
まず、そのエラーについてだけ答えます。
コンパイルすると、エラーメッセージがでますよね?
そのエラーメッセージをみてもらったらわかりますけど、

1>.\○○.cpp(25) : error C2660: 'getdata' : 関数に 4 個の引数を指定できません。

こんなエラーがでるはずです。
ここで、4つの引数が指定できないのならこの関数の仕様はどうなっているのかなと思ってみます。

プロトタイプ宣言は

void getdata(struct stddata *sp,char *name,int jpn,int eng,int math);

こうなっています。
全部で5つ引数があるはずの関数に4つの引数を持たせて呼んでいるのでだめですよと言われているのです。


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

Name:  ..中級者(14,344ポイント)   Date: 2007/05/20(日) 21:24   No:7750     
Title: Re:構造体    
あ!!!はい。そうですね。
そのとおりです。
同じ関数を表してるのに引数のかずが5と4であってないですねぇ。


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

Name: 管理人 [URL]  ..伝説のハッカー(326,935ポイント)   Date: 2007/05/20(日) 21:36   No:7753     
Title: Re:構造体    
どの辺までお答えいたしましょう??
もう出来そうですか?

また、
/* データ表示 */
と注釈してあるとことは表示するためのしょりではないですよね。
あと、構造体データを渡してやらなければなりませんね。

後nameに&がついているのはおかしいです。
配列nameを
「name」と書くと何を意味しますか?


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

Name: 管理人 [URL]  ..伝説のハッカー(327,095ポイント)   Date: 2007/05/20(日) 21:48   No:7755     
Title: Re:構造体    
ちょっと以下の問題をやってみてください。
名前を入力させ、その情報を格納する関数を作ってみてください。


#include <stdio.h>

/*ここに名前を入力・格納する関数を書く*/

void main(){
char name[100];

/* ここで関数を呼ぶ */

printf("%s",name);

}

 
 


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

Name: 管理人 [URL]  ..伝説のハッカー(328,134ポイント)   Date: 2007/05/20(日) 21:56   No:7756     
Title: Re:構造体    
ちょっと出かける用事があるので、先に答え書いておきますね。


#include <stdio.h>

void getname(char name[100]){
scanf("%s",name);
return ;
}

void main(){
char name[100];

getname(name);

printf("%s",name);
}

 
 
そして、配列の特定の要素をポインタを使って操作するには


#include <stdio.h>

void input(char *n){
*n='6';
return ;
}

void main(){
char name[100]="12345";

input(&name[2]);

printf("%s",name);
}

 
 
このようにします。
プログラムの意味がわかりますか?

お書きになったプログラムを急いで書き直してみました。


#include <stdio.h>
#include <string.h>
struct stddata{
char student_name[100]; /*生徒の名前*/
int jpn; /*国語の点数*/
int eng; /*英語の点数*/
int math; /*数学の点数*/
};

void getdata(struct stddata *sp,char *name,int jpn,int eng,int math);
void printdata( struct stddata sp );


int main( void ){
struct stddata student[20];
int i,n,jpn,eng,math;
char name[100];

printf( "The number of students:" );
scanf("%d",&n);
for(i=0;i<n;i++){
printf("%d:",i);
scanf("%s %d %d %d",name,&jpn,&eng,&math);
getdata(&student[i],name,jpn,eng,math); /* データ表示 */
}
printf( "\nname | jpn | eng | math\n" );
for(i=0;i<n;i++){
printdata(student[i]);
}
return 0;
}

void getdata(struct stddata *sp,char *name,int jpn,int eng,int math){
strcpy(sp->student_name,name);
sp->jpn=jpn;
sp->eng=eng;
sp->math=math;
}

void printdata( struct stddata sp ){
printf( "%-10s | %3d | %3d | %3d\n", sp.student_name,sp.jpn,sp.eng,sp.math);
}
 
 
 
急いだので間違いがどこかにあるかもしれませんが、一応実行結果はうまくいきます。
試してみてください。


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

Name:  ..中級者(14,494ポイント)   Date: 2007/05/21(月) 11:42   No:7767     
Title: Re:構造体    
おはようございます★
寝ちゃいました。。。すみません。。

私まだ、管理人サンの書いていただいたやつみてないです!!!
もうちょっと待ってもらえますか???今、もうすぐでできそうなんですよ^^(笑)

勝手な勘違いかもしれないけど・・・・(笑)

また書き込みするので、その時、チェックしていただけますか??


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

Name: 管理人 [URL]  ..伝説のハッカー(328,704ポイント)   Date: 2007/05/21(月) 12:45   No:7768     
Title: Re:構造体    
いえいえ、全然かまいませんよ、
しかし21:30に・・、寝るの早いですね^^;

後、答えを見ずに完成できたらそれに越した事はありません、頑張ってください☆


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

Name:  ..上級者(15,208ポイント)   Date: 2007/05/21(月) 17:54   No:7781     
Title: Re:構造体    
バイトでかなり疲れて・・・・(笑)
今日1ゲンからだったしぃ。。。

おそくなりました★

こんなのを作りました。実行はできたんですが、内容的にどうでしょうか??
チェックお願いします。


#include <stdio.h>

typedef struct{

char name[100];

int jpn;

int eng;

int math;

}StdData;



int getdata(StdData student_1[]);

void printdata(int n,StdData student_2[]);


int main(void){

StdData list[100];

int tensu;

tensu=getdata(list);
printdata(tensu,list);

return 0;
}



int getdata(StdData student_1[]){

int num,count;

printf("The number of students: ");
scanf("%d",&num);

for(count=0;count<num;count++){
printf("%d: ",count+1);
scanf("%s %d %d %d",student_1[count].name,&student_1[count].jpn,&student_1[count].eng,&student_1[count].math);
}
return num;
}

void printdata(int n,StdData student_2[]){

int kazoeru,sum;

printf(" name | jpn eng math|sum\n");

for(kazoeru=0;kazoeru<n;kazoeru++){

sum=student_2[kazoeru].jpn+student_2[kazoeru].eng+student_2[kazoeru].math;

printf("%10s | %3d %3d %3d |

%d\n",student_2[kazoeru].name,student_2[kazoeru].jpn,student_2[kazoeru].eng,student_2[kazoeru].math,sum);
}
}




見にくくて、ごめんんさぁーい。。お願いします。


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

Name: 管理人 [URL]  ..伝説のハッカー(329,771ポイント)   Date: 2007/05/21(月) 18:42   No:7785     
Title: Re:構造体    
バイトお疲れ様です。
私も、新しいバイクを買う前は、毎日夜明けまでバイトをしていたので、よくわかります(_ _)

プログラムコードを拝見しましたけど、よいと思いますよ、特に間違っている箇所は無いと思います。
若干細かいところをいうと・・・。


@

見にくい^^;

>見にくくて、ごめんんさぁーい。。

そういえば初めて投稿してもらった時から微妙に字下げがおかしかったですよね^^;
Linux使ってるんでしたっけ?ってことはエディタはEmacsですか?
Emacsならそれぞれの行でTabキー押せば自動調整してくれるはずなんですけどねぇ><
例えばここ

  int kazoeru,sum;

printf(" name | jpn eng math|sum\n");
for(kazoeru=0;kazoeru<n;kazoeru++){
sum=student_2[kazoeru].jpn+student_2[kazoeru].eng+student_2[kazoeru].math;
printf("%10s | %3d %3d %3d |

 
 
空白が
2
4
4
4
5
になってます。
4
4
4
8
8
の方が綺麗に見えると思います。


A

後、関数はなるべく最後にはreturn文を書きましょう。
int関数ならreturn 0;(あるいは他の数値)と、void関数なら最後にreturn ;と。


B

もっとも深刻なのが、エラー処理をしていない点。
例えばscanfで4つのデータをとってきていますが、スペースを空け忘れたり、4つ以外のデータが入力されたり、数値部分に文字が入力されてもそのままになっていますので、
バッファのデータが狂うかもしれません。

http://www.pc.uec.ac.jp/sp/hshrkw/edu/program/b1/exercise/exercise1-22.html

このへんscanfを使う危険性が書かれています。
getchar関数で1文字ずつ判定していけばエラー処理も綺麗に行えるでしょう。


しかし全体的に大きな間違いは無いと思います。
確かまだプログラムを始めて1年もたってないんでしたよね。
頑張っていらっしゃいますね、これからも頑張ってください☆


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

Name:  ..上級者(15,546ポイント)   Date: 2007/05/21(月) 18:52   No:7788     
Title: Re:構造体    
見にくいって言われちゃった(笑)

ですよねぇー!!!アタシ頑張りましたもん。。。
昨日とは見違えましたよね!!!

なるほど、return省略しない方がいいんですねぇー。
なんか学校だと先生が強制てきにしろ!!とか言うんですよ。。。
それで、するべきところとかがごっちゃになってしまって。。。

あと1つ質問なんですが、
これを今度、合計点の高い順にソートした結果を 出力するように修正する場合って。。。
どうすればいいんでしょうか?バブルソートを考えてるんですが・・・

void bubbleSort(int student_2[],int num){
int i,j;

for(i=num-1;i>=0;i--){
for(j=0;j<i;j++){
if(student_2[j].>student_2[j+1]){

swap(student_2[j].sum);

なんかこんなん形は作ったんですが・・・よくわからなくて・・・




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

Name: Justy  ..ハッカー(102,064ポイント)   Date: 2007/05/21(月) 18:54   No:7789     
Title: Re:構造体    
関数はなるべく最後にはreturn文を書きましょう
void関数なら最後にreturn ;と
 え? 今はそうなんですか?
 好みもありますので何ともいえませんが、戻り値がないなら returnが無い方が
自然かな〜と思ってました。


エラー処理
 エラー処理に関してはもういくつか。

 StdDataの配列は 100個用意していますが、"The number of students"の入力で 101以上の
値が入力されたらヤバそうです。

 又、ここの入力で数字が入力されるとは限らないので、その対処が必要ですね。


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

Name: 管理人 [URL]  ..伝説のハッカー(330,189ポイント)   Date: 2007/05/21(月) 19:02   No:7792     
Title: Re:構造体    
あら・・voidの時はreturn文は書かない方がいいんでしょうか?
私が愛用していた入門書には全てreturnを書いた方がいいと書いてあったので、
ずっとそうしてきましたが、そうではなかったのですか。
ずっと今までそうしてきたので、関数の終わりに何もないと違和感を感じるようになりました^^;

プログラムのコードは短いに越した事は無いので、書かなくていいものは書かない方がいいかもしれないですね。
また、Justyさんのおっしゃる方法が一般的なのでしょうから、一般的な方法に合わせる方が可読性もあがると思いますし、
そちらに合わせた方がいいと思います。
すみませんでした(_ _|||)


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

Name: Justy  ..ハッカー(102,222ポイント)   Date: 2007/05/21(月) 19:07   No:7794     
Title: Re:構造体    
 あ、いや謝られれる必要は全然ないです。
 こちらこそ変なところに突っ込んでしまって申し訳ないです。

 最近の教科書とか授業は returnを推奨しているのかな、と思っただけなんで・・・。


voidの時はreturn文は書かない方がいいんでしょうか?
 基本的にはどっちでもいいんじゃないでしょうか。
 あってもなくても問題ないですし。


Justyさんのおっしゃる方法が一般的なのでしょうから
 いやいや、そんなことありませんって(w
 時々ものすごい勢いで偏ってるときがありますから。


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

Name: 管理人 [URL]  ..伝説のハッカー(330,742ポイント)   Date: 2007/05/21(月) 19:08   No:7795     
Title: Re:構造体    
>これを今度、合計点の高い順にソートした結果を 出力するように修正する場合って。。。
>どうすればいいんでしょうか?

それには合計点を格納するための変数を構造体にもう一つ追加する必要がありますが、それはコードを拝見する限りは既に用意されているようですね。
バブルソートは簡単ですし、ウェブにサンプルが沢山ありますので、
それを見ながら実装してみてはいかがでしょうか。

http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/bubble-sort.html

http://www1.cts.ne.jp/~clab/hsample/Sort/Sort1.html



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

Name:  ..上級者(15,622ポイント)   Date: 2007/05/21(月) 19:12   No:7796     
Title: Re:構造体    
わかりました。ありがとうございます☆
できるだけ早く見違えてきますからーー!!!(笑)


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

Name: 管理人 [URL]  ..伝説のハッカー(330,968ポイント)   Date: 2007/05/21(月) 19:18   No:7797     
Title: Re:構造体    
いやいや、私なんぞがJusty様のような神の領域にいらっしゃる人物に意見出来ない事はご存知の通りで(w

しかし、return文を書かない方が一般的だと聞いてなんとなくすっきりしました。
コードを短く書きたいのに余計なものを書く事に抵抗を感じていましたので。

>☆さん

もしバブルソートが出来たら他にある様々なソートを勉強してみるのもいいかもしれませんね。
私のHPにクイックソート解説アプリがありますので、もしよければクイックソートもこの際勉強してみてください。


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

Name: 管理人 [URL]  ..伝説のハッカー(331,224ポイント)   Date: 2007/05/21(月) 19:24   No:7798     
Title: Re:構造体    
そういえばもう一つ。
メイン関数はintとvoidをよく見かけますが、
私の入門書には必ずint mainからはじまり、return 0で終われと書かれていました。
メイン関数にvoidを使うべきではないのでしょうか?
他のプログラムからこのプログラムを呼ぶ機会のないような状況ではどちらも関係無いように思うのですが。


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

Name:  ..上級者(15,684ポイント)   Date: 2007/05/21(月) 19:38   No:7799     
Title: Re:構造体    
管理人サンのHPのクイックソートは、以前とても念入りに勉強させていただきましたよ^^
大変分かりやすかったです☆


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

Name: Justy  ..ハッカー(102,907ポイント)   Date: 2007/05/21(月) 20:24   No:7800     
Title: Re:構造体    
return文を書かない方が一般的だと聞いてなんとなくすっきりしました
 あー、一般的とまでは断定できません。
 自分の周りではあまりいない、というだけで。
 ひょっとしたら時流は returnを使う方に流れているのかもしれませんよ。
 他の人の意見を聞いてみたいところです。


メイン関数にvoidを使うべきではないのでしょうか?
 結論から言えば、YESです。

 このあたりはちょっとだけ複雑です。
 Cの場合 main関数の型に関しては必ず以下の4つでなければなりません。

1 intを戻り値にして引数なし。
 int main(void)

2 intを戻り値にして、2つに引数を持つ
 int main(int, char *[])

3 1や 2と等価な方法
 int main(int, char **)
 
 typedef int int_t;
 int_t main(int, char *[])
 とか

4 1〜3以外の処理系定義


 なので、原則的には intが戻り値ではあるものの、4を適用した処理系では
voidなのかもしれませんし、極端な話 floatかもしれません。

 ちなみに C++ではまたちょっと違いますが、intを戻り値とすることが基本となっています。


 戻り値をホスト環境(OS)がどう見ているかにもよります。
 ひょっとしたら 0以外を返したら、OSをシャットダウンしてしまう環境があるかもしれません。
 そんなとき、戻り値を void型にしてしまって不定な値をホスト側が戻り値として
解釈されてしまったら・・・・。

 まぁ、そんなわけで、原則である intを戻り値にしておけばほとんどの環境で
大丈夫だろうというわけです。


 ただ、現実的には巷のメジャーな環境では 戻り値が voidであっても
何事もなかったかのように動いてはいるので、実装的には問題ないとは言えなくもないですが、
教える側としてはかなり難アリなのではないでしょうか。


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

Name: 管理人 [URL]  ..伝説のハッカー(331,323ポイント)   Date: 2007/05/21(月) 22:07   No:7802     
Title: Re:構造体    
なるほど、今回も人のトピで私が勉強させてもらってしまいました。
ありがとうございますm(_ _)m
今まで引っかかっていた部分がはっきりしたので、すっきり出来ました。

誰かに返り値について答える機会があれば上記の事をふまえて発言したいと思います。


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

Name:  ..上級者(15,722ポイント)   Date: 2007/05/22(火) 00:09   No:7806 解決!     
Title: Re:構造体    
すごいハイテクな話になっていて・・・おじゃまかもしれませんが・・・
一応、念のために・・・御世話になったので御報告だけでも・・・聞いてください!!!

バブルソート使って、高い順に出力できました!!!!!!!
ホントに感動しました^^;

ホントにありがとうございました!!!!


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

Name: 管理人 [URL]  ..伝説のハッカー(331,363ポイント)   Date: 2007/05/22(火) 00:18   No:7808     
Title: Re:構造体    
ただ引数と返り値は何にするかというだけの話ですので全くハイテクでもなんでもないんでお気になさらず^^;

バブルソート完成したのですね、よかったです☆
私は別に何もしていないので、☆さんの力ですよ♪

また何か躓いたら遠慮なくトピお立て下さいませm(_ _)m


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



Name: saimon  ..ぴよぴよ(23ポイント)   Date: 2007/05/21(月) 16:05   No:7775       
Title: register intって何?    
for文のループで処理を早くする為に

register int

を使うという記述があるのですが、register intについての説明が無く、またウェブで探してみたのですが、よい説明書きが見つからず、困っています。
register intとは何なのでしょうか?また、register intを使ってループを書くと処理が早くなるのでしょうか?


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


Name: 組木紙織  ..中級者(14,713ポイント)   Date: 2007/05/21(月) 16:29   No:7776     
Title: Re:register intって何?    
registerは変数へのアクセスを最大限速くしなさいという意味の予約語です。

基本的にforループでは特定の変数へのアクセスが多くなるので、その変数にアクセスする時間が
短くなればforループ全体の時間も短くなるということになります。

registerを使っても使わない場合と同じ速度の場合もありますし、大量にregisterを使うと大部分は普通の変数と速度は変わりなくなるので、一つの関数内で、registerを使うのは1個か2個ぐらいまでにとどめておくのが
よいかと思います。
特にint かchar の変数を一つの関数内で一つのみregisterにすると一番有効に働きます。

最近のパソコンでは、十分に速いので、registerを使っても速度は感覚的にはほとんど変わらないと思います。
組み込み系などの特殊な環境では知りませんが。




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

Name: keichan  ..上級者(23,565ポイント)   Date: 2007/05/21(月) 17:01   No:7777     
Title: Re:register intって何?    
>組み込み系などの特殊な環境では知りませんが。
どうなんでしょうね?
本当に処理を稼ぎたいプリミティブな箇所では register 宣言子を用いるよりは
アセンブラでやっちゃいそうな感じがするので、使い所がわかりません。
#古き良き時代の名残?


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

Name: keichan  ..上級者(23,597ポイント)   Date: 2007/05/21(月) 17:02   No:7778     
Title: Re:register intって何?    
うわ。恥ずかしいorz

×プリミティブ

○クリティカル


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

Name: YuO  ..かけだし(1,608ポイント)   Date: 2007/05/21(月) 17:27   No:7779     
Title: Re:register intって何?    
registerは,できるだけレジスタに割り当ててね,というプログラマからの要望です。
あくまで要望なので,実際にレジスタに割り当てるかどうかはコンパイラ次第になります。
Visual C++のように「無視する」という処理系も存在します。

ただし,registerつけて宣言するとポインタが使えないなどの制限が出てきます。
これは実際にレジスタに割り当てられたかどうかに関わらず,です。


ちなみに,同じく「お願い」に過ぎない物に,inlineがあります。


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

Name: 組木紙織  ..中級者(14,925ポイント)   Date: 2007/05/21(月) 17:47   No:7780     
Title: Re:register intって何?    
>ただし,registerつけて宣言するとポインタが使えないなどの制限が出てきます。

これは確かCでの話しだったと思います。C++ではポインタが利用できたはずです。

何処で仕入れた情報か忘れたので情報元は示せませんが、
私の環境(Borland C++ 5.5.1 for Win32)
では上記のようになりました。
確認したコードは以下のようなものです。

#include<stdio.h>
int main()
{
register int a;
int * b = &a;
printf("%p",b);
return 0;
}



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

Name: YuO  ..かけだし(1,765ポイント)   Date: 2007/05/21(月) 18:09   No:7783     
Title: Re:register intって何?    
確かにC++においてはregisterはコンパイラにヒントを与える以外,autoと同じですね (IS C++:1998 7.1.1 / para.3)。
ただ,C言語の話 (IS C:1999 6.5.3.2 / para.1) をしているので,それは関係ないかと。
# inlineはCの範囲内 (IS C:1999 6.7.4) なので記述しています。


IS C++:1998 = ISO/IEC 14882:1998
IS C:1999 = ISO/IEC 9899:1999


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

Name: 組木紙織  ..上級者(15,003ポイント)   Date: 2007/05/21(月) 18:16   No:7784     
Title: Re:register intって何?    
># inlineはCの範囲内 (IS C:1999 6.7.4) なので記述しています

すみません。
私が持っているCの参考書にはinlineの記述が載っていないので、inlineはC++の範囲だとずっと思っており
先程のような記述をしてしまいました。



規格書欲しいな。


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

Name: Justy  ..ハッカー(101,798ポイント)   Date: 2007/05/21(月) 18:43   No:7786     
Title: Re:register intって何?    
組み込み系などの特殊な環境では知りませんが
 昔、某社のとあるCコンパイラは最適化をかけてコンパイルしても、
関数の引数の値がレジスタ経由でわたってきているのにそれをスタックに入れた後、
(確実にレジスタ上にあるにも関わらず)わざわざスタックから値を取り出してから
使うコードを吐くタココンパイラでした。

 で試しに引数に registerを指定してみたらスタックから取り出さず、レジスタの値を
そのまま使うようになりました。

 まぁ、影響はほとんどないので既存のコードはそのままにしましたが・・・。



規格書欲しいな
 あ、そういえば例の C++の JISの規格書が、前は画像オンリーで検索できませんでしたが、
いつの間にか2冊に分かれてテキストデータが入って検索できるようになってますよ。

 ただ、どうも OCRの性能が悪いらしく、アルファベットのヒット率はかなり低いです。
http://www.jisc.go.jp/app/pager?id=110315


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

Name: saimon  ..ぴよぴよ(687ポイント)   Date: 2007/05/21(月) 18:58   No:7791     
Title: 無題    
なるほど、なんとなく理解出来ました。
今回サンプルの中にポインタを使ったループが書かれていて

register int *i, *j, *s, *t;

として利用してありました。
処理を早くするためポインタを使えと。
ポインタを使うと早くなるんでしょうか?

上記回答から拝見すると4つも利用してしまっては意味がなくなってしまうのでしょうか?
あまり多いと、普段の変数と同じ場所に用意されてしまうのでしょうか?
「レジスタ」というものを初めて聞きましたけど、普段用意する場所より早くアクセスできる場所の事なのでしょうか?

また、友達も同じ疑問を抱いているのですが、参考にさせられるサイトとかありませんでしょうか?

質問だらけで申し訳ないです・・。よろしくお願いします。


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

Name: YuO  ..かけだし(2,105ポイント)   Date: 2007/05/21(月) 21:51   No:7801     
Title: Re:無題    
> 処理を早くするためポインタを使えと。
> ポインタを使うと早くなるんでしょうか?

ポインタを使うべき場所で使えば早くなりますが,直接アクセスで十分なところに使えば遅くなります。


> 上記回答から拝見すると4つも利用してしまっては意味がなくなってしまうのでしょうか?
> あまり多いと、普段の変数と同じ場所に用意されてしまうのでしょうか?

えーっと,一般的なPCで使われているX86アーキテクチャだと,
EAX, EBX, ECX, EDX, ESI, EDI
の6個あたり,頑張ってESPくらいが限界になります。
後でレジスタについて説明を書きますが,じゃあ7個使えるかというとそうではなく,現実的にはESI, EDI程度が使えれば良い方です。
# X64だとR8〜R15が増えるんだったかな……。あと,面倒なのでMMX以降の特殊用途レジスタやセグメントセレクタ等も省略。

なので,ループ変数に気休め程度に指定する,というのが通常かと。
# or 指定しない。
どちらにしても,ほとんどはauto扱い (つまりは普通の変数と同じ扱い) になると思います。
また,registerよりも変数割付に適した変数をコンパイラが発見した場合,そちらをレジスタに割り当てることもあります。


組み込み系などで細かく制御ができる場合はちゃんと指定するのでしょうが……。


> 「レジスタ」というものを初めて聞きましたけど、普段用意する場所より早くアクセスできる場所の事なのでしょうか?

レジスタとは,CPUが唯一直接アクセス可能な超高速メモリ群です。
# というあたりがコンピュータ工学的な説明でしょうか。


基本的に,CPUはレジスタ間でしか計算を実行できません。
# X86系統だとレジスタとメモリの間での演算やメモリと即値の演算を許していたりはしますが……。

そのため,非常に高速にアクセスができるようになっています。
もちろん,1次キャッシュよりも何十倍も速くアクセス可能です。
ただし,それだけに量が限られます。
多くてもKBの単位ではないでしょうか。
# RISCならたくさんあるやつがあると思うので……。

で,X86のように数の特に少ないCPUでは,頑張って使い回すことになります。
このあたりはアセンブリ言語を使うといやと言うほど体感させられます。


> 規格書欲しいな

ANSI Electronic Standard Storeで,INCITS/ISO/IEC 9899:1999とINCITS/ISO/IEC 14882:2003がともに$30で売っていますよ。
英語になりますが,JISだと片方だけでも万に届くので,それを考えれば格安です。
# 私が買ったときは$26と$18だったはず……。元値で変動がある上に為替相場が関連するので,相場を読んだ方が安く買えます。


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

Name: Hermit  ..入門者(3,486ポイント)   Date: 2007/05/21(月) 23:33   No:7805     
Title: Re:無題    
># inlineはCの範囲内 (IS C:1999 6.7.4) なので記述しています。
たしか、ANSI C89 の範囲まではこれは使えないので、
書いてない参考書も多いのでは。
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
でも C では使えないみたいだし。

gcc くらいだったら、-ansi しても Ver1 系でも使えていたけど。


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



Name: DDR  ..ぴよぴよ(164ポイント)   Date: 2007/05/21(月) 13:01   No:7769       
Title: ビットのコピーって出来ますか?    
こんにちは。

int a=2,b;
double c=3.982;
b=a;

こういうデータのコピーをすると、32bitまとめてコピーされてしまいますが、
int型aの3bit目のデータだけ、int型bの6bit目にコピーするとか、
double型の15bit目のデータだけ、int型bの6bit目にコピーするとか、

今回例えばなので、意味がないコピーですが、
こういうことは出来るのでしょうか?


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


Name: YuO  ..かけだし(1,428ポイント)   Date: 2007/05/21(月) 14:30   No:7773     
Title: Re:ビットのコピーって出来ますか?    
マスク処理をすれば可能です。
ただし,double型はそのままでは当然できないので,ポインタを経由したキャストが必要になります。


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

Name: 組木紙織  ..中級者(14,478ポイント)   Date: 2007/05/21(月) 15:11   No:7774     
Title: Re:ビットのコピーって出来ますか?    
共用体とビットフィールド使えば出来ると思います。
あんまりよくない例ですが、参考までに。

#include<iostream>
using namespace std;

union A
{
int ch;
struct{
unsigned b: 1;
unsigned c: 1;
unsigned d: 1;
unsigned e: 1;
unsigned f: 1;
unsigned g: 1;
unsigned h: 1;
unsigned i: 1;
}b;
};
int main()
{
A a;

for(int i=0;i<=0xff;i++){
a.ch = i;
cout <<a.b.b<<a.b.c<<a.b.d<<a.b.e<<a.b.f<<a.b.g<<a.b.h<<a.b.i<<endl;
}
return 0;
}


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



Name: 大工  ..上級者(19,548ポイント)   Date: 2007/05/20(日) 11:10   No:7731       
Title: 積の法則(規則?)    
基本的なことを聞いてすみません><。

積の法則の証明は理解できたのですが

手持ちの本では

1. big ← D[1];
2. for(i = 2; i <= n; i = i + 1){
3. if(D[i] > big){
4. big ← D[i];
5. }
6. }
7. print(big);

あと、O(c・f(n)) = O(f(n))となる理由がいまいち分かりません><。


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


Name: 管理人 [URL]  ..伝説のハッカー(325,183ポイント)   Date: 2007/05/20(日) 13:53   No:7732     
Title: Re:積の法則(規則?)    
いくつか意図のわからない部分があるのですが、

・全体の計算量についての問題なのでしょうか?
・f(n)とは、n回繰り返される時の全体の計算量なのでしょうか?
・big←D[i]とは、普通のイコールの代入文とどう違うのでしょうか?

質問を拝見するに、和の法則とか積の法則じゃなくて極限の問題であるような気がするのですが・・。

1+nにおいて、
limit (n→∞)(1+n) = ∞

 
とかそういう事ではないのでしょうか?
計算量の近似値を求める問題のように思えるのですが。

積の法則というのは排反事象の事ではないのでしょうか?


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

Name: 大工  ..上級者(19,781ポイント)   Date: 2007/05/20(日) 14:43   No:7734     
Title: Re:積の法則(規則?)    
アルゴリズムの本には積の規則って書いてあるんですが^^;

・全体の計算量についての問題なのでしょうか?

  全体の計算量についての質問です。

・f(n)とは、n回繰り返される時の全体の計算量なのでしょうか?

  T(n)のオーダーはf(n)であるということです。

・big←D[i]とは、普通のイコールの代入文とどう違うのでしょうか?

  えっと。。。代入文と違いはないと思います。


証明の結論を載せるのを忘れてました。

・・積の規則・・

T1(n)とT2(n)をそれぞれO(f1(n))、O(f2(n))である計算量とする。この時、T1(n)・T2(n)はO(f1(n)・f2(n))である。


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

Name: 組木紙織  ..中級者(14,422ポイント)   Date: 2007/05/20(日) 19:25   No:7738     
Title: Re:積の法則(規則?)    
ランダウの記号 フリー百科事典『ウィキペディア(Wikipedia)』
にオーダーの定義が書いてありました。

それを私なりに要約すると(間違っているかもしれませんが、)
f(n)のオーダーは
limit_(n→∞) (f(n)/g(n)) = <定数>
となるもっとも単純な関数をg(n)とする。
このときのg(n)を
f(n)のオーダーとする。
h(n) = O(f(n))と表記する。

これを基にして考えると
limit_(n→∞) (f(n)/g(n)) =<定数>
limit_(n→∞) (c・f(n)/g'(n)) =<定数>

g(n) = g'(n)となるので
>O(c・f(n)) = O(f(n))
となります

極限の計算ができればわかるのですが、


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

Name: 大工  ..上級者(19,765ポイント)   Date: 2007/05/20(日) 23:34   No:7758     
Title: Re:積の法則(規則?)    
>h(n) = O(f(n))

h(n)ってどこから・・・?


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

Name: 管理人 [URL]  ..伝説のハッカー(328,387ポイント)   Date: 2007/05/20(日) 23:38   No:7759     
Title: Re:積の法則(規則?)    
う〜ん、問題の意味がまだよくわかりません・・。
プログラム自体は最大値を求めるプログラムなんですか?
で、十分大きな配列「D[n]」の中にランダムな数がそれぞれ入っていると?

if(D[i] > big){

この条件文にマッチするのはしだいに減っていくはずですから、
nが大きいほどここは無視できるようになると思いますよ。
積とかなんとかじゃんくて単なる近似値の問題のような気がしますが・・。


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

Name: 管理人 [URL]  ..伝説のハッカー(328,655ポイント)   Date: 2007/05/20(日) 23:54   No:7760     
Title: Re:積の法則(規則?)    
xを試行回数、numを条件文が行われた回数として、
以下のように試行回数と条件文の実行される確率を求めました。


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

void main(){
int ran[100000],i,j,x=10,big,num;

for(i=0;i<100000;i++)
ran[i]=rand();

for(j=0;j<5;j++){
num=0;
big=ran[0];
for(i=0;i<x;i++){
if(big<ran[i]){
big=ran[i];
num++;
}
}
printf("試行回数:%6d回 代入確率:%.5f%\n",x,(double)num/x);
x*=10;
}

}

実行結果

試行回数: 10回 代入確率:0.30000%
試行回数: 100回 代入確率:0.06000%
試行回数: 1000回 代入確率:0.00600%
試行回数: 10000回 代入確率:0.00070%
試行回数:100000回 代入確率:0.00008%

 
 


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

Name: 大工  ..上級者(19,777ポイント)   Date: 2007/05/21(月) 00:09   No:7761     
Title: Re:積の法則(規則?)    
読み返してみたら質問がはっきりしてませんね。。。><。・・。、申し訳ないです。。。

手持ちの本に記載されている証明が理解できなかっただけなんです。。。


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

Name: 大工  ..上級者(19,807ポイント)   Date: 2007/05/21(月) 00:13   No:7762     
Title: Re:積の法則(規則?)    
手持ちの本は近似値よりも規則にしたがって問題を進めていく形式のようです。。

頑張って理解してみます。


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

Name: ぽん太  ..中級者(13,261ポイント)   Date: 2007/05/21(月) 00:35   No:7763     
Title: Re:積の法則(規則?)    
>forループにとってその定数倍
forループが入れ子になっている場合などは計算サイズが増えるとforループの中の計算も
影響してくるけど今回の場合はサイズの増加に関係しない処理という意味ではないでしょうか?

>O(c・f(n))=O(f(n))
結局これを示せば(理解すれば)よいということですよね?
よくわかりませんが
(1) O(c・f(n))⊆O(f(n))
(2) O(c・f(n))⊇O(f(n)) の2つを示せばいいのではないでしょうか?



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

Name: 組木紙織  ..中級者(14,457ポイント)   Date: 2007/05/21(月) 13:09   No:7770     
Title: Re:積の法則(規則?)    
私の上記の記述に間違えがありました。

>h(n) = O(f(n))と表記する。
g(n) = O(f(n))と表記する。

です。
すみません。


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



Name: いさご  ..入門者(2,763ポイント)   Date: 2007/05/21(月) 03:34   No:7764       
Title: 質問です    
こんばんは。いつもお世話になってます。
今、動いた座標の点を表示するプログラムでを書いています。
下はプログラムの一部ですが、点を動かしている関数です。
mainStringというリストにF+F+F+F+F+F+F+Fが入ってます。
指定した角度でFが進行、+が時計回りに角度変更、−が反時計回りに角度変更と言われました。
それで8角形を描きたいのですが、想定の座標からずれてしまいます。


void move(List *mainString){
  int length = 10;
int x = 0;
int y = 0;
double startAngle = 0;
double inputAngle = 0.7853981633974483;

double startAngle = 0;
assert(mainString);
Node *currentNode = mainString->head;

printf("%d.%d\n",x,y);
while(currentNode){
if(currentNode->data == 'F'){
x = x + ((int)length * sin(startAngle));
y = y + ((int)length * cos(startAngle));

printf("%d.%d\n",x,y);

}else if(currentNode->data == '+'){
startAngle = startAngle + inputAngle;

}else if(currentNode->data == '-'){
startAngle = startAngle - inputAngle;
}
currentNode = currentNode->next;
}
}

このまま走らせると、
0.0
0.10
7.17
17.17
24.9
24.-1
16.-8
6.-8
-1.0
になってしまい、0.0に戻れません。
何がいけないのでしょうか?
どなたか助けてください。お願いします。


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


Name: ぽん太  ..中級者(13,296ポイント)   Date: 2007/05/21(月) 04:42   No:7765     
Title: Re:質問です    
座標計算する度に実際の値からのズレが蓄積されていると思われます。

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

Name: いさご  ..入門者(2,813ポイント)   Date: 2007/05/21(月) 04:56   No:7766 解決!     
Title: Re:質問です    
回答ありがとうございます。
(int)の位置を変えてみたらズレがなくなりました。
こんな些細なことですみません・・・。
お騒がせしました。


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



Name: masa  ..ぴよぴよ(77ポイント)   Date: 2007/05/20(日) 16:11   No:7735       
Title: 無題    
プログラムを実行してみたところ

50,68,88,118行目に共通のエラーメッセージが出てしまいました。

エラーメッセージ: error stray '\129' in program
error stray '@' in program

これはどういった意味なのでしょうか??

プログラムを見返してみても特に間違ったところはないと思います。

よろしければ教えてください。


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


Name: miyaza  ..中級者(9,276ポイント)   Date: 2007/05/20(日) 17:01   No:7736     
Title: Re:無題    
#define MAXITER 50   //計算回数の上限を設定//
のスペースの中に全角スペースが混ざってました。
半角スペースに変えればコンパイルできましたよ。


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

Name: masa  ..ぴよぴよ(140ポイント)   Date: 2007/05/20(日) 17:15   No:7737 解決!     
Title: Re:無題    
本当だ...........

どうしようもない質問ですいませんでした。

それとすばやい対応感謝します。

ありがとうございました。


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



Name: 管理人 [URL]  ..伝説のハッカー(323,876ポイント)   Date: 2007/05/18(金) 22:07   No:7695       
Title: スキルアップのコツ    
他トピでスキルアップのコツとして、標準関数に頼らないと言う話になったので、少しサンプルを書いてみました。
標準関数に頼ってプログラムをスマートに書くのもよいですが、
入門時は内部でどのように処理が行われているのか把握するため、また、その関数にとらわれることなく、応用力をつけるため、関数をそのたびごとに自作で作ってみてはいかがでしょうか。


関数を作る練習として一番有名なのがa2iだと思いますが、微妙に難しいのでもう少し簡単なところから。


@strlenについて
この関数はご存知の通り、文字列の長さを求める関数です。
実装内容は簡単で、単に終端記号が入っている配列要素までの個数を調べてやればいいだけです。

サンプルとしてはこちらです。strlenをstringlenと名前を変えてみました。

int stringlen(char st[]){

int i=0;
while(st[i]!='\0')
i++;
return i;
}

 
 
strlenはsize_t型関数ですが、ほとんどsize_tはintでしょうし、スマートに説明するため省きます。
こちらの関数の使用サンプルはコチラです。


#include <stdio.h>

int stringlen(char st[]){
int i=0;
while(st[i]!='\0')
i++;
return i;
}

void main(void){
char st[]="0123456789";
printf("%d\n",stringlen(st));
}
 
 
 
このように、\0までの個数が返っていますね。


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


Name: 管理人 [URL]  ..伝説のハッカー(324,283ポイント)   Date: 2007/05/18(金) 22:19   No:7696     
Title: Re:スキルアップのコツ    
Astrcopyについて

この関数は文字列のコピーです。
strcopy(A,@);
と書けば@をAにコピーします。気をつけないといけないのは、@の最後にちゃんと終端記号が入っていることと、Aは@以上の配列要素を持っていないといけない事です。

ではサンプルです。

void strcopy(char st2[],char st1[]){
int i=0;
for(i=0;i<=stringlen(st1);i++)
st2[i]=st1[i];
return ;
}

 
 
対象の文字列の長さ分ループしてst2に格納します。
しかし実際strcpyはキャラクタのポインタ型関数です。
実際にはこんな感じになっているでしょう。


char *strcopy(char *s1,char *s2){
char *p = s1;
while(*s1++ = *s2++);
return p;
}
 
 
 
ポインタを使って意味不明で嫌になってしまっては本末転倒ですので、ここでは両方書いておきました。
使用例サンプルです。


#include <stdio.h>

int stringlen(char st[]){
int i=0;
while(st[i]!='\0')
i++;
return i;
}

void strcopy(char st2[],char st1[]){
int i=0;
for(i=0;i<=stringlen(st1);i++)
st2[i]=st1[i];
return ;
}

void main(void){
char st1[]="0123456789",st2[128];
strcopy(st2,st1);
printf("%s\n",st2);
}

 
 


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

Name: 管理人 [URL]  ..伝説のハッカー(324,448ポイント)   Date: 2007/05/18(金) 22:22   No:7697     
Title: Re:スキルアップのコツ    
こんな感じで掴んできたらa2iを作ってみましょう。
atoi関数は受け取った文字列を数値に変換して返す関数です。
実際、キャラクタ型に入っている数字は文字コードです。
文字コードは

printf("%d",'0');

を表示してみる事で、0の文字コードが確認できます。

printf("%d ",'0');
printf("%d ",'1');
printf("%d ",'2');

・・・・

printf("%d ",'9');

を実行してみると規則性が見えてくるはずです。
つまり

int a;
st[0] = '1';
a= st[0] - '0';

をするとaには何が入るかと言うと・・。と考えていけば関数が出来上がるはず。

様々な自作関数を作ってみてプログラムに慣れましょう〜♪


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

Name: Justy  ..ハッカー(101,477ポイント)   Date: 2007/05/19(土) 02:46   No:7706     
Title: Re:スキルアップのコツ    
スキルアップのコツとして、標準関数に頼らない
 アルゴリズムや標準関数の仕様を学ぶという点でとてもいいと思います。


 今回の例にあったようなものは比較的シンプルなのですが
ものによっては意外と(プロでも)正しく書けるひとは少なかったりします。

 実際に strcmp()を何人かで書いたことがあるのですが、一発で正答した人は
いませんでした。
 もちろん、かくいう私も1回目は不正解・・・orz


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

Name: 管理人 [URL]  ..伝説のハッカー(324,101ポイント)   Date: 2007/05/19(土) 03:50   No:7707     
Title: Re:スキルアップのコツ    
おぉ、おもしろそうな課題ですね。

>もちろん、かくいう私も1回目は不正解・・・orz

えぇ!?じゃ私に出来るわけが・・
と言ってもそんな難ししとは思えないんですが、何か違うんでしょうか・・。

まず、
・同じなら0を返す
・第一引数の方が第二引数より大きければ正の値、つまり("c","a")なら2を返す
・第一引数の方が第二引数より小さければ負の値、つまり("a","d")なら-3を返す

と、こんな仕様ですよね??
それなら私ならこう答えますが。。


int strcmp2(const char *st1,const char *st2){
while(1){
if(*st1=='\0' && *st2=='\0')
return 0;
if(*st1!=*st2)
return (*st1-*st2);
st1++,st2++;
}
}

 
 
何かおかしいでしょうか・・。
一応実行サンプルも


#include <stdio.h>

int strcmp2(const char *st1,const char *st2){
while(1){
if(*st1=='\0' && *st2=='\0')
return 0;
if(*st1!=*st2)
return (*st1-*st2);
st1++,st2++;
}
}

int main(void){
int i=-1;
char st[6][10]={
{"abcde"},{"abcdz"},
{"abcde"},{"abcda"},
{"abcde"},{"abcde"}
};
for(i=0;i<3;i++)
printf("st[%d],st[%d] -> %d\n",i*2,i*2+1,strcmp2(st[i*2],st[i*2+1]));
return 0;
}

 
 
ん〜・・・きっとどこかにひっかけがあるんでしょうね〜・・
どこだろ、どこだろ・・。


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

Name: 管理人 [URL]  ..伝説のハッカー(324,341ポイント)   Date: 2007/05/19(土) 03:57   No:7708     
Title: Re:スキルアップのコツ    
strncmpならこうなるのでは・・


#include <stdio.h>

int strncmp2(const char *st1,const char *st2,size_t n){
while(n){
if(*st1=='\0' && *st2=='\0')
return 0;
if(*st1!=*st2)
return (*st1-*st2);
st1++,st2++;
n--;
}
return 0;
}

int main(void){
int i=-1;
char st[6][10]={
{"abcde"},{"abzzz"},
{"abeee"},{"abcda"},
{"abcde"},{"abcde"}
};
for(i=0;i<3;i++)
// printf("st[%d],st[%d] -> %d\n",i*2,i*2+1,strncmp2(st[i*2],st[i*2+1],2));
printf("st[%d],st[%d] -> %d\n",i*2,i*2+1,strncmp2(st[i*2],st[i*2+1],3));
return 0;
}

 
 
こんな簡単な関数でJustyさんが間違うわけないですよね。。
ん〜。。どこか違うんでしょうか・・。


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

Name: 管理人 [URL]  ..伝説のハッカー(324,467ポイント)   Date: 2007/05/19(土) 04:13   No:7709     
Title: Re:スキルアップのコツ    
え〜と、Justyさんの回答が待ちきれずに調べてしまいましたw
http://libc.blog47.fc2.com/blog-entry-33.html

引用
>このように単純な仕様の関数ですが、一点だけ注意すべきなのは、
>文字の比較は、unsigned char型として行わなければならない点です。


ひっかけ部分ってここでした?
signedでも計算結果変わらないような気がするんですが・・。


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

Name: フリオ  ..初心者(6,087ポイント)   Date: 2007/05/19(土) 04:40   No:7710     
Title: Re:スキルアップのコツ    
 
 これでいいのかな。


#include <stdio.h>
#include <string.h>

int CompStr(char *str1, char *str2)
{
while(*str1 == *str2){
if(!*str1) return 0;
str1 ++;
str2 ++;
}
return (unsigned)*str1 - (unsigned)*str2;
}

int main(void)
{
printf("%d %d\n", CompStr("abc", "abd"), strcmp("abc", "abd"));
printf("%d %d\n", CompStr("abc", "abc"), strcmp("abc", "abc"));
printf("%d %d\n", CompStr("abd", "abc"), strcmp("abd", "abc"));
return 0;
}

 


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

Name: フリオ  ..初心者(6,339ポイント)   Date: 2007/05/19(土) 06:08   No:7711     
Title: Re:スキルアップのコツ    
 
 少し変えました。


#include <stdio.h>
#include <string.h>

int CompStr(char *str1, char *str2)
{
while(*str1 == *str2 && *str1){
str1 ++;
str2 ++;
}
return (unsigned)*str1 - (unsigned)*str2;
}

int main(void)
{
printf("%d %d\n", CompStr("abc", "abd"), strcmp("abc", "abd"));
printf("%d %d\n", CompStr("abc", "abc"), strcmp("abc", "abc"));
printf("%d %d\n", CompStr("abd", "abc"), strcmp("abd", "abc"));
return 0;
}

 


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

Name: フリオ  ..初心者(6,462ポイント)   Date: 2007/05/19(土) 07:22   No:7712     
Title: Re:スキルアップのコツ    
 
 訂正。

(unsigned) -> (unsigned char)


#include <stdio.h>

int main(void)
{
signed char c0 = 0x0, c1 = 0xff;

printf("%d\n", c0 - c1);
printf("%d\n", (unsigned)c0 - (unsigned)c1);
printf("%d\n", (unsigned char)c0 - (unsigned char)c1);
return 0;
}

 


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

Name: Justy  ..ハッカー(101,724ポイント)   Date: 2007/05/19(土) 11:21   No:7713     
Title: Re:スキルアップのコツ    
ひっかけ部分ってここでした?
 そこですそこです(w
 そこが穴でした。

 こういう盲点が標準関数にはいろいろありそうです。
 とはいえスキルアップ目的ならこんなところまで気にしなくてもいいんですけどね(w


signedでも計算結果変わらないような気がするんですが・
 フリオさんが1つ上のサンプルで書かれているように符号付きで見たときに
0と負の組み合わせや正と負の組み合わせの場合とかで結果が変わってしまいます。


@ フリオさん
 引数でちょっと警告が出そうな気もしますが、中身は合っていると思います。


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

Name: 管理人 [URL]  ..伝説のハッカー(324,534ポイント)   Date: 2007/05/19(土) 11:33   No:7714     
Title: Re:スキルアップのコツ    
あら・・ホントだ、、、、くぅ悔しい(T_T
人の回答の為のトピで自分が勉強になりました^^;

また面白い話題があれば教えてください〜♪


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

Name: 大工  ..上級者(19,422ポイント)   Date: 2007/05/19(土) 16:40   No:7716     
Title: Re:スキルアップのコツ    
strcopyですが、


void strcopy(char st2[], const char st1[]){

int i=0;

for(i = 0; i <= stringlen(st1); i++)

st2[i] = st1[i];

return ;

}


とした方がいかも知れませんね。

st1[]が関数内で替わってしまうとちょっと意味が変わってしまいますから。


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

Name: Hermit  ..入門者(3,474ポイント)   Date: 2007/05/20(日) 00:02   No:7726     
Title: Re:スキルアップのコツ    
>strlenはsize_t型関数ですが、ほとんどsize_tはintでしょうし、スマートに説明するため省きます。
ちょっと気になったので、
ほとんどは、unsigned だと思います。

strcmp()
辞書順てのがネックですね。
これが、unsigned でしなければいけないとは気づかなかった。
私も間違えたくちです。(char で比較してしまった為、SJIS漢字が(^^;)


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

Name: ふぐお  ..入門者(3,585ポイント)   Date: 2007/05/20(日) 08:28   No:7730     
Title: Re:スキルアップのコツ    
printfが作りたいですね
誰か作り方知ってますか?
インライン?とか使うんですかね?


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

Name: Justy  ..ハッカー(101,428ポイント)   Date: 2007/05/20(日) 14:38   No:7733     
Title: Re:スキルアップのコツ    
printfが作りたいですね
誰か作り方知ってますか?
 どこまで横着して良いのか、にも依って難易度が大きく変わりますね、これは。

 最大限横着して良い(環境依存含む)のなら非常に簡単です。
 フォーマット文字列を vasprintfが使えるならそれで展開、
使えないなら _vscprintf() / _vsnprintf()とかで展開後のサイズを調べて
展開バッファを作成した後、vsprintf()で展開。
 あとは puts()とかで標準出力へ、という流れです。

 しかし、フォーマット文字列の解析・展開を自前でやろうとすると
あの複雑でそれなりに柔軟なフォーマット文字列を1文字1文字調べて
対応しないといけないのでそれはまたなかなか大変です。


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



Name: 大工  ..上級者(19,467ポイント)   Date: 2007/05/19(土) 20:06   No:7717       
Title: 和の法則    
アルゴリズムの教科書によくある和の法則 → T1(n)とT2(n)をそれぞれO(f1(n)),O(f2(n))である計算量とする。このとき,T1(n)+T2(n)はO(max(f1(n),f2(n)))である。

この法則にあるmax()がどのような意味をもつのかわかりません。。。。

すみませんが解説お願いします><。。


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


Name: box  ..比類無きプログラマー(68,114ポイント)   Date: 2007/05/19(土) 20:33   No:7720     
Title: Re:和の法則    

全体計算量のオーダーは、部分計算量のオーダーが最大であるものに
等しくなる、という意味ではないでしょうか。

例えば、O(n3)とO(n2)の計算量の和を求めるとすると、
つまるところO(n3)の方が大きく効いてきて、
O(n2)の方は相殺されてしまう、ということではないかと思います。


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

Name: 大工  ..上級者(19,489ポイント)   Date: 2007/05/20(日) 00:27   No:7727 解決!     
Title: Re:和の法則    
あ、そっか!

ありがとうございます。


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



Name: micheal  ..ぴよぴよ(104ポイント)   Date: 2007/05/19(土) 15:22   No:7715       
Title: C言語の実数と整数について    
情報処理で、

printf("%d",1.1) としたら -1717986918

と出力されたのはなぜかという宿題が出たのですが、

%dのあとには整数しか入れてはいけないのでエラーが出ることはわかるのですが、
実際にコンピューターの中ではどんなことが起きているのでしょうか?


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


Name: box  ..比類無きプログラマー(67,940ポイント)   Date: 2007/05/19(土) 20:19   No:7718     
Title: Re:C言語の実数と整数について    
1.1というdouble型の値を、計算機の内部で
どのように保持しているかはおわかりですか?


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

Name: micheal  ..ぴよぴよ(119ポイント)   Date: 2007/05/19(土) 20:27   No:7719     
Title: Re:C言語の実数と整数について    
すみません、あまりよく理解していません。

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

Name: YuO  ..かけだし(1,341ポイント)   Date: 2007/05/19(土) 20:58   No:7721     
Title: Re:C言語の実数と整数について    
私だったら「たまたま」とだけ答えます。
理由は,引数の型が要求された型と異なるときは未定義の振る舞いであると,規格に定められているからです。
# ISO/IEC 9899:1999 7.19.6.1 The fprintf function / Paragraph.9 後段。

特定のコンパイラとその実装,およびドキュメントが指定されていれば別の回答があるかもしれませんが。


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

Name: micheal  ..ぴよぴよ(160ポイント)   Date: 2007/05/19(土) 21:03   No:7723 解決!     
Title: Re:C言語の実数と整数について    
YuOさんありがとうございました。

なんとなくですがわかったような気がします。


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

Name: box  ..比類無きプログラマー(68,166ポイント)   Date: 2007/05/19(土) 21:25   No:7724     
Title: Re:C言語の実数と整数について    
すでに解決済みのようですけれど…。

浮動小数点数を保持する代表的な方式に「IEEE方式」があります。
この方式では、1.1 という数値が double 型で、sizeof(double)==8 だとすると、
その数値を保持するために 0x3ff199999999999a というビットパターンを持ちます。

このビットパターンを "%d" という int 型に対応する書式文字列で出力しようとするとき、
下位「sizeof(int)」バイトの分を出力し、それより上位の分は無視します。

sizeof(int)==4 だとすると、0x3ff199999999999a の下位 4 バイトは
0x9999999a となります。これは、十進数にすると -1717986918 です。

宿題をお出しになったかたは、「たまたま」上記のような環境で
仕事をなさっているのかもしれませんし、そうではないのかもしれません。

なお、「実数 内部表現」あたりのキーワードでググってみると、
計算機の内部で実数をどのように保持しているかがわかって、
おもしろい(あるいは、大しておもしろくない)かもしれません。


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



Name: まさき  ..ぴよぴよ(38ポイント)   Date: 2007/05/16(水) 23:15   No:7642       
Title: if文の条件について    
if文の条件として、以下のようなものがありました。

if( isdigit(c) )

これはどのような意味なのでしょうか?
初歩的な質問だとは思いますが、答えていただけるとありがたいです。
元のプログラムも一応貼っておきます。




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


Name: 管理人 [URL]  ..伝説のハッカー(318,778ポイント)   Date: 2007/05/17(木) 07:52   No:7646     
Title: Re:if文の条件について    
isdigit関数の使い方はOKですか?
関数の使い方ではなく、if文の意味だけに限定してお応えします。


#include <stdio.h>

void main(void){
if(-1)
printf("-1\n");
if(0)
printf("0\n");
if(1)
printf("1\n");
if(1000)
printf("1000\n");
}

実行結果
-1
1
1000

 
 
if文の条件は「0」の時偽となり、「0以外」の時真となります。
つまり、ここに0以外の数値を書けばif文が実行されるわけです。
ではisdigit関数の仕様を調べてみましょう。

http://www.bohyoh.com/CandCPP/C/Library/isdigit.html

「返却値 判定が成立すれば0以外の値(真)を返し、成立しなければ0を返す。 」
とありますね。
つまり判定が成功すればif文を実行し、失敗すればif文を実行しない事になります。


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

Name: asd  ..初心者(6,440ポイント)   Date: 2007/05/17(木) 10:45   No:7647     
Title: Re:if文の条件について    
> 初歩的な質問だとは思いますが、答えていただけるとありがたいです。

>・マルチポスト(複数の掲示板に同じ質問を書く事)は禁止です。
http://www3.realint.com/cgi-bin/tarticles.cgi?pointc2+7446
そもそも学校の課題なら先生や友人に聞いてみては?(とマルチポスト先では指摘されていますね)


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

Name: マサキ  ..ぴよぴよ(47ポイント)   Date: 2007/05/19(土) 02:31   No:7705 解決!     
Title: Re:if文の条件について    
丁寧なご返答ありがとうございました。

おかげさまで理解することができました。

あと、マルチポストが禁止なのは知りませんでした。ごめんなさい。

今度からは気をつけるようにします。



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



Name: ドリーム  ..ぴよぴよ(100ポイント)   Date: 2007/05/17(木) 15:16   No:7658       
Title: C言語(CGI)を使って、プリンタ出力    
C言語(CGI)を使って、プリンタ出力

はじめまして。早速ですが、質問させてください。

今回DBサーバの検索結果をプリンタに出力したいのですが、
簡単なサンプルプログラムを提示してもらえないでしょうか?

環境はLinux+PostgreSQL+Apache+C(CGI)を
予定してますので、C言語でお願いします。

やりたい事はこんな感じです。
(1)SQLで検索した結果がクライアントの画面に表示される。
(2)表示したフレーム内に印刷ボタンがあり、印刷ボタンを押すと
   プリンタに結果が印刷される。


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


Name: keichan  ..上級者(23,486ポイント)   Date: 2007/05/17(木) 16:32   No:7665     
Title: Re:C言語(CGI)を使って、プリンタ出力    
ドリームさんが所望するものを作り上げるのに、ご自身が不足している知識は何ですか?

>簡単なサンプルプログラムを提示してもらえないでしょうか?
余りにも他力本願で、これは質問ではなく依頼といいます。
依頼をしたいのであれば、然るべき所にお金を払って依頼してください。


私はここまでやってみて、これがどうしても解決できないんですけど・・・。
等の質問であれば当方も調べてみようかと思いますが、そういった努力されている所が
この文面からは感じ取れません。

一度ご自分でやってみてはいかがでしょうか?


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

Name: Justy  ..ハッカー(101,235ポイント)   Date: 2007/05/17(木) 23:52   No:7676     
Title: Re:C言語(CGI)を使って、プリンタ出力    
>プリンタに出力したいのですが
 popenで lprに書き込めばいいんじゃないですか?
 これならサンプル作るまでもないでしょう。


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

Name: ドリーム  ..ぴよぴよ(204ポイント)   Date: 2007/05/18(金) 11:13   No:7683     
Title: Re:C言語(CGI)を使って、プリンタ出力    
>一度ご自分でやってみてはいかがでしょうか?
fopenを使ってやっては、見たのですが、うまくいきませんでした。
ソースをだらだらと書くのもどうかと思ったもので、
あのような文面になってしまいました。申し訳ありません。
詳しい方なら、反応してもらえるかもと思ったもので。。。

popenですか?
マニュアルを見て、試して見ます。

皆さん、ありがとうごさいました。


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

Name: 通りすがり  ..入門者(4,067ポイント)   Date: 2007/05/18(金) 12:30   No:7684     
Title: Re:C言語(CGI)を使って、プリンタ出力    
私は、てっきりクライアント側で印刷するのかと思いましたが、
サーバー側のプリンタで印刷するのですか???

サーバー側で印刷するのなら、
既出のパイプを使うことになるでしょうし、
クライアント側ならばJavaScriptで
window.print()
のボタンを作ればいいと思います。
(クロスブラウザの問題はありますが。)

いずれにしろ、どこで躓いているのか分かりません。
ApacheでCGIの設定はできていますか?
CGIからHTMLを吐き出させて、ブラウザで見ることができましたか?
Postgresの準備はできていますか?(テーブル作成、権限設定など)
PostgresとCの連携はできましたか?
DBで日本語を扱うのなら、文字コードの問題は解決していますか?
あるいは、本当に最後のプリンタ出力だけができませんか?


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

Name: Justy  ..ハッカー(101,290ポイント)   Date: 2007/05/19(土) 02:16   No:7704     
Title: Re:C言語(CGI)を使って、プリンタ出力    
>私は、てっきりクライアント側で印刷するのかと思いましたが、
>サーバー側のプリンタで印刷するのですか???
 あー、そうですね。
 cgiでボタンを押して印刷するというならクライアント側ですよね、普通は。


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



Name: 白線  ..かけだし(1,243ポイント)   Date: 2007/05/17(木) 12:54   No:7649       
Title: 白い枠線ができてしまいます    
VisualC++.net2003のMFCのダイアログベースのアプリケーションを作って
スクリーン領域を確保して画像を表示させることを考えているのですが、

Panel(void)
{

wh->Create(NULL, "Screen", WS_POPUP|WS_VISIBLE,
CRect(StartX, StartY, StartX+Width, StartY+Height), NULL, NULL, 0, NULL);
pDC = wh->GetDC();

BYTE* m_BmpImage;
LPBITMAPINFO m_BmpInfo;
BITMAPFILEHEADER m_BmpFileHdr;

CBitmap pB;
BITMAPINFOHEADER bi;
CPalette *pOldPal = 0;

bitm = (BITMAPINFO*)LocalAlloc(LPTR, sizeof(RGBQUAD)*256+sizeof(BITMAPINFOHEADER));
for(int i = 0; i < 256; ++i) {
bitm->bmiColors[i].rgbRed = (BYTE)i;
bitm->bmiColors[i].rgbGreen = (BYTE)i;
bitm->bmiColors[i].rgbBlue = (BYTE)i;
bitm->bmiColors[i].rgbReserved =(BYTE)0;
}
bitm->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitm->bmiHeader.biPlanes = 1;
bitm->bmiHeader.biCompression = BI_RGB;
bitm->bmiHeader.biXPelsPerMeter = 0;
bitm->bmiHeader.biYPelsPerMeter = 0;
bitm->bmiHeader.biClrUsed = 0;
bitm->bmiHeader.biClrImportant= 0;
bitm->bmiHeader.biWidth = Width3D;
bitm->bmiHeader.biHeight = Height3D;

bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biPlanes = 1;
bi.biCompression = BI_RGB;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
bi.biWidth = Width;
bi.biHeight = Height;

bitm->bmiHeader.biBitCount = 24;
bi.biBitCount = 24;
bitm->bmiHeader.biSizeImage = Width*Height*3;
bi.biSizeImage = Width*Height*3;

m_hbitmap = ::CreateDIBSection(*pDC, bitm, DIB_RGB_COLORS, (VOID**)&m_bits, 0, 0);

pM.CreateCompatibleDC(pDC);

oldBitmap = pM.SelectObject(CBitmap::FromHandle(m_hbitmap));
}

void Draw(unsigned char* buff)
{
int p;
int dp;
unsigned char line[Width*3], linebmp[Width*3];

for(int i = 0; i < Height; ++i) {
memcpy(line, &buff[i*Width*3], Width*3);

p = 0;
dp = 0;
for(int j = 0; j < Width; ++j) {
linebmp[dp+2] = line[p++];
linebmp[dp+1] = line[p++];
linebmp[dp] = line[p++];
dp += 3;
}
memcpy(m_bits+(Height-1-i)*Width*3, linebmp, Width*3);
}
pDC->BitBlt(0, 0, Width, Height, &pM, 0, 0, SRCCOPY);
}
という感じにスクリーン領域を確保してこの範囲に画像を表示させることができましたが、
このスクリーン領域に画像を表示させると、表示させた画像全体が白い枠線に囲まれてしまいます。
解決策はないでしょうか?


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


Name: 管理人 [URL]  ..伝説のハッカー(323,031ポイント)   Date: 2007/05/18(金) 21:49   No:7692     
Title: Re:白い枠線ができてしまいます    
すみません、管理人の力不足ゆえその辺よくわかりません・・(_ _||)
申し訳ないです・・。


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

Name: 白線  ..かけだし(1,159ポイント)   Date: 2007/05/19(土) 00:58   No:7703     
Title: Re:白い枠線ができてしまいます    
いえいえ、いきなりよく考えもせず質問してしまってすみませんでした。
ウインドウスタイルのWS_POPUPをWS_CHILDにすれば枠線は消えるんですが
色々とエラーが。。。
ぶしつけな質問ですみませんでした。


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



Name: 管理人 [URL]  ..ハッカー(280,532ポイント)   Date: 2007/04/09(月) 01:42   No:6623       
Title: 雑談スレ    
雑談スレです、皆さん気軽に何でも投稿くださいませ〜^^

桜シーズン到来ですね!

最近どこを走っても桜が満開!

私は出身は広島ですが、現在は京都のそばに住んでいるんで、せっかく京都のそばに住んでるなら!って事で桜名所めぐりしてきました〜^^

詳しくはブログにて☆ http://directxq.blog58.fc2.com/

京都は色々名所が多いですね〜(´〜`)

小さい時京都はすごく遠いイメージがありましたが、今では京都へバイクで20分位なので、気軽に行ってきました♪

桜って結構色々種類があって、色も様々なんですねぇ、今日は白い桜が満開でとてもキレイでした^^

ちょっと人が多すぎてゴミゴミしますけど、清水から少し外れた知恩院の奥とか行くと人が居ないトコとかあるんで、雰囲気あってゆっくり桜と夜景が見れてオススメです☆

みなさんもこのシーズンに出かけてみては☆


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


Name: 一本杉  ..ぴよぴよ(570ポイント)   Date: 2007/04/10(火) 02:09   No:6668     
Title: Re:雑談スレ    
僕の住んでる地域は先週雪が振った!
桜が咲くのは五月だとか・・・。

それにしても、この頃ゲーセンしか行ってないや・・・。
でも、それももうすぐ終わり。
大学が始まる。
電子系と情報系の専門科目が増えるのは嬉しいけど、
何だろう、一回でも休むと単位がもらえない授業って・・・。(事前に連絡すれば大丈夫らしい)
授業日程を見てみると、バイトすると留年するという噂も、満更嘘でもない様子。
C言語の授業も始まるし、この一年でゲーム創れるようになりたいなぁ。


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

Name: 管理人 [URL]  ..ハッカー(282,911ポイント)   Date: 2007/04/10(火) 02:23   No:6670     
Title: Re:雑談スレ    
北の方にお住みなんですか?
私雪が大好きなんで、ちょっとうらやましいです^^

最近私もゲーセンいかないですねぇ。
DDRの新しい奴が出た時少し行きましたけどw

1回でも休むと単位がもらえないってきついですねw演習ですかね?

学校のC言語の授業面白くないですからねぇ・・・。
少なくともうちの大学は・・。
ゲームプログラムなんか全く教えてくれませんでしたし。。

大学の授業で為になったのはクイックソートプログラム位ですかねぇ(/~\)


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

Name: むつ  ..中級者(10,330ポイント)   Date: 2007/04/10(火) 03:39   No:6673     
Title: Re:雑談スレ    
++ 削除 ++


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

Name: 管理人 [URL]  ..ハッカー(283,387ポイント)   Date: 2007/04/10(火) 09:14   No:6676     
Title: Re:雑談スレ    
トリックスラロームですか!難しそうですね〜、
私も小さい時はよくインラインスケートをして遊んだものでした^^

小さい時にしたことですからそんな複雑な事はで来ませんけどね^^;

シンスプリントですか、確か友達が同じ症状なのですが、違うスポーツをするようになったら発症するひざの痛みですよね?(違いましたっけ^^;)
友達も陸上ですごい奴だったのに、そのせいで、全然成績出せなくなってやめてしまったとか・・。
筋トレすると改善されるんですか?

横浜には先日行ってきました、従兄弟の結婚式があったので。
みなとみらいや、そこにある観覧車、中華街など一日で回れるコースを散策してきました^^
横浜都会ですねぇ(´〜`)

そういえば私もDirectX8.0の環境でコンパイルするサンプルをみつけて実行してみたいんですけど、DirectX9.0cか10の環境のそろえ方しかわからず、DirectX8.0の環境のそろえかたがわからず、
マイクロソフトのHPをうろうろしました。どうしたらいいんでしょう(_ _||)


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

Name: keichan  ..上級者(20,102ポイント)   Date: 2007/04/10(火) 10:32   No:6677     
Title: Re:雑談スレ    
>もう、6.0はお蔵入り!?
既にMSのサポートは終了していますから。お蔵入りは必至ではないでしょうか。

>DirectX8.0の環境のそろえかたがわからず、
古い雑誌についている付録CDに入っているのを探すしかないのではないでしょうか?


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

Name: GPGA  ..プログラマー(30,324ポイント)   Date: 2007/04/10(火) 10:46   No:6678     
Title: Re:雑談スレ    
私が使用しているDirectX9.0c 2004 Octoberには、d3dx8.libやd3dx8.hなどの
DirectX8と互換性を保つためのファイルが存在していますが
現在のDirectX9.0cには入っていないのですかね?


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

Name: keichan  ..上級者(20,184ポイント)   Date: 2007/04/10(火) 13:27   No:6681     
Title: Re:雑談スレ    
私の環境でも調べてみました。
DirectX9.0c December 2004

d3dx8.h, d3dx8.libの存在は認められませんでした。
但し、d3d8.h, d3d8.lib はありました。


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

Name: GPGA  ..プログラマー(30,448ポイント)   Date: 2007/04/10(火) 13:43   No:6682     
Title: Re:雑談スレ    
私のほうでは、d3d8.libとd3dx8.libの両方の存在を確認しました。
ヘッダーのほうもd3d8.hとd3dx8.hの両方がありました。

OctoberとDecemberでは一段階しかバージョンが違わないのに
DirectX8の上位互換部分に変更があるのはちょっと違和感を感じます。


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

Name: 管理人 [URL]  ..ハッカー(287,773ポイント)   Date: 2007/04/12(木) 01:14   No:6734     
Title: Re:雑談スレ    
う〜ん、はっきりわかってから書こうと思ったんですがよくわからない・・;
もう少し調べてみます^^;


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

Name: 神魔  ..ぴよぴよ(843ポイント)   Date: 2007/04/12(木) 23:28   No:6760     
Title: Re:雑談スレ    
どうも、以前課題研究で音楽ゲームを作成可能かどうか質問させていただいた神魔というものです。
無事高校3年生になることができ、席替えで最高の席になり上機嫌な今日この頃。

明日、初めての課題研究の時間があります。
課題研究は作品を作るのが目的ではなく、その過程が大切だと先生に言われ、少し考え方を改めました。
まずはC言語についてしっかりとした知識を付けたいと思います。
その後、自分にはどのようなものが作れるかしっかりと構想を練り、自分なりの作品を残したいと思っています。

これから質問をする機会が増えると思います。
そのときはなにとぞよろしくお願いします。


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

Name: 管理人 [URL]  ..ハッカー(288,691ポイント)   Date: 2007/04/13(金) 03:30   No:6765     
Title: Re:雑談スレ    
わざわざありがとうございます^^

高校生で、ゲーム作成ですかぁ、将来有望ですねぇ♪
プログラムは確かに基礎が大事ですし、その応用方法も幅広く知っておくべきでしょう。
何にしても背伸びせずに基礎からちゃくちゃくとやれ・・・
といいますが、プログラムにおいては私は違うと思います。
ドンドン背伸びしていって、ドンドン壁にぶち当たればいいと思います。
少々難しい事をしたってしようとしていることが自分のしたいことなら必死になって調べるはずです。
うまくいかなかったらいくまでその事を調べるはずです。
プログラムの上達の道はとにかくプログラムを書いてコンパイル実行することです。
「試行錯誤」から生み出す自分なりの問題解決手段は自分の最大の知識となるでしょう☆
(本でサラっと読んだ事は忘れますけど、自分で見出した事は忘れませんからね)

それに、プログラムを実感して来て、つかめてきてから入門書を読み直したほうがよくわかったりしますし、とにかくドンドン自分の興味あることに挑戦し、ガリガリプログラム書くことが最良の上達方法だと私は思います。

頑張ってくださいね☆


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

Name: 大工  ..上級者(15,914ポイント)   Date: 2007/04/14(土) 21:18   No:6812     
Title: Re:雑談スレ    
雑談スレなんでちょっとした質問を・・・・

C言語についての本が沢山ありますがK&R Cって必読書ですか??
Amazonで調べても賛否両論(日本語訳が悪いから?)なのでどーしたものかと

他に必読書(?)があったら教えてくださ――い


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

Name: 管理人 [URL]  ..ハッカー(289,144ポイント)   Date: 2007/04/14(土) 21:43   No:6813     
Title: Re:雑談スレ    
http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9EC-ANSI%E8%A6%8F%E6%A0%BC%E6%BA%96%E6%8B%A0-B-W-%E3%82%AB%E3%83%BC%E3%83%8B%E3%83%8F%E3%83%B3/dp/4320026926

この辺の本ですかね?


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

Name: Justy  ..比類無きプログラマー(80,129ポイント)   Date: 2007/04/14(土) 22:48   No:6816     
Title: Re:雑談スレ    
K&R Cって必読書ですか
 読んでおいて損はないですが、別に必読書ってほどでないかと思います。
 リファレンスとして欲しいのなら、同じような良書は結構ありますし、
ネットでも十分です。


他に必読書(?)があったら教えてくださ――い
 お勧めとしては

Cプログラミング診断室
http://www.pro.or.jp/~fuji/mybooks/cdiag/index.html

 でしょう。
 これは結構面白い本で、今はネット上からも読むことがで来ます。
 私はこの本でいろいろな「楽」をすることを覚えました。
 今となっては若干記述に古いところもありますが、ほとんどは今でも
通用する話ばかりです。


 あと書籍ではないですが、
Language C FAQ
http://www.kouno.jp/home/c_faq/

 とか

C MAGAZINE - プログラミングの禁じ手Web版 C言語編
http://www.cmagazine.jp/src/kinjite/c/index.html

 このサイトは一通り読んでおいた方がいいですね。


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

Name: 大工  ..上級者(15,925ポイント)   Date: 2007/04/15(日) 01:38   No:6819     
Title: Re:雑談スレ    
「楽」とはいったい・・・・?

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

Name: Justy  ..比類無きプログラマー(80,457ポイント)   Date: 2007/04/15(日) 12:16   No:6826     
Title: Re:雑談スレ    
「楽」とはいったい・・・・?
 読んでみると判りますが、端的に言えば無駄な努力をしない、ということです。


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

Name: 大工  ..上級者(16,709ポイント)   Date: 2007/04/15(日) 16:25   No:6849     
Title: Re:雑談スレ    
http://www.kouno.jp/home/c_faq/

http://www.cmagazine.jp/src/kinjite/c/index.html

は今読み終わりました(気になることろは実際に組んでみました)

かなりいいですね☆

情報ありがとうございます。m(。。)mペコッ



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

Name: 大工  ..上級者(16,651ポイント)   Date: 2007/04/16(月) 21:50   No:6890     
Title: Re:雑談スレ    
雑談スレなんでほんとの雑談を・・・

今日大学っていいとこだなぁと突然思いました☆(ふつーの大学に行っております)

高校だったら『あ〜だこうだ』と言われましたが

今は何勉強してもだれもなにも言わないじゃないですか!(専門分野についてですがw)

しかもそのことについて教授に相談しに行ってもちゃんと答えが返ってきますし(教授にもよりますが・・・w)

最高です。w


と1回生が気付くべきことを2回生で気付きました・・・・・


バカです はい。w

気付くの遅いっすか?w


雑談スレだからこんな話してもいい・・・よね?



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

Name: 一本杉  ..ぴよぴよ(903ポイント)   Date: 2007/04/16(月) 22:14   No:6895     
Title: ごめんなさい、愚痴ります。    
こんばんは〜

>北の方にお住みなんですか?
北海道です。一昨日また雪が降りました。まあ、午後には融けたんですけどね。
気温が未だに一桁・・・肌寒い。

>1回でも休むと単位がもらえないってきついですねw演習ですかね?
はい、そうです。
今日、Cの演習があったんですけど、おもしろくないですねぇ。
しかも、授業計画みるとポインタ習わないみたいですし。ポインタよく分からないから、
ここだけは楽しみにしてたのになぁ。残念。

今回は渡された資料通りにプログラムをテキストに書いて、印刷してレポートと一緒に提出だけ。
とりあえず、感想の欄に「ゲームプログラミングに使えるアルゴリズム教えてください。」と、
書いておいたんですが、無理だろうなぁ。

では、失礼します。


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

Name: 管理人 [URL]  ..ハッカー(296,053ポイント)   Date: 2007/04/17(火) 00:33   No:6909     
Title: Re:ごめんなさい、愚痴ります。    
>しかもそのことについて教授に相談しに行ってもちゃんと答えが返ってきますし

いいですねぇ、うちの大学はほとんど教授は話にならない人ばかりで。。
いや頭いい人ばかりなんですが、なんていうかそれぞれの専門家ばっかりで、親しみやすさや教育能力は全く皆無・・。

>1回生が気付くべきことを2回生で気付きました・・・・・

私なんか3年になるまでプログラムやってませんでしたからもっと遅れてますよw

>雑談スレだからこんな話してもいい・・・よね?

もちろんなんでもどうぞ〜^^

最近は研究室にずっといるので、担当の教授とは仲良くなってコミュニケーションとれるようになってきましたけど、普段教授とはあまりかかわりがないものですよねぇ。
わざわざ研究室にも行きにくいし・・。

>北海道です。一昨日また雪が降りました。まあ、午後には融けたんですけどね。

北海道ですか〜!いいですねぇ、私北海道大好きです♪
あ〜白い恋人食べたい(単純

>今日、Cの演習があったんですけど、おもしろくないですねぇ。

演習面白くないですねぇ。私はC言語の授業のTAやってて、明日その授業受け持つんですけど、どうも構造体も習ってないのにリスト習うようで。
学生で、意欲的に本かじって勉強するやつなんて一握りですし、当然ほとんどの人はわかるわけないし、いやになって授業参加しないやつ続出です。

教授って「どうやったら学生が意欲を持つか。理解するか」なんて全然考えてないですよねぇ。
私だったらもっと考えるのにな・・。



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

Name: 大工  ..上級者(16,436ポイント)   Date: 2007/04/17(火) 00:41   No:6910     
Title: Re:ごめんなさい、愚痴ります。    
大学教授は教育者ではなく研究者であるから授業は基本ちょっとね・・・

と元上司がいってたようなw


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

Name: parapara  ..入門者(4,404ポイント)   Date: 2007/04/17(火) 16:02   No:6922     
Title: 面白いメールが着た。    
凄く怪しいメールが来ました。日本語に変換しても意味不明。
件名:{You’ve won the sum of £750,000.00 courtesy Microsoft & Aol Award Promotions}.
本文:Microsoft Award Promotions

20 Craven Park, Harlesden London NW10 United Kingdom

Ref: BTD/968/05

Batch: 409978E

Dear Winner,







CONGRATULATION!



The prestigious Microsoft and AOL has set out and successfully organized a Sweepstakes marking the year 2007 anniversary, we rolled out over £4,419,864 for our end of year Anniversary Draws. Participants for the draws were randomly selected and drawn from a wide range of web hosts which we enjoy their patronage.



The selection was made through a computer draw system attaching personalized email addresses to ticket numbers. If you ignore this, you will regret it later. Microsoft and AOL are now the largest Internet companies and in an effort to make sure that Internet Explorer remains the most widely used program, Microsoft and AOL are running an e-mail beta test.



Your email address as indicated was drawn and attached to ticket number 008795727498 with serial numbers BTD/9080648302/06 and drew the lucky numbers 14-21-25-39-40-47(20) which subsequently won you £750,000.00 (Seven Hundred and Fifty Thousand Great Britain Pounds) as one of the 5 jackpot winners in this draw. You have therefore won the entire winning sum of £750,000.00 (Seven Hundred and Fifty Thousand Great Britain Pounds) the draws registered as Draw number one was conducted in Brockley, London United Kingdom on the 19th of February, 2007. These Draws are commemorative and as such special.



Please be informed by this winning notification, to file your claims, you are to make contact with your designated agent who shall by duty guide you through the process to facilitate the release of your prize. To file for your claim Please Contact your delivery agency in the contact information below:



DELIVERY AGENCY CONTACT INFORMATION:



NAME OF CLAIM AGENCY FIRM: UK CUSTUDY CLIENT SERVICES

OFFICE ADDRESS: 60 Great Ormond Street London,

WC1N 3HR United- Kingdom.

Email: claimagency@custodyclientservices.net

Fax: +44-70-30-403-093

Contact Person: Dr. Green Smith

You are advised to contact your fiduciary agent with the following details to avoid unnecessary delays and complications:



1) Full name:

2) Address:

3) Ticket Numbers:

4) Batch Number:

5) Serial Number:

6) Lucky Numbers: (as indicated in this winning Notification)

7) Phone numbers:

8) Amount won:

9) Sex

10) Age

11) Occupation



Our special thanks and gratitude to Bill Gates and his associates. We wish you the best of luck as you spend your good fortune in this season.



Note: You have one week from the date of this publication to claim your prize or you may forfeit your winnings. In compliance with the sponsoring bodies', you are to make a remittance of a part of your won fund, not lower than 10-percent, after receiving your allocation to a charity organization of your choice in your country.



Thank you for being part of our commemorative end of year Anniversary Draws.



Mrs. Bryan McDonald

Microsoft Promotion Team

Vice President



How to open Microsoft Award Team Document?

In order to open your Award Document you will need Adobe Reader version 5 or 6 installed on your computer.

If you don't have Adobe Reader version 5 or 6 installed on your computer, please click here to download the software or copy and paste the following URL in the "address" line in your web browser:

http://www.adobe.com/products/acrobat/readstep2.html

If you have an older version of Adobe Reader installed on your computer, you will see the following error message when you try to open the attachment:

There was an error opening this document. This viewer cannot decrypt this document.

Please upgrade your current version of Adobe Reader to version 6 by downloading the newer version from the Adobe website stated above.
Once you have installed Adobe Reader version 5 or 6, double-click on the attachment in order to view Award Document.
If you require any Technical assistance with the process, please contact UK Custody Client Services: - Email: claimagency@custodyclientservices.net

microsoftawardpromotionsmicrosoftawrdpromotions


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

Name: 大工  ..上級者(16,468ポイント)   Date: 2007/04/17(火) 16:42   No:6924     
Title: Re:雑談スレ    
マイクロソフトですか?

VCをダウンロードした時に登録したんで日本語のメールは来たことありますが英語は・・・・


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

Name: parapara  ..入門者(4,428ポイント)   Date: 2007/04/17(火) 19:53   No:6934     
Title: Re:雑談スレ    
99.99%迷惑メールだと思います。
面白いのでコピペしてみました。


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

Name: 管理人 [URL]  ..ハッカー(297,385ポイント)   Date: 2007/04/17(火) 22:52   No:6941     
Title: Re:雑談スレ    
あはは
If you ignore this, you will regret it later.
とか書いてありますけど、マイクロソフトの人間がregertなんて普通書きませんよねw
このメール無視すんなよってことでしょうか^^;


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

Name: 大工  ..上級者(16,538ポイント)   Date: 2007/04/19(木) 13:13   No:6985     
Title: Re:雑談スレ    
新しくスレを立てるのもなんなんでここに

オープンソースってどうやって手に入れるんですか?

http://www.google.com/codesearch で検索してもどうもヒットしなくって(検索キーワードがわるい?)

みなさんどうやって手に入れてますか〜


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

Name: なぎ  ..上級者(16,125ポイント)   Date: 2007/04/19(木) 15:01   No:6991     
Title: Re:雑談スレ    
またまた、こんなのをみつけてしまいました。

http://oshiete1.goo.ne.jp/qa2932475.html
にて

> ここの掲示板で質問すれば管理人がものすごく丁寧に答えてくれます。
> 丸投げでも何でも教えてくれますし、

丸投げはいかんだろう。
「規約と使い方」にも書いてあるし。



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

Name: 管理人 [URL]  ..ハッカー(299,577ポイント)   Date: 2007/04/19(木) 15:33   No:6992     
Title: Re:雑談スレ    
うわ、googleにこんな機能があるなんて知りませんでした^^;
え?私だけ?(汗

なぎさん、

どうも私が知っている限りでは3人の方がよくここを紹介してくださっているようで^^;
過去にここで質問してくださった方なんでしょうかね(_ _)
時々丸投げがあるのはこういう記述のせい?(汗

昔丸投げでも答えていたのでその時の方なのかもしれません^^;


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

Name: むつ  ..中級者(12,540ポイント)   Date: 2007/04/19(木) 16:09   No:6994     
Title: Re:雑談スレ    
++ 削除 ++

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

Name: 管理人 [URL]  ..ハッカー(299,627ポイント)   Date: 2007/04/19(木) 16:46   No:6995     
Title: Re:雑談スレ    
むつさん、それはCGIではなくHTMLで出来ますか?


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

Name: むつ  ..中級者(12,638ポイント)   Date: 2007/04/19(木) 17:01   No:6996     
Title: Re:雑談スレ    
++ 削除 ++

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

Name: 管理人 [URL]  ..ハッカー(299,732ポイント)   Date: 2007/04/19(木) 17:22   No:6997     
Title: Re:雑談スレ    
ありがとうございます、お願いしてもいいでしょか^^;

何かお伝えすべきことありますかね・・。

一応ココフレーム使っているんで・・

・・・・って事くらいみたらわかりますね^^;

利用規約のページは以前皆様にいただいた意見を参考にちょっと書き換えて見ます。

18:00頃アップしますんで、まだ変更すべき点とかありましたら教えてくださいm(_ _)m


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

Name: 管理人 [URL]  ..ハッカー(299,745ポイント)   Date: 2007/04/19(木) 18:03   No:6998     
Title: Re:雑談スレ    
規約を変更しておきました。

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

Name: 大工  ..上級者(16,585ポイント)   Date: 2007/04/19(木) 18:05   No:6999     
Title: Re:雑談スレ    
むつ さんありがとうございます。

書き込みが出来なくなっていて(?)ちゃんとびっくりしました^^;


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

Name: 大工  ..上級者(16,644ポイント)   Date: 2007/04/19(木) 23:47   No:7016     
Title: Re:雑談スレ    
あれ、FireFoxにしたらなんか表示されなくなってしまった・・・・
管理人さまあの部分ってなにがありましたっけ?
(画像で白く表示されている部分です)<!--3-->


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

Name: 管理人 [URL]  ..伝説のハッカー(300,098ポイント)   Date: 2007/04/20(金) 00:01   No:7017     
Title: Re:雑談スレ    
大工さん、
あ、私もIEとFirefox両方使っているのですが、同じ状態になります。
Firefoxは経験少ないのでどうすればいいのかしりません、そのままにしています^^;
どうもフラッシュが正常に再生されないようです。
プラグインいれたつもりなんですけどね・・アドビーのフラッシュプレイヤーもいれましたし・・。
上の白い部分はWELCOMEフラッシュです。
そして左下にメニューのフラッシュが表示されるはずなんですが表示されません・・。
うちのHPはFireFoxだとうまく表示されないのでIEを使っています。
しかしIE7にしてからニフティメール使うたびに落ちてしまうのでFirefoxを使ってみたり・・。
IEって7になってからホントよく落ちるようになりましたよね。なんか対策ないんですかね。


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

Name: Justy  ..比類無きプログラマー(83,029ポイント)   Date: 2007/04/20(金) 00:18   No:7019     
Title: Re:雑談スレ    
どうもフラッシュが正常に再生されないようです
 パスが違ってませんか?
 例えば "m091.swf"とありますが、EMBED側のパスが "../title04/title04/m091.swf"になってます。


IEって7になってからホントよく落ちるようになりましたよね
 6に戻してみてはどうですか?


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

Name: 大工  ..上級者(16,678ポイント)   Date: 2007/04/20(金) 00:41   No:7020     
Title: Re:雑談スレ    
パスってFireFoxのパスですか?

でも、いったいどこをいじればいいのやら・・・


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

Name: Justy  ..比類無きプログラマー(83,150ポイント)   Date: 2007/04/20(金) 01:03   No:7021     
Title: Re:雑談スレ    
パスってFireFoxのパスですか?
 HPの方です。
 表示されていない Flashはどれも htmlに記述されているパスが変なのでは、と私は疑っています。

 IEは多分 "object"タグの "name=movie"からパスを拾ってくるので、ちゃんと表示されるけれど、
FireFoxは "embed src"からなので、うまく表示できていないのではないか、と。


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

Name: むつ  ..中級者(12,723ポイント)   Date: 2007/04/20(金) 01:23   No:7022     
Title: Re:雑談スレ    
++ 削除 ++

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

Name: 管理人 [URL]  ..伝説のハッカー(300,191ポイント)   Date: 2007/04/22(日) 15:26   No:7075     
Title: Re:雑談スレ    
むつさんありがとうございます。
少々お待ち下さい(汗


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

Name: むつ  ..中級者(12,962ポイント)   Date: 2007/04/24(火) 01:37   No:7106     
Title: Re:雑談スレ    
今後OpenGLの世界にこもりますので、暫く掲示板にこれないと思います。
amazonでリファレンスと、3Dグラフィック数学という書籍を注文しましたが、
英語も含めて本腰入れないと、この世界に取り込まれてしまうかもしれません・・。


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

Name: かすてら  ..ぴよぴよ(70ポイント)   Date: 2007/04/24(火) 06:14   No:7109     
Title: Re:雑談スレ    
はじめましてこんばんわ。

ソーティングプログラムの解説ツール使わせてもらったのですが、大変為になりました。

ありがとうございました。


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

Name: 管理人 [URL]  ..伝説のハッカー(300,622ポイント)   Date: 2007/04/24(火) 09:18   No:7110     
Title: Re:雑談スレ    
おぉ、むつさん頑張ってください^^
私も英語を勉強しなければ・・。やらないといけない事が沢山ある(T_T

かすてらさん、
使っていただいたのですね、ありがとうございます^^
そういえば教育ソフトも作っていかないといけないのでした・・、
シリーズ化して、一つの教育ソフトとしてまとめられたらいいなと思っています^^;


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

Name: 大工  ..上級者(16,928ポイント)   Date: 2007/04/25(水) 14:47   No:7145     
Title: Re:雑談スレ    
英語ですかぁー・・・・

2回生の英語担当がちょっと頭おかしいんで先行きが不安です。


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

Name:  ..かけだし(1,068ポイント)   Date: 2007/04/26(木) 14:23   No:7164     
Title: Re:雑談スレ    
お久です。

>シリーズ化して、一つの教育ソフトとしてまとめられたらいいなと思っています^^;
おおーがんばってください!
楽しみに待たせていただきますw

英語?エキサイト行って適当に突っ込んで、日本語的におかしいところを自分でがんばって治すぐらいでしょうか?
大体の意味は取れるので大丈夫かな?とかw

>私も英語を勉強しなければ・・。やらないといけない事が沢山ある(T_T
人生の最難関では?とか思ってます・・・
例文覚えればやっていけるのかな・・・・・
英語なんてやってられるかーーーorz
ニホンゴヲヒョウジュンゴニシテクダサイ


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

Name: 管理人 [URL]  ..伝説のハッカー(301,264ポイント)   Date: 2007/04/27(金) 14:18   No:7193     
Title: Re:雑談スレ    
一応シリーズ化できるように地道に頑張っています^^
ホントに亀の速さなのでいつになったら完成するかはわかりませんw

英語は昔エキサイトかなり世話になりました〜^^;
どうしようもないくらいいい加減な役しか出てきませんが、それに頼らざるを得ない自分がいましたw


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

Name: 大工  ..上級者(16,999ポイント)   Date: 2007/04/27(金) 23:51   No:7215     
Title: Re:雑談スレ    
エキサイトですかぁ〜

1回の時は先生に「あ、翻訳機使ったらバレるから。もしやったら減点ね」って英語で言われたんでクラスのみんなビビッて使ってませんでしたよぉ〜 私もそうなんですけどねw


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

Name: 管理人 [URL]  ..伝説のハッカー(301,578ポイント)   Date: 2007/04/28(土) 10:14   No:7219     
Title: Re:雑談スレ    
確かに・・。
翻訳機の訳って文脈を判断する事は無いので、単語一つ一つの訳がいいかげんだし、
専門用語なんて全く訳しませんから詳しい人から見るともろばれしそうですね^^;


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

Name: 一本杉  ..かけだし(1,137ポイント)   Date: 2007/04/29(日) 23:22   No:7248     
Title: Re:雑談スレ    
こんばんは

26日の夜中に約30分と短い時間だけどアラレが降った・・・。
異常気象だなぁ。

>あ〜白い恋人食べたい
その他にもジンギスカン味、味噌ラーメン味のキャラメルや
熊、鹿、アザラシ、トドのカレー&大和煮の缶詰
食べられない缶詰であれば「摩周湖の霧」(実際は霧ではなく付近の空気らしい、しかも夢とロマンが入っているとかいないとか)や「まりもの素」等
変なものがありますよ〜。

英語もっと読めるようになりたいな。
海外サイトだと日本のサイトじゃお目にかかれない、機械の作り方や薬品の合成方法が載っててワクワク。
まぁ、訳せななくて、ヘタレましたが・・・

ところで、RPGでマップを作るときの家や洞窟等の配置についてお聞きしたいことがあります。
ゲームプログラミングの館の場合ですと、キャラクターの歩く区間が32×32なので、
それを意識して配置し作成するのが普通なのでしょうか。
それとも、配置と歩く区間の関係は気にしないで作り
後から、行ける所と行けない所の方の判定を、細かくなり大雑把なりにして作るものなのでしょうか。
やはり、そこのところはケースバイケースになりますか?


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

Name: 管理人 [URL]  ..伝説のハッカー(302,960ポイント)   Date: 2007/04/30(月) 11:48   No:7251     
Title: Re:雑談スレ    
お〜摩周湖なら行きましたよ〜^^
すごい霧でした♪
ジンギスカンもおいしいですね☆
いいな〜北海道でスキーしたい・・。

ゲームプログラミングの件ですが、
どのような仕様にされるかによりますが、FF1のような1区間の集まりで全体を構成しているようなゲームでは全て32ピクセルで区切ったほうが便利でしょう。
ただ3x3位の区間すべてひとまとまりで扱ったりするなら96x96で絵を書いてもいいと思います。
歩く区間と表示するマップの区間はあわせるのが普通だと思いますよ。
区間を気にせずに一通りの絵を書いてから後から通行不可区間を作るとなんとなく、食い込んだ区間ができたり、
通行できそうなのに通行できなかったり、通行できなさそうなのに通行できたりと、
おかしな表示になります。統一したキレイな配置にしたければ全て区間で分けたほうがいいと思いますよ。
それに前者だと、後から通行不可区間を作るのが結構大変なんです。
私のやりかたのように配列で考えるのなら特に。
構造体でマップ情報と通行可情報を対でもたせてやるとこの手間は省けるかもしれませんね。
私のは全部我流なんでプロがどうやってるのか全然シリマセン^^;


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

Name: 一本杉  ..かけだし(1,235ポイント)   Date: 2007/05/01(火) 01:14   No:7272     
Title: ありがとうございます    
丁寧な説明ありがとうございます。m(_ _)m

やっぱり、歩く区間と表示するマップの区間はあわせるのが普通でしたか。
う〜む、座標考えながら描くの大変そう。
いや、それ以前に絵描けるようにならないと・・・。



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

Name: バグ  ..プログラマー(38,856ポイント)   Date: 2007/05/02(水) 09:03   No:7291     
Title: Re:雑談スレ    
ふと思いついた方法なので、スマートなやり方かどうかは分かりませんが…

struct MAP
{
int Pat; //グラフィックパターン
int Judge; //通行可否判定パターン
};

みたいな構造体を作っておいて、Judgeの数値毎に通行可否の判定をすればいいのではないでしょうか?

たとえば、1マスを2×2に分割して判定するならば、4bitだから16パターンですよね?3×3ならば、真ん中だけ通れるパターンは存在しないだろうから、9−1の8bitで256パターン…ってな感じで…

これならば、分割する数だけ判定の手間は増えますが、グラフィックパターンは少なくて済みますよね?


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

Name: Justy  ..比類無きプログラマー(92,043ポイント)   Date: 2007/05/02(水) 12:36   No:7293     
Title: Re:雑談スレ    
歩く区間と表示するマップの区間はあわせるのが普通でしたか
 管理人さんも書かれていますが、どういう仕様・・・
ゲームの内容、ギミックの内容、移動速度など・・・にするかによります。

 RPGとかだと 32x32pixelを1ブロック(セル?チップ?)としたのなら
1ブロック単位で移動することもあれば半ブロック単位で移動しているのも
よく見かけます。
(ひょっとしたら内部的には 16x16が1ブロックで、
マップの絵が縦横2ブロック使って描かれているいるのかもしれませんが)

 中には画面内の移動に関してはブロックという概念はなくしてしまっているものもあります。


 移動速度も重要です。
 キャラが足早に動くのであればブロック単位での移動でもいいかもしれませんが、
ゆっくり動くのであれば(例えば1ブロック1秒かけて移動するとか)、
キーを押してからキャラが移動し終えるまで何もできなくなってしまうので
もっと細かい単位での移動が必要になってきます。

 結局、どうしたいのか(操作感覚や絵の方針などの仕様)決まっていない状態でどうするのが定石、
という話をするのではなく、こうしたいんだけどその場合どうすればいのか、について
話さないとダメな気がします。


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

Name: 管理人 [URL]  ..伝説のハッカー(303,174ポイント)   Date: 2007/05/02(水) 13:40   No:7295     
Title: Re:雑談スレ    
スーパーボムマンとか区間単位で移動しているようにパッと見、見えますが、
実は1ピクセル単位で動いていたりしますw
壁際で32で割り切れない座標の時は曲線で移動するとか色々やんちくさい作業が必要でした(´〜`)

>バグさん、

それは一つ前で私がふと思いついたやり方と全く同じでは^^;

>>>構造体でマップ情報と通行可情報を対でもたせてやるとこの手間は省けるかもしれませんね。

>ふと思いついた方法なので、スマートなやり方かどうかは分かりませんが…
>struct MAP ・・・
>みたいな構造体を作っておいて、Judgeの数値毎に通行可否の判定をすればいいのではないでしょうか?

プログラミングは試行錯誤することが一番楽しかったりしますよね☆


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

Name: 大工  ..上級者(17,704ポイント)   Date: 2007/05/04(金) 19:54   No:7379     
Title: Re:雑談スレ    
ドモ、おひさです。

FireFoxに変えてから・・・・

mixiのパスワードを変更したんですが・・・

ログイン出来なくなってしまいました。。。。

すみません・・・アドバイスおねがいします。。。><。

あと、IEだったらちゃんとログインできます。。。


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

Name: Justy  ..比類無きプログラマー(94,255ポイント)   Date: 2007/05/04(金) 19:56   No:7380     
Title: Re:雑談スレ    
 何でしょうね、片方ではログインできて、片方ではできないとは・・・。
 セキュリティ関係の問題でしょうか。


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

Name: 大工  ..上級者(17,765ポイント)   Date: 2007/05/04(金) 19:58   No:7381     
Title: Re:雑談スレ    
やりましたよ〜4回くらい・・・・

パスワードとか間違えてたら「間違ってます」的なことが表示されますが・・・

それすらでない・・・

パスとIDいれても入力する画面から変化ありません・・・


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

Name: 管理人 [URL]  ..伝説のハッカー(309,114ポイント)   Date: 2007/05/04(金) 20:15   No:7387     
Title: Re:雑談スレ    
ググったら色々出てきましたよ。

http://www.google.co.jp/search?hl=ja&q=mixi+firefox+%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3&lr=


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

Name: 大工  ..上級者(17,780ポイント)   Date: 2007/05/04(金) 20:34   No:7389     
Title: Re:雑談スレ    
おぉ!!ありがとうございます!!

一度ググってみたんですが・・・・でませんでした><。

キーワードもっと考えるようにします。。。


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

Name: BAZZ  ..ぴよぴよ(983ポイント)   Date: 2007/05/04(金) 23:24   No:7398     
Title: Re:雑談スレ    
うわwww
なんだか俺と同じことになってる方がいらっしゃいますねwww
ボクもFirefoxにかえてからmixiにログインできなくなって
半泣きになりましたよwwww

C言語なんでも質問掲示板のロゴ?変えましたか?
なんだか攻殻機動隊っぽい緑色の文字が横にありますが。
malgoって出力するプログラムですか?

#include <stdio.h>
int main(void){
int i;
str[] = "malgo";
for(i = 0; i < 5; i ++)
printf("%c", str[i]);
return 0;
}

って感じですかね?

これは何か意味があるのでしょうか?
地味に気になりましたwww


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

Name: 一本杉  ..かけだし(1,272ポイント)   Date: 2007/05/05(土) 01:55   No:7402     
Title: マップについて    
バグさん、Justyさん、管理人さん、返信ありがとうございます♥

試行錯誤して頑張ってみます。



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

Name: 管理人 [URL]  ..伝説のハッカー(309,273ポイント)   Date: 2007/05/05(土) 03:34   No:7403     
Title: Re:マップについて    
大工さん、
キーワード選ぶのちょいと考えますよねw

BAZZさん、
今頃気付いたんカイ!(突っ込み
ここはアクセスするたびに変わるようにしてあるんですよw
F5ボタンを何度か押してみてください。そのたびにロゴ変わるから。
ちなみに「malgo」ではなく、「maigo」です^^
C言語わからずに迷子になっている人を助けるための掲示板ですw


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

Name: 大工  ..上級者(19,051ポイント)   Date: 2007/05/18(金) 11:13   No:7682     
Title: Re:マップについて    
ドモ、大工です。

Dear Microsoft Connect Registered User,

As a registered user on the Microsoft Connect Web site, we want to inform you about an update coming soon that will affect your profile information. This update will make it possible for you to access your profile and update the personal information you have provided through Microsoft Connect or other Microsoft Web sites in one central location at http://profile.microsoft.com/. This update is scheduled to happen on Saturday, June 2nd, 2007.

When you registered with your Windows Live ID/.NET Passport at http://connect.microsoft.com, you entered your profile information with our Web site exclusively. There is also a separate profile store associated with Windows Live ID/.NET Passport accounts at http://profile.microsoft.com, which serves the majority of Web sites on the Microsoft.com domain. As a service to you, and to future users of the Microsoft Connect Web site, we will merge these two separate profiles into one which will be stored at http://profile.microsoft.com.

What happens after the update?
After June 2nd, 2007, when you log in to Microsoft Connect, we will show you a reminder message to update your profile information. If you don't update your profile information within one month after June 2nd, 2007, you will be automatically asked to make updates on your next visit following this date.

What happens if I have a profile on both sites?
You may have profile information on http://profile.microsoft.com where the information is different from that on Microsoft Connect. We will not make any decisions for you about your profile information, we will ask you to update and save your data yourself.

Make a note of these important impacts of the update:
1. The Microsoft Connect "alternate e-mail address" will be dropped from your profile and deleted from your record. This will affect very few users since this "alternate" has seldom been used by Microsoft Connect.
2. Microsoft Connect and Microsoft newsletters will use only one e-mail address to communicate with you. If you have been using two different e-mail addresses for these communications, you will have a chance to decide which one to use moving forward. This e-mail address will be associated with the Windows Live ID/.NET Passport you use to access your profile.


Thank you for your help and patience during this process and we look forward to continuing to serve you.

Microsoft Connect Team

This is an unmonitored e-mail address, so please do not reply to this message.

As a Microsoft Connect registered user, you are receiving this announcement about an update to your Microsoft Connect profile. Microsoft is committed to protecting your privacy. To learn more, please refer to the Microsoft Online Privacy Statement at http://privacy.microsoft.com/.

みたいなメールが届きました><。

しかも学校のWEBメールのほうに届いちゃったんで心配です。。。

でも、日本のマイクロソフトはVCをダウンロードする時に登録したからわかるんですが。。。

英語は初めてで。。。。

怪しくないですか?


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

Name: parapara  ..入門者(4,562ポイント)   Date: 2007/05/18(金) 15:41   No:7686     
Title: Re:マップについて    
メール本文をコピペするときは全てのリンクが危なくないか試した方がいいですよ。
試してたなら、ごめんなさい。


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

Name: 大工  ..上級者(19,065ポイント)   Date: 2007/05/18(金) 16:01   No:7687     
Title: Re:雑談スレ    
あ、ごめんなさい。やってないです

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

Name: 管理人 [URL]  ..伝説のハッカー(323,005ポイント)   Date: 2007/05/18(金) 21:47   No:7691     
Title: Re:雑談スレ    
マイクロソフトの何やらプロフィール情報が合併するような内容が書いてありますね。
アップデートするって書いてあるので、アップデートのお知らせじゃないのでしょうか?

英語の迷惑メールなんて私のとこには毎日来放題ですし、学校のメールボックスにもたまりまくりだし、別に気にする事は無いのでは^^;
別に添付ファイル実行したりリンク先に飛んだりしなければ大丈夫だと思いますよ。


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

Name: 大工  ..上級者(19,112ポイント)   Date: 2007/05/18(金) 23:23   No:7699     
Title: Re:雑談スレ    
そうですか、ありがとうございます。^ ^ でも、突然英語のメール来るとびっくりしますよ笑゛

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



Name: chii☆  ..ぴよぴよ(314ポイント)   Date: 2007/05/14(月) 16:51   No:7558       
Title: ファイルから該当データの表示させたぃ・・    
はじめましてぇ♪

chii☆と申します(^○^)☆

ファイルから該当データだけを表示させたぃのですが、
どうすればぃぃでしょうかぁ??

例ぇば、

番号   : 1
名前  : tanaka taro
クラス : A
委員 : 美化
年齢 : 16

番号   : 2
名前  : yamada jiro
クラス : B
委員 : 体育
年齢 : 16

番号   : 3
名前  : tanaka haru
クラス : C
委員 : 保健
年齢 : 16

番号   : 4
名前  : yamamoto itiro
クラス : D
委員 : 図書
年齢 : 16

このようなa.txtというファイルがあったとして、
番号を入力すると該当データだけをファイルから読み込み
表示させたぃのですが、どうすればぃいでしょうか??

番号入力で”4 ”を入力すると
表示は、

番号   : 4
名前  : yamamoto itiro
クラス : D
委員 : 図書
年齢 : 16

このように表示させたいです。

よろしくお願ぃします!!!


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


Name: asd  ..初心者(5,518ポイント)   Date: 2007/05/14(月) 17:18   No:7559     
Title: Re:ファイルから該当データの表示させたぃ・・    
えぇと、chii☆さんが今の状態でどこまで出来ているのかわからないので、
今のままだと一から全部教える必要が出てきます。

1.a.txtを開く
2.a.txtを読み込む
3.読み込んだデータを構造体に入れる
4.表示したい番号を入力してもらう
5.構造体のデータから入力してもらった番号と同じものを探す
6.該当するものがあれば画面に出力する

こんな感じの流れになると思いますが、どこまで分かっていてどこでつまづいているんでしょうか?
それとも1つも分からないという状態でしょうか?


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

Name: chii☆  ..ぴよぴよ(417ポイント)   Date: 2007/05/14(月) 17:34   No:7560     
Title: Re:ファイルから該当データの表示させたぃ・・    
返信ありがとうござぃます☆

そういう流れになるんですね。

今の状態は、

1.a.txtを開く
2.a.txtを読み込む

までしかわからないです。。

すぃませんが、ご指導宜しくお願ぃ致します!!


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

Name: 管理人 [URL]  ..伝説のハッカー(315,503ポイント)   Date: 2007/05/15(火) 14:20   No:7591     
Title: Re:ファイルから該当データの表示させたぃ・・    
まず、構造体の作り方はわかりますか?
文章の中から特定の文字列を発見する方法はわかりますか?
たとえば

char st[]="I like DX Library and DirectX.";

という文字列があった時、「DX」の次にある単語を配列に格納せよ

と言われたら出来ますか?

この両者が出来たら完成も間近です。


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

Name: asd  ..初心者(5,989ポイント)   Date: 2007/05/15(火) 14:41   No:7592     
Title: Re:ファイルから該当データの表示させたぃ・・    
今は時間がないので簡潔な返答になってしまうことをお許しくださいm(__)m
しかも管理人さんと被ってますが投稿しておきます(^^;

>1.a.txtを開く
>2.a.txtを読み込む
>までしかわからないです。。

なるほど〜。と言うことは構造体のところから分からないということですね。
データの一つを良く見ると

>番号   : 1
>名前  : tanaka taro
>クラス : A
>委員 : 美化
>年齢 : 16

番号、名前、クラス、委員、年齢で一人分のデータを表していますよね?
で、それぞれの項目は番号(整数値)、名前(文字列)、クラス(文字Or文字列)、委員(文字列)、年齢(整数値)と
なっていて型がばらばらになっています。
なのでそれぞれの項目を独立した配列に入れてもよいですが、これらをまとめて1人分の項目と出来ると扱いやすくなります。
そこで構造体の登場です。

参考にここの構造体などを参照してもらうと分かりやすいかと思います。
http://www9.plala.or.jp/sgwr-t/

一例として先ほどの項目をまとめて構造体DATAを作るとこんな感じになります。
(構造体が何かを理解してから下に進むと良いかと思います)






struct DATA{
int age; /*年齢*/
char name[20]; /*名前*/
char class[10]; /*クラス*/
char commission[20]; /*委員*/
int age; /*年齢*/
};


これで構造体の準備ができたので次はファイルから読み込んでそれぞれの項目を抜き出す必要があります。
ちょっと時間がないのでここまでにしますが、ファイルの中身のそれぞれの項目は
: (コロンと半角スペース)の後に項目があると言うことでいいでしょうか?
ぁ、それとも読み込んだファイルからデータだけを抜き出すところは分かっているのかな?

何だか中途半端な説明で終わっていることをお許しください。
時間を見つけてまた書きます〜。


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

Name: 管理人 [URL]  ..伝説のハッカー(316,478ポイント)   Date: 2007/05/15(火) 14:43   No:7593     
Title: Re:ファイルから該当データの表示させたぃ・・    
例えば、今

num:7
name:taro

num:2
name:eri

num:4
name:tomo

num:3
name:satoshi

以上のような、番号と名前があるとします。
扱いやすいように、このようにデータが並んでいるとします。

num:7 name:taro num:2 name:eri num:4 name:tomo num:3 name:satoshi

 
 
このとき、番号を入力して、対応した名前を表示するプログラムは以下の通りです。


#include <stdio.h>

typedef struct{
int num;//番号格納用変数
char name[128];//名前格納用変数
}student_t;

void main(){
int i=0,s=0,j=0,serch;
student_t student[100];
char st[]="num:7 name:taro num:2 name:eri num:4 name:tomo num:3 name:satoshi";

while(st[i]!='\0'){//調査配列要素が最後ではない間ループ
if(st[i]=='n' && st[i+1]=='u' && st[i+2]=='m' && st[i+3]==':')
student[j].num=st[i+4]-'0';//文字型データをint型データに変換して番号を格納
if(st[i]=='n' && st[i+1]=='a' && st[i+2]=='m' && st[i+3]=='e' && st[i+4]==':'){
i+=5;//名前のデータのある配列要素へ移動
while(st[i]!=' '){//名前が終わりになるまでループ
student[j].name[s]=st[i];//名前を順々に格納
i++;
s++;
}
student[j].name[s]='\0';//最後に終端記号を入れる
s=0;
j++;
}
i++;
}
printf("input num->");
scanf("%d",&serch);
for(i=0;i<j;i++){
if(student[i].num==serch){
printf("%d番の名前は%sです。\n",student[i].num,student[i].name);
return ;
}
}
printf("その番号は存在しません。\n");
return ;
}

 
 
意地悪ではありませんが、これを改良しただけでは課題は出来ません。
色々上記の通りではうまくいかないように書いてあります。
そうしないと答えそのものになってしまうので・・。

これはこれを利用して課題を解いて欲しいわけではなく、流れをつかんでいただきたいのです。
また、上記プログラムの意味がわからなければそれでも結構です。
人の書いたプログラムを理解するのは大変です。

人に答えを聞くより、考え方を聞いて自分で一から作ったほうが早いんだと感じていただけたらそちらでも結構ですし。

まず、特定の文字列発見、構造体に格納、という2つをやってみましょう。
いきなりファイルから文章を読み込むのではなく、自分で文字列を作ってみてそこから特定の文字列を発見させてみましょう。


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

Name: chii☆  ..ぴよぴよ(647ポイント)   Date: 2007/05/16(水) 13:34   No:7632     
Title: Re:ファイルから該当データの表示させたぃ・・    
皆さんからアドバイスを頂ぃて考ぇたのですが、
どうしても、ファイルから読み込み、構造体へ格納ができません。



番号  : 1
名前  : tanaka taro
クラス : A
委員 : 美化
年齢 : 16

番号   : 2
名前  : yamada jiro
クラス : B
委員 : 体育
年齢 : 16

番号   : 3
名前  : tanaka haru
クラス : C
委員 : 保健
年齢 : 16

番号   : 4
名前  : yamamoto itiro
クラス : D
委員 : 図書
年齢 : 16



struct DATA{
int age; /*年齢*/
char name[20]; /*名前*/
char class[10]; /*クラス*/
char commission[20]; /*委員*/
int age; /*年齢*/
};


わかる方ぃましたらお願ぃしますぅ(ーー;)


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

Name: keichan  ..上級者(22,218ポイント)   Date: 2007/05/16(水) 13:46   No:7633     
Title: Re:ファイルから該当データの表示させたぃ・・    
>どうしても、ファイルから読み込み、構造体へ格納ができません。
chii☆さんが、具体的にどのようなコードをお書きになって格納できていないのか
提示されていませんので、どこが間違っているのかをお答えできません。
現状のソースコードを提示願います。


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

Name: chii☆  ..ぴよぴよ(965ポイント)   Date: 2007/05/16(水) 14:35   No:7635     
Title: Re:ファイルから該当データの表示させたぃ・・    
>keichanさん
申し訳ぁりません。。


#include<string.h>
#include<stdio.h>
#include <stdlib.h>

struct Date{

char name[20]; //名前
char clas[10]; //クラス
char commission[20]; //委員
int age; //年齢
};

void main(void){

FILE *fp;
struct Date st_dt[100];
char c[20];

memset(c,NULL,sizeof(c));

fp = fopen("ex3.fil","r");

if ( fp == 0 ){
printf("open error\n");
exit(1);
}

while (fgets(c,20,fp) != NULL){
}
}


途中までしかできてぃませんが、宜しくお願ぃします。


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

Name: keichan  ..上級者(22,906ポイント)   Date: 2007/05/16(水) 15:32   No:7636     
Title: Re:ファイルから該当データの表示させたぃ・・    
while( fgets(c, 20, fp) != NULL )

の中にどういうコードを書けばいいのか分からない。
ということですね?

処理内容の順番は分かりますか?

fgets()関数は1行分の文字列を取得する関数です。

テキストには
1.番号
2.名前
3.クラス
4.委員
5.年齢
と5行を使用して1つの構造体の意味をなす情報が格納されています。

現在のテキストから読み込み格納先インデックス管理用変数を一つ用意して、


void main(void){

FILE *fp;
struct Date st_dt[100];
char c[20];
int index = -1; /* Date構造体の格納先インデックス */



・毎行読み込みを行う度に"番号"が含まれているかをチェックして、含まれていれば次の格納先を指定する。

while (fgets(c,20,fp) != NULL){
/*
* strstr()関数は文字列内で最初に出現する検索文字列へのポインタを返す
* 検索文字が見つからなかった場合は NULL を返す
*/

if( strstr(c, "番号") != NULL ) {
index++;
}
}



・後は同じ様に"名前", "クラス", "委員", "年齢"が読み込んだ行に含まれているかチェックして適宜対応する構造体メンバ変数に情報を格納する処理を書いてあげる。
これは 2007/05/15(火) 14:43 で管理人さんがヒントを出されているので、そちらの方を熟読して頑張ってみてください。


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

Name: chii☆  ..かけだし(1,066ポイント)   Date: 2007/05/17(木) 10:48   No:7648     
Title: Re:ファイルから該当データの表示させたぃ・・    
度々ごめんなさぃ↓↓
”番号”
を見付けても、ぅまく構造体に格納ができなぃです。。



while(fgets(c,20,fp) != NULL)
{
if( strstr(c, "社員番号 : ") != NULL )
{
pc=strstr(c,"番号 : ");
memcpy(st_dt[i].No,pc+1,1);
}

}


申し訳ぁりませんが、どなたか助けてくださぃ!!


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

Name: keichan  ..上級者(23,239ポイント)   Date: 2007/05/17(木) 13:12   No:7650     
Title: Re:ファイルから該当データの表示させたぃ・・    
仕様が変わっているように見えますが。

>if( strstr(c, "社員番号 : ") != NULL )
今までの 番号社員番号 に変更されているように見受けられますが・・・?


また、struct Dateのメンバに No を追加なされたようですが、型は何でしょうか?
>memcpy(st_dt[i].No,pc+1,1);
とされているので、char か unsigned char型・・・?


>pc=strstr(c,"番号 : ");
strstr関数はc配列の中から見つかった検索文字列の 先頭アドレス が返ってきます。
よって

+----+----+----+----+---+---+---+---+
| 社 | 員 | 番 | 号 | | : | | 1 |
+----+----+----+----+---+---+---+---+
      ↑
    pcはここを示すアドレスが格納されている



開発環境が書かれていませんので、何ともいえないですが
もしデバッグ環境があるのであれば所々にブレークポイントを置いて
各変数の中身の状態を確認されることをお勧めします。


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

Name: 管理人 [URL]  ..伝説のハッカー(319,080ポイント)   Date: 2007/05/17(木) 13:17   No:7651     
Title: Re:ファイルから該当データの表示させたぃ・・    
ちょっと今時間がないので即席になってしまいましたが、
お書きになったコードにstrstrとmemcpyがあったんで、
それと、元々お書きになったコードを最大限いかして、書いてみました。

keichanさんの、回答を熟読して、それでもわからなければ以下参考にしてください。




#include<string.h>
#include<stdio.h>
#include <stdlib.h>

struct Date{
int num; //番号
char name[20]; //名前
char clas[10]; //クラス
char commission[20]; //委員
int age; //年齢
};

void main(void){
int serch_i=0;
char str[128]="";
char serch[5][128]={"番号 : ","名前 : ","クラス : ","委員 : ","年齢 : "};
char *sp;
FILE *fp;
struct Date st_dt[100];
char c[256];

fp = fopen("test.txt","r");

if ( fp == 0 ){
printf("open error\n");
exit(1);
}
while (fgets(c,256,fp) != NULL){//1行読み込み

for(serch_i=0;serch_i<5;serch_i++){//探す5行分ループ

if((sp = strstr(c,serch[serch_i])) == NULL)//現在調査中のserch内容が無かったら次
continue;

else{//あったら
sp+=strlen(serch[serch_i]);//探索した文字分シフト。例えば"番号 : "のバイト分だけシフト
memcpy(str,sp,strlen(sp)-1);//改行コードが最後にあるので、その手前までコピー
str[strlen(sp)-1]='\0';//最後に終端記号をつける。
printf("%s\n",str);
}
}
}

return ;
}
 



ちょっと確かめてないんですけど、これで、読み込んだものが表示できているはずです。
後はswitch文かif文などで条件分岐してstrに入っている欲しいデータをそれぞれ構造体にいれたらいいだけです。



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

Name: 管理人 [URL]  ..伝説のハッカー(319,117ポイント)   Date: 2007/05/17(木) 13:21   No:7652     
Title: Re:ファイルから該当データの表示させたぃ・・    
あ、読み込んでいるデータは
test.txtです。
添付するので、ファイルに保存してください。



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

Name: chii☆  ..かけだし(1,363ポイント)   Date: 2007/05/17(木) 14:35   No:7656     
Title: Re:ファイルから該当データの表示させたぃ・・    
皆様ご丁寧に、ほんとおぉにぁりがとぉござぃます(●^@^●)
何かぉ礼をしたぃくらいです(#^●^#)


管理人さんのサンプルから構造体に格納の仕方ですが、

<pre>
else //あったら
{
sp = sp + strlen(serch[serch_i]);

if(strstr(c,"番号"))
{
memcpy(str,sp,strlen(sp)-1);
str[strlen(sp)-1]=NULL;
st_dt[i].num = atoi(str);
}
else if(strstr(c,"名前"))
{
memcpy(st_dt[i].name,sp,strlen(sp)-1);
st_dt[i].name[strlen(sp)-1]=NULL;
}
else if(strstr(c,"クラス"))
{
memcpy(st_dt[i].class,sp,strlen(sp)-1);
str[strlen(sp)-1]=NULL;
}
else if(strstr(c,"委員"))
{
memcpy(st_dt[i].commission,sp,strlen(sp)-1);
str[strlen(sp)-1]=NULL;
}
else if(strstr(c,"年齢"))
{
memcpy(str,sp,strlen(sp)-1);
str[strlen(sp)-1]=NULL;
st_dt[i].age = atoi(str);
}
break;

}

上手く表示されないのですが、どこがぉかしぃのでしょうかぁ??
何回もすみません。。



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

Name: keichan  ..上級者(23,263ポイント)   Date: 2007/05/17(木) 16:23   No:7663     
Title: Re:ファイルから該当データの表示させたぃ・・    
"どこが/どう"うまく表示できていないのかはっきり明示してください。


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

Name: 管理人 [URL]  ..伝説のハッカー(319,437ポイント)   Date: 2007/05/17(木) 16:38   No:7666     
Title: Re:ファイルから該当データの表示させたぃ・・    
せっかくサンプルをお書きしたので、じっくり見てください。
ちょっと厳しいようですが、見る限りではサンプルの意味を理解していないように思います。
比較すべき文字列は既に用意してありますよね。
注釈も書いています。

もし私の書いたプログラムの特定の箇所がわからなければ、「ここがわからない」と言ってください。

上のサンプルを実行してもらえばわかるはずですが、もう取得すべき文字列はstrに入っているんです。
それを構造体にいれたらいいだけです。
なお、strstrは使う必要ないですよね。
すでにstrにほしい文字列ははいっているので、その文字列がどの欲しい文字列と一致するのか
調べて格納すればいいのです。
http://www.google.co.jp/search?hl=ja&q=%E6%96%87%E5%AD%97%E5%88%97%E3%80%80%E6%AF%94%E8%BC%83&lr=
この辺で探して変更してみましょう。



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

Name: 管理人 [URL]  ..伝説のハッカー(319,511ポイント)   Date: 2007/05/17(木) 16:52   No:7667     
Title: Re:ファイルから該当データの表示させたぃ・・    
あ、そういえば既にループの中で現在どの文字列に一致しているかわかっているので、比較する必要はありませんね。
本当にただ後はいれたらいいだけです。


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

Name: chii☆  ..かけだし(1,616ポイント)   Date: 2007/05/17(木) 17:15   No:7668     
Title: Re:ファイルから該当データの表示させたぃ・・    
何度も何度もアドバイスぁりがとぅございました!!!

 

else //あったら
{
sp = sp + strlen(serch[serch_i]);

if(serch_i == 0)
{
memcpy(str,sp,strlen(sp)-1);
str[strlen(sp)-1]=NULL;
st_dt[i].num = atoi(str);
}
else if(serch_i == 1)
{
memcpy(st_dt[i].name,sp,strlen(sp)-1);
st_dt[i].name[strlen(sp)-1]=NULL;
}
else if(serch_i == 2)
{
memcpy(st_dt[i].class,sp,strlen(sp)-1);
str[strlen(sp)-1]=NULL;
}
else if(serch_i == 3)
{
memcpy(st_dt[i].commission,sp,strlen(sp)-1);
str[strlen(sp)-1]=NULL;
}
else if(serch_i == 4)
{
memcpy(str,sp,strlen(sp)-1);
str[strlen(sp)-1]=NULL;
st_dt[i].age = atoi(str);
i++;
}
break;

}


このようにしましたぁ!!!


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

Name: 管理人 [URL]  ..伝説のハッカー(319,812ポイント)   Date: 2007/05/17(木) 17:26   No:7669     
Title: Re:ファイルから該当データの表示させたぃ・・    
そうそう・・・
そうなんですが、コンパイルしてみましたか?
予測通りの結果は得られていないんじゃないかと思いますが。

とりあえず、やり方あってるんですけど、途中から混乱してしまったように感じます。


else if(serch_i == 1)
{
memcpy(st_dt[i].name,sp,strlen(sp)-1);
st_dt[i].name[strlen(sp)-1]=NULL;
}
else if(serch_i == 2)
{
memcpy(st_dt[i].class,sp,strlen(sp)-1);
str[strlen(sp)-1]=NULL;
}

 
 
最初の条件文内はあっていますが、次はstrにいれてしまっています。
いっぺんにやってしまうならstrは必要ありませんので、消しといてください。
そちらの方が解りやすいかなと思って用意しただけなんで。

プログラム出来たらコンパイルして結果が得られたかどうか確認してください。


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

Name: 管理人 [URL]  ..伝説のハッカー(320,607ポイント)   Date: 2007/05/17(木) 17:29   No:7670     
Title: Re:ファイルから該当データの表示させたぃ・・    
私はこんな風に書きました。

なお、プログラム中に出てくる

void disp(struct Date st_dt[MAX_N] , int i){
printf("番号  = %d\n",st_dt[1].num);
printf("名前  = %s\n",st_dt[1].name);
printf("クラス = %s\n",st_dt[1].clas);
printf("委員  = %s\n",st_dt[1].commission);
printf("年齢  = %d\n",st_dt[1].age);
return ;
}

 
 
この関数は、指定されたiの内容を表示するだけの関数です。
特に難しいことはしていません。
内容もほとんど変更していません。
switch文が増えただけです。

#include<string.h>

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

#define BUF 256
#define MAX_N 100


struct Date{
int num; //番号
char name[BUF]; //名前
char clas[BUF]; //クラス
char commission[BUF]; //委員
int age; //年齢
};

void disp(struct Date st_dt[MAX_N] , int i){
printf("番号  = %d\n",st_dt[1].num);
printf("名前  = %s\n",st_dt[1].name);
printf("クラス = %s\n",st_dt[1].clas);
printf("委員  = %s\n",st_dt[1].commission);
printf("年齢  = %d\n",st_dt[1].age);
return ;
}

void main(void){
int serch_i=0,st_dt_i=0;
char str[BUF]="";
char serch[5][BUF]={"番号 : ","名前 : ","クラス : ","委員 : ","年齢 : "};
char *sp;
FILE *fp;
struct Date st_dt[MAX_N];
char c[BUF];

fp = fopen("test.txt","r");

if ( fp == 0 ){
printf("open error\n");
exit(1);
}
while (fgets(c,BUF,fp) != NULL){//1行読み込み

for(serch_i=0;serch_i<5;serch_i++){//探す5行分ループ

if((sp = strstr(c,serch[serch_i])) == NULL)//現在調査中のserch内容が無かったら次
continue;

else{//あったら
sp+=strlen(serch[serch_i]);//探索した文字分シフト。例えば"番号 : "のバイト分だけシフト
memcpy(str,sp,strlen(sp)-1);//改行コードが最後にあるので、その手前までコピー
str[strlen(sp)-1]='\0';//最後に終端記号をつける。

switch(serch_i){
case 0:
st_dt[st_dt_i].num=atoi(str); break;
case 1:
strcpy(st_dt[st_dt_i].name,str); break;
case 2:
strcpy(st_dt[st_dt_i].clas,str); break;
case 3:
strcpy(st_dt[st_dt_i].commission,str); break;
case 4:
st_dt[st_dt_i].age=atoi(str); st_dt_i++; break;
}
}
}
}

disp(st_dt,1);

return ;
}

 
 


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

Name: 管理人 [URL]  ..伝説のハッカー(322,379ポイント)   Date: 2007/05/17(木) 17:45   No:7672     
Title: Re:ファイルから該当データの表示させたぃ・・    
今回番号は順番のようですが、番号は順不同だとします。

ファイルデータはこのようなデータだとしましょう。

http://dixq.net/txt/test.txt
(対象をファイルに保存してください。)

今回番号を指定して、そのデータを探させます。


int serch_num(struct Date st_dt[MAX_N] , int num){
int i;
for(i=0;i<MAX_N;i++){
if(st_dt[i].num==num)
return i;
}
return -1;
}

 
探す番号をnumに持たせて関数を開始し、内容を調べて、どの配列要素にデータがあるか、その番号を返します。
最後まで見つからなかったら-1を返します。
これを使って以下のようにプログラムを書いてみました。

一度実行してみてください。

最後に無駄に色々メッセージを表示させていますが、この内容を見れば後どうすればいいかわかるでしょう。


#include<string.h>
#include<stdio.h>
#include <stdlib.h>

#define BUF 256
#define MAX_N 100


struct Date{
int num; //番号
char name[BUF]; //名前
char clas[BUF]; //クラス
char commission[BUF]; //委員
int age; //年齢
};

int serch_num(struct Date st_dt[MAX_N] , int num){//番号を検索
int i;
for(i=0;i<MAX_N;i++){
if(st_dt[i].num==num)
return i;//見つかった配列要素番号
}
return -1;//検索出来なかった
}

void disp(struct Date st_dt[MAX_N] , int i){//指定された配列要素番号のデータを表示
printf("番号  = %d\n",st_dt[i].num);
printf("名前  = %s\n",st_dt[i].name);
printf("クラス = %s\n",st_dt[i].clas);
printf("委員  = %s\n",st_dt[i].commission);
printf("年齢  = %d\n",st_dt[i].age);
return ;
}

void main(void){
int serch_i=0,st_dt_i=0,n,st_dt_n;
char str[BUF]="";
char serch[5][BUF]={"番号 : ","名前 : ","クラス : ","委員 : ","年齢 : "};
char *sp;
FILE *fp;
struct Date st_dt[MAX_N];
char c[BUF];

fp = fopen("test.txt","r");

if ( fp == 0 ){
printf("open error\n");
exit(1);
}
while (fgets(c,BUF,fp) != NULL){//1行読み込み

for(serch_i=0;serch_i<5;serch_i++){//探す5行分ループ

if((sp = strstr(c,serch[serch_i])) == NULL)//現在調査中のserch内容が無かったら次
continue;

else{//あったら
sp+=strlen(serch[serch_i]);//探索した文字分シフト。
memcpy(str,sp,strlen(sp)-1);//改行コードの手前までコピー
str[strlen(sp)-1]='\0';//最後に終端記号をつける。

switch(serch_i){
case 0:
st_dt[st_dt_i].num=atoi(str); break;//番号を格納
case 1:
strcpy(st_dt[st_dt_i].name,str); break;//名前を格納
case 2:
strcpy(st_dt[st_dt_i].clas,str); break;//クラスを
case 3:
strcpy(st_dt[st_dt_i].commission,str); break;//委員を
case 4:
st_dt[st_dt_i].age=atoi(str); st_dt_i++; break;//年齢を
}
}
}
}
printf("番号を入力->\n");
scanf("%d",&n);

st_dt_n = serch_num(st_dt,n);//番号nのデータは配列要素番号st_dt_nにある

if(st_dt_n!=-1)
printf("この番号はst_dt[%d]のデータ\n",st_dt_n);
else{
printf("その番号はありません。\n");
return ;
}
printf("\n\n\n例えばst_dt[0]のデータは\n\n");

disp(st_dt, 0);//配列要素番号0番目のデータを表示

return ;
}
 
 
 
今回番号を指定して内容を探索しましたが、
serch_numの内容を変更したり、似たような関数をもう一つ作ったりすることで
名前から検索したり、委員名から探索したりすることも出来ることがわかりますね。

もし時間があればもっと色々機能を付けてみてください。


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

Name: 管理人 [URL]  ..伝説のハッカー(322,471ポイント)   Date: 2007/05/17(木) 17:51   No:7673     
Title: Re:ファイルから該当データの表示させたぃ・・    
なお、文字列が長すぎたときや、其の他諸々するべきエラー処理は何もしていませんから、
完璧なプログラムを目指すならエラーの置きそうな箇所全てにエラー処理をしておきましょう。
例えば上記で言えば、
else{
printf("その番号はありません。\n");
return ;
}
このような部分がエラー処理ですね。


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

Name: chii☆  ..かけだし(1,788ポイント)   Date: 2007/05/18(金) 09:28   No:7678     
Title: Re:ファイルから該当データの表示させたぃ・・    
こんなに丁寧にご教授下さって本当にぁりがとうござぃます!!!

この機能から、簡単な名簿システム(登録、検索、削除、更新)なようなものを作ってみようと思ぃます。

もし名簿システムを作る上で、ヒント(コツ)のようなものがあればお願ぃ致します☆
本当にぁりがとうござぃました!!!

またわからなぃところがぁれば申し訳ぁりませんが、ご教授願ぃます。



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

Name: 管理人 [URL]  ..伝説のハッカー(323,471ポイント)   Date: 2007/05/18(金) 21:53   No:7693     
Title: Re:ファイルから該当データの表示させたぃ・・    
名簿システムを作るうえでのコツ・・。

特に無いのでは^^;

スキルアップのコツと言う意味では・・、
標準関数に頼り過ぎないって事でしょうか。

例えば、atoi関数ってありますよね。
文字列を数値に変換する関数ですよね。
しかしあんなのは標準関数使わなくても出来ますよね。
ですからatoiならぬa2i関数などを自作して、文字列からintに変換する自作関数を作ってみたりしてはいかがでしょうか。
またstrlenにしてもstrcpyにしても、自分で、stringlenやstrcopyなどちょいと名前を変えた自作関数を
作ってみて、なるべく標準関数を使わないようにプログラムしてみるとか。
すると内部の処理がよくわかりますよ。

ちなみにatoiでは
文字コード - '0'
を計算する事で、一桁の数値が計算できますし、
stringlenでは、\0までの配列要素数をカウントすればよいだけ、
strcopyは中身をそのままコピーしたらいいだけですね。

私自身標準関数がいろいろある事をしったのは随分入門時から後のことでして、最初から自分で処理を書いていました。
今となっては結局そちらの方が近道だったのではないかと思っています。


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

Name: 管理人 [URL]  ..伝説のハッカー(323,451ポイント)   Date: 2007/05/18(金) 22:01   No:7694     
Title: Re:ファイルから該当データの表示させたぃ・・    
色々な自作関数については他トピで紹介しましょう。

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



Name: らんえぼ  ..ぴよぴよ(581ポイント)   Date: 2007/05/17(木) 19:57   No:7674       
Title: 画像処理について。    
こんにちわ。いつもお世話になってます!

質問させてください。

8近傍ラプラシアンフィルタを用いて輪郭が強調された画像にする問題です!

途中までは出来たんですが。。こんな感じです!

int MASK[3][3]={ {1, 1, 1},
{1, -8, 1},
{1, 1, 1}};
int k,l;
for(j=1;j<YSIZE-1;j++){
for(i=1;i<XSIZE-1;i++){

for(l=0;l<3;l++){
for(k=0;k<3;k++){
r2[i][j]+=(r1[i+k-1][j+l-1]*MASK[k][l]);
g2[i][j]+=(g1[i+k-1][j+l-1]*MASK[k][l]);
b2[i][j]+=(b1[i+k-1][j+l-1]*MASK[k][l]);
}
}

たぶんここまではあってると思います。。

このあとに、階調値が255を超える場合は255、0未満の場合は0に変更する

処理を加えるらしいのですがどうもうまくいきません。

分かる方教えてください!


ちなみに元のプログラムはこれです。

int MASK[3][3]={ {1, 1, 1},
{1, -8, 1},
{1, 1, 1}};
int k,l;
for(j=1;j<YSIZE-1;j++){
for(i=1;i<XSIZE-1;i++){
r2[i][j]=r1[i][j];
g2[i][j]=g1[i][j];
b2[i][j]=b1[i][j];
}
}


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


Name: asd  ..初心者(6,628ポイント)   Date: 2007/05/18(金) 10:44   No:7681     
Title: Re:画像処理について。    
>処理を加えるらしいのですがどうもうまくいきません。

どの様にやろうとして失敗しているのですか?

あと、階調値云々の前にRGB画像のままフィルタをかけようとしてませんか?
せめてグレースケール化してからエッジ強調するのが通常だと思いますが・・・。
(RGBそれぞれにマスク演算をするとめちゃくちゃな色になる気がします)

r2、g2、b2それぞれの計算が全て終わった後、再度全体を走査していき、255を超えていたら255に、0より小さかったら0にするfor文を入れればいいだけの気がしますが・・・。

#コンパイル可能なソースを貼り付けてもらえると検証がしやすいかと思います。
#現状ではRGBのままなのか256階調グレースケール画像なのかも分からないので、
#適切なアドバイスが出来ていないかもです。


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

Name: らんえぼ  ..ぴよぴよ(809ポイント)   Date: 2007/05/18(金) 15:08   No:7685     
Title: Re:画像処理について。    
for文を使うのですか?
自分はこうやったのですが。


int MASK[3][3]={ {1, 1, 1},
{1, -8, 1},
{1, 1, 1}};
int k,l;
for(j=1;j<YSIZE-1;j++){
for(i=1;i<XSIZE-1;i++){

for(l=0;l<3;l++){
for(k=0;k<3;k++){
r2[i][j]+=(r1[i+k-1][j+l-1]*MASK[k][l]);
g2[i][j]+=(g1[i+k-1][j+l-1]*MASK[k][l]);
b2[i][j]+=(b1[i+k-1][j+l-1]*MASK[k][l]);
}
}

if(r2>=255)
r2=255;
if(g2>=255)
g2=255;
if(b2>=255)
b2=255;

if(r2<=0)
r2=0;
if(g2<=0)
g2=0;
if(b2<=0)
b2=0;
}
}

こんな感じでやりました。


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

Name: asd  ..初心者(7,896ポイント)   Date: 2007/05/18(金) 16:06   No:7688     
Title: Re:画像処理について。    

>for(j=1;j<YSIZE-1;j++){
> for(i=1;i<XSIZE-1;i++){
>
> for(l=0;l<3;l++){
> for(k=0;k<3;k++){
> r2[i][j]+=(r1[i+k-1][j+l-1]*MASK[k][l]);
> g2[i][j]+=(g1[i+k-1][j+l-1]*MASK[k][l]);
> b2[i][j]+=(b1[i+k-1][j+l-1]*MASK[k][l]);
> }
> }
> }
>}


この書き方からするとr1、g1、b1、r2、g2、b2は画像のピクセルデータが入っている二次元配列だと
考えられます。
もうちょっと分かりやすくすると例えば、5*5ピクセルの画像があったとしましょう
(□、■1つがピクセル1つだと思ってください)

□□■□□
□■■□□
□□■□□
□□■□□
□■■■□

で、これを読み込むとこういう配列になると思います。


r1[][] = {
{255,255, 0,255,255},
{255, 0, 0,255,255},
{255,255, 0,255,255},
{255,255, 0,255,255},
{255, 0, 0, 0,255},
}

一応白と黒ピクセルのみなのでg1、b1も同じ値になると思ってください(白黒以外のカラーだとそれぞれ別になります)
で、ここにフィルタをかけていくのでそれぞれのピクセルの値が変化します(正しくフィルタをかけた結果じゃないです)


r2[][] = {
{356,342, -4, 42,320},
{230, -5, -5,135,168},
{255, 23, -6,185,541},
{145,255, 0,165,255},
{ -2, 0, -4, 0,255},
}


このまま画像として表示しようとすると不具合がおきます。
基本的にRGBの値(ピクセル)は0〜255の範囲となっているので、
それぞれのデータの内、負の値になっているところと、255を超えているところをそれぞれ強制的に0と255に置き換えます(下線部を書き換えます)


r2[][] = {
{255,255, 0, 42,255},
{230, 0, 0,135,168},
{255, 23, 0,185,255},
{145,255, 0,165,255},
{ 0, 0, 0, 0,255},
}


ですので配列の要素を見てあげないといけません。

int MASK[3][3]={ {1, 1, 1},
{1, -8, 1},
{1, 1, 1}};
int k,l;
for(j=1;j<YSIZE-1;j++){
for(i=1;i<XSIZE-1;i++){
for(l=0;l<3;l++){
for(k=0;k<3;k++){
r2[i][j]+=(r1[i+k-1][j+l-1]*MASK[k][l]);
g2[i][j]+=(g1[i+k-1][j+l-1]*MASK[k][l]);
b2[i][j]+=(b1[i+k-1][j+l-1]*MASK[k][l]);
}
}
}
}

/*ピクセル値を0〜255の範囲に*/
for(j=1;j<YSIZE-1;j++){
for(i=1;i<XSIZE-1;i++){
if(r2[i][j] > 255) r2[i][j] = 255;
if(g2[i][j] > 255) g2[i][j] = 255;
if(b2[i][j] > 255) b2[i][j] = 255;
if(r2[i][j] < 0) r2[i][j] = 0;
if(g2[i][j] < 0) g2[i][j] = 0;
if(b2[i][j] < 0) b2[i][j] = 0;
}
}


こんな感じでしょうか。

ちなみに、
>r2=255;
とすると配列のポインタを操作することになるのでそのままアクセスしようとすると場合によってはプログラムが落ちるかもです。

分かりにくかったり、何か勘違いをしていたらゴメンナサイ。


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



Name: はね  ..かけだし(2,400ポイント)   Date: 2007/05/16(水) 17:40   No:7638       
Title: αブレンディングについて    
キャラクタの画像の背景を透明にしたいのですが上手く透明になってくれません

DXライブラリではddsファイルは使用することが出来ないのでしょうか?


また、自分で行ったddsファイルの作り方が間違っているといけないので
制作手順も書かせていただきます。

char.bmp(元となる画像) char_a.bmp(キャラ部分を白に背景を黒にした白黒画像)を制作。

DirectX Texture Toolでchar.bmpとchar_a.bmpをopen

saveでddsファイルを制作。

このような手順で制作しましたが、間違っている場合は指摘お願いします


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


Name: Justy  ..ハッカー(101,199ポイント)   Date: 2007/05/16(水) 18:18   No:7639     
Title: Re:αブレンディングについて    
 DDSは使えるはずです。
 が、対応しているカラーフォーマット(D3DFMT_XXXXX)が限定されている可能性があります。

 どのフォーマットが対応しているかは本家のBBSで訊いて見てください。



 ここからは確かな話ではありませんが、以下のフォーマットが対応していそうな
臭いがします。

D3DFMT_R8G8B8
D3DFMT_A8R8G8B8
D3DFMT_X8R8G8B8
D3DFMT_R5G6B5
D3DFMT_X1R5G5B5
D3DFMT_A1R5G5B5
D3DFMT_A4R4G4B4
D3DFMT_R3G3B2
D3DFMT_A8R3G3B2
D3DFMT_X4R4G4B4
D3DFMT_A2B10G10R10
D3DFMT_A8B8G8R8
D3DFMT_X8B8G8R8
D3DFMT_A2R10G10B10


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

Name: はね  ..かけだし(2,357ポイント)   Date: 2007/05/17(木) 17:41   No:7671 解決!     
Title: Re:αブレンディングについて    
返事遅れて申し訳ありません

なるほど、フォーマットですか。
確認してみます

ありがとうございました


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



Name: @とんぷぅ〜  ..中級者(10,320ポイント)   Date: 2007/05/17(木) 14:00   No:7653       
Title: 無題    
こんにちは。分からないことがあったので質問させて下さい。

実数型と実数型の計算で、計算結果を整数型で表示することは可能でしょうか?
また、可能だとしたらどのようにすればよいでしょうか?

例えば-2147483647 + 1(オペランドは両方実数型)= -2147483646(整数型で表示)
にしたいです。よろしくお願いします。


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


Name: @とんぷぅ〜  ..中級者(10,330ポイント)   Date: 2007/05/17(木) 14:01   No:7654     
Title: 実数型と整数型について    
すみません。タイトルを入れ忘れました。

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

Name: box  ..比類無きプログラマー(67,996ポイント)   Date: 2007/05/17(木) 14:18   No:7655     
Title: Re:無題    
> 実数型と実数型の計算で、計算結果を整数型で表示することは可能でしょうか?

演算結果をint型の変数に格納して出力したり、
int型の変数に格納しなくても、出力時にint型にキャストしたりすればよいです。

ただし、実数(浮動小数点数)の方が整数よりも扱える値の範囲が広いので、
演算結果がint型で扱える範囲に収まらない場合があります。あらかじめ注意が必要です。


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

Name: @とんぷぅ〜  ..中級者(10,356ポイント)   Date: 2007/05/17(木) 14:51   No:7657     
Title: Re:無題    
boxさん。お世話になっております。

早速やってみます。ありがとうございました。


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

Name: @とんぷぅ〜  ..中級者(10,799ポイント)   Date: 2007/05/17(木) 15:28   No:7659     
Title: Re:無題    
boxさん。出来ました。ありがとうございました。

int lop;     // 左のオペランドに入力する値
int rop; // 右のオペランドに入力する
long mod; // 除算の余り
int max = INT_MAX; // 表現可能な最大値
int min = INT_MIN; // 表現可能な最小値
long long result; // 計算結果を格納

char *check; // 変換不可能な文字を格納
char op; // 入力する演算子

case '/' :
if ( rop == 0 ) {
printf ( "error : division error\n" );
exit ( -1 );
}

// 除算のオーバーフローを考慮
if ( ( lop == min ) && ( rop == -1 ) ) {
printf ( "error : over_flow!!\n" );
exit ( 0 );
}
result = (long long)lop % (long long)rop;

// 割り算の結果として余りが出なかった場合
if ( result == 0 ) {
result = (long long)lop / (long long)rop;
printf ( "%d %c %d = %d", lop, op, rop, result );
exit ( 0 );

// 割り算の結果として余りが出た場合
} else if ( result != 0 ) {
result = (long long)lop / (long long)rop;
mod = (long long)lop % (long long)rop;
printf ( "%d %c %d = %d余り%d", lop, op, rop, result, mod );
exit ( 0 );
}
以前も質問させていただいたのですが、除算で余りがないときは商だけを表示して
余りがあるときは商と余りを表示したいです(5 / 1= 5)(5 / 2= 2余り1)という
感じです。それが余りがある場合全て余りが0になってしまいます。
どうすればよいのでしょうか?long longの使い方が違うのでしょうか?

見にくいかと思いますが、よろしくお願いします。


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

Name: @とんぷぅ〜  ..中級者(10,803ポイント)   Date: 2007/05/17(木) 15:43   No:7660     
Title: Re:無題    
すみません。除算用にint型で宣言した物を使用したら出来ました。
long long型で出来るのかは分からないので、知ってらっしゃる方
がいましたら、よろしくお願いします。


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

Name: box  ..比類無きプログラマー(67,889ポイント)   Date: 2007/05/17(木) 15:52   No:7662     
Title: Re:無題    

> result = (long long)lop % (long long)rop;
> mod = (long long)lop % (long long)rop;
変数の意味合いを統一する方がよいです。
割り算の商をresultに、余りをmodに格納するのでは?

全体としてキャストのオンパレードになっていますが、
そうするくらいなら初めから型を統一しておけばよいのではないでしょうか。

また、long long型の書式文字列は%dでよいのでしょうか。



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

Name: @とんぷぅ〜  ..中級者(10,985ポイント)   Date: 2007/05/17(木) 16:25   No:7664 解決!     
Title: Re:無題    
boxさんありがとうございました。

<<割り算の商をresultに、余りをmodに格納するのでは?
はい。その通りです。無駄な処理をしていました。

<<全体としてキャストのオンパレードになっていますが...
確かに無駄の極みでした(笑)

<<また、long long型の書式文字列は%dでよいのでしょうか。
ご指摘ありがとうございます。%lldでした。失礼しました。

boxさんのおかげで解決できました。ありがとうございました。




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



Name: sub  ..入門者(3,260ポイント)   Date: 2007/05/15(火) 08:15   No:7579       
Title: ファイルが読み込めない?    
いつもお世話になっています。
今回も質問させていただきたいと思います。よろしくお願いします。

ファイルをrで読み込む、qなら終了、dでそれを表示して、sで名前などの順番にソートするプログラムなのですがrで読み込む段階でエラーがでてきてしまいます。

コマンドsを新しく作る前まではちゃんとできていたのでsの部分が悪いと思うのですがどこかわかりません。

ソースは


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int cmp_name(const void *a,const void *b);
int cmp_eng(const void *a,const void *b);
int cmp_mat(const void *a,const void *b);
int cmp_sci(const void *a,const void *b);



typedef struct score{
char name[40];
int eng;
int mat;
int sci;
} Score;

Score *data;

int main(void)
{
FILE *fp;
char cmd[20], fname[20], rank, member[6];
int j=1,number;

while (rank!='q'){
printf("CMD>");
fflush(stdout);
fgets(cmd, 20, stdin);
sscanf(cmd, "%c %s", &rank, fname);


switch(rank){


case 'r':
if ((fp = fopen(fname, "r")) == NULL){
printf("Cannot open the File!\n");
return (-1);
}

for(j=1;j<=number;j++){
fscanf(fp, "%s %d %d %d", data[j].name, &data[j].eng, &data[j].mat, &data[j].sci);
}

break;


case 'd':

fgets(member, 6, fp);
sscanf(member,"%d",&number);
data=(Score*)malloc(sizeof(Score)*number);



for(j=1;j<=number;j++){
fscanf(fp, "%s %d %d %d", data[j].name, &data[j].eng, &data[j].mat, &data[j].sci);
printf("名前:%s\n",data[j].name);
printf("英語:%d\n",data[j].eng);
printf("数学:%d\n",data[j].mat);
printf("理科:%d\n\n",data[j].sci);
}
break;


case 'q':
fclose(fp);
printf("File close!\n");
break;

case 's':


if(!strcmp(fname,"name")){
qsort(data,number,sizeof(Score),cmp_name);
}else if(!strcmp(fname,"eng")){
qsort(data,number,sizeof(Score),cmp_eng);
}else if(!strcmp(fname,"mat")){
qsort(data,number,sizeof(Score),cmp_mat);
}else if(!strcmp(fname,"sci")){
qsort(data,number,sizeof(Score),cmp_sci);
}




break;


default:
printf("コマンドを正しく入力してください\n");
}
}
return (0);
}

int cmp_name(const void *a,const void *b)
{
Score *va,*vb;
va=(Score*)a;vb=(Score*)b;

return(strcmp(va->name,vb->name));
}

int cmp_eng(const void *a,const void *b)
{
Score *va,*vb;
va=(Score*)a;vb=(Score*)b;

return(va->eng - vb->eng);
}

int cmp_mat(const void *a,const void *b)
{
Score *va,*vb;
va=(Score*)a;vb=(Score*)b;

return(va->mat - vb->mat);
}

int cmp_sci(const void *a,const void *b)
{
Score *va,*vb;
va=(Score*)a;vb=(Score*)b;

return(va->sci - vb->sci);
}



でファイルは

3
a 10 20 30
b 40 10 20
c 30 30 10

エラーメッセージ

CMD>r data1.txt
4 [main] ex04 972 _cygtls::handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
1038 [main] ex04 972 open_stackdumpfile: Dumping stack trace to ex04.exe.stackdump

というふうにでます。

間違っている点を教えていただけるとうれしいです。


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


Name: box  ..比類無きプログラマー(67,615ポイント)   Date: 2007/05/15(火) 09:03   No:7580     
Title: Re:ファイルが読み込めない?    
ロジックに無理があるようです。

'r'コマンドでファイルポインタfpを取得して、
1番目〜number番目のデータを読んでいます。

一方、'd'コマンドでは、取得済みのファイルポインタfpから、
numberの値を取得し、さらにここでも1番目〜number番目のデータを読んでいます。

'r'→'d'の順に実行すると、まだnumberの値が確定していないのに
1番目〜number番目のデータを読もうとします。

逆に、'd'→'r'の順に実行すると、まだファイルポインタfpの値が確定していないのに
そこから読もうとしています。

また、1番目〜number番目のデータを2度読む必要はないはずです。
さらに、'd'でnumberの分だけ領域を確保して、配列のように扱う際、
アクセスできる添字は1〜numberではなく0〜(number-1)です。
C言語の配列はゼロ始まりです。


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

Name: sub  ..入門者(4,731ポイント)   Date: 2007/05/15(火) 19:35   No:7610     
Title: Re:ファイルが読み込めない?    
ここが間違っていたんですね・・・どうもありがとうございます。

やり直してみるとエラーはでないのですが思うように表示できません・・・


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int cmp_name(const void *a,const void *b);
int cmp_eng(const void *a,const void *b);
int cmp_mat(const void *a,const void *b);
int cmp_sci(const void *a,const void *b);



typedef struct score{
char name[40];
int eng;
int mat;
int sci;
} Score;

Score *data;

int main(void)
{
FILE *fp;
char cmd[20], fname[20], rank, member[6];
int j=1,number;

while (rank!='q'){
printf("CMD>");
fflush(stdout);
fgets(cmd, 20, stdin);
sscanf(cmd, "%c %s", &rank, fname);


switch(rank){


case 'r':
if ((fp = fopen(fname, "r")) == NULL){
printf("Cannot open the File!\n");
return (-1);
}

fgets(member, 6, fp);
sscanf(member,"%d",&number);
data=(Score*)malloc(sizeof(Score)*number);



for(j=1;j<=number;j++){
fscanf(fp, "%s %d %d %d", data[j].name, &data[j].eng, &data[j].mat, &data[j].sci);
}

break;


case 'd':



for(j=1;j<=number;j++){
printf("名前:%s\n",data[j].name);
printf("英語:%d\n",data[j].eng);
printf("数学:%d\n",data[j].mat);
printf("理科:%d\n\n",data[j].sci);
}
break;


case 'q':
fclose(fp);
printf("File close!\n");
break;

case 's':


if(!strcmp(fname,"name")){
qsort(data,number,sizeof(Score),cmp_name);
}else if(!strcmp(fname,"eng")){
qsort(data,number,sizeof(Score),cmp_eng);
}else if(!strcmp(fname,"mat")){
qsort(data,number,sizeof(Score),cmp_mat);
}else if(!strcmp(fname,"sci")){
qsort(data,number,sizeof(Score),cmp_sci);
}




break;


default:
printf("コマンドを正しく入力してください\n");
}
}
return (0);
}

int cmp_name(const void *a,const void *b)
{
Score *va,*vb;
va=(Score *)a;
vb=(Score *)b;

return(strcmp(va->name,vb->name));
}

int cmp_eng(const void *a,const void *b)
{
Score *va,*vb;
va=(Score *)a;
vb=(Score *)b;

return((va->eng) - (vb->eng));
}

int cmp_mat(const void *a,const void *b)
{
Score *va,*vb;
va=(Score*)a;
vb=(Score*)b;

return(va->mat - vb->mat);
}

int cmp_sci(const void *a,const void *b)
{
Score *va,*vb;
va=(Score*)a;
vb=(Score*)b;

return(va->sci - vb->sci);
}




このようにしたのですがコマンドsの時にnameのソートはやってくれるのですがeng,mat,sciのソートをしてくれてないようです。プログラムが間違っているのでしょうか?

ファイルが

3
b 10 20 30
a 40 10 20
c 30 3 10




CMD>r data2.txt
CMD>s name
CMD>d
名前:a
英語:40
数学:10
理科:20

名前:b
英語:10
数学:20
理科:30

名前:c
英語:30
数学:3
理科:10

CMD>s mat
CMD>d
名前:a
英語:40
数学:10
理科:20

名前:b
英語:10
数学:20
理科:30

名前:c
英語:30
数学:3
理科:10

CMD>

こういう結果になってしまいます。s matのコマンドでもs nameが使われているような感じなのですがデバッグしてみるとちゃんとint cmp_mat(const void *a,const void *b)が使われているみたいなんです。

どこが間違っているのか教えていただけますでしょうか。


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

Name: box  ..比類無きプログラマー(67,731ポイント)   Date: 2007/05/15(火) 20:05   No:7613     
Title: Re:ファイルが読み込めない?    

> for(j=1;j<=number;j++){
> for(j=1;j<=number;j++){

この2行を修正してください。
1からnumberではなく、0から(number-1)です。
前の回答で書きました。

それから、
・コンパイル時に出る警告をなくしてください
・プログラムを終了する前に、動的に確保していた領域をfreeしてください



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

Name: sub  ..入門者(4,831ポイント)   Date: 2007/05/15(火) 23:22   No:7618     
Title: Re:ファイルが読み込めない?    
できましたー^^;

どうもありがとうございました!

でも
・プログラムを終了する前に、動的に確保していた領域をfreeしてください
ができません・・・

最期にfcloseするだけではだめなのでしょうか?


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

Name: box  ..比類無きプログラマー(67,887ポイント)   Date: 2007/05/16(水) 10:17   No:7624     
Title: Re:ファイルが読み込めない?    
使っていたファイルのクローズと
プログラム実行中にmalloc()系の関数で動的に確保した領域の開放とは、
別々のことを意味します。

今回のプログラムでは、'q'コマンドを入力して
プログラムを終了するところに
free(data);
を書いておけばよいでしょう。

実際には、プログラムを終了するときに
 ・開いていたファイルは自動的にクローズする
 ・動的に確保していた領域は自動的に開放する
らしいのです。しかし、プログラムのお作法として
 ・自分が開いたものは自分で閉じる
 ・自分が確保した領域は自分で明け渡す
というやり方がよいと思います。


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

Name: sub  ..入門者(4,922ポイント)   Date: 2007/05/17(木) 15:45   No:7661 解決!     
Title: Re:ファイルが読み込めない?    
そうなのですか・・・どうもありがとうございます。

プログラム初めて半年ちょっとになるのですが同級生についていけてないように感じます・・・

少しずつでも覚えていけばいつかわかるようになると思って頑張ります。


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



Name: 管理人 [URL]  ..伝説のハッカー(313,755ポイント)   Date: 2007/05/15(火) 10:21   No:7581       
Title: 最良の選択肢は?    
 
 
今、ポーカーをする時、コンピュータがどんな行動を取れば一番強くなるか考えていますが、うまく計算出来ません・・。

数学的に確率を計算するのが一番なのでしょうけど、この場合、相手のカードや他ものすごい様々な場合わけを計算する必要があり、手計算出来ないので、
実際にシミュレートしてみて、確率を出そうと思いました。
しかしシミュレート結果に不思議な値が出たのでちょっとお聞きしたいと思い、投稿しました。

シミュレートの対象は以下のような状況です。

ポーカーを現在しているとします。
今配られた5枚のカード、何の役もありません。 このとき、
・1枚交換した方がいいのか?
・2枚交換した方がいいのか?
・3枚交換した方がいいのか?
・4枚交換した方がいいのか?
・5枚交換した方がいいのか?
一体どのような行動をしたら一番役になりやすいのか、調べる為シミュレートを行います。

とりあえず、フラッシュになりかけているときは、行動を変える・・などやっていると条件分岐がきりないので、
「ワンペアじゃないとき、ワンペアになる確率」と限定してシミュレートを行います。
添付に書いたプログラムは手札にワンペアがあったら即「役あり」と判定しているので、ワンペア以外にもツーペアやフルハウスなどになっているかもしれませんが、それはよしとします。

すると面白い結果になりました。
100万回シミュレートを行って確率を出しました。

・手札を山に返した時の結果

1枚の交換 [24.7632%]
2枚の交換 [38.2780%]
3枚の交換 [45.4380%]
4枚の交換 [48.8022%]
5枚の交換 [49.2094%]

・手札を山に返さなかったときの結果
1枚の交換 [25.5863%]
2枚の交換 [39.9794%]
3枚の交換 [47.5972%]
4枚の交換 [50.2623%]
5枚の交換 [48.8712%]

 
 
このようになりました。
手札を山に返した時、つまり、山に返したカードを引いてしまうかもしれないときと、そうではないときで
何枚交換すればよいのか変わってしまいます。

公式ルールは後者なので、4枚の交換がベストということになるのですが、何故4枚になるのか腑に落ちません・・。
シミュレートのしかたが間違っているんでしょうか?

みなさんご意見お聞かせいただければ光栄ですm(_ _)m

p.s.
ちなみに、「手札を山に返す」時はそのまま。
「手札を山に返さない」時はmain関数内の、「hand_ini関数」を呼んでいる行をコメントアウトすれば出来ます。


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


Name: 管理人 [URL]  ..伝説のハッカー(314,988ポイント)   Date: 2007/05/15(火) 10:52   No:7582     
Title: Re:最良の選択肢は?    
先ほどのプログラムは、毎回自分が最初に交換を行っているので、今度は、先に誰かが交換することを想定して場合わけで結果を出しています。
表にしたほうが見やすいでしょうけど、ちょっと時間がないので、こうしました。

どんな状況でもやはり4枚がベストのようです。


実行結果
先に誰かが0枚交換した場合
1枚の交換 [25.5410%]
2枚の交換 [39.9990%]
3枚の交換 [47.5020%]
4枚の交換 [50.5340%]
5枚の交換 [49.0110%]

先に誰かが1枚交換した場合
1枚の交換 [25.3630%]
2枚の交換 [39.9610%]
3枚の交換 [47.5550%]
4枚の交換 [50.2480%]
5枚の交換 [49.0590%]

先に誰かが2枚交換した場合
1枚の交換 [25.6990%]
2枚の交換 [40.1650%]
3枚の交換 [47.6750%]
4枚の交換 [50.1120%]
5枚の交換 [48.8300%]

先に誰かが3枚交換した場合
1枚の交換 [25.6230%]
2枚の交換 [39.9470%]
3枚の交換 [47.5820%]
4枚の交換 [50.4380%]
5枚の交換 [48.8660%]

先に誰かが4枚交換した場合
1枚の交換 [25.5140%]
2枚の交換 [39.8960%]
3枚の交換 [47.4030%]
4枚の交換 [50.1650%]
5枚の交換 [49.0540%]

先に誰かが5枚交換した場合
1枚の交換 [25.4450%]
2枚の交換 [39.9640%]
3枚の交換 [47.7610%]
4枚の交換 [50.2050%]
5枚の交換 [48.7480%]

先に誰かが6枚交換した場合
1枚の交換 [25.6650%]
2枚の交換 [39.7080%]
3枚の交換 [47.7760%]
4枚の交換 [50.3130%]
5枚の交換 [48.9960%]

先に誰かが7枚交換した場合
1枚の交換 [25.2350%]
2枚の交換 [39.9360%]
3枚の交換 [47.5260%]
4枚の交換 [50.2080%]
5枚の交換 [48.9690%]

先に誰かが8枚交換した場合
1枚の交換 [25.6600%]
2枚の交換 [40.2880%]
3枚の交換 [47.2740%]
4枚の交換 [50.4220%]
5枚の交換 [49.1440%]

先に誰かが9枚交換した場合
1枚の交換 [25.5760%]
2枚の交換 [39.7840%]
3枚の交換 [47.4700%]
4枚の交換 [50.6480%]
5枚の交換 [48.8950%]

先に誰かが10枚交換した場合
1枚の交換 [25.5890%]
2枚の交換 [39.9460%]
3枚の交換 [47.3880%]
4枚の交換 [50.1780%]
5枚の交換 [48.9640%]

先に誰かが11枚交換した場合
1枚の交換 [25.7240%]
2枚の交換 [39.7460%]
3枚の交換 [47.3830%]
4枚の交換 [50.4470%]
5枚の交換 [49.2090%]

先に誰かが12枚交換した場合
1枚の交換 [25.7430%]
2枚の交換 [39.9830%]
3枚の交換 [47.5670%]
4枚の交換 [50.3420%]
5枚の交換 [48.8880%]

先に誰かが13枚交換した場合
1枚の交換 [25.4380%]
2枚の交換 [40.0610%]
3枚の交換 [47.5610%]
4枚の交換 [50.1380%]
5枚の交換 [48.7950%]

先に誰かが14枚交換した場合
1枚の交換 [25.4240%]
2枚の交換 [40.1110%]
3枚の交換 [47.8790%]
4枚の交換 [50.2420%]
5枚の交換 [49.1760%]

先に誰かが15枚交換した場合
1枚の交換 [25.4270%]
2枚の交換 [39.8580%]
3枚の交換 [47.4580%]
4枚の交換 [50.2310%]
5枚の交換 [48.9460%]



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

Name: Justy  ..ハッカー(100,692ポイント)   Date: 2007/05/16(水) 02:20   No:7620     
Title: Re:最良の選択肢は?    
相手のカードや他ものすごい様々な場合わけを計算する必要があり
 相手のカードのカード覗いて CPUが思考したら、まずくないですか?
 あ、ひょっとしてスタッド系のポーカーですか?
 それとも覗いてもOKでとにかく最強を目指していますか?


シミュレートのしかたが間違っているんでしょうか
 ざっと見た感じ、特に問題ないように見えます。
(細かいところで幾つかありますが、大勢に影響しないものばかりです)

 確率の細かい計算は他の方に譲るとして(笑)、
何か確率計算上の何かバランスの分岐点がそのあたりにあるんでしょうかね。


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

Name: 管理人 [URL]  ..伝説のハッカー(317,343ポイント)   Date: 2007/05/16(水) 06:51   No:7622     
Title: Re:最良の選択肢は?    
相手のカードを覗いてCPUが思考したらまずいです。
しかし、どの場合でどのような確率となるのかは知っていないと選択肢として選ばせる事が出来ないので、調べたかったのです・・。

ルールはいたって標準です。
普通にカードを5枚配って人には見せず、1回交換ののち、勝敗判定です。

>(細かいところで幾つかありますが、大勢に影響しないものばかりです)

どの辺がおかしかったでしょうか?
厳密な所まで間違いがないようにしたいので、よければ教えてください><

教授など、べてらんのプログラマや数学の教授に聞きに行きましたけど、結局はっきりした答えは返って来ませんでした。
ですので、ベテランのポーカーマニアに聞いてみました。
何も役が無かった時は、4枚交換し、「1枚は役と成った時、一番強いカードを残す」ということでした。
そして、確率は40%以上だということだったので、シミュレート結果は正しそうでした。


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

Name: Justy  ..比類無きプログラマー(99,693ポイント)   Date: 2007/05/16(水) 11:55   No:7627     
Title: Re:最良の選択肢は?    
しかし、どの場合でどのような確率となるのかは知っていないと
選択肢として選ばせる事が出来ないので、調べたかったのです・・
 なるほど。
 難しそうですね。


どの辺がおかしかったでしょうか?
厳密な所まで間違いがないようにしたいので、よければ教えてください><
 どれも現状ではそんなにたいしたことではないのですが

・ rand()を2つ組にして使う
 この話はrand()内で線形合同法が使われている場合に限ります。

 rand()を1個ずつ使うときは問題はありません。
 が、複数の組として利用すると質が悪くなります。

 x = rand();
 y = rand();
 
 このように rand()を2回使って xと yの値を出した場合、使用者が期待する
2つの値のとりうる組み合わせは RAND_MAX * RAND_MAX通りです。
 が、上記の場合それだけの組み合わせを確保できません。

 今回は %を使って相当小さく丸めているのでほとんど影響はないのですが、
可能なら例えば

int t = rand() % (4 * 13);
x = t / 13;
y = t % 13;

 のように複数の組で使用しないようにするのが理想的です。

 MTのようなある程度の複数の組でも質が保証されているものや、
boost::randomのようなオブジェクト毎に異なるシードを保持できるものを
使うとそういう問題は起こりません。



・ 手札への配り方
 現在の「誰かがそのカードを所持していたら配布を有効にせず戻る」ようなやり方ですと
空きカードが少なくなったとき著しくパフォーマンスが低下します。
 特に上の乱数問題と絡んで最悪無限ループに近い状態になったりします。

 ゲームの最初の段階で山札データを用意して、そこから手札に配るようにすれば、
一定時間で配布を完了することができると思います。



教授など、べてらんのプログラマや数学の教授に聞きに行きましたけど
 ポーカーの確率計算は最初に配られた段階でのものはよく見掛けますが、
その後の交換までとなるとあまり見ないですね。


「1枚は役と成った時、一番強いカードを残す」ということでした。
 あー、私もそれに近いことをポーカーでよくやります。
 10よりも大きい数字だった場合のみそれを残して残りを交換。
 10未満だったら全部交換ってかんじで。


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

Name: 管理人 [URL]  ..伝説のハッカー(318,209ポイント)   Date: 2007/05/16(水) 12:13   No:7628     
Title: Re:最良の選択肢は?    
詳しくありがとうございます。
しかしまだ理解できず、

>2つの値のとりうる組み合わせは RAND_MAX * RAND_MAX通りです。
>が、上記の場合それだけの組み合わせを確保できません。

という意味がわかりません。
VC++において、randの値は

static long x=S;
int rand() { x=x*A+C; return(int)(x>>16)&32767; }
void srand(unsigned s) { x=s; if (F) rand(); }
A=214013, C=2531011, F=0, S=1。

によって生成されているんですよね?
連続で同じ値が出ることがないか調べてみたところ、100万回中30回位でるようです・・。
妥当な数値かなと思います。
うぅん、何故よくないのかわかりません・・。


後、rand関数について疑問に思ったのが、Linuxでプログラムを書いたときは、RAND_MAXが2の31乗だったのですが、ウィンドウズでは2の15乗ですよね。
コンパイラによるこういう違いって結構多いんですか?
ちょくちょくあったらすんなり移植できないですね・・。



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

Name: 管理人 [URL]  ..伝説のハッカー(318,376ポイント)   Date: 2007/05/16(水) 12:55   No:7629     
Title: Re:最良の選択肢は?    
紹介いただいたSFMTを用いて改めてシミュレートしてみました。
randとの比較を以下に示します。


rand() NextMt()
1枚の交換 [25.5863%] [25.6027%]
2枚の交換 [39.9794%] [40.0063%]
3枚の交換 [47.5972%] [47.5172%]
4枚の交換 [50.2623%] [50.1816%]
5枚の交換 [48.8712%] [48.9857%]

 
 
このような結果になりました。
SFMTは予測可能ではあれども、かなり良質な乱数のようですね。
今後シミュレートや良質な乱数が必要な時はこれを利用したいと思います。

余談ですが・・・、
Justyさん、最終ランクアップおめでとうございますw
といっても先ほど下がってしまったようですが^^;
HP開設当時から本当にお世話になっています。
これからもよろしくお願いします。
次は100万ポイント目指して下さいm(_ _)m


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

Name: YuO  ..かけだし(1,163ポイント)   Date: 2007/05/16(水) 13:05   No:7630     
Title: Re:最良の選択肢は?    
本論部分はいろいろと考えることが多そうなのでそうでない部分について。


> >2つの値のとりうる組み合わせは RAND_MAX * RAND_MAX通りです。

正確には,(RAND_MAX + 1) * (RAND_MAX + 1)通りですね。
# rand()の戻り値は[0, RAND_MAX]なので。

> >が、上記の場合それだけの組み合わせを確保できません。
> という意味がわかりません。

非常に品質の悪いrandの実装の場合,あるrand()の戻り値が決定すると,次の戻り値は一意に決まったりします。
良い乱数、悪い乱数 : http://www001.upp.so-net.ne.jp/isaku/rand.html


> 後、rand関数について疑問に思ったのが、Linuxでプログラムを書いたときは、RAND_MAXが2の31乗だったのですが、ウィンドウズでは2の15乗ですよね。
> コンパイラによるこういう違いって結構多いんですか?
> ちょくちょくあったらすんなり移植できないですね・・。

RAND_MAXは最低32767であることは規格で定められていますが,実装定義の事項とされています。
変数の幅が実装定義なのと同じです。
# rand()の実装にMT使っていても規格違反ではないですし。


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

Name: Justy  ..ハッカー(100,412ポイント)   Date: 2007/05/16(水) 13:08   No:7631     
Title: Re:最良の選択肢は?    
うぅん、何故よくないのかわかりません

 VC2003/2005と環境を特定してしまえば、たしかに VCはアルゴリズムが改善されいて
上位ビットから使うようになっているのでほとんど問題にはなりませんが、
他の環境では保証できません。
 それに改善後であってもやはり完全ではありません。

うえぽんSW局
http://shinshu.fm/MHz/14.30/2006/12/17/

 まぁ、そうはいっても、今回のケースではまず問題にはならないので、
(ここまでひっぱいといて何ですが)気にしなくてもいいのかもしれません。


コンパイラによるこういう違いって結構多いんですか?
 それはもう山のようにありますよ。
 環境(OSとか)の違い、コンパイラの制限からの違い、etc...
 規格書に載って規定されている項目ですら、コンパイラベンダーが守ってなくて
挙動が異なることもありますしね。


ちょくちょくあったらすんなり移植できないですね・・。
 同じ VisualStudioでもバージョン違いやコンパイラの設定でビルドできなくなりますからねぇ。



Justyさん、最終ランクアップおめでとうございますw

 ありがとうございます。


といっても先ほど下がってしまったようですが
 あ、ほんとだ(w



@ YuOさん
正確には,(RAND_MAX + 1) * (RAND_MAX + 1)通りですね。
 おー、そうですね、失礼しました。


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

Name: Justy  ..ハッカー(100,569ポイント)   Date: 2007/05/16(水) 13:47   No:7634     
Title: Re:最良の選択肢は?    
HP開設当時から本当にお世話になっています
 あー、あのころ開設時だったんですか。
 前からあったのかなぁ、と思ってました。

次は100万ポイント目指して下さいm(_ _)m
 なかなか厳しい数字ですが、頑張ります <(_ _)>


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

Name: 管理人 [URL]  ..伝説のハッカー(318,584ポイント)   Date: 2007/05/17(木) 00:59   No:7645     
Title: Re:最良の選択肢は?    
なるほど、確かにLinuxで乱数発生させたとき、偶数と奇数が交互に出てきた時にはびっくりしました。
色んな環境を考慮する事も必要ですね。

なんだか最高ランクになると目指すところがなくなってしまい、つまんないですねw
まぁこれ以上ランク作っても結局自分達だけのためのランクになってしまいそうなので、この辺のキリのいい数字でやめときます^^;


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



Name: やっかい者  ..ぴよぴよ(298ポイント)   Date: 2007/05/11(金) 20:06   No:7519       
Title: 定数の割り当てについて    
#define IDC_COMBOBOX 2001
#define IDC_STARTBUTTON 2002
このように定数設定して

case WM_COMMAND:



  case IDC_STARTBUTTON:
このように使う場合ですが・・・

定数"2001"とか"2002"は何か意味があるでしょうか?
他の定数と重複しない場合は適当な値でもかまわないでしょうか?
例えば1,2,3,とか

ヘッダーファイルを眺めていると4桁の数字が並んでいますが、
意味が全然わかりません・・・ご教授お願いします。
毎度、初歩的な質問で恐縮です。


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


Name: 管理人 [URL]  ..伝説のハッカー(312,795ポイント)   Date: 2007/05/13(日) 23:18   No:7549     
Title: Re:定数の割り当てについて    
申し訳ないです、管理人力不足のため
http://www.google.co.jp/search?hl=ja&q=IDC_COMBOBOX&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
この辺で出てくる事しかわかりません、(_ _|||)


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

Name: YuO  ..ぴよぴよ(552ポイント)   Date: 2007/05/13(日) 23:54   No:7552     
Title: Re:定数の割り当てについて    
> 定数"2001"とか"2002"は何か意味があるでしょうか?
無いです。あくまでコントロール等のIDですから。


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

Name: やっかい者  ..ぴよぴよ(846ポイント)   Date: 2007/05/14(月) 11:03   No:7554 解決!     
Title: Re:定数の割り当てについて    
皆様ありがとうございます。

それでは、他と重複しない適当な値で挑戦します。
でも、標準のヘッダーファイルに意味ありげな数値が
並んでいるので・・・気になりました。


実は下記の記述で今のところ他に弊害が出ないので、これで行こうと想います。

//#define IDC_COMBOBOX 2001
//#define IDC_STARTBUTTON 2002
//#define IDC_ENDBUTTON 2003

#define IDC_REC 2001//手動録音開始
#define IDC_AUTOREC 2002//自動録音開始
#define IDC_RECSTOP 2003//録音中止
#define IDC_LEVELUP 2004//レベル増加
#define IDC_LEVELDW 2005//レベル減少
#define IDC_UPSTEP1 2006//増加微調整
#define IDC_DWSTEP1 2007//減少微調整


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

Name: keichan  ..上級者(22,060ポイント)   Date: 2007/05/14(月) 11:51   No:7557     
Title: Re:定数の割り当てについて    
>でも、標準のヘッダーファイルに意味ありげな数値が並んでいるので・・・気になりました。
"標準の"ヘッダーとは具体的にどのヘッダーでしょうか?


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

Name: やっかい者  ..ぴよぴよ(945ポイント)   Date: 2007/05/16(水) 23:45   No:7643     
Title: Re:定数の割り当てについて    

例えば
WINUSER.H

#define SPI_GETCOMBOBOXANIMATION 0x1004
#define SPI_SETCOMBOBOXANIMATION 0x1005
ですがこれは、定数設定ではないでしょうか?





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

Name: YuO  ..かけだし(1,191ポイント)   Date: 2007/05/17(木) 00:11   No:7644     
Title: Re:定数の割り当てについて    
それはSystemParametersInfo用の定数です。
目的が異なる定数なので,全く問題ありません。


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



Name: たのもー  ..かけだし(1,683ポイント)   Date: 2007/05/12(土) 01:11   No:7524       
Title: 無題    
こんばんは。いつもお世話になってます。
今回は、コンパイルまでは一応できて、いざ実行してみると
値入力までは普通に行くんですけど結果が表示されず
カーソルがずっと点滅している状態です。
毎度のことですけど手助けお願いできますか。
よろしくお願いしますm(_ _)m

  ↓↓  ソースです  ↓↓
#include<stdio.h>

void main(void) {
int i,dat,histo[11];

for(i=0;i<=10;i++) {
histo[i] = 0;
}

printf("得点を入力してください\n");

while(scanf("%d",&dat) != EOF) {
histo[dat/10]++;
}

for(i=0;i<=10;i++){
printf("%3d : %3d\n",i*10,histo[i]);
}
}


ちなみに、このソースコードはナツメ社の
入門ソフトウェアシリーズ@C言語
を参考にしています。


環境は以下のようになってます。
  OS :XP
コンパイラ:Borland C++Compiler 5.5


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


Name: フリオ  ..初心者(6,081ポイント)   Date: 2007/05/12(土) 01:48   No:7526     
Title: Re:無題    
 
 「Ctrl」+「Z」 で入力終了です。
  


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

Name: 管理人 [URL]  ..伝説のハッカー(312,816ポイント)   Date: 2007/05/12(土) 07:27   No:7527     
Title: Re:無題    
>while(scanf("%d",&dat) != EOF)

この部分、入力がエンドオブファイルじゃない時入力をループ

という意味です。

エンドオブファイルというのは、読んで字のごとく、ファイルの終わりですけど、入力からもその信号が送れます。

フリオさんのおっしゃるとおり、入力し、エンターを押すと、エンドオブファイルの信号となります。
エンドオブファイル(EOF)が入力されるとループを出ます。


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

Name: たのもー  ..かけだし(1,807ポイント)   Date: 2007/05/16(水) 20:28   No:7640 解決!     
Title: スミマセン    
こんばんは。
返事送れて申し訳ございません
フリオさん、管理人さん、御返事ありがとうございました。
いままでは、EOF = ^Zだと勘違いしていました。
いつも本当にありがとうございます。
これからもよろしくお願いしますm(_ _)m

P.S
送れて本当にスミマセンでした。


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



Name: 蘇我入鹿  ..ぴよぴよ(0ポイント)   Date: 2007/05/15(火) 16:44   No:7601       
Title: .    


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


Name: 管理人 [URL]  ..伝説のハッカー(316,825ポイント)   Date: 2007/05/15(火) 20:47   No:7614     
Title: Re:オレ様化する書込み人達    
よく理解できませんが・・。
これは本気の投稿なんでしょうか?


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

Name: asd  ..初心者(6,364ポイント)   Date: 2007/05/16(水) 10:19   No:7625     
Title: Re:オレ様化する書込み人達    
過去にも他の掲示板にも同じような文章を投稿しているところをみると、新手の荒らしさんな気がします。

大体自己矛盾している気もしますし。

>自分が、思っていることは、他の人も思っている。だから、明らかに自分が極めて悪質なレスや書込みを自覚できずにおられる方々が、何処の掲示板にでも多い事に嘆いているこの頃です。

と、自分の意見だけを押し通す投稿を嘆いているのに、

>書店で売られている著書の方々は、プロの世界でやっておられてきて会社側からの仕事の要求レベルについて行けずに結局途中でお辞めになられた方ばかりです。
>そんな方達の意見の受売りは、真似しない方がいいです。

著者の方を勝手に途中で投げ出した方だと決めつけ、更にはその人の真似はするなと仰る。
書店で売られている本の著者の真似はするべきでないというオレ様化書き込みですし。


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

Name: 管理人 [URL]  ..伝説のハッカー(317,760ポイント)   Date: 2007/05/16(水) 11:36   No:7626     
Title: Re:オレ様化する書込み人達    
asdさん、ありがとうございます。
本文は略させていただきましたm(_ _)m


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

Name: asd  ..初心者(6,384ポイント)   Date: 2007/05/16(水) 16:24   No:7637     
Title: Re:オレ様化する書込み人達    
そんな大したことしていないので御礼なんて結構ですよ。
管理人さんこそ対応お疲れ様です^^

当のスレ主ですが不定期ながらも繰り返しやってきそうな気もするので、
いたちごっこにならないといいなぁと個人的に思っていたりします。


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +