C言語何でも質問掲示板

Total hit  今日  昨日  



必ずお読み下さい → 規約と注意事項  アンケートはこちら  エラーで投稿できない方はこちら  過去ログ検索はこちら

 
   コピーコンストラクタ ....   
     ・[40894] Justy 
     ・[40896] Eeel 
     ・[40900] バグ 
     ・[40911] Eeel 
   無題   
     ・[40854] array 
     ・[40909] Justy 
   スコープ演算子のミス ....   
     ・[40878] 御津凪 
     ・[40880] Eeel 
     ・[40885] チルチル 
     ・[40887] ねこ 
     ・[40889] Eeel 
     ・[40890] ねこ 
     ・[40891] チルチル 
   無題   
     ・[40861] kazuoni 
     ・[40863] Ma 
     ・[40864] バグ 
     ・[40865] toyo 
     ・[40866] バグ 
     ・[40869] 初級者 
     ・[40875] lbfuvab 
   クロノトリガーのラス ....   
     ・[40852] Justy 
     ・[40867] K 
     ・[40868] softya 
   ファイルのオープンモ ....   
     ・[40858] toyo 
     ・[40859] バグ 
     ・[40862] LUNA 
   初心者です。助けて下 ....   
     ・[40853] DVDM 
     ・[40856] 鏃 
   秋姉妹の妹の弾幕   
     ・[40761] Tatu 
     ・[40851] 秋 
   学校の課題   
     ・[40763] box 
     ・[40843] スタッド 
     ・[40845] 組木紙織 
     ・[40848] スタッド 
     ・[40849] 組木紙織 
   その月に何日あるかを ....   
     ・[40810] Eeel 
     ・[40814] Ma 
     ・[40815] toyo 
     ・[40816] Ma 
     ・[40824] ドラ 
     ・[40844] まりも 
   テンプレートクラスの ....   
     ・[40835] Justy 
     ・[40836] たかぎ 
     ・[40840] Eeel 
     ・[40841] Justy 
     ・[40842] Eeel 
   テニスのような、勝敗 ....   
     ・[40738] バグ 
     ・[40765] 紅葉 
     ・[40839] Mikan 
   float変数の比較結果   
     ・[40834] Eeel 
     ・[40837] box 
     ・[40838] ねこ 
   Stateパターンと相性が ....   
     ・[40706] ねこ 
     ・[40707] 組木紙織 
     ・[40712] チルチル 
     ・[40714] 組木紙織 
     ・[40730] conio 
     ・[40732] Mikan 
     ・[40733] Mikan 
     ・[40735] MNS 
     ・[40745] チルチル 
     ・[40746] チルチル 
     ・[40748] MNS 
     ・[40749] チルチル 
     ・[40751] MNS 
     ・[40752] チルチル 
     ・[40754] MNS 
     ・[40762] チルチル 
     ・[40772] dic 
     ・[40779] チルチル 
     ・[40784] ぽこ 
     ・[40790] チルチル 
     ・[40799] ぽこ 
     ・[40811] dic 
     ・[40826] MNS 
     ・[40831] チルチル 
   質問なのですが・・・   
     ・[40830] softya 
   また、数学の質問です ....   
     ・[40715] Justy 
     ・[40716] Justy 
     ・[40717] Justy 
     ・[40828] でんすけ 
   プログラムを作る以前 ....   
     ・[40747] kerotan0820 
     ・[40776] TAB譜。 
     ・[40778] softya 
     ・[40807] kto 
     ・[40822] TAB譜。 
     ・[40823] softya 
   無題   
     ・[40741] くぁwせd 
     ・[40742] pooka 
     ・[40818] 男子 
   LNK2005が出て困ってい ....   
     ・[40803] Naohiro19 
     ・[40805] ti 
     ・[40806] Justy 
     ・[40809] ti 
   <pre>と</pr ....   
     ・[40658] たかぎ 
     ・[40659] まりも 
     ・[40660] たいちう 
     ・[40663] まりも 
     ・[40666] Ma 
     ・[40671] まりも 
     ・[40673] kerotan0820 
     ・[40674] まりも 
     ・[40677] まりも 
     ・[40686] Naohiro19 
     ・[40791] まりも 
     ・[40796] たいちう 
     ・[40808] まりも 
   c++でクラスを変数のよ ....   
     ・[40720] Eeel 
     ・[40792] tkmakwins15 
     ・[40795] たかぎ 
     ・[40802] Eeel 
   無題   
     ・[40759] DVDM 
     ・[40768] softya 
     ・[40788] Dixq (管理人) 
     ・[40801] 寺 
   ソートの結果をみるに ....   
     ・[40744] toyo 
     ・[40750] 初級者 
     ・[40775] ファファファファウスト 
     ・[40786] Dixq (管理人) 
   すみません   
     ・[40760] DVDM 
     ・[40773] ??? 
     ・[40774] ??? 
     ・[40777] ??? 
     ・[40780] softya 
     ・[40782] DVDM 
     ・[40783] ??? 
     ・[40785] Dixq (管理人) 
   違うブレンドを同時に ....   
     ・[40771] Justy 
     ・[40781] 初心者 
   5教科の点数の合計と ....   
     ・[40755] わ 
     ・[40756] non 
     ・[40764] kerotan0820 
   web上で動くプログラム ....   
     ・[40696] Justy 
     ・[40697] R 
     ・[40701] softya 
     ・[40702] たかぎ 
     ・[40708] R 
     ・[40709] softya 
     ・[40710] たかぎ 
     ・[40731] Mikan 
     ・[40739] たかぎ 
   無題   
     ・[40727] たいちう 
     ・[40729] non 
   無題   
     ・[40725] toyo 
   斜め移動について   
     ・[40667] Ma 
     ・[40690] Justy 
     ・[40713] sisi 
   検算のプログラミング   
     ・[40703] softya 
   数学の質問です。   
     ・[40699] 組木紙織 
     ・[40700] でんすけ 
   ポアソンの方程式の解 ....   
   ゲームのための自作BG ....   
     ・[40620] ねこ 
     ・[40626] ネス 
     ・[40630] Ma 
     ・[40632] 御津凪 
     ・[40664] ネス 
     ・[40678] 御津凪 
     ・[40682] ネス 
     ・[40683] 御津凪 
     ・[40685] YuO 
     ・[40689] TKOZ 
     ・[40694] ネス 
   CRC−CCITTの計算法に ....   
   演算プログラムでの記 ....   
     ・[40669] Ma 
     ・[40670] kerotan0820 
     ・[40672] Ma 
     ・[40675] 初級者 
     ・[40676] Ma 
     ・[40691] kerotan0820 
   参照型の実体   
     ・[40624] ねこ 
     ・[40628] conio 
     ・[40633] チルチル 
     ・[40634] ねこ 
     ・[40635] conio 
     ・[40646] チルチル 
     ・[40662] Ma 
     ・[40687] チルチル 
   2D俯瞰MAPへのグリッド ....   
     ・[40680] toyo 
     ・[40681] AF 
     ・[40684] 御津凪 
   DXライブラリ3D系 ....   
     ・[40656] Justy 
     ・[40661] Ma 
   配列にポインタのアド ....   
     ・[40648] バグ 
     ・[40649] ファファファファウスト 
     ・[40650] バグ 
     ・[40651] バグ 
     ・[40652] box 
     ・[40653] ファファファファウスト 
     ・[40654] box 
     ・[40655] ファファファファウスト 
   無題   
     ・[40642] toyo 
     ・[40644] デジキャメ 
     ・[40645] Mist 
     ・[406411256956317] デジキャメ 
   掛け算、割り算を加減 ....   
     ・[40565] softya 
     ・[40566] Justy 
     ・[40570] TKOZ 
     ・[40571] Justy 
     ・[40573] softya 
     ・[40585] たかぎ 
     ・[40643] TKOZ 
   また質問です   
     ・[40516] conio 
     ・[40639] マウ 
     ・[40640] conio 
   プログラムの実行が出 ....   
     ・[40598] ねこ 
     ・[40599] Justy 
     ・[40600] kerotan0820 
     ・[40601] Justy 
     ・[40602] kerotan0820 
     ・[40603] Justy 
     ・[40636] kerotan0820 
     ・[40637] けろたん0820 
     ・[40638] kerotan0820 

Name: Eeel  ..入門者(3,605ポイント)   Date: 2009/10/24(土) 14:56   No:40893       
Title: コピーコンストラクタ内でのコンストラクタ呼び出し時の動作について質問です    

class CTest
{
public:
    int *m_t;

    //コンストラクタ
    CTest(){
        printf("コンストラクタ\n");
        m_t = new int;
        *m_t = 10;
    }
    //コピーコンストラクタ
    CTest(const CTest& obj){
        printf("コピーコンストラクタその1\n");
        CTest();                                    //コンストラクタを呼び出す
        printf("コピーコンストラクタその2\n");
        *m_t = *obj.m_t;
    }
    //デストラクタ
    ~CTest(){
        printf("デストラクタ\n");
        delete[] m_t;
    }
};

int main()
{
    CTest a;

    *a.m_t = 20;

    CTest b = a; //ここでコピーコンストラクタが呼ばれる

    return 0;
}


実行結果:
コンストラクタ          ←aのコンストラクタ
コピーコンストラクタその1  ←bのコピーコンストラクタその1
コンストラクタ          ←bのコンストラクタ
デストラクタ           ←bのデストラクタ
コピーコンストラクタその2  ←bのコピーコンストラクタその2

この後は、デストラクタでメモリが開放されてしまっているのでエラーが発生します。
デストラクタはコンストラクタの直後に呼ばれているようです。
コンストラクタを呼ばなければデストラクタも呼ばれないので、
コンストラクタの内容をコピーコンストラクタに書く事で一応の問題回避はできました。
しかし、何故このような動作になるのでしょうか?


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


Name: Justy  ..伝説なるハッカー(449,861ポイント)   Date: 2009/10/24(土) 15:35   No:40894     
Title: Re:コピーコンストラクタ内でのコンストラクタ呼び出し時の動作について質問です    

>デストラクタはコンストラクタの直後に呼ばれているようです
>何故このような動作になるのでしょうか?

 そういうものだから、では身も蓋もないのですが
CTest();と書いた場合、コンストラクタだけを
呼び出すものではありません。

 単純に CTestクラスの一時オブジェクトを作って
捨てているだけになります。
 
 なので、コピーコンストラクタ内の this->m_tは未初期化のまま、ということなります。


 あと、 delete [] ではなく delete で。


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

Name: Eeel  ..入門者(3,761ポイント)   Date: 2009/10/24(土) 16:08   No:40896 解決!     
Title: Re:コピーコンストラクタ内でのコンストラクタ呼び出し時の動作について質問です    
コンストラクタの他にinitialize()などを作って初期化処理を分ける理由がよくわかりました。
再初期化しようと思ってコンストラクタを明示的に読んでもだめなんですね。

delete[]は配列でなくても開放できる、と覚えていたので
常にdelete[]でいいやと思っていました。
しっかり確認したところ処理系に依存するようでした。

どちらもとても勉強になりました。
ありがとうございました。


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

Name: バグ  ..ハッカー(173,125ポイント)   Date: 2009/10/24(土) 20:22   No:40900     
Title: Re:コピーコンストラクタ内でのコンストラクタ呼び出し時の動作について質問です    
コピーコンストラクタを使いたいのならば…


CTest b(a);


これでいけるはず…


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

Name: Eeel  ..入門者(3,825ポイント)   Date: 2009/10/25(日) 01:46   No:40911 解決!     
Title: Re:コピーコンストラクタ内でのコンストラクタ呼び出し時の動作について質問です    
コピーコンストラクタを使いたいというより、
コピーコンストラクタ内でコンストラクタを呼び出したかったんです。
場所に関係なく明示的なコンストラクタの呼び出しは一時オブジェクトを作って
それのコンストラクタを実行するというのが正解だったようです。


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



Name: min  ..ぴよぴよ(548ポイント)   Date: 2009/10/23(金) 00:06   No:40846       
Title: 無題    

DrawRotaGraph(~);
  ↓
DrawRotaGraphF(~);

リファレンスにある関数にFを付けた場合、どのような変化になるのでしょうか。
また、引数にあるfはどういう意味なのでしょう。


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


Name: array [URL]  ..熟練のプログラマー(58,145ポイント)   Date: 2009/10/23(金) 03:35   No:40854     
Title: Re:無題    
以前にも何度か質問されている方がいるので参考に。
http://www.play21.jp/board/formz.cgi?action=res&resno=39545&page=&lognum=121&id=dixq&rln=39589

上のスレッドでもおっしゃってますが、引数に変化がでます。


DrawRotaGraph(int x, int y,~);
  ↓
DrawRotaGraphF(float x, float y,~);

後は、まったく同じ引数です。

intとfloatをなんで分けて用意しているのかは知りませんが
多分、処理速度が圧倒的に違うのでわかれているんだと思っています。

まぁー実際の処理速度を気にしてプログラムを考える必要はないですが

自分が使い分ける時は、動く画像を描画する際はDrawRotaGraphF()「 F 」付きを使い
固定して画像を描画する場合はDrawRotaGraph()を使えばいいと思います。

※DrawRotaGraph() で動かすとカクカク動いてしまい
 DrawRotaGraphF() を使うと、滑らかな動きを表現できます。


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

Name: Justy  ..伝説なるハッカー(450,180ポイント)   Date: 2009/10/25(日) 00:54   No:40909     
Title: Re:無題    
 本題とは関係ないんですが。


>多分、処理速度が圧倒的に違うのでわかれているんだと思っています

 DrawRotaGraph()の呼び出しは、内部で DrawRotaGraphF(正確には DrawRotaGraphFの内部関数)に
座標を floatにキャストした上で引き渡されますので速度は全くと言っていいくらい
変わらないですよ。

 何で分かれているかは私にもわかりませんが、関数の命名状態から察するに
多分最初は判りやすく int型で作ってはみたものの、float型の要望が来て付け足した、
とかじゃないでしょうか。



# というか DrawRotaGraph最大の謎は角度指定が何故 doubleなのか、でしょう。


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



Name: チルチル  ..比類無きプログラマー(72,895ポイント)   Date: 2009/10/24(土) 01:50   No:40876       
Title: スコープ演算子のミス?    
World_cと言うクラスに

template<int Size>void Scene_Cursor(int X,int Y,int x,int y,int Insert,int (&Graph)[Size],char *Jump[],char *Back,int Return,int &Select);

と言うようなメンバ関数の宣言をして

template<int Size>void World_c::Scene_Cursor(int X,int Y,int x,int y,int Insert,int (&Graph)[Size],char *Jump[],char *Back,int Return,int &Select){・・・

のようにスコープ演算子で定義したところ

Menu.obj : error LNK2001: 外部シンボル ""public: void __thiscall World_c::Scene_Cursor<7>(int,int,int,int,int,int (&)[7],char * * const,char *,int,int &)" (??$Scene_Cursor@$06@World_c@@QAEXHHHHHAAY06HQAPADPADHAAH@Z)" は未解決です。

と言うようなエラーが出ました

未解決と言っているので多分スコープ演算子の使い方が間違っている気がします

この使い方が載っているサイトが無かったので質問させて頂きたいのですが
やはりスコープ演算子の使い方が間違っているのでしょうか?

環境は「Microsoft Visual C++ 2008 Express Edition」です


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


Name: 御津凪 [URL]  ..ハッカー(119,499ポイント)   Date: 2009/10/24(土) 02:32   No:40878     
Title: Re:スコープ演算子のミス?    
テンプレートメンバ関数の宣言と定義は同じヘッダファイルにありますか?

現在のほとんどのコンパイラはテンプレート関数の外部(分割)定義をサポートしていません。

つまり、テンプレート関数を外部(ソースファイルに単独)で定義していると、
リンク時にテンプレート関数の対応づけがなされずに上記エラーが発生します。

これを回避するには、ヘッダファイルにテンプレート関数を定義するか、
テンプレートクラスの定義後にそのテンプレートメンバ関数を定義したソースファイルをインクルードする(もちろんそのソースファイルはビルドから外す)必要があります。

一応分割定義できないこともないですが、下記のURLで書かれている覚書のように、酷いことになります。

覚書(1)---テンプレートの宣言と定義を分けて書いた場合の憂鬱
ttp://www.is.oit.ac.jp/~club/~hxs/?%B3%D0%BD%F1%281%29---%A5%C6%A5%F3%A5%D7%A5%EC%A1%BC%A5%C8%A4%CE%C0%EB%B8%C0%A4%C8%C4%EA%B5%C1%A4%F2%CA%AC%A4%B1%A4%C6%BD%F1%A4%A4%A4%BF%BE%EC%B9%E7%A4%CE%CD%AB%DD%B5


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

Name: Eeel  ..かけだし(1,883ポイント)   Date: 2009/10/24(土) 05:21   No:40880     
Title: Re:スコープ演算子のミス?    
おはようございます。

御津凪さんのリンク先、オーバーロードみたいな事になっちゃってますね。
オーバーロードよりも何かメリットがあるのか、
それともそういう酷さの例なのでしょうか。

私もテンプレートには苦労しました。
その質問をさせて頂いた時のアドレスです。
http://www.play21.jp/board/formz.cgi?action=res&resno=40832&page=&id=dixq&rln=40842
テンプレート関数ではなくて、テンプレートクラスなのでそのままは当てはまらないかもしれません。
テンプレートクラスは.cppで明示的インスタンス化をする事で分割できました。

http://d.hatena.ne.jp/umonist/20080730/p3
こちらは自分で検索していた時に見つけたテンプレート関数に関するページです。
テンプレートクラスではなかったので実際に試してはいませんが
お役に立つかもしれないので貼っておきます。


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

Name: チルチル  ..比類無きプログラマー(72,994ポイント)   Date: 2009/10/24(土) 12:46   No:40885     
Title: Re:スコープ演算子のミス?    
ヘッダとソースに宣言と定義を分けられなかったんですね・・

とりあえず
http://d.hatena.ne.jp/umonist/20080730/p3
のサイトを参考に

template void World_c<int Size>::Scene_Cursor(

template void World_c::Scene_Cursor<int Size>(

と書いてみましたがコンパイルが通りません

また何か間違えているのでしょうか?


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

Name: ねこ  ..熟練のプログラマー(48,104ポイント)   Date: 2009/10/24(土) 13:10   No:40887     
Title: Re:スコープ演算子のミス?    
サイトざっと目を通しただけなんだけど、その関数の処理内容がcppにあったら他の個所ではその関数の定義(ヘッダファイルとかの「void A();」のみしか見えないから実態が分からないよって意味じゃない?

TEST.cpp
void A() { int a = 0; };

TEST.h
void A();

MAIN.cpp
テンプレート A

にするとMAIN.cppのテンプレートではAの実態処理が分からないから
そういう使い方したかったらTEST.hに
void A() { int a = 0; };
こういう処理まで書かないとだめなんですよ、って解説じゃないかな。


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

Name: Eeel  ..入門者(2,582ポイント)   Date: 2009/10/24(土) 13:15   No:40889     
Title: Re:スコープ演算子のミス?    
>ヘッダとソースに宣言と定義を分けられなかったんですね・・
いえ、分けられると思います。
そして
http://d.hatena.ne.jp/umonist/20080730/p3
は分ける方法です。
(テンプレートクラスは分けられてテンプレート関数は分けられないが正解、なんて事だったらごめんなさい)

template.cpp ← テンプレート関数の定義
main.cpp   ← テンプレート関数を<int>と<short>で呼び出す

という設定で話します。
<int Size>の部分はコンパイル時に適切な型に置き換わります。
template.objができた時点ですでに置き換わっているのですが、
template.cpp内だけからはどの型として使われているのかわかりません。
なので<int>や<short>の型の関数は作られず、リンク時にエラーが発生します。

その対処法の一つとして、template.cpp内で明示的にインスタンス化を行い
<int>や<short>の型の関数を作ってしまう、というのが私のやった方法です。


宣言と定義を分けないのならあのサイトの内容は忘れて、
.h内に定義も書いてしまえば動くと思います。


追記です。
>template void World_c<int Size>::Scene_Cursor(
>template void World_c::Scene_Cursor<int Size>(
>と書いてみましたがコンパイルが通りません

この部分は実際にインスタンス化するのが目的なので
<int Size>ではなくて具体的な取り得る数値を入れます。
取り得る数値の数だけインスタンス化します。
Sizeに当たる数値が1,3,5だったとすると
template void World_c::Scene_Cursor<1>(hoge);
template void World_c::Scene_Cursor<3>(hoge);
template void World_c::Scene_Cursor<5>(hoge);
という具合です。


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

Name: ねこ  ..熟練のプログラマー(48,128ポイント)   Date: 2009/10/24(土) 13:17   No:40890     
Title: Re:スコープ演算子のミス?    
あ、前半だけ読んでたから読み違ってた。 前レスはスルーして下さい。

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

Name: チルチル  ..比類無きプログラマー(73,640ポイント)   Date: 2009/10/24(土) 13:41   No:40891 解決!     
Title: Re:スコープ演算子のミス?    
ああ、なるほど明示的なインスタンス化をしていたんですね

しかし<float>とか<int>なら別々にインスタンスしても問題ないですが

<int Size>は配列の要素数なので別々にインスタンスするぐらいなら引数で渡した方が良いですね・・

テンプレートの宣言と定義を分けると毎回こういう問題が出てくるんですね・・早めに知って良かったです

宣言と定義は必ず分けるようにしているのでテンプレートを使っても
全部オーバーロードみたいになってしまいますね・・
中身を書く手間は省けてもテンプレートを使わなくて済む努力をした方が良さそうです

結局スコープ演算子は関係無かったですね・・とんだ勘違いをしてしまいました
要素数を引数で渡したらコンパイルが通りました、皆様ありがとうございます


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



Name: rajan  ..ぴよぴよ(102ポイント)   Date: 2009/10/23(金) 11:26   No:40860       
Title: 無題    
in.txt から out.txt に 内容をコピするプログラム作り方教えてください

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


Name: kazuoni [URL]  ..ハッカー(111,222ポイント)   Date: 2009/10/23(金) 11:29   No:40861     
Title: Re:無題    
すべてin.txtから文字を読み込んでout.txtに出力してください
としか言いようがない気が^^;

規約をもう一度読んで、不足しているところは追記してください。
もっとよりよい回答が得られると思います。


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

Name: Ma  ..上級者(15,162ポイント)   Date: 2009/10/23(金) 11:46   No:40863     
Title: Re:無題    
Windows API つかっていいなら、

CopyFile()

この関数でいっぱつ。


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

Name: バグ  ..ハッカー(172,955ポイント)   Date: 2009/10/23(金) 12:02   No:40864     
Title: Re:無題    
C++でSTLを使うならば…


std::ifstream ifstm("in.txt");
std::ofstream ofstm("out.txt");
std::copy(std::istreambuf_iterator<char>(ifstm), std::istreambuf_iterator<char>(), std::ostream_iterator<char>(ofstm));


こんな感じ?


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

Name: toyo  ..熟練のプログラマー(43,276ポイント)   Date: 2009/10/23(金) 12:31   No:40865     
Title: Re:無題    
OSやコンパイラーは何でしょうか
他に条件とかありませんか

#include <stdlib.h>

int main()
{
system("cat in.txt > out.txt");
system("cp in.txt out2.txt");
return 0;

}

WindowsやLinuxなら↑でも出来ると思いますが


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

Name: バグ  ..ハッカー(173,081ポイント)   Date: 2009/10/23(金) 12:54   No:40866     
Title: Re:無題    
C標準ライブラリなら、こんな感じかな?


FILE* pin = fopen("in.txt", "r");
FILE* pout = fopen("out.txt", "w");
int buf = '\0';
while ((buf = fgetc(pin)) != EOF) fputc(buf, pout);
fclose(pin);
fclose(pout);


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

Name: 初級者  ..初心者(6,608ポイント)   Date: 2009/10/23(金) 19:19   No:40869     
Title: Re:無題    
どうしてもCのプログラムを書かねばなりませんか?

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

Name: lbfuvab  ..上級者(22,978ポイント)   Date: 2009/10/24(土) 01:07   No:40875     
Title: Re:無題    
winXPなら

system("copy in.txt out.txt");

でいいんじゃないですか?


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



Name: K  ..かけだし(2,100ポイント)   Date: 2009/10/23(金) 00:10   No:40847       
Title: クロノトリガーのラスト風景を再現    
DXライブラリでクロノトリガーのラストバトルの風景のように
外から中心に向かって画像が処理されるような風景を作成したいのですが
処理がまったく分からなくて困ってます。
誰かサンプルを作成してくれないでしょうか?
よろしくお願いします><


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


Name: Justy  ..伝説なるハッカー(449,573ポイント)   Date: 2009/10/23(金) 01:58   No:40852     
Title: Re:クロノトリガーのラスト風景を再現    

> 処理がまったく分からなくて困ってます

 すごく単純だと思いますよ。
 
 画面縦横半分の大きさの十数パターンの中央に向かって流れるような
テクスチャアニメを作り、タイミングをずらして回転或いは反転させて
4つ並べて表示しているだけです。

 といっても左上と右下はタイミングは同じようですね。


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

Name: K  ..かけだし(2,123ポイント)   Date: 2009/10/23(金) 17:15   No:40867     
Title: Re:クロノトリガーのラスト風景を再現    
え!?
これってアニメーションだったんですか・・
十数パターンも作成って大変ですよね・・


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

Name: softya  ..上級者(22,597ポイント)   Date: 2009/10/23(金) 18:36   No:40868     
Title: Re:クロノトリガーのラスト風景を再現    
エフェクト自体をよく覚えて無いですが、クロノのSFCの時代だとパレットアニメーションの可能性がありますよ。
パレットアニメの簡単な原理はこちらを。
http://wisdom.sakura.ne.jp/system/winapi/win32/win126.html


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



Name: LUNA  ..初心者(5,888ポイント)   Date: 2009/10/23(金) 10:23   No:40857       
Title: ファイルのオープンモードについて    
少し質問です。
ファイルの入出力について勉強しているときにfopenのオープンモードについて疑問に思ったんですが、
今使っているテキストに
"w"書き込み用にテキストファイルをオープンする。
"r"読み込み用にテキストファイルをオープンする。
"a"追記用にテキストファイルをオープンする。

"w+"『更新用』にテキストファイルをオープンする。(新規作成)
"r+"『更新用』にテキストファイルをオープンする。(ファイルを開く)
"a+"『更新』の為、追記用にテキストファイルをオープンする。

と、書かれていました。
"w"と"r"については理解できたのですが"w+","r+","a+"等の『更新用』と言う部分がいまいちわかりません。
『更新』とは? 実際に使うとき、上記の"w","r","a"だけではダメなのでしょうか?
また追記用の"a","a+"の使い方もいまいち理解できてないのでどなたか使用例を教えてもらえないでしょうか?
お願いします。


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


Name: toyo  ..熟練のプログラマー(43,170ポイント)   Date: 2009/10/23(金) 10:56   No:40858     
Title: Re:ファイルのオープンモードについて    
更新用という表現はしっくりこないですね
rは読み込み、r+は読み込みおよび書き込み
wは書き込み、w+は書き込みおよび読み込み
aは追記、a+は追記および読み込み
です。
入出力のバッファが読み込みと書き込みで別と考えればいいと思います。
"w"では書き込みバッファのみ作られる
"w+"だと書き込み用と読み込み用バッファが作られる

#include <stdio.h>

int main(void)
{
FILE* fp;
char buf[256] = "hoge";

fp = fopen("test.txt", "w");
fputs("test", fp);
fseek(fp, 0, SEEK_SET);
if (fgets(buf, 256, fp) == NULL)
{
printf("error\n");
}
fclose(fp);
printf("%s", buf);
return 0;
}

上記のサンプルだと書き込んだ文字列を再読込しようとしても出来ませんがオープンモードを"w+"にすると読み込めるようになります。


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

Name: バグ  ..ハッカー(172,868ポイント)   Date: 2009/10/23(金) 11:04   No:40859     
Title: Re:ファイルのオープンモードについて    
こんな感じでしょうか?


┏━━┳━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓
┃引数┃モード ┃ファイルが存在しない場合 ┃ファイルが存在する場合 ┃
┣━━╋━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━┫
┃"r" ┃読み込み ┃エラー ┃ ┃
┣━━╋━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━┫
┃"w" ┃書き込み ┃新規にファイルが作成される┃ファイルの中身が失われる ┃
┣━━╋━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━┫
┃"a" ┃追加書き込み┃新規にファイルが作成される┃ファイルの末尾からデータを追加する┃
┣━━╋━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━┫
┃"r+"┃読み書き ┃エラー ┃ ┃
┣━━╋━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━┫
┃"w+"┃読み書き ┃新規にファイルが作成される┃ファイルの中身が失われる ┃
┣━━╋━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━┫
┃"a+"┃追加読み書き┃新規にファイルが作成される┃ファイルの末尾からデータを追加する┃
┗━━┻━━━━━━┻━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━┛

┏━━━━┳━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃追加文字┃モード ┃機能 ┃
┣━━━━╋━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃"b" ┃バイナリ┃ファイルのデータをそのまま読み込む ┃
┣━━━━╋━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃"t" ┃テキスト┃テキストファイル上の「改行」コードをプログラムで利用できる┃
┃ ┃ ┃「\n」に変換してデータを読み込む ┃
┗━━━━┻━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


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

Name: LUNA  ..初心者(6,016ポイント)   Date: 2009/10/23(金) 11:32   No:40862 解決!     
Title: Re:ファイルのオープンモードについて    
なるほど。a+,w+は読み込みが、r+は書き込みのバッファがさらに作られるんですね。

バグさん。
わざわざ表まで作っていただきありがとうございます。
とても見やすくてわかりやすいですw
これで疑問がある程度解けました。
あとはこっちで何とかしてみようかと思います。


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



Name:  ..ぴよぴよ(85ポイント)   Date: 2009/10/22(木) 08:53   No:40812       
Title: 初心者です。助けて下さい    
プログラミング、C言語を始め半年程度です。

龍神録を参考にプログラムを組んでいるのですが一面→二面の様にステージの切り換え方法が分かりません。
誰か御指導宜しくお願いします。


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


Name: DVDM [URL]  ..初心者(5,179ポイント)   Date: 2009/10/23(金) 02:03   No:40853     
Title: Re:初心者です。助けて下さい    
>>鏃さん
どれくらいの事が出来るか解りませんが、C言語で簡単に書いてみました。
(とりあえず、グロバール変数を使ってswitch〜caseで分けています)




// STAGE1が一面、STAGE2が二面、STAGE3が三面を表します
enum STAGE
{
STAGE1, STAGE2, STAGE3, CLEAR,
};

// グロバール変数(今何面にいるかがここに入る)
int g_StageState = STAGE1;


// switch〜caseで各ステージ毎に処理を分岐させています。
switch(StageState)
{
case STAGE1: ステージ1の処理(); break;
case STAGE2: ステージ2の処理(); break;
case STAGE3: ステージ3の処理(); break;
case CLEAR: ゲームクリアの処理(); break;
}


// STAGE1の処理を書きます。
void ステージ1の処理()
{
なんか色々処理();

ステージ1をクリアしたら g_StageState = STAGE2;
}


// STAGE2の処理を書きます。
void ステージ2の処理()
{
なんか色々処理();

ステージ2をクリアしたら g_StageState = STAGE3;
}


// STAGE3の処理を書きます。
void ステージ3の処理()
{
なんか色々処理();

ステージ3をクリアしたらゲームクリア;
}


// ゲームクリアの処理を書きます
void ゲームクリアの処理()
{
なんか色々処理();
g_StageState を初期化する。

}






他には関数ポインタを使って処理を切り替えることも可能ですし、クラスにまとめてしまうのも有りです。
御参考になれば幸いです。


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

Name:  ..ぴよぴよ(114ポイント)   Date: 2009/10/23(金) 07:20   No:40856     
Title: Re:初心者です。助けて下さい    
>>DVDMさん

回答ありがとうございました!
早速試してみたいと思います。 ありがとうございました!


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



Name:  ..ぴよぴよ(588ポイント)   Date: 2009/10/21(水) 09:31   No:40723       
Title: 秋姉妹の妹の弾幕    
秋姉妹の妹のこの弾幕を再現したいのですが、なかなかうまくいきませんでした。
最初は、2つの位置から連続で螺旋ショットを行い、
円状を保ちながら自機狙いで動いています。
さらにしばらく経つとhttp://sinkai.net/rp/14.phpのような3Dショットのように
変形していくというショットです。

最初少しスピードが速く、減速していくタイプのショットなんですが、
自分で作ってみましたが、2つの位置から連続で螺旋ショットを行い、
円状を保ちながら自機狙いで動くというのが再現できませんでした…。
ヒントを頂けないでしょうか…?

このbullet_way関数は支館の関数を使わせて頂いています。

void boss_shot_bulletH001(){
int i,t=boss_shot.cnt%160;

if(t%3==0&&t<80){
//bullet_way(発射X,発射Y,n_way弾, ベース角度(弾がどこに向かっていくか), 分割角度幅, 速度, 種類, 色, 状態);
bullet_way(boss.x-cos(PI/2+PI/150*t)*100,boss.y-sin(bossatan2())*10,2, bossatan2(), 0, 4, 2, 0, 0);

}
for(i = 0; i < BOSS_BULLET_MAX; i++){
if( boss_shot.bullet[i].flag > 0){
double spd = boss_shot.bullet[i].spd;
if( spd >= 1 )
boss_shot.bullet[i].spd -= 3.5/30;
}
}
}


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


Name: Tatu  ..中級者(14,890ポイント)   Date: 2009/10/21(水) 20:39   No:40761     
Title: Re:秋姉妹の妹の弾幕    
秋穣子の通常1のらせん状の弾の再現をしてみましたが、
これでよいでしょうか?よい場合はソースコードを見て、
どこが違うのかまとめてください。


//弾発射関数
void boss_bullet_on(int way,int knd,int col,double x,double y,double b_angle,double d_angle,double spd,int state,int till,int eff=0,int sflag=1){
int i=0,k;
for(i=0;i<way;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].knd = knd;//弾の種類
if(knd==7) boss_shot.bullet[k].kaiten=1;
else boss_shot.bullet[k].kaiten=0;
boss_shot.bullet[k].col = col;//弾の色
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].x = x;//座標
boss_shot.bullet[k].y = y;
boss_shot.bullet[k].angle = b_angle+d_angle*(i - way/2);//角度:bが基準、dが間隔
boss_shot.bullet[k].spd = spd;//スピード
boss_shot.bullet[k].state = state;//弾の状態
boss_shot.bullet[k].till = till;//弾が画面外に出ても消えない時間
boss_shot.bullet[k].eff = eff;//加算ブレンドするか否か
if(sflag==1)se_flag[0]=1;
}
}
}
//弾幕関数
void boss_shot_bulletT097(){
int i,t=boss_shot.cnt%200;
double x,y,ang;
if(t==0) boss_shot.base_angle[0]=rang(PI2);
if(t<75){
ang=boss_shot.base_angle[0]+t*PI2/45;
x=1.2*t*cos(ang);
y=1.2*t*sin(ang);
boss_bullet_on(1,8,5,boss.x+x,boss.y+y,atan2(ch.y-(boss.y+y),ch.x-(boss.x+x)),0,6,1,0,0,1);
boss_bullet_on(1,8,5,boss.x-x,boss.y-y,atan2(ch.y-(boss.y-y),ch.x-(boss.x-x)),0,6,1,0,0,1);
}

for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet[i].flag==1 && boss_shot.bullet[i].state==1){
if(boss_shot.bullet[i].spd>1.5){
boss_shot.bullet[i].spd-=4.5/30;
}
}
}
}


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

Name:  ..ぴよぴよ(697ポイント)   Date: 2009/10/23(金) 01:53   No:40851 解決!     
Title: Re:秋姉妹の妹の弾幕    
回答ありがとうございます。
まさかコードを載せて頂けるとは…
秋穣子と同じで驚きました。
違う点をあげますと、
自機狙いがこちらの方が強い感じです。
ですが、その方が難易度を上げやすいので
自分でいじくってみます。

本当にありがとうございます。


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



Name: スタッド  ..ぴよぴよ(139ポイント)   Date: 2009/10/21(水) 20:24   No:40758       
Title: 学校の課題    
任意の個数の実数を入力し、正数と負数の数を表示するプログラムを作りたいのですが
なぜか負の数の個数がものすごく大きな数字になってしまうのですが、どこが違うのかがわかりません。
ご指導願います。
実数の入力は 0.0 を入力することにより終了させるようにします。


#include <stdio.h>

main(void)
{
char buf[100];
float i, posi , nega;
printf("input data = ");
fgets(buf, 100, stdin);
sscanf(buf, "%0.1f", &i);
if (i > 0 ){
posi = posi + 1;
}
else if ( i < 0 ){
nega = nega + 1 ;
}
while (i != 0)
{
printf("input data = ");
fgets(buf, 100, stdin);
sscanf(buf, "%0.1f", &i);
if (i > 0 ){
posi = posi + 1;
}
if ( i < 0 ){
nega = nega + 1 ;
}
}
printf("positive number = %0.0f\n",posi);
printf("negative number = %0.0f\n",nega);

return 0;
}





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


Name: box  ..ハッカー(144,581ポイント)   Date: 2009/10/21(水) 20:47   No:40763     
Title: Re:学校の課題    
nagaもposiも、個数を勘定するからには初期値がゼロでなければなりません。
また、個数を勘定する変数はint型にしましょう。

実生活で、何かの個数を数えるとき、整数を使いますよね。
それと同じです。


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

Name: スタッド  ..ぴよぴよ(412ポイント)   Date: 2009/10/22(木) 23:32   No:40843     
Title: Re:学校の課題    
返信ありがとうございます!

アドバイスいただいたとうりに次のように直したのですが、今度は負の数をカウントしてくれません
どこがまずいのかご教授いただけないでしょうか


#include <stdio.h>
main(void)
{
char buf[100];
float i;
int posi , nega;
posi=0;
nega=0;
printf("input data = ");
fgets(buf, 100, stdin);
sscanf(buf, "%0.1f", &i);
if (i > 0 ){
posi = posi + 1;
}
if ( i < 0 ){
nega = nega + 1 ;
}
while (i != 0)
{
printf("input data = ");
fgets(buf, 100, stdin);
sscanf(buf, "%0.1f", &i);
if (i > 0 ){
posi = posi + 1;
}
if ( i < 0 ){
nega = nega + 1 ;
}
}
printf("positive number = %d\n",posi);
printf("negative number = %d\n",nega);
return 0;
}



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

Name: 組木紙織  ..比類無きプログラマー(73,340ポイント)   Date: 2009/10/23(金) 00:01   No:40845     
Title: Re:学校の課題    
質問というより、ヒントです。
正の数を入力したときに、変数iに正しく値が入っていることをどうやって確認しましたか?


[10/23,0:06分訂正]
整数→数


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

Name: スタッド  ..ぴよぴよ(467ポイント)   Date: 2009/10/23(金) 00:13   No:40848     
Title: Re:学校の課題    
返信ありがとうございます!

確認は実際にプログラムを動かしてみて、正の数の場合はカウントされたということをもって
正しく値が入っていると判断しました。


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

Name: 組木紙織  ..比類無きプログラマー(73,634ポイント)   Date: 2009/10/23(金) 00:25   No:40849     
Title: Re:学校の課題    
いちゃもんをつけるようで申し訳ないのですが、直前のコードを私の環境(VS2005)
で実行するとうまく動きませんでした。


>確認は実際にプログラムを動かしてみて、正の数の場合はカウントされたということをもって

その確認方法だと、入力した数字が正しく入っていないかもしれませんよね。
たとえば
12.3を入力したら、変数iに3433.23と入っていてもわからないわけです。
入力した値が、本当に変数にiに入っているか確認してみてください。
それとsscanf()の使い方と一緒に。


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



Name: まりも  ..入門者(3,035ポイント)   Date: 2009/10/22(木) 02:11   No:40804       
Title: その月に何日あるかを判定するプログラム    
 お世話になってます。
 
 今まで学習した内容がちゃんと理解できてるかどうか確認の意味で
 自分でプログラムを考えてみました。

 ★その西暦のその月に何日あるかを判定するプログラム★です。
 
 学習した範囲は 型・演算子・比較演算子・if文・switch文・for文・while文・配列 です。

 全部使いこなせないので、今回は主にif文と配列を使ってコードを書いてみました。
 
 予定している実行結果は・・・・「1900年の2月は28日あります。」→です。

うるう年の定義は
 「年が4で割り切れる年はうるう年だが100で割り切れる場合はうるう年ではない、
  そして400で割り切れる年はそれらとは無関係にうるう年」 です。

(蛇足ですが、うるう年は4年に1度だと思ってました。
   ところが、必ずしもそうではない事を
   C言語のサンプルソースで知って、ちょっと感動。
   400年に3回は、うるう年から次のうるう年まで7年位空くんです。
   ・・・最近だと1900年が通常の4年に1度のうるう年にあたらない年だと
   わかって1900年の2月に焦点を当ててみました。^^)

 コンパイラエラーが出てしまいます。

 教えてもらいたいのは、間違って書いている部分も勿論のこと
 プログラムを作る上での考え方があっているかどうか?

 ソースコードに こういう風に考えています、とわかってもらえるように
 コメントをつけていますので、そこに焦点をあててアドバイス頂けると
 とってもありがたいです。
(ココこう書くともっとスマートになるよ、とか、
こっちの表記がみやすいよ、など。)
 
 また、先に記述した 私が学習した範囲内で、if文や配列以外の
 方法でのプログラムや考え方などあったら、発想の転換にとっても参考になるので
 ぜひ、教えてください。よろしくお願いします。

 □使用しているコンパイラ gcc

◇ソースコード◇
 

#include <stdio.h>
main ()
{
int year , month , days , the_days ;
year = 1900 ;
month = 2 ;

// うるう年かどうかを判定し、うるう年の場合の処理
if ( ( year%4 == 0 && year%100 != 0 ) || year%400 == 0
&& ( month >= 1 && month <= 12) ) )
{
int days [12] = {31,29,31,30,31,30,31,31,30,31,30,31 } ;
the_days = days [ month - 1 ] ;

printf("%d年の%d月は%d日あります。\n" ,year ,month ,the_days) ;
}

// うるう年ではない場合の処理
  if ( ( year%4 != 0 && yaer%100 == 0 ) || yaer%400 != 0
&& ( month >= 1 && month <= 12 ) )
{
int days [12] = {31,28,31,30,31,30,31,31,30,31,30,31 } ;
the_days = days [ month - 1 ] ;

printf("%d年の%d月は%d日あります。\n" ,ywar ,month ,the_days) ;
}

// ありえない(例:55月など)数字入力があった時のエラー処理
else
{
puts("入力エラーです。正しい数字を入力してください。");
}
}


コマンドプロンプト画面のコンパイルエラーの表示はこうです。
:6: error stray '\201' in program
:6: error syntax error at '@' token
  この二種類の表示が色んな行で 出ています。

 間違えないように注意しながらコメントを書いていたら
 2時間近くかかってしまいました・・・orz(不器用なので。;;)
 明日に差し支えてしまうので、今日はこれで寝ます。
 コメントを頂いた方にお礼を言うのが遅くなってしまいますが、
 必ず返しますので、許してください。

 

 
 
 
 


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


Name: Eeel  ..かけだし(1,220ポイント)   Date: 2009/10/22(木) 03:37   No:40810     
Title: Re:その月に何日あるかを判定するプログラム    
二つ目のif文は

else if ( ( year%4 != 0 || yaer%100 == 0 ) && yaer%400 != 0
&& ( month >= 1 && month <= 12 ) )

になります。
else if でなければ閏年だった場合もその後の else の内容が実行されてしまいます。
真逆の条件にする時は、
== → != 、 != → ==
だけでなく
|| → && 、 && → ||
になります。
(後半の month の式は閏年とは無関係なのでそのままで)

混乱しそうな時は実際に数値を書いたり日本語に直してみたりするといいかもしれません。
例えば、「year%4 != 0 && yaer%100 == 0」は「4で割り切れず100で割り切れるなら真」となりますが、
そのような数は無いので確実にFalseです。
「False || yaer%400 != 0」はただの「yaer%400 != 0」と同じで、これは「400で割り切れないなら真」となり、
意図した判定でないのがわかります。

今回の場合は閏年でなければ(≒最初のifで偽なら)閏年でない(≒2番目のifで真である)事が確実なので
2番目のifでは正しい範囲の数値かどうかを判定するだけでも大丈夫でしょう。
またif文をネストして

if(正しい数値か?){
 if(閏年か?){
  閏年の処理;
 }
 else{
  閏年でない年の処理;
 }
}
else{
 入力エラー;
}

とする事もできます。
ここの辺りは正解があるわけではないので一例です。
まりもさんがわかり易い書き方をするのが良いと思います。
あくまで私の場合は、ですが

配列への代入;
if(正しい数値か?){
 if(閏年か?){
  days[1] += 1;
 }
 出力;
}
else{
 入力エラー;
}

このような感じにすると思います。
参考になれば幸いです。

エラーについてはわらないのですが、
ひょっとしたらソースに全角スペースが含まれていたりしないでしょうか?
違ったらごめんなさい。


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

Name: Ma  ..中級者(13,917ポイント)   Date: 2009/10/22(木) 10:09   No:40814     
Title: Re:その月に何日あるかを判定するプログラム    
ちゃんとコード読んでない人からのコメントです。
ぱっとみ、間違いがあったので指摘します。



int year , month , days , the_days ;
year = 1900 ;
month = 2 ;

// うるう年かどうかを判定し、うるう年の場合の処理
if ( ( year%4 == 0 && year%100 != 0 ) || year%400 == 0
&& ( month >= 1 && month <= 12) ) )
{
int days [12] = {31,29,31,30,31,30,31,31,30,31,30,31 } ;


前半のみしか読んでません。。。


変数名 days の型が、二重宣言されています。
int days; として宣言しているのに
if 文内で、
int days[12]; として、再宣言してしまってます。


これって、たしかルール違反ですよね?


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

Name: toyo  ..熟練のプログラマー(42,873ポイント)   Date: 2009/10/22(木) 10:41   No:40815     
Title: Re:その月に何日あるかを判定するプログラム    
>>Maさん
それは問題ないです
ブロックが違えば同じ変数名を使うことが出来ます

#include <stdio.h>

int main(void)
{
int a = 10;
{
int a = 20;
printf("%d\n", a); // 20
}
printf("%d\n", a); // 10
return 0;
}

というのも許されます。
if ( ) { で別ブロックになっているのでこのブロックの先頭で宣言した変数はこのブロック内のみで有効になります。


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

Name: Ma  ..中級者(13,971ポイント)   Date: 2009/10/22(木) 10:52   No:40816     
Title: Re:その月に何日あるかを判定するプログラム    
>toyo さん
そうでしたか、
ということはその場合、ブロック前の同じ変数名だった a は呼び出しおよび編集は不可能ということになりますよね?
逆に勉強になりました^^;どもです。


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

Name: ドラ  ..かけだし(1,369ポイント)   Date: 2009/10/22(木) 13:08   No:40824     
Title: Re:その月に何日あるかを判定するプログラム    
これまでの回答の他にも提示されたコードには以下のようなミスが存在します。

・()の対応が取れていない
・全角空白の混入
・変数名の間違い


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

Name: まりも  ..入門者(4,437ポイント)   Date: 2009/10/22(木) 23:56   No:40844     
Title: Re:その月に何日あるかを判定するプログラム    
>> Eeelさん
 たくさんの丁寧な説明ありがとうございます。

 真逆の条件にする時の法則があるんですね。
 真逆の条件を考えて書いたつもりが、しっかり間違えていました。(^^;)

 混乱しそうな時は(実際してましたw)日本語に直して考えてみる。
 これ、とってもいいと思ったので、ひと手間ですけど、
 頭の中だけでしっかりイメージできるようになるまでは
 そうやってみます。

 Eeelさんが説明してくれたように
 「4で割り切れなくて、100で割り切れる数」って
 ・・・・・ 落ち着いて考えてみたら、ありえないですよね。(どんな数だ?)

 あと、if文をネストしての提案ありがとうございます。
 最初のコードがコンパイル成功したら、次にそれで
 コード書いてみます。(それが成功したら、最後はEeelさんのもtry予定で)

 エラーですが、他の方からの指摘もあった通り、全角スペースがあったようです。
 空白は無視されると思ってたので 全角スペースがエラーになる事を初めて知りました!!
  ・・・・とんでもない勘違いでした。・・・orz

>>Maさん toyoさん

 変数名と型、二重宣言の指摘と説明ありがとうございます。
 私も勉強になりました。

 days という変数名に 整数を入れたいので int ⇒ 型を宣言
 そして、12個の配列(=箱のイメージ)の中に入れたいのも整数だったので
 int days[12] と 
 書いてたのですが、二重宣言になってしまう事になるんでしょうか?

 たまたま ブロックが違っていたので、問題ないみたいなのですが。

 他の方からの指摘を参考にコンパイル成功したので、そのあと
 最初に宣言した int days の部分を削除してみました。

 (削除前)
int year , month , days , the_days ;
year = 1900 ;
month = 2 ;

(days削除)
  int year , month , the_days ;
year = 1900 ;
month = 2 ;

大丈夫(コンパイル成功)でした。
 (最初のdaysのint型宣言は不要だったんですね。^^;)

>>ドラさん
  ご指摘ありがとうございます。

・()の対応が取れていない
  ごめんなさい。これはまだ全く勉強してない部分ですが、
  これから調べてきます。

・全角空白の混入
  はい、その通りでした。Eeelさんからも同じ指摘があり、
  初めて全角スペースがエラーになる事を知りとても勉強になりました。

・変数名の間違い
  year ⇒ ywar でミス表記してました。
  (ミス打ちしないように気をつけてたのにも関わらず・・・;;
   すみません。)

 ○正しい比較演算子に訂正して
 ○スペースも全角ではなく半角で打つように注意して

 もう一度ソースコードを書いたら、見事コンパイル成功しました。 (∀`ヽ●)(ノ●´∀)ノ
 実行結果も狙い通り。
 皆さんありがとうございました。




 

 


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



Name: Eeel  ..かけだし(1,539ポイント)   Date: 2009/10/22(木) 19:11   No:40832       
Title: テンプレートクラスの明示的インスタンス化について質問です。    
こんばんは。
テンプレートクラスでも宣言はヘッダファイルに、定義はソースファイルに書きたかったので
明示的インスタンス化で解決しようとしたのですが、
『明示的なテンプレートのインスタンス生成要求に対して適切な定義がありません。』
という警告が出てしまいます。
自分で調べたり検索したりしたのですが、どうすれば解決できるのかわかりませんでした。
template.hが下記の内容で、template.cppは省略しますがCBase_tクラスのメンバ関数の定義を行っています。

template<class T> class CBase_t
{
private:
    T* m_pValue;
public:
    CBase_t();
    T set(T value);
    T calc(T value);
    T get(void);
    ~CBase_t();
};

template class CBase_t<int>;    //ここの2行で警告が出ています
template class CBase_t<short>;


警告を無視しても一応想定通りの結果にはなりました。
しかし他にどのような影響があるのかわからない(私が理解できていない)事と、
警告を出しつつ無視していると、他の重大な警告を見落としかねないので
警告の出ない完璧な記述にしたいのです。

どのようにすればよいのでしょうか?
お願いいたします。


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


Name: Justy  ..伝説なるハッカー(449,293ポイント)   Date: 2009/10/22(木) 19:57   No:40835     
Title: Re:テンプレートクラスの明示的インスタンス化について質問です。    

>明示的なテンプレートのインスタンス生成要求に対して適切な定義がありません

 明示的に生成するにはメンバの定義が必要です。
 なので、メンバ関数の中の実装を書けば警告は消えると思います。


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

Name: たかぎ [URL]  ..ハッカー(113,703ポイント)   Date: 2009/10/22(木) 19:58   No:40836     
Title: Re:テンプレートクラスの明示的インスタンス化について質問です。    
処理系不明なので何ともいえません。


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

Name: Eeel  ..かけだし(1,852ポイント)   Date: 2009/10/22(木) 21:20   No:40840     
Title: Re:テンプレートクラスの明示的インスタンス化について質問です。    
回答ありがとうございます。

>Justyさん
>メンバ関数の中の実装を書けば警告は消えると思います。
メンバ関数の中に実装を書くならば、明示的なインスタンス化は必要ありませんよね?
警告すら出さないようにする事はできないという事でしょうか。

>たかぎさん
すみませんでした。
WindowsXPでVC++EEを使用しています。


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

Name: Justy  ..伝説なるハッカー(449,446ポイント)   Date: 2009/10/22(木) 21:54   No:40841     
Title: Re:テンプレートクラスの明示的インスタンス化について質問です。    

    template class CBase_t<int>;
    template class CBase_t<short>;

 この2行は template.cpp側に書いてみてください。
 そうすれば実装を元に明示的にインスタンス化ができます。


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

Name: Eeel  ..かけだし(1,854ポイント)   Date: 2009/10/22(木) 21:58   No:40842 解決!     
Title: Re:テンプレートクラスの明示的インスタンス化について質問です。    
大量に出ていた警告が綺麗さっぱり消えました。
爽快です。
ありがとうございました。


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



Name: NAGI  ..ぴよぴよ(112ポイント)   Date: 2009/10/21(水) 13:34   No:40737       
Title: テニスのような、勝敗を決定するプログラム    
(テニスのように)先に4勝するとどちらかの勝利で終わるが、3勝3敗となったときには先に2連続した方が勝ちになるように変更したプログラムを作成せよ。

このような課題が出されているのですが、条件文をどのように定義したらよいのでしょうか?

実際に動作するプログラムを載せていただけるとありがたいです。


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


Name: バグ  ..ハッカー(171,843ポイント)   Date: 2009/10/21(水) 14:15   No:40738     
Title: Re:テニスのような、勝敗を決定するプログラム    
条件式が分からないという事は、そこ以外は出来ているという事ですよね?
完成している箇所だけでかまいませんので、ソースコードを提示してください。


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

Name: 紅葉  ..中級者(11,688ポイント)   Date: 2009/10/21(水) 21:02   No:40765     
Title: Re:テニスのような、勝敗を決定するプログラム    
急いで書いたので醜いソースですが参考までに...


int a_win,b_win; // 勝利回数
int win_num = 0; // 0=>なし 1=>aの勝ち 2=>bの勝ち

// ~勝敗の処理~ 勝ったほうの 〜_winに+1する

if(a_win >= 3 && b_win >= 3){
if(a_win-2 == b_win) win_num = 1;
else if(a_win+2 == b_win) win_num = 2;
}else{
if(a_win >= 4) win_num = 1; // aの勝ち
else if(b_win >= 4) win_num = 2; // bの勝ち
}


また環境がわからなかったので違ったらすみません。


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

Name: Mikan [URL]  ..中級者(10,423ポイント)   Date: 2009/10/22(木) 21:11   No:40839     
Title: Re:テニスのような、勝敗を決定するプログラム    
この得点になったら勝ち!という、win_pointみたいなのを定義しておきます。
とりあえずデフォルトではwin_point=4ですが、3対3になったらwin_point+=2とします。
また4対4になれば同じことをすればいいだけなので簡単ではないでしょうか?

aとbを比較するのではなくて、勝利ポイントと比べるのはいかがでしょう?

プログラムは載せませんが、参考にしてくださいね♪



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



Name: ポアンカレ  ..ぴよぴよ(200ポイント)   Date: 2009/10/22(木) 19:18   No:40833       
Title: float変数の比較結果    
 初めて質問させて頂きます.
 以下のようなコードを作成致しましたが,変数xが
0.1であるにもかかわらず,大小関係の判定に誤りが
見られます.コーディングの理解に誤りがありましたら
ご指摘頂ければ大変助かります.

 よろしくお願い致します.

----- ココカラ -----
●ソースコード
#include <stdio.h>
main()
{
float x;
x=0.1;

printf("%d\n", x < 0.1);
printf("%d\n", x == 0.1);
printf("%d\n", x <= 0.1);
}

●実行結果
0
0
0
----- ココマデ -----


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


Name: Eeel  ..かけだし(1,747ポイント)   Date: 2009/10/22(木) 19:48   No:40834     
Title: Re:float変数の比較結果    
0.1 というのはdouble型です。

printf("%d\n", x < (float)0.1);
printf("%d\n", x == (float)0.1);
printf("%d\n", x <= (float)0.1);

として型を合わせれば正しい判定になります。
なぜdouble型とfloat型で判定が変わるのかについては、
こちらのサイトに詳しい説明がありました。

http://www.cc.kyoto-su.ac.jp/~yamada/pB/float.html

簡単に説明しますと
0.1は二進数では無限少数になります。
(1/3=0.333333・・・が3進数では0.1と表記できるように、数が無限少数であるかどうかは何進数かで変わります)
そして、double型とfloat型ではその無理数を扱う桁が違います。
ですので、0.3333 == 0.33333333 のような式になってしまい、想定通りの判定が行われない事になります。


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

Name: box  ..ハッカー(144,808ポイント)   Date: 2009/10/22(木) 20:01   No:40837     
Title: Re:float変数の比較結果    

float型やdouble型のような浮動小数点数は、
ほとんどの場合誤差を伴います。
「小数」であって「少数」ではありません。

数学的には厳密に0.1であっても、
コンピュータではそうなりません。

試しに、

printf("%.10f\n", x);

こんなコードを付け加えてみると、お使いの環境では
xが0.1よりごくわずかに大きいことがわかるでしょう。
私のところでは0.1000000015と出力しました。

なお、Eeelさんが書かれたようなキャストを行なったからといって、
xが0.1に等しいという論拠にはなりません。

xの内部表現(メモリ中の0と1のパターン)と、
float型にキャストした0.1の内部表現とが等しいというだけです。
約0.1000000015と約0.1000000015とは確かに等しいです。
しかし、0.1ではありませんね。そういうことです。



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

Name: ねこ  ..熟練のプログラマー(47,436ポイント)   Date: 2009/10/22(木) 21:03   No:40838     
Title: Re:float変数の比較結果    
boxさんの言われる通り小数はビット表現では近似値となる値が大半なため誤差が出ます。

こんな風に減算結果の絶対値がある程度の値未満なら同値であるというマクロか関数を用意しておくと良いかもしれません。
#define EQUALSF( A, B ) ( ( fabs( A - B ) < 0.001 ) ? TRUE : FALSE )


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



Name: チルチル  ..熟練のプログラマー(67,829ポイント)   Date: 2009/10/20(火) 23:05   No:40704       
Title: Stateパターンと相性が悪い?    
前回

http://www.play21.jp/board/formz.cgi?action=res&resno=40004&page=&id=dixq&rln=40578&vino=81

の続きですが

構造を検討した結果
選択画面からゲーム画面へ飛ぶようなStateパターンの管理体制としては

世界クラスが場面クラスを包含して
場面クラスが使用するインスタンス郡を包含するという構造に決まったんですが

実装しようとすると相性が悪い気がするんですよね・・

まず次に飛ぶインスタンスを指定するのは今のインスタンスになりますが
包含である以上は他のインスタンスが見えないんですよね・・

場面クラスのヘッダをインクルードすれば見えない事も無いですが
指定する時に場面クラスのインスタンス名も書かなくてはいけないので見栄えが悪い上に
カプセル化でインスタンス郡は非公開ですからそもそも見えません

また列挙型を使うとStateパターンの意味が無い上に配列にしないといけない感じになって微妙です・・

画像の読み込みがあるので動的なインスタンスはダメだし効率は捨てなくてはいけない気がするんですよね・・

考えた結果唯一実現可能な方法として
インスタンス郡の数だけ世界と場面にポインタを返す関数を用意しておいて
インスタンス郡のコンストラクタで呼び出してメンバ配列に記憶して渡して使う方法です

何か列挙型を使うのと同じような気もしますが
一応これで行こうと思っています

しかしこのままだと後味が悪いので
何かもっと良い方法があったら教えてください

私としては最良の方法だと思うのですが
大事な部分だし前回のトビで最良が覆された前例があるので先人の知恵も借りようと思ったので・・



Name: ねこ  ..熟練のプログラマー(47,337ポイント)   Date: 2009/10/20(火) 23:52   No:40706     
Title: Re:Stateパターンと相性が悪い?    
その最良の知恵をくれた先人達は散々「まず作れ」って言ってたと思うんだけどまだ振り回すのかw

<場面クラスのヘッダをインクルードすれば見えない事も無いですが
<指定する時に場面クラスのインスタンス名も書かなくてはいけないので見栄えが悪い上に
これも指摘したけど「見栄えが悪い」とか「無駄に感じる」を質問の引き合いに出さないで下さい。
案を出しても「見栄えが悪い」の一言でスルーされる回答者の気持ちになってみたら?
最低でもこんなのはコーディングルールでも提示してから許されるもんです。

そもそも最良ってのは全体的な形があって初めて決まるものなのに
具体的な最終完成形も分からない(提示しない)のにそれを求めるってのは随分勝手じゃないですか?
前回の長々とした議論はなんだったの?提示された沢山のソースをちゃんと試したの?
参考にとお勧めされたURLのページはきちんと目を通したの?
知恵を借りる前に上記のように一杯「まだ試せる事」あるんじゃないの?


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

Name: 組木紙織  ..比類無きプログラマー(72,539ポイント)   Date: 2009/10/21(水) 00:17   No:40707     
Title: Re:Stateパターンと相性が悪い?    
あら、ねこさんちょっと怒りぎみかな。

どのような形でも一通り実装したのを見せてください。
効率化(演算速度のことですよね)はある程度完成が見えきてからするものです。
コードの見栄えの良さは経験によって変わるものです。

プログラミング言語は一応"言葉"なので、知識よりも経験がものを言います。
失敗したって誰からも怒られないと思うので、存分に失敗してください。
失敗してからなら、良い方法の良いところがわかります。


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

Name: チルチル  ..熟練のプログラマー(69,125ポイント)   Date: 2009/10/21(水) 01:31   No:40712     
Title: Re:Stateパターンと相性が悪い?    
>その最良の知恵をくれた先人達は散々「まず作れ」って言ってたと思うんだけどまだ振り回すのかw

いえいえ滅相も無い
ダメ押しもかねた軽い気持ちでの質問ですので
振り回すつもりなどはまったくありません

>これも指摘したけど「見栄えが悪い」とか「無駄に感じる」を質問の引き合いに出さないで下さい。

見栄えが悪いのは重大な欠陥だと思うのは私だけなんでしょうか・・

>案を出しても「見栄えが悪い」の一言でスルーされる回答者の気持ちになってみたら?

まあ確かに「見栄えが悪い」って言われたら困るとは思いますが、そうとしか言えないんですよね・・

>最低でもこんなのはコーディングルールでも提示してから許されるもんです。

何がコーディングルールかと言えば「自分から見て見栄えが良いコード」でしょうかね・・
「見栄えが良い」と言うのは状況によって変わるので実質無いですね、直感と言う事にしています

>そもそも最良ってのは全体的な形があって初めて決まるものなのに
>具体的な最終完成形も分からない(提示しない)のにそれを求めるってのは随分勝手じゃないですか?

無理があるとは思いましたが、質問しないよりはマシかと思ったもので・・

>前回の長々とした議論はなんだったの?提示された沢山のソースをちゃんと試したの?

私としては前回の議論はとても役に立ちましたよ
「まず作れ」と言うのは納得が行きませんが・・
ソースは6割方ぐらいは試しました

>参考にとお勧めされたURLのページはきちんと目を通したの?

一応すべて目を通しました・・

>知恵を借りる前に上記のように一杯「まだ試せる事」あるんじゃないの?

あるかもしれませんが私が思い付かないので無い事になります・・

>どのような形でも一通り実装したのを見せてください。
>効率化(演算速度のことですよね)はある程度完成が見えきてからするものです。
>コードの見栄えの良さは経験によって変わるものです。

残念ながらStateパターンが核なので、これを解決しないと実装できません・・

>プログラミング言語は一応"言葉"なので、知識よりも経験がものを言います。
>失敗したって誰からも怒られないと思うので、存分に失敗してください。
>失敗してからなら、良い方法の良いところがわかります

なるほど、先人の知恵ですね
まあ失敗したら私が自分に怒りますが・・

質問した時は最良を覆せないと思っていましたが
簡単に覆されてしまいましたね・・

つまり真の最良は「質問するより作った方がうまく行くと先人が教えてくれている」って事ですね

まだ半信半疑ですが、先人が口を揃えて言っているんだから疑いの余地は無いですね

では現状の方法で製作を開始してみようと思います
先人の皆様どうもありがとうございました


2倍のポイントを手に入れた! 1,296ポイント を手に入れた。

Name: 組木紙織  ..比類無きプログラマー(73,286ポイント)   Date: 2009/10/21(水) 02:24   No:40714     
Title: Re:Stateパターンと相性が悪い?    
別にゲーム画面が選択画面を直接呼ぶ必要はなくて、ゲーム画面は世界に選択画面に行ってくださいって
頼めばよいのです。
そうすれば世界はゲーム画面から選択画面に切り替えるという作業をすれば、
ゲーム画面が選択画面を知らなくてもうごきますよね。

/*********************
[追記]
>つまり真の最良は「質問するより作った方がうまく行くと先人が教えてくれている」って事ですね
いえ、そうではなく、
少なくとも私が言いたかったことは、
作ってみて(or作ろうとして)問題点を正しく把握した後に、問題となる部分を質問してくれたら、
無駄に言葉を重ねずに良い方法を知ることができ、そのよい方法の良い点がわかるということです。

*************/


#include <iostream>

enum MOVE{BACK,NEXT,NOW};
class Stage
{
private:
public:
virtual MOVE doing() =0;
};

class StartStage:public Stage
{
MOVE doing();
};

class GameStage :public Stage
{
MOVE doing();
};
class EndStage: public Stage
{
MOVE doing();
};
MOVE StartStage::doing()
{
std::cout << "This is start Stage: " << std::endl;
int c;
std::cout << "Please input number 1[NEXT] or 2[BACK] or another[NOW]" << std::endl;
std::cin >> c;
return (c==1)?NEXT:(c==2)?BACK:NOW;
}

MOVE GameStage::doing()
{
std::cout << "This is game Stage" << std::endl;
int c;
std::cout << "Please input number 1[NEXT] or 2[BACK] or another[NOW]" << std::endl;
std::cin >> c;
return (c==1)?NEXT:(c==2)?BACK:NOW;
}

MOVE EndStage::doing()
{
std::cout <<"This is end Stage" << std::endl;
int c;
std::cout << "Please input number 1[NEXT] or 2[BACK] or another[NOW]" << std::endl;
std::cin>> c;
return (c==1)?NEXT:(c==2)?BACK:NOW;
}

class World
{
private:
Stage* stage;
Stage* arr[3];
public:
World();
~World();
void doing();
};
World::World()
{
arr[0] = new StartStage;
arr[1] = new GameStage;
arr[2] = new EndStage;
}

World::~World()
{
for(int i=0;i<3;i++)
{
delete arr[i];
}

}
void World::doing()
{
int index =0;
while(index>=0 && index<=2)
{
MOVE mo;
mo = arr[index]->doing();
switch(mo)
{
case BACK:
index--;
break;
case NEXT:
index++;
};

}
}



int main()
{
World w;
std::cout << "gameStart" << std::endl;
w.doing();
std::cout << "gameEnd" << std::endl;
return 0;
}




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

Name: conio [URL]  ..熟練のプログラマー(63,974ポイント)   Date: 2009/10/21(水) 12:17   No:40730     
Title: Re:Stateパターンと相性が悪い?    
チルチルさんは心配性のようですね。

ですが、ある程度方針を決めたら
頭の中で色々と考えるよりかは、実際にコードを書いていったほうが良いと思います。

あらゆることに適応できる万全なコードを、初期段階で頭の中で全て想定しておくのは
ほぼ無理です。
(必ず、想定外の問題が出てきたり、また途中で仕様を変更しようと判断し、修正の必要が出てきたりなどがあるかと。)


>>>参考にとお勧めされたURLのページはきちんと目を通したの?
>>一応すべて目を通しました・・
目を通すだけでは駄目かなと思います。

以前、クラス内遷移やらでURLを紹介される事もありましたが、
「よく分かりませんでしたね。」で一蹴されることもありました。

完璧とまでは行かずとも、理解しようとしたり、
また理解したのならば頭の隅にでも軽く留めておくことが必要だと思います。
(以前の質問の回答を忘れて、また同じ質問を繰り返したりすると、えらく非効率です)


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

Name: Mikan [URL]  ..中級者(10,070ポイント)   Date: 2009/10/21(水) 12:31   No:40732     
Title: Re:Stateパターンと相性が悪い?    

どうやら世界クラスという概念が先に来るので、難しくなってるように思います。

世界クラスの概念を捨てて

・プレイヤークラス
・敵クラス
・場面クラス

という独立した3つのクラスを作り、main()で正常に動作するまでカプセル化を行います。
※上記3つのクラスはお互いが見えないものとする

最後にmain()でやってたことを世界クラスにさせれば良いのではないかと思います。


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

Name: Mikan [URL]  ..中級者(10,272ポイント)   Date: 2009/10/21(水) 12:45   No:40733     
Title: Re:Stateパターンと相性が悪い?    
肝心なStateパターンのことを書くのわすれてました^^;

>>実装しようとすると相性が悪い気がするんですよね・・
無理に使わなくてもいいのでは?
デザインパターンは考え方なので、必ずしもそのプログラムに使える(最適)とは限りません。
使えるところは変更!って感じでもいいかと思います。

どうしてもStateパターンを使うのであれば、やはり場面クラスに実装してmain()から
使えるようにするのがいいですよ♪


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

Name: MNS  ..上級者(20,922ポイント)   Date: 2009/10/21(水) 13:28   No:40735     
Title: Re:Stateパターンと相性が悪い?    
>世界クラスが場面クラスを包含して
>場面クラスが使用するインスタンス郡を包含するという構造に決まったんですが
このような設計よりも、世界クラスを包含する新たなクラスを作り、
そのクラスが場面クラスを使用する、という構造をとったほうが良いと思います。
class Game


class State
{
virtual void Update(Game* pgame) = 0;
};

class Game
{
World* world;
State* state;

public:
void Update(){ state->Update(this); }
void ChangeState(State* newstate)
{
delete state;
state = newstate;
}
World* getWorld(){ return world; }
Game()
{
state = new BeginningState();
world = new World();
}
};

class BeginningState :public State
{
void Update(Game* pgame);
}

class MainState :public State
{
void Update(Game* pgame);
}

void BeginningState::Update(Game* pgame)
{
//Worldのメンバへアクセスしたい場合は、
pgame->getWorld()->/* member */
//別のステートに遷移したい場合は
if(/* 条件 */)
pgame->ChangeState(new MainState());
}

などなど・・(コードはコンパイルをしてないのでもしかしたら誤ってるかもしれません)
場面を動的確保したくなければ、場面ごとシングルトンにして、そのポインタを渡すようにしてください。

いろいろとあると思いますが、気を落とさず挑戦してみてください


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

Name: チルチル  ..比類無きプログラマー(70,107ポイント)   Date: 2009/10/21(水) 17:40   No:40745     
Title: Re:Stateパターンと相性が悪い?    
なるほど列挙型指定ですね
これでも良いんですがヘッダのインクルード箇所が増えて管理しきれない気がするんですよね

>別にゲーム画面が選択画面を直接呼ぶ必要はなくて、ゲーム画面は世界に選択画面に行ってくださいって
>頼めばよいのです。

いえ、そうではなくて場面の中で次に進む場面を指定する時に
次の場面が見えない構造だから工夫が必要という事です

>目を通すだけでは駄目かなと思います。

正確には目を通して、ある程度は理解しました・・

>以前、クラス内遷移やらでURLを紹介される事もありましたが、
>「よく分かりませんでしたね。」で一蹴されることもありました。

わからないコードは自分が使えないので
正直に「わかりませんでした」と言った方が誤解を生まないと思ったのですが・・

>無理に使わなくてもいいのでは?

確かに実装しようとすると方法は重要では無かったですね・・

>このような設計よりも、世界クラスを包含する新たなクラスを作り、
>そのクラスが場面クラスを使用する、という構造をとったほうが良いと思います。

そういう手もあるんですが包含の階層が多くなると
私が理解できなくなって管理できなくなりそうで怖いです・・

さらに入力やループ関係との繋がりが曖昧になる上に
階層が増える事でアクセサの数が増大してコードの可読性が下がる問題もあります

カプセル化を守るためにはメンバに直接アクセスしてはいけないので
アロー演算子を使った2段階アクセスはNGです・・

>などなど・・(コードはコンパイルをしてないのでもしかしたら誤ってるかもしれません)
>場面を動的確保したくなければ、場面ごとシングルトンにして、そのポインタを渡すようにしてください。

なるほどインスタンスして渡すんですね

方法としては色々とあるんですが実装する段階になると
状態変化の方法よりも次の状態が見えない事が問題になって来たんですよね・・

包含はすべてインスタンスで持つというルールを決めたのでそこは変えない方向の予定ですが
さらに考えるといちいちアクセサを作るのは面倒なので引数に文字列を渡して内部で分岐する方法を考えました

分岐を無くす為の準備で分岐をするというのも変ですが細かい事を気にしていると前に進まないですね・・
アクセサがインライン化されにくそうで実行ファイルが大きくなりそうですが
まあコンストラクタで呼ぶと思うのでオーバーヘッドは関係ないですし・・

良い忘れましたが選択画面の汎用化のためにポインタを最初から配列で持っておく必要があるんですよね
それを実現するにはこれしかないかなと・・

今になって思うと素直にスイッチ文を使えば一発で解決したんですけどね・・
まあ素材の管理が大変なので無理なんですが・・

しかし教えてもらったサイトは役に立ちましたよ
sprite.SetTexture((CTexture*)FindItemBox("zakotex"));
と言う記述を見て思い付きましたから

World.SceneGet("Title");//タイトル画面のポインタを返す

このような関数を作ると1つで全部のポインタを調べられて便利と言う事ですね、勉強になりました
インスタンスごとに別々にアクセサを作るのとどっちが良いかはわかりませんが
とりあえず私が楽なのでこの方法でやってみましょうかね・・


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

Name: チルチル  ..比類無きプログラマー(70,240ポイント)   Date: 2009/10/21(水) 18:12   No:40746     
Title: Re:Stateパターンと相性が悪い?    
そういえば前回のトビで気になってる事があるんですが

「メンバごとにアクセサを作るのは無駄」と言うアドバイスと

「メンバごとにアクセサを作った方が良い」と言うアドバイスがあったのですが

結局どっちなのでしょうか?

案外、両方を満たしている?のは

World.SceneGet("Title");

こういう事なんでしょうかね・・


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

Name: MNS  ..上級者(21,053ポイント)   Date: 2009/10/21(水) 18:32   No:40748     
Title: Re:Stateパターンと相性が悪い?    
前回のトピックスで二つの意見があったということは、
二つの異なる見解が存在するということで、結論付けることは出来ないと思います。

私の意見では、外部からアクセスを受けるメンバに対しては、
カプセル化の原則に基づいて、全てアクセサを作る必要があると考えます。
アクセサを作らないのは、あくまで速度を重視する場合であるか、
そこまで厳格なカプセル化が必要ないメンバに限るでしょう。


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

Name: チルチル  ..比類無きプログラマー(70,010ポイント)   Date: 2009/10/21(水) 19:14   No:40749     
Title: Re:Stateパターンと相性が悪い?    
アクセサを作りたくないのは数が多くなるとゴチャゴチャする事でしょうかね・・

それから包含がある以上は自機がボスの座標を知りたい場合に

自機が世界のアクセサを呼び出して
世界のアクセサがキャラのアクセサを呼び出して
キャラのアクセサがボスのアクセサを呼び出して
ボスのアクセサがボスの座標を返す

と言う事になってしまい

メンバ1個につきアクセサを3個作らなくてはいけないと言う状況になるんですよね・・

メンバを調べるだけでアクセサの連鎖が凄い事になるのは怖いですが
作ってしまえば管理はしやすいかもしれませんね・・


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

Name: MNS  ..上級者(21,295ポイント)   Date: 2009/10/21(水) 19:36   No:40751     
Title: Re:Stateパターンと相性が悪い?    
アクセサだけまとめて集めれば、それほど可読性が損なわれるわけではないですし、
カプセル化が破綻するよりはマシだと個人的には思います。
>メンバ1個につきアクセサを3個
長い目でみれば、他で"世界のアクセサ"や"キャラのアクセサ"を使うことも考えられますし、
無駄な作業でもないでしょう。

ところで、Stateの件ですが、構造がいまいち掴めません。
とりあえずやってみるとのことなので、まだスッキリしないという場合には、
一通り構造を組んだあと、コードを提示してくだされば適当な回答が得られると思います。


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

Name: チルチル  ..比類無きプログラマー(70,443ポイント)   Date: 2009/10/21(水) 19:49   No:40752     
Title: Re:Stateパターンと相性が悪い?    
包含しているクラス内のアクセサは見えないので集めるのは無理ですが
ヘッダのインクルードを減らすために
自機→世界→キャラ→自機とスコープがループするような構造にする予定なので
「世界のアクセサ」や「キャラのアクセサ」を使うとしたら「世界」や「キャラ」になりますね
それも便利そうなので無駄ではなさそうです
この辺は慣れの問題のようですね、実際にやっていればそれほど気にならなくなると思います

Stateがスッキリしない理由はアクセサが多くなって管理しづらいと言うのが大きいので
そこを割り切ればそれほど問題では無いかもしれません

と言うより動的なインスタンスはしないと言う前提があるので
場面のインスタンス郡は場面管理クラスが包含するしかありません
次の場面に進むには次のインスタンスのポインタとか番号が必要ですが
カプセル化されているので場面からは次の場面が見えません
となるとアクセサを作るしかないので、もう結論は出てるのかもしれませんね・・

でもアクセサだけ集めるのも兼ねて

やはり

World.SceneGet("Title");

これぐらいの汎用化はしても良いかもしれませんね

これは別にカプセル化を壊してないし
内部で分岐しているだけなのでやってる事は同じになりますが

メモリに文字列が大量に展開されるのは怖いですね・・


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

Name: MNS  ..上級者(22,114ポイント)   Date: 2009/10/21(水) 20:06   No:40754     
Title: Re:Stateパターンと相性が悪い?    
No.40735でも言いましたが、ステート+シングルトンではダメなのでしょうか?
具体的なコードでいうと・・

class Game

class State
{
public:
virtual void Enter() = 0;
virtual void Exit() = 0;
virtual void Update(Game* pgame) = 0;
};

class Game
{
World* world;
State* state;

public:
void Update(){ state->Update(this); }
void ChangeState(State* newstate)
{
state->Exit();
state = newstate;
state->Enter();
}
World* getWorld(){ return world; }
Game();
};

class BeginningState :public State
{
BeginningState(){}
public:
void Enter(){/*コンストラクタ的な役割*/}
void Exit(){/*デストラクタ的な役割*/}
void Update(Game* pgame);
static BeginningState* Instance()
{
static BeginningState bs;
return &bs;
}
}

class MainState :public State
{
MainState(){}
public:
void Enter(){/*コンストラクタ的な役割*/}
void Exit(){/*デストラクタ的な役割*/}
void Update(Game* pgame);
static MainState* Instance()
{
static MainState ms;
return &ms;
}
}

void BeginningState::Update(Game* pgame)
{
if(/* 条件 */)
pgame->ChangeState(MainState::Instance());
}

void MainState::Update(Game* pgame)
{
//Worldクラスの更新
pgame->getWorld()->Update();
}

なぜ、動的確保してはいけないのか疑問ですが、
シングルトンと組み合わせるならばこんな感じです。
>カプセル化を守るためにはメンバに直接アクセスしてはいけないので
>アロー演算子を使った2段階アクセスはNGです・・
これもよくわかりません。もちろん、privateのメンバへはアクセスできませんよ。


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

Name: チルチル  ..比類無きプログラマー(70,790ポイント)   Date: 2009/10/21(水) 20:43   No:40762     
Title: Re:Stateパターンと相性が悪い?    
ああ確かに場面のクラスを全部同じヘッダにまとめればシングルトンが見えますね
動的確保せずインスタンスを実体で持つ理由は世界に全部のクラスを合体させるためですが
これは中々使えるかもしれませんね

場面クラスから別の場面クラスが見える時点でカプセル化が崩壊していますが、まあ今は置いておくとして・・

しかしシングルトン用の静的メンバ関数をいちいち作るのは非常に大変ですね・・
ものがインスタンスだけに基底クラスで済ます事もできないし・・

動的確保してはいけない理由としてコンストラクタで画像のロードを行うので
画像を静的メンバにしたり何回目のインスタンスか数えたりするのは手間が掛かりすぎると言うのが挙げられます

ですがシングルトンの場合はゲーム内でタイトル画面から全部の画面に移動できるので
初期状態としてタイトルをインスタンスすると全部のクラスにインスタンス化が広がっていく気もしますね
シングルトンでもコンストラクタで移動先のポインタを取得する事に変わりないですから・・

なかなか良いとは思いますがアクセサを使う場合よりコードの量が増えるし
枝先は根本だけに依存すると言う大前提を破壊するのは気が引けますね・・
ですが便利そうなのは確かなので迷いますね・・


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

Name: dic  ..プログラマー(36,053ポイント)   Date: 2009/10/21(水) 21:51   No:40772     
Title: Re:Stateパターンと相性が悪い?    
>インスタンス郡の数だけ世界と場面にポインタを返す関数を用意しておいて
>インスタンス郡のコンストラクタで呼び出してメンバ配列に記憶して渡して使う方法です
ファミコンなどアセンブラで数バイト単位で戦ってこられた方が聞いたらキレますね
私はポインタのハードコーディングスタイルは嫌いです
それならCでいいんじゃないかと

Stateパターン(C++)とC言語スタイルを比べるのはスジが違うのでは?


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

Name: チルチル  ..比類無きプログラマー(71,637ポイント)   Date: 2009/10/21(水) 22:42   No:40779     
Title: Re:Stateパターンと相性が悪い?    
う〜ん仰っている意味が良くわからないんですが・・


>ファミコンなどアセンブラで数バイト単位で戦ってこられた方が聞いたらキレますね

すみません、ファミコンとアセンブラは見た事が無いのでピンと来ないです


>私はポインタのハードコーディングスタイルは嫌いです

まず「ハードコーディング」と言う言葉を知らなかったので調べたんですが

1.特定の動作環境を決め打ちして、その動作環境で動作させることを前提とした処理やデータをソースコードの中に書き込んでしまうプログラミング方式

2.最初に作った人にとっては何らかの意味を持っているのであろうけれど、後から見る人にとっては意味不明の数字などがプログラムのあちこちに直接書いてある事

3.プログラム中に定数などを直接記述すること

と言うような結果が得られましたが、今回はどの意味でしょうか?

1は動作によって変わるような物でもなさそうなので違いますね、外国語までカバーする余力は無いですし

2は関数なので全く違いますね

3も関数なので全然違いますね

「ポインタのハードコーディングスタイル」とはどういう意味なんでしょうか?


関係無いですが、調べている時に「コーディングスタイル」の意味が書いてありました

>そのプログラミング言語の文法上ではどっちを使っても同じ意味で、無頓着な第三者にとってはどうでも良いような事だが
>しかし「プログラムを作る事は芸術だ」と信じて疑わない当の本人にとっては他の何よりも重大事であると思い込んでいる
>神経質なプログラマの強迫神経症的な病的なこだわりの集合体の事

こういう意味の言葉だとは知りませんでしたね

代表的な例として書いてあったのが

・変数名は最初の一文字を必ず大文字にする。 単語の区切りなどはアンダーラインを使わず、大文字にする。
・意味を持った定数はハードコーディングせず、必ず全て大文字で構成されたマクロや何らかの変数を使用する。
・インデントはタブ1つで4文字文にする。
・ifやfor、while、switchなどのブロックの開始のカッコ(Cやその文法をパクった言語で多用される'{''のこと)は、次行に書かず、必ず同一行に記述する。
・式の評価の優先順位に影響を与えない不必要なカッコ(ここでは'('と')'のこと)は、必要最低限以上には絶対に使わない。

多少の違いはありましたが全部当てはまっているので1人で大爆笑したんですが
まあ前回のトビじゃないですけど、こんなのは考え方の問題なのでまったく関係ないですが・・


>それならCでいいんじゃないかと

Cはクラスが無いから無理です


>Stateパターン(C++)とC言語スタイルを比べるのはスジが違うのでは?

これも意味が良くわからないんですが、どういう事ですか?

そもそもカプセル化ってこういう事じゃないんでしょうか・・

構造の核ではありますがコンストラクタの初期化専用なのでそれほど全体に影響は無いですしね・・


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

Name: ぽこ  ..ぴよぴよ(95ポイント)   Date: 2009/10/21(水) 23:54   No:40784     
Title: Re:Stateパターンと相性が悪い?    
>そもそもカプセル化ってこういう事じゃないんでしょうか・・

MNSさんの投稿に対する返信を見る限り、カプセル化を勘違いしていませんか?
カプセル化ってのは、あるオブジェクトの状態(メンバ変数)を知るため、変更するためには
手続き(メンバ関数/ただの関数)を通す必要があるってことです。
あるクラスのメンバ関数の定義に別のクラスのオブジェクトがあるってだけでは、
カプセル化が崩れたということにはなりません。

話は変わりますが、私個人としては、見栄えは非常に重要と考えています。
他の回答者も間違いなく重要と考えているはずです。
ただ、チルチルさんから現物のコード、またはサンプルコードを提示して頂けていない為、
誰もチルチルさんの悩みを、理解・共有・共感できないのです。
見栄えの悪いと思っているStateパターンのサンプルコードを提示できないでしょうか?


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

Name: チルチル  ..比類無きプログラマー(72,053ポイント)   Date: 2009/10/22(木) 00:28   No:40790     
Title: Re:Stateパターンと相性が悪い?    
あ〜そういえばそうでした・・
正しくは構造イメージが崩れるですね

何か知識を得るたびにコーディングスタイルが激化して行く気がするんですが
枝先が根本以外を呼び出すのはやりたくないですね・・
こっちの方が便利ではありますが手間もかなり増えますしね・・

見栄えはわがままに近いので共感までしていただこうとは思っていませんが
まだ見栄えの悪いStateパターンのコードは存在しません・・

皆さんの仰るとおり心配性なので
発生する事がわかっている問題は発生する前に回避しようとしてしまうんですよね・・
その結果まだ発生していない問題について質問する事になって回答者の皆さんに迷惑をかけてしまうんですが・・

どうもこの流れは良くないですね、多少納得が行かなくても実装してしまえば何とか動くと思いますから
あまり深く考えずに作った方が良いんでしょうかね・・

最低限はっきりさせたいのは
インスタンス郡の数だけアクセサを作るか
シングルトンを使うかですね

前者はアクセサを大量に作る必要があり
後者は静的関数を大量に作る必要がある

これは迷うので皆さんの意見を聞かせてください


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

Name: ぽこ  ..ぴよぴよ(403ポイント)   Date: 2009/10/22(木) 01:30   No:40799     
Title: Re:Stateパターンと相性が悪い?    
>正しくは構造イメージが崩れるですね

その構造イメージが間違っています。

Stateパターンでは、具体的な状態を表す全てのクラスは一蓮托生です。
具体的な状態を表すクラス(BeginningStateやMainState)に状態の追加や状態遷移の
変更が加わると、その影響は最大で具体的な状態を表すクラスは全てに渡ります。
逆に、その影響を根本クラス(Game、State)に「波及させないことを目的とした」
コーディング方法がStateパターンなのです。

つまり、BeginningStateクラスからMainStateクラスが見えたって
何の問題もないのです。

構造という点では、抽象層と具象層に分かれます。
抽象層(根本)に属するのがGame、Stateクラスで、
具象層(枝先)に属するのがBeginningStateやMainStateクラスとなります。

>何か知識を得るたびにコーディングスタイルが激化して行く気がするんですが

逆に言うと、中途半端な知識で理想を追求することは出来ない、って
うすうす認識されているのですよね?
私も同感、「下手な考え休むに似たり」です。
あまり深く考えずに作ったものを見てもらったほうが良いと思います。

Stateパターンに関して、MNSさんが提示してくださったサンプルが
お手本になると思います。

>最低限はっきりさせたいのは
>インスタンス郡の数だけアクセサを作るか
>シングルトンを使うかですね

アクセッサとシングルトンって何か関係あるのでしょうか?


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

Name: dic  ..プログラマー(36,323ポイント)   Date: 2009/10/22(木) 07:34   No:40811     
Title: Re:Stateパターンと相性が悪い?    
>Cはクラスが無いから無理です
switch文つかえばstateパターンなら実装できます

見栄えが悪いから考えてるんですよね?


>前者はアクセサを大量に作る必要があり
>後者は静的関数を大量に作る必要がある

>これは迷うので皆さんの意見を聞かせてください
何が言いたいの?意味がわからない


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

Name: MNS  ..上級者(22,331ポイント)   Date: 2009/10/22(木) 13:37   No:40826     
Title: Re:Stateパターンと相性が悪い?    
どうも、チルチルさんはStateデザインパターンのメリットが良く分かっていないような印象を感じます。
Stateデザインパターンを使ったほうが、コードの量も減るでしょうし、見栄もよくなると思いますが。
結局のところ、文字で伝えるには限度がありますから、実際にコードを書かないと分からないと思います。
一度、Stateデザインパターンを使わない場合と、使う場合で簡単なゲーム画面を作ってみましょう。
百聞は一見にしかず、恐らくメリットが理解できるはずです。
もしも、プログラムが完成して、どうも納得いかない点があれば、そのコードを提示すれば、
私も含め、皆さんも適当な回答がしやすいと思いますよ。


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

Name: チルチル  ..比類無きプログラマー(72,435ポイント)   Date: 2009/10/22(木) 17:46   No:40831 解決!     
Title: Re:Stateパターンと相性が悪い?    
やっぱり頭の中だけで考えすぎなんでしょうね
これは「考えてるとキリが無い」と割り切った方が良さそうです・・

良く考えたらstateパターンを使った事が無いのに執着しても意味が無いですね・・
パターンがどうとかは忘れて「ポインタが指している場所を変更して状態が変わる」と言う構造だけ考えます

その構造で考えるとシングルトンの包含は開放タイミングが不明確なので不向きですね
やはりインスタンスを包含して1つのアクセサ内で分岐してポインタを返した方が良さそうです
加えてハードコーディング防止用にアクセサをマクロで呼び出して見ます
文字列の多数展開はともかく、そうすると構文が短くなるし修正がしやすそうですからね

ではそんな感じで作ってみたいと思います
うまく行かなかったら改めて質問させていただきます

今回も皆様のおかげで大変勉強になりました
どうもありがとうございます


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



Name: regret  ..ぴよぴよ(32ポイント)   Date: 2009/10/22(木) 14:05   No:40827       
Title: 質問なのですが・・・    
C言語でニコ動のようなコメントを流すプログラムを組むことは可能ですか?

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


Name: softya  ..上級者(22,535ポイント)   Date: 2009/10/22(木) 17:12   No:40830     
Title: Re:質問なのですが・・・    
質問が曖昧なので「出来ます」としか答えようが無いのですが、どのような事を考えておられますか?
C言語の標準ライブラリにはグラフィックのライブラリはありませんので、何らかのハード/ライブラリ/APIを使わない限り画面表示は出来ません。
たぶん、一番簡単なのはH8マイコン等でLCDを使ってコメントを流すのが簡単です。求めている答えとは違うと思いますが。


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



Name: でんすけ  ..初心者(5,011ポイント)   Date: 2009/10/21(水) 01:29   No:40711       
Title: また、数学の質問です。    
先ほど放物線の質問をした者です。
前の質問で軽率にも解決にしてしまったのですが、うまくいかなかったので・・・。
こんどは詳しい状況を記載しますので、もう一度アドバイス頂ければと思います。

vx = 敵のX座標 - 自分のX座標;
vy = 敵のY座標 - 自分のY座標;
size = sqrt( vx * vx + vy * vy );
mx = vx / size * ボールの速度;
my = vy / size * ボールの速度;

ボールのX座標 += mx;
ボールのY座標 += my;

今現在、上のコードで
自分がX,Y座標どの位置にいても敵の位置に向かって、ボールがとんでいくようにしています。
敵の座標はボールを投げる瞬間に取得した座標です。

それでボールを投げたときに放物線を描かせたいのですが、どうしたらよいでしょうか?
よろしくお願いします。


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


Name: Justy  ..伝説なるハッカー(445,404ポイント)   Date: 2009/10/21(水) 02:29   No:40715     
Title: Re:また、数学の質問です。    

>ボールを投げたときに放物線を描かせたいのですが、どうしたらよいでしょうか

1 真面目に放物線として計算する

 この計算に必要なのはターゲットの座標の他に、重力(上下方向)と初速、打ち上げ角度です。

 これらのパラメータが決まれば

C言語〜ゲームプログラミングの館〜
ttp://dixq.net/g/#27

にあるような放物線の方程式を使えば、原点から指定した角度・速度で投げたときの
時間 tにおける位置がとれます。
(始点は原点となるので、始点・終点共にオフセットする必要があります)


 問題はこのケースではターゲットの位置が決まっているので、
軌道の逆計算をする必要があるわけです。

 逆計算といっても、2つ以上不明なパラメータがあっては求めることはできないので、
重力・初速・角度のうち2つは適当に決めてしまい、残る1つを計算で求めることに
なります。

 とはいえ重力は“世界”に合わせて適当に決めてしまっていいと思うので、
残る初速と打ち上げ角度のどちらかを適当に決めてしまえれば、
もう一方を求められます。

 勿論どちらを求めるのかで、計算方法が異なります。


2 適当に補完して誤魔化す

 放物線ではなく、曲線的な動きであればいいのなら、こちらがお手軽です。
 
 適当な曲線アルゴリズムを使って放物線ぽい曲線を描きます。
 例えば Ferguson / Coons曲線なんかは、位置2つと初速と終点到達時の速度を
指定すると指定した時間に応じた位置を計算することができます。


Ferguson / Coons曲線
ttp://markun.cs.shinshu-u.ac.jp/learn/cg/cg3/index4.html

Catmull-Romスプライン曲線
ttp://markun.cs.shinshu-u.ac.jp/learn/cg/cg3/index5.html


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

Name: Justy  ..伝説なるハッカー(445,782ポイント)   Date: 2009/10/21(水) 02:38   No:40716     
Title: Re:また、数学の質問です。    
 1の放物線ですが、昔作ったサンプルを発掘しましたので、載せてきます。
 
 このサンプルは、まず適当な角度(35度)、初速 5.0、重力 -1.8で投げた時、
時間 0.02毎に座標を表示し、20個目(時間 0.36)で位置を記録しています。

 続いて、その位置を使って、「角度」や「初速」が判らない場合、
calc_ang()や calc_v()を使って求め、元々の計算で使った角度や初速と一致するか
検証するものです。

 昔過ぎて今見るとちょっとおかしなところとかあるんですが、
まぁ countとか angとか vとか適当に書き換えて試してみてください。

 何かの参考になれば。


#include <stdio.h>
#include <math.h>

// 初速 vと目的値 x, yと重力から、打ち上げ角度を求める(angに出力)
// 戻り値はいくつ角度が求まったか(0〜2)
int calc_ang(double v, double x, double y, double g, double ang[2])
{
    int count = 0;
    double v2 = v*v;
    double x2 = x*x;
    double c = x2 - (g * g * x2*x2) / (v2*v2) + (2*g*x2*y) / v2;
    
    if(c >= 0)
    {
        double sqrt_c = sqrt(c);
        double t1 = (-x + sqrt_c) / (g * x2) * v2;
        double t2 = (-x - sqrt_c) / (g * x2) * v2;
        
        if(t1 >= 0)
            ang[count++] = atan(t1);
        if(t2 >= 0)
            ang[count++] = atan(t2);
    }
    return count;
}

// 打ち上げ角度 angと目的値 x, yと重力から、初速を求める
int calc_v(double ang, double x, double y, double g, double *result)
{
    double s = -g / (2*(x * tan(ang)-y));
    if(s < 0)   return 0;
    
    *result = (x / cos(ang)) * sqrt(s);
    return 1;
}


 長いので続きます。


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

Name: Justy  ..伝説なるハッカー(448,712ポイント)   Date: 2009/10/21(水) 02:41   No:40717     
Title: Re:また、数学の質問です。    


int main()
{
    double t;
    double g = -1.8;                                // 重力(上方向が正とする)
    double v = 5.0;                                 // 初速
    double ang = 35 * (3.1415926535 / 180.0);       // 打ち上げ角度(rad)
    double xx, yy;
    
    // 角度の sin/cos値を予め出しておく
    double sin_theta = sin(ang);
    double cos_theta = cos(ang);
    
    // パラメータ
    printf("v = %f\nang = %f\n", v, ang);

    // まずは普通の放物線(原点からの打ち上げ)を連続して位置を求める
    {
        int count = 0;
        for(t=0.0; ; t+=0.02)
        {
            // 時間 tの時の xと yの位置
            double x = v * t * cos_theta;
            double y = v * t * sin_theta + 0.5 * g * t * t;
            if(++count < 20)
                printf("t = %4.2f / %5.3f %5.3f\n", t, x, y);
            else
            {
                // 検証の為、適当な時間の時の高さと距離を記憶して終了
                xx = x;
                yy = y;
                break;
            }
        }
    }

    // 不明なパラメータを仮定し、逆に求める
    {
        // 打ち上げ角度が判らない場合
        double result_ang[2],result_v;
        int count = calc_ang(v, xx, yy, g, result_ang);
        if(count == 1)
            printf("ang = %f\n", result_ang[0]);                        // resultと angと一致しているはず
        else
        if(count == 2)
            printf("ang = %f / %f\n", result_ang[0], result_ang[1]);    // どちらかが angと一致しているはず
        else
            printf("解無し");
        
        // 次は初速が判らない場合
        if(calc_v(ang, xx, yy, g, &result_v))
            printf("v = %f\n", result_v);       // vと一致
        else
            printf("解無し");
    }
    return 0;
}



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

Name: でんすけ  ..初心者(5,023ポイント)   Date: 2009/10/22(木) 16:59   No:40828 解決!     
Title: Re:また、数学の質問です。    
無事解決しました!
ありがとうございました。


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



Name: TAB譜。  ..ぴよぴよ(31ポイント)   Date: 2009/10/21(水) 14:47   No:40740       
Title: プログラムを作る以前の問題    
VC++でプログラムが実行できません(汗

例えばこれ。

#include <stdio.h>
void main()
{
printf("HELLO");
}

これをしようと実行すると

1>------ ビルド開始: プロジェクト: s, 構成: Release Win32 ------
1>コンパイルしています...
1>s.c
1>リンクしています...
1>LINK : fatal error LNK1104: ファイル 'MSVCRT.lib' を開くことができません。
1>ビルドログは "file://c:\Users\k-on\Desktop\0515\PROGRAM\s\Release\BuildLog.htm" に保存されました。
1>s - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

と出て実行できません。

Dxlibのは

1>LINK : fatal error LNK1104: ファイル 'LIBCMT.lib' を開くことができません。

こうです。

解決策を教えてください!


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


Name: kerotan0820  ..中級者(14,124ポイント)   Date: 2009/10/21(水) 18:17   No:40747     
Title: Re:プログラムを作る以前の問題    
.

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

Name: TAB譜。  ..ぴよぴよ(155ポイント)   Date: 2009/10/21(水) 22:28   No:40776     
Title: Re:プログラムを作る以前の問題    
やはりこうです。

1>LINK : fatal error LNK1104: ファイル 'MSVCRTD.lib' を開くことができません。

書き忘れましたがコンパイラは
「Visual C++ 2008 Express Edition」で

OSはwindows Vistaです。

'MSVCRTD.lib' を開くことができません。って何のことなんでしょうか。

解決策が分かるかた、どうか教えてください!


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

Name: softya  ..上級者(21,244ポイント)   Date: 2009/10/21(水) 22:40   No:40778     
Title: Re:プログラムを作る以前の問題    
>'MSVCRTD.lib' を開くことができません。

'MSVCRTD.lib'はC/C++の標準ライブラリのファイルです。
開く事ができないってことはファイルが無いか検索できない場所にあると言う普通はありえないエラーです。
ちなみにOSとVisualStudioはどのバージョンをお使いでしょうか?


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

Name: kto  ..ぴよぴよ(231ポイント)   Date: 2009/10/22(木) 02:25   No:40807     
Title: Re:プログラムを作る以前の問題    
[ツール]-[オプション]-左の[プロジェクトおよびソリューション]を開いて、[VC++ ディレクトリ]をクリック
[ディレクトリを表示するプロジェクト]で[ライブラリファイル]を選択して、下のリストに
$(VCInstallDir)lib
を追加してみてください。

普通VC++Expressインストール時に、最初から設定されていますが、おそらくインストール時にうまく設定されてなかったのでしょう。

あと、細かいことですが
main関数はvoid型ではなくint型の値を返す関数なので、

#include <stdio.h>
int main()
{
printf("HELLO");
return 0;
}

と書き換えたほうがよいです。

参考
http://questionbox.jp.msn.com/qa3428426.html


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

Name: TAB譜。  ..ぴよぴよ(275ポイント)   Date: 2009/10/22(木) 12:30   No:40822     
Title: Re:プログラムを作る以前の問題    
回答ありがとうござます!

無事コンパイルできました。

ところでソリューション構成はDebugにしたほうがいいのでしょうか。

Debugにするとこのアプリケーションのサイド バイ サイド構成が正しくないため、アプリケーションを
開始できませんでした。と表示されます。

Releaseだとできるんですが……。

何度もすいません;


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

Name: softya  ..上級者(22,029ポイント)   Date: 2009/10/22(木) 12:40   No:40823     
Title: Re:プログラムを作る以前の問題    
>アプリケーションのサイド バイ サイド構成が正しくないため、アプリケーションを
開始できませんでした。と表示されます。

かなりインストール状態に問題ありだと思います。
前にも質問しましたが、OSとVisualStudioのバージョンを教えてください。
たぶん、ちゃんとしたインストールが出来ていないのは、使ったインストールパッケージに問題があるんだと思います。


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



Name: 男子  ..ぴよぴよ(712ポイント)   Date: 2009/10/21(水) 12:49   No:40734       
Title: 無題    
ファイルから読み込んだ文字列を辞書順にヒープソートするソースです。
先日も質問したのですがまだ正常に動きません。swap関数は問題ないと思います。実行すると辞書順になるんですが文字が欠けていたり改行が異常だったりします。どこがいけないですか?

#include <stdio.h>

#include <stdlib.h>
#include <string.h>
#include <time.h>

#define NS 3 /* 入力の最大数 */
#define WC 10 /* 入力の1行の文字数 */


void Hpsort(char s[][WC], int n);
void DownHeap(char s[ ][WC], int leaf, int root);
void swap( char *a, char *b );



void Hpsort(char s[][WC], int n) {
int leaf, root;

leaf = n; /* 初期値は末尾の要素 */
root = n/2; /* 初期値はその親 */

while (root > 0 ) { /* 半順序木を構成 */
DownHeap(s, leaf, root);
root--;
}

while(leaf >0) {
swap(s[1], s[leaf]); /* 半順序木の根と末尾の要素を交換 */
leaf--; /* 末尾の要素を半順序木から外す */
DownHeap(s, leaf, 1); /* 半順序木を再構成する */
}
}


void DownHeap(char s[ ][WC], int leaf, int root){
int i;

i = root * 2;
while (i <= leaf) {
if (i < leaf && (strcmp(s[i + 1], s[i]))>0) /* a[i] と a[i + 1] の大きい方と */
i++;
if ((strcmp(s[root], s[i]))>0) /* a[root] と比較 */
break; /* 子の方が大きければ */
swap(s[root], s[i]); /* 交換 */

root = i; /* 更にその子についても調べる */
i = root * 2;
}
}


void swap( char *a, char *b ){
char tmp;
while ( (*a != '\0') && (*b != '\0') ){
tmp = *a;*a = *b;*b = tmp;
a++;
b++;
}

if( *b == '\0' ){
while ( *a != '\0' ){
*b++ = *a; *a++ = '\0';
}
}else if( *a == '\0' ){
while ( *b != '\0' ){
*a++ = *b; *b++ = '\0';
}
}
*a = '\0';
*b = '\0';
}



main(int argc, char *argv[]) {
FILE *fp;
char s[NS][WC];
int i;

if ((argc==1) || (argc>=3)) {
printf("Input filename\n");
exit(1);
}
fp=fopen(argv[1],"r");
if(fp==NULL){
printf("file not found\n");
exit(0);
}

for(i=1;i<=NS;i++){
fgets(s[i],WC,fp);
}


for (i=1 ; i<=NS; i++) {
printf("%s\n",s[i]);}
Hpsort(s,NS);


for (i=1; i<=NS; i++) {
printf("%s\n",s[i]);}




fclose(fp);
exit(0);
}



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


Name: くぁwせd  ..ぴよぴよ(48ポイント)   Date: 2009/10/21(水) 15:13   No:40741     
Title: Re:無題    
読み込むファイルはどのような内容ですか?
#define NS 3 /* 入力の最大数 */
#define WC 10 /* 入力の1行の文字数 */
より多かったりしませんか?


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

Name: pooka [URL]  ..上級者(18,268ポイント)   Date: 2009/10/21(水) 15:23   No:40742     
Title: Re:無題    
前回の分を見てみましたが、配列の添字を1から始めるのであれば
char s[NS+1][WC];
のように1つ多く確保しないといけません。
前回のboxさんの回答と合わせて確認してみてください。


>文字が欠けていたり改行が異常だったりします
#define WC 10      /* 入力の1行の文字数 */
とありますが、ファイルには1行に10文字書かれているのでしょうか?
fgets(s[i],WC,fp);
これだと最大9文字までしか読み取りません。

fgetsについて
ttp://www.bohyoh.com/CandCPP/C/Library/fgets.html

あと上のサイトを見ても分かる通り、改行文字も格納するので、
fgetsで読み取った後、改行文字を'\0'に置き換えてみてください。

それとmain関数の最後でexit(0);とするのもどうかなと思うので
int main()として、return 0;とする方が良いのではないでしょうか?


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

Name: 男子  ..ぴよぴよ(774ポイント)   Date: 2009/10/22(木) 11:23   No:40818     
Title: Re:無題    
返信ありがとうございます。char s[NS+1][WC];と宣言したらすこし改善しました。いろんなファイル(単語数や文字数がバラバラ)から読み取れるようにしたいんですが、NSやWCを固定してるとまずいですよね?最大の値にしておけばいいのですか?

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



Name: ti  ..ぴよぴよ(82ポイント)   Date: 2009/10/22(木) 01:47   No:40800       
Title: LNK2005が出て困っています    
MAKETOWNが原因でリンクエラーがでているのだとおもうのですが原因がわかりません原因と思われる場所をどう直せばいいか教えてください

1>main.obj : error LNK2005: "void __cdecl MAKETOWN(void)" (?MAKETOWN@@YAXXZ) は既に make town.obj で定義されています。
1>C:\Documents and Settings\ti\My Documents\Visual Studio 2005\DxLib_VC\サンプルプログラム実行用フォルダ\Debug\DxLib_VC2005用.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

[2] 環境  
 [2.1] OS : Windows XP Home
 [2.2] コンパイラ名 : VC++ 2005SE
[3] その他
 ・基本的なことはわかっているとおもいます
 ・DxLib.hを使用しています
 


ソースコードです
main.cpp


//#include "DxLib.h"

#include "make town.cpp"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){


// 画面モードの変更
SetGraphMode( 320 , 320 , 16 ) ;
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定

void MAKETOWN(void);


DxLib_End();
return 0;
}

make town.cpp

#include "DxLib.h"
//街生成
//void MAKETOWN(void);

void MAKETOWN(void)
{

int cr_x=16,cr_y=38;//位置の初期値
int image,cr1;
char Key[256];
int i,j;
image = LoadGraph( "1138.obp" ) ;
SetTransColor( 255 , 0 , 255 ) ;//透過させたいファイルを読む前に透過色を設定する必要アリ
cr1 = LoadGraph( "cr.obp" );

//画像を分割してimage配列に保存
i=96;//xの初期値
j=432;//yの初期値
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了

//for(j=1; i<16; j++){ //j=x I=y
if( Key[ KEY_INPUT_UP ] == 1 ){ //上ボタンが押されたら
if(ariahan_hantei[cr_y-1][cr_x]==0 || ariahan_hantei[cr_y-1][cr_x]==3)//許可もしくはマップ切り替えなら
{
j=j-16;
cr_y=cr_y-1;
WaitTimer( 50 ) ;//動作がはやいので0.5秒まつ
}
}
if( Key[ KEY_INPUT_LEFT ] == 1 ){ //左ボタンが押されたら
if(ariahan_hantei[cr_y][cr_x-1]==0)
{
//if(i%16==0)
//i--;

i=i-16;
cr_x=cr_x-1;
WaitTimer( 50 ) ;//動作がはやいので0.5秒まつ
}

}
if( Key[ KEY_INPUT_DOWN ] == 1 ){ //下ボタンが押されたら
if(ariahan_hantei[cr_y+1][cr_x]==0)
{
j=j+16;
cr_y=cr_y+1;
WaitTimer( 50 ) ;//動作がはやいので0.5秒まつ
}
}
if( Key[ KEY_INPUT_RIGHT ] == 1 ){ //右ボタンが押されたら
if(ariahan_hantei[cr_y][cr_x+1]==0)
{
i=i+16;
cr_x=cr_x+1;
WaitTimer( 50 ) ;//動作がはやいので0.5秒まつ
}

}

DrawRectGraph( 0, 0, i, j, 320, 320, image, TRUE, FALSE ) ;//x=0y=0の位置にimageのx128y640から320づつ描写


DrawRectGraph( 160, 160, 0, 0, 16, 24, cr1, TRUE, FALSE ) ; //中央にキャラ描写

ScreenFlip();//裏画面を表画面に反映

//return 0;
}
}
 

1>main.obj : error LNK2005: "void __cdecl MAKETOWN(void)" (?MAKETOWN@@YAXXZ) は既に make town.obj で定義されています。
1>C:\Documents and Settings\ti\My Documents\Visual Studio 2005\DxLib_VC\サンプルプログラム実行用フォルダ\Debug\DxLib_VC2005用.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

[2] 環境  
 [2.1] OS : Windows XP Home
 [2.2] コンパイラ名 : VC++ 2005SE
[3] その他
 ・基本的なことはわかっているとおもいます
 ・DxLib.hを使用しています
 
MAKETOWNが原因でリンクエラーがでているのだとおもうのですが原因がわかりません原因と思われる場所をどう直せばいいか教えてください


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


Name: Naohiro19  ..ぴよぴよ(570ポイント)   Date: 2009/10/22(木) 02:04   No:40803     
Title: Re:LNK2005が出て困っています    
おそらくリンクエラーになるのはプロトタイプ宣言のがないからだと思います。

以下にコードを示します。

#include <stdio.h>

int main()
{
putmessage("test\n"); //プロトタイプ宣言がないためエラー
return 0;
}


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

Name: ti  ..ぴよぴよ(631ポイント)   Date: 2009/10/22(木) 02:20   No:40805     
Title: Re:LNK2005が出て困っています    
Naohiroさん書き込みありがとうございます

main.cppやプロトタイプ宣言を追加してみたりはしたのですが症状がかわりません
文字が多いのかエラーになるので何度かにわけてもういちどソース載せてみます


//#include "DxLib.h"

#include "make town.cpp"
void MAKETOWN(void);

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){






//ariahan_hantei[11][39]
//char Key[256];
//int i,j;
// 画面モードの変更
SetGraphMode( 320 , 320 , 16 ) ;
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定

void MAKETOWN(void);


DxLib_End();
return 0;
}

make town.cpp

#include "DxLib.h"

//街生成
//void MAKETOWN(void);




void MAKETOWN(void)
{
//判定ルール0:通れる 1:通過付加 2:イベントあり 3:MAP切り替え
int ariahan_hantei[63][45]={
};


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

Name: Justy  ..伝説なるハッカー(449,179ポイント)   Date: 2009/10/22(木) 02:20   No:40806     
Title: Re:LNK2005が出て困っています    

>MAKETOWNが原因でリンクエラーがでているのだとおもうのですが原因がわかりません

 main.cppで make town.cppをインクルードしているので、MAKETOWNという関数が
main.cppと make town.cppの両方で定義されてしまっているのが原因です。

 通常よほどの理由がない限り、cppファイルをインクルードすることはありません。
 代わりに、MAKETOWN関数のプロトタイプ宣言を書いたヘッダ make town.hを作り、
それをインクルードするといいでしょう。


ついでに main関数の

    void MAKETOWN(void);

は MAKETOWN関数を呼び出してるつもり、なのかもしれませんがこれでは MAKETOWN関数は
実行されませんので、注意して下さい。


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

Name: ti  ..ぴよぴよ(744ポイント)   Date: 2009/10/22(木) 02:40   No:40809 解決!     
Title: Re:LNK2005が出て困っています    
Justyさん
ありがとうございました
おかげで解決できました
C言語は業務で半年ほどやっていましたが新たに.cや.cppファイルをつくったらインクルードするものだと思っていました

>void MAKETOWN(void);
これも戻り値を変更してなんとか実行できるようになりました

自分の中でドラクエみたいなゲームをつくってみようとおもっていまして今後も初歩的なことを質問すると思いますがよろしくお願いします

Naohiro19さん、Justyさんありがとうございました


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



Name: まりも  ..かけだし(1,280ポイント)   Date: 2009/10/20(火) 00:00   No:40657       
Title: <pre>と</pre>の使い方(C言語以前の質問)    
 とてもお世話になってます。
 またまた、超初歩的な質問ばかりでごめんなさい。
 <規約と注意事項>を読んでいて、
 『ソースコードを記載時は
で囲んでください。 
  自動的に字下げされて、みやすいコードになります。』
 とあったので、そうしようと思ったのですが、やり方はこんな感じで
 良いのでしょうか?
 私の理解が間違ってたら、教えてください。宜しくお願いします(*・ω・)*_ _)ペコリ

 

#include <stdio.h>
main()
{
puts("非常に初歩的な質問でごめんなさい!");
}


 


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


Name: たかぎ [URL]  ..ハッカー(113,337ポイント)   Date: 2009/10/20(火) 00:13   No:40658     
Title: Re:<pre>と</pre>の使い方(C言語以前の質問)    
それでよいと思いますが、もともとのソースを字下げしておかないと、勝手には字下げされません。


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

Name: まりも  ..かけだし(1,480ポイント)   Date: 2009/10/20(火) 00:13   No:40659 解決!     
Title: Re:<pre>と</pre>の使い方(C言語以前の質問)    
  今投稿して初めて気が付きました・・・・。
  ここにはタイトルのものを入力しても表示されないんですね・・・。
  質問自体も意味不明な文章になってて・・・。

  長いソースコードを含む質問をしたいと思ってた矢先だったので
  ちゃんと使い方を知っておきたかったのですが、
  投稿して、何となく(?)理解できた気がします><
  
  荒らすつもりは全く無かったのですが、このトピックを見た方、
  不愉快な思いをさせてしまったら、ごめんなさい。(*・ω・)*_ _)ペコリ

  多分、問題は解決したかと思うので〆ますね。すみませんでした。


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

Name: たいちう  ..プログラマー(35,863ポイント)   Date: 2009/10/20(火) 00:31   No:40660     
Title: Re:<pre>と</pre>の使い方(C言語以前の質問)    
せめて元のプログラムをちゃんと字下げして表示できるようになるまで、
解決にしちゃいけないと思うが。


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

Name: まりも  ..かけだし(1,346ポイント)   Date: 2009/10/20(火) 01:03   No:40663     
Title: Re:<pre>と</pre>の使い方(C言語以前の質問)    
 たかぎさん 回答ありがとうございます。

 たいちうさん

 <<せめて元のプログラムをちゃんと字下げして表示できるようになるまで、
   解決にしちゃいけないと思うが。

  励ましの言葉をありがとうです。
  
  そうですね、元のコード 字下げされてませんよね。
  タイトルの表記がココでは消えてしまうので
  プレ@ プレA として 代用したいと思います。

  最初に投稿した際のソースコードはこうです。

  プレ@
  include<stdio.h>
main()
{
puts("非常に初歩的な質問でごめんなさい");
}
プレA

  規約と注意事項の中で
   『プレ@とプレAで囲んでください』
  とあったので、こんな風(↑)でいいのかなぁ?と
  イメージしたんですが、どこが違ってたんでしょう?
  
  ・・・既に解決済マークにしちゃってて、解決の取り消しの仕方も分からないのですが、^^;
  これを見て答えてくれる方がいらっしゃったら、回答をぜひお願いします。


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

Name: Ma  ..中級者(13,236ポイント)   Date: 2009/10/20(火) 05:43   No:40666     
Title: Re:<pre>と</pre>の使い方(C言語以前の質問)    
><<せめて元のプログラムをちゃんと字下げして表示できるようになるまで、 解決にしちゃいけないと思うが。
>そうですね、元のコード 字下げされてませんよね。

本当に理解していますか?
もともとのプログラムのコードさえ字下げされていないという意味です。
pre というタグは、コードを見やすくするためにおかれたタブや空白などを掲示板でも有効にするための魔法です。
これがないと、自動的にタブや空白等は無視されみにくくなります。


タブを、<TAB>と表記します。

プレ@
include<stdio.h>
main()
{
<TAB>puts("非常に初歩的な質問でごめんなさい");
}
プレA

こうしろ、ということです。


実際にやると、

include<stdio.h>
main()
{
puts("非常に初歩的な質問でごめんなさい");
}


こうなるかと。


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

Name: まりも  ..かけだし(1,863ポイント)   Date: 2009/10/20(火) 07:10   No:40671     
Title: Re:<pre>と</pre>の使い方(C言語以前の質問)    
 Maさん、丁寧な回答をありがとうございます!
 すごーく、良く分かりました。
 
 今回理解できた事を整理してみました。

 ★ソースコードを見やすくするために置かれたタブや空白は、
  掲示板内で、自動的に無視されてしまう。(場合がある。)

  (※わざと、初回のコードは字下げせず改行のみで左揃えで表記して、
    投稿後、再度掲示板見直してみて、
    みなさんのの言っている事がようやく理解できました。)
  
 ★ただ囲むだけでは 自動的に字下げされないので、
  1.最初(プレ@)と最後(プレA)を囲んで、なおかつ
  2.囲んだ中のコードを、見やすいよう タブや空白などで字下げして、
  みやすい コードが 表記できるようになる。

 ★入力したタグ(ココではプレ@とプレAで代用)は
  掲示板内は表記されない。
  (※初回投稿時、消えちゃっててビックリしました。)

 以上今回教えてもらった事を活用して、
 次回また質問などでお世話になるときに
 少しでも読みやすくなるように 心がけていきたいと思います。

 回答くださった皆様、本当にありがとうございました。

 たかぎさん  ※元のコードの字下げの必要性の示唆に感謝!
 たいちうさん ※質問続行する勇気の後押しをしてくれて感謝!
 Maさん    ※回答コードと丁寧な説明に感謝!
  
  


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

Name: kerotan0820  ..中級者(13,867ポイント)   Date: 2009/10/20(火) 07:15   No:40673     
Title: Re:<pre>と</pre>の使い方(C言語以前の質問)    
コードのはじめと終わりにpreと/preを入れるだけですよね

■入れないとこうなる
#include<stdio.h>
int main(void);

printf("preと/preを使わないとこうなります\n");
return 0;
}

■入れるとこうなる

#include<stdio.h>
int main(void);

printf("preと/preを使うとこうなります\n");
return 0;
}



もともとプログラムを記述する際には読みやすさなどを考えて空間を空けたり改行したりするのが決まりのようなものですから… なおかつ質問する際には回答者様がプログラムを見て回答するので、見やすいほうが良いでしょう。
質問者様の場合、そもそも空白をあける必要のないプログラムなので見易さを追求するのは無理でしょうからそのまんまで良いのだと思いますよ。
上記のプログラムみたいに空欄などができる場合は見やすいようにpreを添えてあげる感じでよいと思います^^
僕も初心者ですが、参考になれば幸いです


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

Name: まりも  ..かけだし(1,985ポイント)   Date: 2009/10/20(火) 07:23   No:40674     
Title: Re:<pre>と</pre>の使い方(C言語以前の質問)    
 ◇追加◇

 あと、もう一つ分かった事(発見)があったので蛇足で。

 ★解決済マークを付けたあとでも、そのトピに投稿できる事
  (解決済 = 終了 だと思ってました。)

 ★解決済マークを付けたあとでも、コメントをくれる人がいた事
  (とってもうれしかったです。)


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

Name: まりも  ..かけだし(2,241ポイント)   Date: 2009/10/20(火) 08:15   No:40677     
Title: Re:<pre>と</pre>の使い方(C言語以前の質問)    
  kerotan0820様
  
  回答ありがとうございます。
  keortan0820様の回答で preと /pre を入れた場合と入れない場合の
  2つのコード表示を見て  コードの文字自体が
  pre /pre を入れた場合、みやすくなっている事に気づきました。

  C言語のみならず 色んな事に対してまだまだ知らない事がイッパイあって
  ほんとに問題(課題)なのは

  「何を知らないかを知らない」
  「何が理解できてないのかが、分かってない」事なんだと痛感します。
  
   言い換えると・・・
  「(自分が)何を知らないのか知る」
  「(自分が)何が理解できてないのかを、分かるようにする」
   加えて
  「できる限り、自分で調べてから質問する」
   のが大事だと思うので、これから肝に銘じて頑張って(+楽しく)いこうと思いました。


  質問の仕方すら、的を得てないような場合もあるかと思いますが、
  直すようにしたいと思いますので、教えて頂ければ幸いです。

  
   

  


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

Name: Naohiro19  ..ぴよぴよ(445ポイント)   Date: 2009/10/20(火) 15:56   No:40686     
Title: Re:<pre>と</pre>の使い方(C言語以前の質問)    
下記のプログラムはBoost C++ Libraryを使ってHTMLハイライトをしてみたものです。
見やすいと思いませんか?
#include <stdio.h>


int main(void)
{
printf("Hello world\n");
return 0;
}


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

Name: まりも  ..かけだし(2,170ポイント)   Date: 2009/10/22(木) 00:29   No:40791     
Title: Re:<pre>と</pre>の使い方(C言語以前の質問)    
 忙しくてなかなかこっちにこれませんでした。^^;

>Naohiro19さん

 ハイライト、いいですね。
 例えば、強調したい部分に使って効果的に表現できますよね。
 
 pre /pre の確認おさらいしてみます。(ハイライトはできませんが・・・orz)

◇元のソースコードは字下げしてないバージョン◇
 

#include <stdio.h>
main()
{
printf("昨日はオリオン流星群見た?\n");
printf("うん、とっても綺麗だったよぉ。\n");
}


◇元のソースコードも字下げしたバージョン◇
 

#include <stdio.h>
main()
{
printf("昨日はオリオン流星群見た?\n");
printf("うん、とっても綺麗だったよぉ。\n");
}

 


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

Name: たいちう  ..プログラマー(35,957ポイント)   Date: 2009/10/22(木) 00:57   No:40796     
Title: Re:<pre>と</pre>の使い方(C言語以前の質問)    
ダメ出し係のたいちうです。嘘。

2つのprintfが揃っていないことは気づいているよね?今は。
投稿ボタンの左にプレビューというチェックボックスがあるので、
これをチェックして投稿をクリックし、
自分で確認してから再度投稿しましょう。


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

Name: まりも  ..入門者(3,235ポイント)   Date: 2009/10/22(木) 02:35   No:40808     
Title: Re:<pre>と</pre>の使い方(C言語以前の質問)    
 >>たいちうさん

 はい、わかりました。(笑)

 今しがた、別のトピで質問、新規投稿したばかりです。
 投稿前に確認が出来る事を 初めて知りました!
 (新規投稿する前に知りたかった・・・・orz。)

 2つのprintfが揃ってないのが、今は良くわかります。
 最初のソースコードは ちゃんと pre の機能を理解するのに
 短すぎて良くなかったかも知れませんね。
 (手抜きしちゃったかも?^^;)

 別のトピで投稿する予定なので、その時にプレビュー機能
 使って確認してから投稿するようにします。

 ありがとうございました。アリ(´・ω・)(´_ _)ガト♪
 

 
 


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



Name: Eeel  ..ぴよぴよ(91ポイント)   Date: 2009/10/21(水) 04:04   No:40719       
Title: c++でクラスを変数のように扱う方法を教えてください。    
はじめまして。
環境はXPでVC++2008EEです。

変数のように扱える、整数を扱うクラスを作ろうとしています。



class Integer{
private:
int value;
(中略)
}

main()
{
Integer my_int;
int result;

my_int = 5; //←これはできました。
//そして代入時にこっそり2倍にして、10として格納されてるとします。
//(本当はもう少し複雑で面倒な事をしています)
result = my_int; //←これができませんでした。10を代入しようとしてます。
printf("%d", my_int); //←これもできませんでした。10を表示させようとしてます。

}



どのようにすればよいのでしょうか?
よろしくお願いします。


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


Name: Eeel  ..ぴよぴよ(185ポイント)   Date: 2009/10/21(水) 05:04   No:40720     
Title: Re:c++でクラスを変数のように扱う方法を教えてください。    
半分自己解決しました。
変換演算子というのを使って

class Integer{
public:
operator int(){ return value; }
}

とする事で

result = my_int;

は無事に代入できました。printfの方は

printf("%d", (int)my_int);

とする事で一応は目的通りの結果になりましたが
キャストしないと0が帰ってくるようなので
(ところで、このキャストはstatic_castでしょうか?)
このままだと使用方法によってはうっかりバグの原因にしてしまう可能性が高そうです。
良い方法がありましたらご教示ください。


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

Name: tkmakwins15  ..比類無きプログラマー(98,496ポイント)   Date: 2009/10/22(木) 00:48   No:40792     
Title: Re:c++でクラスを変数のように扱う方法を教えてください。    
printfの引数は可変長で、クラスを渡すと未定義の結果になると思います。
また、変換演算子を定義したとしても、printfの引数にした場合変換演算子が呼び出しされないのでキャストするしか方法は無いと思います。

後、
(type)expr
は単なるstatic_cast<type>(expr)ではなくて、それに加えてconst_cast<type>(expr)とreinterpret_cast<type>(expr)の合成みたいなものです。(この3つをうまく組み合わせることで大抵の(type)exprは置換できます。)


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

Name: たかぎ [URL]  ..ハッカー(113,684ポイント)   Date: 2009/10/22(木) 00:56   No:40795     
Title: Re:c++でクラスを変数のように扱う方法を教えてください。    
> printfの引数は可変長で、クラスを渡すと未定義の結果になると思います。

正確には、C互換型以外を渡せば未定義ですね。
クラスであっても、C互換構造体やC互換共用体であれば未定義にはなりません。


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

Name: Eeel  ..ぴよぴよ(468ポイント)   Date: 2009/10/22(木) 01:58   No:40802     
Title: Re:c++でクラスを変数のように扱う方法を教えてください。    
お返事ありがとうございます。

クラスである事を意識させずに変数と同じように扱えれば完璧、と思い
明示しなければint型として扱い、本来のクラスとして扱いたい時は(Integer)とキャストする
というような事ができればと思ったのですが、そのような方法は無いみたいですね。

>(type)exprは単なるstatic_cast<type>(expr)ではなくて
はい。
ただのキャストは危険な事もあるのでtkmakwins15さんの仰られた3つのキャスト(とdynamic_cast)で
キャストの目的を明確にするのがよいとありました。
static_castは型変換、reiterpret_castは型変更で、
今回の場合は「変換演算子を使って欲しい」という目的なのでstatic_castではないかと思いました。
どうでしょうか?


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



Name:  ..入門者(2,705ポイント)   Date: 2009/10/21(水) 13:29   No:40736       
Title: 無題    
大学のPCからです。


返信におくれるかもしれませんが、よろしくお願いします。


DXにて描画画像にエフェクトを使ったアニメーションを考えているのですが、(例えばphotoshopのテクスチャ的な。具体的な例として画像が波で揺れるとか、だんだんエンボスがかかっていくとか...)どのように作るのが、アルゴリズム的に優れているのでしょうか。


そのような素材を用意してただアニメーションとして描画すればいいのか...それとも、DxLibに参考になる関数が存在するのか...


まだ、DxLib内の関数を全て理解していないんで...


いい手段をご教示ください。


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


Name: DVDM [URL]  ..入門者(4,750ポイント)   Date: 2009/10/21(水) 20:30   No:40759     
Title: Re:無題    
>寺さん
>DXにて描画画像にエフェクトを使ったアニメーションを考えているのですが
こういうものを考えている・・・という具体的な内容があると回答しやすいかと思われます。


>そのような素材を用意してただアニメーションとして描画すればいいのか...
>それとも、DxLibに参考になる関数が存在するのか...
>どのように作るのが、アルゴリズム的に優れているのでしょうか

作るものによって変わってくるのではないかと思います。
テクスチャだけでアニメーションさせた方がいいと感じるのであればそうすれば良いでしょうし、
勉強も兼ねてエフェクト関数を実装するというのであればテクスチャ以外に何か使う必要があります。

私はDxLibを使ったことがないので間違っている可能性はありますが、
エンボスをかけるための関数や波を打つため関数が用意されている訳ではないと思います。
実装するためには先ほど言った、自分で関数を組み合わせて実装するか、
テクスチャのアニメーションで実装だと思います。


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

Name: softya  ..上級者(21,141ポイント)   Date: 2009/10/21(水) 21:19   No:40768     
Title: Re:無題    
>波で揺れる
専用の関数は有りませんので、画像の揺らぎを計算して画像を左右にずらしてやる必要があります。

>エンボス
明暗だけで表現できると思います。元の画像に加算半透明で飛び出す部分と減算半透明で引っ込む部分を合成したやる必要があります。エンボス濃度だけなら計算で出来ますが、エンボス形状が複雑に変化するならアニメーション画像を用意する必要があります。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,078,367ポイント)   Date: 2009/10/22(木) 00:23   No:40788     
Title: Re:無題    
作るエフェクトによって作り方もアルゴリズムも全く違うと思います。
サンプルプログラミングの館にいくつか紹介しているので、よければご覧ください。

ユラユラ〜とか波でキラキラとか、置いてあります。


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

Name:  ..入門者(2,523ポイント)   Date: 2009/10/22(木) 01:52   No:40801 解決!     
Title: Re:無題    
ご返信ありがとうございます。


まず、タイトルいれてませんでした。申し訳ありません。


いろいろ考えてみた結果photoshopのテクスチャを作ってみようと思います。


photoshopはテクスチャの程度やベクターが使えるし、アニメーションの関数であればすぐに作れるので、こちらのほうが処理速度の観念よりかは実装時間が短縮できると思うので…


ですが、いろいろと勉強してみたいと思います。


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


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



Name: ファウスト  ..ぴよぴよ(650ポイント)   Date: 2009/10/21(水) 16:39   No:40743       
Title: ソートの結果をみるには?    
今回の質問はソートの結果をみたいんです。処理結果というんでしょうか?
皆さんはどうやってみてるのかしりたいのでどうかお願いします


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


Name: toyo  ..熟練のプログラマー(42,672ポイント)   Date: 2009/10/21(水) 17:26   No:40744     
Title: Re:ソートの結果をみるには?    
私は for ループで printf ですね


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

Name: 初級者  ..初心者(6,593ポイント)   Date: 2009/10/21(水) 19:19   No:40750     
Title: Re:ソートの結果をみるには?    
ソート前の状態を出力
ソートを実行
ソート後の状態を出力

出力結果を比較します。


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

Name: ファファファファウスト  ..ぴよぴよ(170ポイント)   Date: 2009/10/21(水) 22:11   No:40775     
Title: Re:ソートの結果をみるには?    
なるほど・・・・・その手があるわけですね

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

Name: Dixq (管理人) [URL]  ..ウィザード(1,078,289ポイント)   Date: 2009/10/22(木) 00:20   No:40786     
Title: Re:ソートの結果をみるには?    
もしprintfなど表示されることが出来ない環境なら
ブレイクポイントなどで止めて変数の中身を見てみるという手もありますね。

VisualStudioをお使いの場合は、ブレイクポイントなどのキーワードで探してみてください。


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



Name: ?? [URL]  ..ぴよぴよ(31ポイント)   Date: 2009/10/21(水) 20:22   No:40757       
Title: すみません    
すみませんが、画像を貼り付けて表示するところでサンプルプログラムの画像が出てきません

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


Name: DVDM [URL]  ..入門者(4,821ポイント)   Date: 2009/10/21(水) 20:39   No:40760     
Title: Re:すみません    
>>??さん
それだけだと何が駄目なのか解りませんので、
??さんがお作りになったプログラムを載せてみては如何でしょうか。
その際、プログラム環境を載せておくと更にGOODです。
(OSは〜で、コンパイラは〜で、ライブラリは〜で等など)


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

Name: ???  ..ぴよぴよ(876ポイント)   Date: 2009/10/21(水) 21:55   No:40773     
Title: Re:すみません    
あなたのサイトのゲームをつくろうの画像で表示されません画像を表示する。
コンパイラはvb2008です
この下の部分です。

新しく出てきた関数を赤で示してあります


1章でダウンロードした「サンプルプログラム実行用フォルダ」内に入っているchar.pngを表示してみましょう。

char.pngの画像はこちらですね。すでに1章で保存はされたと思います。


char.png


↓コピー&コンパイル用サンプルプログラム


#include "DxLib.h"
char st1[]="画像の保存場所が違うか、ファイル名が違うため、表示できません。";
char st2[]="正常に認識されています。";

int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;


if(LoadGraphScreen( 0 , 0 , "char.PNG" , TRUE ) == -1)
DrawString(50,220,st1,GetColor(255,255,255));
else
DrawString(50,220,st2,GetColor(255,255,255));


WaitKey() ;
DxLib_End() ;
return 0 ;                   







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

Name: ???  ..ぴよぴよ(910ポイント)   Date: 2009/10/21(水) 22:00   No:40774 解決!     
Title: Re:すみません    
すみません 今、解決しました 初心なのでよくわからない点が多いの戸惑いました

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

Name: ???  ..かけだし(1,130ポイント)   Date: 2009/10/21(水) 22:33   No:40777     
Title: 馬鹿ですみません    
あなたのサイトのゲームプログラミングの館ののサイトで画像を表示するのは解決しましたが、画像のフォルダの指示する部分がよくわからなくて
入門編の画像を表示しようのこの説明文のところです

ファイルの場所に関しては、今のフォルダより上のフォルダにあるtest.bmpを指定したい時は"../test.bmp"と
今のフォルダより下のimageフォルダにあるtest.bmpを指定したい時は "image/test.bmp"と書いてください。
TRUEについてはまた後で説明します。

上の部分がよくわからなくてすみません フォルダのさらに下のフォルダを指示する場合はどう書けばいいですか 






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

Name: softya  ..上級者(21,404ポイント)   Date: 2009/10/21(水) 22:58   No:40780     
Title: Re:馬鹿ですみません    
私のこのサイトの管理者ではありません。
同様にDVDMさんも違いますよ。
>あなたのサイトの
と書かれるとDixq(管理人)さんの事を指名することになります。
今お忙しいので、なるべく他の人に頼ってください。

質問の件は、相対パスや絶対パスなどパス指定が分からないと言うことでよろしいですか?
こちらをご覧ください。
http://www.chama.ne.jp/download/web/path.htm
WEBサイトのパスですが、考え方は同じです。
読んでも分からなかったら質問でしてください。


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

Name: DVDM [URL]  ..入門者(4,502ポイント)   Date: 2009/10/21(水) 23:40   No:40782     
Title: Re:馬鹿ですみません    
>>???さん
../ このように書くと、一つ上の階層を表します。
./  このように書くと、今の階層を表します。
/フォルダ名 このように書くとフォルダ名の下の階層を表します。

>上の部分がよくわからなくてすみません フォルダのさらに下のフォルダを指示する場合はどう書けばいいですか

ですので、フォルダの更に下のフォルダを指示する場合は

"フォルダ名/更に下のフォルダ名/ファイル名" あるいは
"./フォルダ名/更に下のフォルダ名/ファイル名" となります。


もし仮に、上の階層のさらに上の階層にあるフォルダのファイルを指示したいなら
"../../フォルダ名/ファイル名"ということになります。


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

Name: ???  ..かけだし(1,183ポイント)   Date: 2009/10/21(水) 23:42   No:40783 解決!     
Title: Re:馬鹿ですみません    
すみません てっきりゲームプログラミングの館のサイトの管理人さんと同一人物かと思ってました 返答ありがとうございます

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

Name: Dixq (管理人) [URL]  ..ウィザード(1,078,270ポイント)   Date: 2009/10/22(木) 00:16   No:40785     
Title: Re:馬鹿ですみません    
ご無沙汰で申し訳ないです;
皆様ありがとうございます。

>???さん

その管理人ですm(_ _)m
説明がわかりにくかったようですね。
フォルダやパスの示し方についても補足した方がよかったですね。

以後参考にさせて頂きます。
何かわかりにくいことがあれば気軽に聞いてください。


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



Name: 初心者  ..プログラマー(37,608ポイント)   Date: 2009/10/21(水) 21:35   No:40769       
Title: 違うブレンドを同時にする方法    
SetDrawBlendMode( DX_BLENDMODE_ADD , 255 );//加算ブレンド
SetDrawBlendMode( DX_BLENDMODE_ALPHA, tesuto.brt );//カウントによって明るさをαブレンドする



SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );//リセットする

みたいに二つ違う種類のブレンドを一緒にかけたいのですが出来なくて困ってます・・
ブレンドを二つかける方法があれば教えてください


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


Name: Justy  ..伝説なるハッカー(448,567ポイント)   Date: 2009/10/21(水) 21:41   No:40771     
Title: Re:違うブレンドを同時にする方法    

> みたいに二つ違う種類のブレンドを一緒にかけたいのですが出来なくて困ってます・

  SetDrawBlendMode(DX_BLENDMODE_ADD , tesuto.brt);

ではどうですか?


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

Name: 初心者  ..プログラマー(37,659ポイント)   Date: 2009/10/21(水) 23:06   No:40781 解決!     
Title: Re:違うブレンドを同時にする方法    
おおおおお!出来ました!
そんな単純なことでよかったのですね!
Justyさんありがとうございました!


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



Name: kerotan0820  ..中級者(14,394ポイント)   Date: 2009/10/21(水) 19:58   No:40753       
Title: 5教科の点数の合計と平均を表示するプログラム    
今、学校で中間テストが終わったので5教科の合計と平均を出すプログラムを作ろうと思い、自分にある知識で組んだところ以下のようになりました

#include<stdio.h>
int main(void){
int a,b,c,d,e,f,g;
  int k=5;
  double h;
printf("国語,数学,理科,社会,英語の点数を改行して入力し,Enterを押してください\n");
scanf("%d" ,&a);
scanf("%d" ,&b);
scanf("%d" ,&c);
scanf("%d" ,&d);
scanf("%d" ,&e);
f=a+b+c+d+e;
h=f/k;
printf("合計:%d\n" ,f);
printf("平均:%d\n" ,h);
return 0;
}


結果これを実行すると、合計値は普通に表示されるものの、平均が"0"と表示されてしまいます;
どうすれば正しい数値が表示されるのでしょうか
教えてください。


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


Name:  ..ぴよぴよ(95ポイント)   Date: 2009/10/21(水) 20:17   No:40755     
Title: Re:5教科の点数の合計と平均を表示するプログラム    
hの型はdouble型ですから、int型の出力方法とは異なります。

%d => %f に修正してみてください。


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

Name: non  ..熟練のプログラマー(64,165ポイント)   Date: 2009/10/21(水) 20:18   No:40756     
Title: Re:5教科の点数の合計と平均を表示するプログラム    
double h;
なので、
printf("平均:%d\n" ,h);

%fにします。
また、
h=f/k;
は、
h=(double)f/k;
のようにキャストした方がいいですね。
このままでは、小数点以下の計算ができません。



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

Name: kerotan0820  ..中級者(14,425ポイント)   Date: 2009/10/21(水) 20:53   No:40764 解決!     
Title: Re:5教科の点数の合計と平均を表示するプログラム    
■わ様 non様
回答ありがとうございました
無事成功しました^^


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



Name: R  ..初心者(7,922ポイント)   Date: 2009/10/20(火) 21:56   No:40695       
Title: web上で動くプログラム    
http://www.geocities.jp/mabicalc/
http://roratorio.2-d.jp/ro/main/calcx.html

上記リンクのようなブラウザ上で動作する計算機を作りたいと想っているのですが、どういった言語でやるのが手頃でしょうか
私自身はC言語の入門書を一通り理解した程度で他言語やサーバーの知識は持っていません。
少々曖昧な質問ですが、とっかかりがほしいのでよろしくお願いします。


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


Name: Justy  ..伝説なるハッカー(444,763ポイント)   Date: 2009/10/20(火) 22:18   No:40696     
Title: Re:web上で動くプログラム    

>どういった言語でやるのが手頃でしょうか

 それらのサイトと同じ方法…… HTML + JavaScriptでいいと思います。


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

Name: R  ..初心者(7,946ポイント)   Date: 2009/10/20(火) 22:24   No:40697     
Title: Re:web上で動くプログラム    
>>Justy
回答ありがとうございます
入門書立ち読みしてみます


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

Name: softya  ..上級者(20,897ポイント)   Date: 2009/10/20(火) 22:46   No:40701     
Title: Re:web上で動くプログラム    
前に回答した私からのおせっかいとしては、まずちゃんとしたC言語の勉強をされた方が良いと思います。
プログラムの組み立て方をまだ理解されていませんから、新たな言語に手を出しても同じポイントでつまづくと思いますよ。
まず、C言語でstdinやファイルから入力したデータを処理する計算機をつくれるようになってから、挑戦されてはどうでしょうか?

ちなみに、リンク先のサイトはjavascriptで作られていますので、言語自体の難易度はむちゃくちゃ高いわけではありませんが、WEBサイト(HTML)の仕組みは理解する必要があります。
ソースコードも
http://www.geocities.jp/mabicalc/
とかはブラウザからコードを全て表示できます。ただ、Rさんが今まで触ったコードよりも規模がでかいと思うので、理解できるかどうかは努力次第です。



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

Name: たかぎ [URL]  ..ハッカー(113,366ポイント)   Date: 2009/10/20(火) 22:50   No:40702     
Title: Re:web上で動くプログラム    
どうせなら、C言語でCGIとして実現するというのもよいでしょう。


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

Name: R  ..初心者(7,946ポイント)   Date: 2009/10/21(水) 00:23   No:40708     
Title: Re:web上で動くプログラム    
>>softya
http://www.play21.jp/board/formz.cgi?action=res&resno=40287&page=&lognum=&id=dixq&rln=40591
以前というとこちらでしょうか
名前同じですが別人です、紛らわしくて申し訳ない

>>たかぎ
Cでも書けるのですか、そちらも見て簡単そうなほうでやってみます


Name: softya  ..上級者(20,970ポイント)   Date: 2009/10/21(水) 00:31   No:40709     
Title: Re:web上で動くプログラム    
>>Rさん
それは失礼しました。

>>Cでも書けるのですか、そちらも見て簡単そうなほうでやってみます
それは、サーバーサイドの勉強も必要になるのと結構面倒だと私は思います。
javascript+HTMLであればコードを書いてブラウザで表示するだけですので新たに導入するものもありませんので、始めるのはお手軽です。


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

Name: たかぎ [URL]  ..ハッカー(113,382ポイント)   Date: 2009/10/21(水) 00:55   No:40710     
Title: Re:web上で動くプログラム    
> それは、サーバーサイドの勉強も必要になるのと結構面倒だと私は思います。

意外に簡単ですよ。


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

Name: Mikan [URL]  ..中級者(10,014ポイント)   Date: 2009/10/21(水) 12:24   No:40731     
Title: Re:web上で動くプログラム    

C言語で作るとすればCGIになりますので
公開予定のスペースがCGIに対応しているかどうかが問題になってきます。

もし、公開予定のスペースがCGIに対応していなければ、JavaScriptが無難です。

公開せず自分のPC内だけで動かしたいのであれば、アパッチなどのサーバープログラムをインストールして
設定してあげれば、C言語で書いたプログラムは動きます。

なので、まずは環境調査というところでしょうか^^;




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

Name: たかぎ [URL]  ..ハッカー(113,588ポイント)   Date: 2009/10/21(水) 14:28   No:40739     
Title: Re:web上で動くプログラム    
> 公開予定のスペースがCGIに対応しているかどうかが問題になってきます。

CGIそのものを禁止しているところでなければ、C言語で作ったCGIもほとんどの場合が使える(禁止されない)と思います。
ただし、TELNETやSSHが使えない、あるいはサーバー上でのコンパイルが許可されない場合はあります。
その場合は、自分の環境でクロスコンパイラを構築して、コンパイル済みのものをアップロードしなければなりません。


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



Name: raji  ..ぴよぴよ(16ポイント)   Date: 2009/10/21(水) 10:03   No:40726       
Title: 無題    
how to make salary sheet by c language please

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


Name: たいちう  ..プログラマー(35,877ポイント)   Date: 2009/10/21(水) 10:11   No:40727     
Title: Re:無題    
Define salary sheet for 1st step.

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

Name: non  ..熟練のプログラマー(64,081ポイント)   Date: 2009/10/21(水) 11:55   No:40729     
Title: Re:無題    
I do not understand about what kind of salary seat you think.
Please decide the specification.


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



Name: rajan  ..ぴよぴよ(81ポイント)   Date: 2009/10/21(水) 09:45   No:40724       
Title: 無題    
for 分 教えてください


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


Name: toyo  ..熟練のプログラマー(42,651ポイント)   Date: 2009/10/21(水) 09:59   No:40725     
Title: Re:無題    
for文について知りたいのでしょうか
forはある回数処理を繰り返すときによく使います
回数を制御するカウンタ変数を i とすると
for ( i = 0; i < 100; i++)
{
処理
}
とすることで100回処理を繰り返します
実際にはカウンタじゃなくていろいろな繰り返し条件を使う場合もありますが最初はカウンタだけで使うのがいいと思います
Cに慣れてきたら他の条件も使ってみましょう
一般には
for (初期化; 繰り返し条件; ループ時処理)
{
}
になります


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



Name: sisi  ..ぴよぴよ(112ポイント)   Date: 2009/10/20(火) 03:58   No:40665       
Title: 斜め移動について    
はじめまして。
今回質問させていただきたいのは斜め移動についてです。
色々サイトを見て回ったのですがどのサイトでも斜め移動は基本の移動を3や4といった
数で移動していました私の作ろうとしているのが動きが遅いものがいいので
0.5などの移動幅にして遅く動かしたいのですが
画像を持ってくる
int DrawGraph( int x, int y, int GrHandle, int TransFlag ) ;
という宣言はint方ということは小数点を使うのは出来ないのでしょうか?


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


Name: Ma  ..中級者(13,677ポイント)   Date: 2009/10/20(火) 05:54   No:40667     
Title: Re:斜め移動について    
スクリーンはピクセルのあつまりで、そのピクセルとピクセルの間に描画することは不可能です。

結論からいうと、少数の位置に描画はできません。

単純に動きを遅くしたいならば、double (少数型)を利用するか、int 型で、1ピクセルあたり100と変換させることで対応できます。

後者なら、こんな感じで

int x_val = 2550;// 25.5ピクセル
int y_val = 520;// 5.2ピクセル
DrawGraph( x_val/100, y_val/100, GrHandle, FALSE) ; // x = 25, y = 5 に描画される。

こうすると、変化量が1フレームあたり0.5ピクセルのときも、
50/100 つまり、値には 50 を加算する事でゆっくりな動きにできます。


ただし、double を使おうが int を使おうが、ピクセル単位での描画しかできないので、変化量がとても少なくなると、減れば減るだけ動きがかくかくになってきます。

(これも、2ピクセル間においての二箇所を1回ずつにわけて透明度を計算し描画することで対応とかできるかもしれませんが、コードが少しだけ難しくなってきます。いや、でもだぶるから見た目が悪くなるかな。)


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

Name: Justy  ..伝説なるハッカー(444,717ポイント)   Date: 2009/10/20(火) 21:33   No:40690     
Title: Re:斜め移動について    

>int DrawGraph( int x, int y, int GrHandle, int TransFlag ) ;
>という宣言はint方ということは小数点を使うのは出来ないのでしょうか?

 DrawGraphFってのがありますよ。
 引数は DxLib.hを参照すれば判りますが、座標が floatになっただけです。


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

Name: sisi  ..ぴよぴよ(143ポイント)   Date: 2009/10/21(水) 02:09   No:40713 解決!     
Title: Re:斜め移動について    
どうもご指摘ありがとうございます
おかげで思い通りの動きをすることが出来ました。


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



Name: ゆー  ..ぴよぴよ(23ポイント)   Date: 2009/10/20(火) 19:49   No:40688       
Title: 検算のプログラミング    
はじめましてm(_ _)m

課題に困っています。
(A)(X)=(B)
まず、AとXの値を決めてBを出す。(A)(X)=(?)
次に、AとBを決めてXを出す。(A)(?)=(B)
このプログラムの作り方がわかりません。
逆行列じゃない方法で、CG法かICCG法で、A,X,Bは行列は少なくとも5x5以上であること、です。

これは、後の課題でポアソンの方程式を解くために使うみたいです。
ご指導のほど、よろしくお願いします。

下には考えた別解を載せておきます。


5次多項式の値をX=[0,_1]の6点で求める式は、[A]{X}={Y}の行列方程式になる、{X}を係数、{A]をXの乗べき項の並びとすることで、[A],{X}を準備でき、[A]{X}={B}の{B}を求めて、改めて連立方程式[A]{?}={B}から{?}を求めると{X}に等しいことをもって、検算とすることが出来る。
以下はその計算。
ここでは、最も素朴な消去法であるガウス・ジョルダン法を凝らない形で使った。
ポアソン方程式の解法に際しては、状況によっては、繰返し法の素朴な解法であるガウス・ザイデル法が適切かもらしい。


*/
#include_<stdio.h>
#include_<stdlib.h>

void_ready(double_a[6][6],double_x[6]);

int_main(){
__double__a[6][6],x[6],b[6];
__double__Akk,Aik;
__int_____i,j,k;

__//_[A],{X}を用意する
__ready(a,x);
__printf("[A],{X}_設定\n");
__printf("_[A]_-------------------------");
__printf("------------------_{X}----\n");
__for(i=0;i<6;i++)_{
____for(j=0;j<6;j++)_{
______printf("_%.5f",a[i][j]);
____}_printf("_%.5f\n",x[i]);
__}
__//_{B}=[A]{X}_を計算する
__printf("{B}=[A]{X}\n");
__printf("_{B}_-------------------------");
__printf("------------------\n");
__for(i=0;i<6;i++)_{
____b[i]_=_0;
____for(j=0;j<6;j++)_{
______b[i]_+=_a[i][j]*x[j];
____}
____printf("_%.5f",b[i]);
__}_printf("\n");
__//_検算:[A]{?}={B}_→_{?}={X}
__for(k=0;k<6;k++)_x[k]_=_b[k];
__for(k=0;k<6;k++)_{
____Akk_=_a[k][k];
____if(Akk==0)_exit(9);
____for(j=0;j<6;j++)_a[k][j]/=Akk;_x[k]/=Akk;
____for(i=0;i<6;i++)_{
______if(i==k)_continue;
______Aik_=_a[i][k];
______for(j=0;j<6;j++)_{
________a[i][j]_-=_Aik*a[k][j];
______}_x[i]_-=_Aik*x[k];
____}
__}
__printf("[A]{?}={B}→{?}={X}検算(Gauss-Jordan)\n");
__printf("_[A]_-------------------------");
__printf("------------------_{X}----\n");
__for(i=0;i<6;i++)_{
____for(j=0;j<6;j++)_{
______printf("_%.5f",a[i][j]);
____}_printf("_%.5f\n",x[i]);
__}
__return_0;
}
//_[A],{x}を用意する
void_ready(double_a[6][6],double_x[6]){
__int_____i,j;
__double__v,dv;
__double__p,q;

__dv_=_1.0/5;
__q_=_1;
__for(i=0;i<6;i++)_{
____v_=_dv*i;
____p_=_1;
____for(j=0;j<6;j++)_{
______a[i][j]_=_p;
______p_*=_v;
____}
____x[i]_=_q;
____q_/=_2;
__}
}
/*_出力:
[A],{X}_設定
_[A]_-------------------------------------------_{X}----
_1.00000_0.00000_0.00000_0.00000_0.00000_0.00000_1.00000
_1.00000_0.20000_0.04000_0.00800_0.00160_0.00032_0.50000
_1.00000_0.40000_0.16000_0.06400_0.02560_0.01024_0.25000
_1.00000_0.60000_0.36000_0.21600_0.12960_0.07776_0.12500
_1.00000_0.80000_0.64000_0.51200_0.40960_0.32768_0.06250
_1.00000_1.00000_1.00000_1.00000_1.00000_1.00000_0.03125
{B}=[A]{X}
_{B}_-------------------------------------------
_1.00000_1.11111_1.24992_1.42753_1.65984_1.96875
[A]{?}={B}→{?}={X}検算(Gauss-Jordan)
_[A]_-------------------------------------------_{X}----
_1.00000_0.00000_0.00000_0.00000_0.00000_0.00000_1.00000
_0.00000_1.00000_0.00000_0.00000_0.00000_0.00000_0.50000
_0.00000_0.00000_1.00000_0.00000_0.00000_0.00000_0.25000
_0.00000_0.00000_0.00000_1.00000_0.00000_0.00000_0.12500
_0.00000_0.00000_0.00000_0.00000_1.00000_0.00000_0.06250
_0.00000_0.00000_0.00000_0.00000_0.00000_1.00000_0.03125
*/



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


Name: softya  ..上級者(21,105ポイント)   Date: 2009/10/20(火) 23:03   No:40703     
Title: Re:検算のプログラミング    
yahoo知恵袋で同じ質問されてますよね?
http://my.chiebukuro.yahoo.co.jp/my/myspace_quedetail.php?writer=yutabasketlovers

この掲示板には、つぎのような規約がありますので守っていただきたいです。
>複数の掲示板で同じ質問をすることをマルチポストといい、大抵禁止されています。
>しかし、ここでは相互リンクし、リンク先の掲示板でマルチポストが許されていれば
>マルチポストはOKとしています。複数の掲示板で同じ質問をするときは相互リンクし、
>どこの掲示板で同じ質問をしているか明確にして下さい。


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



Name: でんすけ  ..入門者(4,837ポイント)   Date: 2009/10/20(火) 21:44   No:40693       
Title: 数学の質問です。    
A地点からB地点までの間を放物線を描かせてボールを移動させる場合
どのような計算になるのでしょうか?
計算方法と、サンプルなどを載せて頂けたらと思います。
よろしくお願いします。


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


Name: 組木紙織  ..比類無きプログラマー(72,241ポイント)   Date: 2009/10/20(火) 22:34   No:40699     
Title: Re:数学の質問です。    
移動経路だけなら
y=-g(x-x_{A})(x-x_{B})
ただしgは重力加速度、x_{A}は点Aのx座標を示す。

時間変化がほしければ
y = -g(t-x{A})(t- x_{g})
x = t+x{A}
ただしtは物体が動き始めてからの時間を示す。

状況がわからないので、このくらいしか書けません。



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

Name: でんすけ  ..入門者(4,848ポイント)   Date: 2009/10/20(火) 22:35   No:40700 解決!     
Title: Re:数学の質問です。    
十分です。
ありがとうございました。


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



Name: ゆー  ..ぴよぴよ(295ポイント)   Date: 2009/10/20(火) 22:25   No:40698       
Title: ポアソンの方程式の解き方    
CG法での計算例があるのですが、ICCG法の解き方が分かりません。

ご指導のほどよろしくお願いします。

/* CG 法でのポアソン方程式の計算 */
for(i=1;i<=mxz;i++){
v_[i]=w_[i]=0.0;
p_[i]=d_[i]=cnm[i];
}
for(i=1;i<=mxz;i++){
w_[1]=mA[2][1]*p_[1]+ mA[3][1]*p_[2] mA[4][1]*p_[mx1+1];
for(i=2;i<=mx1;i++)
w_[i]=mA[1][i]*p_[i-1]+ mA[2][i]*p_[i] mA[3][i]*p_[i+1]+mA[4][i]*p_[i+mx1];
for(i=mx1+1;i<=mxz-mx1;i++)
w_[i]=mA[0][i]*p_[i-mx1]+mA[1][i]*p_[i-1]+mA[2][i]*p_[i]+mA[3][i]*p_[i+1]
38
+mA[4][i]*p_[i+mx1];
for(i=mxz-mx1+1;i<=mxz-1;i++)
w_[i]=mA[0][i]*p_[i-mx1]+mA[1][i]*p_[i-1]+mA[2][i]*p_[i]+mA[3][i]*p_[i+1];
w_[mxz]=mA[0][mxz]*p_[mxz-mx1]+mA[1][mxz]*p_[mxz-1]+mA[2][mxz]*p_[mxz];
eu_=dj_=0.0;
for(j=1;j<=mxz;i++){
dj_+=d_[j]*d_[j];
eu_+=p_[j]*w_[j];
}
if(eu_=0.0)
return;
e_=dj_/eu_;
q_=0.0;
for(j=1;j<=mxz;j++){
v_[j]+=e_*p_[j];
d_[j]-=e_*w_[j];
q_+=d[j]*d[j];
}
q_/=dj_;
for(j=1;j<=mxz;j++)
p_[j]=d_[j]+q_*p_[j];
}
}



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




Name: ネス  ..ぴよぴよ(541ポイント)   Date: 2009/10/18(日) 20:39   No:40615       
Title: ゲームのための自作BGM、どうされていますか?    
自作のBGMを扱いたいのですが、皆さんはどういったツールで編集されていますか。たぶんMIDIというファイルの種類かなと勝手に考えていますが、パソコンのキーに音が割り当てられてて、それを押すと自動的に譜面が作られる、みたいな編集ツールはないでしょうか。一応音符は読めるのですが、音符を入力からだと自分の中での音の長さと実際とが結構違ったりして、うまくできなかったりします。結局、音符が分からないのです。皆さんがどうやってオリジナルのBGMを作っているのか知りたいです。

また、プログラム部分についてですが、手元のテキストに、ファイル操作という章があるのですが、「このへんを知ればいいのでは?」と自分なりに目星をつけていますが、方向性として私は間違っていないでしょうか?


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


Name: ねこ  ..熟練のプログラマー(46,514ポイント)   Date: 2009/10/18(日) 21:16   No:40620     
Title: Re:ゲームのための自作BGM、どうされていますか?    
読み違ってたら申し訳ないですが、プログラムと作曲は全く別物です。

作曲はmidi用から音源を使ったwav系の作曲ツールがあります。
このへんは詳しくないのですが、過去ログ探すとツールについて聞いてる内容あったので探してみると欲しい情報があると思います。

プログラムではあくまで作成された音楽ファイルを読み込んで再生してるだけなので
取り込んだ音楽をフェードインフェードアウトするくらいなら出来ますが、作曲や楽譜を構成するといったことは普通のゲーム等のプログラムでは出来ません。


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

Name: ネス  ..ぴよぴよ(194ポイント)   Date: 2009/10/18(日) 22:00   No:40626     
Title: Re:ゲームのための自作BGM、どうされていますか?    
ねこさんお返事サンクスです。私が説明不足でした。C言語の文法やアルゴリズムで作曲したり譜面を構成するという意味ではないのです。たとえばRPGゲームだと、各場面で音楽が流れていますが、あれはBGMのファイルをゲームのメインとなるプログラムが外部ファイルとして読み込んで、必要な時に必要な音楽ファイルを鳴らしているのかなあと。そこで、オリジナルのゲームを作られている皆さんの中には、そこで読み込む音楽も自分で作っている方もきっといるだろうと思ったわけです。やはり音楽はゲームに欠かせないものでしょうし。プログラミングそのものとは別の作業ではありますが、ゲームを完成させる上で、わりと多くの方がその音楽も作っているかもしれないと思いまして。もし自分で作ったゲームに同じく自分で作った曲を取り入れている方なら、そちらについてもフリーで良いツールなど知っておられるかなあと思ったしだいでした。私自身、プログラミングをはじめて間もないので、なかなか説明がうまくできていないところ、一生懸命、汲み取っていただいて、ねこさん、感謝していますよ。

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

Name: Ma  ..中級者(12,718ポイント)   Date: 2009/10/18(日) 23:23   No:40630     
Title: Re:ゲームのための自作BGM、どうされていますか?    
たしかに、自作している方もいらっしゃいますが、MIDI作成は簡単ではないため、
たいていの方は、素材を提供してもらっています。

このシューティングプログラミング界でもっとも利用されている、その提供サイトはこちらではないかと。

煉獄庭園様
http://www.rengoku-teien.com/

どうしても、自作してみたいならば、「MIDI 作成ソフト」とかってぐぐれば、いろんなものがヒットしたりします。
作曲センスが必要なことと使い慣れるまで膨大な時間がかかり、プログラムできる時間が減るため、私の場合は挫折し煉獄庭園様にお世話になってますw

ただ、音楽も自作できること、それは誇らしい事なので、挑戦するならがんばってください^^


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

Name: 御津凪 [URL]  ..ハッカー(118,187ポイント)   Date: 2009/10/18(日) 23:58   No:40632     
Title: Re:ゲームのための自作BGM、どうされていますか?    
市販ソフトを利用するなら、私は Singer Song Writer か、 SONER をお勧めします。

双方とも MIDI を使った制作もできますし、いい音源(音色)があるのでお勧めです(特に後者)。
扱いやすさと手軽さは前者が、高機能・多機能は後者になります。
ただし、双方とも値段は張ります。

フリーの MIDI 制作ソフトで制作してみて、物足りないと感じたら購入を検討するといいかもしれません。


因みに私は先日 SONER 8 PRODUCER と MIDI キーボードを購入しました。
全ての機能を使いこなすのは大変ですが、
少なくとも制作に関しては助かっています。


あとはねこさんの書かれている通り、過去ログにも同じような質問があったので、そちらの方も見ておくといいでしょう。
一応リンクを下記に張っておきますね。
http://www.play21.jp/board/formz.cgi?action=res&resno=30425&page=&lognum=94&id=dixq&rln=30441


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

Name: ネス  ..ぴよぴよ(428ポイント)   Date: 2009/10/20(火) 01:06   No:40664     
Title: Re:ゲームのための自作BGM、どうされていますか?    
皆さん、レスありがとうございます。リンク先の過去ログで紹介されていたソフトを活用しているところです。自分で浮かんだメロディーがあって、それをどうしても使いたいので、時間を喰っても作ってみるつもりです。ただ入力方法については、自分が演奏したのをそのまま譜面化してくれるようなのがラクだなあと感じるばかりです。一応MIDIキーボードがあるので、それを活用しようかなと思っています。ただすっごい前のなので、しかも当時はパソコンとのつなぎ方が分からず、そのままになっています。現在でも正直わからないんですけれども。たぶんコードの一方がUSBで、もう一方がMIDI端子になっているようなのがあるのかなあと勝手に想像していますが、どうなんでしょうね。


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

Name: 御津凪 [URL]  ..ハッカー(118,214ポイント)   Date: 2009/10/20(火) 10:06   No:40678     
Title: Re:ゲームのための自作BGM、どうされていますか?    
> たぶんコードの一方がUSBで、もう一方がMIDI端子になっているようなの

ありますよ。
たとえば、

ttp://www.m-audio.com/products/jp_jp/Uno.html

とか。


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

Name: ネス  ..ぴよぴよ(693ポイント)   Date: 2009/10/20(火) 13:52   No:40682     
Title: Re:ゲームのための自作BGM、どうされていますか?    
御津凪さん、何度もありがとうございます。1つの紹介例ということですが、地味な白いケーブルを考えていたので、こんな、こじゃれたヤツ(ケーブル)もあるんですね。Roland PC-160という、10年以上も前のキーボードで、果たして今のMIDI規格に対応しているのかよく分からないのですが、このリンク先の写真を見ればヤツ(私のキーボード)も泣いて喜ぶと思います。当時私は中学生ぐらいだったと思うのですが、ホントどうやったらいいのか、マニュアルも英語だし、無駄な買い物したなあと思ったいたものですが、ようやく報われるかもしれません。それぐらいPCに無関心だった私が今ではこんなに惹かれるんですから、おもしろいもんだと自分では思いますが。

余談ですが、御津凪さんは、「おつなぎ」さんと読むのでしょうか。手をおつなぎするの、おつなぎとリンクしてたりするんですかね。的外れだったらごめんなさい、気になったもので。


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

Name: 御津凪 [URL]  ..ハッカー(118,280ポイント)   Date: 2009/10/20(火) 14:02   No:40683     
Title: Re:ゲームのための自作BGM、どうされていますか?    
> 余談ですが、御津凪さんは、「おつなぎ」さんと読むのでしょうか。手をおつなぎするの、おつなぎとリンクしてたりするんですかね。

「みつなぎ」と読みます。(ローマ表記で Mitsunagi と書くこともある)
やはり初見の方だと「おつなぎ」と読んでしまいますね。

特に何かにつけて決めたわけでもない名前ですが、自分では気に入っています。


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

Name: YuO  ..プログラマー(33,951ポイント)   Date: 2009/10/20(火) 15:06   No:40685     
Title: Re:ゲームのための自作BGM、どうされていますか?    
MIDI規格本体は20年くらい前から変わっていないはずです。
私のPCにはSC-88STや少なくとも12年以上前に発売されたの電子ピアノが繋がっていますが (UM-1とUM-2EXで接続),問題なく扱えます。


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

Name: TKOZ  ..プログラマー(34,925ポイント)   Date: 2009/10/20(火) 21:24   No:40689     
Title: Re:ゲームのための自作BGM、どうされていますか?    
MIDIの作曲にはまっており、
Dominoというフリーのソフトウェアを使っています。
このソフトは、操作性抜群です。

前は、手軽にサクラというソフトウェアを使っていましたが、
ドラムの音の出し方が分からないとか、低レベルな部分で
躓いていたのです。このソフトも、もっと使いこなせれば、
高度な作曲も出来るようですが、私には無理でした。

その後、Cherryというソフトウェアを使ってからは、音の出し方や
作曲の手法を学べるようになってきたので、

http://sound.jp/morita-e/kouza/k_info.htm
↑参照するといいかも(Cherry&Domino&Cakewalk対応講座)
(ネットで見つけた講座です)

本格的な作曲本を購入しました。
(といいつつ、作曲入門本)
裏口からのMIDI入門という本です。

この本で、作曲方法の基礎を学びました。
C(ドミソ) F(ファラド) G(ソシレ)などの3つのコードの基礎知識。

あとは、ネットで見つけた作曲講座で、初心者のための作曲講座というのが、
気になりました。

crescこと、菩薩Pさんが書いた作曲講座です。ニコニコ動画にアップされている動画は
全てダウンロードしました。
あと、作曲方法についてのWebページも開設したみたいなので、それも参考にしています。
http://members3.jcom.home.ne.jp/cresc_stm/

今は、とりあえず、基本を大事にしつつ、応用が出来るように頑張っています。


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

Name: ネス  ..かけだし(1,020ポイント)   Date: 2009/10/20(火) 21:52   No:40694     
Title: Re:ゲームのための自作BGM、どうされていますか?    
皆さん、さらなる情報ありがとうございます。御津凪さん、「みつなぎ」さんと読むのですね。私も他の人の名前ながら非常に気に入っています。イイ!!!です。YuOさん、その情報は私の以前のMIDI挫折経験を非常にフォローしてくれるものです。(私の場合、接続で挫折って、そもそも早すぎましたが)TKOZさん、愛用のリンク先まで紹介してくださりありがたい限りです。私も一応DominoをDLしたのですが、どうにも休みや音の長さの感じが自分の中でのものと違って、やっぱり自分で弾いた音の感じで自動的に録音してくれる方向で動き出していました。しかしもう一度、このリンク先を参考にDominoを使ってみたいと思います。ソフト自体は素晴らしいわけで、使いきれていないのは私の単なる実力不足のせいなので。皆さん、助かりました。押入れから引っ張り出してきたのはMIDIキーボードだけではなくて、かつての私の夢や思いの方がメインなのかもしれません。

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



Name: カーネルとラッキー  ..ぴよぴよ(339ポイント)   Date: 2009/10/20(火) 21:38   No:40692       
Title: CRC−CCITTの計算法に納得いきません!    
C言語の初級者が質問します。
講義の課題で、「伝送誤り検出方式として巡回符号方式(CRC:Cyclic Redundancy Check)を使用した場合、送り側でアルファベット6文字(例:nippon)の適当な単語を1文字ずつ入力した場合の検定コードを算出しなさい。生成多項式はCRC- 16-CCITT(Xの16乗)+(Xの12乗)+(Xの5乗)+1を使用し、検定コードは2byteとする。
という課題に対してネット上に以下のような模範解答がありました。
/***********************************************************
crc16.c -- CRC
***********************************************************/
#include <limits.h>
/* x^{16}+x^{12}+x^5+1 */
#define CRCPOLY1 0x8408U /* 左右逆転 */
typedef unsigned char byte;

unsigned int crc1(int n, byte c[])
{
unsigned int i, j, r;

r = 0xFFFFU;
for (i = 0; i < n; i++) {
r ^= c[i];      /******************************(1)
for (j = 0; j < CHAR_BIT; j++)
if (r & 1) r = (r >> 1) ^ CRCPOLY1;
else r >>= 1;
}
return r ^ 0xFFFFU;
}

#include <stdio.h>
#include <stdlib.h>
int main()
{
static byte s[] = "nippon";


printf("crc1(%s) = %04X\n", s, crc1(6, s));
return 0;
}            /* end */

ここで、*********(1)と記したところでは1文字目nに対しCRCを求めて、その結果をCRC初期値としてiのCRCを求め、その結果をまた次のCRC 初期値としてpの・・・・という計算をして最終的に1単語のCRCを求めていますが、理屈がよくわかりません。これはCRC計算のルールあるいは慣習と解釈すればよろしいのでしょうか?また、CRCの求め方は1通りではなく8種類ぐらいあると聞いたのですが本当ですか?


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




Name: kerotan0820  ..中級者(13,512ポイント)   Date: 2009/10/20(火) 06:05   No:40668       
Title: 演算プログラムでの記述方法に関して    
今ニコニコ動画の(nm6237525)にて演算をやっていたのですが、そこで以下のような問題が出ました。

●問題練習2
30−10
30×10
30÷10
を計算するプログラムを作成せよ。
ファイル名はcalc.cとし、引き算の結果をsub,掛け算の結果をmulti,割り算の結果をdivという名前の変数に記憶し、画面の表示に利用せよ。


これの回答はこうでした。

/* calc.c */
#include<stdio.h>
int main(void){
int sub;
int multi;
int div;
sub=30-10;
multi=30*10;
div=30/10;
printf("引き算:%d\n" ,sub);
printf("掛け算:%d\n" ,multi);
printf("割り算:%d\n" ,div);
return 0;
}



それに対して僕が組んだプログラムはこうでした

/* calc.c*/
#include<stdio.h>
int main(void){
int a=30;
int b=10;
int sub;
int multi;
int div;

sub=a-b;
multi=a*b;
div=a%b;

printf("引き算=%d\n" ,sub);
printf("掛け算=%d\n" ,multi);
printf("割り算=%d\n" ,div);
return 0;
}



僕の場合30と10をaとbに代入して後の計算を楽にしようと思って
最初に

int a=30;
int b=10;

と記述したのですが、正直どちらが正しいのでしょうか。 僕は自分のやり方が正しく思えるのですが…


これはどちらが正しいのですか? 正しくないのがないとして、どちらの方法で今後やるべきでしょうか。


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


Name: Ma  ..中級者(13,838ポイント)   Date: 2009/10/20(火) 06:49   No:40669     
Title: Re:演算プログラムでの記述方法に関して    
私個人の意見としては、解答としてはどちらも正しいと思います。

ただ、1、2回しか使わない定数だった場合は、int 型を宣言することで余分なメモリを確保してしまうから、
直接コードに書き込む方法が好ましいと思います。
ただし、複雑なコードになってくると書き間違いや読みにくさが発生するので、#define を使うとより好ましいかと。


私なら、int 型として宣言するのは、それが変数であることが前提です。
定数の場合は、あまり変数型としては宣言しません。
結局は読みやすさとメモリの使用量いうことになるのかな。


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

Name: kerotan0820  ..中級者(13,583ポイント)   Date: 2009/10/20(火) 07:05   No:40670     
Title: Re:演算プログラムでの記述方法に関して    
■Ma様
#defineとは何でしょうか?初めて目にしたのですが;
あとメモリを確保とかそういうのがわからないのですが…;

読みやすさに関してはわかりました^^ありがとうございます。


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

Name: Ma  ..中級者(13,455ポイント)   Date: 2009/10/20(火) 07:12   No:40672     
Title: Re:演算プログラムでの記述方法に関して    
できるだけ、ぐぐって調べるくせをつけるようにしましょう。
プログラミングでは、聞くことではなく調べることで成長します。


/* calc.c*/
#define A 30
#define B 10

#include<stdio.h>
int main(void){
int sub;
int multi;
int div;

sub=A-B;
multi=A*B;
div=A%B;

printf("引き算=%d\n" ,sub);
printf("掛け算=%d\n" ,multi);
printf("割り算=%d\n" ,div);
return 0;
}



#define は、定数を利用するときに使います。
コンパイルするときに(プリコンパイラによって)、自動的にソースコードにはりつけられるため、生成されるファイルにおいては実際に数字を書き込むのとまったく同等のことになります。


メモリに関してあまり詳しいわけではありませんが、
int を宣言するということは、そのデータを保存するための要領(メモリ)をPCのどこか(たぶんRAMかな?)に作るということになりますが、
コードにそのまま書き込めば、これを別途領域を確保する事はありません。
つまり、効率的である、ということです。


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

Name: 初級者  ..初心者(6,568ポイント)   Date: 2009/10/20(火) 07:34   No:40675     
Title: Re:演算プログラムでの記述方法に関して    
わり算のところで
% 剰余演算子を使っているのは
大いにまずいです。


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

Name: Ma  ..中級者(13,464ポイント)   Date: 2009/10/20(火) 07:41   No:40676     
Title: Re:演算プログラムでの記述方法に関して    
>初級者 さん
お、本当ですね。スルーしちゃいました。

割り算は、 % ではなく / でした。
(コピーペースト恐ろしい…)


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

Name: kerotan0820  ..中級者(13,839ポイント)   Date: 2009/10/20(火) 21:36   No:40691 解決!     
Title: Re:演算プログラムでの記述方法に関して    
■Ma様
すみません。ちょっとしたことは今後ググります。
解説ありがとうございます。理解できました


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



Name: チルチル  ..熟練のプログラマー(67,477ポイント)   Date: 2009/10/18(日) 21:31   No:40621       
Title: 参照型の実体    
今まで参照型と言う言葉すら知らなかったので参照は何をやっているのかの解釈は
宣言と同時にアドレスを書き換えるから作った方のアドレスは行方不明になるとか思っていましたが
調べて見るとそうではなくて参照型と言う型の存在を知りました

そこで気になったのが参照型で実体は作られるのかと言う事です
ポインタを宣言しても実体は作られませんが参照型も実体は作られないのでしょうか?

コンストラクタを非公開にしても参照型は作れるので実体は作られていないと思うのですが
試しにsizeof演算子でサイズを測ってみるとポインタは実体よりサイズが小さいのですが
参照型のサイズは実体と同じになるんですよね

まあ参照型も使う時は実体と同じですから同じに見えるのも頷けますが
では実際のサイズはどうなのでしょうか?

つまり参照型を作った時に増えるメモリ領域は実体を作った時より少ないのでしょうか?
関数の引数とかは参照の方が軽いと言われているから少ないと思いますが
それならポインタと参照型ではどっちが少ないのでしょうか?


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


Name: ねこ  ..熟練のプログラマー(46,651ポイント)   Date: 2009/10/18(日) 21:55   No:40624     
Title: Re:参照型の実体    
ポインタ変数(ポインタクラス変数含む)ってのはアドレス持ってるだけだよ?
どっちが少ないとか言ってるってことはポインタが全然理解出来てないだけだと思う。
逆に言えばポインタより小さいサイズの参照方法なんて32ビットマシンでどうやってやるのさ、と。
これを読んで分からないなら、ポインタの概念をもう一回勉強した方がいい。


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

Name: conio [URL]  ..熟練のプログラマー(62,151ポイント)   Date: 2009/10/18(日) 22:07   No:40628     
Title: Re:参照型の実体    
>>関数の引数とかは参照の方が軽いと言われているから少ないと思いますが
この発言から察するに、
「なんとなく」で解釈している部分があるのではないでしょうか。

根本的な所で、どういう事が行われているのか?などを正確に把握する必要があると思います。


で、関数の引数についてですが、
基本的に、リファレンス(参照)渡しの効率はアドレス渡しと同等です。

ただし、作業用無名インスタンスが生成されるような場合は、
リファレンス渡しは、遅くなります。


また、リファレンスやアドレス渡しの方が速いと判断しているようですが、
組み込み型(intなど)の引数であれば値渡しの方が効率が良いです。


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

Name: チルチル  ..熟練のプログラマー(67,640ポイント)   Date: 2009/10/18(日) 23:58   No:40633     
Title: Re:参照型の実体    
参照型が内部で何をやっているか以外は理解していると思うんですけどね・・

参照型よりポインタ型の方が軽いとは思いましたけど確認のために聞きました・・
ちなみにどのくらい差がありますか?

参照渡しが速い理由はだいたい理解していますが「作業用無名インスタンス」とは何ですか?

それで気になっているsizeof(T)とsizeof(T&)ですが
これが同じ値になると言う事は
Tの参照型を作るとTを作るのと同じだけメモリが確保されると言う事でしょうか?

そうだとするとサイズの大きいユーザ定義型の参照型を多用すると
メモリを大量に消費してしまいますからこれははっきりさせる必要がありまして・・


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

Name: ねこ  ..熟練のプログラマー(46,986ポイント)   Date: 2009/10/19(月) 00:36   No:40634     
Title: Re:参照型の実体    
何かやりたい事が分かった気がする。

違ってたら申し訳ないですが、チルチルさんはソースは短い方が良い主義みたいなので
NULLチェックをわざわざ書かなくても良いように参照型を使いたい
しかし、参照型はサイズ分メモリを確保してそうなのでそれは無駄と感じる。
こんなとこでしょうか?

もしそうなら答えは「増える」です。
メンバ関数の中で参照型変数作らなきゃいけないですからね。
同一階層で1万個とか作るならそりゃ大量に消費しますけどね、
ヒープ領域でちょこっと作る程度じゃ大差ないけど。

結局参照型に設定する際にNULLチェックは必要だし、別に絶対NULLが入らないって設計にすればNULLチェック無しで進めても良いと思うけどね。一般的ではないけど。


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

Name: conio [URL]  ..熟練のプログラマー(62,632ポイント)   Date: 2009/10/19(月) 01:04   No:40635     
Title: Re:参照型の実体    
>>参照型よりポインタ型の方が軽いとは思いましたけど確認のために聞きました・・
>>ちなみにどのくらい差がありますか?
既に述べました。例外を除き、「同等」です。
(アドレス渡しも参照渡しも、同様の仕組みで実現しているからです。)

例外というのは、作業用無名インスタンスが作られる場合です。

で、作業用無名インスタンスについてですが、constリファレンスの場合は
オリジナル(参照する対象)と参照型指定に使われる変数が異なっていても良いという事になっています。
(ただし、変換可能な型である必要がある)

例えば、
---------------------
TempA a;
const TempB & b = a
---------------------
上記の様な場合、TempA型であるオリジナル(a)がTempB型に変換、コピーされ
その変換されたものは、TempB型の作業用インスタンスに代入されます。
そして、bはその生成されたTempB型のインスタンスのアドレスを格納する事になります。

つまり、直接 オリジナルであるaのアドレスを格納するわけでは無くなるので、
その作業の分だけ遅くなります。
(この場合のオーバーヘッドは、値渡しとアドレス渡しのオーバーヘッドを合計したものと同じ程度になります)


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

Name: チルチル  ..熟練のプログラマー(67,812ポイント)   Date: 2009/10/19(月) 17:55   No:40646     
Title: Re:参照型の実体    
なるほど良くわかりました

参照型はサイズ分メモリを確保していると言うのは思い過ごしだったんですね・・

見かけ上はsizeof(T)とsizeof(T&)は同じになるけど
実際に確保されるメモリの量は「T*」も「T&」も同じになるんですね

まあconstは使わないから例外は考えなくて良さそうです

確認なんですが参照型もポインタ型も新たに確保される領域は同じだから
仮に物凄く大きい型の参照型を作ったからって物凄く大きい領域が確保されるわけでは無いんですよね?


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

Name: Ma  ..中級者(13,040ポイント)   Date: 2009/10/20(火) 00:54   No:40662     
Title: Re:参照型の実体    
>確認なんですが参照型もポインタ型も新たに確保される領域は同じだから
>仮に物凄く大きい型の参照型を作ったからって物凄く大きい領域が確保されるわけでは無いんですよね?

特に詳しいわけではないですが、これまでの解答(以下の文)からそういうことになるかと。

>基本的に、リファレンス(参照)渡しの効率はアドレス渡しと同等です。

>>>参照型よりポインタ型の方が軽いとは思いましたけど確認のために聞きました・・
>>>ちなみにどのくらい差がありますか?
>既に述べました。例外を除き、「同等」です。
>(アドレス渡しも参照渡しも、同様の仕組みで実現しているからです。)


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

Name: チルチル  ..熟練のプログラマー(67,829ポイント)   Date: 2009/10/20(火) 16:12   No:40687 解決!     
Title: Re:参照型の実体    
なるほど、やはり考えすぎでしたか
どうもありがとうございました


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



Name: AF  ..ぴよぴよ(92ポイント)   Date: 2009/10/20(火) 10:11   No:40679       
Title: 2D俯瞰MAPへのグリッド線    
現在、MAPチップを並べDirctXを使った2D俯瞰MAPを作成しております。
MAPのグリッド線はどのようにプログラミングすれば引けますでしょうか?

環境はVisualC++2008EE WindowsXPです。


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


Name: toyo  ..熟練のプログラマー(42,438ポイント)   Date: 2009/10/20(火) 12:21   No:40680     
Title: Re:2D俯瞰MAPへのグリッド線    
DXLibではなくDirectXを直接扱っているのでしょうか
1ピクセルずつ描画用メモリに書き込むしかないのでは


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

Name: AF  ..ぴよぴよ(100ポイント)   Date: 2009/10/20(火) 13:51   No:40681     
Title: Re:2D俯瞰MAPへのグリッド線    
> DXLibではなくDirectXを直接扱っているのでしょうか
> 1ピクセルずつ描画用メモリに書き込むしかないのでは
>

DirectXで直接描画しております。


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

Name: 御津凪 [URL]  ..ハッカー(118,335ポイント)   Date: 2009/10/20(火) 14:08   No:40684     
Title: Re:2D俯瞰MAPへのグリッド線    
> DirectXで直接描画しております。

現在どのようにMAP を描画しているのかわかりませんが、
ID3DXLine を使用すればとりあえず線を引けます。

また、頂点情報を自前定義して行う方法もあります。
(こちらのほうが融通が利きやすく、軽いです)


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



Name: Ma  ..中級者(12,643ポイント)   Date: 2009/10/18(日) 16:42   No:40607       
Title: DXライブラリ3D系解説サイトありませんか?    
どうもです、いつもおせわになってます。

こちらのプログラミングの館や、龍神録の館で2D系の解説はDXライブラリを始めたころ、とてもわかりやすくて助かりました。
ところが、3D系になるとどうも解説サイトが見当たりません。
DXライブラリも3Dに対応して日が浅いのもあるのかもしれませんが、どなたかDXライブラリの3D系でわかりやすい解説サイトありましたら、教えてください。

あと、お勧めであればライブラリを乗り換えるのもありです。(英語可)
とはいえ、3D系は初心者なので
(メタセコをある程度使えて、単純な3Dあたり判定ができる程度。DXライブラリのサンプルプログラム31:「迷路を3Dで表示」 ぐらいのコードなら1度読み通せばさらっと納得できる程度。)、
比較的易しいライブラリが希望ですが、将来的にこっちがいいとかあればそれでも可能です。

Selene では、サンプルが充実しているとのことですが、そのサンプル等の解説サイトがもしあるなら、紹介してくださるとうれしいです。

一応ですが環境は、
Visual Studio 2008 Express
Windows Vista SP1

どうぞよろしくお願いします。
足りない情報等あれば、お気軽におっしゃってください。


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


Name: Justy  ..伝説なるハッカー(444,618ポイント)   Date: 2009/10/19(月) 21:39   No:40656     
Title: Re:DXライブラリ3D系解説サイトありませんか?    

>どなたかDXライブラリの3D系でわかりやすい解説サイトありましたら、教えてください

 公式のここしか知らないです。

DXライブラリ置き場 3D関係関数リファレンスページ
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_3d.html

 サンプルも結構ありますし、このページと3D関連部分の Dxlibヘッダの関数名と
そのコメント見るだけで大体使い方が判るのではないでしょうか。



>お勧めであればライブラリを乗り換えるのもありです

 Seleneはよく知りませんが、個人的には irrlichtがよさげでした。

Irrlicht Engine - Wikipedia
ttp://ja.wikipedia.org/wiki/Irrlicht_Engine

Irrlicht Engine - A free open source 3d engine
ttp://irrlicht.sourceforge.net/

 サウンドが別で、ライセンスも irrlichtと異なるところがちょっとアレですが、
DirectX 9, 8.1 / OpenGL / ソフトレンダラー等が多数の OSで動くところとか、
ナイスです。



# Seleneの HP見ましたが、ライブラリの更新頻度がすごいですね。


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

Name: Ma  ..中級者(12,815ポイント)   Date: 2009/10/20(火) 00:46   No:40661 解決!     
Title: Re:DXライブラリ3D系解説サイトありませんか?    
>Irrlicht Engine
あクロスプラットフォームさがすごいですね、、しかも Xbox に PSP まで!
検討してみます。

DXライブラリ3Dの解説は、おそらくこれから発展していくのでしょうね。

Justyさん返信ありがとうございました。

*追記

時間ができたので、DLしサンプルをみてみました!
解説もじっくりされていて、分かりやすそうだったので、ぜひともこれを勉強してみたいと思っております!
紹介ありがとうございました。


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



Name: ファファファファウスト  ..ぴよぴよ(33ポイント)   Date: 2009/10/19(月) 18:48   No:40647       
Title: 配列にポインタのアドレスをいれれるかどうか?    
タイトル通りです。

d[0] = &point

みたいなことはできるんでしょうか?


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


Name: バグ  ..ハッカー(171,619ポイント)   Date: 2009/10/19(月) 18:57   No:40648     
Title: Re:配列にポインタのアドレスをいれれるかどうか?    
試してみては?

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

Name: ファファファファウスト  ..ぴよぴよ(34ポイント)   Date: 2009/10/19(月) 18:59   No:40649     
Title: Re:配列にポインタのアドレスをいれれるかどうか?    
やったんですが・・・
移植性のないポインタ変換
と警告がでまして・・・


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

Name: バグ  ..ハッカー(171,684ポイント)   Date: 2009/10/19(月) 19:24   No:40650     
Title: Re:配列にポインタのアドレスをいれれるかどうか?    
多分、型が違うんじゃないかと…

int a[5] = {0, 1, 2, 3, 4};
int *p[5] = {&a[0], &a[1], &a[2], &a[3], &a[4]};

これならどうですか?


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

Name: バグ  ..ハッカー(171,721ポイント)   Date: 2009/10/19(月) 19:25   No:40651     
Title: Re:配列にポインタのアドレスをいれれるかどうか?    
あ、失礼、ポインタのアドレスですね。

int* point;
int** d[3];
d[0] = &point;

こうですかね。


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

Name: box  ..ハッカー(144,460ポイント)   Date: 2009/10/19(月) 19:45   No:40652     
Title: Re:配列にポインタのアドレスをいれれるかどうか?    
> 移植性のないポインタ変換
> と警告がでまして・・・

そのときのソースコードは?


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

Name: ファファファファウスト  ..ぴよぴよ(153ポイント)   Date: 2009/10/19(月) 19:59   No:40653     
Title: Re:配列にポインタのアドレスをいれれるかどうか?    
まずはソース上げますね
void asc(int *point,int size)
{
int i,j;
int f[65535],s[65535],p[65535];
unsigned d[10000];
d[0] = &point;
これは型変換しつつデータを配列にいれようとしてかきました

バグさんありがとうございます!!試してみます!!


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

Name: box  ..ハッカー(144,506ポイント)   Date: 2009/10/19(月) 20:11   No:40654     
Title: Re:配列にポインタのアドレスをいれれるかどうか?    

> void asc(int *point,int size)
> unsigned d[10000];
> d[0] = &point;

これだと、バグさんの回答とは話が違ってきます。
こういうことが起きるから、「質問するときにソースを見せて」となるわけです。

pointが指している領域の先頭要素をd[0]に格納したければ、

d[0] = point[0];

です。



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

Name: ファファファファウスト  ..ぴよぴよ(183ポイント)   Date: 2009/10/19(月) 20:17   No:40655 解決!     
Title: Re:配列にポインタのアドレスをいれれるかどうか?    
申し訳ないです・・・・・以後気をつけます

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


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



Name: デジキャメ  ..入門者(3,043ポイント)   Date: 2009/10/19(月) 12:22   No:40641       
Title: 無題    
現在作成中のピ○ロスで、完成となる絵の配列を別のファイルから読み込ませたいのですが、

その過程で「配列の1つ1つの数字を読み込ませる作業」に悩んでいます。

空白や、改行を読み込まない(数字だけを読み込む)関数はあるのでしょうか??

宜しくお願い致します。



イメージ例

(1 3 5 7 9
2 4 6 8 0)の、2行5列、10個の数字を読み込む場合

 記号・空白(=_)・改行(=改)を無視できる
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

(1_3_5_7_9改2_4_6_8_0)改

 ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
   数字だけをファイルから読み込む


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


Name: toyo  ..熟練のプログラマー(42,404ポイント)   Date: 2009/10/19(月) 13:45   No:40642     
Title: Re:無題    
fscanf( )で出来るのではないでしょうか


Name: デジキャメ  ..入門者(3,646ポイント)   Date: 2009/10/19(月) 16:54   No:40644     
Title: Re:無題    
ありがとうございます。一度fopen,fsanfを用いてみました。

以下の要領で実行しましたが、下記のエラーが出てしまいます。
何度も変化させて実行させていますが、DirectXには特別な
宣言が必要なのでしょうか?

#include"DxLib.h"
#definePI_W(10)
#definePI_H(10)

intMyDrawPixel(intx,inty,intcolor){
int sx, sy;

sx = SET_X + x*SIZE; sy = SET_Y + y*SIZE;
DrawBox(sx, sy, sx+SIZE-1, sy+SIZE-1, col[color],TRUE);return0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){//main

int i,j,PixelData[PI_H][PI_W];
FILE *fp;

fp=fopen("p.txt","r");
if(fp==NULL){printfDx("FILE ERORR");exit(0);}
for(i=0; i<PI_H; i++){
for(j=0; j<PI_W; j++){
fscanf("%d", &PixelData[i][j]);
}
}
fclose(fp);
:
:
}
'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(237) : 'fopen' の宣言を確認してください。


'fscanf' : 1 番目の引数を 'const char [3]' から 'FILE *' に変換できません。指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。


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

Name: Mist  ..熟練のプログラマー(69,089ポイント)   Date: 2009/10/19(月) 17:04   No:40645     
Title: Re:無題    
fscanfの引数が間違っています。
新しい関数を使用する場合は、まずググって引数・戻り値・処理内容を確認しましょう。

http://www.bohyoh.com/CandCPP/C/Library/fscanf.html


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

Name: デジキャメ   Date: 2009/10/31(土) 11:31   No:406411256956317 解決!     
Title: Re:無題    
>Mistさん

ご指摘ありがとうございます。

引数と引数の数を間違えていました。

修正したことろ、期待通りに実行結果がでました。




Name: TKOZ  ..プログラマー(33,525ポイント)   Date: 2009/10/17(土) 11:09   No:40563       
Title: 掛け算、割り算を加減算だけで実装したい    
こんにちは、TKOZです。

今、ファミコンのアセンブラにはまっているのですが、
ファミコンは8ビットCPUで掛け算と割り算の命令がありません。

そこで、まずは、C言語だけでアルゴリズムを考えようとしたのですが、
なかなか上手くいきませんでした。

上手くいかないのは、int型で小数を扱うには、どうすればいいかという事が分かりません。
とりあえず、100倍して、答えを100で割るという手段を用いているのですが、
ファミコンのアセンブラに移植した場合、
例えば170.52という値だと(まあ、こんな値は普段使いませんが…)、17052という値に
なりオーバーフローしてしまいます。どうすればいいでしょうか?何か良い案があればお願いします。

ファミコンのアセンブラの開発環境はnesasmで、C言語の開発環境は、BCCDeveloperとVC++6.0です。
WindowsXPです。

ソースは以下の通りです。


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

int mul(int a,int b)
{
int sum=0;
for(int i=0;i<b;i++)
sum+=a;
return sum;
}

int div01(int a,int b)
{
int sum=a;
int count=0;
while((sum-=b)>=0)
{
count++;
}
return count;
}

typedef struct Div{
int num1;
int num2;
}Div;

int main()
{
int i,j;
float k,l;
Div D[81]={ {1,1},{2,1},{3,1},{4,1},{5,1},{6,1},{7,1},{8,1},{9,1},
{2,2},{4,2},{6,2},{8,2},{10,2},{12,2},{14,2},{16,2},{18,2},
{3,3},{6,3},{9,3},{12,3},{15,3},{18,3},{21,3},{24,3},{27,3},
{4,4},{8,4},{12,4},{16,4},{20,4},{24,4},{28,4},{32,4},{36,4},
{5,5},{10,5},{15,5},{20,5},{25,5},{30,5},{35,5},{40,5},{45,5},
{6,6},{12,6},{18,6},{24,6},{30,6},{36,6},{42,6},{48,6},{54,6},
{7,7},{14,7},{21,7},{28,7},{35,7},{42,7},{49,7},{56,7},{63,7},
{8,8},{16,8},{24,8},{32,8},{40,8},{48,8},{56,8},{64,8},{72,8},
{9,9},{18,9},{27,9},{36,9},{45,9},{54,9},{63,9},{72,9},{81,9}
};

srand(time(NULL));

for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
printf("%d×%dは%dです。:",i,j,mul(i,j));

for(k=0.0;k<=1.0;k+=0.1)
{
for(l=0.0;l<=1.0;l+=0.1)
{
printf("%.4f×%.4fは%.4fです。:",k,l,mul(k*100,l*100)/100.0/100.0);
}
}

for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
int n1=rand()%81;
printf("%d÷%dは%dです。:",
D[n1].num1,D[n1].num2,div01(D[n1].num1,D[n1].num2));
}
}

for(k=1;k<=9;k+=1)
{
for(l=1;l<=9;l+=1)
{
float a=rand()%10/10.0;
float b=rand()%10/10.0;
printf("%.4f÷%.4fは%dです。:",a,b,div01(a*100,b*100));
}
}

return 0;
}


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


Name: softya  ..上級者(19,415ポイント)   Date: 2009/10/17(土) 11:45   No:40565     
Title: Re:掛け算、割り算を加減算だけで実装したい    
ファミコンだと出来れば16ビットで表現できる範囲で計算したほうが良いと思います。
16ビットの値の範囲は符号付きで-32768〜32767となります。
で、ファミコンで座標系は横256ドット程度でしょうから、32768/256=128=(2の7乗)分を小数点にまわせる計算になります。ここまでOKでしょうか?

bitイメージとしては、こんな感じです。
□□□□□□□□□□□□□□□□
s 8 7 6 5 4 3 2 1 0 -1-2-3-4-5-6
sは符号。数字は2の乗数で、-1〜-6は小数点以下の数値部分です。
この考え方をfloatの浮動小数点の対語として固定小数点と呼びます。

こうするメリットは2進数基本で考える事で、掛け算や割り算を使わずにシフト演算だけで少数化が出来ることにあります。
たとえば、7を小数点つきにする場合。
short speed;
speed = 7 << 7; //これで7.0って意味なります。
//で、速度を半分にする場合は、
speed = speed >> 1; //これで3.5って意味になります。
//これでX座標を計算してみましょう。
short x = 128 << 7;
x += speed; //128+3.5の計算となります。
printf( "x=%d\n", x >> 7 );//これで小数点以下を切り捨てたX座標を取り出せます。

効率的な掛け算と割り算に付いては、別に説明しますね。


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

Name: Justy  ..伝説なるハッカー(443,136ポイント)   Date: 2009/10/17(土) 12:04   No:40566     
Title: Re:掛け算、割り算を加減算だけで実装したい    

>どうすればいいでしょうか?

 ファミコンはたしか PCレジスタ以外は 8ビットでしたっけ?
 
 なら、C的に言えば unsigned char [2]で擬似的に 16bit計算をするライブラリを
作ってはどうでしょうか。

 今時の int型にしたいなら、unsigned char [4]で。

 つまり、多倍長整数ですね。


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

Name: TKOZ  ..プログラマー(34,325ポイント)   Date: 2009/10/17(土) 12:39   No:40570     
Title: Re:掛け算、割り算を加減算だけで実装したい    
>softyaさん
>Justyさん

ファミコンで大きな桁の値を表す時は、多倍長演算を使うんですね。

>ファミコンはたしか PCレジスタ以外は 8ビットでしたっけ?
はい、そうです。

>なら、C的に言えば unsigned char [2]で擬似的に 16bit計算をするライブラリを
>作ってはどうでしょうか。
ちょっと、やってみます。
ただ、分からない事があれば、質問するか、自分で調べてみます。

とりあえず、四則演算は完璧にしたいですね。それから、比較、出力を実装したいです。


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

Name: Justy  ..伝説なるハッカー(443,300ポイント)   Date: 2009/10/17(土) 13:07   No:40571     
Title: Re:掛け算、割り算を加減算だけで実装したい    

>ファミコンで大きな桁の値を表す時は、多倍長演算を使うんですね

 もう少し限定的なら個別に大きな値を扱う方法があるかもしれませんが、
汎用的に、しかも固定少数での利用となると、これくらいしか思いつかないです。

 でも、経験者なら何か別のアイデアがあるかもしれません。


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

Name: softya  ..上級者(19,616ポイント)   Date: 2009/10/17(土) 13:45   No:40573     
Title: Re:掛け算、割り算を加減算だけで実装したい    
Z80系の人なんで6502に詳しくないですが、とりあえず8ビットCPUで16ビット演算する方法です。
まず簡単な、6502の16ビット加減算
http://sldnoonmoon.hp.infoseek.co.jp/neo/prghabc/d_4.html
8ビットマイコンは、キャリーフラグの活用がキモとなります。、

特に掛け算割り算は、シフト、ローテイトを駆使しないと高速な演算は出来ません。
ややっこしくなるので、16ビットの加減算が理解できるようなら説明しますけど。


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

Name: たかぎ [URL]  ..ハッカー(113,309ポイント)   Date: 2009/10/17(土) 17:24   No:40585     
Title: Re:掛け算、割り算を加減算だけで実装したい    
RP2A03とも6502とも違うので完全互換とはいきませんが...

http://documentation.renesas.com/jpn/products/mpumcu/apn/rjj05b0727_740ap.pdf

↑を参考にすると役に立つ可能性大です。
ただ、RP2A03(あるいは6502)では、Z80なんかに比べても16ビットの演算は非常にやりにくいので、8ビットで済むところは済ます、16ビットが必要でも16ビット×8ビットにする、割り算や小数は極力使わないなどの工夫が必要です。

実機の場合には、MMCやROMのサイズによっては表引きもできなくはないですが、普通は現実的ではないでしょう。
一方でエミュレータの場合は、エミュレータ自身を拡張すれば、ハードウェアの非力さを補うこともできるのではないでしょうか?



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

Name: TKOZ  ..プログラマー(34,387ポイント)   Date: 2009/10/19(月) 16:00   No:40643 解決!     
Title: Re:掛け算、割り算を加減算だけで実装したい    

>>たかぎさん
>>softyaさん
>>Justyさん

数日間、悩んでいましたが、いい情報を得られたので、
解決とさせていただきます。


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



Name: マウ  ..初心者(6,173ポイント)   Date: 2009/10/16(金) 12:05   No:40513       
Title: また質問です    
今自分がしたいのは項目を矢印キーで選択する際、項目に矢印がいったらその項目の画像を同じ画面で表示させたいのですがどのようにすればいいのでしょうか
現在のプログラム↓です
まだいろいろ抜けたりしてますが。。

#include "OP.h"
int optionImg;
<per>
int cursorPos;
int White;
int Key[256];
void SetColor();
void Start();
void Option();
void Exit();
void Select();
int GetHitKeyStateAll_2(int KeyStateBuf[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++;
else KeyStateBuf[i]=0;
}
return 0;
}

enum StateID{
STATE_A,
STATE_OPTION,
STATE_EXIT,
STATE_SELECT,
STATE_END
};



StateID state = STATE_SELECT;

enum ColorID{
COLOR_RED,
COLOR_BLUE,
COLOR_YELLOW,
COLOR_GREEN,
COLOR_CYAN,
COLOR_WHITE,
COLOR_MAX
};

int Color[COLOR_MAX];

typedef struct{
const int r;
const int g;
const int b;
}COLOR;

COLOR CList[COLOR_MAX] = { { 255, 0, 0},
{ 0, 0, 255},
{ 255, 255, 0},
{ 0, 255, 0},
{ 100, 255, 255},
{ 255, 255, 255}};

typedef struct{
int PtX;
int PtY;
char* str;
ColorID c;
const StateID next;
}CHOICES;

CHOICES choices[] = { {60 , 60, "・?????", COLOR_WHITE, STATE_A},
{60 , 90, "・?????", COLOR_WHITE, STATE_OPTION},
{60 , 120, "・?????", COLOR_WHITE, STATE_OPTION},
{750 , 560, "EXIT", COLOR_WHITE, STATE_EXIT}};

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE );
SetGraphMode( 800 , 600 , 32 ) ;

if(DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );
SetColor();
typedef void(*Func)();
Func fc[] = {Start, Option, Exit, Select};

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0 && state != STATE_END){

fc[state]();

ScreenFlip();
}
DxLib_End();
return 0;
}
void Start(void)
{

}
void Option(void)
{

}
void Exit(void)
{
static int count = 150;

if((--count) == 0)
state = STATE_END;
DrawString( 100, 100 , "Exit画面です。" , Color[COLOR_RED]);
DrawString( 100, 120 , "※プログラムを終了します。" , Color[COLOR_WHITE]);
}

void Select(void)
{
int y;
int image;
static int NowPt = 0;
static const int ChoiceNum = sizeof(choices)/sizeof(choices[0]);
White = GetColor( 255, 255, 255 ); // 白色の値を取得
DrawBox( 720, 50, 410, 400, White, FALSE ); // 四角形を描画(左上x座標,左上y座標,右下x座標,右下y座標)
DrawBox( 30, 50, 300, 200, White, FALSE ); // 四角形を描画(左上x座標,左上y座標,右下x座標,右下y座標)

if(Key[KEY_INPUT_DOWN] == 1 || (Key[KEY_INPUT_DOWN] > 10 && Key[KEY_INPUT_DOWN] % 10 == 0)){
choices[NowPt].c = COLOR_WHITE;
NowPt = (NowPt + 1) % ChoiceNum;
}else if(Key[KEY_INPUT_UP] == 1 || (Key[KEY_INPUT_UP] > 10 && Key[KEY_INPUT_UP] % 10 == 0)){
choices[NowPt].c = COLOR_WHITE;
NowPt = (NowPt + ChoiceNum - 1) % ChoiceNum;
}

for(int i = 0; i < ChoiceNum; i++){
if(i == NowPt)
choices[i].c = COLOR_YELLOW;
DrawString( choices[i].PtX , choices[i].PtY , choices[i].str , Color[choices[i].c]);
}
DrawString( choices[NowPt].PtX - 20, choices[NowPt].PtY , "◇" , Color[COLOR_CYAN]);

if(Key[KEY_INPUT_RETURN] == 1){
state = choices[NowPt].next;
choices[NowPt].c = COLOR_WHITE;
NowPt = 0;
}

}
void SetColor(void)
{
for(int i = 0, count = sizeof(CList) / sizeof(CList[0]); i < count; i++)
Color[i] = GetColor(CList[i].r, CList[i].g, CList[i].b);
}



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


Name: conio [URL]  ..熟練のプログラマー(61,980ポイント)   Date: 2009/10/16(金) 13:38   No:40516     
Title: Re:また質問です    

これは、以前 自分が書いたコードを把握出来ないまま追記する形で製作していますよね?
(注釈を一切書かなかった自分のせいですが)

他人のコードなどを利用する場合、
理解しないまま追加していくとコードにおかしな部分が出てきます。

コードがよく分からない時は、自分の分かりやすいコードで全部作ったほうが上手く作業が進んだりしますよ。
(最終的にどうするかは自由に決めてもらってかまいません)

で、どこがおかしいかというと、文字色の指定の部分です。
自分は下記のように記述して色を選択できるようにしました。
------------------------
Color[COLOR_CYAN]
Color[COLOR_RED]
Color[COLOR_WHITE]
Color[COLOR_GREEN]
------------------------
(Colorはグローバルなint型の配列)


しかし、上記のプログラムは「White」というグローバル変数が新たに定義され、
下記のように追記されています。
-------------------------------------------------------------------------------------------
DrawBox( 720, 50, 410, 400, White, FALSE ); // 四角形を描画(左上x座標,左上y座標,右下x座標,右下y座標)
DrawBox( 30, 50, 300, 200, White, FALSE ); // 四角形を描画(左上x座標,左上y座標,右下x座標,右下y座標)
-------------------------------------------------------------------------------------------

今回の場合は、Whiteというグローバル変数を作る必要はありません。
--------------------------------------------------------
DrawBox( 720, 50, 410, 400, Color[COLOR_WHITE], FALSE );
DrawBox( 30, 50, 300, 200, Color[COLOR_WHITE], FALSE );
--------------------------------------------------------
これで十分です。




で、選択肢を表示している状態でまた別の画像を表示させたい場合は、
Select関数の中でswitch文を使ってやるなどして実装できると思います。
------------------------------------------------
void Select(void)
{
//「→ NEW GAME」などの選択肢の表示

switch(//カーソルの場所)
{
case STATE_NEW_GAME: //画像A表示 break;
case STATE_CONTINUE: //画像b表示 break;
case STATE_NEW_GAME: //画像c表示 break;
default:break;
}
}
------------------------------------------------
(おおまかな内容を記述しただけなので、当然このままは動きません)


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

Name: マウ  ..初心者(6,183ポイント)   Date: 2009/10/19(月) 10:58   No:40639     
Title: Re:また質問です    
カーソル位置は自分で定義していいのでしょうか?
y=60のような。


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

Name: conio [URL]  ..熟練のプログラマー(63,200ポイント)   Date: 2009/10/19(月) 12:18   No:40640     
Title: Re:また質問です    

マウさんはどう表示させたいのでしょうか?
自分の好きなように設定すれば問題ないでしょう。

真ん中に表示させたいのならば、真ん中辺りの座標にすれば良いですし、
左上に表示させたいのならば、左上付近の座標を設定すれば良いだけです。

自分が何をしたいか、どう作りたいのかに従って自由に決めてください。


ただ、他人のコードを利用して開発する場合は、
どういう関数があってどう使われているのかを把握して無いと、無駄な部分が出てきたりするので
気をつけてくださいと言うことです。

先日も述べましたが、Color[COLOR_WHITE]で白色を指定できるようにしてあるので、
新たにWhiteというグローバル変数を作るのは無駄が増えるだけになってしまいます。


また上記のプログラムでは、選択肢の座標はCHOICES型の構造体の中で定義されていますので、
その配列の要素を増やしたり、値を変えたりするようにして下さい。
------------------------------------------------------------------------
choices[] = {{60 , 60, "・?????", COLOR_WHITE, STATE_A},
{60 , 90, "・?????", COLOR_WHITE, STATE_OPTIO},
{60 , 120, "・?????", COLOR_WHITE, STATE_OPTION},
{750 , 560, "EXIT", COLOR_WHITE, STATE_EXIT}};
------------------------------------------------------------------------
赤字の部分を変更する。

で、コメントを見たところ、新たにyという変数を作ろうとしているようですが、
前回みたいに、またグローバル変数などを別に作って座標を設定などを行うようにすると、
何のために構造体の配列を作っているのかがわからなくなります。

上記のプログラムの場合は、構造体の配列で座標を設定しているので
その部分の値を変更するようにしてください。


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



Name: kerotan0820  ..中級者(12,655ポイント)   Date: 2009/10/18(日) 05:32   No:40596       
Title: プログラムの実行が出来ない    
しばらく前にC言語に取り組んだのですが、しばらく取り組めずにいたのですが、ニコニコ動画にて解説動(nm6216304)があることをしり、再び少しずつ取り組んでいる最中なのですがこのようなことが起きました。
プログラムに記述ミスは一切無くコンパイルには成功するものの実行をするとエラーが出るというものです。

<環境>
コンパイラ:Borland C++ Compiler
エディタ:C言語を始めよう!

<行った作業>
コンパイラ、エディタのインストール

エディタの設定で、BCC32.exeのパスは設定してあります。

動画(nm6216304)で、以下のようなプログラムを試しに実行しろという指示がありました。

#include<stdio.h>

int main(void){
int a=10;
int b=20;
int c;
c=a+b;
printf( "c= %d\n" ,c);
return 0;
}


F7キーにてコンパイルし、エラーメッセージも無く成功しました。

実行をしようとおもい、F5を押したところ以下のようなメッセージが出ました。

"実行できません!(C:Documents and Settings\ユーザー名\Application Data\phoebe\do_exe.bat)"

このパスにファイルがあるのかを見たとこファイルはあり、どうすれば良いのか分からずにいます。
分かる方がいらっしゃいましたら是非回答をよろしくお願いします


2倍のポイントを手に入れた! 1,176ポイント を手に入れた。


Name: ねこ  ..熟練のプログラマー(46,063ポイント)   Date: 2009/10/18(日) 09:15   No:40598     
Title: Re:プログラムの実行が出来ない    
うろ覚えなんですがBorlandってファイルパスに全角文字(ユーザー名あたり)があるとまずいんじゃなかったでしょうか。
Cドライブの直下あたりに作るようにして再試行してみてはどうでしょう?


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

Name: Justy  ..伝説なるハッカー(443,803ポイント)   Date: 2009/10/18(日) 12:32   No:40599     
Title: Re:プログラムの実行が出来ない    

>実行できません!〜

 同様の現象が公式にも報告はされているようですが、解決には至っていないようでした。

C言語を始めよう! 実行
ttp://hpcgi3.nifty.com/aokura/patio/read.cgi?no=1199


 そのメッセージはどこにどういう形で表示されましたか?
 コマンドプロンプト? それとも(OKボタンがついている)ダイアログの中?
 それとも「C言語をはじめよう」アプリ内のメッセージバー?


 あと、そのパスにファイルはある、とのことですがその "do_exe.bat"を
ビルドして出来た実行ファイル(多分保存したファイル名.exe)と同じディレクトリに
コピーしてそこから直接実行するとどうなりますか?


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

Name: kerotan0820  ..中級者(12,823ポイント)   Date: 2009/10/18(日) 13:10   No:40600     
Title: Re:プログラムの実行が出来ない    
■ねこ様
回答ありがとうございます。
ユーザー名に全角が使われていたために、"c"という名前でユーザーを新規作成し、再び試みたところまた同じように失敗してしまいました;

■Justy様
同じく回答ありがとうございます。
メッセージはコマンドプロントではなく、ダイアログの中です。(OKボタンがついてる)

do_exe.bat(C:\Documents and Settings\c\Application Data\phoebe\do_exe.bat)をデスクトップに保存したプロジェクトの直下{(C:\Documents and Settings\c\デスクトップ\プロジェクト\test)ここにソース(.c)があります}にコピーして配置し、コンパイル、実行をしましたがまた同じエラーメッセージが出ました。


ここはあきらめて違うものをしようするべきですか?


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

Name: Justy  ..伝説なるハッカー(443,997ポイント)   Date: 2009/10/18(日) 13:29   No:40601     
Title: Re:プログラムの実行が出来ない    

>ダイアログの中です

 なるほど、ダイアログの中ですか。



>do_exe.batをデスクトップに保存したプロジェクトの直下にコピーして配置し、
>コンパイル、実行をしましたがまた同じエラーメッセージが出ました

 直接プロジェクトの直下にコピーした do_exe.batを実行するとどうなりますか?


 ちなみに OSは Vistaですか?


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

Name: kerotan0820  ..中級者(12,888ポイント)   Date: 2009/10/18(日) 13:48   No:40602     
Title: Re:プログラムの実行が出来ない    
■Justy様
実行すると、コマンドプロントが立ち上がって
続行するには何かキーを押してください…
とでます。ちなみにキーを押すとウィンドウは閉じてしまいます。

OSはXPです。


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

Name: Justy  ..伝説なるハッカー(444,412ポイント)   Date: 2009/10/18(日) 14:04   No:40603     
Title: Re:プログラムの実行が出来ない    

>OSはXPです

 Vistaだったらいろいろトラップがありそうだなぁ、と思っていたのですが、
XPですか。



>コマンドプロントが立ち上がって

 これ、"C= 30"とかも表示されている、と思っていいですか?

 となると、先に報告されていた現象に結構近いものがありますね。

 このツールの公式掲示板は運用を停止しているようなので
直接メールで訊いてみてはどうでしょうか?

Profile - AOK's Home Page
ttp://homepage3.nifty.com/aokura/profile.html


 或いはこのツール以外にも使い方微妙に異なりますが、
フリーの Borland系の開発環境としては似たようなツールもありますので、
そちらを使用してみるのもいいかもしれません。

BCC Developer
ttp://www.hi-ho.ne.jp/jun_miura/bccdev.htm

Windowsで、タダで開発環境を手に入れよう!
ttp://ja2yka.homeip.net/old/aki/freedev.htm



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

Name: kerotan0820  ..中級者(12,932ポイント)   Date: 2009/10/19(月) 03:42   No:40636     
Title: Re:プログラムの実行が出来ない    
紹介してくださったサイトに沿ってやったのですがいろいろ失敗してしまいます;

以前、C言語をやった際はVisual C++2008を使用していたのですが、それを使うのもありですか?
今はインストールしてないのですが…。


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

Name: けろたん0820  ..ぴよぴよ(20ポイント)   Date: 2009/10/19(月) 05:26   No:40637 解決!     
Title: Re:プログラムの実行が出来ない    
Visual C++2008で試みたところ無事成功しました^^

たくさんの回答ありがとうございました

今後ともよろしくお願いします


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

Name: kerotan0820  ..中級者(12,954ポイント)   Date: 2009/10/19(月) 05:27   No:40638     
Title: Re:プログラムの実行が出来ない    
間違えてけろたんと入力していました;
kerotanです。


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +