C言語何でも質問掲示板

Total hit  今日  昨日  



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

 
   雑魚敵の出現エフェク ....   
     ・[42495] チルチル 
   処理落ちについて   
     ・[42356] Justy 
     ・[42385] サンタクロース 
     ・[42398] Justy 
     ・[42445] サンタクロース 
     ・[42449] Dixq (管理人) 
     ・[42453] yu 
     ・[42483] サンタクロース 
   PS2コントローラーにつ ....   
     ・[42478] t 
     ・[42480] trx 
     ・[42481] trx 
   3D背景について 2 ....   
     ・[42442] Justy 
     ・[42479] ラノイ 
   文字の色   
     ・[42472] kazuoni 
   c言語 行列の積   
     ・[42428] non 
     ・[42430] えん 
     ・[42444] box 
     ・[42458] えん 
     ・[42459] softya 
     ・[42465] non 
   平均値を求めたいんで ....   
     ・[42456] たかぎ 
     ・[42463] 夏天 
   画面サイズ変更につい ....   
     ・[42441] kazuoni 
   無題   
     ・[42424] kazuoni 
     ・[42425] ee 
     ・[42433] kazuoni 
   C言語初心者です   
     ・[42429] non 
     ・[42431] ベル 
   音ゲーの作り方   
     ・[42346] Justy 
     ・[42382] 音ゲーマニア 
     ・[42397] Justy 
     ・[42422] 音ゲーマニア 
   少数が扱えない   
     ・[42419] non 
     ・[42420] kerotan0820 
   3D背景を作ってみよ ....   
     ・[42392] Dixq (管理人) 
     ・[42395] ラノイ 
     ・[42409] Justy 
     ・[42415] ラノイ  
   質問です   
     ・[42412] box 
     ・[42413] non 
   複数音を同時にならす ....   
     ・[42376] バグ 
     ・[42381] ee 
     ・[42408] Justy 
   続 日本語の表示   
     ・[42347] Justy 
     ・[42393] dic 
     ・[42394] Justy 
   龍神録についての質問 ....   
     ・[42389] 御津凪 
     ・[42391] オラウー 
   DXライブラリを使った ....   
     ・[42368] ¥ 
     ・[42369] 御津凪 
     ・[42370] てて 
     ・[42371] 御津凪 
     ・[42374] てて 
     ・[42375] 御津凪 
   無題   
     ・[42365] non 
   タイトル画面が固定し ....   
     ・[42338] ひよこ 
     ・[42364] フランドールの義兄 
   ノベル   
     ・[42362] array 
   ファイルの取得? 2   
     ・[42190] ぽこ 
     ・[42194] くりあ 
     ・[42197] YuO 
     ・[42198] くりあ 
     ・[42361] くりあ 
   exeファイルが異常に大 ....   
     ・[42359] Justy 
   基本型以外のlistのso ....   
     ・[42296] ドラ 
     ・[42311] 山崎 
     ・[42343] ドラ 
     ・[42358] 山崎 
   【雑談】C言語の入門サ ....   
     ・[41865] たかぎ 
     ・[41867] ぽこ 
     ・[41873] たかぎ 
     ・[41874] 組木紙織 
     ・[41882] non 
     ・[41884] Mist 
     ・[41887] すずめ 
     ・[41895] kazuoni 
     ・[41901] dic 
     ・[41904] nayo 
     ・[41907] たかぎ 
     ・[41908] たかぎ 
     ・[41910] non 
     ・[41911] たかぎ 
     ・[41918] non 
     ・[41919] sizuma 
     ・[41922] たかぎ 
     ・[41924] たかぎ 
     ・[41931] non 
     ・[41932] たかぎ 
     ・[41933] たかぎ 
     ・[41936] array 
     ・[41937] CERN 
     ・[41938] たかぎ 
     ・[41940] たかぎ 
     ・[41943] array 
     ・[41953] たかぎ 
     ・[41960] YuO 
     ・[41985] コメカミ 
     ・[41987] コメカミ 
     ・[41996] たかぎ 
     ・[42005] コメカミ 
     ・[42006] コメカミ 
     ・[42007] コメカミ 
     ・[42009] たかぎ 
     ・[42010] たかぎ 
     ・[42045] tkmakwins15 
     ・[42046] たかぎ 
     ・[42085] hoge 
     ・[42086] たかぎ 
     ・[42087] たかぎ 
     ・[42095] hoge 
     ・[42096] たかぎ 
     ・[42105] tkmakwins15 
     ・[42106] たかぎ 
     ・[42122] たかぎ 
     ・[42232] まりも 
     ・[42240] たかぎ 
     ・[42273] Hermit 
     ・[42282] たかぎ 
     ・[42293] まりも 
     ・[42294] まりも 
     ・[42305] Mist 
     ・[42307] たかぎ 
     ・[42348] まりも 
     ・[42349] たかぎ 
     ・[42350] たかぎ 
   オイラー、フーリェに ....   
     ・[42202] kuroka 
     ・[42204] softya 
     ・[42260] kuroka 
     ・[42262] softya 
     ・[42270] kuroka 
     ・[42272] softya 
     ・[42344] kuroka 
   教えてください☆   
     ・[42340] non 
   配列構造体   
     ・[42326] non 
     ・[42327] toyo 
     ・[42331] SSS 
     ・[42334] Hermit 
   タイトル画面になって ....   
     ・[42325] dic 
     ・[42330] フランドールの義兄 
   ゲームパットのプログ ....   
     ・[42253] 電気屋 
     ・[42254] toyo 
     ・[42255] softya 
     ・[42319] 電気屋 
     ・[42320] 電気屋 
   文字の配列変数を一文 ....   
     ・[42317] Mist 
     ・[42318] Sakana 
   どうしても、ゲームオ ....   
     ・[42256] softya 
     ・[42275] TKOZ 
     ・[42277] TKOZ 
     ・[42285] softya 
     ・[42316] TKOZ 
   文字列を用いたプログ ....   
     ・[41982] non 
     ・[42154] yatta 
     ・[42162] non 
     ・[42312] yatta 
     ・[42313] conio 
     ・[42314] non 
     ・[419761259023495] yatta 
     ・[419761259026744] yatta 
     ・[419761259632841] yatta 
   C初心者ですw問題教え ....   
     ・[42301] kazuoni 
     ・[42302] array 
     ・[42309] とりとり 
     ・[42310] non 
   初期集団の生成   
     ・[42304] non 
   無題   
     ・[42292] ベース 
     ・[42295] ドラ 
     ・[42297] ベース 
     ・[42299] YuO 
     ・[422911259534851] Naohiro19 
   入力で表示される文字 ....   
   アイコンが付けられな ....   
     ・[42276] Justy 
     ・[42279] 初心者 
     ・[42280] Justy 
     ・[42281] 初心者 
     ・[42283] Justy 
     ・[42284] 初心者 
     ・[42286] Justy 
   作れません...   
     ・[42249] softya 
     ・[42258] 初級者 
     ・[42264] conio 
     ・[42269] high_lows 
   弾の描画について   
     ・[42003] ひよこ 
     ・[42008] Ω 
     ・[42012] ひよこ 
     ・[42100] Ω 
     ・[42101] ひよこ 
     ・[42168] Ω 
     ・[42176] ひよこ 
     ・[42212] Ω 
     ・[42213] ひよこ 
     ・[42250] Ω 
     ・[42261] ひよこ 
     ・[42268] Ω 
   他のコードを実行   
     ・[42267] softya 
   ステートパターンにつ ....   
     ・[42228] ドラ 
     ・[42239] でんすけ 
     ・[42251] でんすけ 
   キャラクタ移動につい ....   
     ・[42247] Mist 
   セーブ時とロード時の ....   
     ・[42244] Mist 
     ・[42246] Ma 
   nowladingについて   
     ・[42220] たこやき 
     ・[42221] softya 
     ・[42222] たこやき 
     ・[42223] たこやき 
     ・[42226] softya 
     ・[42227] たこやき 
     ・[42229] softya 
     ・[42230] たいやき 
     ・[42233] softya 
     ・[42234] softya 
     ・[42235] たこやき 
     ・[42236] たこやき 
     ・[42237] たこやき 
     ・[42242] たこやき 
   Releaseについて   
     ・[422411258878985] チルチル 
   間違えが見つけられま ....   
     ・[42215] kazuoni 
     ・[42216] box 
     ・[42218] zoo 
     ・[42231] kazuoni 

Name: ペータ  ..ぴよぴよ(774ポイント)   Date: 2009/11/21(土) 12:17   No:42421       
Title: 雑魚敵の出現エフェクト    
画像のように敵が出現する時にエフェクトが入るようにしたいと思い、コードを作りましたが
思うように表示されませんでした…。
敵の行動パターンはhttp://dixq.net/rp/12.htmlのパターン9で
画面にいきなりでてくるのをエクセルで指定しました。
敵は表示されるのですが、エフェクトが表示されないのです…。
エフェクトは0から4の5枚で
16カウントの間に
カウントの値 3,6,9,12,15 でエフェクトが順番に表示されるようにしています。
これはenemy[i].flagが1になったら、i番目のエフェクトのフラグも1にして、i番目のカウントの値が
16以上になったら、i番目のエフェクトのフラグをオフにするという方法です。
app[i].sizeについてですが、最初はi番目のsizeに3.2と大きめに値を代入し、徐々に
0.2ずつ、縮小しています。

struct.h-------------
struct apper_t{
int size,flag,cnt;
};
GV.h-------------
GLOBAL apper_t app[ENEMY_MAX];
void graph_appeff(){
int i;
for(i=0;i<ENEMY_MAX;i++){
if(enemy[i].flag==1){
app[i].flag=1;
SetDrawBlendMode( DX_BLENDMODE_ADD, 225) ;
DrawRotaGraphF(enemy[i].x+FX+dn.x,enemy[i].y+FY+dn.y,app[i].size,0.0f,img_app_effect[0][app[i].cnt],TRUE);
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
if(app[i].cnt<16){
if(app[i].cnt==0)
app[i].size=3.2;
if(app[i].cnt%3==0){
app[i].cnt++;
app[i].size-=0.2;
}
if(app[i].cnt>=16){
app[i].flag=0;
}
}
}
}
}

どなたか、お力をお貸し頂けないでしょうか…?


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


Name: チルチル  ..比類無きプログラマー(79,223ポイント)   Date: 2009/11/22(日) 17:31   No:42495     
Title: Re:雑魚敵の出現エフェクト    
とりあえず敵出現時に

DrawRotaGraphF(enemy[i].x+FX+dn.x,enemy[i].y+FY+dn.y,app[i].size,0.0f,img_app_effect[0][app[i].cnt],TRUE);

を通っているのでしょうか?


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



Name: サンタクロース  ..ぴよぴよ(182ポイント)   Date: 2009/11/20(金) 00:00   No:42353       
Title: 処理落ちについて    
>>管理人さん
「44章について」の投稿は、私が誤ってkaiさんの名前と重複してしまったものなので削除していただけるとありがたいです。

44章では各関数毎に処理速度を測定できるようにしていますが、
graph_main()でもし処理が重い場合、どの部分を見直すべきなのでしょうか。
また("最初")というのもありますがこれはどのような処理速度を測定しているのですか?
自分のは("最初")の処理だけで16〜17ms←(すみません、単位がわからないですが)
という大きな値になってしまうのですが、これも処理の軽減の解決策はあるのでしょうか?


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


Name: Justy  ..伝説なるハッカー(463,625ポイント)   Date: 2009/11/20(金) 00:43   No:42356     
Title: Re:処理落ちについて    

> 自分のは("最初")の処理だけで16〜17msという大きな値になってしまうのですが

 44章の説明文に書いてある通り ScreenFlip()の中で垂直同期待ち
(裏画面にある絵を表にするのに最適なタイミングになるのを待っている)を
しているのでその時間が含まれています。

 つまりここで最終的なフレームレートを整える為の処理が
入っているとも言えますので、龍神録の性質上そこはあまり気にする必要は
ないかと思います。


 試しに WinMain関数の ScreenFilp()の下のところに

    enter_func_tm("ScreenFlip");

としてみて下さい。

 “最初”の時間の大半が “ScreenFlip”の方に移っているはずです。


 どうしても、ScreenFlip()を軽くしたいのであれば、

    SetWaitVSyncFlag(FALSE);

を DxLib_Init()の後にでもいれれば、ScreenFlip()での垂直同期待ちを
しなくなるので、ScreenFlip()の処理そのものは軽くなりますが、
今度は fps_wait()に時間がかかるようになります。

 これは fps_wait()でフレームレート(fps)をできるだけ一定に保とうと
(内部でウエイトを入れている)しているので、1フレームの処理が
早く終わってしまい空き時間が多くなればなるほどここが大きな値となります。

 最終的にこの状態から fps_wait()の処理をコメントアウトすれば
ほぼ最速でうごくようになるはずです。
 ただ代わりに fpsは不定となるので、それに合わせたゲームの設計が必要になります。


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

Name: サンタクロース  ..ぴよぴよ(353ポイント)   Date: 2009/11/20(金) 20:46   No:42385     
Title: Re:処理落ちについて    
返信ありがとうございます。
SetWaitVSyncFlag(FALSE);
でたしかに処理速度は上がりましたが、描画ががたがたした状態になってしまったので
もうひとつのgraph_main()の処理落ちにあたってみようとおもうのです。
graph_main()では、画像のx座標や角度を出す計算式によって処理落ちするのでしょうか
それとも画像そのもの(量的に?)問題があるのでしょうか


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

Name: Justy  ..伝説なるハッカー(464,691ポイント)   Date: 2009/11/21(土) 00:12   No:42398     
Title: Re:処理落ちについて    

> graph_main()では、画像のx座標や角度を出す計算式によって処理落ちするのでしょうか
> それとも画像そのもの(量的に?)問題があるのでしょうか

 難しいところです。
 graph_main()の中をみると判りますが、多数の関数を呼び出しを行っているので、
その中のどれに時間がかかっているのかを割り出す必要があります。

 graph_main()の中ではDXライブラリ関数の中を除けば、ほとんど座標や角度を
求めたりはしていません(グラフィックスを扱う名を持つ関数の中ですることではないですしね)。
 疑わしいところといえば、ループの処理回数と、その中で行われている画像の描画処理でしょう。

 まずは、graph_main()の中のどこに時間がかかっているのかを調べ、一番負荷の高いところから順に
その中のループ回数・描画回数を減らす、素材のサイズを小さくする、描画面積を減らす、などを
試みてみるといいのではないでしょうか。


 ところで、そんなことをしなければならないほど、サンタクロースさんの環境では
処理が一杯一杯なのでしょうか?


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

Name: サンタクロース  ..ぴよぴよ(558ポイント)   Date: 2009/11/21(土) 18:45   No:42445     
Title: Re:処理落ちについて    
すみません、伝えるのを忘れていました。
というよりはこの掲示板に投稿してよかったのかもわからないのですが、自分は一応PSPで作っています。
そのせいでボス弾幕「サイレントセレナ」ではgraph_main()が30〜40msまであがります。
おそらくは弾の描画関数に問題があると思います。
そこで初歩的な質問ですが
first_ini()で弾の計算を配列を用いてあらかじめしておいてボスのショットの計算の時に値を代入するように
したいのですが、値を保持したままボスショット計算の関数に渡せばいいのかわかりません。
どうすればよいでしょうか


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,086,752ポイント)   Date: 2009/11/21(土) 21:43   No:42449     
Title: Re:処理落ちについて    
>名前の重複

今までにこれだけの種類の名前が使われたので
http://www.play21.jp/board/ranking.cgi?id=dixq
適当につけても被って不思議はないと思います^^;
ですのでお気になさらず。
完全にユニークな名前を付けたいなら、リンク先の画面で検索して
その名前がないことを確認するとよいと思います。

で、処理に時間がかかるのは、私の勝手な想像ですが、軌道計算ではなく、描画そのものではないでしょうか?
弾幕を描画するとき、かなり大量な描画が行われます。
PSPの性能がどれ位か知りませんが、ちょっと前の古いPCだと思えば、処理落ちしている原因は描画ではないかと(ただPSPの場合昔のPCより描画に特化しているはずなので、わかりませんが)
一度描画関数graph_mainを呼ばなかったときどれ位になるか試してみたらわかるのではないでしょうか?

で、配列の件ですが、軌道計算がボトルネックになっていないのなら意味がないです。

やはり、それより描画を工夫された方がよいかと。
PSP系の話は最近ホットなようなので、他の方がどのような工夫されているか調べてみてはいかがでしょう。
出来るだけアルファブレンドしないとか、FALSE指定で描画出来るところはするとか・・。
あと、DXライブラリではないですが、SDLというライブラリでは、アルファブレンド値を128にすると
他のブレンド値よりも描画がとても速くなるという性質があります。
(つまり127とか指定する位なら128にしろということ)
DXライブラリにもそういう高速化出来る何かがあるかもしれませんね。
詳しい話は製作者様にお聞きになるといいと思います。

なお、msというのはミリ秒です。1000ミリ秒=1秒です。
1フレーム辺りの時間が16ms〜17msとなる理由は1秒を60フレームで割ってみるとわかりますね。


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

Name: yu  ..熟練のプログラマー(40,440ポイント)   Date: 2009/11/21(土) 22:18   No:42453     
Title: Re:処理落ちについて    
>>サンタクロース様

おそらくサンタクロース様はDXライブラリPortableを使用していると思いますが
それならば、本家のBBSで描画についての高速化が詳しく書いてあるので参考にしてみてはいかがでしょうか

http://dxlibp.sourceforge.jp/


>> 管理人様
>>DXライブラリにもそういう高速化出来る何かがあるかもしれませんね。

SetDrawBright関数ですが、以前にこんなことが書かれていました。

http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1309


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

Name: サンタクロース  ..ぴよぴよ(717ポイント)   Date: 2009/11/22(日) 14:51   No:42483     
Title: Re:処理落ちについて    
わけのわからない事態に陥りました。
graph.cpp内で内容を変更することはおろか、空白の部分をスペースキー一回押すだけでも
graph_back,board,fps,check_time,develop
以外の全ての画像が描画されなくなってしまいます。
画像は全てパレット形式に統一してあります。
スペースキーですらこうなるので、原因がさっぱりわからないです


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



Name: trx  ..かけだし(1,471ポイント)   Date: 2009/11/22(日) 13:47   No:42477       
Title: PS2コントローラーについて    
皆様お久しぶりです。
前回は、皆様真に有難うございました。
早速なのですが、今PS2のコントローラーで動く、プログラムを製作中です。
そこで
GetJoypadInputState
を使っているのですが、
この関数だと、http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_input.html#R5N4
で紹介されているように、1〜8までしか出来ません。
残りの、9〜16を使うには、どの様にすれば良いのでしょうか?(現在16番を使いたいのです)
Windows XP、Borland、DxLib、を使っています。
回答よろしくお願いします。


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


Name:  ..ぴよぴよ(20ポイント)   Date: 2009/11/22(日) 13:54   No:42478     
Title: Re:PS2コントローラーについて    
一つ言い忘れていました、
秘密の所は、読みましたが意味が解りません。
それで、書き込みました。


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

Name: trx  ..中級者(10,408ポイント)   Date: 2009/11/22(日) 14:03   No:42480     
Title: Re:PS2コントローラーについて    
すみません、自分で自分の問題解決してしまいました。
今後は、確りと読みます...


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

Name: trx  ..中級者(10,413ポイント)   Date: 2009/11/22(日) 14:04   No:42481 解決!     
Title: Re:PS2コントローラーについて    
解決

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



Name: ラノイ  ..ぴよぴよ(799ポイント)   Date: 2009/11/21(土) 09:46   No:42416       
Title: 3D背景について 2D画像に奥行き 59章の床のような描画    
前回のスレを解決にしてしまったので、スレをもう一度立てることをお許しください…。
本当にすみません…。

管理人さんやJustyさんに教えて頂いて、理論はできたのですが…1つ問題がでてきました…。

今、新たに3Dのサンプルプログラムをいじって勉強しているのですが
59章のような床みたいに、2D画像が画面に近ければ大きくなり、画面から離れていれば、小さくなる
という奥行きを作る関数がDXライブラリに見当たりませんでした。
つまり、画面に向いているのをZ軸方向に向かせるということなんですが…
DrawBillboard3Dで画像を3D上に表示させましたが、Z軸方向に向かせる引数がありませんでした…。
DrawModiBillboard3Dはいけるかなと思いやってみましたが、やっぱりできませんでした。
xy平面上でいろいろ変形できる関数だということをさっき理解しました。

このような処理をする関数は自作するしかないのでしょうか…?


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


Name: Justy  ..伝説なるハッカー(465,275ポイント)   Date: 2009/11/21(土) 17:57   No:42442     
Title: Re:3D背景について 2D画像に奥行き 59章の床のような描画    

> 2D画像が画面に近ければ大きくなり、画面から離れていれば、小さくなる

 DrawBillboard3Dでできると思います。

 59章のままなら第一引数にあたえる VECTOR型の z要素を変更すれば
その位置に応じて大きさが変わります。


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

Name: ラノイ  ..ぴよぴよ(831ポイント)   Date: 2009/11/22(日) 13:56   No:42479 解決!     
Title: Re:3D背景について 2D画像に奥行き 59章の床のような描画    
あ、できました!
2度も教えて頂きありがとうございます!


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



Name: uu  ..ぴよぴよ(100ポイント)   Date: 2009/11/22(日) 09:17   No:42467       
Title: 文字の色    
例えば スコア300という文字列があったとします。
スコアを白、300を赤としたいです。この場合私は二つのDrawFormatString関数を
使って設定していますが、ひとつの関数でまとめることは可能でしょうか?
よろしくお願いします。


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


Name: kazuoni [URL]  ..ハッカー(114,709ポイント)   Date: 2009/11/22(日) 12:29   No:42472     
Title: Re:文字の色    
例えば、それを関数化して、
int MyDrawFormatString(int x, int y, const char *str, int score, int color1, int color2 )

{
const int distance = 16;
DrawFormatString(x, y, color1, "%s ",str);
DrawFormatString(x+GetDrawStringWidth(str, 0xff)+distance, y, color2, "%d\n",score);
return 0;
}


なんて書けます。


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



Name: えん  ..ぴよぴよ(74ポイント)   Date: 2009/11/21(土) 14:36   No:42427       
Title: c言語 行列の積    
こんにちわ 行列の積をしています。
自分で
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
float a[2][3]/*={{1,2,3},{4,5,6}}*/;
float b[3][4]/*={{1,2,3,4},{5,6,7,8},{9,10,11,12}}*/;
float c[2][4];
int i,j,k;
for(i=0; i<2;i++){
for(j=0; j<4;j++){
c[i][j]=0.0;
for(k=0;k<3;k++){
c[i][j]+=a[i][k]*b[k][j];
}
}
}
for(i=0;i<2;i++){
for(j=0;j<4;j++){
printf("%6.1f",c[i][j]);
}
printf("\n");
}
}
まで、できたのですが要素をrandを50〜−50の間とするというので詰まっています。
rand()%50をどっかに埋めればいいと思うのですがアドバイス願います。


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


Name: non  ..比類無きプログラマー(70,781ポイント)   Date: 2009/11/21(土) 14:56   No:42428     
Title: Re:c言語 行列の積    
なぜ、行列の積で乱数が必要なのか説明願います。

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

Name: えん  ..ぴよぴよ(93ポイント)   Date: 2009/11/21(土) 15:01   No:42430     
Title: Re:c言語 行列の積    
すいません。行列aとbを関数randを利用して初期化したいのです。

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

Name: box  ..ハッカー(146,415ポイント)   Date: 2009/11/21(土) 18:41   No:42444     
Title: Re:c言語 行列の積    
今のコードでは、「どんな」aとbの積がcであるかがわかりません。
aとbに乱数を使うとなおさらです。
cの内容が「本当に」正しいかが検証できません。
それでもよいのですか?


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

Name: えん  ..ぴよぴよ(120ポイント)   Date: 2009/11/21(土) 23:42   No:42458     
Title: Re:c言語 行列の積    
行列の出力がないとよくないですね。
a、bを出力した上で、計算するようにお願いします。


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

Name: softya  ..熟練のプログラマー(45,425ポイント)   Date: 2009/11/22(日) 00:00   No:42459     
Title: Re:c言語 行列の積    
>行列の出力がないとよくないですね。
>a、bを出力した上で、計算するようにお願いします。

そこは、えんさんがプログラムされたほうが良いと思います。
あくまでも、この掲示板のスタンスはお手伝いするといった方向ですので。Cの要素を表示できているのならa,bも難しくありませんよね?

本来の質問自体の疑問として行列の値はfloatなんですが、rand()%50では整数しか扱えません。その精度でよろしいのですか?




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

Name: non  ..比類無きプログラマー(70,840ポイント)   Date: 2009/11/22(日) 08:52   No:42465     
Title: Re:c言語 行列の積    
>50〜−50の間
-50<= rand <=50 なら
(rand() % 101) - 50


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



Name: buuu  ..ぴよぴよ(19ポイント)   Date: 2009/11/21(土) 22:32   No:42455       
Title: 平均値を求めたいんですが。。。    
平均値が正常に求められないのですが、どうすればよいでしょうか??

include<stdio.h>
#define SIZE 10
int main(void)
{
int i,x,f,v;
int score[SIZE+1],max=0,min=100;
for(i=1;i<=10;i++)
{
printf("データ[No.%d]を入力して下さい:",i);
scanf("%d",&x);
score[i]=x;
}
printf("データの一覧を表示します\n");
for(i=1;i<=SIZE;i++)
{
printf("[No.%d]%d\n",i,score[i]);
}

for(i=1;i<=SIZE;i++)
{
if(max<score[i])
{
max=score[i];
f=i;
}
}
for(i=1;i<=SIZE;i++)
{
if(min>score[i])
{
min=score[i];
v=i;
}
}
printf("\n");
printf("平均値:%.2f\n",(double)i/10);
printf("最大値:%d(No.%d)\n",max,f);
printf("最小値:%d(No.%d)\n",min,v);
}


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


Name: たかぎ [URL]  ..ハッカー(123,606ポイント)   Date: 2009/11/21(土) 22:44   No:42456     
Title: Re:平均値を求めたいんですが。。。    
> どうすればよいでしょうか??

とりあえず、規約を読んで、それを守るところから始めてみては?


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

Name: 夏天  ..初心者(6,675ポイント)   Date: 2009/11/22(日) 03:07   No:42463     
Title: Re:平均値を求めたいんですが。。。    
利用規約にはタグを使うと書いてありますので

とりあえずタグを使ってコードを置いておきます

#include<stdio.h>
#define SIZE 10
int main(void)
{
int i,x,f,v;
int score[SIZE+1],max=0,min=100;
float Ave=0;
for(i=1;i<=10;i++)
{
printf("データ[No.%d]を入力して下さい:",i);
scanf("%d",&x);
score[i]=x;
Ave+=x;
}
printf("データの一覧を表示します\n");
for(i=1;i<=SIZE;i++)
{
printf("[No.%d]%d\n",i,score[i]);
}

for(i=1;i<=SIZE;i++)
{
if(max<score[i])
{
max=score[i];
f=i;
}
}
for(i=1;i<=SIZE;i++)
{
if(min>score[i])
{
min=score[i];
v=i;
}
}
printf("\n");
printf("平均値:%.2f\n",(double)Ave/10);
printf("最大値:%d(No.%d)\n",max,f);
printf("最小値:%d(No.%d)\n",min,v);
return 0;
}


このままだと質問が抽象的過ぎてどこが分からないのかこちら側から無い状態です

人によっては宿題を丸投げにとってしまう可能性もあります

コードの説明に入ります
>printf("平均値:%.2f\n",(double)i/10);
iはループカウンタをさしているようなので最後にはi=11が代入されます
ですのでどんな数値を入れても11/10を行ってしまうわけです
平均を出す用の変数(今回はAve)を作ってそれに合計を入れてください
score[i]=x;の下にAve+=x;を入れてみてはどうでしょうか?
そして表示するときに合計/10をするのです
printf("平均値:%.2f\n",(double)Ave/10);
こんな感じです

プログラムがんばってください



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



Name: kazu  ..入門者(3,405ポイント)   Date: 2009/11/21(土) 17:05   No:42438       
Title: 画面サイズ変更について    
はじめまして。プログラミング初心者のkazuです。
先日からゲームの作成を始めたのですが、ウインドウのサイズ変更はできないのでしょうか。
探し方が悪いのか見落としているのかもしれませんが、ウインドウサイズの変更方法を教えてください。
よろしくおねがいいたします。


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


Name: kazuoni [URL]  ..ハッカー(114,527ポイント)   Date: 2009/11/21(土) 17:57   No:42441     
Title: Re:画面サイズ変更について    
環境を明確にしてください。
WINAPIならば、CreatWindow()の引数をいじったり、SetWindowPos()を呼べばよいです。


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



Name: ee  ..ぴよぴよ(132ポイント)   Date: 2009/11/21(土) 13:50   No:42423       
Title: 無題    
CheckHitKey関数について質問です。
この関数はキーボードでボタンを押すことで入力したか、してないかうけつけますが、
仮に押した瞬間離したりしたら、入力していないことになるのでしょうか?


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


Name: kazuoni [URL]  ..ハッカー(114,353ポイント)   Date: 2009/11/21(土) 14:13   No:42424     
Title: Re:無題    
>入力していないことになるのでしょうか?

っというよりは、戻り値が1→0になります。

参考:本家
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_input.html#R5N2


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

Name: ee  ..ぴよぴよ(184ポイント)   Date: 2009/11/21(土) 14:31   No:42425     
Title: Re:無題    
私の聞き方がわるかったと思いますが
入力すると1が返り、入力していないと0が戻ってきますよね?
ただこの戻り値1はずっと継続されるのでしょうか?ということです。


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

Name: kazuoni [URL]  ..ハッカー(114,494ポイント)   Date: 2009/11/21(土) 15:18   No:42433     
Title: Re:無題    
>ただこの戻り値1はずっと継続されるのでしょうか?
調べてみればわかりますが、押している間は1が返ってきます。


>押した瞬間離したりしたら
キーボードを押したつもりになって、実際は押せていないなどは確かに0のままですが、
FPS=60ならば、どんなに瞬時に離したつもりでも、
数〜数十ループ間は1が返ってくると思います。


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



Name: ベル  ..ぴよぴよ(11ポイント)   Date: 2009/11/21(土) 14:32   No:42426       
Title: C言語初心者です    
本サイト様のゲームプログラミングの館で勉強させてもらっています。

進んでいくにつれてわからないところがでてきたので、
質問させてください。



#include "DxLib.h"

typedef struct{
int x,y,img;
}ch_t;

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

int image[16];
char Key[256];
ch_t ch;

if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

ch.x =320;
ch.y =240;

SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了

if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右ボタンが押されたら
ch.x++ ; //xの値を1増やす

else if(ch.x%32!=0) //32で割り切れない区間はオートで進む
ch.x++;


ch.img=image[12];
DrawGraph( ch.x , ch.y , ch.img , TRUE ) ; //[12]の画像を描画
ScreenFlip();//裏画面を表画面に反映
}

DxLib_End();
return 0;
}



なぜここはelse ifなのでしょうか?

if( Key[ KEY_INPUT_RIGHT ] == 1 )
が真の場合、elseの条件は実行されないのではないのですか・・・?



わかりずらくてすみません・・・;;


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


Name: non  ..比類無きプログラマー(70,803ポイント)   Date: 2009/11/21(土) 14:57   No:42429     
Title: Re:C言語初心者です    
キーから手を離しても32の倍数まで進むためです。


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

Name: ベル  ..ぴよぴよ(66ポイント)   Date: 2009/11/21(土) 15:09   No:42431 解決!     
Title: Re:C言語初心者です    
ああ、なるほど・・・!

手を離している状態だと
Key[ KEY_INPUT_RIGHT ] == 0
になるから
偽になる、ということ・・・ですよね!

わかった気がします
ありがとうございましたっ!


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



Name: 音ゲーマニア  ..ぴよぴよ(138ポイント)   Date: 2009/11/19(木) 20:27   No:42335       
Title: 音ゲーの作り方    
私も音ゲーを作ろうと思っていますが、
分からないことがあるのでいくつか質問させてもらいます。

・音楽と処理の同期
 処理落ちで音楽と処理がずれないようにする
・ファイル検索
 指定フォルダの中(サブフォルダを含む)の譜面データ(仮に.sco)を探す
song

−a−aa−sample1.sco

−b−sample2.sco

−sample3.sco

環境は、
・VC++
・C言語とDXライブラリ
です。

よろしくお願いします。


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


Name: Justy  ..伝説なるハッカー(462,885ポイント)   Date: 2009/11/19(木) 22:15   No:42346     
Title: Re:音ゲーの作り方    

> 音楽と処理の同期

 基本となるのはやはりサウンドの再生なので、そのフレームでの
サウンドの再生時間(再生位置)を調べて、その時間に合わせた表示を
行うことでズレは最小限になります。

 DXライブラリだと GetSoundCurrentTime() とか GetSoundCurrentPosition()あたりでしょうか。


 この手法は突き詰めれば、(任意の時間への)シークや早送り・巻き戻しも可能になりますが、
そこまでがっちりとしたものでなくてもいいです。


C言語何でも質問掲示板
http://www.play21.jp/board/formz.cgi?action=res&resno=38881&page=&lognum=119&id=dixq&rln=38921




> ファイル検索

 Windows APIの FindFirstFile〜FindNextFile〜FindCloseでごりごりと
再帰しながら探すことになります。

 或いは _findfirst〜_findnext〜_findcloseとかでもいいですね。

 参考になりそうなページを載せておきます。

C言語何でも質問掲示板
http://www.play21.jp/board/formz.cgi?action=res&resno=26619&page=&lognum=84&id=dixq&rln=26870

C言語何でも質問掲示板
http://www.play21.jp/board/formz.cgi?action=res&resno=31182&page=&lognum=96&id=dixq&rln=31200



[SDK] ファイルの列挙処理(再起処理) [FindFirstFile]
http://shoppers-jp.com/tech/sdk017.html

FindFirstFile
http://nienie.com/~masapico/api_FindFirstFile.html

FindNextFile
http://nienie.com/~masapico/api_FindNextFile.html

FindClose
http://nienie.com/~masapico/api_FindClose.html


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

Name: 音ゲーマニア  ..ぴよぴよ(76ポイント)   Date: 2009/11/20(金) 19:26   No:42382     
Title: Re:音ゲーの作り方    
返答有難うございます。m(._.)m

>音楽と同期
 もう一ついいでしょうか??
 動画を音楽と同期するにはどうすればいいでしょうか?

>ファイル検索
 大変参考になりました。^^


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

Name: Justy  ..伝説なるハッカー(464,192ポイント)   Date: 2009/11/20(金) 23:50   No:42397     
Title: Re:音ゲーの作り方    

> 動画を音楽と同期するにはどうすればいいでしょうか?

 動画と音楽ですか?
 動画の中の音声トラックに音楽をいれておけば、勝手に同期してくれると思いますけど。

 入れられないようなら、その動画と音声の一部、もしくは全部をメモリに読み込んだ上で
同時に再生を始めれば微妙にずれるかもしれませんが(マシンパワーが十分なら)
一応同期できそうな気がします。


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

Name: 音ゲーマニア  ..ぴよぴよ(142ポイント)   Date: 2009/11/21(土) 12:25   No:42422 解決!     
Title: Re:音ゲーの作り方    
StepManiaがそうだったので、分けたほうがいいのかなと…

動画に音声トラックを入れるやり方で行きたいと思います

有難うございました!


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



Name: kerotan0820  ..上級者(18,433ポイント)   Date: 2009/11/21(土) 10:08   No:42417       
Title: 少数が扱えない    
今、テストの結果をいろいろと計算してくれるソフトを遊びで作っているのですが、それに内申と換算内申を計算する機能を追加しようと思い、別でプログラムを組んでみたのですが、換算内申(内申×1.3)の結果が表示されません。
プログラムはこれです

#include<stdio.h>
int main(void){
int kokugo,sugaku,rika,shakai,eigo,taiiku,ongaku,gika,bijutu,a,b;
double c,d;

printf("全科の内申を入力してください\n");
printf("国語:"); scanf_s("%d",&kokugo);
printf("数学:"); scanf_s("%d",&sugaku);
printf("理科:"); scanf_s("%d",&rika);
printf("社会:"); scanf_s("%d",&shakai);
printf("英語:"); scanf_s("%d",&eigo);
printf("体育:"); scanf_s("%d",&taiiku);
printf("音楽:"); scanf_s("%d",&ongaku);
printf("技家:"); scanf_s("%d",&gika);
printf("美術:"); scanf_s("%d",&bijutu);
printf("\n\n");
a=kokugo+sugaku+rika+shakai+eigo;
b=gika+ongaku+bijutu;
c=b*1.3;
d=(double)c+a;
printf("■結果■\n");
printf("内申:%d\n",a);
printf("換算:%d\n",d);
scanf("%d");

return 0;
}



5教科を"a"に代入
3教科を"b"に代入
3教科(b)×1.3をし、それを"c"に代入
3教科と1.3の積に5教科(a)を足し、それを"d"に代入

5教科を表示
>>printf("内申:%d\n",a);
換算内申の表示
>>printf("換算:%d\n",d);

のようなものです。

換算内申が0と表示されてしまいます…どうれば良いのでしょうか 
ご教授お願いします


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


Name: non  ..比類無きプログラマー(70,759ポイント)   Date: 2009/11/21(土) 10:38   No:42419     
Title: Re:少数が扱えない    
>printf("換算:%d\n",d);
%dを%fに。


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

Name: kerotan0820  ..上級者(18,460ポイント)   Date: 2009/11/21(土) 11:22   No:42420 解決!     
Title: Re:少数が扱えない    
■non様
ありがとうございます
解決しました


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



Name: ラノイ  ..ぴよぴよ(382ポイント)   Date: 2009/11/20(金) 20:48   No:42386       
Title: 3D背景を作ってみようについて 床が中心からきてしまう…    
こんにちは、自分は今、57〜59章の3D背景を作ってみようというところをやっています。
そこで、床部分の描画について質問があります。
この床部分は最初画面の中心から下に向かってながれていますが、
これを画面のちょっと上部分から下に向かって流れるようにしたいと考えています。
床の描画ではどうしても中心から画像がフェードインしてくるのですが、
これはDXライブラリの仕様なんでしょうか…?

東方の星蓮船の1面や風神録の1面を想像して頂けるとおわかりいただけると思います。
念のため、星蓮船の1面の画像を添付させて頂きます。

59章の床画像の初期化で
IniObj(&Object[0], ImgHandle, 512, 0, 0, 256, 128, 450, 50, 2, 1000, 600, -200, -400, 48, 470-90, OBCHILD_MAX);
という風にGraphY部分のところを240よりも大きい数字にしたのですが、
そうすると、逆に中心から上に向かって流れるようになってしまいます。

57章をいじり、画像が少し上部分から下へ向かっていくプログラムを作ったので
添付しておきます。
DLキーワードは「123」です。
http://www1.axfc.net/uploader/H/so/92754.lzh

本当にお手上げ状態で、すみませんが…、どうか助言を頂けないでしょうか…?


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


Name: Dixq (管理人)  ..ウィザード(1,086,137ポイント)   Date: 2009/11/20(金) 22:01   No:42392     
Title: Re:3D背景を作ってみようについて 床が中心からきてしまう…    
引越したばかりで手元に携帯しかないんで、何も見れてないんですが、
3D的な何かをしたいなら今は沢山3D用の関数が沢山ありますよ。
あの解説は2D用の関数しか無かった頃、苦し紛れに作ったので‥。


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

Name: ラノイ  ..ぴよぴよ(403ポイント)   Date: 2009/11/20(金) 23:01   No:42395 解決!     
Title: Re:3D背景を作ってみようについて 床が中心からきてしまう…    
そうなんですか!
わかりました!
では、がんばってみます!


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

Name: Justy  ..伝説なるハッカー(464,966ポイント)   Date: 2009/11/21(土) 02:34   No:42409     
Title: Re:3D背景を作ってみようについて 床が中心からきてしまう…    
 解決しているようなので、軽くさわりだけ。

 現実世界で例えると、まっすぐ前を向いて進んでいる正面から
流れてくるように見えるわけで、斜め下を見て進めば望みのような表現に
なるかと思います。

 頑張って下さい。


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

Name: ラノイ  ..ぴよぴよ(10ポイント)   Date: 2009/11/21(土) 09:26   No:42415     
Title: Re:3D背景を作ってみようについて 床が中心からきてしまう…    
Justyさん
カメラで視点を設定するやり方ですね〜!
ありがとうございます。
カメラの関数に慣れていないので、ちょっと慣れてきます〜



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



Name: kaos  ..ぴよぴよ(101ポイント)   Date: 2009/11/21(土) 04:38   No:42411       
Title: 質問です    
a^n=a×a^n-1という関係を使って、ある数aのべき乗a^nを計算するプロフラムを作っているんですが、どうしてもうまくいきません。下にあるのが一応考えたプログラムなのですが、間違いを教えてください。
#include<stdio.h>
double power(double x,int n){
if(n==0)return 1;
if(n<=1)return 1;
return x*power(x,n-1);
}
main(){
int n=3;
double m;
m=n*power(n,n-1);
printf("%dのべき乗は%f\n",n,m);
}


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


Name: box  ..ハッカー(146,273ポイント)   Date: 2009/11/21(土) 06:45   No:42412     
Title: Re:質問です    
そのプログラムでは、何の何乗を計算しようとしていますか?
また、想定する結果は何で、それがどう食い違ったので「うまくいかない」と
判断されましたか?
具体的な説明が必要です。

また、与えられた漸化式とプログラムで使う変数名をそろえる方が
間違いに早く気づけるでしょう。


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

Name: non  ..比類無きプログラマー(70,746ポイント)   Date: 2009/11/21(土) 08:32   No:42413     
Title: Re:質問です    
>if(n<=1)return 1;
は、いらない。


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



Name: ee  ..ぴよぴよ(15ポイント)   Date: 2009/11/20(金) 16:04   No:42373       
Title: 複数音を同時にならすためには    
バックグラウンドでミュージックを演奏して効果音をならすと
ミュージックが再生されなくなってしまいます。PlayMusicの関数をつかっているわけですが
解決策はあるのでしょうか?


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


Name: バグ  ..ハッカー(174,139ポイント)   Date: 2009/11/20(金) 17:18   No:42376     
Title: Re:複数音を同時にならすためには    
形式を変えてやればよいかと。
BGMはMP3、SEはWAV…みたいに。


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

Name: ee  ..ぴよぴよ(83ポイント)   Date: 2009/11/20(金) 19:05   No:42381     
Title: Re:複数音を同時にならすためには    
midとwavですが、これは無理なんですかね?
なりません・・・。


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

Name: Justy  ..伝説なるハッカー(464,873ポイント)   Date: 2009/11/21(土) 02:32   No:42408     
Title: Re:複数音を同時にならすためには    
 DXライブラリの話、でいいんでしょうか?


> PlayMusicの関数をつかっているわけですが
> 解決策はあるのでしょうか?

 音楽だけでなく、効果音も PlayMusicを使おうとしているのでしょうか?
 
 PlaySoundFileや PlaySoundMemなどを使えば複数を同時に鳴らせるはずです。
 使い方はリファレンスに載っています。


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



Name: dic  ..プログラマー(38,274ポイント)   Date: 2009/11/19(木) 15:20   No:42324       
Title: 続 日本語の表示    
下のように関数を使ってUTF-8を変換しようとしたのですが
変換先のbuf2にはなにも変換されません
どこが悪いのでしょうか?


#include <stdio.h>
#include <locale.h>
#include <windows.h>


void load()
{
FILE *file = fopen( "0.txt", "rt" );
char buf[256];
wchar_t buf2[256];
while( !feof(file) )
{
fgets( buf, sizeof(buf), file );
MultiByteToWideChar( CP_UTF8, MB_USEGLYPHCHARS, buf, sizeof(buf), buf2, sizeof(buf2) );
wprintf( buf2 );
}
fclose( file );

}


int main()
{
setlocale(LC_ALL, "japanese");

load();

return 0;

}



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


Name: Justy  ..伝説なるハッカー(462,896ポイント)   Date: 2009/11/19(木) 22:20   No:42347     
Title: Re:続 日本語の表示    
 とりあえず、MB_USEGLYPHCHARSを 0にしてみて下さい。


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

Name: dic  ..プログラマー(38,345ポイント)   Date: 2009/11/20(金) 22:09   No:42393 解決!     
Title: Re:続 日本語の表示    
うまく変換でき
表示もうまくいきました
ありがとうございました


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

Name: Justy  ..伝説なるハッカー(463,967ポイント)   Date: 2009/11/20(金) 22:56   No:42394     
Title: Re:続 日本語の表示    
 ちなみにですね。
 MSVC8以降の場合、fopenの第2引数のところの最後に ",ccs=UTF-8"を追加してから
fgetws()などで読み込むと MultiByteToWideChar()で変換する必要がなくなりますよ。

fopen、_wfopen (CRT)
http://msdn.microsoft.com/ja-jp/library/yeby3zcb(VS.80).aspx

Visual Studio 2005以降でUNICODEテキストファイルを扱うときのコツ - nodchipの日記
http://d.hatena.ne.jp/nodchip/20090203/1233646804



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



Name: オラウー  ..かけだし(2,364ポイント)   Date: 2009/11/20(金) 21:11   No:42388       
Title: 龍神録についての質問です    
龍神録のプロジェクトをダウンロードしたのですが
RyuJin.slnを開こうとすると

Visual Studio変換ウィザードへようこそ

というものが出てそれを進めていくと

ソリューションファイル 'C:\Documents and Settings\NECUser\Local Settings\Temp\project.zipの一時
ディレクトリ 10\project\1章\RyuJin.sln'は変更できないため、このファイルを変換出来ません。
このソリューションを変換するにはソリューション ファイルのアクセス許可を変更して、
ファイルを変更したり開いたりできるようにしてください。

と出るのですがどうすればいいですか


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


Name: 御津凪 [URL]  ..ハッカー(124,675ポイント)   Date: 2009/11/20(金) 21:34   No:42389     
Title: Re:龍神録についての質問です    
ダウンロードしたファイルは zip で圧縮されていますが、
解凍しないまま中身を開いているようです。

ダウンロードしたファイル( Project.zip という名前だったはず)を解凍して、
再度試してみてください。


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

Name: オラウー  ..かけだし(2,383ポイント)   Date: 2009/11/20(金) 22:00   No:42391 解決!     
Title: Re:龍神録についての質問です    
出来ました、ありがとうございました

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



Name: てて  ..ぴよぴよ(210ポイント)   Date: 2009/11/20(金) 12:37   No:42367       
Title: DXライブラリを使ったゲーム作品の提出    
正直ここで聞いていいか迷う質問なんですが、
このサイトを参考にしてDXライブラリをつかってゲームをつくました。サンプルプログラム実行用フォルダの
中のtest.cppにソースを書き、画像とサウンドをそのフォルダに入れただけです。現在ゲームを提出しようと考えているのですが、相手もコンパイラをもっているとして、どのような形で提出したらよいのでしょうか?
すごく単純な質問かもしれませんが、私の周りにはゲーム作っている人がいないので本当に分からないです。できれば単純な方法でよろしくお願いします。


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


Name:  ..ぴよぴよ(1ポイント)   Date: 2009/11/20(金) 12:49   No:42368     
Title: Re:DXライブラリを使ったゲーム作品の提出    
誰に提出しようとしてるのですか?
学校ですか?企業ですか?友人ですか?


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

Name: 御津凪 [URL]  ..ハッカー(123,426ポイント)   Date: 2009/11/20(金) 12:52   No:42369     
Title: Re:DXライブラリを使ったゲーム作品の提出    
ゲーム作品の提出、ということは、企業とかの就職の課題か何かでしょうか?

とりあえず、必要ないものを取り除いて、渡してそのまま(コンパイルしない)で起動できる状態であれば良いのではないでしょうか。
実行に必要なのは実行ファイルである *.exe ファイルと、プログラムで読み込むように指定している全てのファイルです。

ソースコード・プロジェクトファイル自体もプログラムの実行に全く関係ないので取り除くべきですが、
相手側がソースコードを見たい、あるいはビルドしたいということがあるのなら、これらも含めるべきです。

もちろん、提出する状態にした時にきちんと起動・実行できるかも確認するようにしてください。
でないと、データを受けとった側で起動しなかった(コンパイルできなかった)というトラブルが発生する場合があります。


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

Name: てて  ..ぴよぴよ(347ポイント)   Date: 2009/11/20(金) 14:46   No:42370     
Title: Re:DXライブラリを使ったゲーム作品の提出    
私の聞き方が間違っているか、私のレベルが低すぎるので分からないです。コンパイルの仕方はサンプル実行用フォルダのDxLib_VC2008用.slnをクリックすると勝手にtest.cppファイルをvisual C++2008 express editionが
認識して、そのファイルを私が書き換えてコンパイルして実行していました(F5)。この程度のレベルです。なので、どれがDXライブラリに必用なファイルかフォルダなのか、はたまた.exeなどの実行ファイルはどこにあるか分からないです。正直visual C++もあまりつかったことがありません。私がつかってるのはvisual C++2008 express editionであるのでそれを使って教えてくれるとありがたいです。


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

Name: 御津凪 [URL]  ..ハッカー(123,864ポイント)   Date: 2009/11/20(金) 15:18   No:42371     
Title: Re:DXライブラリを使ったゲーム作品の提出    
サンプル実行用フォルダに入っているさまざまなファイルの内、
・DxLib_VC2008用.sln - ソリューションファイル。プロジェクトを纏めているファイルです。
・DxLib_VC2008用.vcproj - プロジェクトファイル。コンパイル方法や対象ファイルなどの設定が書かれているファイルです。
・test.cpp - ソースファイルです。(DxLib_VC2008用.vcproj に登録されていますね)
・DxLib.h と DxDirectX.h - DXライブラリのヘッダファイル。(test.cpp から読み込まれます)
・*.lib - DXライブラリのライブラリファイル群(DXライブラリを使った実行ファイルを生成するのに必要です)
これらがビルド(コンパイル)するのに必要なファイル一式です。
渡し先でビルドが必要な場合はこれらを渡してください。

次に、実行ファイルの場所ですが、
ビルドすると、サンプル実行用フォルダに「Debug」というフォルダができます。
その中に DxLib_VC2008用.exe という実行ファイルがあり、
これがビルドしてできたゲーム実行ファイルです。

なお、実行ファイルがそのままの場所だと、それを開いて実行しようとしても、
プログラム内に書いた、読み込むべきファイルが読み込まれないので、
実行ファイルを読み込むファイル一式が置かれている場所に移します。

なので、正しくゲームを実行できるのに必要な作業は、
・実行ファイルとゲームで使うファイル一式を同じフォルダ内に置く。
ただそれだけです。
向こう側でも同様にビルドできるようにするには、
最初のほうに書いたビルドに必要なファイル一式も一緒に置くだけです。


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

Name: てて  ..ぴよぴよ(414ポイント)   Date: 2009/11/20(金) 16:27   No:42374     
Title: Re:DXライブラリを使ったゲーム作品の提出    
詳しいお方が返信してくれて助かります。
つまりもし、分からなければサンプル実行用フォルダの中にDebugでできたexeの実行ファイルを
入れてしまえば、最低限作品としては相手側は見れると解釈してよろしいのでしょうか?
よろしくお願いいたします。


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

Name: 御津凪 [URL]  ..ハッカー(124,078ポイント)   Date: 2009/11/20(金) 16:49   No:42375     
Title: Re:DXライブラリを使ったゲーム作品の提出    
> つまりもし、分からなければサンプル実行用フォルダの中にDebugでできたexeの実行ファイルを
> 入れてしまえば、最低限作品としては相手側は見れると解釈してよろしいのでしょうか?

ファイルを読み込むようにプログラムを書いていなければ、実行ファイルだけでOKです。
画像ファイルや音声ファイル等を読み込むプログラムを書いている場合は、上記に書いたとおり
その読み込むファイルと一緒にして渡せば大丈夫です。

試しに空のフォルダに実行ファイル等を入れ、実行して確かめると良いでしょう。
問題なく動けばそれでOKです。


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



Name: rajan  ..ぴよぴよ(119ポイント)   Date: 2009/11/20(金) 11:02   No:42363       
Title: 無題    
バイナリfile の 読みこみ 書き込み プログラム 教えてください


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


Name: non  ..比類無きプログラマー(70,661ポイント)   Date: 2009/11/20(金) 11:18   No:42365     
Title: Re:無題    
ググればいくらでも情報は得られます。
例えば
http://www.geocities.jp/ky_webid/c/037.html
具体的に質問してもらわないと、どこから説明が必要なのかわかりません


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



Name: フランドールの義兄  ..かけだし(1,524ポイント)   Date: 2009/11/19(木) 20:44   No:42337       
Title: タイトル画面が固定しない悪夢・再臨    
無事にF1キーを離してもタイトル画面に固定することはできたのですが、BGMを再生し始めた途端、再びオープニングムービーに戻ってしまいます。しかも、メニュー操作のコードを打ったのも無視します。(↑キーや↓キーを打っても■が動かない)

全コードを記述します。改善方法を教えてください。
#define GLOBAL_INSTANCE
#include "../include/GV.h"

int Key[256];
int Cr = GetColor(0, 255, 255);

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理   ↑画面をクリア     ↑入力状態を保存       ↑ESCが押されていない

int mode;

if(Key[KEY_INPUT_F1] == 0 && Key[KEY_INPUT_F2] == 0 && Key[KEY_INPUT_F3] == 0 && CheckSoundFile() == 0){
mode = 0;
}
else if(Key[KEY_INPUT_F1] == 1 || Key[KEY_INPUT_F1] == 1 && Key[KEY_INPUT_F2] == 1 && Key[KEY_INPUT_F3] == 1){
mode = 1;//Normal(ノーマル・東方)モード
}
else if(Key[KEY_INPUT_F2] == 1){
mode = 2;//Mega Man(ロックマン)モード
}
else{
mode = 3;//Shohta(翔ちゃんセレクト)モード
}

switch(mode){
case 0:
//オープニングムービー
PlayMovie("../../dat/movie/ACDL_Opening.wmv", 1, DX_MOVIEPLAYTYPE_BCANCEL);
if(GetMovieStateToGraph == 0){
mode = 1;
}
break;
case 1:
PlayMusic("../../dat/music/1/東方空中戦.mid", DX_PLAYTYPE_LOOP) ;
mode = 1;
break;
case 2:
PlayMusic("../../dat/music/1/Mega_Man_Mode/Title.mp3", DX_PLAYTYPE_LOOP);
mode = 2;
break;
case 3:
//PlayMusic("../../dat/music/1/Shohta/???.mp3", DX_PLAYTYPE_LOOP);
mode = 3;
break;
}

//たゐとる画面
LoadGraphScreen(0, 0, "../../dat/img/1/Title.bmp", TRUE);
DrawString(68, 48, "東方空中戦", Cr );
Cr = GetColor(255, 255, 0);
DrawString(48,68, "Air Combat Defense Line", Cr );

//たゐとる宣言
PlaySoundFile("", DX_PLAYTYPE_NORMAL) ;
PlaySoundFile("", DX_PLAYTYPE_NORMAL) ;

//めにゅ。
int y = 100;
DrawString(150, y, "■", Cr);
Cr = GetColor(0, 255, 255);
DrawString(170, 100, "Story", Cr);
DrawString(170, 120, "Training", Cr);
DrawString(170, 140, "Learning", Cr);
DrawString(170, 160, "Option", Cr);
DrawString(170, 180, "Library", Cr);
DrawString(170, 200, "Exit", Cr);

//キー操作(めにゅ)
if(Key[KEY_INPUT_DOWN] == 1 || ( Key[KEY_INPUT_DOWN] % 5 == 0 && Key[KEY_INPUT_DOWN] > 30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
y += 20;
if(y == 200){// y座標が200なら(選択が一番下なら)
y=100;// 選択座標を一番上に
}
}
if(Key[KEY_INPUT_UP] == 1 || ( Key[KEY_INPUT_UP] % 5 == 0 && Key[KEY_INPUT_UP] > 30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
y -= 20;
if(y == 100){// y座標が100なら(選択が一番上なら)
y = 200;// 選択座標を一番下に
}
}
ScreenFlip();//裏画面反映
}
DxLib_End();
return 0;
}


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


Name: ひよこ  ..比類無きプログラマー(73,626ポイント)   Date: 2009/11/19(木) 20:50   No:42338     
Title: Re:タイトル画面が固定しない悪夢・再臨    
ループの最初で、mode = 0; int y = 100; と代入されているからです。
ループの外で宣言、代入をしましょう。


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

Name: フランドールの義兄  ..かけだし(1,590ポイント)   Date: 2009/11/20(金) 11:08   No:42364 解決!     
Title: Re:タイトル画面が固定しない悪夢・再臨    
ありがとうございました。教えてくれた方法を使って、さらにIf文でキーコントロール部分とムービー制御部分をそれぞれ覆ったら解決しました。

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



Name: ertel  ..ぴよぴよ(12ポイント)   Date: 2009/11/20(金) 00:42   No:42355       
Title: ノベル    
ノベルゲームみたいに下に文字を淡々と表示したいのですがどうすればいいですか?
一回表示して終わりではなくて表示した後何かのモーション(エンターを押すなど)をして次の文を表示する的な感じのを作りたいのですが…(要は会話です)
できたらご教授お願いします


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


Name: array [URL]  ..熟練のプログラマー(60,686ポイント)   Date: 2009/11/20(金) 07:22   No:42362     
Title: Re:ノベル    
環境の記載がないですが

もし、DXライブラリを使用するのであれば、下記のURLが参考になると思います
[ゲーム作りで学ぶ!実践的C言語プログラミング]
http://www.usamimi.info/~guiprog/game/


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



Name: くりあ  ..入門者(4,860ポイント)   Date: 2009/11/16(月) 23:01   No:42184       
Title: ファイルの取得? 2    
少し前に、ファイル選択ダイアログの使い方について質問し、
教えてもらったのですが、その時、
詳しく説明してくださっているサイトを紹介してもらいました。
少し見て理解できるかな?と思い解決にしてしまったのですが、
全然何とかなりませんでした、自分が甘かったです。
GetOpenFileName()を使うのは分かったのですが、
OPENFILENAME構造体が良く分かりません。
とりあえずサイトを参考にして書いてみたのですが、構造体の理解が足りないと思います。

とりあえずエラーを載せておきます。

error C2664: 'GetOpenFileNameW' : 1 番目の引数を 'OPENFILENAME' から 'LPOPENFILENAMEW' に変換できません。

どのようなエラーなのでしょう?構造体の宣言を間違えたのでしょうか?
よろしくお願いします。


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


Name: ぽこ  ..かけだし(2,359ポイント)   Date: 2009/11/17(火) 00:32   No:42190     
Title: Re:ファイルの取得? 2    
関数にOPENFILENAME構造体へのポインタを渡さなければならないのに、
OPENFILENAME構造体そのものを渡していませんか?

OPENFILENAME ofn;

GetOpenFileName( &ofn ); // OK
GetOpenFileName( ofn ); // NG


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

Name: くりあ  ..初心者(5,097ポイント)   Date: 2009/11/17(火) 02:04   No:42194     
Title: Re:ファイルの取得? 2    
ぽこさん、ありがとうございました。
エラーはなくなりとりあえず実行出来ました。
ダイアログが出るかどうかのテストで作ってデバッグで実行してみたのですが、
一瞬コマンドプロンプト?が出て閉じてしまいました。
ソースは、ほぼダイアログを表示するところと、その初期化情報のところ
くらいしか書いていません。これだけではだめなんですかね?
あとlpstrTitleとかって、文字列を入れるんじゃないんですかね?
ofn.lpstrTitle = "開く"
とかでエラーが出るのですが、どうしたら?
そもそも構造体がどうなっているのか良く分からないのですが……
良く分からない質問ですいません。


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

Name: YuO  ..プログラマー(36,440ポイント)   Date: 2009/11/17(火) 03:09   No:42197     
Title: Re:ファイルの取得? 2    
> ダイアログが出るかどうかのテストで作ってデバッグで実行してみたのですが、
> 一瞬コマンドプロンプト?が出て閉じてしまいました。
> ソースは、ほぼダイアログを表示するところと、その初期化情報のところ
> くらいしか書いていません。これだけではだめなんですかね?

おそらく,ダイアログを開くことに失敗したのでしょう。
GetOpenFileName APIの戻り値を検証してください。
戻り値が0であるならば,エラーです。
CommDlgExtendedError APIを呼び出して,エラー原因を調べてみてください。

MSDN: GetOpenFileName Function ()
http://msdn.microsoft.com/en-us/library/ms646927.aspx
MSDN: CommDlgExtendedError Function ()
http://msdn.microsoft.com/en-us/library/ms646916.aspx


> あとlpstrTitleとかって、文字列を入れるんじゃないんですかね?
> ofn.lpstrTitle = "開く"
> とかでエラーが出るのですが、どうしたら?

lpstrTitleはLPCTSTR型,つまりconst TCHAR *型なので,
・UNICODEマクロが定義されていない場合はconst char *型
・UNICODEマクロが定義されている場合はconst wchar_t *型
を渡す必要があります。

ただし,Windows API関連で文字定数や文字列リテラルを使う場合は,
・charではなくTCHARを使う
・文字定数・文字列リテラルはTEXTマクロを使う
ことで,UNICODEを気にせず組むことが (ある程度) できます。

例示のコードは,
ofn.lpstrTitle = TEXT("開く");
のようになります。

なお,公式の資料はここになります。
MSDN: Unicode and Character Sets (Windows)
http://msdn.microsoft.com/en-us/library/dd374083.aspx


> そもそも構造体がどうなっているのか良く分からないのですが……

MSDNに載っていますよ。
MSDN: OPENFILENAME Structure ()
http://msdn.microsoft.com/en-us/library/ms646839.aspx


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

Name: くりあ  ..初心者(5,417ポイント)   Date: 2009/11/17(火) 06:52   No:42198     
Title: Re:ファイルの取得? 2    
YuOさん、回答ありがとうございます。
どうやらエラーのようです。
それで、CommDlgExtendedError APIが、コモンダイアログボックスのエラーを調べるもの
なのは調べて分かったのですが、使い方が良く分からなくて……
文字列の方は、コンパイルの方のエラーはなくなりました。
ダイアログがエラーなので確かめようがないのですが…。
URLの方も見てみたのですが、英語でわけが分からず……。
翻訳サイトを使って少しづつ理解していきたいと思います。


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

Name: くりあ  ..初心者(5,450ポイント)   Date: 2009/11/20(金) 06:46   No:42361 解決!     
Title: Re:ファイルの取得? 2    
CommDlgExtendedError APIは、
他の分からないところのついでに、
新規投稿で改めて聞こうと思います。
ありごとうございました。


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



Name: mat  ..ぴよぴよ(228ポイント)   Date: 2009/11/20(金) 01:33   No:42357       
Title: exeファイルが異常に大きい    
はじめまして。
このサイトを参考にDXライブラリの勉強をしているのですが、ふと疑問に思ったことがあるので
質問させていただきます。

DXライブラリを使って100行程度のプログラムを書いてVC++2008でビルドしたのですが、
exeファイルのサイズが3MBを超えていました。
たかだか100行程度のプログラムでこんなにサイズが大きくなるものなのでしょうか。

ちなみにhello worldをビルドしてみたら28KBでした。
個人的にはこれでも大きいような気がするのですが…


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


Name: Justy  ..伝説なるハッカー(463,803ポイント)   Date: 2009/11/20(金) 01:48   No:42359     
Title: Re:exeファイルが異常に大きい    

> たかだか100行程度のプログラムでこんなにサイズが大きくなるものなのでしょうか

 なるものです。
 
 というのもDXライブラリをリンクすると、そのライブラリの分実行ファイルは
大きくなります。

 Debugビルドで3M越えは普通です。
 最適化をかけた Releaseビルドでも 1MBは越えるはずです。

 それだけライブラリの中身が充実している、ということですね。


※ 旧バージョンのライブラリを使えば少しは小さくなるかもしれません。


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



Name: 山崎  ..プログラマー(28,711ポイント)   Date: 2009/11/18(水) 23:44   No:42289       
Title: 基本型以外のlistのsortについて    
いつもお世話になっております、山崎です。
今回は、基本型以外の型のlistをsortする際について伺いに参りました。

現在、アクションゲームを製作しています。
フィールドに配置するオブジェクトを格納するlistを修正しているのですが、
このlistには、描画する順番にオブジェクトが格納されているようにしたいと思っています。
このオブジェクトを表すクラスObjectはshort型のメンバYを持っているのですが、
listにはこのYの小さい順にオブジェクトを格納しておきたいと思っています。

各オブジェクトが位置を変えた後やlistに新しいオブジェクトを追加した後などに、
Yの小さい順にlistをソートしようと思っています。

そこで、listには要素をソートする関数sortがあると思い出し、
早速それを使ってみようと思ったのですが、
どうすればYの昇順にソートさせるという指定ができるのかわかりません。
いつも参考にしているサイトには、int型のlistのsortは載っていたのですが・・・。

どうすれば、自分で作ったクラスのあるメンバの大小に従ったlistのsortを行えるのでしょうか。


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


Name: ドラ  ..入門者(3,152ポイント)   Date: 2009/11/19(木) 01:27   No:42296     
Title: Re:基本型以外のlistのsortについて    
sort()には関数オブジェクトを引数にとるバージョンが存在するのでそれを使います。
文章で説明し辛かったので簡単なサンプルを作ってみました。
赤字の部分が今回の質問に関係する部分です。


#include <iostream>
#include <iomanip>
#include <list>
#include <algorithm>
#include <iterator>
#include <functional>
#include <cstdlib>
#include <ctime>

class Object
{
public:
Object(short x, short y) : X(x), Y(y) {}
short getX() const { return X; }
short getY() const { return Y; }
private:
short X;
short Y;
};

std::ostream& operator<<(std::ostream& os, const Object& obj)
{
return os << "X = " << std::setw(3) << obj.getX()
<< ", Y = " << std::setw(3) << obj.getY();
}

struct LessY : std::binary_function<Object, Object, bool>
{
bool operator()(const Object& a, const Object& b) const
{
return a.getY() < b.getY();
}
};


int main()
{
std::srand(static_cast<unsigned int>(std::time(0)));

std::ostream_iterator<Object> out(std::cout, "\n");
std::list<Object> lst;

for (int i = 0; i != 10; ++i)
{
lst.push_back(Object(std::rand()%100, std::rand()%100));
}

std::cout << "ソート前\n";
std::copy(lst.begin(), lst.end(), out);
std::cout << std::endl;

std::cout << "ソート後\n";
lst.sort( LessY() );
std::copy(lst.begin(), lst.end(), out);
std::cout << std::endl;

return 0;
}




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

Name: 山崎  ..プログラマー(28,916ポイント)   Date: 2009/11/19(木) 12:02   No:42311 解決!     
Title: Re:基本型以外のlistのsortについて    
ドラさん
ご返信誠にありがとうございます。
わざわざサンプルまで示してくださり、恐縮です。

おかげで、Objectのlistをsortするプログラムができました。
本当にありがとうございました。



サンプルコードを見て、私なりに解釈して小さなプログラムを作ってみたのですが、
正しく理解できているかどうかまだ少し懸念がありまして…。
以下に私の作ったObjectのlistをsortするプログラムを載せますので、
よろしければ、おかしいところがあればどなたか指摘頂けないでしょうか。
私の解釈をコードにコメントとして載せてあります。

listのsortはうまく行きましたので「解決!」にさせて頂きますが、
ご指摘くださる方がいらっしゃれば幸いです。



#include <iostream>
#include <list>
#include <stdlib.h>
#include <functional>//このプログラムでは使用していない?
using namespace std;

class Object
{
public:
short X;
short Y;

Object()
{
X=rand();//short型に代入するべきではないかも
Y=rand();
}
};

//ドラさんのサンプルコードではstructだったが、classでも可能だろうか
class FunctionObject
{
public:
//bool型を返し、二つのObjectを引数とした、operator()を定義しなければいけない、という解釈
bool operator()(const Object* Obj1,const Object* Obj2)
{
return (Obj1->Y < Obj2->Y);
}
};

int main()
{
list<Object*> ObjectList;

cout << "ソート前" << endl;
for(int i=0;i<10;i++)
{
Object* ObjTemp=new Object();
ObjectList.push_back(ObjTemp);
cout << ObjTemp->Y <<endl;
}

//関数オブジェクトのクラス名に()をつけたものを、sortの引数にすればいいという解釈
ObjectList.sort(FunctionObject());

cout << "ソート後" << endl;
list<Object*>::iterator it=ObjectList.begin();
while(it != ObjectList.end())
{
cout << (*it)->Y <<endl;
++it;
}

return 0;
}


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

Name: ドラ  ..入門者(3,465ポイント)   Date: 2009/11/19(木) 21:52   No:42343     
Title: Re:基本型以外のlistのsortについて    
>#include <functional>//このプログラムでは使用していない?
使用していません。
関数オブジェクトを関数アダプタと組み合わせて使う場合に必要な型情報をくっつけるために
std::binary_functionからpublic継承させたので #include <functional> が必要でした。
関数アダプタと組み合わせて使わない事が分かっていれば必要ないと思います。


>//ドラさんのサンプルコードではstructだったが、classでも可能だろうか
可能です。
C++のstructとclassはデフォルトのアクセスラベルとデフォルトの継承タイプが異なるだけです。


>//bool型を返し、二つのObjectを引数とした、operator()を定義しなければいけない、という解釈
その解釈であっています。


>//関数オブジェクトのクラス名に()をつけたものを、sortの引数にすればいいという解釈
>ObjectList.sort(FunctionObject());
FunctionObjectクラスの一時オブジェクトを作って、それを引数として渡しています。



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

Name: 山崎  ..プログラマー(29,037ポイント)   Date: 2009/11/20(金) 01:45   No:42358     
Title: Re:基本型以外のlistのsortについて    
ドラさん
ご返信誠にありがとうございます。

私のプログラムを見ていただき、本当にありがとうございます。
おかげで、教えて頂いたコードをきちんと理解することができました。
感謝の言葉もございません!!

いろいろ教え頂きありがとうございました。


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



Name: たかぎ [URL]  ..ハッカー(118,015ポイント)   Date: 2009/11/13(金) 00:31   No:41864       
Title: 【雑談】C言語の入門サイトを書きかけてみました    
ちょっと気が向いたので、C言語の入門サイトを書きかけています。
# 書籍の執筆はほったらかしで、現実逃避した結果の副産物です。

まだ、第1章の書き散らかしだけなのですが、ご意見いただければと思います。
http://lang-c.7d9.org/chapter1.html

この第1章の前に、何らかの形で導入部分(開発ツールのインストールなど)を用意したいと考えています。
また、開発ツールは、説明の便宜から、Windows上でのMinGW固定にしたいと考えています。
対象規格もC90に限定の予定ですが、少しぐらいはAMD1やC99に触れるかもしれません。

スタイルシートの調整もこれからなのですが、見た目や操作性に関するご意見もいただければ幸いです。


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


Name: たかぎ [URL]  ..ハッカー(117,879ポイント)   Date: 2009/11/13(金) 00:36   No:41865     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
補足説明です。

最近では、まともにC言語で開発するのは、組込み関係か、JavaやらC#やらスクリプト言語やらでパフォーマンスが出ない部分だけに使うようなケースが多いと思います。
そこで、あえて伝統的な Hello, World! から始めず、もっとプリミティブなところからスタートしています。
狙いとしては、プリミティブな機能を使って、スクラッチで何でも作れる技術を習得できるサイトにできればと考えています。

まあ、えらそうなことを言ってますが、完成するかどうか、完成するとしてもいつのことなのか、まったく予定が立っていません。


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

Name: ぽこ  ..かけだし(2,382ポイント)   Date: 2009/11/13(金) 01:24   No:41867     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
サイトを拝見させていただきました。
書き散らしたといっている割には、「名前」に非常に気を使っている、
定義されていない単語が出ないように気を使っていると感じました。
私好みです。

で、いくつか気になったことをば。
・読者の対象年齢は?
 y=f(x)という記述を見たときに、これが関数だと分かるのは高校生以上だと思います。
 きっと中学生以下は???になるかと。
・「式」についての説明は?
 「文」については後で説明するとありますが、「式」にはありません。
・「評価」について
 <引用>i = i + 1 を実行すれば、i + 1 が最初に評価されるので・・・</引用>
 素人には「評価」の意味が分からないのではないかと思います。

以上です。
解説の仕方が非常に私好みなので、是非完成させてください。


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

Name: たかぎ [URL]  ..ハッカー(118,030ポイント)   Date: 2009/11/13(金) 07:02   No:41873     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
回答ありがとうございます。

> ・読者の対象年齢は?
>  y=f(x)という記述を見たときに、これが関数だと分かるのは高校生以上だと思います。
>  きっと中学生以下は???になるかと。

最終的には中3以上で分かるようにしたいですね。
私が中学生のことは、1年生から1次関数を習ったのですが、最近は違うんですね。
y=f(x)も中学で習った気がします。
現役かそれに近い人の意見も聞いてみたいところです。
民主党政権でゆとり教育が復活するおそれが出てきたので、このあたりは慎重に検討する必要がありそうです。

> 「式」についての説明は?
>  「文」については後で説明するとありますが、「式」にはありません。
> ・「評価」について
>  <引用>i = i + 1 を実行すれば、i + 1 が最初に評価されるので・・・</引用>

この2点は自分でも気になっていました。
両方とも、詳しい説明は後述するとして、ざっくりとでも説明したいと思います。



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

Name: 組木紙織  ..比類無きプログラマー(74,752ポイント)   Date: 2009/11/13(金) 09:27   No:41874     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
>最終的には中3以上で分かるようにしたいですね。

ざっと読んだ感じですけど、文書の言いまわし方が中高対象だとやや固い感があります。
固い文章だと意味がわからなくて読めないという人も中にはいますので。
(そんな人は対象外と考えるなら言い回しに関しては十分問題ないと思います。)

>単純に引数を計算した結果を返す以外の動作のことを「副作用」といいます。

int f()
{
static int num;
return num++;
}

上記のような動作も副作用って言ったはずだと思うんだけど、上の定義ではこれは副作用って読めないと思います。

一次関数は中2、(一応)二次関数も中3で習いますが、関数f(x)に関しては高校からだったはずです。

要望として、
例題&解答例と関数と用語の索引を作って欲しいです。


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

Name: non  ..熟練のプログラマー(68,834ポイント)   Date: 2009/11/13(金) 12:00   No:41882     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
開発環境を固定するのはいいのですが、他の環境を使っている人も基本では動くように書かれた方が
良いと感じました。
つまり、ヘッダーファイルのことですが、BCCなどでいきなりエラーが出ると挫折してしまいそうです。

また、最初に使う人の環境としてはMinGWは敷居が高いのでは?
14歳からの・・・では、VisualC++2008や、BCC Developerですし、猫でも・・VisualC++2008です。



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

Name: Mist  ..比類無きプログラマー(71,042ポイント)   Date: 2009/11/13(金) 12:20   No:41884     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
実行結果についてはコマンドプロンプト上での実行結果を画像として表示して、読者が実行結果を目で見て見比べられるようにしてあげるほうがいいと思います。
本当の初心者にとっては「コマンドプロンプトに A という文字が表示されたでしょうか? 」と書かれていても画面上に実際のどう表示されているのが正解なのか迷う場合があります。
ただ、いくつかのプログラムを実行していくうちに慣れてくるのですべてにおいて必要ではないと思いますが。


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

Name: すずめ  ..初心者(5,229ポイント)   Date: 2009/11/13(金) 12:52   No:41887     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
サイト読まさせていただきました。
率直な感想です。

これからプログラムを始めようと思って、最初にたかぎさんの
サイトを見た人は良いんでしょうが、他のサイトなどで多少でも
勉強された方やVisualC++2008(無料版)などを使っている人は
gccを使おうと思わないんではないでしょうか。
(gccってなにかわからなかったのでネットで検索してみました)

私なんかは、BCCを使っている人を掲示板で見かけると
VisualC++2008を使えば良いのになって思うくらいです。

gccのいいところを最初にアピールして下されれば
いいと思います。



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

Name: kazuoni [URL]  ..ハッカー(113,604ポイント)   Date: 2009/11/13(金) 15:22   No:41895     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
おぉー。
C言語全項目がそろったら、
確実に愛用ページになりそうですw

個人的な意見を以下につらつらと。

・書き方の固さ

組木紙織さんもおっしゃっていますが、入門サイトにしては
若干固い印象を受けます。
自分が本格的(?)にプログラミングの勉強を始めたのは1年前なんですが、
やはり参照したページは簡潔かつある程度の内容で淡々と進められる
ページを参考にしていました。
そのページの大半は、実際動作するプログラムが乗せられていて、
この行で、変数がこのように動作して・・・
と割り込み形式で書かれていました。
そのおかげで、読む日本語はパッと済みました。
個人的には今のままでとってもいいと思うのですが・・・^^;(書き方的に)
低年齢層も視野に含めるなら、
もう少し文字を減らし、重いっという印象を
減らしたほうがいい気がします。

・もっと解説範囲の幅を広げてほしい

入門を目指しているとしたら、ここを議論することはナンセンスなんですが・・・
入門から、その先までを別途でいいので、まとめてもらえたらなって思います。
入門ページは大量にありますけど、その発展となると、
数がぐっと減ります。
ブログなどで取り上げられてるのは見ますが、まとめられているページは
そこまで多くない気がします。
個人的には読み物みたいにしてもらえると、
愛読できるのですが・・・^^;

あくまで個人的な意見なので・・・。
長々と失礼しました。


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

Name: dic  ..プログラマー(36,887ポイント)   Date: 2009/11/13(金) 16:19   No:41901     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
アホの私としては
つっこみすぎてて なにがなんだかわけがわかならい
といった感想です

それにしてもURL見てびっくりしました 日本語対応なんですね
なんていう規格でしたっけ?
むか〜し、勉強してましたが記憶は遠いはるか遠くです


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

Name: nayo  ..中級者(14,143ポイント)   Date: 2009/11/13(金) 16:51   No:41904     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
個人的にはgccはC言語を学ぶにあたって扱いやすいと思います
手軽にプログラムを作って手軽にコマンドプロンプトから実行できるし…
ただ、開発環境の導入方法を詳しく解説してあげないとそこで挫折してしまう方もいそうです

内容は一つ一つ押さえていけば確実に力の付くものとなっていると感じられました
お忙しい中とは思いますが完成楽しみにしてます


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

Name: たかぎ [URL]  ..ハッカー(119,051ポイント)   Date: 2009/11/13(金) 17:47   No:41907     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
どこからレスを付けようか迷いますが、まずは全体的なことから...

導入部分をまだ作っていないので、そこに絡むご意見が多かったように思います。

■開発ツールがMinGWの件

MinGWを選択したのにはいくつか理由があります。

1. C99の解説を少しぐらいは入れたいと考えています。場合によっては続編になるかもしれませんが。
 そのとき、Borland C++ Compiler 5.5.1やVisual C++では計画が破綻します。

2. MinGWには再配布ができるという利点があります。
 Borland C++ Compiler 5.5.1やVisual C++の場合は再配布ができません。
 そのため、版元が提供をやめたら使えなくなってしまいます。
 また、Visual C++の場合、バージョンアップすると古い物が入手できなくなる可能性が十分あり、内容の陳腐化が懸念されます。

3. 実は、MinGWがもっとも導入に対する敷居が低い
 まず、インストールが簡単です。圧縮ファイルを好きな場所で解凍するだけですから。
 インストーラが起動することも、権限がないと怒られることも、環境変数を設定する必要もありません。
 環境変数については異論があるでしょうが、下記、または下記からC++を除去したものを使う予定です。
 http://files.7d9.org/mingw32-gcc-4_4_1-dw2-20090922-1.zip
 また、IDEがある環境の場合、本質ではない解説に多くの労力を払わなければならなくなります。

4. PHP等の拡張モジュールや組込み系の開発では、Visual C++なんかよりGCCを使う機会のほうが多い
 これは、No:41865で書いたことが動機です。

5. Cコンパイラとしては、もっともまともである
 _s付きの非標準関数を使えと主張するVisual C++や、ライブラリのバグが多いBorland C++Compilerは、入門用としては不適切です。
 MinGWも、printf/scanf系関数でlong doubleを使おうとするとバグに遭遇しますが、まだ回避しやすいほうです。


■対象年齢について

1. 対象年齢は中学3年生以上を考えていますが、これは中高生がメインターゲットという意味ではありません。
 メインターゲットは、大学生、専門学校生〜社会人を想定しています。

2. 中学3年生以上としたのは、中3程度の国語力、つまり新聞が難なく読めることを要求しているからです(各紙の論調を比較分析するような高度な能力は要求していません)。
 また、解説内容が理解できる程度の数学知識、エラーメッセージが理解できる程度の英語力も要求しています。
 中3といっても、偏差値50未満のような人は、C言語を勉強している暇があるなら学校の勉強をもっと頑張るべきなので、対象にしていません。

3. 文章が硬いという指摘がありますが、おそらく、やわらかい文章ではなく、くだけた文章やカジュアルな文章を期待しているような気がします。
 技術的な解説は、情緒にうったえるものではありませんので、そうした文体は論点をぼかしてしまうか、不本意な印象操作になる危険性があるので採用していません。


■導入部分で掲載予定の内容

1. MinGWのインストール
 といっても、ダウンロードして解凍するだけですが。

2. コマンドプロンプトの使い方
 たぶん、cdコマンドの使い方と、ディレクトリの説明ぐらいです。

3. エクスプローラの使い方
 パソコンが使えない人は相手にする必要がない気もしますが、最近はエクスプローラを使えない人も多いようですので。

ざっと、こんな感じです。



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

Name: たかぎ [URL]  ..ハッカー(119,316ポイント)   Date: 2009/11/13(金) 18:08   No:41908     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
さっきの内容で漏れた点について、個別に解答します。

組木紙織さん
> 要望として、
> 例題&解答例と関数と用語の索引を作って欲しいです。

用語の索引は作りかけています。
これは中上級者でも使えるように考えていますので、かなりプロ仕様ですが...

例題&解答例は、章末にでも入れていくつもりです。
ただ、全体的なバランスもあるので、最終近くの作業になると思います。

nonさん
> 開発環境を固定するのはいいのですが、他の環境を使っている人も基本では動くように書かれた方が
良いと感じました。
> つまり、ヘッダーファイルのことですが、BCCなどでいきなりエラーが出ると挫折してしまいそうです。

警告は出るかもしれませんが、エラーにはならないはずです。
警告をエラーにするオプションでも付けていれば別ですが、そうでなければコンパイラのバグですね。

Mistさん
> 実行結果についてはコマンドプロンプト上での実行結果を画像として表示して、読者が実行結果を目で見て見比べられるようにしてあげるほうがいいと思います。

そうですね。
導入部分のコマンドプロンプトの説明でも画像を掲載する予定ですが、本文の初回だけでも画像を入れるようにします。
# 実はMacなので、コマンドプロンプトの画像を作るのが面倒なのです。

kazuoniさん
> ・もっと解説範囲の幅を広げてほしい

これは反響次第でしょうね。
とりあえず、最低限のところを完成させないと。

その他、ご意見いただいたみなさん、ありがとうございました。
まだ当面はご意見を募集したいと思います。


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

Name: non  ..熟練のプログラマー(69,220ポイント)   Date: 2009/11/13(金) 18:22   No:41910     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
#include <stdio.h>を、あえてつけない理由はなんでしょうか。
何か、考えがあってのことですか。


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

Name: たかぎ [URL]  ..ハッカー(119,571ポイント)   Date: 2009/11/13(金) 18:30   No:41911     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
> #include <stdio.h>を、あえてつけない理由はなんでしょうか。
> 何か、考えがあってのことですか。

前処理指令の解説を最初からするのは重すぎるからです。
これを「おまじない」としてお茶を濁すのはサイトの方針に反します。
それなら,いっそないほうがましと考えました。
C90では関数原型なしで呼び出すことは許されています。

第2章以降の予定ですが...
配列とともに文字列を解説します。
配列の操作に,(シンタックスシュガーである)添字演算子ではなく,最初からポインタを使います。
(ここの説明を逆にするからわからなくなるのです)
そして,文字列の入出力関数を作ります。
その関数を分割コンパイルするようにし,ここでヘッダファイルを解説します。
#include指令はこのときにはじめて登場させる予定です。


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

Name: non  ..熟練のプログラマー(69,356ポイント)   Date: 2009/11/13(金) 19:35   No:41918     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
VisualC++2008、BCC Developer ともに、インストールしただけではエラーです。
インクルードせずに、コンパイルしたことないので、確認してみました。
エラーにならないように、設定するところがあるかどうかは、知りません。
が、標準インストールでエラーなら、注釈を加えといた方がよろしいのでは。





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

Name: sizuma [URL]  ..上級者(17,290ポイント)   Date: 2009/11/13(金) 19:39   No:41919     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
入門書が終わったレベルな僕には復習になって丁度よかったです。
いっそのこと、Cの文法がなんとなく分る人のための組み込み入門が読みたいなぁ・・・
すげーピンポイントに僕なんですけどね(笑
とにかく、つっこんだ内容があれば、入門書レベルの人にもいいと思います。

>硬い文章
好みの問題でしょうが、僕はとてもいいと思いました。
確かに新聞が読めないくらいなら、新聞を読んだ方がいい勉強になりますよね^^


と、感想のみで参考になりませんが、楽しみにしています。
がんばってください。


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

Name: たかぎ [URL]  ..ハッカー(119,593ポイント)   Date: 2009/11/13(金) 19:53   No:41922     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
> VisualC++2008、BCC Developer ともに、インストールしただけではエラーです。

C++でコンパイルしようとしていませんか?


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

Name: たかぎ [URL]  ..ハッカー(119,678ポイント)   Date: 2009/11/13(金) 20:01   No:41924     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
sizumaさん
> いっそのこと、Cの文法がなんとなく分る人のための組み込み入門が読みたいなぁ・・・

それはSESSAMEの仕事です。
『組込み現場の「C++」プログラミング - 明日から使える徹底入門』を書いたときもそうだったのですが,組込みは範囲が広すぎて的が定まりません。結局、当たり障りがない一般論になってしまって,いまいち切れ味が悪くなります。


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

Name: non  ..熟練のプログラマー(69,343ポイント)   Date: 2009/11/13(金) 22:06   No:41931     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
>C++でコンパイルしようとしていませんか?
確かにそうでした。


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

Name: たかぎ [URL]  ..ハッカー(119,828ポイント)   Date: 2009/11/13(金) 22:22   No:41932     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
みなさんのご意見を可能な範囲で反映してみました。
画像がいまいちなのと、副作用のあたりがちょっと苦しいのですが、またご意見いただければ幸いです。


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

Name: たかぎ [URL]  ..ハッカー(120,104ポイント)   Date: 2009/11/13(金) 22:38   No:41933     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
C言語だけのMinGWを下記に置きました。
http://files.7d9.org/mingw32-core-4_4_1-dw2-20091113.zip

【使い方】
適当な場所に解凍してください。
解凍すると、mingwというフォルダができます。
その中にmingw.batがありますので、これを実行してください。環境変数が自動的に設定されます。
作業フォルダは、mingw\workを想定していますので、そこが初期ディレクトリになります。

以後は、gcc ファイル名 でコンパイルができます。
-finput-charset=cp932 -fexec-charset=cp932 オプションを指定済みですので、普通にSJISのコードを書けるはずです。


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

Name: array [URL]  ..熟練のプログラマー(60,760ポイント)   Date: 2009/11/13(金) 23:15   No:41936     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
とても、分かりやすかったです。

しかし、ある程度プログラムを勉強してきた方ならGCCを使っても問題はないでしょうが
(むしろ、GCCくらい使えるようになっておかないと問題だと思いますが)

使った事のあるパソコンがWindowsだけだという人は、GUIに慣れており
それがCUIになるのは、それだけで挫折してしまう可能性があるのではないでしょうか。

中3以上を対象にするのであれば、VisualC++2008を使うのがベストだと思います。

> 4. PHP等の拡張モジュールや組込み系の開発では、Visual C++なんかよりGCCを使う機会のほうが多い

こちらを優先するのであれば、対象者は最終的に「開発者」を目指している人向けになりますよね。
実際、私の会社でもGCCを使う機会た多々ありますし、むしろVCは使いませんし。
なので、始めのうちからGCCを使えるようになっていたほうが良いのかもしれませんが・・・。
入門者さんへの敷居をさげるなら、やっぱりVCかなと思います。
(デバックなどもgdbを使うよりはるかに楽です。)


あと、自分が初心者の頃、一番最初に疑問に思ったことも含んでいますが「コンパイルって何?」でしたが
その程度、googleで調べるくらいの努力はしましょうという意図なのでしょうか。


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

Name: CERN  ..ぴよぴよ(180ポイント)   Date: 2009/11/13(金) 23:25   No:41937     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
さっそくお気に入りに追加させてもらいました。
これからどう発展していくのかすごく楽しみです。

よければC++もやってください・・・

二つ気になった点を挙げさせてもらいます。
一つ目は用語についてです。
これは、私がCを初めて学んだときに疑問に思ったことなんですが、
値を“返す”という独特な表現についてです。
当時、“何を”“どこに”“返す”のかとすごく疑問に思ったことを覚えています。
“返す”とはなんだ!?と思ったことがあります。
私だけ・・・?

二つ目は文章にメリハリがないことです。
「」で括っているところや、斜体、太文字になっているところはありますが、
これは大事なところというよりも、リンクやソースの内容など形式的に強調していますね。
それも重要なことですが、特にどこが大切なのかをぱっと見でわかるようにすればさらに良いと思いました。
引用させてもらいますと、
1.6に
>宣言は、原則として関数の最初で行います。
このようなことは意外と大切だと思うのです。
入門、ということで初心者を対象だと思うのですが、彼らはこのような部分はあまり気に留めないかも知れません。


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

Name: たかぎ [URL]  ..ハッカー(120,214ポイント)   Date: 2009/11/13(金) 23:33   No:41938     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
arrayさん
> 使った事のあるパソコンがWindowsだけだという人は、GUIに慣れており
> それがCUIになるのは、それだけで挫折してしまう可能性があるのではないでしょうか。

それは思い込みの可能性が高いです。
講師として学校や企業研修で指導した経験からすると、コマンドプロンプトはほとんど障害になりません。
MS-DOS時代を知っている人は、ファイルオペレーションをすべてCUIで行うイメージを持ってしまうのですが、実際にはエクスプローラとの併用ですし、使うコマンドといっても、cdとgccぐらいですから。

> (デバックなどもgdbを使うよりはるかに楽です。)

デバッガはVisual Studioが一番ですね。
ただ、デバッガの解説を行うと、本当に環境べったりになってしまいます。ですので、たぶんデバッガは扱わないと思います。

> あと、自分が初心者の頃、一番最初に疑問に思ったことも含んでいますが「コンパイルって何?」でしたが
> その程度、googleで調べるくらいの努力はしましょうという意図なのでしょうか。

そのあたりの概要説明は導入部で書く予定です。


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

Name: たかぎ [URL]  ..ハッカー(120,481ポイント)   Date: 2009/11/13(金) 23:42   No:41940     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
CERNさん
> さっそくお気に入りに追加させてもらいました。

ちょっと気が早いですね。URLが変わるかもしれませんし。

> よければC++もやってください・・・

C++の入門サイトを作る場合は、まったく逆のアプローチを取ると思います。
つまり、最初からSTLを使いまくって、プリミティブな話は後回しにするか、割愛する気がします。
Cからの移行を前提とした文章は、すでに本で書いてしまったので、いまさらやりたくありませんので。

> 値を“返す”という独特な表現についてです。
> 当時、“何を”“どこに”“返す”のかとすごく疑問に思ったことを覚えています。
> “返す”とはなんだ!?と思ったことがあります。

これはちょっと悩むところですね。
ストーリーの前後関係があるので、ある程度できてから調整するしかなさそうです。

> それも重要なことですが、特にどこが大切なのかをぱっと見でわかるようにすればさらに良いと思いました。

大切でないことは書いていません。
その中でも特に、ということなのでしょうが、これも全体のバランスがありますので、最終段階の作業になりますね。


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

Name: array [URL]  ..熟練のプログラマー(60,817ポイント)   Date: 2009/11/14(土) 00:43   No:41943     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
> たかぎさん

CUIは慣れてしまえば、パイプラインやgrepなど用いて検索にも長けるので便利ですよね。
動作も軽いですし。


> 講師として学校や企業研修で指導した経験からすると、コマンドプロンプトはほとんど障害になりません。

確かに、講師がいる状態であれば実行環境などは問題にならないと思いますが、Web上だと独学になるので
コンパイル環境の敷居を下げた方が・・・と思ったのですが

MinGWという環境は使ったことがありませんでしたのでVCの方が敷居が低いとは私には分かりませんでした。

ちなみに、私はCygwinのGCCを使っていたのですがを単独で使うとコピペできないですし
私の環境だとTeraTermを併用していますがTeraTermの環境もそろえるのかと思うと、敷居が高くなると
懸念してました。


とりあえず、私も再度C言語を学びなおすチャンスだと思っているので「c言語徹底入門」をチェックしながら
勉強して行こうと思います。今後にも期待しているので頑張ってください




> CERNさん

> 当時、“何を”“どこに”“返す”のかとすごく疑問に思ったことを覚えています。
> “返す”とはなんだ!?と思ったことがあります。
> 私だけ・・・?

 私も、同じ事を思いましたよw 初めてプログラムを勉強した時の記憶が蘇ってきますねー
私の場合、とりあえず、その疑問は置いておいて動作だけ確認しておき
自作関数を勉強し始めた時、やっと“返す”というニュアンスが理解できたと思います。


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

Name: たかぎ [URL]  ..ハッカー(120,681ポイント)   Date: 2009/11/14(土) 06:52   No:41953     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
arrayさん
> 確かに、講師がいる状態であれば実行環境などは問題にならないと思いますが、Web上だと独学になるので
> コンパイル環境の敷居を下げた方が・・・と思ったのですが

講師がいても、ひとりひとりに手取り足取り教えられるわけではないので、それほど大差はありません(すぐ質問できる安心感はあるでしょうが)。
Visual Studioを使うと、数行の簡単なプログラムを試すにも、「ソリューションって何? プロジェクトとは?」、「何か勝手にコードが作られたけどこれは何?」、「実行したけど、一瞬黒い画面が出てすぐ消えてしまいます」と次々に疑問が出てくるわけで、初心者には非常に敷居が高いはずです。

> ちなみに、私はCygwinのGCCを使っていたのですがを単独で使うとコピペできないですし

コピペできますよ。コマンドプロンプトのプロパティを設定してください。
Cygwinのbashなら、タブによる入力補完もコマンドプロンプトより便利ですね。

> 私の環境だとTeraTermを併用していますがTeraTermの環境もそろえるのかと思うと、敷居が高くなると
> 懸念してました。

TeraTermはまったく関係ありませんね。


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

Name: YuO  ..プログラマー(35,968ポイント)   Date: 2009/11/14(土) 12:44   No:41960     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
>> ちなみに、私はCygwinのGCCを使っていたのですがを単独で使うとコピペできないですし
> コピペできますよ。コマンドプロンプトのプロパティを設定してください。

たかぎさんがMacを使われていると言うことなので補足を。

1. コマンドプロンプト起動後,コマンドプロンプトウィンドウのアイコンをクリック
2. プロパティ (特定のショートカットのみまたは現在のコマンドプロンプトのみ) or 既定値 (コマンドプロンプト全体) を選択
3. オプションタブの「簡易編集モード」にチェックを入れる
4. OKで閉じる

簡易編集モードにすると,
・左ボタンドラッグすると選択
・選択時に右クリックすると選択部分をコピー
・非選択時に右クリックすると貼り付け
となります。

TechNet: コマンド プロンプトを構成する
http://technet.microsoft.com/ja-jp/library/cc737937.aspx


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

Name: コメカミ  ..ぴよぴよ(343ポイント)   Date: 2009/11/14(土) 15:43   No:41985     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
これ便利ですねえ。
今までずっとアイコンをクリックしてから"編集"→"範囲指定"でコピーしてました。
作業が効率化します。ありがたやー。


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

Name: コメカミ  ..ぴよぴよ(535ポイント)   Date: 2009/11/14(土) 16:09   No:41987     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
トピから脱線してきてしまったようなので。
私も少し本題に意見させていただきます。

サイトを見させていただきました。

文章の好みの問題かもしれませんが、
私は"、"や、"。"等の句読点など、
文節で改行していただける方が読みやすいと感じます。

段落ごとに文章をぎゅうぎゅうに詰められてしまうとなんとなく息苦しくて、
読み進める為のエネルギー消費が激しくなる感じがします。

ではどんな文章が理想かというと、
最近ではコチラのサイトのような、
このような解説文章が読みやすいと感じました。
http://c-production.com/contents/c/sec09.html

dixqさんの解説もその辺は気を使ってるなと感じてます。


個人的な感覚、感想であり、
一般的な意見かはわかりませんが参考になれば幸いです。


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

Name: たかぎ [URL]  ..ハッカー(120,914ポイント)   Date: 2009/11/14(土) 17:27   No:41996     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
YuOさん、補足ありがとうございます。
配布用のバッチには、はじめからこの設定をしておいてもよいのですが、コマンドプロンプトは常にそうなっていると誤解されるとよくないので悩むところです。

コメカミさん
> 文章の好みの問題かもしれませんが、
> 私は"、"や、"。"等の句読点など、
> 文節で改行していただける方が読みやすいと感じます。

この意味がわかりませんでした。
文節で改行というのを文字通りに解釈すると、

私は
先週
名古屋へ
新幹線で
行きました。

のような書き方になるわけですが、明らかにこれではありませんよね。
句読点で改行というのは、句点はともかく、読点で改行するのは日本語の表記法として間違っています。
また、リキッドデザインの観点からもふさわしくありません。

> 段落ごとに文章をぎゅうぎゅうに詰められてしまうとなんとなく息苦しくて、
> 読み進める為のエネルギー消費が激しくなる感じがします。

理想とされるサイトを見ましたが、むしろそちらのほうが文字が詰まっているように思います。

もしかして、サイトの横幅のことをいわれているのでしょうか?
だとすると、これはスタイルシートの問題ですので、いずれ調整すると思います。
最終的には、左右のどちらかにナビゲーションを付けると思いますので、本文の横幅は狭くなります。
ただ、リキッドデザインやユニバーサルデザインとの相性もありますので、どちらを優先すべきかは迷うところです。


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

Name: コメカミ  ..かけだし(1,435ポイント)   Date: 2009/11/14(土) 19:37   No:42005     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
推敲と説明力が足りなくてすみません。
文節のクダリ、
後から読み返したら自分でも意味がよくわかりませんでした。


デザインの手法については無知なのでなんともいえませんが。


>>理想とされるサイトを見ましたが、むしろそちらのほうが文字が詰まっているように思います。
えーと、"左右にびっしり詰まっている"という感じをお伝えしたかったのです。

こうではなく、
■■■■■■■■■■■■■■■■■■■■○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○、■■■■■■■■■■■■■■■■■。□□□□□□□□□□□□□□□□□□、■■■■■■■■■■■■■■■■■■■■■■。○○○○○○○○○○○○○○○○。●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●、□□□□□□□□□□□□□□□□□■■■■■■■■■■■■■■■■■□□□□□□□□□□□□□□□□□■■■■■■■■■■■■■■■■■。◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇、■■■■■■■■■■。◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆、○○○○○○○○○○○○○。

こう、という感じのことを言いたかったのです。
■■■■■■■■■■■■■■■■■■■■
○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○、
■■■■■■■■■■■■■■■■■。
□□□□□□□□□□□□□□□□□□、■■■■■■■■■■■■■■■■■■■■■■。
○○○○○○○○○○○○○○○○。
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●、
□□□□□□□□□□□□□□□□□■■■■■■■■■■■■■■■■■
□□□□□□□□□□□□□□□□□■■■■■■■■■■■■■■■■■。
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇、■■■■■■■■■■。
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆、○○○○○○○○○○○○○。

…伝わりますでしょうか。そもそも思ったとおりに表示されるかちょっと自信がありませんが。


>>もしかして、サイトの横幅のことをいわれているのでしょうか?
それもあります。一行が長いと次の行を探し難いですよね。
でもそれは後で修正するそうなので置いておいきます。


加えて、お伝えしたかったのは、
行が変わるときに単語が分かれてしまうのは読みにくいな、ということでした。


>>読点で改行するのは日本語の表記法として間違っています。
はい、それはその通りですが。
私は、"文章が長い為に行が変わるときに単語が分かれてしまった状態"というのが少々読みにくいと感じます。


ですので文章がある程度の長さになったら句点でも文節でもいいので
何かを目安に単語が切れないように改行すると読みやすいのではないかと思っています。



小説や新聞などの読み物の場合文章だけに集中していればいいのであまり気にならないのですが、
なにか手を動かしながら説明を読み進めていくような解説書などでは、
"解説の読解"と、"読解した内容の実践"で集中が分散するからか、
単語が次の行にまたがるような記述の文章だと読みにくさが結構気になって枷に感じます。

ですので、入門手引き的な解説文なら、
日本語的に間違っていても、
読む行為に負荷がかからないように気を使った方がいいのではと思いました。

私の頭が弱いだけかもしれませんが、小さな負荷でも積み重なると大きくなると思い意見しました。
頭が弱いなりにそういう感覚もあるとだけお伝えしたかったのですが、伝わりますでしょうか。
文章に対する感覚の説明って難しいです。


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

Name: コメカミ  ..かけだし(1,799ポイント)   Date: 2009/11/14(土) 19:41   No:42006     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
上記説明に補足です。

コチラが左右に詰まっている状態です
■■■■■■■■■■■■■■■■■■■■○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○、■■■■■■■■■■■■■■■■■。□□□□□□□□□□□□□□□□□□、■■■■■■■■■■■■■■■■■■■■■■。○○○○○○○○○○○○○○○○。●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●、□□□□□□□□□□□□□□□□□■■■■■■■■■■■■■■■■■□□□□□□□□□□□□□□□□□■■■■■■■■■■■■■■■■■。◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇、■■■■■■■■■■。◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆、○○○○○○○○○○○○○。



コチラは確かに上下に詰まっているとも取れますね。説明難しいです
■■■■■■■■■■■■■■■■■■■■
○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○、
■■■■■■■■■■■■■■■■■。
□□□□□□□□□□□□□□□□□□、■■■■■■■■■■■■■■■■■■■■■■。
○○○○○○○○○○○○○○○○。
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●、
□□□□□□□□□□□□□□□□□■■■■■■■■■■■■■■■■■
□□□□□□□□□□□□□□□□□■■■■■■■■■■■■■■■■■。
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇、■■■■■■■■■■。
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆、○○○○○○○○○○○○○。


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

Name: コメカミ  ..かけだし(1,873ポイント)   Date: 2009/11/14(土) 19:48   No:42007     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
リキッドデザイン調べてみました。
つまるところ私はリキッドデザインそのものがちょっと苦手なのですね。
リキッドデザインというものが一般的なものらしいだけにちょっとへこみます。orz


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

Name: たかぎ [URL]  ..ハッカー(121,226ポイント)   Date: 2009/11/14(土) 20:08   No:42009     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
> …伝わりますでしょうか。そもそも思ったとおりに表示されるかちょっと自信がありませんが。

大体分かりました。
理想だとされていたサイトは、元がメールマガジンなのでこういう書き方になっていたんだと思います。
私も、メールや、この掲示板ではそんな書き方をしていますからね。
つまり、目的によって使い分けています。

> 一行が長いと次の行を探し難いですよね。

これについては、別の方法で対策しています。
現状では完全に徹底されているわけではありませんが、段落の構成には「3行ルール」を適用しています。
XGAないしWXGAの画面で見て、だいたい1段落が3行程度になるようにしています。
3行だと、上・中・下段ということで判別しやすく、行を見失う可能性がほとんどなくなります。

> なにか手を動かしながら説明を読み進めていくような解説書などでは、
> "解説の読解"と、"読解した内容の実践"で集中が分散するからか、
> 単語が次の行にまたがるような記述の文章だと読みにくさが結構気になって枷に感じます。

書籍とかでそういう指摘を聞いたことがないですね。
入門書なんかだと同じ状況だと思うのですが...。
製品の取扱説明書なんかでも聞いたことがありません。
この件については、他のかたのご意見もあわせてお聞きしたいと思います。


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

Name: たかぎ [URL]  ..ハッカー(121,267ポイント)   Date: 2009/11/14(土) 20:10   No:42010     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
> コチラは確かに上下に詰まっているとも取れますね。

そうなんです。
上下に詰まると、行を追うのが余計に大変になります。
私なんかは、文章からいったん目を離すと、どこを読んでいたのか探さなければならなくなります。


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

Name: tkmakwins15  ..比類無きプログラマー(98,602ポイント)   Date: 2009/11/15(日) 01:07   No:42045     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
デザインについては、確かに少し横に広がっていて読みにくく感じるところがあります。
もう少し左右に空白をあけても良いと思います。

ひとつ気になることがあるのですが、putchar()がマクロで実装されている処理系では、
#include<stdio.h>なしではコンパイルエラーになる気がするのですが、どうでしょうか?


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

Name: たかぎ [URL]  ..ハッカー(122,810ポイント)   Date: 2009/11/15(日) 01:10   No:42046     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
> ひとつ気になることがあるのですが、putchar()がマクロで実装されている処理系では、
> #include<stdio.h>なしではコンパイルエラーになる気がするのですが、どうでしょうか?

putcharをマクロで実装してもかまいませんが、実体を持つ関数も用意しなければならないことになっています。
ですので、その点は大丈夫です。


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

Name: hoge  ..入門者(3,167ポイント)   Date: 2009/11/15(日) 13:02   No:42085     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
> putcharをマクロで実装してもかまいませんが、実体を持つ関数も用意しなければならないことになっています。
> ですので、その点は大丈夫です。

すべての処理系が忠実に規格に従っていればいいのですが、規格に反して、関数版を提供しない処理系もあります。
初心者が入手しやすいものだと、Light C 体験版、LSI-C 試食版などが関数版を提供していません。


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

Name: たかぎ [URL]  ..ハッカー(123,005ポイント)   Date: 2009/11/15(日) 13:06   No:42086     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
> 初心者が入手しやすいものだと、Light C 体験版、LSI-C 試食版などが関数版を提供していません。

標準準拠度が非常に低いもの、重大な不具合があるものを相手にしても仕方ないと思います。
いずれも古い処理系ですので、切っても問題ないと考えます。


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

Name: たかぎ [URL]  ..ハッカー(123,082ポイント)   Date: 2009/11/15(日) 13:37   No:42087     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
LSI-C86やLight Cのような16ビットコンパイラは、Vistaでは日本語の入出力がまともにできませんね。
ファイル名やディレクトリにもロングファイル名が使えないといった問題もあります。
これらを扱うには大量の補足説明が必要になりそうですが、そこまでやる価値はないでしょうね。


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

Name: hoge  ..入門者(3,196ポイント)   Date: 2009/11/15(日) 14:58   No:42095     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
> 標準準拠度が非常に低いもの、重大な不具合があるものを相手にしても仕方ないと思います。
> いずれも古い処理系ですので、切っても問題ないと考えます。

まぁ、そうなんだけど、普通、初心者は処理系の標準準拠度は知らないし、
何故か、いまだにLSI-Cを使おうとする人がいるんだよなぁ。

あと気になった点。
> ループの最初に 式1の i = 0 が実行され、i に 0 が格納される。

式は、評価するもので、実行するものではないです。
事前に『評価』の意味を解説しているなら、評価に直しておいた方がいいです。


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

Name: たかぎ [URL]  ..ハッカー(122,995ポイント)   Date: 2009/11/15(日) 15:07   No:42096     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
> まぁ、そうなんだけど、普通、初心者は処理系の標準準拠度は知らないし、
> 何故か、いまだにLSI-Cを使おうとする人がいるんだよなぁ。

初心者は自分で判断がつかないからこそ、不適切な処理系は使わないように指導する(少なくとも推奨しない)のも入門書なり入門サイトのつとめではないでしょうか?
いまだにLSI-C86を使おうとする人がいるのは、古い入門書や入門サイト(特にこちら)が原因ですから。


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

Name: tkmakwins15  ..比類無きプログラマー(98,646ポイント)   Date: 2009/11/15(日) 18:28   No:42105     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
>たかぎさん

無知のまま誤った指摘をしてしまいすみませんでした。




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

Name: たかぎ [URL]  ..ハッカー(123,091ポイント)   Date: 2009/11/15(日) 18:32   No:42106     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
tkmakwins15さん
> 無知のまま誤った指摘をしてしまいすみませんでした。

いえいえ。hogeさんからも指摘があったように、そういった処理系が実在するのは確かですから。
非標準処理系への移植性までにらんだ内容にすると、非常に話がややこしくなり、たぶん初学者には理解できなくなります。
ある程度は、思い切った絞り込みが必要ですね。



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

Name: たかぎ [URL]  ..ハッカー(123,276ポイント)   Date: 2009/11/16(月) 00:07   No:42122     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
hogeさん
> あと気になった点。
>> ループの最初に 式1の i = 0 が実行され、i に 0 が格納される。
>
> 式は、評価するもので、実行するものではないです。
> 事前に『評価』の意味を解説しているなら、評価に直しておいた方がいいです。

これにコメントするのを忘れていました。
最初、評価の意味を解説していなかったので、やむを得ずそうしていたのですが、後から追加したのでそのほうがよいですね。

他の部分も多少手直ししてアップロードしておきました。
第2章も、ほんの少しだけ書き始めています(アップロードもしています)が、まだご意見をいただくレベルにはほど遠いかと思います。


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

Name: まりも  ..初心者(7,047ポイント)   Date: 2009/11/18(水) 00:18   No:42232     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
初めまして。
まだC言語の本を開いて二か月足らずの超初心者です。
ITとはまったく無縁で過ごしてきたので、情報処理やその他と並行して勉強中です。

なので、お役に立つコメントも出来ない上に、非常に恐縮なのですが、
困っています。><

たかぎさんが現在作成中のC言語入門サイトの1.2のコラム欄の
『バイブライン』を実行中に(たぶんWindows?の)小さなコマンドが出てきて、
そのコマンドを閉じた後、コンソール画面の表記が微妙に変化し、ソースコードの
実行結果で日本語が文字化けしてしまうという事態になってしまいました。

経緯と現象を整理して説明します。(記憶があいまいなのですが・・)

コラム欄を見ながら、コンソール画面に

>ch1_2_1.exe | a.exe ・・・・と入力。

小さいコマンドが出てくる。⇒文章はすべて英語で、下方に2つボタンがあり、
なぜかそのボタンは日本語で一つは「閉じる」、もう一つは「無視」とあったので、
「閉じる」と選択。

一瞬画面が切り替わるような(瞬くような感じ?)現象があった後、
コンソール画面の表記が微妙に変化。

<わかる範囲で変化してるところ>
@¥→が一切無くなって、/→の反対斜線に(たぶん)置き換わっている。
Aソースコード  printf()を使用した実行結果で、日本語表示が一切できなくなった。
 (日本語だけ全部文字化け。英字や数字は問題なく表示。)

  ■使用しているOS■
Windows Vista Home Basic
Intel(R) Core(TM) 2duo CPU E7200 @ 2.53GHz
2.00GB RAM 32ビット オペレーティングシステム

■コンパイラ : gcc
■エディタ  : メモ帳(notepad)

解決方法やヒントなど知っていたら、教えてください。



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

Name: たかぎ [URL]  ..ハッカー(123,398ポイント)   Date: 2009/11/18(水) 07:36   No:42240     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
まりもさん

実行したプログラムは掲載していたものでしょうか?
違う場合は補足してください。

> 小さいコマンドが出てくる。⇒文章はすべて英語で、下方に2つボタンがあり、
> なぜかそのボタンは日本語で一つは「閉じる」、もう一つは「無視」とあったので、
> 「閉じる」と選択。

このコマンドというのがよくわかりません。
メッセージの全文か画像を補足してください。

現象をみる限り、英語モードに切り替わったのだと思います。
chcp 437というコマンドで切り替わる状態ではないでしょうか?(戻すにはchcp 932です)


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

Name: Hermit  ..プログラマー(25,608ポイント)   Date: 2009/11/18(水) 19:36   No:42273     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
>> 初心者が入手しやすいものだと、Light C 体験版、LSI-C 試食版などが関数版を提供していません。
>標準準拠度が非常に低いもの、重大な不具合があるものを相手にしても仕方ないと思います。
>いずれも古い処理系ですので、切っても問題ないと考えます。

3年前くらいですが、日立系のPDP組立機の組込みボードの製造現場に、LSIC80 での開発環境がありました。
(Z80? CPUまでは見なかったので不明。当然、古きMSDOS環境、まだそれで開発しているそうです)

他はともかく、LSIC 関連は侮らないほうがいい気がします。


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

Name: たかぎ [URL]  ..ハッカー(123,650ポイント)   Date: 2009/11/18(水) 21:25   No:42282     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
Hermitさん

組込み開発では、LSI-Cにかぎらず、標準準拠度の低い処理系や非標準処理系が多数存在することは十分承知しています。
一方、標準準拠度が十分高い処理系であっても、PCのプログラミングしか経験がない人にとっては、想像もできないほどのバリエーションがあります。

ただ、そうした話を持ち出すのであれば、それこそ1バイトが8ビットではない場合の話や、何型のポインタかによってサイズが変わる話などをしなければならなくなります。
Cの難しさのかなりの部分は移植性に絡むところにあります。入門者にそんな話を最初からする必要はありませんね。


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

Name: まりも  ..初心者(7,356ポイント)   Date: 2009/11/19(木) 01:12   No:42293     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
たかぎさん

返答ありがとうございます。
そして、返事が遅くなってしまってすみませんでした。

コンソール画面でchcp 932 と入力したら、無事元通りになりました。
(ありがとうございます。;;)

> 小さいコマンドが出てくる。⇒文章はすべて英語で、下方に2つボタンがあり、
> なぜかそのボタンは日本語で一つは「閉じる」、もう一つは「無視」とあったので、
> 「閉じる」と選択。

このコマンドというのがよくわかりません。
メッセージの全文か画像を補足してください。

↑これに対しての返答なのですが、プリントスクリーンなどで保存していなかったこと
(使い方を知らなかったので;;)同じ現象がどうしても再現できなかったので
もはや説明できません。ごめんなさい。

その後、どうしても『バイブライン』実行させたかったので、試行錯誤してみました。
長文になってしまい、(そしてなぜか?)エラーで投稿失敗してしまったので、分けて書き記して見ます。

わかりにくくて間違っている(かもしれない?)文章ですが、ごめんなさい。



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

Name: まりも  ..初心者(8,529ポイント)   Date: 2009/11/19(木) 01:15   No:42294     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
>>>つづきです。

◆再トライの過程と、気がついた事◆

@ ch1_2_1.c をコンパイルしてできた実行プログラム a.exe のファイル名を ch1_2_1.exe に変えた後、
 コンソール画面に
  ch1_2_1.exe | a.exe と入力して Enter キーを押す
・・・・すると、なぜか又英語モードに切りかわってしまう。
(今回は 初回に説明した 小さいコマンド は出てこなかった。)

A 改めてファイルを確認。
  ch1_2_1.exeファイル (種類:アプリケーション)は存在するが、a.exeというファイルが無い。

B 以前に作った適当なCファイルをコンパイル。

C もう一回ファイルを確認。
  a.exeファイルができている事を確認。
 (ここで、最後にコンパイルしたCファイルが常に a.exeファイルになるのかな?と推測)

D 別のCファイル(実行結果:こんにちは)をコンパイルして実行。
  ⇒「こんにちわ」で表示されるはずが、意味不明の記号の羅列で表示。
  (=日本語の文字化けを確認)
  ⇒ chcp 932 と入力して日本語モードに修正。
  もう一回実行して、日本語モードに切り替わった事を確認。

E 『バイブライン』再トライ。
 ★ a.exeファイルを削除。
 ★ ch1_3.c ファイルをコンパイル ⇒ a.exeファイルが出来た事を確認。
  ※この時点で アプリケーションという種類のファイルは「 ch1_2_1.exe 」と「a.exe」の2つのみ。

F ch1_2_1.exe | a.exe と入力して Enter キーを押す

 A ⇒ がコンソール画面で表示されて、成功!

・・・・どうやら 「a.exeファイル」が無い状態で「 ch1_2_1.exe | a.exe 」と入力すると、
私の場合、なぜか、英語モードになってしまうみたいです。

 
『前節の1.2 文字を出力してみようで作った ch1_2_1.c をコンパイル してできた実行プログラム a.exe のファイル名を ch1_2_1.exe に変えてください。その上で、今回作った  a.exe と組み合わせて、次のように実行させてみてください。』

 順を追ってやっていったつもりなのですが、この文章(↑)を読むと、私みたいに a.exe ファイルが無い
 状態で実行して、思わぬ動作になってしまうかもしれません。
 (私にしかあてはまらないかもしれないのですが。^^;)

 1つ何かやろうとすると、芋づる式に勉強しないといけない事が出てきて、飽和状態です。
 疑問もたくさん出てきます。
 
 特につまづいた時思うのが、「何を調べてたらいいのか?」がわからなくて苦労する事です。
 調べる項目(キーワード)が分かれば、調べて答えを探せます。

 すべて万遍なく説明しない代わりに、つまづきやすい所や概念などで、
 「○○は◇◇の分野です。詳しく理解したい人は◇◇を調べましょう。」
 のように、ヒントを添えてもらえると、すごく助かると思います。

 (ちなみにファイルの保存の仕組みや、形式、種類、拡張子、ディレクトリ、などの意味がさっぱり
  わからなくて、本やサイトに書かれた以外の事を試みる(=冒険)事がなかなかできませんでした。
  初心者は、想定外の事が起きると、それだけでパニックになってしまうので・・・orz。)

  たかぎさんのサイト、新しい発見がたくさんあって面白いです。
  (特に#include<stdio.h>が無くてもちゃんと実行できるのには感動しました!)
  大変だと思いますが、無理のないペースで、是非サイトを完成させて下さい。
  楽しみにしています。

  長文、失礼しました。


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

Name: Mist  ..比類無きプログラマー(72,007ポイント)   Date: 2009/11/19(木) 09:33   No:42305     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
> まりもさん

ちょっと気になったので一応指摘。
×:バイブライン
○:パイプライン


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

Name: たかぎ [URL]  ..ハッカー(123,822ポイント)   Date: 2009/11/19(木) 10:23   No:42307     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
まりもさん
> ・・・・どうやら 「a.exeファイル」が無い状態で「 ch1_2_1.exe | a.exe 」と入力すると、
> 私の場合、なぜか、英語モードになってしまうみたいです。

情報ありがとうございます。
XP Professional SP3とVista Home Premium SP2(VMware Fusionで実行)で確認しましたが、現象が再現できませんでした。
もしかすると、a.exeというプログラムがPATHの通ったどこか別の場所にあって、それが悪さしているかもしれません。
念のため、a.exeが無い状態でa.exeを実行してみてください。似たような現象が起きるなら、この仮定が当たっている可能性大です。


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

Name: まりも  ..初心者(8,391ポイント)   Date: 2009/11/19(木) 22:52   No:42348     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
Mistさん

ご指摘ありがとうございます。
文字が点々なのか○なのかよく見えなくて・・・><

恥かきついでにもう一歩念押しで確認させてください。
・・・ハとフについているのは、両方とも○が正解で良いですか?
(ローマ字読みで・・・pa/i/pu/ra/i/nn ⇒であってますか?)

たかぎさん

入門サイトのコメント募集のスレッドなのに、私の問題解決の為に使用してしまって申し訳ありません。

教えてもらった通りに a.exe が無い状態で実行してみたら
'a.exe'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして
認識されていません。、
という表示がされました。

加えて、昨日のこちらに投稿したのと同様の手順を再度実行したのですが、
同じ現象(=英語モードに切り替わる)にならず、もう何がなんだかわかりません・・・・・。

ミス入力が多いので、自分で気づかずにコンソール画面に何か動作させるような事をしてしまった可能性もあります。

ともあれ、英語モードに切り替わってしまうという現象も無くなりました。
また、英語モードに切り替わっても、元に戻す方法を教えてもらったので、
同じ現象になっても、対応できます。感謝します。

これを機会に、コンソール画面の仕組みを詳しく調べてみようと思います。

貴重な時間を割いて頂いて、本当にありがとうございました。

入門サイト、応援してます。がんばってください。






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

Name: たかぎ [URL]  ..ハッカー(123,840ポイント)   Date: 2009/11/19(木) 23:04   No:42349     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
> 恥かきついでにもう一歩念押しで確認させてください。
> ・・・ハとフについているのは、両方とも○が正解で良いですか?
> (ローマ字読みで・・・pa/i/pu/ra/i/nn ⇒であってますか?)

pipelineです。


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

Name: たかぎ [URL]  ..ハッカー(123,548ポイント)   Date: 2009/11/19(木) 23:16   No:42350     
Title: Re:【雑談】C言語の入門サイトを書きかけてみました    
えらい遅レスですが...

> (ちなみにファイルの保存の仕組みや、形式、種類、拡張子、ディレクトリ、などの意味がさっぱり
>   わからなくて、本やサイトに書かれた以外の事を試みる(=冒険)事がなかなかできませんでした。
>   初心者は、想定外の事が起きると、それだけでパニックになってしまうので・・・orz。)

上で挙げられているようなことは、C言語のプログラミングに関することではなく、Windowsの使い方の話ですね。
この辺りは悩むところなのですが、WindowsないしはPCの使い方の説明を詳しく入れだすと、どんどん内容が本質から外れていってしまいます。
仮に説明するとしても、どこから説明するかは本当に悩ましいところです。

電源の入れ方?
キーボードやマウスの使い方?
Windowsのセットアップの仕方?
IMEの使い方?
GUIプログラムの起動の仕方?
ファイルやディレクトリの概念の説明?
エクスプローラの使い方?
エディタの使い方?
環境変数の説明?
コマンドプロンプトの使い方?

自分を基準に、ここから説明してほしいというのは簡単なのですが、万人向けとなると線引きは本当に悩みます。
極論をいえば、対象読者を「Windowsを使える人」として、それは当然コマンドプロンプトも使いこなせることを想定しているというのも、選択肢としてはありですね。
実際、Windowsの使い方はCプログラミングとは直接関係ありませんので。


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



Name: kuroka  ..ぴよぴよ(875ポイント)   Date: 2009/11/17(火) 10:48   No:42201       
Title: オイラー、フーリェに関する問題です    
見ていただきありがとうございます。
問題は、物理系の問題をC言語を用いて解くことなのですが
未熟なもので、プログラムを少し読むことは出来ても、作り上げる能力がほぼ皆無です。
ですので、ここで質問しようと思い、書き込みました



質量1の3つの質点(1,2,3)が3つのバネ(A,B,C)によって接合されている。自然長の状態でのそれぞれの座標を
r1=(0,0) r2=(0,10) r3=(10,5) (←ベクトルです)
である。それぞれのバネのバネ係数は、全てk=1である。

問一
質点をr1=(0.01,1)にして、速度0でそっと放した。その後の運動をオイラー法で調べよ。

問二
固有振動をフーリェ変換で調べよ


です。
よろしければ、プログラムを書いていただいたり、ヒントを頂けたら
ありがたいです。どうかよろしくおねがいします


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


Name: kuroka  ..ぴよぴよ(937ポイント)   Date: 2009/11/17(火) 10:55   No:42202     
Title: Re:オイラー、フーリェに関する問題です    
申し訳ありません
訂正です

問一
質点をr1=(0.01,1)

質点をr1=(0.01,0)

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


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

Name: softya  ..熟練のプログラマー(40,783ポイント)   Date: 2009/11/17(火) 11:12   No:42204     
Title: Re:オイラー、フーリェに関する問題です    
まず、規約と注意事項を良く読んで従っていただきたいです。

>課題の丸投げ(問題文だけ書く事)は禁止です。
>自分でどこまでやったのか、今どこが解らないのかを明確にして下さい。
>さっぱり解らず、手も足も出ない時は、その事を明記の上、
>勉強方法からアドバイスを受けましょう。

C言語の書き方はともかく、それぞれの問題を解くための公式や考え方は理解されていると思いますので、それを示していただきたいですね。

下記のような段階を踏んでプログラムは完成します。

1.処理の方法を考える(設計する)
 ↓
2.プログラミング言語でコーディングする。
 ↓
3.デバッグする。

なので、まず1の段階をクリアしてください。


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

Name: kuroka  ..入門者(2,559ポイント)   Date: 2009/11/18(水) 16:32   No:42260     
Title: Re:オイラー、フーリェに関する問題です    
プログラムをある程度はつくりましたが
コンパイルエラーが出てしまいます
よければ原因などよろしくお願いします



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

int Fx(double x1,x2,y1,y2,l){

double l0,Dl,fx;
l0 = sqrt((x2-x1)^2+(y2-y1)^2);

Dl = l0 - l;//変位

fx = (-Dl*(x1-x2)/l0);
return(fx);
}

int Fy(double x1,y1,x2,y2,l){

double l0,Dl,fy;
l0 = sqrt((x2-x1)^2+(y2-y1)^2);

Dl = l0 - l;//変位

fy = (-Dl*(y1-y2)/l0);
return(fy);
}

int main(void){

double l10,l20,l30,fx1,fx2,fx3,fy1,fy2,fy3;

l10 = 10.0;
l20 = 11.18033989;
l30 = 11.18033989;


double Dt,t,vx1,vy1,vx2,vy2,vx3,vy3;
Dt = 0.0001;
int i;
x1 = 0.01;
y1 = 0.00;
x2 = 0.00;
y2 = 10.00;
x3 = 10.00;
y3 = 5.00;

vx1 = 0.0;
vy1 = 0.0;
vx2 = 0.0;
vy2 = 0.0;
vx3 = 0.0;
vy3 = 0.0;

fx1 = Fx(x1,x2,y1,y2,l10)+Fx(x3,x1,y3,y1,l30);
fy1 = Fy(x1,x2,y1,y2,l10)+Fy(x3,x1,y3,y1,l30);
fx2 = Fx(x2,x1,y2,y1,l10)+Fx(x3,x2,y3,y2,l20);
fy2 = Fy(x2,x1,y2,y1,l10)+Fy(x3,x2,y3,y2,l20);
fx3 = Fx(x1,x3,y1,y3,l30)+Fx(x2,x3,y2,y3,l20);
fy3 = Fy(x1,x3,y1,y3,l30)+Fy(x2,x3,y2,y3,l20);



for(i=0;i<100;i++){



vx1 = vx1+fx1*Dt;
vy1 = vy1+fy1*Dt;
vx2 = vx2+fx2*Dt;
vy2 = vy2+fy2*Dt;
vx3 = vx3+fx3*Dt;
vy3 = vx3+fy3*Dt;

x1 = x1+vx1*Dt;
y1 = y1+vy1*Dt;
x2 = x2+vx2*Dt;
y2 = y2+vy2*Dt;
x3 = x3+vx3*Dt;
y3 = x3+vy3*Dt;

printf("x1=%lf y1=%lf x2=%lf y2=%lf x3=%lf y3=%lf \n",x1,y1,x2,y2,x3,y3);

fx1 = Fx(x1,x2,y1,y2,l10)+Fx(x3,x1,y3,y1,l30);
fy1 = Fy(x1,x2,y1,y2,l10)+Fy(x3,x1,y3,y1,l30);
fx2 = Fx(x2,x1,y2,y1,l10)+Fx(x3,x2,y3,y2,l20);
fy2 = Fy(x2,x1,y2,y1,l10)+Fy(x3,x2,y3,y2,l20);
fx3 = Fx(x1,x3,y1,y3,l30)+Fx(x2,x3,y2,y3,l20);
fy3 = Fy(x1,x3,y1,y3,l30)+Fy(x2,x3,y2,y3,l20);

}





return;
}



で、出るコンパイルエラーが

pbl-A.c:4: error: expected declaration specifiers or ‘...’ before ‘y1’
pbl-A.c:4: error: expected declaration specifiers or ‘...’ before ‘y2’
pbl-A.c:4: error: expected declaration specifiers or ‘...’ before ‘l’
pbl-A.c: In function ‘Fx’:
pbl-A.c:7: error: ‘x2’ undeclared (first use in this function)
pbl-A.c:7: error: (Each undeclared identifier is reported only once
pbl-A.c:7: error: for each function it appears in.)
pbl-A.c:7: error: ‘y2’ undeclared (first use in this function)
pbl-A.c:9: error: ‘l’ undeclared (first use in this function)
pbl-A.c: At top level:
pbl-A.c:15: error: expected declaration specifiers or ‘...’ before ‘y1’
pbl-A.c:15: error: expected declaration specifiers or ‘...’ before ‘x2’
pbl-A.c:15: error: expected declaration specifiers or ‘...’ before ‘y2’
pbl-A.c:15: error: expected declaration specifiers or ‘...’ before ‘l’
pbl-A.c: In function ‘Fy’:
pbl-A.c:18: error: ‘x2’ undeclared (first use in this function)
pbl-A.c:18: error: ‘y2’ undeclared (first use in this function)
pbl-A.c:20: error: ‘l’ undeclared (first use in this function)
pbl-A.c: In function ‘main’:
pbl-A.c:38: error: ‘x1’ undeclared (first use in this function)
pbl-A.c:39: error: lvalue required as left operand of assignment
pbl-A.c:40: error: ‘x2’ undeclared (first use in this function)
pbl-A.c:41: error: ‘y2’ undeclared (first use in this function)
pbl-A.c:42: error: ‘x3’ undeclared (first use in this function)
pbl-A.c:43: error: ‘y3’ undeclared (first use in this function)
pbl-A.c:52: error: too many arguments to function ‘Fx’
pbl-A.c:52: error: too many arguments to function ‘Fx’
pbl-A.c:53: error: too many arguments to function ‘Fy’
pbl-A.c:53: error: too many arguments to function ‘Fy’
pbl-A.c:54: error: too many arguments to function ‘Fx’
pbl-A.c:54: error: too many arguments to function ‘Fx’
pbl-A.c:55: error: too many arguments to function ‘Fy’
pbl-A.c:55: error: too many arguments to function ‘Fy’
pbl-A.c:56: error: too many arguments to function ‘Fx’
pbl-A.c:56: error: too many arguments to function ‘Fx’
pbl-A.c:57: error: too many arguments to function ‘Fy’
pbl-A.c:57: error: too many arguments to function ‘Fy’
pbl-A.c:73: error: invalid operands to binary + (have ‘double (*)(double)’ and ‘ double’)
pbl-A.c:81: error: too many arguments to function ‘Fx’
pbl-A.c:81: error: too many arguments to function ‘Fx’
pbl-A.c:82: error: too many arguments to function ‘Fy’
pbl-A.c:82: error: too many arguments to function ‘Fy’
pbl-A.c:83: error: too many arguments to function ‘Fx’
pbl-A.c:83: error: too many arguments to function ‘Fx’
pbl-A.c:84: error: too many arguments to function ‘Fy’
pbl-A.c:84: error: too many arguments to function ‘Fy’
pbl-A.c:85: error: too many arguments to function ‘Fx’
pbl-A.c:85: error: too many arguments to function ‘Fx’
pbl-A.c:86: error: too many arguments to function ‘Fy’
pbl-A.c:86: error: too many arguments to function ‘Fy’


本当に困っています
よろしくお願いします


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

Name: softya  ..熟練のプログラマー(44,221ポイント)   Date: 2009/11/18(水) 17:11   No:42262     
Title: Re:オイラー、フーリェに関する問題です    
間違いを修正しました。
修正点は以下の通り
1.引数にdouble x1,x2と言う書き方は出来ません。double x1,double x2と書き換えました。
2.C言語はべき乗の演算子がありませんので、POW関数に置き換えました。
3.double x1,x2,x3,y1,y2,y3;の定義忘れを追加。
4.reutrnの戻り値が抜けていたので追加。
オイラーは記憶の彼方なので、ご自分で結果は検証してみてください。


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

int Fx(double x1,double x2,double y1,double y2,double l){
double l0,Dl,fx;

l0 = sqrt(pow((x2-x1),2)+pow((y2-y1),2));
Dl = l0 - l;//変位
fx = (-Dl*(x1-x2)/l0);
return(fx);
}

int Fy(double x1,double y1,double x2,double y2,double l){
double l0,Dl,fy;

l0 = sqrt(pow((x2-x1),2)+pow((y2-y1),2));
Dl = l0 - l;//変位
fy = (-Dl*(y1-y2)/l0);
return(fy);
}

int main(void){
double l10,l20,l30,fx1,fx2,fx3,fy1,fy2,fy3;

l10 = 10.0;
l20 = 11.18033989;
l30 = 11.18033989;

double x1,x2,x3,y1,y2,y3;
double Dt,t,vx1,vy1,vx2,vy2,vx3,vy3;

Dt = 0.0001;

int i;

x1 = 0.01;
y1 = 0.00;
x2 = 0.00;
y2 = 10.00;
x3 = 10.00;
y3 = 5.00;

vx1 = 0.0;
vy1 = 0.0;
vx2 = 0.0;
vy2 = 0.0;
vx3 = 0.0;
vy3 = 0.0;

fx1 = Fx(x1,x2,y1,y2,l10)+Fx(x3,x1,y3,y1,l30);
fy1 = Fy(x1,x2,y1,y2,l10)+Fy(x3,x1,y3,y1,l30);
fx2 = Fx(x2,x1,y2,y1,l10)+Fx(x3,x2,y3,y2,l20);
fy2 = Fy(x2,x1,y2,y1,l10)+Fy(x3,x2,y3,y2,l20);
fx3 = Fx(x1,x3,y1,y3,l30)+Fx(x2,x3,y2,y3,l20);
fy3 = Fy(x1,x3,y1,y3,l30)+Fy(x2,x3,y2,y3,l20);

for(i=0;i<100;i++){

vx1 = vx1+fx1*Dt;
vy1 = vy1+fy1*Dt;
vx2 = vx2+fx2*Dt;
vy2 = vy2+fy2*Dt;
vx3 = vx3+fx3*Dt;
vy3 = vx3+fy3*Dt;

x1 = x1+vx1*Dt;
y1 = y1+vy1*Dt;
x2 = x2+vx2*Dt;
y2 = y2+vy2*Dt;
x3 = x3+vx3*Dt;
y3 = x3+vy3*Dt;

printf("x1=%lf y1=%lf x2=%lf y2=%lf x3=%lf y3=%lf \n",x1,y1,x2,y2,x3,y3);

fx1 = Fx(x1,x2,y1,y2,l10)+Fx(x3,x1,y3,y1,l30);
fy1 = Fy(x1,x2,y1,y2,l10)+Fy(x3,x1,y3,y1,l30);
fx2 = Fx(x2,x1,y2,y1,l10)+Fx(x3,x2,y3,y2,l20);
fy2 = Fy(x2,x1,y2,y1,l10)+Fy(x3,x2,y3,y2,l20);
fx3 = Fx(x1,x3,y1,y3,l30)+Fx(x2,x3,y2,y3,l20);
fy3 = Fy(x1,x3,y1,y3,l30)+Fy(x2,x3,y2,y3,l20);
}
return 0;
}


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

Name: kuroka  ..入門者(2,664ポイント)   Date: 2009/11/18(水) 18:30   No:42270     
Title: Re:オイラー、フーリェに関する問題です    
ありがとうございます
無事コンパイルできました

しかし、オイラーかなにかの数式がどうも違うようでした
ばね運動なので本来なら増加と減衰をくりかえすはずなんですが
たとえばx1は減衰しっぱなしになってしまいます

どなたか、わかる方は
ご指導などをよろしくお願いします


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

Name: softya  ..熟練のプログラマー(44,542ポイント)   Date: 2009/11/18(水) 18:57   No:42272     
Title: Re:オイラー、フーリェに関する問題です    
まず自分で出来ることしましょう。
もう一度、オイラーについて調べて正しいバネの動きを机上で計算できる知識を得てください。
ここをちゃんとしてないとプログラムを貰ってもプログラムが合っている事が確認できません。
それに、考え方や式をちゃんと書いてもらえばプログラム化を手伝ってくれる人も現れやすくなります。
(しかし、バネ運動の式はすっかり忘れてます。時間が無いので0から勉強しなおすのは勘弁!)


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

Name: kuroka  ..入門者(2,766ポイント)   Date: 2009/11/19(木) 21:54   No:42344 解決!     
Title: Re:オイラー、フーリェに関する問題です    
アドバイスありがとうございます
自分の考えがまとまり、かつそれを記述しないと
確かに失礼ですよね、申し訳ありませんでした

とりあえず、これを改良することに全力を尽くそうと思います
助言をしてくださった方、ありがとうございました
C言語の習得をがんばっていきます!


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



Name: cげん  ..ぴよぴよ(57ポイント)   Date: 2009/11/19(木) 20:32   No:42336       
Title: 教えてください☆    
以下のように実行されるプログラムを作成したのですが、本来は実行結果の例のように最後が「誕生日まであと2ヵ月ですね」と表示されなければいけないのですが、なぜか私が作成したプログラムでコンパイルすると、「誕生日まであと10カ月ですね」と表示されてしまいます。プログラムのどの部分を直せば、「誕生日まであと2ヵ月ですね」と表示されるのでしょうか!? 教えてください!!

【正常の実行結果の例】

<誕生の月>

月:0 【Enterを押す】

入力ミスです!

月:2 【Enterを押す】

<現在の月>

月:22 【Enterを押す】

入力ミスです!

月:12 【Enterを押す】

誕生日まであと2カ月ですね ←この部分です!!


【私が作成したプログラム】

#include<stdio.h>

void error_message(void);
int get_month(void);

int main(){

int birth,now,month;

while(1){

printf("<誕生の月>\n");
birth=get_month();

if(!(birth>=1 && birth<=12))
error_message();
else
break;
}
while(1){

printf("<現在の月>\n");
now=get_month();

if(!(now>=1 && now<=12))
error_message();
else
break;
}

month=now-birth;
if(month<0)
month=12+month;

printf("誕生日まであと%dヶ月ですね\n",month);

return 0;

}

void error_message(void){

printf("入力ミスです!\n");
}

int get_month(void){

int month;

printf("月:");
scanf("%d",&month);

return month;

}



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


Name: non  ..比類無きプログラマー(70,595ポイント)   Date: 2009/11/19(木) 20:57   No:42340     
Title: Re:教えてください☆    
>month=now-birth;
おかしくないですか?



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



Name: SSS  ..ぴよぴよ(29ポイント)   Date: 2009/11/19(木) 14:37   No:42321       
Title: 配列構造体    
こんにちは。
初めて質問させていただきます。

名前、住所、誕生日、電話番号を格納する構造体の配列を10個作って、10人分のデータを入れたいのですがなぜか途中でコマンドプロンプトの表示が崩れて(文字化けが起こる)正常に終了できなくなってしまいます。
コンパイラは特にエラーを吐いていないので理由が分からなくて困っています。

使用しているコンパイラは「LSI C-86 Ver 3.30 試食版」です。

よろしくお願いします。


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

struct date{
char name[128];
char address[128];
char birthday[128];
char phonenumber[128];
};

int getkey(char*a){
int i;
for(i=0;(a[i]=getchar())!='\n';i++){
}
a[i]='\0';
return strlen(a);
}

int getdate(struct date *p1){

char input[128];

printf("「名前」、「住所」、「生年月日」、「電話番号」を入力してください\n名前をどうぞ(全角で10文字まで)\n>");

getkey(input);
sprintf(p1->name,input);

printf("住所をどうぞ\n>");
getkey(input);
sprintf(p1->address,input);

printf("生年月日をどうぞ(yyyy/mm/dd)\n>");
getkey(input);
sprintf(p1->birthday,input);

printf("電話番号をどうぞ\n>");
getkey(input);
sprintf(p1->phonenumber,input);

return 0;
}

int main(void){

int i=0;
struct date Pdate[10];

for(i=0;i<6;i++){
printf("\n%d人目の",i+1);
getdate(&Pdate[i]);
}

for(i=0;i<6;i++){
printf("\n%d人目の\n名 前:%s\n",i+1,Pdate[i].name);
printf("住 所:%s\n",Pdate[i].address);
printf("生年月日:%s\n",Pdate[i].birthday);
printf("電話番号:%s\n",Pdate[i].phonenumber);
}

return 0;
}



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


Name: non  ..比類無きプログラマー(70,378ポイント)   Date: 2009/11/19(木) 16:10   No:42326     
Title: Re:配列構造体    
BCCで動かしてみましたが、字化けはおきませんでした。
コンパイラをもうすこし、まともなものに変えてみてはいかがですか。


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

Name: toyo  ..熟練のプログラマー(45,241ポイント)   Date: 2009/11/19(木) 16:30   No:42327     
Title: Re:配列構造体    
ちょろっと検索したらLSI-Cのスタックサイズは2500バイトとの情報がありました
http://hp.vector.co.jp/authors/VA029427/v-lsic2.htm
512バイトの構造体10個だと完全にスタックオーバーフローしちゃいます
試食版だとスモールモデルでintも2バイトだし制限多いので他のコンパイラの使用をお勧めします


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

Name: SSS  ..ぴよぴよ(83ポイント)   Date: 2009/11/19(木) 17:46   No:42331 解決!     
Title: Re:配列構造体    
配列の大きさ調整したらちゃんと動くようになりました!!
ありがとうございます。

課題で指定されてるコンパイラなので厳しいですねぇ・・・
少し工夫しながら使ってみようと思います。


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

Name: Hermit  ..プログラマー(25,727ポイント)   Date: 2009/11/19(木) 20:22   No:42334     
Title: Re:配列構造体    
どうしても lsic330c 試食版にしたいなら、
スタックサイズが変更できたはずです。
smallモデルだから、プログラムエリアが64kb スタック領域と、heap領域の合計が64kb
合計で 128kb MAX までは使えたと記憶してますが・・・
最近 lcc というと、AT&T の lcc がはいっているので、lsic は入れたくないので・・・
チェックしてません(^^;


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



Name: フランドールの義兄  ..ぴよぴよ(171ポイント)   Date: 2009/11/19(木) 14:41   No:42322       
Title: タイトル画面になってほしいのに    
僕は、DXライブラリを使って、STGをつくっています。
F1キーを押すと、オープニング画面に行くまではいいのですが、F1キーを離すと、またオープニング画面まで戻ってしまいます。

if文のみを記述しますが、
if(key[KEY_INPUT_F1]==0){
PlayMovie("../dat/movie/ACDL_Opening.wmv", 1, DX_MOVIEPLAYTYPE_BCANCEL);
}
else{
LoadGraphScreen(0, 0, "../dat/imig/1/Title.bmp", TRUE);
}
と記述しています。
どこをどのように直せば、F1キーを離してもタイトル画面のままにできますか?


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


Name: dic  ..プログラマー(38,343ポイント)   Date: 2009/11/19(木) 15:23   No:42325     
Title: Re:タイトル画面になってほしいのに    

int mode;
if( key[KEY_INPUT_F1]==0 )
mode = title;
else
mode = ...;

switch( mode )
{
case title:
PlayMovie(...
}


のように現在の状態を保持する変数を用意してはいかがでしょうか?


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

Name: フランドールの義兄  ..ぴよぴよ(184ポイント)   Date: 2009/11/19(木) 17:44   No:42330 解決!     
Title: Re:タイトル画面になってほしいのに    
解決しました!ありがとうございます!

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



Name: 電気屋  ..入門者(2,922ポイント)   Date: 2009/11/18(水) 14:19   No:42252       
Title: ゲームパットのプログラム    
ゲームパットのプログラムを作ったのですが、DAWNのPADしか反応しません。ゲームパットが故障している可能性も考えたのですが、コントロールパネルでテストしたところ正常に動作しました。プログラムでいけないところがあったら教えてください。


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


Name: 電気屋  ..入門者(2,937ポイント)   Date: 2009/11/18(水) 14:21   No:42253     
Title: Re:ゲームパットのプログラム    
一応、4方向に歩くプログラムを改造して作成しています。

if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP ) == 1){ //上ボタンが押されたら
ch.muki=0;} //上向きフラグを立てる
else if( Key[ KEY_INPUT_LEFT ] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_LEFT ) == 1){ //左ボタンが押されたら
ch.muki=1;} //左向きフラグを立てる
else if( Key[ KEY_INPUT_DOWN ] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_DOWN ) == 1){ //下ボタンが押されたら
ch.muki=2;} //下向きフラグを立てる
else if( Key[ KEY_INPUT_RIGHT] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_RIGHT) == 1){ //右ボタンが押されたら
ch.muki=3;} //右向きフラグを立てる
else //何のボタンも押されてなかったら
ch.walking_flag=0; //歩かないフラグを立てる
}


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

Name: toyo  ..熟練のプログラマー(45,125ポイント)   Date: 2009/11/18(水) 14:54   No:42254     
Title: Re:ゲームパットのプログラム    
PAD_INPUT_UP 8
PAD_INPUT_RIGHT 4
PAD_INPUT_LEFT 2
PAD_INPUT_DOWN 1
なので == 1で判定すると PAD_INPUT_DOWN 以外は判定できません
GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_*
の判定は0(押されていない)か0以外(押されている)かで判定するようにしましょう


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

Name: softya  ..熟練のプログラマー(42,239ポイント)   Date: 2009/11/18(水) 15:02   No:42255     
Title: Re:ゲームパットのプログラム    
全て==1でチェックしていますが、AND論理演算の結果は1とは限りません。
(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP ) == 1
たまたま、DOWNだけ一致したんだと思います。
全てを
(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP ) != 0
と同様にしてみてください。


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

Name: 電気屋  ..入門者(2,952ポイント)   Date: 2009/11/19(木) 14:30   No:42319     
Title: Re:ゲームパットのプログラム    
無事動くことができました。ありがとうございました。

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

Name: 電気屋  ..入門者(2,947ポイント)   Date: 2009/11/19(木) 14:31   No:42320 解決!     
Title: Re:ゲームパットのプログラム    


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



Name: Sakana  ..かけだし(1,224ポイント)   Date: 2009/11/19(木) 13:24   No:42315       
Title: 文字の配列変数を一文字ずつ    
test.txtをfgets関数で一行ずつ読み込み、char型の配列変数buf[3]の中身を
一文字ずつ表示するプログラムを書きましたが、画面に文字が表示されません

テキストファイルの中身はabcです




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

int main(void){

FILE *fin;
int i;
char filename[80]="test.txt", buf[3];
if((fin=fopen(filename, "r")) == NULL){
printf("を開けませんでした\n");
exit(1);
}

while(fgets(buf, 3, fin) != NULL){
/*入力データをbufに読み込む*/

//文字を一文字ずつ表示する
for(i=0; i>3; i++){
printf("%s", buf[i]);

}

}
fclose(fin);
getch();
return 0;
}


fgetsの次の行からは、bufにそれぞれ
buf[0]='a'
buf[1]='b'
buf[2]='c'
buf[3]='\0'
と入っているはずなので、画面にはabcと表示されるはずなのですが、コンパイルをしても特にエラーも見当たらなく、どこが間違っているのかわかりませんでした
よろしくお願いします


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


Name: Mist  ..比類無きプログラマー(72,128ポイント)   Date: 2009/11/19(木) 13:46   No:42317     
Title: Re:文字の配列変数を一文字ずつ    
いくつか間違いがあります。

> buf[0]='a'
> buf[1]='b'
> buf[2]='c'
> buf[3]='\0'

このようにはなりません。
char buf[3];と宣言していますのでbuf[0]〜buf[2]までで、buf[3]は存在しません。
一回目のfgetsで以下のようにセットされて、2回目のfgetでcを読むことになります。
buf[0]='a'
buf[1]='b'
buf[2]='\0'

char buf[4]として、fgets(buf, sizeof(buf), fin)としましょう。

> printf("%s", buf[i]);

%sは文字列を出力するものなので文字列のアドレスを渡さなければ正しく動作しません。
一文字だけ表示する場合は%cです。


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

Name: Sakana  ..かけだし(1,258ポイント)   Date: 2009/11/19(木) 14:10   No:42318 解決!     
Title: Re:文字の配列変数を一文字ずつ    
配列について間違った覚え方をしていました・・・
ご指摘頂いた点を修正したところ、abcと表示されました
ありがとうございます


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



Name: TKOZ  ..プログラマー(37,930ポイント)   Date: 2009/11/17(火) 15:25   No:42209       
Title: どうしても、ゲームオーバー画面になりません。    
NES(海外のファミコンの事)プログラミングしているTKOZです。
縦スクロールSTGを作っているのですが、さすがにcでは、
asmに比べて速度が遅い事を痛感させられました。

さて、質問なのですが、ゲームオーバー画面で"GAME OVER"とスプライトで表示したいのですが、
どうしても、うまくいきません。具体的には、STARTキーを押していないのに、スプライトが
x=255,y=255に移動してしまいます。どうしてでしょうか?

追記:今度はゲームオーバーが消えなくなりました


// メイン関数
char NesMain()
{
char r;
const char string[] = "PRESS START!";
const char string2[] = "STG SAMPLE01 ";
const char palettes[] = {
0x0f, 0x11, 0x21, 0x30,
0x0f, 0x11, 0x21, 0x30,
0x0f, 0x11, 0x21, 0x30,
0x0f, 0x11, 0x21, 0x30,
0x0f, 0x00, 0x10, 0x21,
0x0f, 0x0f, 0x10, 0x21,
0x0f, 0x09, 0x19, 0x21,
0x0f, 0x15, 0x27, 0x30
};
char GameMode=TITLE;
char y=0;
char i;
char prev=0;
char cnt=0;
Init(0);
back:
GameMode=TITLE;
r=*(char*)0x2002;
if(r>0) goto back;
Init(1);
ShowScreen(0);



// パレットを書き込み
*(char*)0x2006 = 0x3f;
*(char*)0x2006 = 0x00;
for (i = 0; i < 0x20; i ++)
*(char*)0x2007 = palettes[i];

// ネームテーブルへ書き込み

*(char*)0x2006 = 0x21;
*(char*)0x2006 = 0xc9;
for (i = 0; i < 16; i ++)
*(char*)0x2007 = string2[i];
//BGwrite(15,10,"STG SAMPLE01 ");
*(char*)0x2006 = 0x22;
*(char*)0x2006 = 0x09;
for(i=0;i<16;i++)
{
*(char*)0x2007 = string[i];
}
//BGwrite(17,10,"PRESS START!");

SetScroll(0, 0);
ShowScreen(1);

while(1){
// メインループ
KeyInput();
switch(GameMode)
{
case TITLE:
Title(&GameMode);
break;
case OPTION:
break;
case GAME:
if(PauseFlag==0 && GameMode==GAME)
{
y--;
}
SetScroll(0, y);
MainLoop();
HitCheck2(&GameMode);
break;
case GAMEOVER:

if((Pad & START)){cnt++;if(cnt>5){cnt=0;GameOverX=255;GameOverY=255; goto back;}}
break;
}
prev=(Pad & START);
}


return 0;
}


あっ、一応ネットカフェからの書き込みなので、ご注意を。


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


Name: softya  ..熟練のプログラマー(42,315ポイント)   Date: 2009/11/18(水) 15:40   No:42256     
Title: Re:どうしても、ゲームオーバー画面になりません。    
すいません、ソースコードを見る限りスプライトを表示したりしている部分がありません。
http://crystal.freespace.jp/pgate1/nes/nes_ppu.htm
>cnt=0;GameOverX=255;GameOverY=255
これらの初期値もわかりません。

全部のソースコードを提示してもらった方が良いかもしれません。


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

Name: TKOZ  ..プログラマー(38,029ポイント)   Date: 2009/11/18(水) 20:39   No:42275     
Title: Re:どうしても、ゲームオーバー画面になりません。    
>>softyaさんへ

>全部のソースコードを提示してもらった方が良いかもしれません。
分かりました。
ただし、質問中にもソースコードを大分書き換えてしまった部分があるので、
ご注意ください。

ソースファイルのみを添付します。


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

Name: TKOZ  ..プログラマー(38,063ポイント)   Date: 2009/11/18(水) 20:45   No:42277     
Title: Re:どうしても、ゲームオーバー画面になりません。    
せっかくなので、自作ROMファイルも添付します。


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

Name: softya  ..熟練のプログラマー(44,741ポイント)   Date: 2009/11/18(水) 22:08   No:42285     
Title: Re:どうしても、ゲームオーバー画面になりません。    
失礼!最初の答えは大勘違いなので訂正しました。

ソースを見て思ったんですが、DrawSprite()ってバッファを
static char flag=0;
で管理してますよね。
で今のバッファ位置を気にせずに使っているので、前のスプライトが残ったりしますが大丈夫ですか?

で、xxとyyは
case TITLE:
xx=255;yy=255;
となってますので、GAMEOVERは必ず(255,255)に表示されます。


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

Name: TKOZ  ..プログラマー(38,121ポイント)   Date: 2009/11/19(木) 13:24   No:42316 解決!     
Title: Re:どうしても、ゲームオーバー画面になりません。    
>>softyaさんへ

ありがとうございます。きちんとゲームオーバー画面が出ました。

しかし、ファミコンの機能が分からないとデバッグしずらいですね。


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



Name: yatta  ..ぴよぴよ(135ポイント)   Date: 2009/11/14(土) 14:33   No:41976       
Title: 文字列を用いたプログラム    
Cという文字が入っている入力文字列のうちC以降の文字列を表示するプログラムなのですが、その後Cが入っていなければ再び文字列を入力させるというプログラムを作っているのですが、うまくいきません。以下にそのプログラムをのせます。どのように改良すればよいのでしょうか。for文をいくつも使うしか方法はないのでしょうか。どなたかお願いします。


#include<stdio.h>

int main(void)

{
char *p,str[1000000];

int i,n=0;

printf("Cを含む文字列を入力してください。\n\n");

scanf("%s",str);


for(p=str;*p!='\0';p++)

{

if(*p=='C'){
printf("%s\n",p);
n++;

}
}

if(n==0)
{
printf("文字列がCを含んでいません。改めて文字列の入力をどうぞ。\n");

scanf("%s",str);

}


return 0;

}


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


Name: non  ..熟練のプログラマー(69,480ポイント)   Date: 2009/11/14(土) 15:34   No:41982     
Title: Re:文字列を用いたプログラム    
どこかに
do{

}while(n==0);
を入れてみましょう。



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

Name: yatta  ..ぴよぴよ(361ポイント)   Date: 2009/11/16(月) 11:37   No:42154     
Title: Re:文字列を用いたプログラム    
早速のお返事をありがとうございます。nonさんの助言をヒントにプログラムを以下のように改造しましたが、Cを含んだ文字列を入力したにも関わらず、「文字列がCを含んでいません。改めて文字列の入力をどうぞ」と出てきます。どこが原因なのでしょうか。よろしくお願いします。

#include<stdio.h>

int main(void)

{
char *p,str[1000000];

int i,n=0;

printf("Cを含む文字列を入力してください。\n\n");

scanf("%s",str);


for(p=str;*p!='\0';p++)

{

if(*p=='C'){
printf("%s\n",p);
n++;

}
}

if(n==0)
{do{

printf("文字列がCを含んでいません。改めて文字列の入力をどうぞ。\n");

scanf("%s",str);

}while(n==0);


}


return 0;

}



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

Name: non  ..熟練のプログラマー(69,614ポイント)   Date: 2009/11/16(月) 16:24   No:42162     
Title: Re:文字列を用いたプログラム    
do{
}while()
の場所が違います。

プログラムを添付するときは、<pre>タグを使ってください。


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

Name: yatta  ..ぴよぴよ(489ポイント)   Date: 2009/11/19(木) 12:05   No:42312     
Title: Re:文字列を用いたプログラム    
返信が遅れて申し訳ございませんでした。やはり、
if(n==0)
という記述はまずいのでしょうか。

do while文はは最初は必ずdoの後に書いてある処理をして、それ以降はwhile()のカッコの中が成り立っている

間、doの後の処理を繰り返すわけですよね。whileのカッコの中にn==0とすべきなのはわかるのですが。

よろしくお願いします。


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

Name: conio [URL]  ..比類無きプログラマー(75,997ポイント)   Date: 2009/11/19(木) 12:22   No:42313     
Title: Re:文字列を用いたプログラム    

-----------------------------------------------------------------------------
if(n==0)
{
do{
printf("文字列がCを含んでいません。改めて文字列の入力をどうぞ。\n");
scanf("%s",str);
}while(n==0);
}
-----------------------------------------------------------------------------
まず、nの値が0の時にdo while文が実行されます。
そして、そのdo while文は「nが0だったら繰り返す」ようになってます。

nの値を変更する箇所は何処にもないので、nの値はずっと0。
よって永久にdo while文を実行する事になります。
また、Cを含んでいるか?を調べるコードも無いので、無意味な無限入力になってます。


「Cを含む文字列が入力されるまでループ」というのはこんな感じで良いのではないでしょうか。
--------------------------
while(1){
//入力処理

if(Cが含まれていれば)
break;
}
--------------------------


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

Name: non  ..比類無きプログラマー(70,350ポイント)   Date: 2009/11/19(木) 12:22   No:42314     
Title: Re:文字列を用いたプログラム    
もう一度No:42154 のプログラムを見ました。
>Cを含んだ文字列を入力したにも関わらず、「文字列がCを含んでいません。改めて文字列の入力をどうぞ」と出てきます。
そんなはずはありません。
Cを大文字でちゃんと入力したでしょうか?



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

Name: yatta   Date: 2009/11/24(火) 09:44   No:419761259023495     
Title: Re:文字列を用いたプログラム    
nonさんへ

返事が遅れて申し訳ありません。

Cは大文字で入力しています。


Name: yatta   Date: 2009/11/24(火) 10:39   No:419761259026744     
Title: Re:文字列を用いたプログラム    
conioさんへ

conioさんの意見を参考にして、改良してみましたが未だ現状は改善されません。前と同じ状態です。以下のプログラムはn=0のとき(つまり、文字列のうちのCの個数が0のとき)文字列を入力させる無限ループを作り、そうでない場合は直接文字列だけを表示させるプログラムのつもりです。


</pre>#include<stdio.h>

int main(void)

{
char *p,str[1000000];

int i,n=0;

printf("Cを含む文字列を入力してください。\n\n");

scanf("%s",str);


for(p=str;*p!='\0';p++)

{

if(*p=='C'){

printf("%s\n",p);

n++;

}
}


if(n==0)

{

while(1){

printf("文字列がCを含んでいません。改めて文字列の入力をどうぞ。\n");

scanf("%s",str);

}
}
else{

printf("%s\n\n",p);
}


return 0;

}
</pre>


Name: yatta   Date: 2009/12/01(火) 11:00   No:419761259632841 解決!     
Title: Re:文字列を用いたプログラム    
nonさんkonioさん、アドバイスをありがとうございました。
アドバイスを参考にして、while(1)やdo while文を使わずにフラグを立てておくやり方で解決できました。
正常にCを含む文字列を入力したら、ループから抜け出せる状態になり、問題は解決できました。

これからも頑張ります。




Name: とりとり  ..ぴよぴよ(111ポイント)   Date: 2009/11/19(木) 03:17   No:42300       
Title: C初心者ですw問題教えてもらえませんか?    
はじめまして
最近 大学でC言語始めたばかりでとりあえずネットで似たような問題探してみたりもしたんですが
見つからなくてどうしようもないんで質問させていただきます。

問題
大きなHELLOを出力するプログラムを作成してください。
HELLOの1文字1文字の大きさは、縦が7文字分、横が5文字分とします。


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


Name: kazuoni [URL]  ..ハッカー(114,312ポイント)   Date: 2009/11/19(木) 03:38   No:42301     
Title: Re:C初心者ですw問題教えてもらえませんか?    
横:縦=5:7の文字テーブルを用意して、それを上から順に出力すればよいのではないでしょうか?
int char_L[7][5] = 

{ 0,1,0,0,0,
0,1,0,0,0,
0,1,0,0,0,
0,1,0,0,0,
0,1,0,0,0,
0,1,0,0,0,
0,1,1,1,1, }}


みたいな感じで。0は空白、1は*みたいに出力すればよいかと。


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

Name: array [URL]  ..熟練のプログラマー(60,611ポイント)   Date: 2009/11/19(木) 05:38   No:42302     
Title: Re:C初心者ですw問題教えてもらえませんか?    
kazuoniさんには申し訳ないですが、あきらかな丸投げなので実際にプログラム提示してみます。
問題の条件があいまいすぎて回答に困りますけど、適当に条件を補正して書いてみました。



#include<stdio.h>

int main() {
int i = 0;

const char *str[] = {
"* * ***** * * *****"
,"* * * * * * *"
,"* * * * * * *"
,"***** ***** * * * *"
,"* * * * * * *"
,"* * * * * * *"
,"* * ***** ***** ***** *****"
};

for( i = 0; i < 7; ++i ) {
printf("%s\n", str[i] );
}

return 0;
}


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

Name: とりとり  ..ぴよぴよ(221ポイント)   Date: 2009/11/19(木) 11:55   No:42309 解決!     
Title: 無題    
arrayさんありがとうございます。
すごく参考になりました。
まだforの関数など実習で進んでいない部分もあって全て理解できていないですが
そこはまた自分で調べて理解できるようにがんばります^^

条件などもまだ理解できていない段階であいまいすぎる質問ですみませんでした。


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

Name: non  ..比類無きプログラマー(70,305ポイント)   Date: 2009/11/19(木) 12:00   No:42310     
Title: Re:無題    
Forもまだ習ってないなら、こうでしょう。

#include<stdio.h>

int main()
{
printf("* * ***** * * *****\n");
printf("* * * * * * *\n");
printf("* * * * * * *\n");
printf("***** ***** * * * *\n");
printf("* * * * * * *\n");
printf("* * * * * * *\n");
printf("* * ***** ***** ***** *****\n");
return 0;
}



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



Name: pkt  ..入門者(3,872ポイント)   Date: 2009/11/18(水) 22:37   No:42287       
Title: 初期集団の生成    
以前お世話になったものです。あのときは、お礼もできずに申し訳ございませんでした。
この場でお礼を言わせてください。ありがとうございました。
前回の方法も悪くはないとはいわれたのですが、違う方法で試したほうがいいと意見をいただきました。
そこで自分なりに考えてみましたが、どうしても次の段階へ進めないので是非ご意見いただきたいと思います。
これが自分が作ったものです。

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

#define START 0
#define GOAL 9
#define NODE 10 //ノードの数
#define PS 10
#define GL 10
#define N START

int main()
{
/*隣接リストの設定
例:ノード0はノード1.2.3と隣接していることを示す*/
const int list[NODE][6]={
//ノード番号
1,2,3,4,7,N,/*0*/
0,2,8,N,N,N,/*1*/
0,1,5,N,N,N,/*2*/
0,5,8,N,N,N,/*3*/
0,5,6,9,N,N,/*4*/
2,3,4,6,7,9,/*5*/
4,5,7,8,9,N,/*6*/
0,5,6,8,N,N,/*7*/
1,3,6,7,N,N,/*8*/
5,4,6,N,N,N /*9*/};
/*隣接行列の設定*/
//行列内の数値は重みとして距離を示すものとする。
const int path[NODE][NODE]={
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
/*0*/ 0,20,35,15,55, 0, 0,43, 0, 0,
/*1*/ 20, 0,33, 0, 0, 0, 0, 0,43, 0,
/*2*/ 35,33, 0, 0, 0,40, 0, 0, 0, 0,
/*3*/ 15, 0, 0, 0, 0,36, 0, 0,45, 0,
/*4*/ 55, 0, 0, 0, 0,32,38, 0, 0,30,
/*5*/ 0, 0,40,36,32, 0,29,36, 0,47,
/*6*/ 0, 0, 0, 0,38,29, 0,52,38,30,
/*7*/ 43, 0, 0, 0, 0,36,52, 0,20, 0,
/*8*/ 0,43, 0,45, 0, 0,38,20, 0, 0,
/*9*/ 0, 0, 0, 0,30,47,30, 0, 0, 0};
/* 初期集団生成 */
int p[PS][GL]={0};
int a;//乱数で求めた値を代入する
int f;//出力時の外枠(遺伝子座番号)に利用
int m;//1以上を出力する条件で利用
int x=10;//評価関数に利用したい
int i,j;//初期集団 p[i][j]
srand( (unsigned int)time(NULL) );
printf("-------------------初期集団------------------\n\n");
printf(" 遺伝子座\n");//外枠、遺伝子座番号表示
printf(" |");
for(f=0;f<10;f++){
printf("%3d",f);
}
printf(" |評価値\n");
printf("---------------------------------------------\n");

/* ここから初期集団表示処理    */

//p[i][0]のNODE入力
for(i=0;i<PS;i++){ //遺伝子プールの数だけループ
printf("親%2d |",i+1);//外枠なので気にしなくて良し。
for(j=0;j<GL;j++){ //遺伝子座の数だけループ
if(j==0){ //遺伝子座の0座標のときの(ノード0のとき)
a=rand() % 5;
if(a==0){
p[i][j]=list[0][0];
}else if(a==1){
p[i][j]=list[0][1];
}else if(a==2){
p[i][j]=list[0][2];
}else if(a==3){
p[i][j]=list[0][3];
}else if(a==4){
p[i][j]=list[0][4];
}
}
a=0;//a初期化
//p[i][1]のNODE入力
//NODE1とつながっているNODEをランダムで選択
if(j==1){
a=rand() % 3;
if(a==0){
p[i][j]=list[1][0];
}else if(a==1){
p[i][j]=list[1][1];
}else if(a==2){
p[i][j]=list[1][2];
//同じノードを通過しないための処理。同一ノードを通過した場合は再度処理をやり直す
}
}
a=0;//a初期化



ということをひたすら繰り返しています。このままではプログラムも長いです。
なにか簡略化するいい方法はありますでしょうか?
今回の初期集団は、前回とは全く別のものです。
通る経路が0 1 4 5 8 9 だとすると
遺伝子座の0の場所に1を、1の場所に4を、4の場所に5を、5の場所に8を、8の場所に9を格納し、
関係のない遺伝子座には、その遺伝子座の番号のノードからつながってるノードをランダムに選ぶ。
という方法をとっています。
しかしながら、現在のプログラムでは、同じところをループしてしまうものが多数でてしまいます。
論文をいくつか読ませていただいた結果、通ったノードに印をつけるというものがありました。
しかし、どのようにプログラムしていいのかわかりませんでした。
よければ、ご意見いただけると嬉しいです。


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


Name: non  ..熟練のプログラマー(69,875ポイント)   Date: 2009/11/19(木) 09:06   No:42304     
Title: Re:初期集団の生成    
1 前にも言ったように、自分が遺伝アルゴリズムをわかるからといって、他の人がわかるわけではない。

2 >前回の方法も悪くはないとはいわれたのですが、違う方法で試したほうがいいと意見をいただきました。
誰が言ったのかは知らないが、前回の方法は何で、今回の方法は何?

3 前回、これで課題は終わりだと言ったよね。
にも、かかわらず、距離まで出てきている。

4 再帰プログラムがいいよとは、すでに伝えたし、サンプルも載せた。



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



Name: ベース  ..入門者(2,938ポイント)   Date: 2009/11/19(木) 01:00   No:42291       
Title: 無題    
あるサイトで気になったので、質問させていただきます。
http://oshiete1.goo.ne.jp/qa2727121.html
構造体のメンバにポインタや浮動小数点数が含まれていると、memset等でゼロクリア出来ないのはなぜなのでしょうか?
お決まりみたいものなのでしょうか?


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


Name: ベース  ..入門者(2,952ポイント)   Date: 2009/11/19(木) 01:02   No:42292     
Title: memsetについて    
題名書くの忘れてました。

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

Name: ドラ  ..入門者(3,134ポイント)   Date: 2009/11/19(木) 01:26   No:42295     
Title: Re:memsetについて    
ヌルポインタや浮動小数点数の0.0の内部表現はすべてのビットがOFFになった
状態ではない可能性があるので、memset等で初期化したつもりが
実際にはヌルポインタや浮動小数点数の0.0になってない事もあります。

現在使っている環境でできたとしても、他の環境では通用しないかもしれないので
気をつけようという事でしょう。


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

Name: ベース  ..入門者(2,992ポイント)   Date: 2009/11/19(木) 01:39   No:42297     
Title: Re:memsetについて    
回答ありがとうございます。0を代入したのにOFFにならない可能性とはプログラム自体がおかしな挙動する
ということなのでしょうか?


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

Name: YuO  ..プログラマー(36,895ポイント)   Date: 2009/11/19(木) 03:08   No:42299     
Title: Re:memsetについて    
そもそも,空ポインタや浮動小数点数における0の実際のビットパターンは,実装に委ねられています。
そのため,memsetされたあとのポインタや浮動小数点数は「どんな値が入っているかわからない」という,使い物にならない状態になっています。
# 整数型であれば,全ビットが0であれば値0であることが保証されています。

0をポインタ型や浮動小数点数型に代入したのであれば,空ポインタや浮動小数点数型の0になっていることは確実ですが,
それがmemsetによって0を埋め込んだものと同じであるとは限りません。
# memsetとcallocはよく見るわりに使えるものではないと思う代表的な関数だと思う。


C FAQの5.17には,具体的に空ポインタのビットパターンが全ビット0で無い例があげられています。
http://www.kouno.jp/home/c_faq/c5.html#17
また,株式会社きじねこさんのC/C++迷信集にある,
[迷信] とりあえず memset で初期化 | 株式会社きじねこ
http://www.kijineko.co.jp/tech/superstitions/initialization-by-memset.html
や,その参考資料にある,
memset で検索して来られる方へ | 株式会社きじねこ
http://www.kijineko.co.jp/node/163
も参考になるかと思います。


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

Name: Naohiro19   Date: 2009/11/30(月) 07:47   No:422911259534851     
Title: Re:memsetについて    
ZeroMemory(構造体のポインタのアドレス,sizeof(構造体));
を使えば0で初期化されるはずです。




Name: rion  ..ぴよぴよ(449ポイント)   Date: 2009/11/18(水) 22:45   No:42288       
Title: 入力で表示される文字について    
最近まだC言語をかじったばかりのビギナーです。
bcpadというソフトを使ってやっているのですが、scanfで文字を入力する場合、必ず画面にうった文字が表示されてしまいますが、この文字をパスワードみたく*などで隠すことはできないでしょうか?
説明がわかりづらかったかもしれませんがご意見お願いいたします。


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




Name: 初心者  ..プログラマー(38,557ポイント)   Date: 2009/11/18(水) 17:17   No:42263       
Title: アイコンが付けられない    
DXライブラリの
http://homepage2.nifty.com/natupaji/DxLib/dxtec.html#M2
これを見てアイコンをつけようとしてるのですが、
うまくいかなくて困ってます。(VisualC++ 2008 Express Editionです)
特にメモ帳の名前を何にすればいいのか書いてなくてどうすれば・・
ついでに

ここにアイコンファイルのファイル名

というのは、拡張子も含めてなのかどうかも曖昧で・・


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


Name: Justy  ..伝説なるハッカー(462,194ポイント)   Date: 2009/11/18(水) 20:45   No:42276     
Title: Re:アイコンが付けられない    

>メモ帳の名前を何にすればいいのか

 メモ帳で作成するファイルの名前ですか?

「VisualC++ 2005 Express Edition の場合」の項目に書いてありますが、Resource.rcです。



> というのは、拡張子も含めてなのかどうかも曖昧で・・

 ファイル名といった場合、原則拡張子を含めて下さい。
(勿論そのファイルに元々拡張子がなければ要りませんが)


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

Name: 初心者  ..プログラマー(38,717ポイント)   Date: 2009/11/18(水) 21:13   No:42279     
Title: Re:アイコンが付けられない    
あの、ビルドするとこのようなエラーが発生して
Error: Resource file resource-name is not in 3.00 format

ググってみたら

指定したリソースのアイコンまたはカーソルは Windows の以前のバージョンの形式を使用しています。アイコンまたはカーソルを再描画するか、Version 3.x 形式に変換する必要があります。

という意味なのですが、
言ってる意味が分からなくて困ってます。
どうしたらいいのでしょうか?


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

Name: Justy  ..伝説なるハッカー(462,220ポイント)   Date: 2009/11/18(水) 21:18   No:42280     
Title: Re:アイコンが付けられない    
 アイコンファイル(.ico)はどうやって作りましたか?

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

Name: 初心者  ..プログラマー(38,839ポイント)   Date: 2009/11/18(水) 21:24   No:42281     
Title: Re:アイコンが付けられない    
適当に絵を選んで、
拡大縮小で32×32にし、適当な名前をつけて、拡張子をicoに
変えたのですが・・

もしかして、
(『アイコン用ユーティリティ』等でWEB検索するとアイコンを作成するためのソフトが色々見つかります)
ってことは、そのソフトで作成しないと駄目だったのでしょうか?


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

Name: Justy  ..伝説なるハッカー(462,313ポイント)   Date: 2009/11/18(水) 21:31   No:42283     
Title: Re:アイコンが付けられない    

> そのソフトで作成しないと駄目だったのでしょうか?

 元のファイルが bmpだとすると、リネームして icoの拡張子をつけても
中身は bmpのままなので、ダメです。

 icoファイル作成(或いは変換ソフト)を使って icoファイルを作ってみて下さい。


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

Name: 初心者  ..プログラマー(38,879ポイント)   Date: 2009/11/18(水) 21:47   No:42284 解決!     
Title: Re:アイコンが付けられない    
@icon変換というフリーソフトを用いて
icoに変換したところ、無事、うまくできました。
Justy様のおかげで助かりました。ありがとうございます。

もうひとつ聞きたいのですが
大きさは32×32が最大らしいのですが、
もっと大きくする方法とかはないのでしょうか?


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

Name: Justy  ..伝説なるハッカー(462,394ポイント)   Date: 2009/11/18(水) 22:22   No:42286     
Title: Re:アイコンが付けられない    

>大きさは32×32が最大らしいのですが

 もっと大きくても、例えば 48x48とかでも 256x256とかでも一応大丈夫なはずですが、
試したらダメでしたか?


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



Name: destroy  ..ぴよぴよ(259ポイント)   Date: 2009/11/18(水) 12:36   No:42248       
Title: 作れません...    
「誕生の月」と「現在の月」を入力し、誕生日まで何ヵ月あるかを表示するプログラムを作成する。尚、0以下または13以上が入力されたら「入力ミスです!」と表示して再入力を促し、1以上12以下が入力されるまで処理を繰り返すようにする。
プロトタイプ宣言は、
void error_message(void)
int get_month(void)
を用いる。


=実行結果の例=

<誕生の月>
月:11 (Enterを押す)
<現在の月>
月:5 (Enterを押す)
誕生日まであと6ヵ月ですね

<誕生の月>
月:0 (Enterを押す)
入力ミスです!
月:2 (Enterを押す)
<現在の月>
月:22 (Enterを押す)
入力ミスです!
月:12 (Enterを押す)
誕生日まであと2ヵ月ですね

と表示されるようにプログラムを作成したいのですが、まったく検討がつきません...
だれか教えてください!!よろしくお願いします!!


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


Name: softya  ..熟練のプログラマー(42,111ポイント)   Date: 2009/11/18(水) 13:05   No:42249     
Title: Re:作れません...    
「規約と注意事項」は読まれましたでしょうか?
今回の場合、次の3点にひっかかりますので、補足と対処をお願いします。

・質問は具体的にする。
・宿題の質問はOK!でも丸投げはX
・相互リンクすればマルチポストは○
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1333106123




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

Name: 初級者  ..初心者(7,020ポイント)   Date: 2009/11/18(水) 16:17   No:42258     
Title: Re:作れません...    
C言語のレベルを教えてください。
今回の問題を手で解けるかどうかを教えてください。


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

Name: conio [URL]  ..比類無きプログラマー(75,605ポイント)   Date: 2009/11/18(水) 17:28   No:42264     
Title: Re:作れません...    
---------------------------------------
【1】"0以下または13以上"の条件文
【2】再度 入力処理を繰り返す方法
【3】文字列の表示
【4】キーボードから値を読み込む方法
【5】ユーザー関数の定義・呼び出し
---------------------------------------

どれが分かっていて、どれが分からないのかを教えてください。


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

Name: high_lows  ..ぴよぴよ(932ポイント)   Date: 2009/11/18(水) 18:18   No:42269     
Title: Re:作れません...    
//これでどうだ〜!!

#include <stdio.h>

//関数プロトタイプ
void error_message(void);
int get_month(void);

//メイン関数
int main(){

int birth; //誕生の月
int now; //現在の月
int month; //あと何カ月か

//誕生の月を調べる
while(1){

printf("<誕生の月>\n");
birth = get_month();

if( !(birth>=1 && birth<=12) )
error_message();
else
break;

}

//現在の月を調べる
while(1){

printf("<現在の月>\n");
now = get_month();

if( !(now>=1 && now<=12) )
error_message();
else
break;

}

//あと何カ月かを調べる
month = now - birth;
if( month<0 )//年を繰り上げ
month = 12 + month;

//あと何カ月かを報告
printf("誕生日まであと%dヶ月ですね。\n" , month );

return 0;

}

//エラーを報告
void error_message(void){
printf("入力ミスです!\n");
}

//月を取得
int get_month(void){
int month;
printf("月:");
scanf("%d",&month);
return month;
}


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



Name: Ω  ..かけだし(1,611ポイント)   Date: 2009/11/14(土) 17:59   No:42000       
Title: 弾の描画について    
今プチシューティングを作ってて、自機を操作するとこまでは
上手くいっったんですけど、弾の描画が全く出来ません。
ゲームプログラミングの館の26を参考にしてみましたが、
あのコードを盛り込む方法が分かりません。 環境はBorland BCCdeveloperです
自分なりに盛り込んだ結果↓

//for文をZキーで実行させるとプログラムがフリーズします

#include "DxLib.h"
#define Z_image 1

typedef struct{
int x,y,Tama_y,Tama_x,Tama_Flag;}Ziki_date;

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

int Ziki_image[Z_image],Tama[10],i;
char Key[256];
Ziki_date Ziki;

if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理



Ziki.x=320;
Ziki.y=240;
Ziki.Tama_x=Ziki.x;
Ziki.Tama_y=Ziki.y;

SetDrawScreen(DX_SCREEN_BACK);
LoadDivGraph("Ziki.png",1,1,1,32,32,Ziki_image);

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){

if(Key[KEY_INPUT_RIGHT]==1)
Ziki.x+=4;

if(Key[KEY_INPUT_LEFT]==1)
Ziki.x-=4;

if(Key[KEY_INPUT_UP]==1)
Ziki.y-=4;

if(Key[KEY_INPUT_DOWN]==1)
Ziki.y+=4;

DrawGraph(Ziki.x,Ziki.y,Ziki_image[0],TRUE);

if(Key[KEY_INPUT_Z]==1){
for(i=0;0<10;i++){
Ziki.Tama_x=Ziki.x,Ziki.Tama_y=Ziki.y;
Ziki.Tama_Flag=0;
}
Ziki.Tama_y-=8;
DrawCircle(Ziki.Tama_x,Ziki.Tama_y,2,GetColor(255,255,255),TRUE);

}
ScreenFlip();

}

DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}



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


Name: ひよこ  ..比類無きプログラマー(71,630ポイント)   Date: 2009/11/14(土) 18:55   No:42003     
Title: Re:弾の描画について    
if(Key[KEY_INPUT_Z]==1){の中でfor(i=0;0<10;i++){は0は10を超えることはないため無限ループで
止まります。


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

Name: Ω  ..かけだし(1,804ポイント)   Date: 2009/11/14(土) 19:58   No:42008     
Title: Re:弾の描画について    
すいません・・・ 単なるタイプミスでした・・・
それで、for文を (i=0; 0<10; i++) から (i=0; i<10; i++)に直したんですけど、
今度はZが押されてる間だけ弾が表示されるだけ(飛んでいかない)になってしまいました。
どこかに、Ziki.Tama_y のy座標が0より大きい時のみ、Ziki.Tama_y のy座標を減らす式を
入れないとだめっぽいんですけど、試行錯誤してみましたが、全く入れ方が分かりません。
事情で返事は明日になるかと思います。


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

Name: ひよこ  ..比類無きプログラマー(72,034ポイント)   Date: 2009/11/14(土) 20:22   No:42012     
Title: Re:弾の描画について    
Zキーを押したときfor(i=0;0<10;i++){はいらないと思います。Zikiは配列ではないし、
押したときにX、Yを決めて、Yを減らし描くじゃだめです。
Yを減らすのも描くのも外に置きましょう。
y座標が0より大きい時のみ
簡単にif(y>0)y--;でいいでしょう。


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

Name: Ω  ..かけだし(1,939ポイント)   Date: 2009/11/15(日) 16:00   No:42100     
Title: Re:弾の描画について    
返事が遅くなりました。
ひよこさんの言ったとおりにしてみました。
一応Zを押したら弾が飛ぶようになったんですけど、
なんか画面内に描画出来る弾数が1個だけしかないみたいなんです。
しかも、Zを押してないのに最初に1発だけ弾が出たりとバグだらけで・・・
何度もすいません


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

Name: ひよこ  ..比類無きプログラマー(73,215ポイント)   Date: 2009/11/15(日) 16:52   No:42101     
Title: Re:弾の描画について    
描画出来る弾数が1個だけしかないみたいなんです。
配列ではないしひとつの変数だからです。
Zを押してないのに最初に1発だけ弾が出たりと
>>最初初期化して何の条件もないので、弾が出ます。

配列にしてくださいといっても難しいかもしれないので、
簡単なソースを作ってみました、今までのソースとうまく合わせれば思った通りになると思います。
わからなかったら、聞いてください。

#include "DxLib.h"

#define TAMA_MAX 100//弾の数

typedef struct{
int x,y;//x,y座標
int flag;//フラグ 使っているとき1 使っていないとき0
}tama_t;
tama_t tama[TAMA_MAX];

char Key[256];

int serch_tama(){
int i;
for(i=0;i<TAMA_MAX;i++){
if(tama[i].flag==0)
return i;
}
return -1;
}
//Zキーを押すと撃っていない弾を探す。見つけたら弾を撃つ
void shot_tama(){
int i;
if(Key[KEY_INPUT_Z]==1){
if((i=serch_tama())!=-1){
tama[i].flag=1;
tama[i].x=320;
tama[i].y=460;
}
}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
SetDrawScreen( DX_SCREEN_BACK ); //裏画面に設定

int image = LoadGraph("char.png");

for(int i=0;i<TAMA_MAX;i++){
tama[i].flag=0;
tama[i].x=320;
tama[i].y=460;
}
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない

shot_tama();

//撃っている弾を探して撃っていてyが0より大きかったらyを減らす、そうでなかったら消す。
for(int i=0;i<TAMA_MAX;i++){
if(tama[i].flag==1){
if(tama[i].y>0)
tama[i].y-=3;
else
tama[i].flag=0;
DrawGraph(tama[i].x,tama[i].y,image,TRUE);
}
}

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

DxLib_End();
return 0;
}




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

Name: Ω  ..かけだし(2,054ポイント)   Date: 2009/11/16(月) 19:02   No:42168     
Title: Re:弾の描画について    
返事遅れました 試行錯誤してました
サンプルプログラムまで用意して下さるとは・・・
ひよこさんのコードを自分なりに盛り込んだら良い感じに発射出来ました。ありがとうございます。
ただ、最初に一発出てくるのと、Zを押しっぱなしにしてるとピューピューでてくるのを直したいです。
前者は簡単そうなんですが、後者は、やはり無理矢理に入れてもバグばかり発生して・・・

返事は多分明日以降になるかと



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

Name: ひよこ  ..比類無きプログラマー(73,503ポイント)   Date: 2009/11/16(月) 21:10   No:42176     
Title: Re:弾の描画について    
ソースを見せてくれないと答えようがないんですが・・

最初に一発出てくるのと
>>Ωさんの前のソースも交じっているからかもしれません。

Zを押しっぱなしにしてるとピューピューでてくるのを
>>これはゲームプログラミングの館の
「キーがどれ位押されたか」を判定する関数を見ればできると思います。



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

Name: Ω  ..入門者(3,152ポイント)   Date: 2009/11/17(火) 17:24   No:42212     
Title: Re:弾の描画について    
ピューピュー出てくるのは解消されました。参考ありです
すいません コードがなけりゃ無理ですよね・・・ 長いです↓


#include "DxLib.h"

#define Z_image 2 //自機画像の数 2
#define Tamax 10 //弾の最大数 10
#define T_Speed 10 //弾の速度 10

typedef struct{
int x,y; }Ziki_date;

typedef struct{
int x,y,Flag; }Tama_date;

char Key[256];
int KEY[256];
int count=0;
int C=0;

Tama_date Tama[Tamax];
Ziki_date Ziki;

//////////////////////////////////////
//ここらへんはfpsの設定 長いので切る//
//////////////////////////////////////

int Seach_Tama(){ //使われてない弾のサーチ
int i;
for(i=0; i<Tamax; i++){
if(Tama[i].Flag==0)
return i;
}
return -1;
}

//サーチできたら撃つ
void Shot_Tama(){
int i;
if(C<5)C++; //もしCが5以下だったらCに+1
else if(Key[KEY_INPUT_Z]==1){ //↑でCが5以上になったら起動
C=0;
if((i=Seach_Tama())!=-1){
Tama[i].Flag=1; //フラグを立てる
Tama[i].x =Ziki.x; //自機の座標代入
Tama[i].y =Ziki.y;
Tama[i].x +=7; //弾のx軸補正
}
}
}

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

Ziki.x=320; //自機に座標を代入
Ziki.y=240;
int Ziki_image[Z_image],Count; //自機画像を入れる箱とCountを宣言

if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理



SetDrawScreen(DX_SCREEN_BACK); //裏画面に設定
LoadDivGraph("Ziki.png",2,2,1,20,26,Ziki_image); //画像を読み込ませる

for(int i=0; i<Tamax; i++){
Tama[i].Flag=1;
Tama[i].x =Ziki.x;
Tama[i].y =Ziki.y;
}


while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){

/////////////////////////////////////////
//ここにfpsの表示させるコードがあります//
/////////////////////////////////////////

if(Key[KEY_INPUT_RIGHT]==1)
Ziki.x+=4;

if(Key[KEY_INPUT_LEFT]==1)
Ziki.x-=4;

if(Key[KEY_INPUT_UP]==1)
Ziki.y-=4;

if(Key[KEY_INPUT_DOWN]==1)
Ziki.y+=4;

Shot_Tama();

for(int i=0; i<Tamax; i++){
if(Tama[i].Flag==1){
if(Tama[i].y>0)Tama[i].y-=T_Speed;
else Tama[i].Flag=0;

DrawGraph(Tama[i].x,Tama[i].y,Ziki_image[1],FALSE);
}
}

DrawGraph(Ziki.x,Ziki.y,Ziki_image[0],FALSE);
ScreenFlip();

}


DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}



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

Name: ひよこ  ..比類無きプログラマー(73,460ポイント)   Date: 2009/11/17(火) 17:45   No:42213     
Title: Re:弾の描画について    
Ωさん、すみませんが、どこがどんなふうにだめなのか、もう一度言ってくれるとうれしいです。

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

Name: Ω  ..入門者(3,182ポイント)   Date: 2009/11/18(水) 13:09   No:42250     
Title: Re:弾の描画について    
上記のコードは、エラーは出ないんですけど、
最初に一発だけ弾が出るので、それを直したいです。

追記
本件から逸脱してしまいますが、弾を撃っている最中(多分Zを押している最中)、
アローキーの「→」と「↓」を同時に押しても↘に移動しないです。
弾を撃ってない時はちゃんと反応します。 色々試しましたが、やはりエラーやらバグやらで・・・


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

Name: ひよこ  ..比類無きプログラマー(73,580ポイント)   Date: 2009/11/18(水) 17:06   No:42261     
Title: Re:弾の描画について    
最初に一発だけ弾が出るので、それを直したいです。
>>最初の初期化中のTama[i].Flag=1;が原因です。そして一発に見えますが、Tamaxの数だけ出ています。

同時に押しても↘に移動しないです。
>>これは、私じゃよくわかりませんが、キーボードが対応していないくらいしかわかりません。
>>他の人に聞いたほうがいいと思います。


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

Name: Ω  ..入門者(3,216ポイント)   Date: 2009/11/18(水) 18:05   No:42268 解決!     
Title: Re:弾の描画について    
直りました! 弾については以上です。ありがとうございました。 Tamaxの数だけ出てたんですねぇ
それにしても自分のタイプミスの多さといったら・・・
変な話、コピーペーストよりも手打ちしたい派なんです   

右下 キーボードが対応してないのかな・・・ それだと、どうしようもないなw



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



Name: high_lows  ..ぴよぴよ(583ポイント)   Date: 2009/11/18(水) 17:34   No:42265       
Title: 他のコードを実行    
Visual C++ 2008 Express Editionを使ってます。
プロジェクトの中で、他のテキストエディタファイルを読み込み、
そこに書かれたソースコード(C/C++)を実行するにはどうすればいいですか。
しかも、プロジェクトの中で用いているグローバル変数を使え、
コードを実行する範囲(何行目から何行目まで)を指定できればいいです。


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


Name: softya  ..熟練のプログラマー(44,409ポイント)   Date: 2009/11/18(水) 18:03   No:42267     
Title: Re:他のコードを実行    
Visual C++ はインタプリタではなくコンパイラですので不可能です。
昔の8ビットマイコンのBASICでは可能だったものもありますが、あくまでインタプリタだから実現できた事です。
他のコードと言うか別に作られたコードをプログラムに組み込むためには、組み込む側のコードを静的ライブラリ(lib)にするか動的ライブラリ(DLL)にする必要があります。

静的ライブラリの作り方
http://msdn.microsoft.com/ja-jp/library/ms235627.aspx

動的ライブラリの作り方
http://msdn.microsoft.com/ja-jp/library/ms235636.aspx


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



Name: でんすけ  ..初心者(6,474ポイント)   Date: 2009/11/17(火) 22:43   No:42224       
Title: ステートパターンについて    
今現在、「独習 デザインパターン C++」という本の「ステートパターン」
というものをやっているのですが、本の内容通りに書いてコンパイルしても
エラーが出てしまいます。
恐らくクラスの順番に問題があるんだと思うのですが、理解出来ずにいます。
ご指摘 頂けないでしょうか。よろしくお願いします。


/*
**State.h
*/
// EngineBox ////////////////////////////////////////////////////////
class EngineBox
{
public:
EngineBox();
~EngineBox();

void up();
void down();
void changeState( EngineState* newState );
void nowState();
private:
EngineState* state;
};

// EngineState //////////////////////////////////////////////////////
class EngineState
{
public:
virtual void up( EngineBox* pEBox ) = 0;
virtual void down( EngineBox* pEBox ) = 0;
virtual void showCurrentState() = 0;
};

// EngineIdle ///////////////////////////////////////////////////////
class EngineIdle : public EngineState
{
public:
void up( EngineBox* pEBox );
void down( EngineBox* pEBox );
void showCurrentState();
};

// EngineRunningLow /////////////////////////////////////////////////
class EngineRunningLow : public EngineState
{
public:
void up( EngineBox* pEBox );
void down( EngineBox* pEBox );
void showCurrentState();
};

// EngineRunningHigh ////////////////////////////////////////////////
class EngineRunningHigh : public EngineState
{
public:
void up( EngineBox* pEBox );
void down( EngineBox* pEBox );
void showCurrentState();
};


/*
**State.cpp
*/
#include "State.h"
#include <iostream>
using namespace std;

/////////////////////////////////////////////////////////////////////
// EngineBox ////////////////////////////////////////////////////////
EngineBox::EngineBox()
{
state = new EngineIdle();
}

EngineBox::~EngineBox()
{
delete state;
}

void EngineBox::up()
{
state->up( this );
}

void EngineBox::down()
{
state->down( this );
}

void EngineBox::changeState( EngineState* newState )
{
delete state;
state = newState;
}

void EngineBox::nowState()
{
state->showCurrentState();
}

/////////////////////////////////////////////////////////////////////
// EngineIdle ///////////////////////////////////////////////////////
void EngineIdle::up( EngineBox *pEBox )
{
cout << "Idle -> Low" << endl;
pEBox->changeState( new EngineRunningLow() );
}

void EngineIdle::donw( EngineBox *pEBox )
{
cout << "No Change" << endl;
pEBox->changeState( new EngineIdle() );
}

void EngineIdle::showCurrentState()
{
cout << "State:Idle" << endl;
}

/////////////////////////////////////////////////////////////////////
// EngineRunningLow /////////////////////////////////////////////////
void EngineRunningLow::up( EngineBox *pEBox )
{
cout << "Low -> High" << endl;
pEBox->changeState( new EngineRunningHigh() );
}

void EngineRunningLow::donw( EngineBox *pEBox )
{
cout << "Low -> Idle" << endl;
pEBox->changeState( new EngineIdle() );
}

void EngineRunningLow::showCurrentState()
{
cout << "State:Low" << endl;
}

/////////////////////////////////////////////////////////////////////
// EngineRunningHigh ////////////////////////////////////////////////
void EngineRunningHigh::up( EngineBox *pEBox )
{
cout << "No Change" << endl;
pEBox->changeState( new EngineRunningHigh() );
}

void EngineRunningHigh::donw( EngineBox *pEBox )
{
cout << "High -> Low" << endl;
pEBox->changeState( new EngineRunningLow() );
}

void EngineRunningHigh::showCurrentState()
{
cout << "State:High" << endl;
}

/////////////////////////////////////////////////////////////////////
// main /////////////////////////////////////////////////////////////
void main()
{
EngineBox *pEBox = new EngineBox();

pEBox->up();
pEBox->nowState();

pEBox->up();
pEBox->nowState();

pEBox->down();
pEBox->nowState();
}


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


Name: ドラ  ..入門者(3,007ポイント)   Date: 2009/11/17(火) 23:25   No:42228     
Title: Re:ステートパターンについて    
EngineBoxクラス内でEngineStateクラスへのポインタを使っていますが、
コンパイラには 識別子EngineState が何なのか理解できていません。
EngineBoxクラスの定義よりも前に class EngineState; を記述して下さい。

他にもエラーは出ますが、単純なものなので修正は簡単だと思います。


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

Name: でんすけ  ..初心者(6,610ポイント)   Date: 2009/11/18(水) 07:24   No:42239     
Title: Re:ステートパターンについて    
返答ありがとうございます。
実は指摘された修正は一度やってみたのですが
そのとき表示されるEngineBoxの構文エラーが理解できず 修正ができませんでした。
説明が足りませんでしたね。

あと EngineBox::up() 内の state->up( this ); と
EngineBox::down() 内の State->down( this ); で
一個の引数を指定できないとでますが、これは前の構文エラーが関係してるのでしょうか?

すみません、まだまだ未熟者なもので・・・
再度 ご指摘いただけたらと思います。
よろしくお願いします。


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

Name: でんすけ  ..初心者(6,625ポイント)   Date: 2009/11/18(水) 14:17   No:42251 解決!     
Title: Re:ステートパターンについて    
なんとか解決できました。
ありがとうございました。


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



Name: たつのしん  ..ぴよぴよ(80ポイント)   Date: 2009/11/18(水) 11:51   No:42245       
Title: キャラクタ移動について    
現在「19. キャラをキー入力によって移動させる」をやっているのですが、
キャラが動いてくれません。

↓がプログラムです
#include "DxLib.h"

typedef struct{
int x, y, img;
}ch_t;

int image[16];
char Key[256];
ch_t ch;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
// ウィンドウモードで起動する
ChangeWindowMode(TRUE);
// DXライブラリの初期化
if(DxLib_Init() == -1 ) return -1;
// 描画先画面を裏画面にする
SetDrawScreen( DX_SCREEN_BACK );

while( ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0 )
{
// 裏画面の内容を表画面に反映する
ScreenFlip();
// 画面全体を初期化
ClearDrawScreen();

ch.x = 320;
ch.y = 240;

LoadDivGraph( "char.png", 16, 4, 4, 32, 32, image );

if( Key[ KEY_INPUT_RIGHT ] == 1 ) // 右ボタンが押されたら
ch.x++; // xの値を1増やす

else if(ch.x%32 != 0) // 32で割り切れない区間はオートで進む
ch.x++;

ch.img = image[12];

DrawGraph( ch.x, ch.y, ch.img, TRUE); // [12]の画像を描画
}
// DXライブラリの終了
DxLib_End();

return 0;
}

ご指摘がありましたら、よろしくお願いします。


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


Name: Mist  ..比類無きプログラマー(71,978ポイント)   Date: 2009/11/18(水) 12:09   No:42247     
Title: Re:キャラクタ移動について    
> ch.x = 320;
> ch.y = 240;

↑がループ内にあるから。

> LoadDivGraph( "char.png", 16, 4, 4, 32, 32, image );

これもループ内で何回も実行してはいけません。
変数の初期化や画像のロードはループに入る前に行いましょう。


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



Name: Ma  ..上級者(21,849ポイント)   Date: 2009/11/18(水) 06:13   No:42238       
Title: セーブ時とロード時のデータが一致しない(fstream)    
環境
Visual C++ Express Edition 2008
DX ライブラリ ver. 3.00 e
Windows Vista 64bit


マウスのクリックに合わせて、時間を記録し保存。
起動時にそれをロードして同じタイミングに画面に時間を表示するプログラム。
になる予定だったのですが、ロードすると途中からデータをリードしてくれません。
たとえば、60個ぐらいクリックすると途中で、全部0になってしまいました。

前半のロード部分付近がいけないと思っているのですが、原因究明のお手伝いお願いします


#include "DxLib.h"

#include <deque>
#include <fstream>

using namespace std;


typedef struct{
int x;
int y; //座標
int WheelRotVol;//ホイールの回転量
unsigned int Button[8]; //ボタンの押した状態
}Mouse_t;
Mouse_t Mouse;

int GetHitMouseStateAll_2(Mouse_t *Nezumi){
if(GetMousePoint( &Nezumi->x, &Nezumi->y ) == -1){ //マウスの位置取得
return -1;
}
int MouseInput=GetMouseInput(); //マウスの押した状態取得
for(int i=0; i<8; i++){ //マウスのキーは最大8個まで確認出来る
if( (MouseInput & 1<<i ) != 0 ) Nezumi->Button[i]++; //押されていたらカウントアップ
else Nezumi->Button[i] = 0; //押されてなかったら0
}
Nezumi->WheelRotVol = GetMouseWheelRotVol() ; //ホイール回転量取得
return 0;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
SetMouseDispFlag( TRUE ) ;//マウス表示オン
int White = GetColor(255,255,255);

int soundHandle = LoadSoundMem("0.ogg");
PlaySoundMem(soundHandle,DX_PLAYTYPE_BACK);
deque<int> push_list;
ifstream ifs("data.dat");
deque<int> bullets;

if(!ifs.fail()){
int size;
ifs.read((char*)&size,sizeof(int));
for(int i = 0; i < size; i++){
int dat = 0;
ifs.read((char*)&dat,sizeof(int));//ここで、ロードするdatが途中からおかしくなる。
bullets.push_back(dat);
printfDx("read %d \n",dat);
}
}
int track = 0;

while(ProcessMessage()==0 && ClearDrawScreen()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){
//↑メッセージ処理   ↑画面をクリア       ↑ESCが押されていない
GetHitMouseStateAll_2(&Mouse); //マウスの入力状態取得

int pos = GetSoundCurrentTime( soundHandle ) ;
DrawFormatString(0,0,White,"座標[%d,%d],回転量:%d, 位置 %d",Mouse.x,Mouse.y,Mouse.WheelRotVol,pos);

for(int i=0; i<8; i++){
DrawFormatString(0, 20+20*i, White, "ボタン%d:%u", i, Mouse.Button[i]);
}

if(Mouse.Button[0] == 1){
printfDx("%d\n",pos);
push_list.push_back(pos);
}

if(track < bullets.size() && bullets[track] < pos){
printfDx("%d %d\n",pos,bullets[track]);
track++;
}


ScreenFlip();
}





ofstream ofs( "data.dat" );


int size = push_list.size();
ofs.write((const char *)&size,sizeof(int));
for(int i = 0; i < size; i++){
int data = push_list[i];
ofs.write((const char *)&data,sizeof(int));
printfDx("record %d ",data);
}
ScreenFlip();
WaitKey();


DxLib_End();
return 0;
}



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


Name: Mist  ..比類無きプログラマー(71,946ポイント)   Date: 2009/11/18(水) 11:33   No:42244     
Title: Re:セーブ時とロード時のデータが一致しない(fstream)    
出力時も入力時もファイルをテキストオープンしてるからじゃないでしょうか。
そのため、出力データに改行コード(0x0D (CR))に一致するデータがあるとラインフィールド(0x0A(LF))が追加されておかしなデータになっているように思います。
"ios_base::binary"をつけてバイナリオープンしてみてください。


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

Name: Ma  ..上級者(21,904ポイント)   Date: 2009/11/18(水) 11:59   No:42246 解決!     
Title: Re:セーブ時とロード時のデータが一致しない(fstream)    
>Mist さん
直りました、ありがとうございます。
そういえば、テキスト入出力していましたね。。。

って、前にも同じミスをしていましたorz
いいかげん、覚えるようにします。


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



Name: たこやき  ..ぴよぴよ(206ポイント)   Date: 2009/11/17(火) 21:34   No:42219       
Title: nowladingについて    
マルチスレッドでCreatThreadでNowLoadingを作ろうとしてるのですが。ボタンを押してもnowLodingされません。どうしたらいいのでしょうか?ここだろうなというところを載せます。というかここしかないのですが。
DWORD sub(void)
{

	while(lp==1)

	{


		  //※変更してはいけない(ここから)---------

		 g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);

		 //※変更してはいけない(ここまで)---------


		   // noloding画像描画

   			DrawBg(g_pSprite,&g_bgTexture1);

		    //背景描画の直後にマップ描画を行う。

	      //※変更してはいけない(ここから)---------

	      g_pSprite->End();

	     //※変更してはいけない(ここまで)---------


	}

	return 0;

}
void DrawAll(void)
{
	//※変更してはいけない(ここから)---------

	g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);

	//※変更してはいけない(ここまで)---------

    int n;

	switch(g_systemMode)

		{

		case MODE_TITLE:

			DrawBg(g_pSprite,&g_titelTexture);

			DrawCommand(&g_commandPoint,&g_commandTexture);

			Draw(&g_command,&g_tagTexture);

			break;


		case MODE_LOAD:

			DWORD tid;

			CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)sub,NULL,0,&tid);

			n=0;

			while(n<10000000)

<pre> {

				n++;

			}

			lp=0;

			g_systemMode=MODE_STAGE;

			break;

		case MODE_STAGE:

描画処理
.
.
.
よろしくお願いします。


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


Name: たこやき  ..ぴよぴよ(279ポイント)   Date: 2009/11/17(火) 21:57   No:42220     
Title: Re:nowladingについて    
すいません。間違いました。ボタンを押してもnowLodingされませんではなくwhile(n<100000000)通っても
nowlodingされません。while(n<100000000)の処理が終わるころに表示されます。です。


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

Name: softya  ..熟練のプログラマー(41,067ポイント)   Date: 2009/11/17(火) 22:04   No:42221     
Title: Re:nowladingについて    
気になる点をいくつか。
1.ウィンドウプロシジャの途中だと思われるDrawAllのwhile(n<10000000)で待っちゃいけません。
そもそも何で待っているか意味不明。
2.スレッドで描画するとややこしい事になるので、スレッドはロード処理にしてください。描画はウィンドウプロシジャ側に。(良く分かっている人なら、なんとでも成りますが)

>while(n<100000000)通ってもnowlodingされません。while(n<100000000)の処理が終わるころに表示されます。
メイン側で無限ループしてCPUを浪費しているのだから、スレッドが動作しないのは当たり前ですよ。
CPUを解放してください。


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

Name: たこやき  ..ぴよぴよ(353ポイント)   Date: 2009/11/17(火) 22:23   No:42222     
Title: Re:nowladingについて    
そうなんですか。なんで待っているのかというと、大量のデータの読み込み処理の代わりに待っていたのですが、
意味がないのでしょうか?またなぜループと大量の読み込み処理の違いが出るのでしょうか?


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

Name: たこやき  ..ぴよぴよ(363ポイント)   Date: 2009/11/17(火) 22:34   No:42223     
Title: Re:nowladingについて    
あと、Nowlodingを試す方法はないのでしょうか?質問ばかりですみません。

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

Name: softya  ..熟練のプログラマー(41,424ポイント)   Date: 2009/11/17(火) 22:49   No:42226     
Title: Re:nowladingについて    
>そうなんですか。なんで待っているのかというと、大量のデータの読み込み処理の代わりに待っていたのですが、意味がないのでしょうか?
whileでループ待ちするとCPUを優先的に使ってしまうので、スレッドや他のプロセスに処理が回らなくなります。これは、Windowsプログラミングで一番やってはいけないことです。

>またなぜループと大量の読み込み処理の違いが出るのでしょうか?
読み込み処理中は、HDDからの読み込み待ち時間がありますから、その間に他のスレッドやプロセスにタスクがスイッチングできます。

>あと、Nowlodingを試す方法はないのでしょうか?質問ばかりですみません。
読み込み処理をスレッド側にして、読み込み処理の代わりにSleep()で時間を浪費してください。Sleep中は他のスレッドに処理が移ります。メイン側にSleep()を入れるのはWindowメッセージの処理が出来なくなりますからやってはいけません。
メイン側への読み込み(スレッド)側の終了を通知するには、一番簡単なPostMessage()を使ってください。
なので、MODE_LOADからMODE_STAGEに切り替わるタイミングは、スレッドからPostMessage()で通知されたときとなります。MODE_LOAD中はNowLoadingを毎フレーム表示します。


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

Name: たこやき  ..ぴよぴよ(454ポイント)   Date: 2009/11/17(火) 23:09   No:42227     
Title: Re:nowladingについて    
PostMessageを使わないで出来ないでしょうか?wndprocは別のファイルにあってブラックボックス状態なので。
メインにSLeep()を置いてはダメとはどこにやればいいのでしょうか?(sub関数に入れてみましたがダメでした)


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

Name: softya  ..熟練のプログラマー(41,655ポイント)   Date: 2009/11/17(火) 23:56   No:42229     
Title: Re:nowladingについて    
それじゃ終了フラグをvolatile型修飾子で。
int volatile SubThreadEndFlag = FALSE;
と宣言して、スレッドの終了時に
SubThreadEndFlag = TRUE;
としてください。
メイン側は、
if( SubThreadEndFlag ) {
g_systemMode=MODE_STAGE;
}
とやるのが安全だと思います。

>メインにSLeep()を置いてはダメとはどこにやればいいのでしょうか?(sub関数に入れてみましたがダメでした)
スレッドでSleepする分には大丈夫のはずですが?数秒ほどSleepさせてみてください。
ところでこの時、メイン側はCreateThread後すぐにリターンさせましたか?
(注意事項として、wndprocから呼び出された処理は必ず最大数ms程度でreturnする様にしてくださいね)


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

Name: たいやき  ..ぴよぴよ(58ポイント)   Date: 2009/11/18(水) 00:07   No:42230     
Title: Re:nowladingについて    
ちょっとやりすぎたかもしれませんがSleep(10000)やりましたが、そしたらフリーズしてしまいました。
CreatThread後のリターンはここに記述してるとおりです。


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

Name: softya  ..熟練のプログラマー(41,804ポイント)   Date: 2009/11/18(水) 00:24   No:42233     
Title: Re:nowladingについて    
>CreatThread後のリターンはここに記述してるとおりです。

ここから
n=0;
while(n<10000000)
{
n++;
}

ここまでは、外さないとスレッドは動きませんよ。

これも言ったとおりに
g_systemMode=MODE_STAGE;
if文内に入れましたか?

>ちょっとやりすぎたかもしれませんがSleep(10000)やりましたが、そしたらフリーズしてしまいました。
ちゃんとスレッドを制御していたらSleep(10000)とスレッドでやってもフリーズする事はありません。

とりあえず今の状態のプログラムを張ってもらったほうが、問題が明確になると思います。


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

Name: softya  ..熟練のプログラマー(41,972ポイント)   Date: 2009/11/18(水) 00:38   No:42234     
Title: Re:nowladingについて    
あっともう少し改造しないとまずいですね。
MODE_LOADSTART:

MODE_LOADING:
に分けてください。
こんな感じです。

case MODE_LOADSTART:
// スレッドを起動する。
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)sub,NULL,0,&tid);
g_systemMode=MODE_LOADING;

case MODE_LOADING:
//NOWLOADINGの表示処理

//スレッドが終了したら、モードを変更する。
if( SubThreadEndFlag ) {
g_systemMode=MODE_STAGE;
}
break;


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

Name: たこやき  ..かけだし(1,293ポイント)   Date: 2009/11/18(水) 00:44   No:42235     
Title: Re:nowladingについて    
はい。わかろました。
DWORD WINAPI sub(void)
{

	while(SubThreadEndFlag)

    {

//※変更してはいけない(ここから)---------
	          g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);

	      //※変更してはいけない(ここまで)---------

		 DrawBg(g_pSprite,&g_bgTexture1);



	        //※変更してはいけない(ここから)---------

          	g_pSprite->End();

	        //※変更してはいけない(ここまで)---------



	}

	return 0;

}
void DrawAll(void)
{
	//※変更してはいけない(ここから)---------

	g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);

	//※変更してはいけない(ここまで)---------

          int n;

	switch(g_systemMode)

		{

		case MODE_TITLE:

			DrawBg(g_pSprite,&g_titelTexture);

			DrawCommand(&g_commandPoint,&g_commandTexture);

			Draw(&g_command,&g_tagTexture);

			break;


		case MODE_LOAD:

			DWORD tid;

			CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)sub,NULL,0,&tid);

			n=0;

			Sleep(100);

                      if(SubThreadEndFlag)

                      {

g_systemMode=MODE_STAGE;
<pre> }

			break;

		case MODE_STAGE:


.
.
.
.
.


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

Name: たこやき  ..かけだし(1,616ポイント)   Date: 2009/11/18(水) 01:29   No:42236     
Title: Re:nowladingについて    
更新しました。
DWORD WINAPI sub(void)
{

while(lp==0)
{

Sleep(1000);
}

SubThreadEndFlag = TRUE;
return 0;
}
void DrawAll(void)
{
//※変更してはいけない(ここから)---------
g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);
//※変更してはいけない(ここまで)---------
DWORD tid;
switch(g_systemMode)
{
case MODE_TITLE:
DrawBg(g_pSprite,&g_titelTexture);
DrawCommand(&g_commandPoint,&g_commandTexture);
Draw(&g_command,&g_tagTexture);
break;

case MODE_LOAD:
//NOWLOADINGの表示処理
DrawBg(g_pSprite,&g_bgTexture1);
Sleep(1000);
lp=1;
//スレッドが終了したら、モードを変更する。
if( SubThreadEndFlag ) {
g_systemMode=MODE_STAGE;
}
break;

case MODE_LOADSTART:
// スレッドを起動する。
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)sub,NULL,0,&tid);
g_systemMode=MODE_LOAD;
break;
case MODE_STAGE:


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

Name: たこやき  ..かけだし(2,122ポイント)   Date: 2009/11/18(水) 01:33   No:42237     
Title: Re:nowladingについて    
更新しました。
DWORD WINAPI sub(void)
{

	while(lp==0)</pre>

	{


		Sleep(1000);

	}


	SubThreadEndFlag = TRUE;

	return 0;

}
void DrawAll(void)
{
	//※変更してはいけない(ここから)---------

	g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);

	//※変更してはいけない(ここまで)---------

DWORD tid;

	switch(g_systemMode)

		{

		case MODE_TITLE:

			DrawBg(g_pSprite,&g_titelTexture);

			DrawCommand(&g_commandPoint,&g_commandTexture);

			Draw(&g_command,&g_tagTexture);

			break;


		case MODE_LOAD: 

			//NOWLOADINGの表示処理

			DrawBg(g_pSprite,&g_bgTexture1);

			Sleep(1000);

			lp=1;

		//スレッドが終了したら、モードを変更する。 

			if( SubThreadEndFlag ) { 

				g_systemMode=MODE_STAGE; 

			} 

			break;


			case MODE_LOADSTART: 

				// スレッドを起動する。 

				CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)sub,NULL,0,&tid);

				g_systemMode=MODE_LOAD;

				break;

		case MODE_STAGE:



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

Name: たこやき  ..かけだし(2,150ポイント)   Date: 2009/11/18(水) 08:45   No:42242 解決!     
Title: Re:nowladingについて    
何とか解決しました。助言ありがとうございました。

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



Name: hort  ..ぴよぴよ(7ポイント)   Date: 2009/11/18(水) 08:44   No:42241       
Title: Releaseについて    
ReleaseしてExEファイルを作成しようと思っているのですが。コンパイルしたらこんなメッセージが出たのですがどう対処すればいいのでしょうか?
1>LINK : fatal error LNK1104: ファイル 'lib\ddxdraw.lib' を開くことができません。


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


Name: チルチル   Date: 2009/11/22(日) 17:36   No:422411258878985     
Title: Re:Releaseについて    
lib\ddxdraw.libが存在しないかパスが通っていないのではないでしょうか?



Name: zoo  ..ぴよぴよ(35ポイント)   Date: 2009/11/17(火) 20:49   No:42214       
Title: 間違えが見つけられません...    
2つの点の座標を入力し、2点間の距離を表示させるプログラムを作成中なのですが、コンパイルをするとなぜか距離が0.00000・・・と表示されてしまいます...

一応、完成したつもりですが間違いがあればご指摘よろしくお願いします!!

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

double distance(int x1,int y1,int x2,int y2)
{
return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}

int main(void)
{
int x1,y1,x2,y2;
double kyori;
printf("<点1>\n");
printf("x座標:");
scanf("%lf",&x1);
printf("y座標:");
scanf("%lf",&y1);
printf("<点2>\n");
printf("x座標:");
scanf("%lf",&x2);
printf("y座標:");
scanf("%lf",&y2);

kyori=distance(x1,y1,x2,y2);

printf("<2点間の距離>\n");
printf("距離:%lf\n",kyori);

return 0;
}



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


Name: kazuoni [URL]  ..ハッカー(114,296ポイント)   Date: 2009/11/17(火) 21:02   No:42215     
Title: Re:間違えが見つけられません...    
x1,y1,x2,y2はint型なのに、scanfでdouble型で読み込んでいるからかと思われます。

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

Name: box  ..ハッカー(146,214ポイント)   Date: 2009/11/17(火) 21:02   No:42216     
Title: Re:間違えが見つけられません...    
2点の座標値は整数ですか?浮動小数点数ですか?
今のコードでは、どちらにしたいのかがわかりません。

なお、「なぜか距離を0.00000...と表示する」という状態であるのに
「一応完成したつもり」とは言えません。


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

Name: zoo  ..ぴよぴよ(127ポイント)   Date: 2009/11/17(火) 21:11   No:42218     
Title: Re:間違えが見つけられません...    
2つの座標値は、浮動小数点数です。出来たつもりになってすみませんでした...。
よろしくおねがいします!!


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

Name: kazuoni [URL]  ..ハッカー(114,245ポイント)   Date: 2009/11/18(水) 00:13   No:42231     
Title: Re:間違えが見つけられません...    
>2つの座標値は、浮動小数点数です。

ならば、浮動小数点型に変えればよいですね。(変数の宣言、関数の引数)


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +