C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   C言語で出てくる「?」 ....   
     ・[56585] MNS 
     ・[56586] やっくん 
     ・[56587] シエル 
     ・[56588] TKOZ 
     ・[56589] シエル 
     ・[56595] めるぽん 
     ・[56598] シエル 
     ・[56621] ゆーずぃ 
     ・[56622] やっくん 
     ・[56627] シエル 
     ・[56629] 組木紙織 
     ・[56632] toyo 
     ・[56634] へろり 
     ・[56636] シエル 
   二次元配列を引数とし ....   
     ・[56611] やっくん 
     ・[56613] reghorn 
     ・[56614] やっくん 
     ・[56615] reghorn 
     ・[56616] やっくん 
     ・[56617] reghorn 
     ・[56618] やっくん 
     ・[56619] reghorn 
   Releaseビルドの仕方に ....   
     ・[56608] Justy 
     ・[56612] あ〜る 
   2. ウィンドウを表示さ ....   
     ・[56607] Justy 
     ・[56609] ROM 
   VC6.0とEXCEL2003につ ....   
   ダイレクトXのバージョ ....   
     ・[56513] ISLe 
     ・[56516] 爺プログラマー 
     ・[56539] ISLe 
     ・[56540] 爺プログラマー 
     ・[56548] ISLe 
     ・[56554] 爺プログラマー 
     ・[56572] ISLe 
     ・[56582] 爺プログラマー 
   ウインドウサイズの設 ....   
     ・[56564] 駄文使い 
     ・[56575] ISLe 
     ・[56579] TKOZ 
     ・[56580] ISLe 
   RPGについて   
     ・[56520] asd 
     ・[56527] lbfuvab 
     ・[56528] Dixq (管理人) 
     ・[56529] softya 
     ・[56544] パコネコ 
     ・[56545] softya 
     ・[56549] hoge 
     ・[56577] TKOZ 
   リターンで終了するに ....   
     ・[56517] fatens 
     ・[56518] natu 
     ・[56519] fatens 
     ・[56522] natu 
     ・[56523] fatens 
     ・[56524] natu 
     ・[56531] バグ 
     ・[56532] natu 
     ・[56533] バグ 
     ・[56534] natu 
     ・[56535] バグ 
     ・[56536] natu 
     ・[56537] natu 
     ・[56538] バグ 
     ・[56553] naohiro19 
     ・[56556] バグ 
     ・[56557] natu 
     ・[56576] ISLe 
   導入部分ができなかっ ....   
     ・[56558] dic 
     ・[56567] Dixq (管理人) 
     ・[56569] softya 
     ・[56574] ISLe 
   ファイル読み取り→平 ....   
     ・[56378] box 
     ・[56394] TKOZ 
     ・[56562] ルーニー 
     ・[563761279950903] 1EC10XXX 
   ゲームを作りたい   
     ・[56551] ぬるぽ 
     ・[56555] asd 
   画面がすぐ消える   
     ・[56483] へろり 
     ・[56492] polpol 
     ・[56494] へろり 
     ・[56514] polpol 
     ・[56521] ゆーずぃ 
     ・[56526] toyo 
     ・[56543] ISLe 
     ・[56547] polpol 
   逆数、絶対値について   
     ・[56500] ドラ 
     ・[56502] ttt 
     ・[56503] box 
     ・[56504] ttt 
     ・[56505] ドラ 
     ・[56506] box 
     ・[56510] box 
     ・[56530] ttt 
     ・[56546] box 
   エクスプローラーの背 ....   
   学校の課題がわからな ....   
     ・[55730] シエル 
     ・[55733] 地味な学生 
     ・[55738] ookami 
     ・[55753] 地味な学生 
     ・[55757] ookami 
     ・[55767] パコネコ 
     ・[55768] パコネコ 
     ・[55774] dic 
     ・[55778] パコネコ 
     ・[55779] シエル 
     ・[55783] パコネコ 
     ・[55792] ookami 
     ・[55793] シエル 
     ・[55794] パコネコ 
     ・[55797] パコネコ 
     ・[55802] しろ 
     ・[55830] パコネコ 
     ・[55832] たかぎ 
     ・[55954] パコネコ 
     ・[55992] 地味な学生 
     ・[55993] fatens 
     ・[55996] 地味な学生 
     ・[55998] fatens 
     ・[55999] だいちゃん 
     ・[56004] 地味な学生 
     ・[56010] へろり 
     ・[56014] パコネコ 
     ・[56017] だいちゃん 
     ・[56019] パコネコ 
     ・[56021] 地味な学生 
     ・[56024] ookami 
     ・[56025] パコネコ 
     ・[56026] ookami 
     ・[56027] パコネコ 
     ・[56037] 地味な学生 
     ・[56041] パコネコ 
     ・[56043] fatens 
     ・[56056] 地味な学生 
     ・[56058] 組木紙織 
     ・[56064] パコネコ 
     ・[56077] fatens 
     ・[56078] パコネコ 
     ・[56081] fatens 
     ・[56087] パコネコ 
     ・[56145] 地味な学生 
     ・[56147] fatens 
     ・[56151] 地味な学生 
     ・[56154] ROM 
     ・[56155] シエル 
     ・[56158] パコネコ 
     ・[56160] 地味な学生 
     ・[56161] パコネコ 
     ・[56164] 地味な学生 
     ・[56165] パコネコ 
     ・[56199] ookami 
     ・[56201] 組木紙織 
     ・[56202] シエル 
     ・[56215] 地味な学生 
     ・[56218] ookami 
     ・[56221] 地味な学生 
     ・[56223] たかぎ 
     ・[56224] 地味な学生 
     ・[56226] ぽこ 
     ・[56228] ISLe 
     ・[56230] シエル 
     ・[56234] パコネコ 
     ・[56239] ookami 
     ・[56240] パコネコ 
     ・[56242] たすけてぇ><; 
     ・[56243] パコネコ 
     ・[56244] ぽこ 
     ・[56245] パコネコ 
     ・[56246] たすけてぇ><; 
     ・[56249] パコネコ 
     ・[56250] たすけてぇ><; 
     ・[56251] たすけてぇ><; 
     ・[56253] 地味な学生 
     ・[56282] 組木紙織 
     ・[56284] ムンバ 
     ・[56390] poteto 
     ・[56525] だいちゃん 
     ・[56541] パコネコ 
   教えてください。   
     ・[56377] box 
     ・[56379] tatu 
     ・[56380] Mist 
     ・[56382] tatu 
     ・[56383] box 
     ・[56384] tatu 
     ・[56385] box 
     ・[56391] tatu 
     ・[56392] box 
     ・[56403] tatu 
     ・[56407] box 
     ・[56414] tatu 
     ・[56418] ぽこ 
     ・[56429] box 
     ・[56488] tatu 
     ・[56489] もぐりん 
     ・[56490] 白い時空 
     ・[56491] fatens 
     ・[56497] tatu 
     ・[56501] ドラ 
     ・[56509] box 
   文字列操作時のメモリ ....   
   「雑談」弾の座標の求 ....   
     ・[56484] Tororo 
     ・[56485] へろり 
     ・[56486] たいちう 
     ・[56487] Dixq (管理人) 
     ・[56496] dic 
   C言語の配列はなぜ静的 ....   
     ・[56341] 組木紙織 
     ・[56352] けえぼお 
     ・[56355] 組木紙織 
     ・[56358] ISLe 
     ・[56393] けえぼお 
     ・[56493] ぷにょ 
     ・[56495] へろり 
   ポインタについて質問 ....   
     ・[56475] パコネコ 
     ・[56476] 組木紙織 
     ・[56477] MAY 
     ・[56479] 絵里 
     ・[56480] 組木紙織 
   DXライブラリ使用時Wi ....   
     ・[56452] fatens 
     ・[56453] MAY 
     ・[56455] MAY 
     ・[56457] Dixq (管理人) 
     ・[56478] MAY 
   DirectXの描画について ....   
     ・[56173] シエル 
     ・[56179] Justy 
     ・[56180] シエル 
     ・[56181] たろう 
     ・[56182] シエル 
     ・[56183] たろう 
     ・[56184] シエル 
     ・[56185] たろう 
     ・[56186] たろう 
     ・[56193] たろう 
     ・[56196] シエル 
     ・[56217] たろう 
     ・[56231] シエル 
     ・[56232] たろう 
     ・[56233] シエル 
     ・[56237] たろう 
     ・[56289] たろう 
     ・[56290] たろう 
     ・[56328] たろう 
     ・[56331] ideyan 
     ・[56334] たろう 
     ・[56335] シエル 
     ・[56336] たろう 
     ・[56338] たろう 
     ・[56348] ISLe 
     ・[56350] ISLe 
     ・[56466] たろう 
     ・[56469] ISLe 
     ・[56472] たろう 
   小さい順に   
     ・[56434] 初心者 
     ・[56446] 胡椒 
     ・[56447] へろり 
     ・[56448] motuna 
     ・[56450] MAY 
     ・[56471] 初心者 
   課題でC言語ってよく出 ....   
     ・[56258] ookami 
     ・[56259] シエル 
     ・[56260] Dixq (管理人) 
     ・[56261] パコネコ 
     ・[56262] シエル 
     ・[56265] パコネコ 
     ・[56274] yu 
     ・[56278] ideyan 
     ・[56280] nayo 
     ・[56291] 山崎 
     ・[56298] toyo 
     ・[56301] シエル 
     ・[56303] softya 
     ・[56308] シエル 
     ・[56310] softya 
     ・[56333] パコネコ 
     ・[56337] シエル 
     ・[56342] バグ 
     ・[56346] パコネコ 
     ・[56354] softya 
     ・[56357] シエル 
     ・[56462] パコネコ 
     ・[56467] 組木紙織 
     ・[56470] パコネコ 
   課題のわからない所の ....   
     ・[56426] ぽこ 
     ・[56430] へろり 
     ・[56431] box 
     ・[56432] 大学生 
     ・[56435] へろり 
     ・[56456] 大学生 
     ・[56459] box 
     ・[56468] 大学生 
   C言語における変数の名 ....   
     ・[56425] ぽこ 
     ・[56427] めるぽん 
     ・[56428] へろり 
     ・[56436] toyo 
     ・[56458] ぬるぽ 
     ・[56460] Dixq (管理人) 
     ・[56464] ぬるぽ 
   remove関数でファイル ....   
     ・[56389] ぽこ 
     ・[56437] dic 
     ・[56438] へろり 
     ・[56439] dic 
     ・[56441] toyo 
     ・[56443] mila 
     ・[56445] toyo 
     ・[56449] dic 
     ・[56454] dic 
   課題に取り組んでいる ....   
     ・[55943] パコネコ 
     ・[55944] 南瓜 
     ・[55945] シエル 
     ・[55946] パコネコ 
     ・[55947] スキマ妖怪 
     ・[55948] 南瓜 
     ・[55949] Dixq (管理人) 
     ・[55951] パコネコ 
     ・[55953] スキマ妖怪 
     ・[55956] パコネコ 
     ・[55958] パコネコ 
     ・[55963] 南瓜 
     ・[55964] スキマ妖怪 
     ・[55965] 白い時空 
     ・[55966] パコネコ 
     ・[55968] スキマ妖怪 
     ・[55987] パコネコ 
     ・[55989] フリオ 
     ・[55990] フリオ 
     ・[56015] パコネコ 
     ・[56028] 南瓜 
     ・[56030] パコネコ 
     ・[56069] 白い時空 
     ・[56079] フリオ 
     ・[56088] へろり 
     ・[56089] 白い時空 
     ・[56116] 南瓜 
     ・[56117] パコネコ 
     ・[56118] fatens 
     ・[56120] 南瓜 
     ・[56130] ISLe 
     ・[56157] 南瓜 
     ・[56304] 南瓜 
     ・[56327] mats 
     ・[56349] 南瓜 
     ・[56353] fatens 
     ・[56395] 南瓜 
     ・[56442] 南瓜 
   風神録の5章なんです ....   
     ・[56360] ぽこ 
     ・[56361] MONO 
     ・[56362] ぽこ 
     ・[56421] MONO 
     ・[56424] ぽこ 
     ・[56440] MONO 
   ウィンドウサイズを任 ....   
     ・[56419] DVDM 
     ・[56420] JUNE 
   【雑談】IOCCC のよう ....   
     ・[56373] へろり 
     ・[56374] シエル 
     ・[56387] ぽこ 
     ・[56400] たいちう 
     ・[56408] いくせ、ふたたび 
     ・[56409] 御津凪 
     ・[56416] ムンバ 
   Windows7でのダイレク ....   
     ・[56397] 爺プログラマー 
     ・[56398] シエル 
     ・[56401] 爺プログラマー 
     ・[56402] シエル 
     ・[56404] 爺プログラマー 
     ・[56410] ISLe 
     ・[56411] ISLe 
     ・[56412] 爺プログラマー 
   グローバル変数の定義 ....   
     ・[56285] めるぽん 
     ・[56330] ISLe 
     ・[56363] ぽこ 
     ・[56406] いくせ、たびたび 
   特定行のテキストデー ....   
     ・[56370] シエル 
     ・[56371] バグ 
     ・[56381] mint 
   テキストファイルの読 ....   
     ・[56365] バグ 
     ・[56366] 白い時空 
     ・[56367] mint 
     ・[56368] mint 
   課題:基数変換   
     ・[56322] 咲 
     ・[56323] toyo 
     ・[56326] 咲 
     ・[56332] 咲 
     ・[56356] box 

Name: シエル  ..プログラマー(27,640ポイント)   Date: 2010/07/13(火) 18:24   No:56584       
Title: C言語で出てくる「?」の意味について    
すいません。超初歩的な質問をさせて下さい。
たまに、C言語のサンプルで下記のように「?」のマークが
出てくることがあるのですが、これはどういう意味があるのですか?
一応ググったんですけど、うまく検索されなかったので分かりませんでした。

int IAbs(int x)
{
    return ((x >= 0)?  x : -x);
}


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


Name: MNS  ..プログラマー(38,492ポイント)   Date: 2010/07/13(火) 18:30   No:56585     
Title: Re:C言語で出てくる「?」の意味について    
条件演算子といいます。
具体的には、
<条件> ? <真のときの値>:<偽のときの値>
とかきます。

return ((x >= 0)?  x : -x); 
このコードでは、xが0以上のときにxを、
xが0未満のときに-xを返しますから、
つまりはxの絶対値を返すということになりますね。 編集済み


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

Name: やっくん  ..プログラマー(29,340ポイント)   Date: 2010/07/13(火) 18:33   No:56586     
Title: Re:C言語で出てくる「?」の意味について    
式1 ? 式2 : 式3
このような形を条件演算子と言います。

式1にif文の条件などで使われる条件式。
この式全体の値として、
・式1がtrue(真)だったときには式2
・式1がfalse(偽)だったときには式3
が返ってきます。

>return ((x >= 0)?  x : -x); 
これですとxが正ならそのままの値を返し、負なら符号を反転(つまり正に)して値を返します。


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

Name: シエル  ..プログラマー(27,726ポイント)   Date: 2010/07/13(火) 18:41   No:56587 解決!     
Title: Re:C言語で出てくる「?」の意味について    
なるほど。。
if文を違う形式で書いたような感じのものなんですね。
でもifで書いた方が分かりやすいですね。
前から気になっていたので助かりました。。
MNSさん、やっくんさん、ありがとうございました!


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

Name: TKOZ  ..熟練のプログラマー(69,661ポイント)   Date: 2010/07/13(火) 18:46   No:56588     
Title: Re:C言語で出てくる「?」の意味について    
三項演算子とも言います。
それだけです。orz


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

Name: シエル  ..プログラマー(27,746ポイント)   Date: 2010/07/13(火) 18:49   No:56589     
Title: Re:C言語で出てくる「?」の意味について    
>>TKOZさん

ありがとうございます。覚えときます。


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

Name: めるぽん  ..初心者(5,086ポイント)   Date: 2010/07/13(火) 21:38   No:56595     
Title: Re:C言語で出てくる「?」の意味について    
?:演算子を三項演算子と呼ぶのは、正確には違いますね。
項が3つ(?:演算子の場合は<条件>, <真のときの値>, <偽のときの値>の3つ)あるものを三項演算子と呼びます。
C言語には三項演算子が1つしか無いため、三項演算子と言った場合は条件演算子だということが分かるだけです。

二項演算子なんかを考えると分かりやすいですね。
a+b や a-b というように使用される + や - はどちらも二項演算子ですが、それぞれ加算演算子と減算演算子とかそんな感じで呼ばれてます。


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

Name: シエル  ..プログラマー(27,794ポイント)   Date: 2010/07/13(火) 21:56   No:56598     
Title: Re:C言語で出てくる「?」の意味について    
ぬるぽんさん。詳しい説明ありがとうございます。
覚え直しときます。


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

Name: ゆーずぃ  ..初心者(6,727ポイント)   Date: 2010/07/14(水) 04:27   No:56621     
Title: Re:C言語で出てくる「?」の意味について    
条件演算子で思い出したんですけど、条件演算子で処理を行う必要が無い時って皆さんどうしてます?
例えば

(max > y) ? max : max = y; //yの方が大きければmaxを更新。真の時は処理不要

のような時、自分は変数でも書いてごまかしてたんですけど(環境によっては違うのかもしれませんが、自分は何も書かないとコンパイラに怒られるのでw)他にいい方法は無いのかなと。

せっかく主さんが条件演算子についての理解を深めつつあるので、こういった条件演算子の話題はいかがかなと(o^―^o)おっつけに見えたら申し訳ない;


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

Name: やっくん  ..プログラマー(29,703ポイント)   Date: 2010/07/14(水) 06:33   No:56622     
Title: Re:C言語で出てくる「?」の意味について    
私はこのようになる場合はif文で処理すると思います。
条件演算子はif〜else文を短く書くだけのものと捉えています。
この場合ではelseは用いずif文のみで処理できますよね、だから条件演算子を使うのは冗長に思えます。



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

Name: シエル  ..プログラマー(27,813ポイント)   Date: 2010/07/14(水) 08:30   No:56627     
Title: Re:C言語で出てくる「?」の意味について    
条件演算子って処理する必要がない場合も何かを書いて、
ごまかさなきゃならないんですね。
私はこの条件演算子を初めて知りましたが、使おうとはまったく思っていません。

if文の方が分かりやすいし、この条件演算子を使うメリットが見えてきません。。。


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

Name: 組木紙織  ..比類無きプログラマー(89,602ポイント)   Date: 2010/07/14(水) 08:40   No:56629     
Title: Re:C言語で出てくる「?」の意味について    
>if文の方が分かりやすいし、この条件演算子を使うメリットが見えてきません。。。

複雑なのは同意、
条件演算子は代入をするときに便利です。
例えば絶対値なんかだと。

x *= (x>0)?1:-1;
で絶対値が計算できるので。


コードにミスがあったので修正 編集済み


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

Name: toyo  ..熟練のプログラマー(54,187ポイント)   Date: 2010/07/14(水) 08:51   No:56632     
Title: Re:C言語で出てくる「?」の意味について    
条件演算子を2重にしてるプログラムも見たことがあります
a = b ? c : d ? e : f;
もう何がなにやら
しかも言語によって結果が違うという(PHPではCと異なる)
私も単純な代入やreturnの時にしか使いませんね


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

Name: へろり  ..上級者(22,865ポイント)   Date: 2010/07/14(水) 09:00   No:56634     
Title: Re:C言語で出てくる「?」の意味について    
>if文の方が分かりやすいし、この条件演算子を使うメリットが見えてきません。。。 

私は割と頻繁に条件演算子を使いますね。

組木紙織さんもおっしゃってますが、やはり代入するときはとても便利です。

後は関数に渡す実引数ですとか。

たとえば、関数 hoge() に変数 foo が0の時は、変数 a を。 非0の時は、変数 b を渡したいといった場合。
if()文を使うと次のようになります。

if(foo == 0){
    hoge(a);
}else{
    hoge(b);
}


条件演算子を使えば、

hoge(foo == 0 ? a : b);

ですみますね。


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

Name: シエル  ..プログラマー(28,045ポイント)   Date: 2010/07/14(水) 09:17   No:56636 解決!     
Title: Re:C言語で出てくる「?」の意味について    
なるほど。単純な条件での代入や関数に渡す引数などでは、
すっきり書けて使えそうですね。ちょっとかっこいいかも。

ですが、toyoさんがおっしゃってる通り、複雑な条件で使用するのは
やはりif文の方が分かりやすいですね。
最初に見たサンプルでは二重で使用されてたものだったので、さっぱり分かりませんでした。
演算子が「?」なので、余計に頭も「?」になりましたw

状況に応じて使い分けるようにします。

回答していただいた皆さん、お忙しいところありがとうございました!
非常に勉強になりました!


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



Name: reghorn  ..ぴよぴよ(18ポイント)   Date: 2010/07/14(水) 00:22   No:56610       
Title: 二次元配列を引数として渡す方法    
二次元配列を引数として受け取りその中身を表示する関数testを作ろうとしているのですが
コンパイルは通るのですが実行すると不正なアドレスを読み込んでいるようで動いてくれません。
具体的なエラーメッセージは以下のとおりで、停止時にVisualStudioのデバッガの矢印(?)はprintfの行で止まっています。

test.exe の 0x008213e8 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。

1次元配列を受け取り先頭要素を印字するtest2は動いてくれるので同じ方法でできると思ったのですがどうも違うようです。
二次元配列の場合はどのようにすればいいのでしょうか?
testの引数を test(double a[2][2]) などと具体的に指定してやれば動くのはわかりますが今回はサイズの分からない二次元配列に使えるような関数を作りたいのでこの方法は取れません。

実行環境
windows7 Pro 64bit
Visual Studio 2008

C言語の理解度
入門書を一通りやった程度でその内容を100%熟知してはいません

#include<stdio.h>
void test(double** a){
    printf("%f\n",a[0][0]);
}
void test2(double* a){
    printf("%f\n",a[0]=5);
}

int main(void){
    int i,j;
    double a[2][2]={{1,2},{3,4}};
    double x[2]={1,2};
    for(i=0;i<2;i++)
        for(j=0;j<2;j++)
            printf("%f\n",a[i][j]);    //ここまで動く

    //test(a); //呼びだすとtestのprintfを実行時にエラー
    test2(x);    //これも動く

    return 0;
}


 編集済み


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


Name: やっくん  ..プログラマー(29,454ポイント)   Date: 2010/07/14(水) 00:45   No:56611     
Title: Re:二次元配列を引数として渡す方法    
void test(double a[][2]){
    printf("%f\n",a[0][0]);
}

このように記述すれば一応動きます。

double** a に a[2][2]
を渡そうとすると何故エラーかというと、これはポインタのポインタ変数に対して、ただの配列のアドレスを渡していることになりますのでエラーとなります。


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

Name: reghorn  ..ぴよぴよ(275ポイント)   Date: 2010/07/14(水) 00:53   No:56613     
Title: Re:二次元配列を引数として渡す方法    
あう、編集中に回答をしていただいたようです申し訳ない
恐らくやっくんさんが回答を書いている間に質問文を編集して次の文を追加しました。
”testの引数をtest(double a[2][2]) などと具体的に指定してやれば動くのはわかりますが今回はサイズの分からない二次元配列に使えるような関数を作りたいのでこの方法は取れません。”

>>double** a に a[2] [2]
を渡そうとすると何故エラーかというと、これはポインタのポインタ変数に対して、ただの配列のアドレスを渡していることになりますのでエラーとなります。

1次元の配列の場合もポインタ変数に対して配列のアドレスを渡して動いていますがポインタのポインタの場合だと駄目なんでしょうか?
 編集済み


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

Name: やっくん  ..プログラマー(29,666ポイント)   Date: 2010/07/14(水) 00:55   No:56614     
Title: Re:二次元配列を引数として渡す方法    
<追記>
ポインタを使うのであれば、以下のような書き方もできます。
これが正しいかわかりませんので参考程度にお願いします(^^;
void test(double* a, int n1, int n2)
{
  int i, j;
  for(i = 0; i < n1; i++)
    for(j = 0; j < n2; j++)
      printf("[%d][%d] = %f\n", i, j, a[i*n2 + j]);
}

// main側で呼び出す場合は
test(a, 2, 2);


配列はまとまってメモリを取ったものに過ぎないので、2次元、3次元、・・・、N次元としたところで1次元で表現できます。


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

Name: reghorn  ..ぴよぴよ(457ポイント)   Date: 2010/07/14(水) 01:13   No:56615     
Title: Re:二次元配列を引数として渡す方法    
メモリ上の二次元配列は
a[0][0]
a[0][1]
a[1][0]
a[1][1]
となっているはず(環境による?)なので仰る通り1次元で表現できるのは理解できます。
aの要素を全部出すにはaのサイズを渡さないといけないのもわかりますが今回は先頭要素だけ見れればいいので割愛しています。
デバッガで追ってみるとmain内部での*aはa[0][0]でしたがtestに渡すと0x00000000になるみたいです。
うーん、もうちょっと本とか見てみます・・・。


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

Name: やっくん  ..プログラマー(29,708ポイント)   Date: 2010/07/14(水) 01:22   No:56616     
Title: Re:二次元配列を引数として渡す方法    
質問の意図を理解できていなかったらすみません(^^;
私もこの辺りが整理できたのが最近なのであまり良い回答をできないかもしれませんが。

>1次元の配列の場合もポインタ変数に対して配列のアドレスを渡して動いていますがポインタのポインタの場合だと駄目なんでしょうか? 

これは
int a[2][2];
とした場合はポインタのポインタに渡せる。
つまり
int ** ⇔ int [][]
と解釈されているのでしょうか?

int a[2][2];
は先程書いたようにメモリ上では1次元であり、そのアドレスはポインタのポインタでは無く、ポインタで指します。
「ポインタのポインタ」は「ポインタ」を指すものであるので、ここでの2次元配列配列のアドレスを指すことができません。

もし、関数内で2次元配列として扱いたいのであれば、
main側の変数を
int **a;
と宣言し、任意のメモリを動的確保し、関数に受け渡せば2次元配列として振まうことができますよ。 編集済み


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

Name: reghorn  ..ぴよぴよ(670ポイント)   Date: 2010/07/14(水) 01:32   No:56617 解決!     
Title: Re:二次元配列を引数として渡す方法    
>>int ** ⇔ int [][]
と解釈されているのでしょうか? 

エスパーしていただいて助かってます、その通りでした。
手持ちの本で配列とポインタは等価に使えると書いてあったのをなんだか勘違いして理解していたようです。

>>
もし、関数内で2次元配列として扱いたいのであれば、
main側の変数を
int **a;
と宣言し、任意のメモリを動的確保し、関数に受け渡せば2次元配列として振まうことができますよ。

やりたいことはおっしゃている通りです。助かりました、ありがとございます。


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

Name: やっくん  ..プログラマー(29,604ポイント)   Date: 2010/07/14(水) 01:46   No:56618     
Title: Re:二次元配列を引数として渡す方法    
参考になるサイトを探してみました。
やり方次第で動的確保せずにすっきりできるみたいです(^^;
下記のサイトを下に読み進めていけば手法が書いてあります。

http://c-production.com/contents/c/sec10.html#09



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

Name: reghorn  ..ぴよぴよ(688ポイント)   Date: 2010/07/14(水) 01:52   No:56619     
Title: Re:二次元配列を引数として渡す方法    
ありがとうございます、今日はもう時間が遅いので明日以降読んでみます

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



Name: あ〜る  ..上級者(21,106ポイント)   Date: 2010/07/13(火) 22:38   No:56604       
Title: Releaseビルドの仕方について    
こんばんは、あ〜るです。
今回ゲームを公開するためにReleaseビルドをしようとしたのですが、エラーがいっぱい出てきてどう手をつければいいのかわかりません。
環境はBCC Developer(スペル間違ってたらすいません)でBorlandC++を使っています。DXライブラリを使って作成しています。

<ファイル構成>

MyC
 |--EntreatDream
 |       |---------Release
 |
 |--DXLib

MyCフォルダの中にEntreatDreamフォルダとDXLibフォルダがあります。
EntreatDreamはゲームのフォルダで、DebugフォルダやReleaseフォルダもこの中にあります。
DXLibフォルダの中にはDXライブラリが入っていて、Debugビルドする際はこのフォルダをプロジェクトに取り込んでいます。
しかし、Releaseビルドする際に同じ設定にすると以下のエラーが出ます。
どうすれば直るのでしょうか?

Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_keymatch' が未解決(C:\MYC\DXLIB\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_read_scan_script' が未解決(C:\MYC\DXLIB\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_read_stdin' が未解決(C:\MYC\DXLIB\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_write_stdout' が未解決(C:\MYC\DXLIB\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_jcopy_markers_setup' が未解決(C:\MYC\DXLIB\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_jtransform_request_workspace' が未解決(C:\MYC\DXLIB\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_jtransform_adjust_parameters' が未解決(C:\MYC\DXLIB\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_jcopy_markers_execute' が未解決(C:\MYC\DXLIB\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_jtransform_execute_transformation' が未解決(C:\MYC\DXLIB\LIBJPEG.LIB|jpegtran が参照)

** error 1 ** deleting Release\Europian.exe

ビルドするとこのようなエラーが出てしまいます。
どうすればいいのかご教授お願いします。
情報で足りないもの、わからないものがあったら言って下さい、どの情報が必要なのか良くわかりません・・・


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


Name: Justy  ..伝説なるハッカー(556,635ポイント)   Date: 2010/07/14(水) 00:09   No:56608     
Title: Re:Releaseビルドの仕方について    
 コンソールアプリを作ろうとしていませんか?
 設定を見直してみてください。


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

Name: あ〜る  ..上級者(21,143ポイント)   Date: 2010/07/14(水) 00:49   No:56612 解決!     
Title: Re:Releaseビルドの仕方について    
おぉ!!その通りでした!!
見落としていました、、、情けない、、、
でもこれでリリースビルドも出来ました
ありがとうございました!!


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



Name: jin  ..ぴよぴよ(46ポイント)   Date: 2010/07/13(火) 22:28   No:56602       
Title: 2. ウィンドウを表示させる。について    
先ほどダウンロードしたフォルダの中の「サンプルプログラム実行用フォルダ」のフォルダの中の
VisualStdioでしたらDxLib.slnを開き、プログラムが書ける状態にしてください。とありますが新規作成する方法が書いてありません、常に上書きしろってことですか?、VBC++の使い方調べながらやるのめんどくさいです
教えてください


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


Name: Justy  ..伝説なるハッカー(556,615ポイント)   Date: 2010/07/14(水) 00:08   No:56607     
Title: Re:2. ウィンドウを表示させる。について    
 その「サンプルプログラム実行用フォルダ」と同じディレクトリにあるHelpディレクトリの dxuse.htmlに
書いてあります。

 公式HPの方にも同じものがあります。

DXライブラリ置き場 使い方説明
http://homepage2.nifty.com/natupaji/DxLib/dxuse.html


 お使いの環境に合ったリンク先を選んでお読みください。


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

Name: ROM  ..入門者(3,124ポイント)   Date: 2010/07/14(水) 00:22   No:56609     
Title: Re:2. ウィンドウを表示させる。について    
> VBC++の使い方調べながらやるのめんどくさいです

これは酷過ぎやしませんか。
自分から学ぼうとする姿勢がなければ何事も成長しませんよ。
これから解らない事があれば毎回人に聞き続けるのでしょうか?
とりあえずゲーム制作はC言語の基本を理解してからにしましょう。
そうでないとこれから何度も人に聞かなければならなくなるでしょう。


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



Name: 初心者やま  ..ぴよぴよ(107ポイント)   Date: 2010/07/13(火) 17:50   No:56583       
Title: VC6.0とEXCEL2003について    
VC6.0でExcelCOM(2000)を使用したアプリケーションをExcel2003に対応しようとしたところ、mso9.dllが2003にないため、エラーとなりました。

その為、下記内容に修正しました。
#import <C:\Program Files\Common Files\Microsoft Shared\Office11\MSO.DLL> no_namespace rename("DocumentProperties", "DocumentPropertiesXL")   
#import <C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB> no_namespace   
#import <C:\Program Files\Microsoft Office\Office11\EXCEL.EXE> rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") no_dual_interfaces

これでリンクすると、下記エラーがでました。
MSO.tlh(1087) : warning C4146: 符号付きの値を代入する変数は、符号付き型にキャストしなければなりません。
VBE6EXT.tlh(210) : error C2146: 構文エラー : ';' が、識別子 'CommandBars' の前に必要です。
VBE6EXT.tlh(210) : error C2501: '__missing_type__' : 識別名を宣言するのに、型が指定されていません。
VBE6EXT.tlh(210) : error C2208: 'struct CommandBars' : メンバのない列挙型、構造体、共用体が定義されました。
VBE6EXT.tlh(231) : error C2146: 構文エラー : ';' が、識別子 'GetCommandBars' の前に必要です。
VBE6EXT.tlh(231) : error C2501: '__missing_type__' : 識別名を宣言するのに、型が指定されていません。
VBE6EXT.tlh(253) : error C2061: 構文エラー : 識別子 '__missing_type__' がシンタックスエラーを起こしました。
VBE6EXT.tli(32) : error C2143: 構文エラー : ';' が 'tag::id' の前に必要です。
VBE6EXT.tli(32) : error C2433: '__missing_type__' : 'inline' はデータ宣言をするのに使用できません。
VBE6EXT.tli(32) : error C2501: '__missing_type__' : 識別名を宣言するのに、型が指定されていません。
VBE6EXT.tli(32) : fatal error C1004: 予期せぬ EOF が検出されました。

他所方法を教えて頂けないでしょうか。


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




Name: 爺プログラマー  ..入門者(3,314ポイント)   Date: 2010/07/11(日) 21:41   No:56511       
Title: ダイレクトXのバージョンについて    
Windows7にはDX10が標準でインストールされていますが、DX9以前を使ったアプリは動かないためDX9のランタイムのみインストールする方法を教えてください。
現在より低いバージョンをインストールするとOSが拒否するのでどのようにすればいいですか?
また、ランタイムのみダウンロードできるでしょうか?


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


Name: ISLe  ..初心者(5,633ポイント)   Date: 2010/07/12(月) 00:49   No:56513     
Title: Re:ダイレクトXのバージョンについて    
DX9だけでもたくさんバージョンがあるんですけど。

DirectX エンド ユーザー ランタイム Web インストーラ
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=2da43d38-db71-4c1b-bc6a-9b6652cd92a3

↑のプログラムを実行すると過去すべてのバージョンのランタイムがインストールされます。

特定のSDKバージョンに対応したものなら

Microsoft ダウンロードセンター を"DirectX Redist"で検索した結果
http://www.microsoft.com/downloads/ja-jp/results.aspx?freetext=Directx+Redist&displaylang=ja

こちらから目的のものをダウンロードしてインストールしてください。

DirectX SDKをインストールしたフォルダのRedistフォルダに↑と同じランタイムのインストールパッケージがあるので必要なランタイムだけを自作アプリのインストールパッケージに含めることもできます。


> 現在より低いバージョンをインストールするとOSが拒否するのでどのようにすればいいですか? 

どういう現象か具体的に教えていただけませんか?


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

Name: 爺プログラマー  ..入門者(3,533ポイント)   Date: 2010/07/12(月) 10:07   No:56516     
Title: Re:ダイレクトXのバージョンについて    
ISLeさん、どうも

「新しいバージョンのDXがすで存在します」などでインストールが中断させられます。だぶん

Win7ユーザーにDX9のインストールを指示したくないので、
実行ファイルと同梱で再配布する形でのランタイム(DLLファイル)はないでしょうか?
開発で使用したヘッダーファイルとインクルードファイルを実行ファイルと同じ場所に同梱しても動作しないでしょうか?
サウンド8関連のDLLを同梱配布して動作できれば一番いいのですが・・・


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

Name: ISLe  ..初心者(5,782ポイント)   Date: 2010/07/12(月) 18:45   No:56539     
Title: Re:ダイレクトXのバージョンについて    
> 「新しいバージョンのDXがすで存在します」などでインストールが中断させられます。だぶん 

それは文字通りならインストールする必要がないときに出ると思います。
あるいはセットアッププログラムが古くてバージョンチェックに失敗している可能性があります。

Windows7にDX9やDX8のランタイムをインストールできないということはありません。
ウチではXP以前のPCゲームが7(x64)で不具合無く動いてますよ。
むしろVistaでは動かなかったゲームが7では動いてます。


> Win7ユーザーにDX9のインストールを指示したくないので、
> 実行ファイルと同梱で再配布する形でのランタイム(DLLファイル)はないでしょうか?

DirectX関連のDLLはセットアッププログラムを使ってシステムに登録されないと使えません。

> 実行ファイルと同梱で再配布する形でのランタイム(DLLファイル)はないでしょうか? 

DirectX SDKのRedistフォルダに入っているファイル群がそれです。
セットアップを自動化することはできますがセットアップ作業そのものを省くことはできません。


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

Name: 爺プログラマー  ..入門者(3,568ポイント)   Date: 2010/07/12(月) 20:30   No:56540     
Title: Re:ダイレクトXのバージョンについて    
ISLeさん 丁寧な回答ありがとうございます。

単純に考えたのですが、XPのWindows→system32フォルダーのDSOUND.dllを実行ファイルに添付してWin7のsystemフォルダーにコピーしてもDX8環境で動作するとは考え難いと思いますがやはり不可能でしょうね。

やはり指示頂いた、「DirectX エンド ユーザー ランタイム Web インストーラ」の線で行きたいと考えます。



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

Name: ISLe  ..初心者(6,009ポイント)   Date: 2010/07/12(月) 22:00   No:56548     
Title: Re:ダイレクトXのバージョンについて    
> 単純に考えたのですが、XPのWindows→system32フォルダーのDSOUND.dllを実行ファイルに添付してWin7のsystemフォルダーにコピーしてもDX8環境で動作するとは考え難いと思いますがやはり不可能でしょうね。

DirectX関連のDLLはレジストリにGUIDと関連付けられて登録されますから、もしGUIDの異なる同名ファイルを上書きするようなことがあれば最悪システムが破壊されるかもしれません。


ちょっと調べてみました。
XP(x86)、7(x64)ともにウエブインストーラで最新ランタイムに更新済みです。
XPのdsound.dllと7のdsound.dllは異なるバージョンでした。
それから7にはWindows→WinSxSファルダにサイドバイサイド構成が作成されています。
さらにx64だとWindows→system32には64ビット版、Windows→SysWOW64に32ビット版があります。
64ビット版のサイドバイサイド構成も作成されています。
下手に触らない方が良さそうです。


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

Name: 爺プログラマー  ..入門者(3,812ポイント)   Date: 2010/07/13(火) 09:46   No:56554     
Title: Re:ダイレクトXのバージョンについて    
詳しくありがとうございます。感謝します。

私はVC++で組んだソフトウエアがDLLを参照する振る舞いは知る事が出来ませんが、参照手順は作成したプログラム本体に記述されているのでしょうか?
例えば、OSのシステム内のDLLに記述がなければ、アプリケーション本体のそばにあるDLLを参照するとか、そういった流れにはならいのでしょうかね。

これが可能であれば、アプリと同梱すれば、システムエリアのDLLを書き換える心配もないと考えるのですが、素人考えでしょうか?


また、調べて頂いた
>XP(x86)、7(x64)ともにウエブインストーラで最新ランタイムに更新済みです。

このことは、7ユーザーに、
「DirectX エンド ユーザー ランタイム Web インストーラ」
を指示する必要が無いということになり、7ユーザはDirectXを使ったアプリのDXバージョンは気にする必要は全くないと解釈して差し支えないでしょうか?

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



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

Name: ISLe  ..初心者(6,369ポイント)   Date: 2010/07/13(火) 16:45   No:56572     
Title: Re:ダイレクトXのバージョンについて    
> 例えば、OSのシステム内のDLLに記述がなければ、アプリケーション本体のそばにあるDLLを参照するとか、そういった流れにはならいのでしょうかね。

ひと口にDLLと言ってもいろんな種類があります。

単純に関数やクラスをエクスポートしただけのDLLはおっしゃるようにカレントディレクトリ→システムディレクトリの順に検索されて先に見付かったものを使用するようにできます。

DirectX関連のDLLはCOMコンポーネントです。
#COMもまたActiveX等さまざまな方式の総称です。
プログラムがGUIDを指定して取得したインターフェースを使用する仕組みになっています。
これをシステムが中継する際にレジストリに登録された情報を使用します。
このようなDLLはさまざまなアプリケーションで共有されるので配置場所も管理されています。
異なるバージョンの同名ファイルDLLが共存できるサイドバイサイドという仕組みも導入されさらに配置場所が重要になっています。
#サイドバイサイドとは実行ファイルにマニフェストを追加することで特定のバージョンのDLLを使用するように指定することができる仕組みです。


> このことは、7ユーザーに、
> 「DirectX エンド ユーザー ランタイム Web インストーラ」
> を指示する必要が無いということになり、7ユーザはDirectXを使ったアプリのDXバージョンは気にする必要は全くないと解釈して差し支えないでしょうか?

いえ。ウェブインストーラを実行すると過去のすべてのバージョンのランタイムに対して古いものは更新され不足しているものは新規インストールされます。
DirectXバージョンごと(というかコンポーネントによってはSDKごと)にランタイムが異なり個々のランタイムがインストールされます。
アプリケーションが必要としているランタイムがインストールされているかどうかは常に気にする必要があります。

DirectSoundに限ればDirectSound8からバージョンが上がっていないので7のデフォルト状態でも動くかもしれません。


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

Name: 爺プログラマー  ..入門者(3,962ポイント)   Date: 2010/07/13(火) 17:41   No:56582     
Title: Re:ダイレクトXのバージョンについて    
 ISLe  さん毎度丁寧にありがとうございます。

Windowsプログラムはやはり基本を理解していなけれ限界があるのですね。

インストールの行動がわかったような想いです。

今回、Win7で
DirectSoundCaptureCreate8( NULL, &pDSC, NULL );
を取得時に、
DSERR_ALLOCATED
DSERR_INVALIDPARAM
DSERR_NOAGGREGATION
DSERR_OUTOFMEMORY
以外のエラーがでたのは、DXの問題ではなくデバイスもしくは録音設定の不備だと考えます。

7ユーザーに確認をとってみます。


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



Name: 駄文使い  ..ぴよぴよ(32ポイント)   Date: 2010/07/13(火) 13:48   No:56560       
Title: ウインドウサイズの設定について    
現在ゲーム開発をグループでしており、大変このサイトを参考にさせていただいているものです。
質問なんですが、ウインドウサイズの設定変更に関してはどのようにしたらよろしいのでしょうか。

開発環境
ビジュアルスタジオ2008expless
DXライブラリ導入済み
OSはwindows2008サーバ

ゲーム画面サイズ
縦:640
横 :480
でプレイ環境を整える計画です。


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


Name: 駄文使い  ..ぴよぴよ(71ポイント)   Date: 2010/07/13(火) 15:17   No:56564     
Title: Re:ウインドウサイズの設定について    
解決方法を発見しました。
失礼しました。完了マークの仕方がわからないのですみません。わかり次第追加します


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

Name: ISLe  ..初心者(6,519ポイント)   Date: 2010/07/13(火) 17:03   No:56575     
Title: Re:ウインドウサイズの設定について    
AdjustWindowRectとか。


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

Name: TKOZ  ..熟練のプログラマー(69,645ポイント)   Date: 2010/07/13(火) 17:22   No:56579 解決!     
Title: Re:ウインドウサイズの設定について    
SetGraphMode( int SizeX , int SizeY , int ColorBitNum ) ;
ですね。多分

代わりに解決マーク押しときます。


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

Name: ISLe  ..初心者(6,592ポイント)   Date: 2010/07/13(火) 17:35   No:56580     
Title: Re:ウインドウサイズの設定について    
640×480 ってデフォルトなのでは…


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



Name: ベルンカステル  ..ぴよぴよ(13ポイント)   Date: 2010/07/11(日) 23:42   No:56512       
Title: RPGについて    

はじめてで全くと言っていいほど知識がないのですが^^;

何から始めるといいのでしょうか?


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


Name: asd  ..上級者(21,389ポイント)   Date: 2010/07/12(月) 10:48   No:56520     
Title: Re:RPGについて    
具体的な質問ではないので回答に困りますが、
知識がないことが分かっているのであれば知識をつけることから始めたらどうでしょうか?

知識についても、
・プログラミング自体の知識(ビルド?なにそれおいしいの?レベル)
・C言語の知識(ソースを書いてビルドすればいいのは分かるけどC言語ってどう書けばいいの?レベル)
・ゲームプログラミングの知識(C言語の文法は分かるけどゲームを作るにはどう書けばいいの?レベル)
といろいろな知識があります。

RPG作成が初めてなのか、プログラミングが初めてなのか、パソコンが初めてなのか、
貴方の能力によって何からはじめるかは異なってきます。

#皮肉を言うと、質問の方法、せめて掲示板利用規約を読むことから始めたらと思います


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

Name: lbfuvab  ..プログラマー(26,913ポイント)   Date: 2010/07/12(月) 12:48   No:56527     
Title: Re:RPGについて    
単純にRPGが作りたいならRPGツクール辺りがベストだと思いますよ。
わざわざCで書く意味も無いですし。


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

Name: Dixq (管理人)  ..ウィザード(1,232,526ポイント)   Date: 2010/07/12(月) 14:00   No:56528     
Title: Re:RPGについて    
ベルンカステルさん、こんにちは。

他の方もおっしゃっていますが、
もう少し情報がないと答えづらいと思います。

C言語を使いたいという事ですか?それともRPGが作れたらCでなくてもいいのでしょうか?

Cを使いたい場合、どれ位Cの知識がありますか?


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

Name: softya [URL]  ..ハッカー(184,632ポイント)   Date: 2010/07/12(月) 15:00   No:56529     
Title: Re:RPGについて    
WolfRPGエディタと言う無料ツールがあります。
これを使うだけでも、けっこうな事が出来ます。
http://www.silversecond.com/WolfRPGEditor/
これを使いこなすのでも数カ月以上かかるでしょう。

もし、ZEROからプログラミングを始めたらRPGを作るための勉強は2年や3年では足らないかも知れません。
自分のやりたい事、出来る事、目的などを考慮してどうするのが決められた方が良いと思います。
プログラミングという手段は、プログラミング自体を楽しめないとすぐ挫折しています。それに、RPGはゲームプログラミングの初心者にとって難易度が恐ろしく高いシロモノです。制作に時間がかかりますしね。

WolfRPGエディタやRPGツクールでの制作も考慮した上でプログラミングを選ばれたのであれば(要するにそれほどまでにプログラミングしてみたい)出来るだけお手伝いさせていただきます。

C言語でのRPGの制作情報サイトを知らないのでJava言語のサイトを紹介しておきます。
「Javaでゲーム作りますが何か?」
http://javagame.skr.jp/


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

Name: パコネコ  ..中級者(13,577ポイント)   Date: 2010/07/12(月) 21:23   No:56544     
Title: Re:RPGについて    
私も今作ってますがすごく大変です。(時間的に)

>何から始めるといいのでしょうか?
プログラミングを何でするつもりなんでしょう?
C言語かな?RPGつくールでもいいとよく聞きますね。

私はおもな設定(MAPやパラメータ)は友達に任しているので楽してますが、やっぱり
ノートでもなんでもいいので、仕様やストーリー?とか必要になる変数とか書いとくべきですね。
作ってる最中にかなり変更しざるえないでしょうが、これはこれで楽しいですよ。



私の個人的な意見でしたが参考になると、うれしいです。




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

Name: softya [URL]  ..ハッカー(184,879ポイント)   Date: 2010/07/12(月) 21:39   No:56545     
Title: Re:RPGについて    
>ノートでもなんでもいいので、仕様やストーリー?とか必要になる変数とか書いとくべきですね。
>作ってる最中にかなり変更しざるえないでしょうが、これはこれで楽しいですよ。 

私の経験からするとシナリオ変数とゲームシステムのパラメータ変数は独立させて存在させたほうが後々楽になりますよ。
シナリオ変数は、シナリオスクリプト側で管理させます。シナリオ変数宣言でメモリ格納位置をコントロール可能にしておくと開発時や最終デバッグ時にかなり楽ができます。
※ シナリオのセーブデータがデバッグ中〜デバッグ後期まで使いまわせるため。テスト時にシナリオの特定の状態にシナリオを毎回進めるのは非効率的ですからね。シナリオをジャンプするデバッグモードを作っても良いけど、作るのも結構手間なんですよ。特にバグの再現は、シナリオバージョンが違っただけでセーブデータが使えなくなるとバグの再現もできなくなります。

ゲームシステムの変数はこれと独立してセーブロード出来るデバッグモードがあると色々テストに使えます。レベルとHPかのパラメータはこちら側です。
経験からの提案でした。


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

Name: hoge  ..入門者(4,265ポイント)   Date: 2010/07/12(月) 22:06   No:56549     
Title: Re:RPGについて    
一応、確認ですが、プログラミング言語の方のRPGじゃないよね。

http://ja.wikipedia.org/wiki/RPG_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E8%A8%80%E8%AA%9E)



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

Name: TKOZ  ..熟練のプログラマー(69,487ポイント)   Date: 2010/07/13(火) 17:12   No:56577     
Title: Re:RPGについて    
そうですね…。
アドバイスとしては、
C言語を最初に覚えるべきだと思います。
もしくは他の何かの言語。
まったくの初心者ならば、HSPが良いと思いますよ。

それで、プログラミングについての知識がついてきたら、
RPGツクールに手を出すといいかもしれません。

一番良いのはRPGツクール2000です。今でも人気です。

一番最初にRPGツクールに手を出しても、スクリプト作成の時点で何がどうなっているのか
把握しづらいと思います。

この時点でRPGツクールじゃなくて、オリジナルでRPGを作りたい意欲があるなら、
C言語を覚えて、DXライブラリの使い方を覚えると良いと思います。

サンプルプログラムだけでも応用すれば、かなりの事ができると思います。

そのときのゲームの制御用としてスクリプト言語としては、個人的にはLUAが良いと良いと
思っています。

かなり先の事まで書いていますが、覚えが良い人なら、1年で出来ると思います。

また、1人で作る場合、ドット絵の知識、技術、普通の2Dグラフィックの知識、技術、
コンピュータの基礎知識などが必要です。頑張ってください。


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



Name: natu  ..かけだし(1,555ポイント)   Date: 2010/07/12(月) 09:34   No:56515       
Title: リターンで終了するには??    
リターンキーでするにはどんな方法がありますか??
押すまでループから抜け出せないように作りたいのですが・・・。


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


Name: fatens  ..上級者(15,784ポイント)   Date: 2010/07/12(月) 10:11   No:56517     
Title: Re:リターンで終了するには??    
DXライブラリでしょうか?
そうならばこれでいけると思います。

int WINAPI WinMain(...)
{
    ChangeWindowMode(TRUE);
    DxLib_Init();

    while (!ProcessMessage() && !CheckHitKey(KEY_INPUT_RETURN)) {
        //いろいろな処理
    }

    DxLib_End();

    return 0;
}


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

Name: natu  ..かけだし(1,544ポイント)   Date: 2010/07/12(月) 10:35   No:56518     
Title: Re:リターンで終了するには??    
すみません。DXライブラリではないです。


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

Name: fatens  ..上級者(15,802ポイント)   Date: 2010/07/12(月) 10:43   No:56519     
Title: Re:リターンで終了するには??    
では何なのか書いていただかないと分からないのですが...


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

Name: natu  ..かけだし(1,597ポイント)   Date: 2010/07/12(月) 11:10   No:56522     
Title: Re:リターンで終了するには??    
do{
   end = getchar();
}while(end != '\n');

でやってるんですけど、リターン押す前に終わってしまうんです。


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

Name: fatens  ..上級者(15,854ポイント)   Date: 2010/07/12(月) 11:16   No:56523     
Title: Re:リターンで終了するには??    
おそらくストリームに残った改行文字を読み込んでしまっているのだと思います。
ループの中でscanf 関数などを呼び出している部分があれば、その部分も書いてみてください。


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

Name: natu  ..かけだし(1,749ポイント)   Date: 2010/07/12(月) 11:44   No:56524     
Title: Re:リターンで終了するには??    
短いので、全部書いてみました。お願いします。

int main(void){
  char str[10];
  char end;
  int i, enter;

  printf("文字列を入力"); 
  scanf("%s", str); 
  do{
    printf("1:表示\n");
    printf("2:終わり\n");
    printf("入力 ⇒ ");
    scanf("%d", &enter);
    printf("\n");
    if(enter > 2 || enter == 0){
      printf("もう一度入力してください\n");
      printf("\n");
    }
    if(enter == 1){
      for(i = 0; i < 10; i++){
        printf("%c", str[i]);
      }
      do{
        printf("\n");
        printf("リターンを押してください\n");
        end = getchar();
      }while(end != '\n');
     }
  }
while(enter != 2 );
}


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

Name: バグ  ..ハッカー(198,918ポイント)   Date: 2010/07/12(月) 16:11   No:56531     
Title: Re:リターンで終了するには??    
if (enter == 1){


の前に…


getchar();


を追加してみてください



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

Name: natu  ..かけだし(1,754ポイント)   Date: 2010/07/12(月) 16:25   No:56532     
Title: Re:リターンで終了するには??    
「リターンを押してください」の後、入力を待つようになりました。
何でですか??


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

Name: バグ  ..ハッカー(199,095ポイント)   Date: 2010/07/12(月) 16:45   No:56533     
Title: Re:リターンで終了するには??    
scanf関数で数値を入力する際の動作を思い出してみてください。

1:任意の数字を押す
2:エンターを押す

という順番で操作しますよね?

実は、2で実行された「エンターキーが押された」という情報はscanf関数では処理されずに残っています。なので、natuさんの書かれたプログラムでは入力待ち状態になった瞬間に残っていた「エンターキーが押された」という情報を読み取って終了してしまっていた訳です。

という訳で、その情報をgetchar関数を使って空読みして処理して解決したという訳です。


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

Name: natu  ..かけだし(1,768ポイント)   Date: 2010/07/12(月) 16:48   No:56534     
Title: Re:リターンで終了するには??    
へ〜。じゃぁ、scanfで入力しない方がいいんですか??

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

Name: バグ  ..ハッカー(199,175ポイント)   Date: 2010/07/12(月) 16:58   No:56535     
Title: Re:リターンで終了するには??    
そういう訳ではありません。使い方を間違えなければ全く問題ないです。
たしかに、scanf系の関数を嫌って使わない人もいますけどね…。
まぁ、その辺は好みの問題かと思います。


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

Name: natu  ..かけだし(1,783ポイント)   Date: 2010/07/12(月) 16:59   No:56536     
Title: Re:リターンで終了するには??    
わかりました。ありがとうございます。

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

Name: natu  ..かけだし(1,810ポイント)   Date: 2010/07/12(月) 17:36   No:56537     
Title: Re:リターンで終了するには??    
あっ。でも、リターン以外を入れてからリターンってすると
ループを抜けちゃいました・・・。


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

Name: バグ  ..ハッカー(199,241ポイント)   Date: 2010/07/12(月) 18:28   No:56538     
Title: Re:リターンで終了するには??    
while(end != '\n');

この部分がマズイですね。エンターキーのアスキーコードはおそらく0x0dだったはずなので…

while(end != 0x0d);

に変更してみてください。


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

Name: naohiro19  ..ぴよぴよ(76ポイント)   Date: 2010/07/13(火) 08:35   No:56553     
Title: Re:リターンで終了するには??    
Windowsプログラミングならウィンドウプロシージャに記述すればいいです
case WM_KEYDOWN:
     switch(wParam){
         case VK_RETURN:
               DestroyWindow(hWnd);
               break;
     }
     break;


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

Name: バグ  ..ハッカー(199,303ポイント)   Date: 2010/07/13(火) 09:51   No:56556     
Title: Re:リターンで終了するには??    
申し訳ないです。うちの環境で試してみたのですが、エンターキーのアスキーコードは0x0dではなく、0x0aでした。

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

Name: natu  ..かけだし(1,831ポイント)   Date: 2010/07/13(火) 12:07   No:56557 解決!     
Title: Re:リターンで終了するには??    
ありがとうございました。解決できました。

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

Name: ISLe  ..初心者(6,581ポイント)   Date: 2010/07/13(火) 17:06   No:56576     
Title: Re:リターンで終了するには??    
stdinでfgetsしてsscanfで面倒なことが一気に解消するのだけど中間にバッファが必要だから(初心者向けには)避けられているのでしょうかね。


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



Name: シザーハンズ  ..ぴよぴよ(223ポイント)   Date: 2010/07/13(火) 05:25   No:56552       
Title: 導入部分ができなかった・・・    
c言語とか以前の問題です。
 「(導入)DXライブラリを手に入れる。(全てはココから)」 から「Visual C++ 2010 Express」をインストールし(このとき、2008と書いてあるなにかだけ失敗した、とでました。が、よくわからないので無視しました。)、「コンパイラって何?」の手順どうりに進め、無事「hello world」を表示させられました。
 ここまでは良かったのですが、その後DXライブラリをDLし展開、サンプル〜のslnの2008(だった気がする)を開こうとすると、「このバージョンのアプリケーションではサポートされないプロジェクトの種類(vcxproj)です。サポートするバージョンを使用してください。」と言われ開けませんでした。2010でやっても同じでだめ。しかも、さっき作ったtestのプロジェクトも、開けないみたいなことを言われだめです。新たにプロジェクトを作ろうとしてもだめでした。

何が原因でこうなってしまったのか、またどうしたら元に戻すことが出来るかを教えて欲しいです。


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


Name: dic  ..比類無きプログラマー(85,263ポイント)   Date: 2010/07/13(火) 12:23   No:56558     
Title: Re:導入部分ができなかった・・・    
どっちもアンインストールして
どっちか2010か2008にかし搾ってやるとしか


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

Name: Dixq (管理人)  ..ウィザード(1,232,741ポイント)   Date: 2010/07/13(火) 15:25   No:56567     
Title: Re:導入部分ができなかった・・・    
私は

2005はProfessional
2008はExpress
2010はProfessionalを共存させてますが、ちゃんと動いてますので、共存は大丈夫なんでは…。

原因はよくわかりませんが、質問のあやふやなところを明確にして調べられそうなキーワードをググってみてはいかがでしょう?


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

Name: softya [URL]  ..ハッカー(185,094ポイント)   Date: 2010/07/13(火) 15:31   No:56569     
Title: Re:導入部分ができなかった・・・    
状況がよくわかりませんが、もしかしてslnをダブルクリックして開こうとして失敗しているんでしょうか?
VisualStudioを起動した後、ファイル→開く→プロジェクト/ソリューションで該当のファイルを開いたらうまく読み込みませんか?


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

Name: ISLe  ..初心者(6,510ポイント)   Date: 2010/07/13(火) 17:02   No:56574     
Title: Re:導入部分ができなかった・・・    
ウチも
Visual C++ 2005 Express
Visual C++ 2008 Express
Visual C++ 2010 Express
とインストールしたあとで2005をアンインストールしましたけど問題ないです。

インストール時にデフォルトのインストール先を「参考にしたサイトと違ってたから」と変えて上書きインストールしてしまうひとが多いみたいですけど、そういうことはないですか?
あとWindows7の64ビット版で"Program Files (x86)"を"Program Files"に書き換えたりとか。
#後者で不具合が出るかは未確認。

#2010しかインストールしてないように読めるけどそうじゃないようにも読める。


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



Name: ルーニー  ..ぴよぴよ(317ポイント)   Date: 2010/07/09(金) 13:42   No:56376       
Title: ファイル読み取り→平均、標準偏差、最大値、最小値を求める    
問題:レポートの得点が記録されたプログラムがある。これからデータを読み取り、平均、標準偏差、最大値、最小値を求めるプログラムを求めなさい。

分かるところを下のようにプログラミングしたのですが、どのように平均、標準偏差、最大値、最小値を求めればいいか分かりません。
ご教授願います。

#include <stdio.h>

int main (int argc, const char * argv[]) {
int average,stdev,max,min;
    char line[100],point[100],;
    FILE*in_file;
    in_file=fopen("Book1.txt","r");
    if(in_file==NULL){
        return 0;
    }
    
    
    while(fgets(line,100,in_file)!=NULL)    { 
        sscanf(line, "%s" ,point);
        average=
        stdev=
        max=
        min=
        
        printf("平均=%s, 標準偏差=%s,最大値=%s,最小値=%s\n",average,stdev,max,min);
    }
    
    
    fclose(in_file);
    
    
    return 0;
}


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


Name: box  ..ハッカー(155,370ポイント)   Date: 2010/07/09(金) 14:35   No:56378     
Title: Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める    
得点の数値を格納する変数はどれですか?

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

Name: TKOZ  ..熟練のプログラマー(69,037ポイント)   Date: 2010/07/09(金) 20:35   No:56394     
Title: Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める    
//サンプルプログラムです。それぞれ計算方法を書いておいたので、参考にしてください。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

int main()
{
    double average=0.0f,stdhensa=0.0f;//平均値、標準偏差(偏差のスペル分からんorz)
    int max=0,min=65536;//最大値、最小値初期化
    int point[100]={0};//得点テーブル
    FILE *fp;//ファイルポインタ
    int i;//ループ用変数i
    
    srand(time(NULL));
    
    //ファイル書き込み
    fp=fopen("Book1.txt","w");
        for(i=0;i<100;i++)
        {
            fprintf(fp,"%d\n",rand()%101);//100だと、乱数が0〜99になってしまう
        }
    fclose(fp);
    
    //ファイル読み込み
    fp=fopen("Book1.txt","r");
        for(i=0;i<100;i++)
        {
            fscanf(fp,"%d",&point[i]);
        }
    fclose(fp);
    
    //計算部分
    //まず平均
    int sum=0;//0で初期化しないと足すときに困る
    for(i=0;i<100;i++)
    {
        sum+=point[i];
    }
    average=sum/100.0;//平均求める(全部足してその個数で割る)
    
    //次に標準偏差
    //まず、平均との差を出す
    double diff[100]={0.0f};
    for(i=0;i<100;i++)
    {
        diff[i]=average-point[i];
    }
    //次に二乗する
    double p[100]={0.0f};
    for(i=0;i<100;i++)
    {
        p[i]=pow(diff[i],2);
    }
    //あとは全部足して、個数で割り、平方根を求める
    sum=0;//相変わらず、0で初期化
    for(i=0;i<100;i++)
    {
        sum+=p[i];
    }
    stdhensa=sqrt(sum/100.0);//標準偏差求まる
    
    //最大値と最小値は簡単(最初の代入を忘れずに)
    for(i=0;i<100;i++)
    {
        if(max<point[i]) max=point[i];//maxより大きければmaxに代入
        if(min>point[i]) min=point[i];//minより小さければminに代入
    }
    
    printf("平均値は%f、標準偏差は%f、最大値は%d、最小値は%d\n",average,stdhensa,max,min);
    
    return 0;
}


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

Name: ルーニー  ..ぴよぴよ(329ポイント)   Date: 2010/07/13(火) 14:38   No:56562     
Title: Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める    
参考になりました。
ありがとうございます。


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

Name: 1EC10XXX   Date: 2010/07/24(土) 14:55   No:563761279950903     
Title: Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める    
上のサンプルプログラムで、プログラムから100個の乱数を発生させるのではなく、
例えば
54
65
78
95



のように特典が記録されたテキストファイルから平均、標準偏差、最大値、最小値を求める方法を教えてください。
平均の分母の数は100ではなくテキストファイルの行数(=サンプルの数)です。
どうかよろしくお願いします。




Name: 田次郎丸  ..ぴよぴよ(27ポイント)   Date: 2010/07/12(月) 23:37   No:56550       
Title: ゲームを作りたい    

こんばんは。

PKゲームをC言語で作りたいと思っているのですが、自分はプログラム初心者で
まだ基本的なことしかわからなくて、困っています。

お願いがあるのですが、PKゲームの参考ソースを作っていただけないでしょうか?

参考にさせてほしいです。

よろしくお願いします。


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


Name: ぬるぽ  ..入門者(2,991ポイント)   Date: 2010/07/13(火) 05:17   No:56551     
Title: Re:ゲームを作りたい    
念のため聞いておきますけど
日数が約2か月経っているので分かりませんが
マルチポストでしょうか?

参考
http://www.google.co.jp/search?hl=ja&rlz=1T4ADBF_jaJP273JP275&q=%EF%BC%B0%EF%BC%AB%E3%82%B2%E3%83%BC%E3%83%A0+C%E8%A8%80%E8%AA%9E&btnG=%E6%A4%9C%E7%B4%A2&aq=f&aqi=&aql=&oq=&gs_rfai=
http://www.google.co.jp/search?hl=ja&rlz=1T4ADBF_jaJP273JP275&q=%EF%BC%B0%EF%BC%AB%E3%82%B2%E3%83%BC%E3%83%A0+DX%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&btnG=%E6%A4%9C%E7%B4%A2&aq=f&aqi=&aql=&oq=&gs_rfai=


http://questionbox.jp.msn.com/qa5852341.html
>DXライブラリとVC++でサッカーゲームのPKを作りたいのですが、
>キーパーとキッカーの立ち位置や移動できる距離、
>ボールの角度、種類など具体的に教えてほしいです!
>是非ともよろしくお願いします! 

http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1738
>DXライブラリとVC++でサッカーゲーム(PK)を作りたいのですが、
>使うべき関数はどんなものがいいですか?
>ボールの蹴れる角度、移動範囲、蹴る種類、キーパーとキッカーの立ち位置、動き方、等。
>よろしくお願いいたします。


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

Name: asd  ..上級者(21,312ポイント)   Date: 2010/07/13(火) 09:47   No:56555     
Title: Re:ゲームを作りたい    
>お願いがあるのですが、PKゲームの参考ソースを作っていただけないでしょうか? 

初心者だから丸投げというのはどうでしょうか。
この先ずっと「初心者だから」を免罪符にしてプログラム製作を他人に任せるつもりじゃないですよね?

初心者であることが分かっているのであれば簡単なところから始めていきませんか?

また初心者とだけ書かれるとプログラムを全く作ったことがない程度の能力なのか、
基本的な文法は理解している程度の能力なのか判断できません。


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



Name: polpol  ..ぴよぴよ(156ポイント)   Date: 2010/07/11(日) 02:55   No:56481       
Title: 画面がすぐ消える    
はじめまして、visualexpress2008でゲームを作ってる
初心者なのですが
現在14歳からはじめるC言語わくわくプログラミングという本を参考
にして作っており、以下のサイトからサンプルをダウンロードしたのですが
cheap4以降が起動してくれません。(ウインドウが起動してすぐ消える)
http://www.rutles.net/download/217/index.html

書かれていることはある程度やったのですがわかりません。。。
初歩的な質問ですがよろしくお願いします


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


Name: へろり  ..上級者(21,371ポイント)   Date: 2010/07/11(日) 06:50   No:56483     
Title: Re:画面がすぐ消える    
"C言語わくわくプログラミング" という書籍を読んだことが無いので推測ですが。


Windowsの場合、CUIプログラムは通常コマンドプロンプトの上で動作します。
そして、プログラムが終了すると同時にコマンドプロンプトも終了します。

これが原因ではないでしょうか。


解決策としては、コマンドプロンプト上から直接コマンドを打ち込むか、コマンドプロンプトに、/k オプションをつけてプログラムのパスを引き渡すか、です。


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

Name: polpol  ..ぴよぴよ(218ポイント)   Date: 2010/07/11(日) 14:21   No:56492     
Title: Re:画面がすぐ消える    
回答ありがとうございます。

cdでファイルがある場所に移動でmain.cppで実行しましたができないようでした。。。
(/kを付けると認識できないコマンドとなりました。)


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

Name: へろり  ..上級者(21,799ポイント)   Date: 2010/07/11(日) 15:00   No:56494     
Title: Re:画面がすぐ消える    
>cdでファイルがある場所に移動でmain.cppで実行しましたができないようでした。。。

main.cpp でというのが今ひとつ解りませんが、実行するのは実行可能ファイルです。
Windowsの場合、一般に.exe という拡張子を持ちます。

>(/kを付けると認識できないコマンドとなりました。)
/k オプションはコマンドプロンプト(多分cmd.exe)そのものに渡すオプションです。
バッチファイルの中ででも、cmd /k hoge.exe とかいう風にしてください。


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

Name: polpol  ..ぴよぴよ(360ポイント)   Date: 2010/07/12(月) 02:24   No:56514     
Title: Re:画面がすぐ消える    
debugというフォルダにchap4.exeがあり
kオプション付きで実行してみましたが同じく
ウインドウ起動→すぐ消えるとなりました・・・



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

Name: ゆーずぃ  ..初心者(6,143ポイント)   Date: 2010/07/12(月) 11:10   No:56521     
Title: Re:画面がすぐ消える    
cdでmain.cppファイルがある場所ではなく、chap4.exeのあるフォルダまで移動してchap4.exeを実行、は、やりました?(オプション無しで構いません。)

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

Name: toyo  ..熟練のプログラマー(54,029ポイント)   Date: 2010/07/12(月) 11:52   No:56526     
Title: Re:画面がすぐ消える    
コンパイル済みをダウンロードしてみました
私のXPではchap4.exeのダブルクリックでちゃんと表示されました


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

Name: ISLe  ..初心者(5,908ポイント)   Date: 2010/07/12(月) 21:21   No:56543     
Title: Re:画面がすぐ消える    
mediaフォルダが無いとかその中のファイルが足りないとウインドウが表示されたあとしばらくして閉じてしまいますね。

それが原因だとするとプロジェクトのフォルダにLog.txtというテキストファイルができているはずです。
メモ帳等で開いて最後に書かれたエラーの原因をチェックしてみましょう。


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

Name: polpol  ..ぴよぴよ(417ポイント)   Date: 2010/07/12(月) 22:00   No:56547 解決!     
Title: Re:画面がすぐ消える    
ISLeさんの言うとうり別デイレクトリにあるmediaフォルダを追加したら解決しました^^
ありがとうございます。


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



Name: ttt  ..ぴよぴよ(823ポイント)   Date: 2010/07/11(日) 17:24   No:56498       
Title: 逆数、絶対値について    
はじめまして。分からないことがあるのでお願いします。
以下のような問題が出されました。
実数値dxの逆数(1/dx)を返す関数invertを作成せよ。
これをサンプルプログラムに追加してnに負の数が入力された場合は
1/(x^|n|)(|n|はnの絶対値)を計算できるよう修正せよ。

サンプルプログラムは
#include <stdio.h>
/*---dxのno乗を返す---*/
double power(double dx,int no)
{
   int  i;
   double  tmp = 1.0;
   for ( i=1; i<= no; i ++ )
     tmp *= dx;
   return (tmp);
}
int main(void)
{
   int        n;
   double   x;
     printf("実数を入力してください:");     scanf("%lf",&x);
     printf("整数を入力してください:");     scanf("%d",&n);
     printf("%.2fの%d乗は%.2fです。\n",x,n,power(x,n));
return(0);
}

という感じです。以下のように作ったのですが…
1/(x^|n|)のところがよくわかりません。絶対値のfabsは使わない指定です。
そもそも考え方もあっているのかよくわからないのでご意見お願いします。


#include <stdio.h>
/*---1/(dx^|no|)を返す---*/
double power(double dx,int no)
{
   int  i;
   double  tmp = 1.0;
   no=-no;
   for ( i=1; i<= no; i ++ )
     tmp *= 1/dx;
   return (tmp);
}

double invert(double dx)
{
   double  tmp;
   tmp = 1/dx;
   return (tmp);
}

int main(void)
{
   int        n;
   double   x;
     printf("実数xを入力してください:");     scanf("%lf",&x);
     printf("整数nを入力してください:");     scanf("%d",&n);
     
     if(n<0){
     printf("1/(x^|n|)は%.2fです。\n",x,power(x,n));
     }
     else
      printf("%.2fの逆数は%.2fです。\n",x,invert(x));
return(0);
編集済み


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


Name: ドラ  ..初心者(6,673ポイント)   Date: 2010/07/11(日) 18:22   No:56500     
Title: Re:逆数、絶対値について    
power関数の第二引数が負値の場合にも対応できるように改造するのではないですか?

考え方としては、まず x^|n| を計算しておいて、
 ・n が0以上ならそのまま返す。
 ・n が負なら(invert関数を呼び出し)逆数にして返す。
という感じでいいと思います。


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

Name: ttt  ..かけだし(1,227ポイント)   Date: 2010/07/11(日) 18:46   No:56502     
Title: Re:逆数、絶対値について    
>>ドラさん
返答有難うございます。

>>考え方としては、まず x^|n| を計算しておいて、 
>> ・n が0以上ならそのまま返す。 
>> ・n が負なら(invert関数を呼び出し)逆数にして返す。 

こういうことでしょうか?
しかしxに2、nに-2を代入しても1/(x^|n|)は2となってしまいます・・・
なぜでしょうか?


#include <stdio.h>

double invert(double dx)
{
   double  tmp;
   tmp = 1/dx;
   return (tmp);
}
double power(double dx,int no) 

   int  i,x;
   double  tmp = 1.0;
   if (no<0) no = -no;
   for ( i=1; i<= no; i ++ ) 
     tmp *= dx;
     if(no>=0)     return (tmp);
     else          return(invert(tmp));
}

int main(void)
{
   int        n;
   double   x;
     printf("実数xを入力してください:");     scanf("%lf",&x);
     printf("整数nを入力してください:");     scanf("%d",&n);
     
     
     
     if(n<0){
     printf("1/(x^|n|)は%.2fです。\n",x,power(x,n));
     }
     else
      printf("%.2fの逆数は%.2fです。\n",x,power(x,n));
return(0);
}


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

Name: box  ..ハッカー(155,772ポイント)   Date: 2010/07/11(日) 19:16   No:56503     
Title: Re:逆数、絶対値について    
3の-2乗のように、負数のべき乗(答えは1/9)を求める場合は、
1)まずは9(3の2乗)を求める
2)9をinvert()に渡して、逆数を求める
3)求めた逆数(1/9)を返す。
という考え方をとります。 編集済み


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

Name: ttt  ..かけだし(1,732ポイント)   Date: 2010/07/11(日) 19:37   No:56504     
Title: Re:逆数、絶対値について    
>>boxさん
返答ありがとうございます。

>>invert()の中で 
>> ・power()を呼び出して、まずは9を求める 
>> ・求めた9の逆数を返す
以下のようでしょうか?

何度も申し訳ありませんが3の-2乗としたら3と出てしまいます。
なにがいけないのでしょうか?

#include <stdio.h>

double power(double dx,int no) 

   int  i;
   double  tmp = 1.0;
   
   for ( i=1; i<= no; i ++ ) 
     tmp *= dx;
     return (tmp);
}

double invert(double dx,int no)
{
   double  tmp;
   tmp = 1/(power(dx,no));
   return (tmp);
}

int main(void)
{
   int        n;
   double   x;
     printf("実数xを入力してください:");     scanf("%lf",&x);
     printf("整数nを入力してください:");     scanf("%d",&n);
     
     
     
     if(n<0){
     printf("1/(x^|n|)は%.2fです。\n",x,invert(x,n));
     }
     else
      printf("%.2fの逆数は%.2fです。\n",x,power(x,n));
return(0);
}


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

Name: ドラ  ..初心者(6,798ポイント)   Date: 2010/07/11(日) 19:38   No:56505     
Title: Re:逆数、絶対値について    
double power(double dx,int no)
{
    int  i,x;
    double  tmp = 1.0;
    if (no<0) no = -no;          // これを実行すると
    for ( i=1; i<= no; i ++ )
        tmp *= dx; 
    if(no>=0)     return (tmp);  // こっちしか返さなくなる
    else          return(invert(tmp)); 
}


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

Name: box  ..ハッカー(155,852ポイント)   Date: 2010/07/11(日) 19:54   No:56506     
Title: Re:逆数、絶対値について    
No.56504におけるinvert関数の実装と、もともとの仕様である

>実数値dxの逆数(1/dx)を返す関数invertを作成せよ。

とが食い違っています。
invert関数の中でpower関数を呼び出す、という仕様ではないはずです。


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

Name: box  ..ハッカー(156,131ポイント)   Date: 2010/07/11(日) 20:17   No:56510     
Title: Re:逆数、絶対値について    
>>>invert()の中で 
>>> ・power()を呼び出して、まずは9を求める 
>>> ・求めた9の逆数を返す 

これは、たぶん、私の56503の編集前の状態を引用されたのだと思いますが、
この時点では、

>実数値dxの逆数(1/dx)を返す関数invertを作成せよ。 

というもともとの仕様を見落としておりました。
現時点での私の見解は、56506で書いたとおりです。


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

Name: ttt  ..かけだし(2,131ポイント)   Date: 2010/07/12(月) 15:44   No:56530     
Title: Re:逆数、絶対値について    
>>ドラさん
>>boxさん
返事遅れて申し訳ないです。親切に有難うございます。一応完成しました。
何度もすみませんが、以下のような感じでよろしいでしょうか?
改善した方がよいところがあればご指摘お願いします。


/*
実数値dxの逆数(1/dx)を返す関数invertを作成。
教科書p.120のプログラムに追加してnに負の数が入力された場合は
1/(x^|n|)(|n|はnの絶対値)を計算できるよう修正せよ。
*/


#include <stdio.h>


double invert(double dx)
{
   double  tmp;
   tmp = 1/dx;
   return (tmp);
}


double power(double dx,int no) 

   int  i;
   double  tmp = 1.0;
   if(no>=0)
   {
   for ( i=1; i<= no; i ++ ) 
     tmp *= dx;
     return (tmp);
     }
    
    else{
    no=-no;
    for ( i=1; i<= no; i ++ ) 
     tmp *= dx;
     return (tmp);
    }
}

int main(void)
{
   int        n;
   double   x,y;
     printf("実数xを入力してください:");     scanf("%lf",&x);
     printf("整数nを入力してください:");     scanf("%d",&n);
     
     
     
     if(n<0){
     y=power(x,n);
     printf("%.2fの%d乗は%.2fです。\n",x,n,invert(y));
     }
     else
      printf("%.2fの%d乗は%.2fです。\n",x,n,power(x,n));
      
return(0);
}


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

Name: box  ..ハッカー(156,139ポイント)   Date: 2010/07/12(月) 21:58   No:56546     
Title: Re:逆数、絶対値について    
power関数の中に、全く同じfor文ループが2個ありますね。
1個にできるはずです。考えてみてください。


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



Name: shiro4ao  ..初心者(6,878ポイント)   Date: 2010/07/12(月) 21:01   No:56542       
Title: エクスプローラーの背景色を変更する方法    
Windows Vistaと7のエクスプローラー(フォルダなどのウィンドウ)の背景を黒くし
たいのですが、うまくいきませんでした。
ここはクライアント領域でもなく、3Dオブジェクト
でもないようなのですが、色を変えることはできますでしょうか?

サードパーティー製のビジュアルスタイルを適用すると背景が黒くできたりしました。
なので不可能ではないようです。


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




Name: 地味な学生  ..ぴよぴよ(257ポイント)   Date: 2010/07/02(金) 12:20   No:55728       
Title: 学校の課題がわからなくて困ってます。    
はじめまして、タイトルのとおり学校の課題がわからなくて困ってます。
自分はC言語が苦手でほとんどわからない状態です。
課題の内容は下に書いたとおりです。

1. 入力された3つの整数を値の大きい順に並び変えよ。
2. 入力された数値まで1から順に表示せよ。(while文とfor文、両パターン作ること)
  例 入力値5→表示1 2 3 4 5
3. 入力された数値から1まで順に表示せよ。(while文とfor文、両パターン作ること)
  例 入力値5→表示5 4 3 2 1
4. 入力された数値まで1から順に足していき、その合計値も表示せよ
  例 入力値5→表示1+2+3+4+5=15
5. 関数y=-x^2+2x+5におけるxとyの対応表を表示せよ。(縦方向)
  ただし(-2<=x<=4)の範囲でxは整数のみとする。
6. 5の課題を今度は横方向で表示せよ。
7. 1+2+3+4…という風に足していき、合計値が10000になる最小の値を求めよ。
8. 1から、入力した数値までの値と、1から、入力した値までの累計した数値の対応表を表示せよ。
9. 入力した値を素因数分解したときの値を全て表示せよ。ただし、入力値は(2以上とする。)
  例 入力値42→表示2 3 7 例2 入力値340→表示2 2 5 17
10. 二つ値を入力し、その二つの最大公約数を求めよ。ただし、ユークリッド互除法で解くこと。

長々と書いてしまってすみません。上にも書いたとおりC言語が苦手なので
皆さんの知恵をお借りしたいと思います。どうか回答のほうよろしくお願いします。


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


Name: シエル  ..上級者(19,824ポイント)   Date: 2010/07/02(金) 12:22   No:55730     
Title: Re:学校の課題がわからなくて困ってます。    
丸投げではなくて、自分はどの辺まで出来るのか、
出来るところまでのコードを提示したほうがいいですよ。


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

Name: 地味な学生  ..ぴよぴよ(486ポイント)   Date: 2010/07/02(金) 12:34   No:55733     
Title: Re:学校の課題がわからなくて困ってます。    
自分ができるのはprintf関数を使って文字や数字を表示するとか
puts関数ぐらいしかまともにできません。
たとえばprintf(%d,123);やputs(こんにちは);←これぐらいしかできません。
ちなみに今学校ではwhile文やfor文をやっているのですがまったくついていけません。
ほとんど無知な私にこの課題が出たので本当にどうしようか悩んでます。
上に書いたとおり自分にはprintf関数やputs関数を書くぐらいがせいぜいです。
なので、この掲示板でわかっている方に教わりたと思います。


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

Name: ookami  ..プログラマー(30,874ポイント)   Date: 2010/07/02(金) 13:28   No:55738     
Title: Re:学校の課題がわからなくて困ってます。    
まず、手元にプログラムを書いて動かす環境はありますか?学校のPCのみですとかだとキビシイので...

また、課題の期限はいつですか?

あと理解度ですが... 例えばこちらのサイトなどでは、何章あたりまで理解できるでしょうか?
http://www.kumei.ne.jp/c_lang/index_c.html


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

Name: 地味な学生  ..ぴよぴよ(347ポイント)   Date: 2010/07/02(金) 16:49   No:55753     
Title: Re:学校の課題がわからなくて困ってます。    
手元にある、C言語を動かす環境はないです。
なので今家のパソコンで.cを作って学校のパソコンで
コンパイルしている状況です。

課題の提出期限は今月の16日までです。

さっきhttp://www.kumei.ne.jp/c_lang/index_c.htmlを見ましたが。
自分に理解できるのは6章ぐらいまでがせいぜいです。

課題は成績に影響するので、絶対に期限までに出したいです。



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

Name: ookami  ..プログラマー(31,849ポイント)   Date: 2010/07/02(金) 17:47   No:55757     
Title: Re:学校の課題がわからなくて困ってます。    
手元にないのは痛いですね...^^;

先に、
http://www.microsoft.com/japan/msdn/vstudio/express/
などから、開発環境をダウンロードするのがいいと思います。Express Edition は無料です。
できれば学校のコンパイル環境と同じなのが望ましいです。

ともかく自分で動かしてみながら理解を深めていかないと、
掲示板のやり取りだけでは
「まずは自分で動かしてみましょう」とか言われかねません。

かといって、学校のみでは16日に間に合わない可能性が。

こちらの掲示板のほとんどの方は、
直接答えを示したり「これコンパイルしたら動くから」ということは
していませんので、かなりの部分を自助努力で埋めないといけないと思います。

というのもあって、手元にコンパイル環境は必須と思います。


> 自分に理解できるのは6章ぐらいまで
少々乱暴な言い方かもしれませんが...えぇと...「頭では」理解している、ということですよね。
実際、最初に示された
> printf(%d,123);やputs(こんにちは);
は動かないのです。"(ダブルクォーテーション)が無いので...。

こういったことも、実際にコンパイルしてみないと、実感としては分からなかったと思います。
というのもあって、手元にコンパイル環境は必須と思います。(繰り返しw ちょw


--

とはいえ、これでは「丸投げ返し」なので...どうしましょう。
まずは手始めに、
> 1. 入力された3つの整数を値の大きい順に並び変えよ。
から、おおまかな流れを示そうかと思ったのですが、

...「1」より「2」の方が簡単そうですね...

# 「1」はいきなり配列がいりますもんね... あえて使わずにやるのか...?
# 「2」は入力とforループだけで済むので...。

http://www.kumei.ne.jp/c_lang/intro/no_06.htm
を参考に数値を入力して、

http://www.kumei.ne.jp/c_lang/intro/no_13.htm
http://www.kumei.ne.jp/c_lang/intro/no_14.htm
を参考に while バージョン、forバージョンを作るのが、まずはいいと思います。


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

Name: パコネコ  ..初心者(5,188ポイント)   Date: 2010/07/02(金) 20:07   No:55767     
Title: Re:学校の課題がわからなくて困ってます。    
質問いいですか?
1〜9まではだいたいプログラム浮かぶんですが、ユークリッド互除法というものが何なのか?知りません。もしくは忘れました。
もしかしたら検定試験の勉強のときに学んだかもしれませんが思い出せません、どんなものだったでしょうか?
そんなに詳しく出なくてもいいので教えてくれませんか?


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

Name: パコネコ  ..初心者(5,400ポイント)   Date: 2010/07/02(金) 20:22   No:55768     
Title: Re:学校の課題がわからなくて困ってます。    
1〜3ってソートですよね。
特に何ソートを使えとは、なかったんですか?
基本ソートでいいのかな?
ちなみに基本ソートとは
比べるデータが4つのとき
1つ目と2つ目を比べる
1つ目と3つ目を比べる
1つ目と4つ目を比べる
    ↓
2つ目と3つ目を比べる
2つ目と4つ目を比べる
    ↓
3つ目と4つ目を比べる
という感じに比べていく方法です
ちなみに入れ替えはできますか?もしくはやったことありますか?
======================
ついで(暇)なのでバブルソートも書いときます
3と4を比べる
2と3を比べる
1と2を比べる
  ↓
3と4を比べる
2と3を比べる
  ↓
3と4を比べる
イメージは下から上へ持ち上げる感じです。
比べるというのは正確には、
比べた後に入れ替えるという意味です。


 編集済み


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

Name: dic  ..比類無きプログラマー(82,200ポイント)   Date: 2010/07/02(金) 21:09   No:55774     
Title: Re:学校の課題がわからなくて困ってます。    
1問もできないとなると
そうとうやばいかと


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

Name: パコネコ  ..初心者(5,584ポイント)   Date: 2010/07/02(金) 21:15   No:55778     
Title: Re:学校の課題がわからなくて困ってます。    
まずはforからですかね。
ついでにwhileもないと問題解けませんし…
ここの主さんがいつこれるのかということで、時間が足りるか変わってきますね。


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

Name: シエル  ..上級者(19,973ポイント)   Date: 2010/07/02(金) 21:15   No:55779     
Title: Re:学校の課題がわからなくて困ってます。    
まず一つずつやっていきましょう。

三つの数字を入力できるようにするコードは書けますか?


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

Name: パコネコ  ..初心者(5,609ポイント)   Date: 2010/07/02(金) 21:57   No:55783     
Title: Re:学校の課題がわからなくて困ってます。    
最初の投稿からみると、お昼に来そうですね。
明日ワイこれないのが、残念


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

Name: ookami  ..プログラマー(32,888ポイント)   Date: 2010/07/02(金) 23:43   No:55792     
Title: Re:学校の課題がわからなくて困ってます。    
とりあえず、「ユークリッドの互除法」でググってみると、wikipedia先生が応答しました。
http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E4%BA%92%E9%99%A4%E6%B3%95
とにかく剰余を求め続けるだけで最大公約数が出るという、初見はビックリなアルゴリズムですね。


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

Name: シエル  ..上級者(20,325ポイント)   Date: 2010/07/02(金) 23:51   No:55793     
Title: Re:学校の課題がわからなくて困ってます。    
へぇ〜ていうアルゴリズムですけど、使えない気がする…

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

Name: パコネコ  ..初心者(5,737ポイント)   Date: 2010/07/03(土) 00:28   No:55794     
Title: Re:学校の課題がわからなくて困ってます。    
なるほど…これは知らなかったですね。
プログラムにするならサブルーチン?違いますねwhile文のほうが簡単そうですね。
宿題に出るくらいだから習ってるんでしょうが、知らなきゃ絶対無理でしょ…
主さん、プログラム的には簡単そうだからがんばってください


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

Name: パコネコ  ..初心者(6,266ポイント)   Date: 2010/07/03(土) 01:14   No:55797     
Title: Re:学校の課題がわからなくて困ってます。    
暇なのでそれぞれのヒントを書いとこうと思います。

>1. 入力された3つの整数を値の大きい順に並び変えよ。 
 scanf if (while || for)使わなくても可 構造体(使わなくても可)
>2. 入力された数値まで1から順に表示せよ。(while文とfor文、両パターン作ること) 
  例 入力値5→表示1 2 3 4 5 
 scanf if (for || while)どっちかというかどっちも可
>3. 入力された数値から1まで順に表示せよ。(while文とfor文、両パターン作ること) 
  例 入力値5→表示5 4 3 2 1 
 2と同じ
>4. 入力された数値まで1から順に足していき、その合計値も表示せよ 
  例 入力値5→表示1+2+3+4+5=15 
 2と同じ 変数が一つ増える
>5. 関数y=-x^2+2x+5におけるxとyの対応表を表示せよ。(縦方向) 
  ただし(-2<=x<=4)の範囲でxは整数のみとする。 
 for文(お勧め初期値を-2で終了条件は4にすればできる)
>6. 5の課題を今度は横方向で表示せよ。 
 printfの使い方次第
 改行の場所とか
 いまいち理解できないけど…
>7. 1+2+3+4…という風に足していき、合計値が10000になる最小の値を求めよ。 
 while文で合計用の変数を準備
>8. 1から、入力した数値までの値と、1から、入力した値までの累計した数値の対応表を表示せよ。 
 合計を出しながらprintf文で描写する。
>9. 入力した値を素因数分解したときの値を全て表示せよ。ただし、入力値は(2以上とする。) 
  例 入力値42→表示2 3 7 例2 入力値340→表示2 2 5 17 
 while %で余りを出すのを条件に使います。
>10. 二つ値を入力し、その二つの最大公約数を求めよ。ただし、ユークリッド互除法で解くこと。 
 whileかな? ユークリッド互換法みてきてください。
使うと思われるものを書いてみました。
途中で飽きたのは秘密です。
ではまた明日
===========
いまさらですが(7月5日)その場でバーっと書いてしまったので、不適切な場所があるかもしれません。(多分ある)
こっちのほうがいいという案(ヒント)があったら、書いておいてください。
書き方がかなり雑で見ずらいですし…お手数掛けます 編集済み


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

Name: しろ  ..ぴよぴよ(67ポイント)   Date: 2010/07/03(土) 04:13   No:55802     
Title: Re:学校の課題がわからなくて困ってます。    
ユークリッドの互除法は初等整数論においてきわめて重要なアルゴリズムだと思います。特に一次の不定方程式を議論する際にはかかせません。

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

Name: パコネコ  ..初心者(6,413ポイント)   Date: 2010/07/03(土) 17:29   No:55830     
Title: Re:学校の課題がわからなくて困ってます。    
地味な学生さんいつ頃これるんだろ…お昼くらいだと思ってたのに…予想外れた
夜にはのぞいていくかな?


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

Name: たかぎ [URL]  ..ハッカー(213,782ポイント)   Date: 2010/07/03(土) 17:43   No:55832     
Title: Re:学校の課題がわからなくて困ってます。    
> 地味な学生さんいつ頃これるんだろ…お昼くらいだと思ってたのに…予想外れた 

もういいのでは?
あるいは、どこかでマルチポストしているとか...



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

Name: パコネコ  ..初心者(7,422ポイント)   Date: 2010/07/04(日) 21:20   No:55954     
Title: Re:学校の課題がわからなくて困ってます。    
何気に2週間ぐらい期限がありますしね。
前から気になっていたのですが、マルチポストってなんですか?
他の場所でも聞いている、という意味ですか?
============
マルチポスト書いてましたね。

 編集済み


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

Name: 地味な学生  ..ぴよぴよ(604ポイント)   Date: 2010/07/05(月) 09:23   No:55992     
Title: Re:学校の課題がわからなくて困ってます。    
皆さん返信ありがとうございます。
土曜日と日曜日に企業研修に行ってたため返信することができなくてすみませんでした。

パコネコさんscanf ifってどういう関数ですか?学校でまだ習ってないので教えてくれませんか?
ちなみに今まで学校で習ったのは「printf puts putchar scanf while文 for文 do文 if文」のみです。
課題に関しては、ちゃんと動くプログラムができていれば
今まで習ってきた関数でないものを使っても、どんなプログラムを組んでもいいそうです。
そのscanf ifというのを使って簡単にプログラムが組めるようならチャレンジしてみようと思います。
今後の勉強にもなりますしね。


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

Name: fatens  ..上級者(15,291ポイント)   Date: 2010/07/05(月) 09:32   No:55993     
Title: Re:学校の課題がわからなくて困ってます。    
>scanf ifってどういう関数ですか?

scanf 関数とif 文です。


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

Name: 地味な学生  ..ぴよぴよ(648ポイント)   Date: 2010/07/05(月) 09:56   No:55996     
Title: Re:学校の課題がわからなくて困ってます。    
>scanf 関数とif 文です。 
つまりscanfとif文、両方を使うという解釈でいいのですか?
それともscanf ifというものが存在するのでしょうか?


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

Name: fatens  ..上級者(15,307ポイント)   Date: 2010/07/05(月) 10:17   No:55998     
Title: Re:学校の課題がわからなくて困ってます。    
>つまりscanfとif文、両方を使うという解釈でいいのですか? 

こっちです。
課題1の場合、3つの数値の入力にscanf 関数を使い、大きい順という比較にif 文を使います。


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

Name: だいちゃん  ..ぴよぴよ(369ポイント)   Date: 2010/07/05(月) 10:39   No:55999     
Title: Re:学校の課題がわからなくて困ってます。    
>地味な学生さん

とりあえず言葉のやりとりばっかで全然コードが出てこないので
アドバイスがしにくいです
どこまで分かっているのかがまだ見えてきません
課題の1番を出来るところまでコードにしてみませんか?

@3つの数字を入力させる(scanf)
A比較を行う(if)
B表示する(printf)

基本的にこれだけですが
どこでつまずきますか?
コンパイルが失敗しても構いません
実行結果がおかしくなっても構いません
とりあえず今の時点で出来るとこまでのコードを書いてみて載せてください


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

Name: 地味な学生  ..ぴよぴよ(778ポイント)   Date: 2010/07/05(月) 12:49   No:56004     
Title: Re:学校の課題がわからなくて困ってます。    
なるほど、数字の入力はscanf関数を使って入力し、
比較にはif文を使ってプログラムするといいのですね。

if文はどのように組むといいですか?
比較対象が三つありますからifとelseだけじゃ足りませんよね。
どうすればいいんでしょうか。


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

Name: へろり  ..上級者(17,486ポイント)   Date: 2010/07/05(月) 14:26   No:56010     
Title: Re:学校の課題がわからなくて困ってます。    
>if文はどのように組むといいですか? 
>比較対象が三つありますからifとelseだけじゃ足りませんよね。


else は次に続く文を実行しますから、

if(...){
}else if(...){
}else if(...){
}

って続けて書いても大丈夫です。


1000個でも2000個でもどんと来いです。


分かりにくければ、
if(...){
}else{
    if(...){
    }else{
        if(...){
        }
    }
}

て、しちゃえばいいです。 お勧めはしませんが。
この場合は1000個は無理です。


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

Name: パコネコ  ..初心者(8,580ポイント)   Date: 2010/07/05(月) 16:00   No:56014     
Title: Re:学校の課題がわからなくて困ってます。    
なんか説明不足ですいませんでした。
勝手にわかるかな〜とか思ってしまいました。
ちゃんと「〜文」と書かないとだめですね。
3個を比べるのも100個比べるのも同じです。
たとえば…例を書きますね。(小さいものを上に置くとします)

宣言より上は、はしょります。
for(a=0;a<n-1;a++){//n個の場合
 for(b=a+1;b<n;b++){
  if(x[a]>x[b]){//x[a]よりx[b]のほうが小さいとき
   //入れ替え
   c=x[a];
   x[a]=x[b];
   x[b]=c;
  }
 }
}
/*
ちなみに基本ソートとは 
比べるデータが4つのとき 
1つ目と2つ目を比べる 
1つ目と3つ目を比べる 
1つ目と4つ目を比べる 
    ↓ 
2つ目と3つ目を比べる 
2つ目と4つ目を比べる 
    ↓ 
3つ目と4つ目を比べる 
*/
これで基本ソートができます。
100個でもとか言っちゃったからx[n]使ってます。
書きすぎたかな?
================
前ヒントのとこで構造体と書いたのはミスです。
配列と間違えました(名前間違えた)。すいません
配列はわかりますか? 編集済み


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

Name: だいちゃん  ..ぴよぴよ(276ポイント)   Date: 2010/07/05(月) 16:36   No:56017     
Title: Re:学校の課題がわからなくて困ってます。    
まだ課題1ですよね今・・・

このペースだと全部解決するまでに
何回質疑応答を繰り返せばいいのか・・・

if文とか根本的にわかんないならとりあえず調べてからのほうがいいのでは?
googleで「C言語 if」とか調べればいくらでも出てきますから
1個1個ここで聞いてたら時間がいくらあっても足りませんよ


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

Name: パコネコ  ..初心者(8,644ポイント)   Date: 2010/07/05(月) 16:44   No:56019     
Title: Re:学校の課題がわからなくて困ってます。    
終わらそうと思えば1日で終わる気もしますが…やっぱり一つ一つの関数が理解できてからやるほうが断然早いですね。
基本的に前の問題を改造して作れ的なものが何個かあるので、問題数も少し少なく見てもいいと思う。


Name: 地味な学生  ..かけだし(1,042ポイント)   Date: 2010/07/05(月) 18:10   No:56021     
Title: Re:学校の課題がわからなくて困ってます。    
皆さんのアドバイスをもとに自分なりに作ってみました。

#include <stdio.h>

int main(void)
{
    int a, b, c;

    printf("Input,please:");    scanf("%d",&a);
    printf("Input,please:");    scanf("%d",&b);
    printf("Input,please:");    scanf("%d",&c);

    if(a > b&&b > c)
    printf("%d %d %d", a, b, c);
    else if(a > c&&c > b)
    printf("%d %d %d", a, c, b);
    else if(b > a&&a > c)
    printf("%d %d %d", b, a, c);
    else if(b > c&&c > a)
    printf("%d %d %d", b, c, a);
    else if(c > a&&a > b)
    printf("%d %d %d", c, a, b);
    else
    printf("%d %d %d", c, b, a);

    return(0);
}


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

Name: ookami  ..プログラマー(33,374ポイント)   Date: 2010/07/05(月) 18:16   No:56024     
Title: Re:学校の課題がわからなくて困ってます。    
取り急ぎ、気になった点のみ…
2 2 1などの場合、正しく動きますか?


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

Name: パコネコ  ..初心者(8,988ポイント)   Date: 2010/07/05(月) 18:40   No:56025     
Title: Re:学校の課題がわからなくて困ってます。    
>1. 入力された3つの整数を値の大きい順に並び変えよ
大きい順に描写せよならそれでもいいかもしれませんが…並び変えたほうがいいですよ。
並び変え方は
AとBを並び替える場合
関係ないものCに一旦収納する感じですが…プログラム的には
C=A;//Aの値をCに避難
A=B;//AにBの値を入れる(Aの値は塗りつぶされる)
B=C;//BにC(もともとのA)を入れる
になります。
覚えておくと便利。
=====================
これは並び替え方ではなく入れ替え方です。
並び替えるならソート機能を作って入れ替えを何度も行うといいです。 編集済み


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

Name: ookami  ..プログラマー(33,459ポイント)   Date: 2010/07/05(月) 18:45   No:56026     
Title: Re:学校の課題がわからなくて困ってます。    
そう、そこは私も気になってるんですよ。
ただ、パコネコさんのおっしゃるように「ソート」だと、
10問のうち1だけ妙に難易度高い気がするんですよね。

学生さん、問題に詳しく指定はありませんでしたか?
配列を使えだとか、
ソートするだとか。
逆に使わなくてよいだとか。


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

Name: パコネコ  ..中級者(9,117ポイント)   Date: 2010/07/05(月) 19:02   No:56027     
Title: Re:学校の課題がわからなくて困ってます。    
じゃもっと簡単なソートもどきでも使います?
一個目入力
二個目入力
1個目と2個目を比較して大きいほうをmaxに小さいほうをminに
3個目入力maxより大きければmaxをnormaruに入れて3個目をmaxへ
違うならminと比較minより小さければminをnormaruに入れて3個目をminへ
それも違うならnormaruへ
配列使うならmaxとかをx[0〜2]にすればいい
まだ簡単にはなった。
if文とscanf文しか使ってないし、後は描写だけ
他より難しいと言われても、2と3は確認問題みたいな感じですし…for文とwhile文の
=================
一応プログラムだと
scanf("%d",&a);
scanf("%d",&b);
//大きいほうをmaxへ、小さいほうをminへ
if(a<b){
 max=b;
 min=a;
}else{
 max=a;
 min=b;
}
scanf("%d",&c);
//cを入れる場所判定
if(max<c){
 normaru=max;
 max=c;
}
else if(c<min){
 normaru=min;
 min=c;
}
else normaru=c;
描写は書いてません 編集済み


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

Name: 地味な学生  ..かけだし(1,176ポイント)   Date: 2010/07/05(月) 21:40   No:56037     
Title: Re:学校の課題がわからなくて困ってます。    
パコネコさん、ソートという大変便利な方法を教えてくださってありがとうございます。
確かにif文を使って作ろうとすると、入力する回数分の
ifやelse ifを作らなくてはいけないので大変ですよね。
問1は片付きました。

問2と問3はwhile文 for文を使って解くのらしいですが、この二つの文はどう違のですか。
解き方のヒントとして先生が言うにはインクルメント?とかいうことをするのらしいですが
これってどのようにすればいいんでしょうか。

初歩的な質問ですみません。


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

Name: パコネコ  ..中級者(9,606ポイント)   Date: 2010/07/05(月) 21:57   No:56041     
Title: Re:学校の課題がわからなくて困ってます。    
</font>インクルメントは知らないですが…
同じことをやってみます。
for(a=0;a<n;a++){
;
}
a=0;
while(a<n){
 a++;
}


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

Name: fatens  ..上級者(15,534ポイント)   Date: 2010/07/05(月) 22:00   No:56043     
Title: Re:学校の課題がわからなくて困ってます。    
>問2と問3はwhile文 for文を使って解くのらしいですが、この二つの文はどう違のですか。

for (式1; 式2; 式3) {
    ...
}



式1;
while (式2) {
    ...
    式3;
}

という関係にあります。
一部動作の異なる点もあるのですが、今回は気にしなくて良いでしょう。


>解き方のヒントとして先生が言うにはインクルメント?とかいうことをするのらしいですが

インクリメントは1ずつ増やしていくことで、反対に1ずつ減らしていくことをデクリメントといいます。


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

Name: 地味な学生  ..かけだし(1,437ポイント)   Date: 2010/07/05(月) 22:49   No:56056     
Title: Re:学校の課題がわからなくて困ってます。    
返信ありがとうございます。
インクルメントではなくてインクリメントでしたか。
問2、問3は数字を1ずつ増やしていき、(もうひとつの問題のほうは減らしていき)
それを全て表示するようなプログラムを組めばいいのですね。

解説を見てると、数式が入る位置以外は全て同じなんですよね?

このwhile文 for文は一体どのように動くのでしょうか。
数字を1ずつ足していくのはインクリメント、
数字を1ずつ減らしていくのはデクリメントですね。

これを使えばすぐにできそうな気がするのですが、このwhile文やfor文は
どのように扱えばいいのでしょうか。


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

Name: 組木紙織  ..比類無きプログラマー(88,277ポイント)   Date: 2010/07/05(月) 22:55   No:56058     
Title: Re:学校の課題がわからなくて困ってます。    
地味な学生さんへ。

入門書か入門サイト手元にありますか?

掲示板で聞くべきでない
(聞くよりも自分で調べたほうが早くかたづくand理解できるという意味で)
質問を良くしているような気がしています。

コンパイラはもう手元にありますよね?
聞くよりも先(or聞いてからすぐ)に試してみたらどうですか?
その方が短時間で完成させれるし、身に着くはずです。


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

Name: パコネコ  ..中級者(10,240ポイント)   Date: 2010/07/05(月) 23:33   No:56064     
Title: Re:学校の課題がわからなくて困ってます。    
仕方ないので問2を考えてみましょう(3は自分で…)
for文の場合
for(a=0;a<n;a++){
 printf("%d \n",a);
}
while文
a=0;
while(a<n){
 printf("%d",a);
 a++;
}
こんな感じですかね…理解できないところは聞いてください。
それで3をやってみてください
 


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

Name: fatens  ..上級者(15,570ポイント)   Date: 2010/07/06(火) 00:13   No:56077     
Title: Re:学校の課題がわからなくて困ってます。    
>パコネコさん

1から入力された数値までなので、a = 1, a <= n です。


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

Name: パコネコ  ..中級者(10,401ポイント)   Date: 2010/07/06(火) 00:16   No:56078     
Title: Re:学校の課題がわからなくて困ってます。    
あ、ほんとですね。
無駄ですが
printf("%d",a+1);
にしてあがいてみます。


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

Name: fatens  ..上級者(15,639ポイント)   Date: 2010/07/06(火) 00:30   No:56081     
Title: Re:学校の課題がわからなくて困ってます。    
まあそれはともかく。

課題7ですが、10000ジャストにはならないと思いますが、問題文は正しいですか。
最小の値というのは10000を超えたときの最小の値ということなのでしょうか?


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

Name: パコネコ  ..中級者(10,547ポイント)   Date: 2010/07/06(火) 00:39   No:56087     
Title: Re:学校の課題がわからなくて困ってます。    
/*
課題7ですが、10000ジャストにはならないと思いますが、問題文は正しいですか。 
最小の値というのは10000を超えたときの最小の値ということなのでしょうか?
*/
多分下じゃないですか?似たようなの見たことあるし…まあ主さんに聞かないとわかりませんが…


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

Name: 地味な学生  ..かけだし(1,557ポイント)   Date: 2010/07/06(火) 18:41   No:56145     
Title: Re:学校の課題がわからなくて困ってます。    
課題7は1+2+3+4+5+6…と足していき、累計が10000を超えるときの数字を求めるらしいです。
表現がわかりにくかったかもしれませんね。

課題2のfor文はこんな感じで作ってみたのですがどうでしょうか。

#include <stdio.h> 

int main(void) 

    int a, b; 

    printf("Input,please:");    scanf("%d",&a);
 
    for(b=1;a>b;b++)   
    printf("%d\n",b); 

    return(0); 


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

Name: fatens  ..上級者(16,042ポイント)   Date: 2010/07/06(火) 18:47   No:56147     
Title: Re:学校の課題がわからなくて困ってます。    
>課題7は1+2+3+4+5+6…と足していき、累計が10000を超えるときの数字を求めるらしいです。 

了解です。


>課題2のfor文はこんな感じで作ってみたのですがどうでしょうか。 

実行してみましたか?
入力された数値、すなわちaの値も出力しなければなりません。


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

Name: 地味な学生  ..かけだし(1,622ポイント)   Date: 2010/07/06(火) 19:04   No:56151     
Title: Re:学校の課題がわからなくて困ってます。    
すみません、自宅のパソコンではコンパイルできないので
学校でするしかないんです。
上の自分で作ったプログラムはちゃんとできてますかね?
入力された数字までbを1づつ増やしていき、
aになったら処理をやめる。というイメージで作ったのですが


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

Name: ROM  ..入門者(3,006ポイント)   Date: 2010/07/06(火) 19:16   No:56154     
Title: Re:学校の課題がわからなくて困ってます。    
C言語の勉強は自分のPCにコンパイラを導入する所から始まります。
コンパイラ無しにプログラムを勉強しようなど、学校にノート無しで勉強に行くようなものです。

まずはインストールしましょう。
http://www.microsoft.com/japan/msdn/vstudio/express/


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

Name: シエル  ..プログラマー(25,969ポイント)   Date: 2010/07/06(火) 19:18   No:56155     
Title: Re:学校の課題がわからなくて困ってます。    
無料のコンパイラをインストールして、
自分で作ったプログラムをまず実行して、エラーが出たところをここで聞く、
というような流れにしたほうが、効率が良くて、理解も深まると思われますが。
って、もう他の方が同じこと言ってましたね。。。


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

Name: パコネコ  ..中級者(10,387ポイント)   Date: 2010/07/06(火) 20:18   No:56158     
Title: Re:学校の課題がわからなくて困ってます。    
一応起動してみた…(スタディC)
>   printf("%d\n",b);
ここのスペースが大文字だって怒られた…直して起動
Input,please:4
1
2
3
という実行結果になった。
自分でできたほうが早いんですが…今すぐでなくてもそのうち入れたほうがいいと思います。
================
お、123ポイント
本当なら1234と出力されないといけないんですよね。
あ、4と入力した場合ですよ…
どこが間違ってたか、わかりますか?
 編集済み


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

Name: 地味な学生  ..かけだし(1,514ポイント)   Date: 2010/07/06(火) 20:45   No:56160     
Title: Re:学校の課題がわからなくて困ってます。    
間違っているようなので訂正しました。

#include <stdio.h>  

int main(void)  
{  
    int a, b;  

    printf("Input,please:");    scanf("%d",&a); 
  
    for(b=1;(a+1)>b;b++)    
    printf("%d\n",b);  

    return(0);  



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

Name: パコネコ  ..中級者(10,437ポイント)   Date: 2010/07/06(火) 20:50   No:56161     
Title: Re:学校の課題がわからなくて困ってます。    
確認しました。
Input,please:5
1
2
3
4
5
となりました。


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

Name: 地味な学生  ..かけだし(1,603ポイント)   Date: 2010/07/06(火) 21:13   No:56164     
Title: Re:学校の課題がわからなくて困ってます。    
パコネコさん確認ありがとうございます。

課題3のfor文はさっきのを応用すれば出来そうなので作ってみました。

#include <stdio.h>   

int main(void)   
{
    int a, b;   

    printf("Input,please:");    scanf("%d",&a);  
   
    for(b=0;a>b;a--)     
    printf("%d\n",a);   

    return(0);   
}


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

Name: パコネコ  ..中級者(10,449ポイント)   Date: 2010/07/06(火) 21:27   No:56165     
Title: Re:学校の課題がわからなくて困ってます。    
Input,please:5
5
4
3
2
1

となりました。
多分できていると思います。


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

Name: ookami  ..プログラマー(34,008ポイント)   Date: 2010/07/07(水) 10:22   No:56199     
Title: Re:学校の課題がわからなくて困ってます。    
私からの指摘は全て無視されているようですね。
No. 55757, 56024, 56026

コンパイラもまだないようですし。
問1 で結局ソートにしたのかどうか...
2 2 1 など 同じ数字が出てきた場合に対応できたのか...
まったく返事がありません。

学生さん、他の方もおっしゃっていますが、
まずは自分で調べたり、コンパイルして実行して試すのがスジです。
それもしないで

> 課題は成績に影響するので、絶対に期限までに出したいです。

というのは、おかしな話です。


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

Name: 組木紙織  ..比類無きプログラマー(88,369ポイント)   Date: 2010/07/07(水) 11:12   No:56201     
Title: Re:学校の課題がわからなくて困ってます。    
コンパイラを導入できないのなら理由を書いてください。
そうすれば(多分)対処法のアドバスができます。

現状できる状態なのにやってないとしか思われないです。






#個人的にはパコネコさんの対応は甘やかしすぎだと思っています。



//追記
問題に関係することを一切書いてないので、一つだけ答えを書いときます。
問いの7です。
理由を聞かれたら自分で担当の先生に説明をしてくださいね。

printf("141\n"); 編集済み


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

Name: シエル  ..プログラマー(26,521ポイント)   Date: 2010/07/07(水) 11:26   No:56202     
Title: Re:学校の課題がわからなくて困ってます。    
今後のためにもコンパイラをインストールしておくべきです。
今回の課題が解決したとしても、次の課題が出たときにまた
このようなやりとりで対応するつもりですか?

自分で書いたコードを掲示板に貼り付けて、コンパイルまでお願いするなんて
普通じゃあまり考えられないでしょう。
そんなに親切なのはここの掲示板ぐらいです。


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

Name: 地味な学生  ..かけだし(1,721ポイント)   Date: 2010/07/07(水) 15:04   No:56215     
Title: Re:学校の課題がわからなくて困ってます。    
ookamiさん コンパイラは入れたいのですが
パソコンのインターネット接続がダイヤルアップ回線で速度が
遅いのでダウンロードに非常に時間がかかる上、
少しでも通信が切れようものならそこでフリーズしてしまいます。

ですのでコンパイラをダウンロードするのはほぼ不可能です。すみません。





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

Name: ookami  ..プログラマー(34,304ポイント)   Date: 2010/07/07(水) 16:07   No:56218     
Title: Re:学校の課題がわからなくて困ってます。    
そうなんですか。
とりあえず、他の方にも返事した方がよいと思いますよ。


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

Name: 地味な学生  ..かけだし(1,882ポイント)   Date: 2010/07/07(水) 16:53   No:56221     
Title: Re:学校の課題がわからなくて困ってます。    
今までに回答してくださった皆さん。
自分の今の環境を詳しく伝えなかったため誤解している方がいるようですね。すみませんでした。

No:56215 に書いたとおり自分はコンパイルできないような状態なので、
ちゃんとプログラムが出来ているのか確認が出来ません。
ですのでみなさんに手伝わせたり確認させてしまうようなことが
あるかもしれませんがその点は寛容にみてください。


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

Name: たかぎ [URL]  ..ハッカー(214,730ポイント)   Date: 2010/07/07(水) 17:04   No:56223     
Title: Re:学校の課題がわからなくて困ってます。    
> ですのでコンパイラをダウンロードするのはほぼ不可能です。すみません。 

Visual C++のような大きな開発ツールをダウンロードしようとするからです。
もっと軽量のものを使うか、書籍に付属の物を使うなど、いろいろ工夫できるはずです。


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

Name: 地味な学生  ..かけだし(1,992ポイント)   Date: 2010/07/07(水) 17:06   No:56224     
Title: Re:学校の課題がわからなくて困ってます。    
課題4をやってみました


#include <stdio.h>   

int main(void)   
{
    int a, b, total;   

    printf("Input,please:");    scanf("%d",&a); 

  total=0
   
    for(b=1;(a+1)>b;b++) 
  {
    printf("%d +",b);
    total+b;
  }

    printf("%d", total);

    return(0);   
}


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

Name: ぽこ  ..上級者(19,235ポイント)   Date: 2010/07/07(水) 18:02   No:56226     
Title: Re:学校の課題がわからなくて困ってます。    
> No:56215 に書いたとおり自分はコンパイルできないような状態なので、

学校でダウンロードして、USBメモリかCD-Rで家まで運んでみては?
このやりとりに限らず、今後自宅に開発環境が無いことは問題ですよ。


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

Name: ISLe  ..入門者(4,297ポイント)   Date: 2010/07/07(水) 18:38   No:56228     
Title: Re:学校の課題がわからなくて困ってます。    
インストールしなくても使えます。

http://ideone.com/hajtC

#入力がエコーバックされないけどブラウザ経由だから仕方ない。


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

Name: シエル  ..プログラマー(26,867ポイント)   Date: 2010/07/07(水) 18:56   No:56230     
Title: Re:学校の課題がわからなくて困ってます。    
もっとサイズが軽いコンパイラなら探せばあるし、
他の場所で落としてきて、何かの媒体に移して運ぶことぐらいはできると思いますが…


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

Name: パコネコ  ..中級者(10,736ポイント)   Date: 2010/07/07(水) 19:44   No:56234     
Title: Re:学校の課題がわからなくて困ってます。    
>#個人的にはパコネコさんの対応は甘やかしすぎだと思っています。 
なんか、すいませんでした。
私も入れるまでは、学校でしかできなかったときにプログラム作れなくて
困ったことがあったので、そして課題の提出期限もありましたから。
>他の場所で落としてきて、何かの媒体に移して運ぶことぐらいはできると思いますが…
媒体で運べたんですか?
知らなかった…いいこと知りました。

課題で点数に関係するとあったので、真剣に考えていたつもりだったのですが、甘やかしすぎているようにとられてしまったようです。
===================

やっぱりコンパイラ入れるまで、待ってから質問に答えるべきでしたでしょうか?

文章が変なので
少し書き換えました。
まだ変な気がしますが…
 編集済み


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

Name: ookami  ..プログラマー(34,343ポイント)   Date: 2010/07/07(水) 20:21   No:56239     
Title: Re:学校の課題がわからなくて困ってます。    
# パコネコさん

私は、パコネコさんが甘やかしすぎかどうかではなく、

そんなやり方より自分でコンパイルして確認した方が
早いでしょと。その点だけですね。

パコネコさんが「コンパイラの導入はこの質問者さんには
難しいだろうから」と思っての事ならまぁ。
でも「学校ではコンパイルできる」との事ですからねぇ。
私はコンパイル代行までする気にはなれないです。

> 媒体で運べたんですか?

いわゆる「ウェブインストーラー」は、オフラインでは意味ないですけども^^;
容量的に媒体に入りさえすれば運べますね。最近は媒体も安くなりましたし。


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

Name: パコネコ  ..中級者(10,900ポイント)   Date: 2010/07/07(水) 20:32   No:56240     
Title: Re:学校の課題がわからなくて困ってます。    
>私はコンパイル代行までする気にはなれないです。

人の問題をみてるのが楽しかったから…

>そんなやり方より自分でコンパイルして確認した方が 
早いでしょと。その点だけですね。 

確かにそのほうが早いかもしれませんし、理解も深まるかも知れません。
私のせいで主さんが、コンパイラ入れるのが遅くなってしまっていたのかもしれません。
主さん、皆さん、すいませんでした。
今回のことは、よく覚えておきます。


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

Name: たすけてぇ><;  ..ぴよぴよ(36ポイント)   Date: 2010/07/07(水) 21:15   No:56242     
Title: Re:学校の課題がわからなくて困ってます。    
どうもこんばんわです><;
学校の課題を教えて頂けるということで来たのですが、画像の問題をどうやって解くのか教えて貰えませんでしょうか?
よろしくお願いします<(_ _)>


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

Name: パコネコ  ..中級者(10,986ポイント)   Date: 2010/07/07(水) 21:22   No:56243     
Title: Re:学校の課題がわからなくて困ってます。    
これはちょっと…自分でやったものとかがないと…
利用規約?とか言うの読んでくださいと多分書かれると思いますけど…
どこがわからないですか?
そして利用規約にあるように書き込んでもらってもいいですか?


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

Name: ぽこ  ..上級者(19,770ポイント)   Date: 2010/07/07(水) 21:22   No:56244     
Title: Re:学校の課題がわからなくて困ってます。    
誰に聞いたかわかりませんが、ここは課題を教える場所ではありません。

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

Name: パコネコ  ..中級者(11,005ポイント)   Date: 2010/07/07(水) 21:26   No:56245     
Title: Re:学校の課題がわからなくて困ってます。    
一度やってみてわからないところを書いてもらって
そこのヒントぐらいなら…


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

Name: たすけてぇ><;  ..ぴよぴよ(137ポイント)   Date: 2010/07/07(水) 21:28   No:56246     
Title: Re:学校の課題がわからなくて困ってます。    
すみません、焦っていたので規約も読まずに質問してしまいました。御無礼をお許しください<(_ _)>

自分でやったところや、自分の理解している範囲も後ほどしっかり書き込みしますので、改めてその際に教えて頂けたら嬉しいです><;

思いあがった書き方をして本当にすみませんでした

ではできるだけ急ぎます。


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

Name: パコネコ  ..中級者(11,128ポイント)   Date: 2010/07/07(水) 21:32   No:56249     
Title: Re:学校の課題がわからなくて困ってます。    
できれば新規投稿でできますか?
地味な学生さんの質問ですし…
混ざったらややっこしいです。


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

Name: たすけてぇ><;  ..ぴよぴよ(280ポイント)   Date: 2010/07/07(水) 21:51   No:56250     
Title: 学校の課題で悩んでます。    
改めて自力で試みて、やはり分からなかったので質問致しますです。

自分に出された課題で、三角形やダイヤ型といった実行画面例をfor文を使って解いたのですが、
画像の実行例題7・8は法則がまったくわからなくて困っています><;

関数の定義など、基礎の基礎は一応理解しているのですがこの2問はどうしても解けません。

ヒントだけでも全然構いません。解法の道筋だけでも教えて頂けたら幸いに思います;;

どうかよろしくお願いいたします<(_ _)>


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

Name: たすけてぇ><;  ..ぴよぴよ(335ポイント)   Date: 2010/07/07(水) 21:59   No:56251     
Title: Re:学校の課題で悩んでます。    
すみません、新規投稿をタイトルを新しくすれば良いのかとはき違えてしまいました><;
改めてあげます。荒らしてしまいまして申し訳ありませんでした。

重ねてお詫び申し上げます


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

Name: 地味な学生  ..かけだし(2,089ポイント)   Date: 2010/07/07(水) 22:03   No:56253     
Title: Re:学校の課題がわからなくて困ってます。    
とりあえず今日で課題4まで終わりました。
明日ちょうどC言語の時間があり、コンパイルできるので
今までに作ったプログラムがちゃんと出来てるか試してみようと思います。
ヒントを教えてくださった皆さん、ありがとうございます。


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

Name: 組木紙織  ..比類無きプログラマー(88,581ポイント)   Date: 2010/07/08(木) 01:52   No:56282     
Title: Re:学校の課題がわからなくて困ってます。    
No:56234の返信です。(タイミングが遅いですが)
私は出来ないのなら単位は落とせばいいのにと思っている人です。
(知識or技術を習得できた結果が単位のはずなので)
なので
掲示板で聞いて知識を身につけるのはよいですが、答をもらうのは駄目だと思っています。
そういう視点で見てるので、代わりにコンパイルするのは、
知識を身につけるためのやり取りでなく、単なる作業なので駄目だと思っています。

上記のような理由もありますが、主な理由は無意味にスレッド長くして、後の必要としている人の
検索にかける時間を無意味に増やしてその人たちの時間を奪っていることが問題だと思ったからです。

#この辺は、個人の考え方なので私の考え方が無視してくれてもかまいません。



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

Name: ムンバ  ..初心者(8,654ポイント)   Date: 2010/07/08(木) 02:07   No:56284     
Title: Re:学校の課題がわからなくて困ってます。    
こんばんは。

これ以上、荒らすつもりは無いですし
お茶を濁すつもりも無いので、冒頭でお断りしておきます。
勝手に飛び込んできて、申し訳御座いません。

なぜ、地味な学生さんが通われている学校の先生に頼んで
自宅でのプログラミングを作る環境を、ご指導頂けないのでしょうか?

教えてくれてるのが、先生と呼ばれる方なのではないのでしょうか?
担当の先生が、何を聞いても怖いし教えてくれない。
などでしたら、話は別ですが・・・

例えば、使い古しでも、フロッピーディスクやMOやCDやDVDなどに
入れて貰えるように先生に渡して、担当の先生に
「家のパソコンでコンパイルできる環境を作りたいのですが、回線速度が遅くて
 ダウンロードしたとしても、途中でフリーズしたりしてダウンロードできないので
 持ち込んだ、書き込みできるCDなどに、家でコンパイルできる環境を、このCDに入れて下さい。」
とか、言えない環境なのですか?

ちなみに同級生は、どうされているのですか?この課題。

>>自分の今の環境を詳しく伝えなかったため誤解している方がいるようですね。すみませんでした。

 おそらく、誤解してる方はいらっしゃらないと思います。

>>ヒントを教えてくださった皆さん、ありがとうございます。

 ヒントではなく、実際に教えて下さってるのだと、どうして感じられ無いのでしょうか?
 何とか、あなたの事を理解して、ご解説・ご指導頂いてるのだと私には感じます。

↓この皆さんへのお言葉が、私には我慢できなかったので書き込みさせて頂きました。

>>とりあえず今日で課題4まで終わりました。

 お疲れ様でした。
 おやすみなさい。失礼します。


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

Name: poteto  ..ぴよぴよ(4ポイント)   Date: 2010/07/09(金) 19:35   No:56390     
Title: Re:学校の課題がわからなくて困ってます。    
本当に"地味"な学生さんなんでしょうね。。。

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

Name: だいちゃん  ..ぴよぴよ(369ポイント)   Date: 2010/07/12(月) 11:52   No:56525     
Title: Re:学校の課題がわからなくて困ってます。    
土日に1回も書き込みがないのはおかしいですね
少々きついことを言われてもうこなくなったのかな
どうせどこかでマルチポストしてるでしょうね


Name: パコネコ  ..中級者(13,399ポイント)   Date: 2010/07/12(月) 20:41   No:56541     
Title: Re:学校の課題がわからなくて困ってます。    
あと4日しかないので心配ですね。
もう終わったのでしょうか?


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



Name: tatu  ..ぴよぴよ(9ポイント)   Date: 2010/07/09(金) 13:20   No:56375       
Title: 教えてください。    
void ascending_order(list[LIST_ITEM].sp, list[LIST_ITEM].p){
↑この文がダメって(Argument list syntax error)言われるんですが、なぜですか??


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


Name: box  ..ハッカー(155,351ポイント)   Date: 2010/07/09(金) 14:34   No:56377     
Title: Re:教えてください。    
他の行に真のエラー原因があって、その行だけを見ても
何もわからないことがあります。

できれば、ソースコード全体を見せてくださるのが望ましいと思います。
そうすれば、こちらでも実際にコンパイルしてみることができますから。


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

Name: tatu  ..ぴよぴよ(0ポイント)   Date: 2010/07/09(金) 14:53   No:56379     
Title: Re:教えてください。    
指摘お願いします。

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

Name: Mist  ..比類無きプログラマー(84,050ポイント)   Date: 2010/07/09(金) 15:04   No:56380     
Title: Re:教えてください。    
構造体を引数とする関数の作り方が間違っています。
下記の頁を読んでください。

http://www9.plala.or.jp/sgwr-t/c/sec15-4.html


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

Name: tatu  ..ぴよぴよ(17ポイント)   Date: 2010/07/09(金) 15:26   No:56382     
Title: Re:教えてください。    
構造体は、mainの中ではダメなんですか??

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

Name: box  ..ハッカー(155,412ポイント)   Date: 2010/07/09(金) 15:35   No:56383     
Title: Re:教えてください。    
> 構造体は、mainの中ではダメなんですか??

昇順や降順にソートする関数の引数に使っている
構造体の定義を、なぜ当該関数の中で行なっているのですか?
というご指摘を受けています。


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

Name: tatu  ..ぴよぴよ(31ポイント)   Date: 2010/07/09(金) 15:54   No:56384     
Title: Re:教えてください。    
よくわかんないです・・・

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

Name: box  ..ハッカー(155,437ポイント)   Date: 2010/07/09(金) 16:08   No:56385     
Title: Re:教えてください。    
何がわからないのか、主語をきちんと書いてください。

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

Name: tatu  ..ぴよぴよ(70ポイント)   Date: 2010/07/09(金) 19:53   No:56391     
Title: Re:教えてください。    
>boxさん

昇順、降順の関数で構造体の引数を使うのは変ってことですか??


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

Name: box  ..ハッカー(155,481ポイント)   Date: 2010/07/09(金) 20:13   No:56392     
Title: Re:教えてください。    
そうではありません。
問題は、引数として使うよりも「前に」構造体を定義していない、という点にあります。

また、今のコードでは、引数として渡している変数の型が不明ですね。
構造体ではない型、例えばint型の変数を引数として渡すとき、どういう風に書きますか?
 編集済み


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

Name: tatu  ..ぴよぴよ(248ポイント)   Date: 2010/07/09(金) 21:42   No:56403     
Title: Re:教えてください。    
こう言う感じですか??

void func(int x, int y){
  printf("%d %d", x, y);
}

void main(void){
  int a, b;
  a = 5;
  b = 3;

  func(a, b);
}


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

Name: box  ..ハッカー(155,542ポイント)   Date: 2010/07/09(金) 22:01   No:56407     
Title: Re:教えてください。    
> void func(int x, int y){

こういう風に、引数の並びを書くときは、
「型名 変数名(, 型名, 変数名 ...)」と書きますね。

ひるがえって、最初のコードを見てください。
引数の型がどこにも書いてありません。


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

Name: tatu  ..ぴよぴよ(286ポイント)   Date: 2010/07/10(土) 00:11   No:56414     
Title: Re:教えてください。    
やってみましたけど、やっぱダメでした。

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

Name: ぽこ  ..上級者(20,221ポイント)   Date: 2010/07/10(土) 01:13   No:56418     
Title: Re:教えてください。    
> void ascending_order(unsigned char list[LIST_ITEM].sp, unsigned long list[LIST_ITEM].p){

仮引数名(list[LIST_ITEM].sp、list[LIST_ITEM].p))が不正です。
spとかpとか簡単な名前に置き換えてください。


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

Name: box  ..ハッカー(155,421ポイント)   Date: 2010/07/10(土) 07:52   No:56429     
Title: Re:教えてください。    
MistさんのNo.56380を再読してください。
構造体を宣言する場所が、本当にそこでいいでしょうか。
また、構造体のメンバー構成が同じでも、
shoppingという構造体とcoursesという構造体とは別物として扱います。
今回のプログラムではそういう扱いでいいのでしょうか。


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

Name: tatu  ..ぴよぴよ(371ポイント)   Date: 2010/07/11(日) 12:39   No:56488     
Title: Re:教えてください。    
こんにちは。
関数を取り払って、まず構造体から直してみました。
でも、まだ直ってないのですがどこが悪いのか指摘してください。
因みに、「未定義のシンボル sp(関数 main)」って返ってきます。
お願いします。


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

Name: もぐりん  ..かけだし(1,004ポイント)   Date: 2010/07/11(日) 13:01   No:56489     
Title: Re:教えてください。    
ちなみに、コンパイラは何を使用していますか?
質問するなら、最低限開発環境も提示しないと検証できませんよ。


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

Name: 白い時空  ..かけだし(2,048ポイント)   Date: 2010/07/11(日) 13:22   No:56490     
Title: Re:教えてください。    
気付いたところとしては

scanf("%s", &liste[LIST_ITEM].sp);
ここの&は必要ないと思います。

liste[i].p < liste[i].sp
この比較は明らかにおかしいです。


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

Name: fatens  ..上級者(15,912ポイント)   Date: 2010/07/11(日) 14:04   No:56491     
Title: Re:教えてください。    
>「未定義のシンボル sp(関数 main)」って返ってきます。 

struct shopping{
    unsigned long p;
    unsinged char sp[SP_ITEM];
};
unsinged → unsigned です。
予約語の色を変えてくれるエディタなどを使うと、こういう綴りミスはすぐに見つけられると思います。


いろいろ問題はありますが、とりあえず1つ挙げておくと、
構造体変数は比較はできませんが代入はできるので、ソートの内部はもっと簡単にできます。


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

Name: tatu  ..ぴよぴよ(529ポイント)   Date: 2010/07/11(日) 16:54   No:56497     
Title: Re:教えてください。    
みなさん、ありがとうございます。
>もぐりん
>コンパイラは何を使用していますか?
Borlandです。「独習C(参考書)」についてたものです。

>白い時空
>scanf("%s", &liste[LIST_ITEM].sp);
>ここの&は必要ないと思います。
なぜですか??
>liste[i].p < liste[i].sp
>この比較は明らかにおかしいです。
すいません。これは「liste[i].p < liste[j].p」です。

>fatens
>unsinged → unsigned です。
すいません。簡単なミスですね。

動くようにはなったのですが、文字化けしてしまってるんです。
自分の環境ではないところでは、上手くいってたのですが…。


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

Name: ドラ  ..初心者(6,793ポイント)   Date: 2010/07/11(日) 18:30   No:56501     
Title: Re:教えてください。    
>for(i = 0; i < LIST_ITEM; i++){
>    printf("買い物:");
>    scanf("%s", &liste[LIST_ITEM].sp);
>    printf("値段:");
>    scanf("%lu", &liste[LIST_ITEM].p);
>}
入力した値をどこに格納しているか確認してください。


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

Name: box  ..ハッカー(155,943ポイント)   Date: 2010/07/11(日) 19:58   No:56509     
Title: Re:教えてください。    
>>scanf("%s", &liste[LIST_ITEM].sp);
>>ここの&は必要ないと思います。
>なぜですか?? 

scanf関数の第2引数以降は、ポインタである必要がありますね。
また、C言語の大前提として、「配列名は、その配列の先頭要素へのポインタである」
というものがあります。よって、

scanf("%s", liste[LIST_ITEM].sp);

という結論を得ます。


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



Name: ゆーずぃ  ..初心者(6,085ポイント)   Date: 2010/07/11(日) 19:56   No:56508       
Title: 文字列操作時のメモリの使われ方について [お礼のみ]    
返信に日が経ってしまい落ちてしまったので、こちらで表題の前スレのお礼をさせて頂きます。

元スレ 
http://www.play21.jp/board/formz.cgi?action=res&resno=56113&page=&lognum=172&id=dixq&rln=561131278845321

ー以下引用ー

toyoさん、たかぎさん、ご回答ありがとうございます!私用でパソコンの使えない環境へと出掛けていたため、お礼が遅くなって申し訳ありませんでした; 
これからも宜しくお願いいたします。 

>toyoさん 
>px = (char*)0x00000008; // ポインタならちゃんとキャストしましょう  

最初見たときは何をしているのか、何故キャストをするのかが分からなかったのですが、何度も読み返すうちになんとなく分かりました。初めてそういった方法を見たので、とても勉強になりました!ありがとうございます。 


>たかぎさん 

たかぎさんの深い知識、いつも大変尊敬しております。耳慣れない言葉もありますが、そういったお話をして頂けると調べることも出来て大変勉強になります。ありがとうございました! 

皆さんありがとうございました!これをもって解決とさせて頂きます!


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




Name: dic  ..比類無きプログラマー(85,119ポイント)   Date: 2010/07/11(日) 06:08   No:56482       
Title: 「雑談」弾の座標の求め方の違い    
私がここを知って、違うなぁと感じたことは
私が作った弾の座標の求め方では図の右のように求める方法で
管理人さんの弾の座標の求め方は図の左のようです

しかし、ユーザ側からはどちらでもよく
評価の対象になりません

そこで、プログラムの観点から見てみますと
管理人さんのやり方の方が、処理数がすくなく、簡素でわかりやすい
応用が利きやすい(双曲線など応用がやりやすい)
私のやり方は、処理数が大きく、応用がしにくい
と考えたのですが
書籍:ゲーム開発のための数学・物理入門 でも管理人さんと同じやり方で紹介されていました
下の本です
http://www.amazon.co.jp/%E3%82%B2%E3%83%BC%E3%83%A0%E9%96%8B%E7%99%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%95%B0%E5%AD%A6%E3%83%BB%E7%89%A9%E7%90%86%E5%AD%A6%E5%85%A5%E9%96%80-Beginning-Math-Physics-Programmers/dp/4797329076

しかし、私のやり方だと高校数学ぐらいが必要になり
管理人さんのやり方だと中学生の2次方程式ぐらいで問題が解けます
そういった点も考えると、どちらのやり方で行っていくのがいいのでしょうか?

管理人さんのやり方は応用が効くので取り入れたいですが
慣れてしまっている自分のやり方を変更するのはちょっと・・・という気分です
別に非難などではなく、一長一短かもしれませんが感想をくれるとうれしいです


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


Name: Tororo [URL]  ..初心者(7,854ポイント)   Date: 2010/07/11(日) 07:18   No:56484     
Title: Re:「雑談」弾の座標の求め方の違い    
自分のはdicさんとほとんど同じでこんな方法をやっています


float ang  Angle*PHI*2;


X+=cosf(ang)*Speed;
Y+=sinf(ang)*Speed;




こんな感じですかね。

「弾幕」 という本で紹介されていました。


まぁ使うのはタイミングと状況に合わせるのが、
一番かもしれませんが^^;
 編集済み


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

Name: へろり  ..上級者(21,639ポイント)   Date: 2010/07/11(日) 07:18   No:56485     
Title: Re:「雑談」弾の座標の求め方の違い    
ケースバイケースじゃないでしょうか。

数学はあまり得意では無いので、間違いがあるかもしれませんが。

どのアルゴリズムにも言えることですが、使うべき場所とそうでない場所があります。

単に線分を求めたいのであれば、より計算量が少ない管理人さんの方の書き方がいいように思いますが。
しかし、一次関数で円は描けませんよね。

円周を求めたいのであれば、dicさんの方を使うべきではないでしょうか。

コード量や可読性、実行速度をトレードオフで最適な方法を選択していけばいいと思いますよ。


>管理人さんのやり方は応用が効くので取り入れたいですが 
>慣れてしまっている自分のやり方を変更するのはちょっと・・・という気分です

気持ちはなんとなくわかりますが、より優れた方法があれば、古い手法に固執せず、取り入れていくべきかと。
いくらWindowsが小難しくても、いつまでもDOSを使ってはいられないでしょう。



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

Name: たいちう  ..ハッカー(100,828ポイント)   Date: 2010/07/11(日) 07:26   No:56486     
Title: Re:「雑談」弾の座標の求め方の違い    
> 管理人さんの弾の座標の求め方は図の左のようです

言いたいことが伝わってきません。
例えば、サイトには次のような計算がありますが、
これは図の右の方法ではないのですか?

http://dixq.net/rp/13.html
> shot[n].bullet[i].x+=cos(shot[n].bullet[i].angle)*shot[n].bullet[i].spd;
> shot[n].bullet[i].y+=sin(shot[n].bullet[i].angle)*shot[n].bullet[i].spd;

dicさんの思う「図の左」の方法と「図の右」の方法を使い、
同じ動きをするシンプルなプログラムを添付してもらえれば、
質問が分かりやすくなると思うのですが。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,232,484ポイント)   Date: 2010/07/11(日) 11:14   No:56487     
Title: Re:「雑談」弾の座標の求め方の違い    
y=ax+b
というやり方がどのようなやり方かよくわかりませんが、
VxとVyで座標を計算している部分の事ですかね?

両方使ってますよ。
私は弾幕は4種類の方法で軌跡を計算しています。
例えば動く物体は以下のような構造体を持っています。

typedef struct{
    float ox,oy;//計算を始めた座標
    float x,y;  //現在の座標

    float Vx,Vy;//速さ
    float Ax,Ay;//加速度
    float t;    //時間

    float Angle;//角度
    float Speed;//速さ

    座標のセット
・・・(略
}MvObj_t;

●方法1

物理の公式で

V = V0 + at;
x = V0t + 0.5at^2;
v^2 - v0^2 = 2ax;

という3つの運動方程式ありますよね。
これに従って座標を求める方法です。

●方法2

単純にVx,Vyのみを座標計算に使う方法です。

x += Vx;
y += Vy;

のように使います。
Vは時間によって任意に変化させたりするとぐにゃぐにゃしてくれます。

●方法3

単純に角度と速さをセットして座標を計算する方法です。
たいちうさんが書いて下さっている方法です。

●方法4

ベジェ曲線を使って進む方法です。
http://musashi.or.tv/fontguide_doc3.htm
STGでは到達したいポイントに、地点Xに作用されながらスムーズに進む・・みたいな処理が必要な場面が結構あるので重宝します。


私が思うにどの計算方法を採用しなければならないと言うことは無く、その時その時で、
効率的に計算できる計算方法を採用すればいいのだと思います。
だから結局は全部使うと。


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

Name: dic  ..比類無きプログラマー(85,227ポイント)   Date: 2010/07/11(日) 16:15   No:56496 解決!     
Title: Re:「雑談」弾の座標の求め方の違い    
なるほど結局は全部使うんですね
たまたま私がみたところの弾の動きの処理が最初の画像の左だったんですね
たしかに他のショットは違う処理してますね
関数で、パラメータ化すればいいのにと思っていたのです
となると弾の動きの処理は関数のポインタを保持したほうがいいのかな

ケースバイケースで使いわけるのが最適なのですね

なんとなくモヤモヤしたものがなくなり落ち着きました
ありがとうございました


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



Name: けえぼお  ..かけだし(1,870ポイント)   Date: 2010/07/08(木) 18:03   No:56329       
Title: C言語の配列はなぜ静的配列?    
前回の質問(http://www.play21.jp/board/formz.cgi?action=res&resno=55414&page=&lognum=171&id=dixq&rln=554141278506084)で標準ライブラリの _alloca 関数を教えていただきました。
調べてみると「スタックにメモリを割り当て」る関数らしいんですが、スタックに動的に割り当てられるならCの配列が静的配列である必要がないように思うのですが…。


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


Name: 組木紙織  ..比類無きプログラマー(88,901ポイント)   Date: 2010/07/08(木) 20:19   No:56341     
Title: Re:C言語の配列はなぜ静的配列?    
_allocaは標準ライブラリの中に入っていなかったと思うのですが、、、

それは置いといて、
C99は確か言語仕様でautoで動的(実行時決定)な配列を使えたはずです。


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

Name: けえぼお  ..かけだし(2,058ポイント)   Date: 2010/07/08(木) 23:12   No:56352 解決!     
Title: Re:C言語の配列はなぜ静的配列?    
>> _allocaは標準ライブラリの中に入っていなかったと思うのですが、、、
ドキュメントには _alloca(CRT) とあるのですが、
CRT = Cランタイムライブラリ = 標準Cライブラリ ではないのでしょうか?
自分の理解が足りないだけのような気もしますが…

>> C99は確か言語仕様でautoで動的(実行時決定)な配列を使えたはずです。 
調べてみましたがよくわかりませんでした...orz
わざわざ答えてもらったのにすみません。

でも言語仕様で動的配列を使えるとのことですので、疑問は解決できました。
どうもありがとうございました!


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

Name: 組木紙織  ..比類無きプログラマー(89,194ポイント)   Date: 2010/07/08(木) 23:34   No:56355     
Title: Re:C言語の配列はなぜ静的配列?    
補足です。

_allocaはコンパイラの開発会社(この場合はマイクロソフト)が勝手に用意した関数です。
Cの標準ライブラリにははいっていません。


C99はC言語の最新の規格で、現在対応しているコンパイラと対応していないコンパイラが
あるので気をつけてください。
古い規格の場合動的配列はmalloc(),free()で扱うしかないですね。

http://seclan.dll.jp/c99d/c99d04.htm#dt19990719



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

Name: ISLe  ..初心者(5,195ポイント)   Date: 2010/07/08(木) 23:57   No:56358     
Title: Re:C言語の配列はなぜ静的配列?    
gcc拡張って積極的には使われてないんですかね?

動的配列以外にもC99の新機能のいくつかはgcc拡張で以前から使えた機能が多いですよね。


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

Name: けえぼお  ..かけだし(2,111ポイント)   Date: 2010/07/09(金) 20:29   No:56393     
Title: Re:C言語の配列はなぜ静的配列?    
組木紙織さん、ご指摘ありがとうございました。
自分の理解不足でご迷惑をおかけしました。

そういえば、 _ がつく関数は標準規格のではないと聞いたことがある気がします。
それであってるんでしょうか?


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

Name: ぷにょ  ..ぴよぴよ(50ポイント)   Date: 2010/07/11(日) 14:35   No:56493     
Title: 画像が表示されません    
以下のコードで画像を表示できません。解決方法をお願いします。

#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
        if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 
 
 
        LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;
 
        
        WaitKey() ;             // 結果を見るためにキー待ち(『WaitKey』を使用)
        DxLib_End() ;           // DXライブラリ使用の終了処理
        return 0 ;              // ソフトの終了
}


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

Name: へろり  ..上級者(21,878ポイント)   Date: 2010/07/11(日) 15:03   No:56495     
Title: Re:画像が表示されません    
DXライブラリは触ったことが無いので、全く解りませんが。

画像へのパスは通ってますか。


それと、新規の質問はスレッドを立てた方がいいですよ。


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



Name: 絵里  ..ぴよぴよ(396ポイント)   Date: 2010/07/11(日) 00:08   No:56474       
Title: ポインタについて質問です。    
#include <stdio.h>

void sum_diff(int x,int y,int *wa,int *sa)
{
    *wa=x+y;
    *sa=x-y;
}

int main(void)
{

    int n1=100,n2=200;
    int sum,diff;
    
    sum_diff(n1,n2,&sum,&diff);
    
    printf("和 %d",sum);
    printf("差 %d",diff);
    
    return(0);
}

メイン関数を上に置きたいのですが、
下のように変更したらエラーが出ます。
”再定義されています。異なる基本型です。”

#include <stdio.h>

int main(void)
{

    int n1=100,n2=200;
    int sum,diff;
    
    sum_diff(n1,n2,&sum,&diff);
    
    printf("和 %d",sum);
    printf("差 %d",diff);
    
    return(0);
}

void sum_diff(int x,int y,int *wa,int *sa)
{
    *wa=x+y;
    *sa=x-y;
}

なぜなんでしょうか??
わかる方教えてください。


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


Name: パコネコ  ..中級者(13,394ポイント)   Date: 2010/07/11(日) 00:19   No:56475     
Title: Re:ポインタについて質問です。    
両方起動してみて思ったことが…
上はちゃんと動きました。
下はうごかない。

>void sum_diff(int x,int y,int *wa,int *sa) 
こいつが…
理由としては、宣言されてないから
上がうごく理由は知りませんが…メインより先に書いてあるからですかね。
あ、これは考えた結果であって間違ってる可能性があります。
あってますかね…

>わかる方教えてください。
わかる方じゃなくてすいません。


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

Name: 組木紙織  ..比類無きプログラマー(89,329ポイント)   Date: 2010/07/11(日) 00:20   No:56476     
Title: Re:ポインタについて質問です。    
main()の上に以下の一行を付け加えてください。
void sum_diff(int x,int y,int *wa,int *sa);


sum_diff()が使われる前にその関数がどんな型であるかを宣言しておく必要があります。


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

Name: MAY  ..ぴよぴよ(384ポイント)   Date: 2010/07/11(日) 00:25   No:56477     
Title: Re:ポインタについて質問です。    
> #include <stdio.h> 

/*プログラムというのは上から下に流れるのでこの間に sum_diff という関数を使いますよという宣言*/

void sum_diff(int,int,int,int);
/*を入れておく必要があります*/

> int main(void)
> {

>     int n1=100,n2=200;
>     int sum,diff;
>     
>     sum_diff(n1,n2,&sum,&diff);
>     
>     printf("和 %d",sum);
>     printf("差 %d",diff);
>     
>     return(0);
> }

> void sum_diff(int x,int y,int *wa,int *sa)
> {
>     *wa=x+y;
>     *sa=x-y;
> } 


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

Name: 絵里  ..ぴよぴよ(444ポイント)   Date: 2010/07/11(日) 00:49   No:56479 解決!     
Title: Re:ポインタについて質問です。    
ありがとうございます。

みなさん丁寧に教えてくださり助かりました。

またお力をお借りするかもしれませんが
よろしくおねがいします。


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

Name: 組木紙織  ..比類無きプログラマー(89,541ポイント)   Date: 2010/07/11(日) 00:54   No:56480     
Title: Re:ポインタについて質問です。    
先越されたみたいなので、追記です。


C言語のコンパイラは1パス方式なので、名前(識別子)を使うためには先に宣言する必要があります。

上側の例は、宣言と同時に実体の定義もしてますが、
下側の例は、宣言と実体の定義をわけています。


下の場合のエラーは、
C言語で宣言がされてないのに関数が使われた場合、戻り値がint型の関数を内部で宣言します。
この場合は "int sum_diff(n1,n2,&sum,&diff);"という関数ですね。
それなのに 後から戻り値がことなる関数を再度定義と同時に宣言してるので上記のようなエラーが出ます。



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



Name: MAY  ..ぴよぴよ(331ポイント)   Date: 2010/07/10(土) 14:06   No:56451       
Title: DXライブラリ使用時WinMain部でエラーがおきる    
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )

この行が宣言の構文エラーと出るのですが


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


Name: fatens  ..上級者(15,712ポイント)   Date: 2010/07/10(土) 14:08   No:56452     
Title: Re:無題    
windows.hをインクルードしていますか?
Windowsアプリケーションとしてコンパイルしていますか?
 編集済み


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

Name: MAY  ..ぴよぴよ(303ポイント)   Date: 2010/07/10(土) 14:17   No:56453     
Title: Re:無題    
すいません解決しました

インクルードするとき
"DxLib.h" を
<DxLib.h> と
書いていました


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

Name: MAY  ..ぴよぴよ(332ポイント)   Date: 2010/07/10(土) 15:50   No:56455     
Title: Re:無題    
「解決!」ボタンってどこにあるのですか?

あとタイトル無題でした。すいません。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,231,700ポイント)   Date: 2010/07/10(土) 16:36   No:56457     
Title: Re:無題    
解決ボタンはコメント記入欄の下にありますよ。

後、環境ややりたい事が解らないと回答しづらい事が多いと思いますので、その辺りを質問の際は一緒に書いて頂くと良いと思います。

例えば、今回の件で言えば
「DXライブラリを利用しているのですが、」と冒頭にあるだけでも随分回答しやすくように思います。

エラーメッセージが出た時はそのメッセージをここにそのままコピペすることで、解決しやすくなると思います。
※例えばエラー番号から原因を探せる等

タイトルは修正しておきますね。


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

Name: MAY  ..ぴよぴよ(389ポイント)   Date: 2010/07/11(日) 00:34   No:56478 解決!     
Title: Re:DXライブラリ使用時WinMain部でエラーがおきる    
わざわざすいません。
以後気をつけます。


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



Name: たろう  ..プログラマー(30,404ポイント)   Date: 2010/07/06(火) 23:15   No:56172       
Title: DirectXの描画について    
DIrectXで描画したのですが、描画WM_PAINTのところにDirectXの描画関数を入れて実行したのですが、
それだと画面の外に移動してもちゃんと描画されたのですが、
while(1)
if(PeekMessage(...))
{
....
}
else
{
   Render()
}
と言う風にそれを実行すると、外に画面を移すと描画されないで表示されるのですが。
描画WM_PAINTのところにDirectXの描画関数を入れる方法以外に外に画面を移すと描画されないで表示されることを回避する方法はないでしょうか?
上のソースのようにして、この外に画面を移すと描画されないで表示されるというようなことを起こさない方法はないのでしょうか?


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


Name: シエル  ..プログラマー(25,938ポイント)   Date: 2010/07/06(火) 23:18   No:56173     
Title: Re:DirectXの描画について    
画面を掴んでいる間は、ウィンドウプロシージャが処理中だからではないでしょうか?

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

Name: Justy  ..伝説なるハッカー(555,893ポイント)   Date: 2010/07/06(火) 23:57   No:56179     
Title: Re:DirectXの描画について    
 スレッドで描画。

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

Name: シエル  ..プログラマー(26,098ポイント)   Date: 2010/07/06(火) 23:59   No:56180     
Title: Re:DirectXの描画について    
私はストリーミング再生のためだけに、スレッドを作って常に読み込ますようにしてます。。。

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

Name: たろう  ..プログラマー(30,408ポイント)   Date: 2010/07/07(水) 00:01   No:56181     
Title: Re:DirectXの描画について    
回答ありがとうございます。
>画面を掴んでいる間は、ウィンドウプロシージャが処理中だからではないでしょうか?
FPS制御するときに支障はないのでしょうか?
他の方法はやっぱりないのでしょうか?
あと、    
WNDCLASS wc;
      .
      .
      .
wc.hbrBackground    = NULL;
これを(HBRUSH)GetStockObject(WHITE_BRUSH)にするとチカチカするのですが、これは、
バックグラウンドが白になるため移動したりした時にバックグラウンドの白も再描画されてしまうためなのでしょうか?間違っていたらすみません。
質問ばかりですみません。よろしくお願いします。


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

Name: シエル  ..プログラマー(26,106ポイント)   Date: 2010/07/07(水) 00:04   No:56182     
Title: Re:DirectXの描画について    
描画はどのような方法で行ってますか?
バックバッファに描画してから、メイン画面へ反映へする方法はとっていないのですか?


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

Name: たろう  ..プログラマー(31,240ポイント)   Date: 2010/07/07(水) 00:35   No:56183     
Title: Re:DirectXの描画について    
回答ありがとうございます。
描画は、下のようにしています。
g_D3DPP.BackBufferCountでバックバッファに描画してると思うのですが、違いますでしょうか?

HRESULT Initialize(HWND hwnd,bool fullScreen,int Hieght,int Width)
{
    D3DDISPLAYMODE d3dMode;
    //Direct3D9のオブジェクトの作成
    if((g_pD3D=Direct3DCreate9(D3D_SDK_VERSION))==0)
    {
        return E_FAIL;
    }
    //現在のディスプレイモードを取得
    if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3dMode)))
    {
        return E_FAIL;
    }
    //デバイスのプレゼンテーションパラメータを初期化    
    ZeroMemory(&g_D3DPP,sizeof(D3DPRESENT_PARAMETERS));
    g_D3DPP.BackBufferCount=1;
    if(fullScreen)//フルスクリーンかどうか?
    {
        g_D3DPP.Windowed=FALSE;
        g_D3DPP.BackBufferHeight=Hieght;
        g_D3DPP.BackBufferWidth=Width;
    }
    else
    {
        g_D3DPP.Windowed=TRUE;
    }
    g_D3DPP.BackBufferFormat=d3dMode.Format;    //カラーモードの指定
    g_D3DPP.SwapEffect=D3DSWAPEFFECT_DISCARD;    //どの方法でモニター画面に転送するか指定
    g_D3DPP.EnableAutoDepthStencil=TRUE;        //エラー対策
    g_D3DPP.AutoDepthStencilFormat=D3DFMT_D16;    //エラー対策

    //ディスプレイアダプタを表すためのデバイスを作成
    //描画と頂点処理をハードウェアで行う
    if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
                                    D3DDEVTYPE_HAL,
                                    hwnd,
                                    D3DCREATE_HARDWARE_VERTEXPROCESSING,
                                    &g_D3DPP,&g_pD3DDevice))){
            //描画はハードウェアで行い頂点処理はCPUが行う
            if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
                                        D3DDEVTYPE_HAL,
                                        hwnd,
                                        D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                        &g_D3DPP,&g_pD3DDevice))){
                //描画と頂点処理はCPUで行う
                if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
                                                D3DDEVTYPE_REF,
                                                hwnd,
                                                D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                                &g_D3DPP,&g_pD3DDevice))){
                                                    g_pD3D->Release();
                                                    return E_FAIL;
                
                }
            }
    }
メインの描画は下にあるとおりです。
void RenderScene(void)
{
    // ビューポートと深度バッファのクリアとステンシルバッファの削除
    if(FAILED(g_pD3DDevice->Clear(0,NULL,         // クリアする領域は全面
                    D3DCLEAR_TARGET |            // バックバッファを指定
                    D3DCLEAR_ZBUFFER,             // 深度バッファ(Zバッファ)を指定
                    D3DCOLOR_XRGB(0,0,0),         // クリアする色
                    1.0f,                         // クリアする深度バッファ(Zバッファ)の値
                    0))) {                        // クリアするステンシルバッファの値
        return;
    }

    // 描画開始宣言
    if(SUCCEEDED(g_pD3DDevice->BeginScene())) {

        // モデルなどの描画
        Draw();

        // 描画終了宣言
        g_pD3DDevice->EndScene();
    }

    // 描画結果の転送
    if(FAILED(g_pD3DDevice->Present( 0, 0, 0, 0 ))) {
        // デバイス消失から復帰
        g_pD3DDevice->Reset(&g_D3DPP);
    }
}


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

Name: シエル  ..プログラマー(26,137ポイント)   Date: 2010/07/07(水) 00:50   No:56184     
Title: Re:DirectXの描画について    
チカチカするのは常にチカチカするんですか?移動したときだけですか?

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

Name: たろう  ..プログラマー(31,227ポイント)   Date: 2010/07/07(水) 00:51   No:56185     
Title: Re:DirectXの描画について    
返信ありがとうございます。はい。そうです。

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

Name: たろう  ..プログラマー(31,238ポイント)   Date: 2010/07/07(水) 00:52   No:56186     
Title: Re:DirectXの描画について    
すみません。移動したときだけです。

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

Name: たろう  ..プログラマー(31,745ポイント)   Date: 2010/07/07(水) 05:18   No:56193     
Title: Re:DirectXの描画について    
スレッドでやってみましたが、peekMessageを二つ使わないとできないのですが、一つでやるにはどうしたらいいでしょうか?できないのでしょうか?ソース載せます。

           .
           .
           .
    // メイン メッセージ ループ:
    CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)sub,NULL,0,&ThreadId_0);
    int flag;
    
    do{
        if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
        {
            if((flag=GetMessage(&msg,NULL,0,0))==0||flag==-1)
            {
                break;
            }
                TranslateMessage( &msg );
                DispatchMessage( &msg );
        }
    }while(1);
    return 0;
DWORD WINAPI sub(void)
{
    EnterCriticalSection( &Critical_Se );// クリティカルセッション開始
    int bit;
    MSG msg = {0};
    
    do{
        if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
        {
            if((bit=GetMessage(&msg,NULL,0,0))==0||bit==-1)
            {
                break;
            }
                TranslateMessage( &msg );
                DispatchMessage( &msg );
        }
        else
        {
            RenderScene();  // Do some rendering
        }
    }while( WM_QUIT != msg.message );
    LeaveCriticalSection( &Critical_Se );//クリティカルセッション終了

    return 0;
}
とやらなくてはいけないのですがこれをPeekMessage()を一回ですることはできるのでしょうか?
よろしくお願いします。


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

Name: シエル  ..プログラマー(26,338ポイント)   Date: 2010/07/07(水) 08:35   No:56196     
Title: Re:DirectXの描画について    
私はバックグラウンドを白にして移動してもチカチカはしませんね。
画面の外にウィンドウを持っていったときは、その部分は白くなってしまいますが。
なので私はNULLにしています。
これが正しい方法かは分かりませんが、私はあまり気にしていませんので、そう対応しています。

>>PeekMessage()を一回ですることはできるのでしょうか?
え〜なぜスレッドの処理でもpeekmessageを使ってるんですか?
二回使わなければいけないと思ってる理由を具体的にお答え下さい。


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

Name: たろう  ..プログラマー(31,984ポイント)   Date: 2010/07/07(水) 15:28   No:56217     
Title: Re:DirectXの描画について    
すみません。スレッドにPeekMessage()を使わなくてもできました。
</pre>do{
        if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
        {
            if((flag=GetMessage(&msg,NULL,0,0))==0||flag==-1)
            {
                break;
            }
                TranslateMessage( &msg );
                DispatchMessage( &msg );
        }
        else
        {
            Recnder()
        }
}while(1);</pre>
みたいにする画面を外に移動するとその分だけいろんなものが重なって表示されるという現象が起きるのですがこれはしかたのないことなのでしょうか?


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

Name: シエル  ..プログラマー(26,920ポイント)   Date: 2010/07/07(水) 18:59   No:56231     
Title: Re:DirectXの描画について    
状況が良く分からないので、その上記二なったときの画面ショットを添付していただけると助かります。
それで、結局スレッドを使って描画するのはやめたのですか?


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

Name: たろう  ..プログラマー(32,277ポイント)   Date: 2010/07/07(水) 19:17   No:56232     
Title: Re:DirectXの描画について    
返信ありがとうございます。いや、スレッド処理もやめていないです。ただ、先ほどの方法でできないのかと思い聞きました。この画像のようにならないようにすることはできるんでしょうか?
スレッドじゃない方法は、以下のとおりです。
    
    do{
        if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
        {
            if((flag=GetMessage(&msg,NULL,0,0))==0||flag==-1)
            {
                break;
            }
                TranslateMessage( &msg );
                DispatchMessage( &msg );
        }
        else
        {
            RenderScene();
        }
        
    }while(1);
それで、スレッドの処理は以下のとおりです。
DWORD WINAPI sub(void)
{
    EnterCriticalSection( &Critical_Se );// クリティカルセッション開始
    int flag;
    MSG msg = {0};
    
    do{ 
            RenderScene();
    }while( 1);
    LeaveCriticalSection( &Critical_Se );//クリティカルセッション終了

    return 0;
}

です。それとスレッドはこれでも大丈夫でしょうか?


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

Name: シエル  ..プログラマー(27,036ポイント)   Date: 2010/07/07(水) 19:34   No:56233     
Title: Re:DirectXの描画について    
ん?メッセージループの中での描画だけで、画像のようになるんですか?
それともスレッドでの描画も同時に行うと画像のようになるんですか?
クリティカルセクションの意味分かってますか?

それと、Sleepを適度に入れないと、超高速ループになってしまうので、
入れるべきですよ。(これが原因かも)





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

Name: たろう  ..プログラマー(32,299ポイント)   Date: 2010/07/07(水) 20:07   No:56237     
Title: Re:DirectXの描画について    
>メッセージループの中での描画だけで、画像のようになるんですか? 
そうです。
クリティカルセッションならわかります。同期を取るんですよね。
Sleepやってみましたがだめでした。


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

Name: たろう  ..プログラマー(32,344ポイント)   Date: 2010/07/08(木) 07:46   No:56289     
Title: Re:DirectXの描画について    
while(1) 
if(PeekMessage(...)) 

.... 

else 

   Render() 

ではできないのでしょうか?


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

Name: たろう  ..プログラマー(32,368ポイント)   Date: 2010/07/08(木) 07:58   No:56290     
Title: Re:DirectXの描画について    
わかるかたいらしたらよろしくご教授お願いします。

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

Name: たろう  ..プログラマー(32,380ポイント)   Date: 2010/07/08(木) 17:49   No:56328     
Title: Re:DirectXの描画について    
やっぱりできないのでしょうか・・・


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

Name: ideyan  ..中級者(10,107ポイント)   Date: 2010/07/08(木) 18:25   No:56331     
Title: Re:DirectXの描画について    
>画面を掴んでいる間は、ウィンドウプロシージャが処理中だからではないでしょうか?
とシエルさんも仰っていますが
while(1)  
if(PeekMessage(...))  
{  
....  
}  
else  
{  
   Render()  
}  

の形式に固執する限りはずっとifの方の式が実行されて
描画はされないと思います。


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

Name: たろう  ..プログラマー(32,426ポイント)   Date: 2010/07/08(木) 18:35   No:56334     
Title: Re:DirectXの描画について    
返信誠にありがとうございます。ウィンドウプロシージャが処理をしているからと言うのは聞きました。やっぱり無理があるのでしょうか?
それだけが知りたいです。


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

Name: シエル  ..プログラマー(27,270ポイント)   Date: 2010/07/08(木) 18:37   No:56335     
Title: Re:DirectXの描画について    
いや、ですので、スレッドでの描画を提案したのですが?

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

Name: たろう  ..プログラマー(32,534ポイント)   Date: 2010/07/08(木) 18:40   No:56336     
Title: Re:DirectXの描画について    
そうなんですか(汗)できないということでいいんですね!すっきりしました。回答してくださた方誠にありがとうございました。

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

Name: たろう  ..プログラマー(32,545ポイント)   Date: 2010/07/08(木) 18:41   No:56338 解決!     
Title: Re:DirectXの描画について    
解決しました。

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

Name: ISLe  ..入門者(4,894ポイント)   Date: 2010/07/08(木) 22:27   No:56348     
Title: Re:DirectXの描画について    
できないということで決着してしまったみたいですが…。

ウインドウ内部に引きずったあとが残るのは、WM_ERASEBKGNDメッセージに対してウインドウのクライアント領域の背景が消去されないからです。
WM_ERASEBKGNDメッセージはデフォルトでウインドウクラスに設定された背景ブラシでクライアント領域全体を塗りつぶします。
質問者さんは背景ブラシをNULLに設定しているので結果的に塗りつぶしが行われません。

対応としては、
・ウインドウのドラッグが開始されたらメインの描画を停止
・WM_ERASEBKGNDメッセージのイベント応答としてクライアント領域に描画
・ウインドウのドラッグが終了したらメインの描画を再開
というふうにします。

Direct3DデバイスからGDI下のクライアント領域には描画できないのでひと工夫してください。
#WM_PAINTで描画しても変わらないのは↑と同じ理由です。


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

Name: ISLe  ..初心者(5,127ポイント)   Date: 2010/07/08(木) 22:55   No:56350     
Title: Re:DirectXの描画について    
失礼しました。
WM_PAINTで描画すれば上手くいくと書いてありましたね。

消去を要求するためにWM_ERASEBKGNDメッセージ、描画を要求するためにWM_PAINTメッセージが飛んでくるので適切に対応するしかありません。
ウインドウメッセージが来ないときに描画するだけではウインドウメッセージに対応できません。
フルスクリーンモードではうまく行ってもウインドウモードではボロが出てしまいます。

システムのプロパティの視覚効果の『ドラッグ中にウインドウの内容を表示する』が有効かどうかで動作が変わります。


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

Name: たろう  ..プログラマー(32,639ポイント)   Date: 2010/07/10(土) 20:52   No:56466     
Title: Re:DirectXの描画について    
レスありがとうございます。
やっぱりそうですか。。。
>システムのプロパティの視覚効果の『ドラッグ中にウインドウの内容を表示する』が有効かどうかで動作が変わります。 
はどうやって設定すればよいのでしょうか?


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

Name: ISLe  ..初心者(5,484ポイント)   Date: 2010/07/10(土) 22:05   No:56469     
Title: Re:DirectXの描画について    
> >システムのプロパティの視覚効果の『ドラッグ中にウインドウの内容を表示する』が有効かどうかで動作が変わります。 
> はどうやって設定すればよいのでしょうか?

XPの場合、
マイコンピュータのプロパティ→詳細設定タブ→パフォーマンスの設定ボタン→
Vista/7の場合、
コンピュータのプロパティ→システムの詳細設定→パフォーマンスの設定ボタン→

ラジオボタンでカスタムにして『ドラッグ中にウインドウの内容を表示する』のチェックを外す

ウインドウのドラッグ中は枠だけが表示されるようになります。

スレッドで描画するとどこに表示されるのか確認したことなかったです。
画面は更新されなくなるかも。


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

Name: たろう  ..プログラマー(32,700ポイント)   Date: 2010/07/10(土) 22:55   No:56472     
Title: Re:DirectXの描画について    
レスありがとうございます。
>スレッドで描画するとどこに表示されるのか確認したことなかったです。 
画面は更新されなくなるかも。
スレッドでやりましたが描画はちゃんとされていました。 


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



Name: 初心者  ..熟練のプログラマー(49,970ポイント)   Date: 2010/07/10(土) 09:34   No:56433       
Title: 小さい順に    
#include<stdio.h>  

int main()  
{  
    int num;  
    printf("数値を入力してください。");  
    scanf("%d",&num);  
      
    while(num>0)  
    {  
        if(num%2 ==0)  
            printf("\n%d",num);  
          
        num=num-1;  
    }  
      
    return 0;  

前回、これに例えば、100を入力すると大きい順に100,98,・・・2,というプログラムができたのですが、今回は小さい順に表示するプログラムを作りたいです。変数を二つ使うんですが、自分の作ったプログラムだとエラーが出ます。


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


Name: 初心者  ..熟練のプログラマー(50,082ポイント)   Date: 2010/07/10(土) 09:37   No:56434     
Title: Re:小さい順に    
#include<stdio.h>   

int main()   
{   
    int num,i; 

    i = 2; 

    printf("数値を入力してください:");   
    scanf("%d",&num);   
       
    while(i <= num; i+=2)   
    {   
        if(num%2 ==0)   
            printf("%d",num);   
           
        num=num+1;   
    }   
       
    return 0;   
}  
いろんなヒントをもとに作ってるんですが、全部エラーが出たり、永遠に数が増えてったりします。
直すべきところを教えてください。


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

Name: 胡椒  ..中級者(9,990ポイント)   Date: 2010/07/10(土) 12:35   No:56446     
Title: Re:小さい順に    
まず
while(i <= num; i+=2)
という使い方は出来ないと思います。この場合は
while(i <= num){
i+=2;

じゃないですか? 

また、
num=num+1;   
も、どのような意図があるのでしょう?


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

Name: へろり  ..上級者(21,200ポイント)   Date: 2010/07/10(土) 12:52   No:56447     
Title: Re:小さい順に    
とりあえず、コードを意識しながら全部日本語で書いてみるといいのではないかと。


main()
{
    num に適当な数字を入力;

    ループ(num が0になるまで減らしながら繰り返す){
        もし(num が偶数なら) 表示
    }
}

後はコードを埋めていくだけです。

#include <stdio.h>    

int main(void)
{
    int num;

    scanf("%d", &num);

    for(num = num - num % 2; num >= 0; num -= 2) printf("%d, ", num);

    return 0;
}



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

Name: motuna  ..ぴよぴよ(383ポイント)   Date: 2010/07/10(土) 12:59   No:56448     
Title: Re:小さい順に    
はじめまして。

このプログラムは2,4,6…numまでのプログラムでいいですよね?

直すべきところはまず

while(i <= num; i+=2) ←ココ


forを使ったほうが楽でしょう

whileの場合書き方が間違っているようです。この書き方ですとエラーがでます。
エラーを出さないためには;を,に変えればいいです。

また上記の操作をすると無限ループとなります。
これはループを抜ける条件がi+2のほうになっているためだと思います。
もう一度コンマ演算子について調べてみることをおすすめします。

あとは大きい順だと2で終わりですが小さい順だとnumで終わりととなります。
終わる位置を

num=num+1; 

で変えてしまっています。
と、するとprintfで表示してるnumも変える必要がありますよね?

以上のことをすればあと少し直せば出来るとこまで行けるはずです。
頑張ってください


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

Name: MAY  ..ぴよぴよ(257ポイント)   Date: 2010/07/10(土) 13:54   No:56450     
Title: Re:小さい順に    
#include <stdio.h>

int main(void)    //←関係ありませんがvoidを入れておきましょう
{
    int num,i;  

    i = 2;  

    printf("数値を入力してください:");    
    scanf("%d",&num);    
        
    while(i <= num )    
    {    
        if(num%2 ==0)    
            printf("%d\n",i);  //numではなくiを表示しないと意味がないでしょう    
            
           i = i + 2; //iを増やしていかないと意味がないでしょう    
    }    
        
    return 0;    
}   


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

Name: 初心者  ..熟練のプログラマー(50,194ポイント)   Date: 2010/07/10(土) 22:24   No:56471 解決!     
Title: Re:小さい順に    
おぉ!!できました^^
一つずつ上から条件をクリアしていかないと、ちゃんとしたプログラムは書けないんですね。
何回もヒントを読んでうちにどういったものを当てはめればいいか、わかってきました。
胡椒さん、へろりさん、motunaさん、MAYさん ありがとうございます^^


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



Name: パコネコ  ..中級者(11,048ポイント)   Date: 2010/07/07(水) 21:30   No:56248       
Title: 課題でC言語ってよく出るものなんですか?「雑談可?」    
うちの学校ではあまり課題で出ないから少し気になりまして…
ちなみにゲームコースとか言うクラスにいるんですが…


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


Name: ookami  ..プログラマー(34,534ポイント)   Date: 2010/07/07(水) 22:30   No:56258     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
私は化学を専攻していましたが、
C言語が なぜか必修でした。
(受講者全員が なぜ必修!?化学なのに!? と思ってたようです)

それはさておき。

個人的には、C言語って、学校で教えるなどには
ちょうどよい抽象ぐあい なのかなと思っています。
メモリやポインタなどで、コンピュータの仕組みにも
ある程度踏み込めますし。応用の幅も広い。

http://www.orenoh.com/c_programmer.html
> 日本で、長期的に、プログラマーと言う職業で生活して行く(お給料をもらい続ける) 為の言語
↑こんなページもありました。

# 別スレでは なんだか失礼しました(汗)
# あっちが混雑しているようなのでこちらで失礼いたします。


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

Name: シエル  ..プログラマー(27,057ポイント)   Date: 2010/07/07(水) 22:36   No:56259     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
こういう課題が出るのって、大学?専門学校?高校?

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

Name: Dixq (管理人) [URL]  ..ウィザード(1,231,373ポイント)   Date: 2010/07/07(水) 22:51   No:56260     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
パコネコさんは専門学校ですか?
私は大学で情報系専攻だったので、C言語の宿題は出ていました。
たすけてぇ><;さんのトピの問題はうちの大学じゃないかと思うほどそっくりな問題でした。
確かあのような問題が最初に出て、線形リストやらスタックキュー、クイックソートやら基数ソートなどの各種アルゴリズムを習いました。
毎週宿題が出ていて、7月上旬までに全部出し終わらないと単位が出ないって感じでした。

毎年1月下旬と7月上旬に宿題の質問が多くなるのは同じような人が多いからですかね;

そして毎年3月と8月は閑散とする・・。


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

Name: パコネコ  ..中級者(11,349ポイント)   Date: 2010/07/07(水) 23:01   No:56261     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
高校です。
私は工業科のデジタルゲーム開発コースというコースにいます。
C言語の授業はありますが、基本的なものだけですね。
大学にも同じようなコースがあるので、そこに行くために勉強中です…
課題はなく、基本的に授業中に作ったもの(簡単なゲーム)で評価されるようです。
この前は、ブロック崩しでした。

>こういう課題が出るのって、大学?専門学校?高校?
うちの高校はあまりないんですよね。

皆さんの?課題見てると勉強になるので個人的には楽しいです。


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

Name: シエル  ..プログラマー(27,066ポイント)   Date: 2010/07/07(水) 23:03   No:56262     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
高校でそんなコースあるんですね。
そんな高校行きたかった…


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

Name: パコネコ  ..中級者(11,648ポイント)   Date: 2010/07/07(水) 23:21   No:56265     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
頭悪いとこですけどね…同じ名前の大学が東京と大阪にあるようで…
大阪のほうしか知りませんが、新しいことするのが好きなようです。
ただ授業でやることは、部活で全部やっちゃってるんですよね。
授業でもc言語の基礎しかしないです。
一応、情報技術検定試験の2級レベルですね。


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

Name: yu  ..熟練のプログラマー(43,401ポイント)   Date: 2010/07/08(木) 00:16   No:56274     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
専門学校です。
自分は情報工学科の3年生で、もう少しでC言語の授業(プログラミング)が終わるところです。
予定としては4,5年生でJava, アセンブラを習うようです。

パコネコ様と同じく自分も授業前からC言語をやっていたので、授業で得られるものがあまりありません;
後、教官が作るテストの問題が結構間違っていたりします・・・orz
問題にC言語と書いてあるのに、C言語ではエラーが出るコード(C++になってる)もありました;


通常のレポート以外の課題としては
2年時に、「自分でプログラミングしてアニメーションを作れ」(言語:C   , コンパイラ:Cygwin)
恒例として4年時に、「サッカーゲームのAIを作りなさい」  (言語:Java, コンパイラ:?     )
等が出ます。

アニメーションは自分がテトリスを出したところ、最高評価でした。
アニメーションじゃない気がしますが、ゲーム作れるなら作ってもいいよと言われたので作成しました。
(特にエフェクトとか凝ってないです。DXライブラリを使いました。)
サッカーはAI同士対決させて順位が高い方が、評価も高くなるというものです。


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

Name: ideyan  ..中級者(9,949ポイント)   Date: 2010/07/08(木) 00:55   No:56278     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
大学で情報系の学科にいます。

1回後期でC言語の基礎
2回前期でC言語で色々なアルゴリズム、後期にJava(含むDBとの連携)
3回前期にC言語でネットワークプログラミング、後期にCでコンパイラを作る
といった感じでした。

毎回課題がでて全部提出で単位取得という授業です。

面白かったもので
Cで挟み将棋、Javaでお絵かきアプレット、Cで多人数UDPチャットと言った物がありました。


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

Name: nayo  ..上級者(17,886ポイント)   Date: 2010/07/08(木) 01:18   No:56280     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
高専でしたけど2年生以降で常に使ってた印象です
最初はC言語で簡単な計算やアルゴリズムをやったりでした
3年生では多人数チャットやらコンソール画面でできるゲーム製作なんか面白かったです

4年生以降ではロボットやら制御工学やらのシミュレーションで使うことが多かったのでそっちはあまり面白くなかったですね…w

ちなみにC言語はやり始めた当初は課題を友人から教えてもらいながらでしたが
このサイトを通してC言語に興味をもったおかげで得意科目になりました

ゲーム作りを通して楽しくC言語が学べるって素晴らしいと思います
右も左も分からないのにいきなり作り始めるのはどうかと思いますけど…w


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

Name: 山崎  ..熟練のプログラマー(45,607ポイント)   Date: 2010/07/08(木) 08:51   No:56291     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
おはようございます〜。

公立大学の情報系学科の話です。
こちらもC言語は必修ですね。
管理人さんのところほど宿題の嵐ではないですが、2週に1回くらいC言語のレポートがありました。
1年生〜2年生まではC言語の基礎をきっちり、3年生ではC++をちょこっと。
研究室配属になると、それぞれの研究室で使っている言語を必要に応じて学ぶ、という感じです。
選択科目では、JAVA、PHP、Android、BREWなどを学べる授業もありました。
情報工学の実験という科目もあって、それではハードウェア記述言語やアセンブリも触りましたな〜。

C言語の授業の課題では、構造体、関数、ポインタ、ポインタのポインタ、メモリの動的確保、
クイックソートとかのアルゴリズム、メモリリークの危険性など基礎的なものを扱ってました。
なんとなく情報系の学科に来ちゃった人は、プログラミングがわからなくて大変そうでした ^^;

よくこちらの掲示板に「課題がわからない」という質問が投稿されますが、
ああいう感じのレベルの課題がレポートとして出てました。

昔は、私の学校ではC言語が必修ではなくパスカルが必修だったと聞きました。
C言語が必修になっててよかったといつも思います。


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

Name: toyo  ..熟練のプログラマー(53,421ポイント)   Date: 2010/07/08(木) 10:56   No:56298     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
雑談可ですよね
最近課題のトピックが多い理由は夏休み前だからなんですね
縦型検索と*で図形作成が流行ですね


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

Name: シエル  ..プログラマー(27,142ポイント)   Date: 2010/07/08(木) 11:20   No:56301     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
やっぱり専門の学校だと、本格的にC言語を学べるんですね。
完全に独学でC言語やってるので、横型、縦型探索って何?って感じです。。
AIとか色んなアルゴリズムの勉強したいなぁ。
独学じゃやっぱプログラマーは無理かな〜


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

Name: softya [URL]  ..ハッカー(183,865ポイント)   Date: 2010/07/08(木) 11:38   No:56303     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
>やっぱり専門の学校だと、本格的にC 言語を学べるんですね。
>完全に独学でC言語やってるので、横型、縦型探索って何?って感じです。。
>AIとか色んなアルゴリズムの勉強したいなぁ。
>独学じゃやっぱプログラマーは無理かな〜

大体は、本やサイトに情報が出ているので独学でもアルゴリズムは学べますよ。
と言うか生半可な学校の授業なら独学したほうがよほど専門的な事を学ぶことが出来ます。

ゲーム業界とか、昔は独学プログラマーだらけだったんですけどね。


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

Name: シエル  ..プログラマー(27,252ポイント)   Date: 2010/07/08(木) 13:11   No:56308     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
softyaさん。ありがとうございます。
プログラマになるために、勉強しといた方がいいアルゴリズムが何なのかよく分からないんですよね。
まあ片っ端から学んでいきます。
本当に目指したいのはプログラマより、「ゲーム」プログラマなんですけどね。。
ゲームプログラマだと数学の知識は必要だろうなぁ。。。


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

Name: softya [URL]  ..ハッカー(184,090ポイント)   Date: 2010/07/08(木) 13:48   No:56310     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
ゲーム業界を目指すなら、ここら辺は知識として読んでおいたほうが良いでしょうね。
初歩の初歩も必要なら紹介しますが。

「アルゴリズムクイックリファレンス」
http://www.oreilly.co.jp/books/9784873114286/
「ゲームプログラミングのためのリアルタイム衝突判定」
http://www.borndigital.co.jp/book/detail.php?id=60
「実例で学ぶゲーム3D数学」
http://www.oreilly.co.jp/books/9784873113777/
「ゲーム開発者のためのAI入門」
http://www.oreilly.co.jp/books/4873112168/
「実例で学ぶゲームAIプログラミング」
http://www.oreilly.co.jp/books/9784873113395/

コード見なくても書けるってほど理解しなくて良いですが、引き出しとして使えるぐらいには理解してください。


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

Name: パコネコ  ..中級者(12,489ポイント)   Date: 2010/07/08(木) 18:29   No:56333     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
上の本、学校の図書室で読んだのが2つあった…
リアルタイムはちょこっとしか読んでないですが…
私もゲームプログラマー目指しています。
まだまだ勉強不足ですが…

AIについては興味あるので、大学に行けたら勉強したいと思います。
お互い頑張りましょうね。


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

Name: シエル  ..プログラマー(27,354ポイント)   Date: 2010/07/08(木) 18:41   No:56337     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
softyaさん。ありがとうございます。
できれば初歩の初歩も教えていただけるとありがたいです。

>パコネコさん
こちらこそ、まだC言語暦2ヶ月半ぐらいですが、よろしくお願いします。^^


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

Name: バグ  ..ハッカー(198,554ポイント)   Date: 2010/07/08(木) 20:21   No:56342     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
情報技術検定って、まだあったのですね(^_^;)
私が行っていた学校では1級を取らないと卒業させてくれないという噂が実しやかに流れていまして、みんな必死に勉強して、私も含めてかなりの人数が取得してました(笑)

※結局1級ではなく2級の間違いだったので、全員卒業できましたが(笑)


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

Name: パコネコ  ..中級者(12,534ポイント)   Date: 2010/07/08(木) 21:33   No:56346     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
うちの学校では、2級を受けなければならないみたいで、みんなで受けてました。
私は今年の前期?で受かりました。
二回落ちましたが・・・(1級です)
大学試験に間にあってよかったです。


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

Name: softya [URL]  ..ハッカー(184,271ポイント)   Date: 2010/07/08(木) 23:30   No:56354     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
アルゴリズム関係で役立ちそうなサイトを挙げておきます。

http://www1.cts.ne.jp/~clab/algorithm/algorithm.html
http://www.atmarkit.co.jp/fcoding/index/algorithm.html
http://www.geocities.jp/ky_webid/algorithm/index.html
http://www.codereading.com/algo_and_ds/
http://www5c.biglobe.ne.jp/~ecb/algorithm/algorithm00.html
一番最後のは書籍も紹介されてますので参考にしてください。

おまけで「地球にやさしいアルゴリズム」
http://itpro.nikkeibp.co.jp/article/COLUMN/20070109/258278/?ST=develop
こっちはゲーム的なものなので、お楽しみください。


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

Name: シエル  ..プログラマー(27,314ポイント)   Date: 2010/07/08(木) 23:51   No:56357     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
おお!興味あるものばかりですね!
全て参考にさせていただきます!
softyaさん!お忙しいところ、ありがとうございました!


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

Name: パコネコ  ..中級者(13,225ポイント)   Date: 2010/07/10(土) 19:13   No:56462     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
前から気になっていたんですが…
雑談って、いつ解決にしたらいいんでしょうか?
個人的に話聞けるなら聞きたいので、つけるべきかわからないいのですが。
質問の場合、解決したらつけるのが義務?みたいな感じだと思っていたのですが、
放置しといて解決はつけないでいいんでしょうか?
(勝手に付くのかな?というのも知らないので。)
「自分なら」でいいので、意見聞かせていただいてもいいでしょうか?


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

Name: 組木紙織  ..比類無きプログラマー(89,424ポイント)   Date: 2010/07/10(土) 21:10   No:56467     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
>雑談って、いつ解決にしたらいいんでしょうか?

見てる側からしたら解決にした方が終わりが分かりやすくでいいですが、
別に何時で解決にしなくていいんじゃないですか。
解決つけなくて流れている質問のもあるので。

私は数値解析の課題でC言語での実装が出ましたね。
数値解析が目的なので、別ににどの言語でもよかったんですが、
C言語が一番つぶしがきく(出来ることが多い)と担当の先生が考えていたのでC言語にしたと話してました。

あとはソフトウエア工学関係でオブジェクト指向を触ったので、その演習課題がJavaでした。
こっちは開発環境の入手とか、目的を考えるとJavaなんかなーと思ったりもしてます。




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

Name: パコネコ  ..中級者(13,271ポイント)   Date: 2010/07/10(土) 22:15   No:56470     
Title: Re:課題でC言語ってよく出るものなんですか?「雑談可?」    
まだだれかが書き込んでくれるかもしれないですし、このまま置いときますね。
いまどきの大学はパソコン関係の授業をしてるところは多いんですね。
それともこの掲示板を見てる人がそういう関係のとこに多いからなんですかね。


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



Name: 大学生  ..入門者(3,459ポイント)   Date: 2010/07/10(土) 02:01   No:56422       
Title: 課題のわからない所の質問    
http://www.dotup.org/uploda/www.dotup.org1017832.jpg
において質問です。
#include<stdio.h> 
int main(void)  
{  
  char *str;  

  int s,i; 
   
   double t;
    
  str="abcdefghijklmnopqrstuvwxyz";  
    


            
                
   printf("整数を入力せよ\n");
   
  scanf("%d",&s); 

   printf("入力した整数は%d\n\n",s);

    if(s>27) 
      { 

printf("error\n"); 

      } 





        

     
     
    else { 
    
        for(i=1;i<27;i++)
            {
        
               t=i%s;  
               if(t==0)
                  {
                      printf("入力した値%dで1から26を順に割るとき\nあまりが0になる数字は%d\n",s,i); 
                  }
                      
        

              }
             
             
             printf("ああああああああ\n");
             
             
             
             
             
                     while( *str !='\0')  
               {  
               
               
                           if (*str=='3' )
                             { 
                     printf("@"); 
                     str++; 
                              }     
    
                
           printf("%c",*str);  
             str++; 
                     } 

                     
    
                     
                     
                } 
  return 0;  
}   


というプログラムをつくりました。置換するアルファベットの番号をどうやって文字になおすのですか?


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


Name: ぽこ  ..上級者(20,541ポイント)   Date: 2010/07/10(土) 03:16   No:56426     
Title: Re:課題のわからない所の質問    
> 置換するアルファベットの番号をどうやって文字になおすのですか?
こんなことする必要ないです。
今何文字目の処理を行っているかを記録しておき、それが入力された数字の倍数になっているか
判定して、出力する文字をアルバベットか、@にすれば良いだけです。


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

Name: へろり  ..上級者(20,715ポイント)   Date: 2010/07/10(土) 07:57   No:56430     
Title: Re:課題のわからない所の質問    
もう一息ですね。

n倍数の文字を@に置き換えるのですから、判定するのは文字では無く、何番目の文字であるかです。

それよりも、インデントはそろえた方が見やすいですよ。

#include<stdio.h>

int main(void)
{
    char *str;
    int s,i;
    double t;

    str = "abcdefghijklmnopqrstuvwxyz";

    printf("整数を入力せよ\n");
    scanf("%d", &s);

    printf("入力した整数は%d\n\n", s);

    if(s > 27){
        printf("error\n");
    }else{
        for(i = 1; i < 27; i++){
            t = i % s;
            if(t == 0){
                printf("入力した値%dで1から26を順に割るとき\nあまりが0になる数字は%d\n", s, i);
            }
        }

        printf("ああああああああ\n");

        while(*str != '\0'){
            if(*str == '3'){
                printf("@");
                str++;
            }

            printf("%c", *str);
            str++;
        }
    }

    return 0;
}


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

Name: box  ..ハッカー(155,494ポイント)   Date: 2010/07/10(土) 08:28   No:56431     
Title: Re:課題のわからない所の質問    
余分な空白行が多いため、間延びして見えます。
また、字下げを全く意識していないため、全体的に見づらいです。
ご自分でも、何がどうなっているかわかりづらくないですか?


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

Name: 大学生  ..入門者(4,458ポイント)   Date: 2010/07/10(土) 09:08   No:56432     
Title: Re:課題のわからない所の質問    
修正してみました。
1文字ずつ置換してみました。

多少、見やすいようにしてみました。
これでいいですか?

#include<stdio.h> 
int main(void)  
{  
  char *str;  

  int s,i; 
   
   double t;
    
  str="abcdefghijklmnopqrstuvwxyz";  
    
  printf("整数を入力せよ\n");
   
  scanf("%d",&s); 

  printf("入力した整数は%d\n\n",s);

     if(s>27) 
       { 
         printf("error\n"); 
        }
      else{
                t=1%s;  
                if(t==0)
                  {
                            if (*str=='a' )
                  { 
                                          printf("@"); 
                                          str++; 
                                        }   
                    }
                   else if(t!=0)
                   {
                     if (*str=='a' )
                           { 
                                         printf("a"); 
                                         str++; 
                                            }   
                     }
                         
                         
                  t=2%s;  
                        if(t==0)
                           {
                                            if (*str=='b' )
                           {
                    printf("@"); 
                                              str++; 
                                                }   
                       }
                  else if(t!=0)
                     {
                     if (*str=='b' )
                        { 
                                            printf("b"); 
                                            str++; 
                                              }   
                            }     
                         
                         

                t=3%s;  
                      if(t==0)
                        {
                                         if (*str=='c' )
                       {
                      printf("@"); 
                                           str++; 
                                             }   
                         }
                  else if(t!=0)
                     {
                           if (*str=='c' )
                        { 
                                             printf("c"); 
                                             str++; 
                                             }   
                      }     
return 0;  
}

メッセージが長いとエラーがでるので、以下4から26までつづけます。


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

Name: へろり  ..上級者(20,969ポイント)   Date: 2010/07/10(土) 09:47   No:56435     
Title: Re:課題のわからない所の質問    
>多少、見やすいようにしてみました。 
>これでいいですか?

やっぱりインデントがそろってません。


> t=1%s;  
変数 t は double 型ですね。
たとえば 5/3は、1と余り2なわけですから、2は整数です。
ですから、t も int 型で問題ありません。

後は概ねそれで問題ないと思いますよ。

ただ、aは1文字目、bは2文字目って決まってますから、わざわざ文字で判定せずとも、ループで回してあげたら楽になると思います。


ぶっちゃけこんな感じです。

#include <stdio.h>

int main(void)
{
    char *str = "abcdefghijklmnopqrstuvwxyz";
    int i, n;

    scanf("%d", &n);

    printf("after:  ");
    for(i = 0; i < 26; i++){
        printf("%c", (i + 1) % n ? str[i] : '@');
    }
    printf("\nbefore: %s\n", str);

    return 0;
}


動作確認はしてません。

スペースの入り方がなんかおかしかったのでちょっと修正しました。 編集済み


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

Name: 大学生  ..入門者(4,671ポイント)   Date: 2010/07/10(土) 15:54   No:56456     
Title: Re:課題のわからない所の質問    

発展のサンプルをコンパイルして実行すると
abcdefghijklmnopqrstuvwxyz
bcdefghijklmnopqrstuvwxyz
cdefghijklmnopqrstuvwxyz
defghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
fghijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
hijklmnopqrstuvwxyz
ijklmnopqrstuvwxyz
jklmnopqrstuvwxyz
klmnopqrstuvwxyz
lmnopqrstuvwxyz
mnopqrstuvwxyz
nopqrstuvwxyz
opqrstuvwxyz
pqrstuvwxyz
qrstuvwxyz
rstuvwxyz
stuvwxyz
tuvwxyz
uvwxyz
vwxyz
wxyz
xyz
yz
z

この実行結果がよくわからないので解説を頼みます。


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

Name: box  ..ハッカー(155,702ポイント)   Date: 2010/07/10(土) 17:24   No:56459     
Title: Re:課題のわからない所の質問    
str = "abcdefghijklmnopqrstuvwxyz";(初期状態)
では、ポインター変数strは'a'の位置を指しています。
printfで出力すると、abcdefghijklmnopqrstuvwxyz と出力します。

str++; で、指す位置を1個進めると、'b'の位置を指します。
printfで出力すると、bcdefghijklmnopqrstuvwxyz と出力します。

str++; で、指す位置を1個進めると、'c'の位置を指します。
printfで出力すると、cdefghijklmnopqrstuvwxyz と出力します。

(途中省略)

str++; で、指す位置を1個進めると、'z'の位置を指します。
printfで出力すると、z と出力します。

str++; で、指す位置を1個進めると、'z'の次にある'\0'の位置を指します。
ここで、while文の継続条件を満たさなくなります。


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

Name: 大学生  ..入門者(4,739ポイント)   Date: 2010/07/10(土) 21:21   No:56468 解決!     
Title: Re:課題のわからない所の質問    
strは'a'を指定すると\0までの文字が出力され
そしてstrで'b'を指定したときはaを飛ばして\0まで
文字が出力されるのですね。

みなさま、ありがとうございました。


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



Name: ぬるぽ  ..入門者(2,670ポイント)   Date: 2010/07/10(土) 02:17   No:56423       
Title: C言語における変数の名前について    
単発な質問なのですが、
例えばフルスクリーンについての名前をつける場合、
次の内、一番良い名前の付け方
(ソースコードの可読性、視認性の向上、プログラミング効率の改善)
は何番がよろしいのでしょうか?
ハイフン「-」やアンダースコア「_」はあまり使わないほうがいいのでしょうか?
※JavaやBASIC等ではなく、C、C++の視点から教えてください。

@fullscreen

Afull_screen

BFullscreen

CFull_screen

DFullScreen

EFull_Screen

FFULLSCREEN

GFULL_SCREEN


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


Name: ぽこ  ..上級者(20,367ポイント)   Date: 2010/07/10(土) 03:03   No:56425     
Title: Re:C言語における変数の名前について    
1〜6はどれでも良いです。7,8は一般的に定数に名前をつける時の命名規則です。
どの言語でも同じことですが、命名規則を首尾一貫、統一することがもっとも重要です。


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

Name: めるぽん  ..入門者(4,858ポイント)   Date: 2010/07/10(土) 04:59   No:56427     
Title: Re:C言語における変数の名前について    
>ハイフン「-」やアンダースコア「_」はあまり使わないほうがいいのでしょうか? 
ハイフンは名前としては使えませんね。

C言語の規格自体には推奨する命名規則等は無かったと思います。
ただし、先頭がアンダースコア1つや2つの名前(正確には違いますが)は
規格としてコンパイラベンダ等のために予約されているので、使用しない方がいいです。


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

Name: へろり  ..上級者(20,531ポイント)   Date: 2010/07/10(土) 07:27   No:56428     
Title: Re:C言語における変数の名前について    
個人的には、大文字から始まる名前は、構造体のメンバや、関数内で宣言された自動変数などには使いませんね。
関数内で宣言された変数でも、static をつけて宣言された場合には大文字から始めます。

ファイルスコープを持つ変数などは、static の有無にかかわらず必ず大文字から始めます。

構造体の型名は、基本的に全部大文字です。 リスト構造など一部例外がありますが。

アンダースコアは、プレフィックスをつけるとき以外はまず使いません。
プレフィックスと、名前の間にアンダースコアです。

ですから、使うとするなら1番か3番ですね。


5番はどうかという話ですが、Fullscreen って熟語ですよね。
熟語の場合、Full と Screen で切り分けるような事はしませんね。


いずれにせよ、どの表記を使うかというより、全コードの中で統一されていることが一番重要です。


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

Name: toyo  ..熟練のプログラマー(53,850ポイント)   Date: 2010/07/10(土) 09:48   No:56436     
Title: Re:C言語における変数の名前について    
>次の内、一番良い名前の付け方
>(ソースコードの可読性、視認性の向上、プログラミング効率の改善)
>は何番がよろしいのでしょうか? 

同様のことは過去何度も議論されて結局結論は出てないのではないでしょうか
(あとインデントのつけ方とか{ }の書き方とか)


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

Name: ぬるぽ  ..入門者(2,712ポイント)   Date: 2010/07/10(土) 17:11   No:56458 解決!     
Title: Re:C言語における変数の名前について    
なるほど。
統一することが一番重要なことなのですね。
勉強になりました。ご意見ありがとうございました。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,231,896ポイント)   Date: 2010/07/10(土) 17:52   No:56460     
Title: Re:C言語における変数の名前について    
1〜8以外にも結構よく使う命名規則があります。
変数の型や性質を表す文字を付ける方法です。

例えばクラスのメンバ変数にステータスを表す変数を用意したければ

int mStatus;

みたいに、メンバ変数である事を一目瞭然にするmを付けるとか、
グローバル変数であれば

int gStatus;

など。

int型であれば

int iStatus;

とするなど、設計者以外が見てパッと変数の性質が解るようにする方法がいくつかあります。


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

Name: ぬるぽ  ..入門者(2,721ポイント)   Date: 2010/07/10(土) 19:24   No:56464     
Title: Re:C言語における変数の名前について    
おお、なるほど。
確かにそれだとチーム内で最初に決めていれば
他のメンバーにも分かりやすそうですね。勉強になりました。
ありがとうございます。


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



Name: dic  ..比類無きプログラマー(83,032ポイント)   Date: 2010/07/09(金) 19:14   No:56388       
Title: remove関数でファイルが削除できない    
最近は質問が多いですが
下のソースで実行しているのですが、
不要になったファイルを削除する処理です
int i;
を中心にファイル名を作成してremove()関数で削除しているのですが
なぜかファイルが削除されていません
読み取り専用などの属性はついていないのでサービスパックもあてましたが
やはり削除されませんでした
何が原因なのでしょうか?
//=========================================
//    不要ファイルの削除
void    function300()
{
    int    i;
    char    file[1024];
    for( i=DEF_START; i<DEF_END; i++ )
    {
        char    mes[80];
        memset( mes, 0, sizeof(mes) );
        sprintf( mes, "不要ファイルの削除 %d/%d", i+1, DEF_END );
        printf( mes );

        memset( file, 0, sizeof(file) );
        sprintf( file, "%d.txt", i );
        remove( file );

        memset( file, 0, sizeof(file) );
        sprintf( file, "%d_jis.txt", i );
        remove( file );

        memset( file, 0, sizeof(file) );
        sprintf( file, "%d_list.txt", i );
        remove( file );

        int    len;
        for( len=0; len<strlen(mes); len++ )
            putchar( 0x08 );
    }
    remove( DEF_LIST );
    remove( "list.txt" );
    printf( "\n" );
}


環境は WindowsXP
Visual C++ 6.0 SP 6
です


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


Name: ぽこ  ..上級者(20,103ポイント)   Date: 2010/07/09(金) 19:29   No:56389     
Title: Re:remove関数でファイルが削除できない    
remove()実行後のerrnoの値は何になっていますか?

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

Name: dic  ..比類無きプログラマー(83,801ポイント)   Date: 2010/07/10(土) 09:56   No:56437     
Title: Re:remove関数でファイルが削除できない    
>remove()実行後のerrnoの値は何になっていますか?
下のようにデバック出力するようにしました
//=========================================
//    不要ファイルの削除
void    function300()
{
    printf( "STEP5 / %d\n", DEF_STEP );

    FILE    *f = fopen( "debug.txt", "wt" );

    char    debug[80];
    sprintf( debug, "EACCES :%d  ENOENT :%d\n", EACCES, ENOENT );
    fputs( debug, f );

    int    i;
    char    file[1024];
    for( i=DEF_START; i<DEF_END; i++ )
    {
        char    mes[80];
        memset( mes, 0, sizeof(mes) );
        sprintf( mes, "不要ファイルの削除 %d/%d", i+1, DEF_END );
        printf( mes );

        int    r;
        char    log[80];
        memset( file, 0, sizeof(file) );
        sprintf( file, "%d.txt", i );
        r = remove( file );
        sprintf( log, "%d - %s\n", errno, file );
        fputs( log, f );

        memset( file, 0, sizeof(file) );
        sprintf( file, "%d_jis.txt", i );
        r = remove( file );
        sprintf( log, "%d - %s\n", errno, file );
        fputs( log, f );

        memset( file, 0, sizeof(file) );
        sprintf( file, "%d_list.txt", i );
        r = remove( file );
        sprintf( log, "%d - %s\n", errno, file );
        fputs( log, f );

        int    len;
        for( len=0; len<strlen(mes); len++ )
            putchar( 0x08 );
    }
    remove( DEF_LIST );
    remove( "list.txt" );
    printf( "\n" );
    fclose( f );
}
しかしerrnoの値では成功をあらわしているのですが 削除されるファイルと削除されないファイルがでます   ---------------  debug.txt -------------------
EACCES :13  ENOENT :2
13 - 483.txt
13 - 483_jis.txt
13 - 483_list.txt
13 - 484.txt
13 - 484_jis.txt
13 - 484_list.txt
13 - 485.txt
13 - 485_jis.txt
13 - 485_list.txt
13 - 486.txt
13 - 486_jis.txt
13 - 486_list.txt
13 - 487.txt
13 - 487_jis.txt
13 - 487_list.txt
13 - 488.txt
13 - 488_jis.txt
13 - 488_list.txt
13 - 489.txt
13 - 489_jis.txt
13 - 489_list.txt



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

Name: へろり  ..上級者(21,039ポイント)   Date: 2010/07/10(土) 10:03   No:56438     
Title: Re:remove関数でファイルが削除できない    
まったく的はずれだったらごめんなさい。

マイコンピュータと出てるので、お使いの環境はWindowsだと思いますが、
そのフォルダでF5でも押して更新したら、実は消されていたなんて事はありませんか?


ごめんなさい追記です。

>しかしerrnoの値では成功をあらわしているのですが削除されるファイルと削除されないファイルがでます

の1文しかまともに見てませんでした。

消せないファイルの時は、erno はエラーコードを保持していたのですね。
失礼しました。 編集済み


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

Name: dic  ..比類無きプログラマー(84,071ポイント)   Date: 2010/07/10(土) 10:51   No:56439     
Title: Re:remove関数でファイルが削除できない    
F5押しましたがやっぱり現象は変わらないようです

今度はremoveの戻り値をチェックしてみたら
remove関数が-1を返していました(失敗)
        sprintf( log, "%d - %2d %s\n", errno, r, file );

13 -  0 121_jis.txt
13 - -1 121_list.txt
13 -  0 122.txt
...
13 -  0 125_jis.txt
13 - -1 125_list.txt
13 -  0 126.txt
...
13 -  0 152_jis.txt
13 - -1 152_list.txt
13 -  0 153.txt
...
13 -  0 164_jis.txt
13 - -1 164_list.txt
13 -  0 165.txt

これはどう対応したらいいでしょうか?

function10 -> function 20 -> ... function300 だと失敗し
function300だけだと成功するんです
 編集済み


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

Name: toyo  ..熟練のプログラマー(53,876ポイント)   Date: 2010/07/10(土) 11:23   No:56441     
Title: Re:remove関数でファイルが削除できない    
1つの可能性
fopenしたままでfcloseしないままremoveしている


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

Name: mila  ..ぴよぴよ(101ポイント)   Date: 2010/07/10(土) 11:44   No:56443     
Title: Re:remove関数でファイルが削除できない    
GetLastError関数を使えばもう少し詳細な情報を取得できます。
確認してみてください。


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

Name: toyo  ..熟練のプログラマー(53,988ポイント)   Date: 2010/07/10(土) 11:50   No:56445     
Title: Re:remove関数でファイルが削除できない    
http://msdn.microsoft.com/ja-jp/library/2da4hk1d%28VS.80%29.aspx
EACCES は、読み取り専用ファイルのパスが指定されているか、指定したファイルが開いていることを示します。

読み取り専用でなければファイルが開いたままだろうということで


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

Name: dic  ..比類無きプログラマー(84,144ポイント)   Date: 2010/07/10(土) 13:48   No:56449     
Title: Re:remove関数でファイルが削除できない    
>fopenしたままでfcloseしないままremoveしている 
他のは削除されてるのでその可能性は少ないかと

>GetLastError関数を使えばもう少し詳細な情報を取得できます。
こちらで確認します

時間かかるんで返答おそくなります


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

Name: dic  ..比類無きプログラマー(84,541ポイント)   Date: 2010/07/10(土) 14:56   No:56454 解決!     
Title: Re:remove関数でファイルが削除できない    
GetLastError()の戻り値は 32 でした
エラーコードの内容は
プロセスはファイルにアクセスできません。別のプロセスが使用中です。
というものだったんですが

書いてる途中で確認したら
fcloseしてなかったです

とある事情で機能の一部を制限しないといけなかったんで
そこのところの処理の流れでfcloseをしてなかったです・・・orz
したのような制限を入れないといけなくなったので
てっきり全部fcloseされてるものと思ってました
//=========================================
void    function211()
{
    printf( "STEP4 / %d\n", DEF_STEP );

    int    i;
    char    list[1024];

    for( i=DEF_START; i<DEF_END; i++ )
    {
        memset( list, 0, sizeof(list) );
        sprintf( list, "%d_list.txt", i );
        FILE    *file = fopen( list, "rt" );

        int    size = GetFileLen( list );

        char    dir[1024];
        char    filename[1024];

        //    1行目はディレクトリ名
        memset( dir, 0, sizeof(dir) );
        fgets( dir, sizeof(dir), file );
        dir[ strlen(dir)-1 ] = 0;

        //    機能制限
        if( strstr(dir,"ほげほげ") )    continue;
        CreateDirectory( dir, NULL );

        int    j = 0;
        while( !feof(file) )
        {
            char    mes[80];
...
            for( len=0; len<strlen(mes); len++ )
                putchar( 0x08 );
        }

        fclose( file );
    }
}

toyoさん  milaさん  へろりさん  ぽこさん
回答ありがとうございました
解決できました


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



Name: 南瓜  ..上級者(16,090ポイント)   Date: 2010/07/04(日) 20:25   No:55942       
Title: 課題に取り組んでいるんですが    
いつもお世話になってます。今回は大学の課題の添削、完成を手伝って下さい

上に元となるプログラムと問題文と出来た課題1と3があります。
問い1と3は出来たので、こうした方が見易いなどがありましたらコメントお願いします
問い2と4は別に表示します。
今回期限がありまして、7/7までと短いですが協力お願いします。

また、http://www.play21.jp/board/formz.cgi?action=res&resno=53826&page=&id=dixq&rln=55785
でもポーカーを作っている途中なので、何か間違っている点などがありましたらご指摘お願いします


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


Name: パコネコ  ..初心者(7,193ポイント)   Date: 2010/07/04(日) 20:32   No:55943     
Title: Re:課題に取り組んでいるんですが    
蝠上>1縲rand髢「謨ー繧剃スソ縺」縺ヲ縲∽ク願ィ倥・譁ケ豕輔r蠕励i繧後k荵ア謨ー縺ョ蟷ウ蝮・、繧貞・縺励※縺ソ繧医≧縲ゆケア謨ー縺ョ蛟区焚縺・0,100,1000蛟九・蝣エ蜷医・蟷ウ蝮・、繧呈アゅa繧・
蝠上>2縲0縺九i1縺セ縺ァ縺ョ蛹コ髢薙r10蛟九↓蜑イ繧翫∽ケア謨ー縺後←縺ョ蛹コ髢薙↓蜈・繧九°謨ー縺医k縲ゆケア謨ー縺ョ蛟区焚縺・0,100,1000蛟九・蝣エ蜷医↓縺昴l縺槭l蛻・ク・・縺ゥ縺ョ繧医≧縺ォ縺ェ繧九°豎ゅa繧医ゅげ繝ゥ繝輔・縲√お繧ッ繧サ繝ォ縺ェ縺ゥ繧剃スソ縺」縺ヲ謠上¥縺薙→縲・
蝠上>3縲荵ア謨ー繧剃スソ縺」縺ヲ縲・縺九i4縺セ縺ァ縺ョ謨ー繧偵Λ繝ウ繝繝縺ォ蜃コ縺吶・繝ュ繧ー繝ゥ繝繧剃ス懊l縲・
蝠上>4縲2谺。蜈・ク翫・譬シ蟄舌↓縺翫>縺ヲ縲∝次轤ケ縺九i騾イ繧譁ケ蜷代・譚ア隘ソ蜊怜圏縺ョ4騾壹j縺ゅk縲・縺、縺ョ譁ケ蜷代°繧・縺、繧偵Λ繝ウ繝繝縺ォ驕ク縺ウ縲・イ繧繝励Ο繧ー繝ゥ繝繧剃ス懊l縲る壹▲縺溽せ繧偵お繧ッ繧サ繝ォ縺ェ縺ゥ繧剃スソ縺」縺ヲ繝励Ο繝・ヨ縺励↑縺輔>縲ゆケア謨ー縺ョ蛟区焚縺・0,100,1000蛟九・蝣エ蜷医←縺・↑繧九°豎ゅa繧医・
読めない…


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

Name: 南瓜  ..上級者(16,170ポイント)   Date: 2010/07/04(日) 20:35   No:55944     
Title: Re:課題に取り組んでいるんですが    
新規投稿のやり方が少し変わったのかな?

問い2は、区間を10個に割るっていうのがうまく出来ません
あれだと単に1を10で割っただけになっているので…

問い4は、2次元格子を作って、原点を設置する所が出来ません
それが出来れば方向を選ぶ所は出来たので、up++;やdown++;も追加すれば
進むプログラムが出来るかな?


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

Name: シエル  ..上級者(22,662ポイント)   Date: 2010/07/04(日) 20:37   No:55945     
Title: Re:課題に取り組んでいるんですが    
前から南瓜さんが添付するファイルは何故か文字化けしています。
ポーカーのやつもです。。。
文字コードの問題ですかね? 編集済み


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

Name: パコネコ  ..初心者(7,209ポイント)   Date: 2010/07/04(日) 20:41   No:55946     
Title: Re:課題に取り組んでいるんですが    
問題書いてもらってもいいですか?


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

Name: スキマ妖怪  ..かけだし(1,955ポイント)   Date: 2010/07/04(日) 20:42   No:55947     
Title: Re:課題に取り組んでいるんですが    
エンコードをUnicodeに変えれば文字化けしませんよ。

追記-----------------------------------------

短すぎて訳が分からないな…orz

IEの設定の話です。
ちなみにFireFoxでは、ちゃんと見れました。
 編集済み


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

Name: 南瓜  ..上級者(16,317ポイント)   Date: 2010/07/04(日) 20:44   No:55948     
Title: Re:課題に取り組んでいるんですが    
肝心な問題文が文字化け起こしてる…なんで?

問い1 rand関数を使って上記の方法を得られる乱数の平均値を出してみよう。乱数の個数が10,100,1000個の場合の平均値を求める
問い2 0から1までの区間を10個に割り、乱数がどの区間に入るか数えるプログラムを作る。乱数の個数が10,100,1000個の場合どうなるか
グラフはエクセルなどを使って描くこと
問い3 乱数を使って、1から4までの数をランダムに出すプログラムを作れ
問い4 2次元上の格子において、原点から進む方向は東西南北の4通りとして、4つの方向から1つをランダムに選び、進むプログラムを作れ
通った点をエクセルなどを使ってプロットしなさい。また、乱数の個数が10,100,1000個の場合どうなるか


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,230,197ポイント)   Date: 2010/07/04(日) 20:46   No:55949     
Title: Re:課題に取り組んでいるんですが    
すみません、今時間が無くて回答は出来ないのですが、Shift-Jis版だけアップします。

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

Name: パコネコ  ..初心者(7,380ポイント)   Date: 2010/07/04(日) 21:04   No:55951     
Title: Re:課題に取り組んでいるんですが    
これ数えるんですよね
問いの2
1〜10にしたからダメかな?
#include<stdio.h>//使えるかな?
void main(void){
 int x[10],n,a;
 int cot;

 scanf("%d",&n);
 for(a=0;a<n;a++){
  cot=rand()%10;
  x[cot]++;
 }
 for(a=0;a<10;a++)
  printf("%d \n",x[a]);
}
結構はしょった上に1〜10だからダメかな?
=================
つづり間違えたから直します
forの中も… 編集済み


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

Name: スキマ妖怪  ..かけだし(2,081ポイント)   Date: 2010/07/04(日) 21:18   No:55953     
Title: Re:課題に取り組んでいるんですが    
0.0 〜 1.0 の範囲でどの区間に属しているか、だから端折っちゃダメだと思いますよ。

    int interval[10] = {0};

    for (i = 0; i < n; i++) {
        x[i] = rand()/(RAND_MAX + 1.0);
        printf("i = %d    rand = %f  \n", i, x[i]);
        if( x[i] >= 1.0 )    // 1.0のとき10倍すると範囲外になる
            interval[9] ++;
        else
            interval[x[i] * 10] ++;
    }

とか?
(間違っているかもしれませんが…)


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

Name: パコネコ  ..初心者(7,390ポイント)   Date: 2010/07/04(日) 21:28   No:55956     
Title: Re:課題に取り組んでいるんですが    
> rand()/(RAND_MAX + 1.0); 
これが0〜1.0の式だと思ってもいいですか?
なんかよく見かけるし。
勉強不足ですいません


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

Name: パコネコ  ..初心者(7,507ポイント)   Date: 2010/07/04(日) 21:40   No:55958     
Title: Re:課題に取り組んでいるんですが    
#include<stdio.h>//使えるかな? 
void main(void){ 
 int x[11],n,a; 
 int cot; 

 scanf("%d",&n); 
 for(a=0;a<n;a++){ 
  cot=rand()%10/10;//これなら0〜1 
  x[cot*10]++; 
 }
 x[9]+=x[10]; 
 for(a=0;a<10;a++) 
  printf("%d \n",x[a]); 

コメントはまたはしょったけど…0〜1にはなったと思う
=================
>cot=rand()%11/10;//これなら0〜1
 編集済み


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

Name: 南瓜  ..上級者(16,426ポイント)   Date: 2010/07/04(日) 22:04   No:55963     
Title: Re:課題に取り組んでいるんですが    
返信ありがとうございます。

元になるプログラムでfor(i = 0; i <=n; i++) {
で<じゃなくて<=なのも気になるし
(RAND_MAX + 1.0)を追加するのもよく判りません…
でも確かにRAND_MAX〜はよく見かけますよね

とりあえず、区間を10個に割るのは配列を使えばいいのかな?


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

Name: スキマ妖怪  ..かけだし(2,274ポイント)   Date: 2010/07/04(日) 22:14   No:55964     
Title: Re:課題に取り組んでいるんですが    
>  cot=rand()%10/10;//これなら0〜1

これだと

0.0, 0.1, 0.2, ... , 0.9 の10種類の数しか表わせないと思うのですが…
実際には、もっともっと細かいですよね、例えば 0.0001, 0.141592 とか

件の
 rand()/(RAND_MAX + 1.0);
は、

RAND_MAX = 0x7FFF = 32767
rand() の最大値もRAND_MAX なので、

(0から32767までの数) / 32768

という式になり、計算すると0.0〜1.0になると思います。
(あまり細かい数はこれでも現せないですが、課題だししょうがないですよね;)


(…と書いてるうちによく分からなくなってきた;)


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

Name: 白い時空  ..かけだし(1,120ポイント)   Date: 2010/07/04(日) 22:14   No:55965     
Title: Re:課題に取り組んでいるんですが    
あの、
rand()/(RAND_MAX + 1.0)の値ですが、
正確には0以上1未満です。1にはなりません。

なぜならrand()がRAND_MAXになったとしても
RAND_MAX/(RAND_MAX + 1.0)ですから。

あと、気付いたところですが

スキマ妖怪さんのソ−スでは
interval[x[i] * 10]++;としていますが、キャストして
interval[(int)(x[i] * 10)]++;とするべきですね。

パコネコさんのソースでは
rand()%10/10;としていますが、これでは
0, 0.1, 0.2, 0.3,… 0.9の10個しか出ません。
また、スキマ妖怪さんと同様キャストをしてないです。


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

Name: パコネコ  ..初心者(7,583ポイント)   Date: 2010/07/04(日) 22:21   No:55966     
Title: Re:課題に取り組んでいるんですが    
残念だけどその通りですね。
小数点以下2位より下は考えていませんでした。
/*
rand()/(RAND_MAX + 1.0)の値ですが、 
正確には0以上1未満です。1にはなりません。 
*/
覚えておきます。
勉強になりました。ありがとうございました。
>キャスト
(int)のことですか?具体的な意味知らなくて…だいたい後のものを整数型として計算するみたいな感じですか?


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

Name: スキマ妖怪  ..かけだし(2,350ポイント)   Date: 2010/07/04(日) 22:38   No:55968     
Title: Re:課題に取り組んでいるんですが    
> rand()/(RAND_MAX + 1.0)の値ですが、
> 正確には0以上1未満です。1にはなりません。

そうですよね。
0から1以下(1を含むと)勘違いしていました、
実際は0から1未満ですよね(^^;
No:55964 を書いた後に気付きましたorz


キャストについても、うっかりしていてコンパイルして確認してませんでした…
今後、こういうすぐ分かるようなミスはなくしていきたいです;


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

Name: パコネコ  ..初心者(8,275ポイント)   Date: 2010/07/05(月) 01:34   No:55987     
Title: Re:課題に取り組んでいるんですが    
一番1に近くなるのは
rand()がRAND_MAXのときですよね。
1にはなりませんが一番近いということで
/*
rand()/(RAND_MAX + 1.0)の値ですが、 
正確には0以上1未満です。1にはなりません。 

なぜならrand()がRAND_MAXになったとしても 
RAND_MAX/(RAND_MAX + 1.0)ですから。 
*/
a=rand();
if(a==RAND_MAX)
 a=1.0;
else
 a=a/(RAND_MAX+1.0)
今度こそ、これなら1になりますよね。


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

Name: フリオ  ..プログラマー(33,508ポイント)   Date: 2010/07/05(月) 02:05   No:55989     
Title: Re:課題に取り組んでいるんですが    
 
 問3、4の答えで、rand() % 4 + 1 としていますが、それまでの流れを踏襲しなくていいのでしょうか?
 
 この問題は、問2で考えた rand() / (RAND_MAX + 1.0) で得られた 0~1未満 の乱数を
0~9 の整数に置き換える方法を使って 1~4 の整数を求めさせたいのではないのでしょうか。 


 問4は、とおった点をエクセルなどを使ってプロットしなさい とあるので、
単に方向を表示するだけではなく軌跡を保存する必要があります。

進む方向は、配列を使って、

int step[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};

等としたほうが、見通し良くなります。
 編集済み


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

Name: フリオ  ..プログラマー(33,556ポイント)   Date: 2010/07/05(月) 02:13   No:55990     
Title: Re:課題に取り組んでいるんですが    
>a=rand(); 
>if(a==RAND_MAX) 
> a=1.0; 
>else 
> a=a/(RAND_MAX+1.0) 
>今度こそ、これなら1になりますよね。


なら、
a = rand() / (double)RAND_MAX;
でいいです。


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

Name: パコネコ  ..初心者(8,644ポイント)   Date: 2010/07/05(月) 16:10   No:56015     
Title: Re:課題に取り組んでいるんですが    
要は1.0をたすことによって1にならないようにしていたんですね。
まだうまく理解してなくて…ありがとうございます。また少し理解できました。


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

Name: 南瓜  ..上級者(16,487ポイント)   Date: 2010/07/05(月) 20:17   No:56028     
Title: Re:課題に取り組んでいるんですが    
random = (rand()/(RAND_MAX + 1.0)) % 4 + 1;とすると
invalid operands to binary %というエラーた出てしまうので
random = rand() % 4 + 1;にしました



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

Name: パコネコ  ..中級者(9,215ポイント)   Date: 2010/07/05(月) 20:22   No:56030     
Title: Re:課題に取り組んでいるんですが    
invalid operands to binary %=無効なオペランドの 2 つのバイナリ %
意味は知りませんけど…小数点以下は無視していいんですか?
(問いの3番の場合問題文には指定ないけど…4番の問題があるから大丈夫だと思いますが…)


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

Name: 白い時空  ..かけだし(1,291ポイント)   Date: 2010/07/05(月) 23:50   No:56069     
Title: Re:課題に取り組んでいるんですが    
たしか、%は整数にしか使えないはずです。
double型にはmath.hのfmod関数を使います。

問3ですが、よく見たら1から4までの数と書いてあるだけで
整数と小数どちらを出せばいいか書いてないですね。

1から4までの整数なら
random = rand() % 4 + 1
でOKですが、1から4までの小数を出すなら
random = (rand()/RAND_MAX) * 3 + 1;

です。(1.0を外したので4も出ます)


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

Name: フリオ  ..プログラマー(33,620ポイント)   Date: 2010/07/06(火) 00:26   No:56079     
Title: Re:課題に取り組んでいるんですが    
>問3ですが、よく見たら1から4までの数と書いてあるだけで 
>整数と小数どちらを出せばいいか書いてないですね。 
 
 問4に"4つの方向から1つをランダムに選び"とあるので、
そこに誘導する問題として 1~4 の整数ではないでしょうか。
 


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

Name: へろり  ..上級者(17,602ポイント)   Date: 2010/07/06(火) 00:43   No:56088     
Title: Re:課題に取り組んでいるんですが    
>でOKですが、1から4までの小数を出すなら 
>random = (rand()/RAND_MAX) * 3 + 1;

整数同士の四則演算はどこまでいっても整数ですから、((double)rand()/RAND_MAX)とかするなりしないと小数は得られませにょ。


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

Name: 白い時空  ..かけだし(1,433ポイント)   Date: 2010/07/06(火) 00:52   No:56089     
Title: Re:課題に取り組んでいるんですが    
ああ、double型へのキャストを忘れてました。すいません。
C言語はこういうことが不便ですよね。

1から4までの小数は問題に指定がなかったので、参考までに書いてみただけです。


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

Name: 南瓜  ..上級者(16,539ポイント)   Date: 2010/07/06(火) 14:09   No:56116     
Title: Re:課題に取り組んでいるんですが    
問い4一応形?になりました
これだと原点から移動した位置は判るんですが
これを元にエクセルで描くとなると出来るのかな?


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

Name: パコネコ  ..中級者(10,168ポイント)   Date: 2010/07/06(火) 14:15   No:56117     
Title: Re:課題に取り組んでいるんですが    
移動させるごとにファイルに保存でもします?
西東北西みたいな
=================
西 東 北 西
エクセルって拡張子いりましたっけ?txtでいいのかな? 編集済み


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

Name: fatens  ..上級者(15,827ポイント)   Date: 2010/07/06(火) 14:26   No:56118     
Title: Re:課題に取り組んでいるんですが    
for 文の中で座標をコンマ区切りで出力します。
printf("%d,%d\n", x, y);
実行するときに、a.exe > a.csv とリダイレクトして、
csvファイルをエクセルで開き、あとは散布図にして適当に軸を設定する、
というのはどうでしょうか。
 編集済み


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

Name: 南瓜  ..上級者(16,565ポイント)   Date: 2010/07/06(火) 14:55   No:56120     
Title: Re:課題に取り組んでいるんですが    
kadai4 a.exe > a.csvとしてエクセルで開いたら
図のような文字化けを起こしました
文字コードが悪いのかな?


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

Name: ISLe  ..入門者(3,816ポイント)   Date: 2010/07/06(火) 16:53   No:56130     
Title: Re:課題に取り組んでいるんですが    
> kadai4 a.exe > a.csvとしてエクセルで開いたら
> 図のような文字化けを起こしました
> 文字コードが悪いのかな?

cygwin版gccでコンパイルしてますか?
コンパイルオプションに
-fexec-charset=cp932
を追加するとShiftJISで出力するようになりますけど。
#そのかわりbashで文字化けする。


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

Name: 南瓜  ..上級者(16,617ポイント)   Date: 2010/07/06(火) 19:54   No:56157     
Title: Re:課題に取り組んでいるんですが    
う〜ん、駄目でした…
プログラム自体は問いの趣旨通りなのかな?
それとも
>for 文の中で座標をコンマ区切りで出力します。 
>printf("%d,%d\n", x, y); 
がうまくできていないからか?


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

Name: 南瓜  ..上級者(16,662ポイント)   Date: 2010/07/08(木) 12:21   No:56304     
Title: Re:課題に取り組んでいるんですが    
昨日投稿したと思ったのにしてなかったorz
問い2が出来たんですけど、もっと見やすく出来ないですかね?


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

Name: mats  ..入門者(3,094ポイント)   Date: 2010/07/08(木) 17:49   No:56327     
Title: Re:課題に取り組んでいるんですが    
自分なら,
section[(int)(x[i]*10)]++;
のように書きますかね.


気になった点をいくつか.
まず,nはintで宣言した方がいいかと思われます.

それと,x[i]は配列にする意味はあるのでしょうか?
最後に値を表示しないのならば,1つの変数で良さそうですが…

最後に,既に議論されていたとは思うのですが,
0以上1未満の数しか発生しませんがよろしいのでしょうか?


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

Name: 南瓜  ..上級者(16,708ポイント)   Date: 2010/07/08(木) 22:53   No:56349     
Title: Re:課題に取り組んでいるんですが    
>section[(int)(x[i]*10)]++; 
この形が話されていたキャストですね

確かにnはintの方がいいですね

0以上1未満の数の発生でいいみたいです


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

Name: fatens  ..上級者(15,697ポイント)   Date: 2010/07/08(木) 23:14   No:56353     
Title: Re:課題に取り組んでいるんですが    
>>for 文の中で座標をコンマ区切りで出力します。 
>>printf("%d,%d\n", x, y); 
>がうまくできていないからか?

問2は解決できそうなので、遅くなりましたが問4を。
私はこのようなプログラムを想定しています。
必要な部分以外は書いていないので、不足しているところは自分で補ってください。
int main(void)
{
    int i, n = 10;
    int x = 0, y = 0;

    for (i = 0; i < n; i++) {
        switch (1〜4の乱数を発生) {
            case 1: x++; break;    //東
            case 2: x--; break;    //西
            case 3: y--; break;    //南
            case 4: y++; break;    //北
        }
        printf("%d,%d\n", x, y);
    }

    return 0;
}
あとは、前に書いたように出力結果をcsvファイルにリダイレクトして、
エクセルなどでプロットすれば良いと思います。


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

Name: 南瓜  ..上級者(16,818ポイント)   Date: 2010/07/09(金) 20:40   No:56395     
Title: Re:課題に取り組んでいるんですが    
コメント、プログラムを返信して下さった皆様
ありがとうございます。
無事、課題が終わりました。エクセルは1,-1みたいに
結果だけを表示させればグラフにすることが出来ました。

あと期限は、少しだけ延びたので大丈夫でした


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

Name: 南瓜  ..上級者(16,832ポイント)   Date: 2010/07/10(土) 11:28   No:56442 解決!     
Title: Re:課題に取り組んでいるんですが    
解決を押すの忘れていた…

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



Name: MONO  ..ぴよぴよ(83ポイント)   Date: 2010/07/09(金) 01:41   No:56359       
Title: 風神録の5章なんですけど    
はじめまして 最近プログラミングを始めたものなんですが5章でどうしてもエラーが起きてしまいます度したらいいんでしょうか

main.cppで'int img_ch[2][12]' : 再定義されました。
     img_ch' の宣言を確認してください。
      ch_t ch' : 再定義されました。
      ch' の宣言を確認してください。
このよっつのエラーが起きてしまうんですがどうすれば治りますか


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


Name: ぽこ  ..上級者(19,907ポイント)   Date: 2010/07/09(金) 01:56   No:56360     
Title: Re:風神録の5章なんですけど    
GV.hで、
 int img_ch[2][12];

 ch_t ch;
が2度定義されています。
一方を消してください。


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

Name: MONO  ..ぴよぴよ(167ポイント)   Date: 2010/07/09(金) 02:30   No:56361     
Title: Re:風神録の5章なんですけど    
ありごとうございました
2つを消したらgraph.obj : error LNK2005: "int (* img_ch)[12]" (?img_ch@@3PAY0M@HA) は既に load.obj で定義されています。この文が出てきてしまったんですが どちらを消してもエラーになってしまうんですがどうしたらいいですか


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

Name: ぽこ  ..上級者(19,942ポイント)   Date: 2010/07/09(金) 02:40   No:56362     
Title: Re:風神録の5章なんですけど    
5章には以下の記述があります。
graph.cppとload.cppで消しましたか?
----
後は「main.cpp」「graph.cpp」「load.cpp」にある変数の宣言部と、extern宣言を全て消してください。


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

Name: MONO  ..ぴよぴよ(193ポイント)   Date: 2010/07/10(土) 02:00   No:56421     
Title: Re:風神録の5章なんですけど    
すいません
変数の宣言部とはどこのことなんですか


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

Name: ぽこ  ..上級者(20,286ポイント)   Date: 2010/07/10(土) 03:00   No:56424     
Title: Re:風神録の5章なんですけど    

サンプルコードをダウンロードしました?
それとMONOさんのコードを比べてみてはどうですか?
もしくは、サンプルコードの4章と5章を見比べてみては?


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

Name: MONO  ..ぴよぴよ(223ポイント)   Date: 2010/07/10(土) 11:11   No:56440 解決!     
Title: Re:風神録の5章なんですけど    
できるようになりました
ありがとうございます


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



Name: JUNE  ..ぴよぴよ(204ポイント)   Date: 2010/07/10(土) 01:05   No:56417       
Title: ウィンドウサイズを任意に変更したい[DXライブラリ]    
はじめまして。
WindowsXPにてVC++2008とDXライブラリを使用して2Dアクションゲームを制作しております。
初心者になりますが、ご教授のほう宜しくお願い致します。

ウィンドウサイズの設定につきまして、DXライブラリでは固定サイズ(640×480)に対して
関数「SetWindowSizeExtendRate()」で倍率調整を行うことができるようですが、
そうではなく、縦横任意の値で画面サイズを指定することは可能でしょうか?
※例えば240×240等




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


Name: DVDM [URL]  ..熟練のプログラマー(52,970ポイント)   Date: 2010/07/10(土) 01:20   No:56419     
Title: Re:無題    
>>JUNEさん
本家リファレンスよりこのような関数を見つけました。
これで出来るかは解りませんが…。

http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R4N1


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

Name: JUNE  ..ぴよぴよ(240ポイント)   Date: 2010/07/10(土) 01:27   No:56420 解決!     
Title: Re:無題    
ご返答ありがとうございます!
解決致しました!

また、見れば表題が「無題」となっていました;;;
大変申し訳ございませんでした。


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



Name: 御津凪 [URL]  ..ハッカー(144,378ポイント)   Date: 2010/07/09(金) 10:43   No:56372       
Title: 【雑談】IOCCC のようなコード    
IOCCC (国際邪悪なCコードコンテスト)という催しが昔からあるのをご存知でしょうか。

今回は私がそのようなコードを書いてみました。

-------- ここよりコード --------
   #include  <stdio.h>
 main( ) { int i,x; for( i
^=i;i [ "]for(i=10;i>0;i+=1"
"){ }["            ] ;++i )
( x=~i,            so( i, i
^i["if"            "(i){so"
"(0,'C"            "');}"],
                  i ["\xac"
                 "\xf4\xea"
                "\xf9\x1b"
              "\x05\x43"
            "\xf1\x19"
           "\xc4\xf5"
          "\xb9\x3b"
          "\xc5\xf4"
          "\xd9\x5f"
          "\xae\x8a"
          "\xb4\xce"
          "\xbe\xee"


          ],i /x /x)
         );} so(j,p,o
         ,s){ putchar
         (o--- +1+- j
         ---s --/ p +
          1- p ) ; }

-------- ここまでコード --------

実行すると、

C言語なんでも質問掲示板

と表示します。
動作確認は VC++ で /Tc オプション(Cコードとしてコンパイルする)を付けた状態で
コンパイルできることを確認しました。

興味のある方は、解読してみたり、 IOCCC のようなコードを書いてみたり、
課題(自由)研究にしてみてもいいかもしれません。

IOCCC でググると、解読してみた記事や、上記のようなもっときれいなアスキーアートなコードを見ることができます。

(ちなみに上記のコードは受賞された作品のコードを参考にしています)


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


Name: へろり  ..上級者(20,329ポイント)   Date: 2010/07/09(金) 10:59   No:56373     
Title: Re:【雑談】IOCCC のようなコード    
Perlで言うところのJAPHみたいな物ですね。

初めて見た時は本当に感動しました。


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

Name: シエル  ..プログラマー(27,293ポイント)   Date: 2010/07/09(金) 11:34   No:56374     
Title: Re:【雑談】IOCCC のようなコード    
う…さっぱり意味がわからん。。。
こんなコンテストあったんですね。


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

Name: ぽこ  ..上級者(20,082ポイント)   Date: 2010/07/09(金) 18:38   No:56387     
Title: Re:【雑談】IOCCC のようなコード    
この手の話なら、ここは必見でしょうね。

http://uguu.org/sources.html


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

Name: たいちう  ..ハッカー(100,538ポイント)   Date: 2010/07/09(金) 21:18   No:56400     
Title: Re:【雑談】IOCCC のようなコード    
> 興味のある方は、解読してみたり、 IOCCC のようなコードを書いてみたり、

この程度ならば余裕で解読できました。
演算子の優先順位を調べる必要がありましたが。
以前、本家のソースの解読を断念したことがありましたので、
少しは力が付いているのかな。


> この手の話なら、ここは必見でしょうね。

コーディング規約に取り入れると、仕事もより楽しくなるのですが。


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

Name: いくせ、ふたたび  ..ぴよぴよ(309ポイント)   Date: 2010/07/09(金) 22:25   No:56408     
Title: Re:【雑談】IOCCC のようなコード    
はじめまして。

[]が演算子だったことを忘れてたのでびっくりしました。

a[b] == b[a]ですね。


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

Name: 御津凪 [URL]  ..ハッカー(144,846ポイント)   Date: 2010/07/09(金) 22:44   No:56409     
Title: Re:【雑談】IOCCC のようなコード    
上記のコードを簡単に整形すると、
#include  <stdio.h>

main(){
    int i,x;
    for(i^=i;i["]for(i=10;i>0;i+=1){ }["];++i)
        (x=~i, so(i,
                  i^i["if(i){so(0,'C');}"],
                  i["\xac\xf4\xea\xf9\x1b\x05\x43\xf1\x19\xc4\xf5\xb9\x3b\xc5\xf4\xd9\x5f\xae\x8a\xb4\xce\xbe\xee"],
                  i/x/x));
}

so(j,p,o,s){
    putchar(o---+1+-j---s--/p+1-p);
}


となります。

このコードには無意味な部分が多分に含まれているだけなので、
あとはCの仕様がわかっていれば楽に解読できますね。

逆に #define マクロで埋め尽くされた作品(コード)は目で簡単に追えませんね。
(というかまず無理だと思われる)

> たいちうさん

> 以前、本家のソースの解読を断念したことがありましたので、
> 少しは力が付いているのかな。 

私も同じようなクチでした。
とはいっても参考にした元コードのカラクリにはたと気づいたのは昨日なんですけどね;

プログラミングという生産技術にはおおよそ無縁の IOCCC ですが、
こういったものは見ていて刺激されますね。


> > この手の話なら、ここは必見でしょうね。

> コーディング規約に取り入れると、仕事もより楽しくなるのですが。

楽しくなる代わりにコーディングに時間がかかって実際のプログラミングの時間が短くなって、間に合わなくなるわけですね。


ちなみに上記の作品は約3時間で作りましたが、そのうち「?」の形に整形するのに2時間かかりました。


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

Name: ムンバ  ..中級者(9,142ポイント)   Date: 2010/07/10(土) 00:52   No:56416     
Title: Re:【雑談】IOCCC のようなコード    
こんばんは。

>>IOCCC (国際邪悪なCコードコンテスト)という催しが昔からあるのをご存知でしょうか。

 知りませんでした。
 これは、ちょっと私には刺激が強すぎます♪
 またまた、C言語(C++をちょっと含む)ゲーム作りから脱線してしまいそうです。
 
Perlでも、できるのですか?(早速、調べ中です。)

今、C の勉強をしてる途中で、何故かPerl(CGI)に脱線しているのですが
「アスキーアートなコード」に、フラフラ〜っと、導かれてしまった様な気がします。
余暇でやるのも、いいかもしれませんねっ!
相変わらず、優柔不断な私。(汗


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



Name: 爺プログラマー  ..入門者(2,825ポイント)   Date: 2010/07/09(金) 20:46   No:56396       
Title: Windows7でのダイレクトサウンドの件    
static LPDIRECTSOUNDCAPTURE        pDSC;
static LPDIRECTSOUNDCAPTUREBUFFER   pDSCB;
static LPDIRECTSOUNDCAPTUREBUFFER8  ppDSCB8;






HRESULT hres = DirectSoundCaptureCreate8( NULL, &pDSC, NULL );
if(hres != DS_OK)goto NG;




この場合、エラーで録音のキャプチャーが取得できません。

64ビットではこの記述以外に必要な記述があるでしょうか?
お尋ねします。



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


Name: 爺プログラマー  ..入門者(2,915ポイント)   Date: 2010/07/09(金) 20:51   No:56397     
Title: Re:Windows7でのダイレクトサウンドの件    
DSERR_ALLOCATED
DSERR_INVALIDPARAM
DSERR_NOAGGREGATION
DSERR_OUTOFMEMORY

これ以外のエラーになります。


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

Name: シエル  ..プログラマー(27,306ポイント)   Date: 2010/07/09(金) 20:55   No:56398     
Title: Re:Windows7でのダイレクトサウンドの件    
第二引数の型あってますか?

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

Name: 爺プログラマー  ..入門者(3,013ポイント)   Date: 2010/07/09(金) 21:20   No:56401     
Title: Re:Windows7でのダイレクトサウンドの件    
 シエル  さん、ありがとうございます。

形宣言はグローバルでこのようになっています。
static LPDIRECTSOUNDCAPTURE        pDSC;

ただ、WindowsXP(32Bit)ではエラーは発生しません。


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

Name: シエル  ..プログラマー(27,330ポイント)   Date: 2010/07/09(金) 21:31   No:56402     
Title: Re:Windows7でのダイレクトサウンドの件    
LPDIRECTSOUNDCAPTURE型って後ろに8って付かないんですかね?

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

Name: 爺プログラマー  ..入門者(3,088ポイント)   Date: 2010/07/09(金) 21:42   No:56404     
Title: Re:Windows7でのダイレクトサウンドの件    
>LPDIRECTSOUNDCAPTURE型って後ろに8って付かないんですかね?
はい、
そうでしたDXバージョンは8でしたが付けなくてもコンパイラエラーにはなりませんでしたのでそのままにしています。
64Bitと関係があるでしょうか?
8をつけた場合OKなのかWin7が今ないので確認取れません。
今後確認してみます。


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

Name: ISLe  ..初心者(5,294ポイント)   Date: 2010/07/09(金) 22:56   No:56410     
Title: Re:Windows7でのダイレクトサウンドの件    
エラーはDSERR_NODRIVER(0x88780078)ではないですか?

サウンドドライバによって違うかもしれませんが、Win7(x64)+Realtek HD Audioの環境ではマイク端子やライン入力端子に実際にケーブルを差さないと録音デバイスが有効になりません。

録音デバイスが有効になっていればDirectSoundCaptureCreate8は成功します。


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

Name: ISLe  ..初心者(5,338ポイント)   Date: 2010/07/09(金) 23:01   No:56411     
Title: Re:Windows7でのダイレクトサウンドの件    
録音デバイスがプラグインで有効化/無効化するのはWindows7なら32ビットでも同じだと思います。

#たぶんVistaも。


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

Name: 爺プログラマー  ..入門者(3,190ポイント)   Date: 2010/07/09(金) 23:07   No:56412 解決!     
Title: Re:Windows7でのダイレクトサウンドの件    
ISLe さん、回答ありがとうございます。

DSERR_NODRIVER
これは調べた以外のエラーですので、この可能性が高いです。

ケーブルを挿さない状態でのエラーだと言う事ですので、今度ケーブルを挿して確認してみます。

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





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



Name: いくせ、ふたたび  ..ぴよぴよ(275ポイント)   Date: 2010/07/08(木) 01:48   No:56281       
Title: グローバル変数の定義箇所が意味不明    
はじめまして。

早速ですが、質問させてください。

とあるプログラムのソースが、グローバル変数の定義と関数の定義を
それぞれまとめて、別々のファイルで行っていたのです。

たとえば、data.cとfunc.cというファイルがあったとして、
data.cというファイルの内容は
int a;
int b;
// data.cここまで

func.cというファイルには
extern int a;
extern int b;

void f1(void) { a = 1; }
void f2(void) { b = 2; }
// func.cここまで

といった具合です。

このようにグローバル変数をまとめて定義する意味って何かあるのでしょうか?
(リンカが低機能なのか…?)

推測でよいので何かしらご教示いただけたらありがたいです。


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


Name: めるぽん  ..入門者(4,854ポイント)   Date: 2010/07/08(木) 04:29   No:56285     
Title: Re:グローバル変数の定義箇所が意味不明    
グローバル変数は影響範囲が全体に及ぶため、扱いに注意が必要です。
なので、一箇所で全部管理してしまいたいという考えに至ったのかもしれません。
もしくは、グローバル変数は複数のファイルで使われることが前提としてあるはずなので、
func.c と hoge.c という複数のファイルで共有する変数を置く場所として data.c を用意したのかもしれません。

func.c でしか使わないグローバル変数をわざわざ別ファイルにしたというのであれば、不思議な話ですね。
それなら static int a; と書けばいいだけなので。
まあもしかしたら他のファイルでも使う予定があったのかもしれません。


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

Name: ISLe  ..入門者(4,570ポイント)   Date: 2010/07/08(木) 18:16   No:56330     
Title: Re:グローバル変数の定義箇所が意味不明    
C言語ならあちこちで宣言してもひとつにまとめられる、ということを知らないのかもしれないですね。
逆にextern int a;しか宣言がなくてもリンク時にひとつだけint a;が宣言されたように扱われる、ということを知らない人も多い気がします。

int a;

extern int a;
は重ねて宣言しても不都合ないので
ヘッダファイルに
extern int a;
だけ書いておけばいいんですよね。

個人的にグローバル変数を使わないのでexternを最後に書いたのはいつだったか記憶にないですけど。


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

Name: ぽこ  ..上級者(20,055ポイント)   Date: 2010/07/09(金) 03:03   No:56363     
Title: Re:グローバル変数の定義箇所が意味不明    
> グローバル変数は影響範囲が全体に及ぶため、扱いに注意が必要です。
> なので、一箇所で全部管理してしまいたいという考えに至ったのかもしれません。

グローバル変数の定義を一箇所に集中すると、グローバル変数がどこで使われているか
把握しづらくなるんですよね。
そんなワケで私は一箇所にまとめるメリットは無い、に一票です。

#モジュール設計を途中で投げ出しているコーディングのような気もする。。


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

Name: いくせ、たびたび  ..ぴよぴよ(130ポイント)   Date: 2010/07/09(金) 21:55   No:56406 解決!     
Title: レスありがとうございました    
レスをいただいた皆様、ありがとうございました。

やっぱり意味、あるいはメリットはないみたいですね。

というか、あの状況できっちりしたソースを書くのは
曲芸(私には無理)のように感じました。

これ以上書くと愚痴が止まらなくなるので…この辺にしておきます。
皆様、ありがとうございました。


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



Name: mint  ..ぴよぴよ(810ポイント)   Date: 2010/07/09(金) 09:43   No:56369       
Title: 特定行のテキストデータの読み込み    
質問させてください。

次のようなテキストがあった場合に、例えば3行目(1 0 0)だけを読み取りprintfしたいと考えています。


1 0 1 
1 1 1
1 0 0
0 1 1 
・・・

テキストの読み込み方法として、while(fscanf(fp,%d %d %d",&a,&b,&c)!=EOF)
のような方法しか知らないのですが、これだと特定の行だけを指定できずに、全行が出力されてしまいます。

特定の行だけを出力する方法はありますか?
よろしくお願いします。


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


Name: シエル  ..プログラマー(27,271ポイント)   Date: 2010/07/09(金) 09:49   No:56370     
Title: Re:特定行のテキストデータの読み込み    
fgetsで読み込みたい直前の行まで読んで、読み込みたい行にきたら、fscanfを使う。
実用的ではないでしょうが。。


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

Name: バグ  ..ハッカー(198,851ポイント)   Date: 2010/07/09(金) 10:05   No:56371     
Title: Re:特定行のテキストデータの読み込み    
こんな感じ?

#include <stdio.h>

#define STRING_LENGTH_MAX    4096
#define SHOW_LINE            1

int main(void)
{
    int cnt = 0;
    char str[STRING_LENGTH_MAX] = {'\0', };
    FILE* fp;

    if ((fp = fopen("test.txt", "r")) == NULL)
    {
        return -1;
    }

    for (; cnt < SHOW_LINE && fgets(str, STRING_LENGTH_MAX, fp) != NULL; ++cnt);

    if (cnt == SHOW_LINE)
    {
        printf("%s", str);
    }

    fclose(fp);
    return 0;
}


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

Name: mint  ..ぴよぴよ(791ポイント)   Date: 2010/07/09(金) 15:11   No:56381 解決!     
Title: Re:特定行のテキストデータの読み込み    
ありがとうございました!!!
できました!!!!


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



Name: mint  ..ぴよぴよ(950ポイント)   Date: 2010/07/09(金) 08:08   No:56364       
Title: テキストファイルの読み取り    
初心者なので、ご教授願います。

テキストファイルをfscanfを用いて読み取り、そのあとに配列として記録したいのですが、
例えばテキストファイルが

1 0 0 1 1
・・・
1 1 1 1 0

と、各行5列くらいなら、fscanf(fp,"%d %d %d %d %d",&a,&b,&c,&d,&e)などとすればいいと思うのですが、
扱いたいテキストファイルが

1 0 0 ..........1 1 
・・・
0 0 1 ..........1 1 

と、各行400列くらいあります。

このような場合、どうしたらよいのですか?よろしくお願いします。


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


Name: バグ  ..ハッカー(198,592ポイント)   Date: 2010/07/09(金) 08:24   No:56365     
Title: Re:テキストファイルの読み取り    
「どうしたらよいのか」と問われても、「どうしたいのか」を書いていただかないと…(^_^;)

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

Name: 白い時空  ..かけだし(1,994ポイント)   Date: 2010/07/09(金) 09:11   No:56366     
Title: Re:テキストファイルの読み取り    
scanf系の関数にはスペースを入力の終了とする(改行と同じように扱う)特徴があります。
ですから、

int data[5];

fscanf(fp,"%d %d %d %d %d",&data[0],&data[1],&data[2],&data[3],&data[4]);
int i;
int data[5];

for(i=0;i<5;i++){
    fscanf(fp,"%d",&data[i]);
}

の二つは同じになります。後者を使えば400列でもできますね。


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

Name: mint  ..かけだし(1,010ポイント)   Date: 2010/07/09(金) 09:17   No:56367     
Title: Re:テキストファイルの読み取り    
>白い時空さん

ありがとうございます!!
ほんとに助かりました!!


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

Name: mint  ..かけだし(1,018ポイント)   Date: 2010/07/09(金) 09:18   No:56368 解決!     
Title: Re:テキストファイルの読み取り    
解決しました。
ありがとうございました!


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



Name:  ..かけだし(1,877ポイント)   Date: 2010/07/08(木) 16:04   No:56320       
Title: 課題:基数変換    
はじめまして。
以下のことで困っています。
[1] 質問文
 [1.1] 課題で、基数変換のプログラムを作っています。
    整数部と小数部に分け、それぞれ2進数から20進数まで、最大12桁表示するというものを目指していま    す。
 [1.2] 以下が自作のソースコードです。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int power(int dx, int no)
{
    int tmp=1;

    while(no-- > 0)
        tmp*=dx;
    return(tmp);
}

int main(void)
{
    char in1[50];     //基数変換する数(整数部)//
    char in2[50];      //基数変換する数(小数部)//
    int a=0;
    int b=0;
    int base1;        //基数//
    int base2=10;
    int i;
    int n;            //変換後の桁数//
    int p1[50];
    int p2[50];
    int q1[50];
    int q2[50];
    char out1[12];    //基数変換後の数(整数部)//
    char out2[12];    //基数変換後の数(小数部)//
    
    printf("基数変換する数の整数部を入力してください:");
    scanf("%c", &in1[50]);
    printf("基数変換する数の小数部を入力してください:");
    scanf("%c", &in2[50]);
    printf("基数を入力してください(2-20):");
    scanf("%d", &base1);
    printf("変換後の桁数を入力してください(1-12):");
    scanf("%d", &n);

    //10進数への変換//
    for(i=n-1; i=0; i--){
        //整数部分//
        switch(in1[i]){
            case '0' : p1[i]=0; break;
            case '1' : p1[i]=1; break;
            case '2' : p1[i]=2; break;
            case '3' : p1[i]=3; break;
            case '4' : p1[i]=4; break;
            case '5' : p1[i]=5; break;
            case '6' : p1[i]=6; break;
            case '7' : p1[i]=7; break;
            case '8' : p1[i]=8; break;
            case '9' : p1[i]=9; break;
            case 'A' : p1[i]=10; break;
            case 'B' : p1[i]=11; break;
            case 'C' : p1[i]=12; break;
            case 'D' : p1[i]=13; break;
            case 'E' : p1[i]=14; break;
            case 'F' : p1[i]=15; break;
            case 'G' : p1[i]=16; break;
            case 'H' : p1[i]=17; break;
            case 'I' : p1[i]=18; break;
            case 'J' : p1[i]=19; break;
        }
        
        a+=p1[i]*power(base2, i);

        //小数部分//
        switch(in2[i]){
            case '0' : p2[i]=0; break;
            case '1' : p2[i]=1; break;
            case '2' : p2[i]=2; break;
            case '3' : p2[i]=3; break;
            case '4' : p2[i]=4; break;
            case '5' : p2[i]=5; break;
            case '6' : p2[i]=6; break;
            case '7' : p2[i]=7; break;
            case '8' : p2[i]=8; break;
            case '9' : p2[i]=9; break;
            case 'A' : p2[i]=10; break;
            case 'B' : p2[i]=11; break;
            case 'C' : p2[i]=12; break;
            case 'D' : p2[i]=13; break;
            case 'E' : p2[i]=14; break;
            case 'F' : p2[i]=15; break;
            case 'G' : p2[i]=16; break;
            case 'H' : p2[i]=17; break;
            case 'I' : p2[i]=18; break;
            case 'J' : p2[i]=19; break;
        }
        
        b+=p2[i]/power(base2, i);
    }

    //n進数への変換//
    for(i=0; i<n; i++){
        //整数部分//
        q1[i]=a%base1;

        switch(q1[i]){
            case 0 : out1[i]='0'; break;
            case 1 : out1[i]='1'; break;
            case 2 : out1[i]='2'; break;
            case 3 : out1[i]='3'; break;
            case 4 : out1[i]='4'; break;
            case 5 : out1[i]='5'; break;
            case 6 : out1[i]='6'; break;
            case 7 : out1[i]='7'; break;
            case 8 : out1[i]='8'; break;
            case 9 : out1[i]='9'; break;
            case 10 : out1[i]='A'; break;
            case 11 : out1[i]='B'; break;
            case 12 : out1[i]='C'; break;
            case 13 : out1[i]='B'; break;
            case 14 : out1[i]='E'; break;
            case 15 : out1[i]='F'; break;
            case 16 : out1[i]='G'; break;
            case 17 : out1[i]='H'; break;
            case 18 : out1[i]='I'; break;
            case 19 : out1[i]='J'; break;
        }
        
        //小数部分//
        q2[i]=b*base1;

        switch(q2[i]){
            case 0 : out2[i]='0'; break;
            case 1 : out2[i]='1'; break;
            case 2 : out2[i]='2'; break;
            case 3 : out2[i]='3'; break;
            case 4 : out2[i]='4'; break;
            case 5 : out2[i]='5'; break;
            case 6 : out2[i]='6'; break;
            case 7 : out2[i]='7'; break;
            case 8 : out2[i]='8'; break;
            case 9 : out2[i]='9'; break;
            case 10 : out2[i]='A'; break;
            case 11 : out2[i]='B'; break;
            case 12 : out2[i]='C'; break;
            case 13 : out2[i]='B'; break;
            case 14 : out2[i]='E'; break;
            case 15 : out2[i]='F'; break;
            case 16 : out2[i]='G'; break;
            case 17 : out2[i]='H'; break;
            case 18 : out2[i]='I'; break;
            case 19 : out2[i]='J'; break;
        }
    }

    printf("整数部:%c", &out1[12]);
    printf("小数部:0.%c", &out2[12]);
        
    return(0);
}
 [1.3] デバッグでエラー・警告は出ないのですが、
    エラー:Debug Error 
                Run-Time Check Failure #2
                Stack around the variable 'in1' was corrupted

        ここで再試行を選択すると、以下のメッセージが出ます。
                例外unknown software exception(0x8000003)がアプリケーションの0x7c94120eで発生しまし        た
    
    また、入力値(小数部)in2と基数が同じ行に表示される
       肝心の変換後の値が出ない
    というトラブルも起こっています。
 [1.4] とりあえず、明日までの課題なので、早急に1.3の事項について解決したいです。      
[2] 環境  
 [2.1] OS : Windows XP
 [2.2] コンパイラ名 : VC++(Visual Studio2005)
[3] その他 
 ・プログラミング全般に関して初心者です。

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


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


Name:  ..かけだし(2,006ポイント)   Date: 2010/07/08(木) 16:12   No:56322     
Title: Re:課題:基数変換    
内容に不備がありましたので、捕捉します。
すみません。

課題の内容はn進数からm進数への変換です。
最初に文字列(n進数)で入力してから
10進数へ(一旦)変換し、それから指定した基数(m進数)へ変換します。

また、字下げしようとして、変なスペースが文章中に入っていました。
本当にすみません。



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

Name: toyo  ..熟練のプログラマー(53,684ポイント)   Date: 2010/07/08(木) 16:24   No:56323     
Title: Re:課題:基数変換    
とりあえず
    printf("基数変換する数の整数部を入力してください:");
    scanf("%c", &in1[50]); 
が間違っています
in1配列は0-49までの50個なのでin1[50]が範囲外となります
    scanf("%c", &in1[0]);
のようにすればエラーは出ませんがこれでは1文字だけしか入力されないのでやりたいこととは違うはずです
実際にやりたいことは0〜Jの英数文字列を読み込むのだと思いますが文字列の読み込みは%cではなく%sです
    scanf("%s", in1);
で読み込めるはずです(in2についても同様)
とりあえずここまでやってみてください


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

Name:  ..かけだし(2,024ポイント)   Date: 2010/07/08(木) 17:32   No:56326     
Title: Re:課題:基数変換    
エラーは解決しました。
ありがとうございます。


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

Name:  ..かけだし(1,991ポイント)   Date: 2010/07/08(木) 18:26   No:56332     
Title: Re:課題:基数変換    
とんでもない間違いを見つけたので、訂正します。

base1     変換する基数
base2=10 10進数に直すとき用の基数


base1  入力した値の基数
base2  出力する値の基数
本当に申し訳ありませんでした。

まだ、出力が
整数値:000000フフフフフフフフフフ小数部:0.000000フフフフフフフフフフフフフフフフフフフフフ00000フフフフフフフフフフ
のようになってしまっています。
どなたかご教授いただければ嬉しいです。



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

Name: box  ..ハッカー(155,292ポイント)   Date: 2010/07/08(木) 23:37   No:56356     
Title: Re:課題:基数変換    
>     for(i=n-1; i=0; i--){

このfor文の意味を日本語で説明してください。


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +