C言語何でも質問掲示板


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

規約と使い方

 
   Releaseが   
     ・[12466] box 
     ・[12469] 夏天 
   ローマ文字への変換   
     ・[12450] box 
     ・[12451] うしくん 
     ・[12452] box 
     ・[12453] box 
     ・[12454] うしくん 
     ・[12455] うしくん 
     ・[12456] box 
     ・[12457] たかぎ 
     ・[12459] box 
     ・[12460] box 
     ・[12461] うしくん 
     ・[12462] うしくん 
   無題   
     ・[12395] 管理人 
     ・[12404] たかぎ 
     ・[12423] JugS 
     ・[12424] たかぎ 
     ・[12430] JugS 
     ・[12431] フリオ 
     ・[12444] JugS 
   同じ要素を持つデータ ....   
     ・[12421] box 
     ・[12422] skyline 
     ・[12425] box 
     ・[12426] 管理人 
     ・[12443] skyline 
   いまさら   
     ・[12436] たかぎ 
     ・[12438] zzz 
   予約語 命令語   
     ・[12411] box 
     ・[12435] 句読点 
   無題   
     ・[12408] box 
     ・[12409] たかぎ 
     ・[12412] マイク 
     ・[12413] box 
     ・[12418] マイク 
     ・[12420] box 
     ・[12428] マイク 
     ・[12432] box 
     ・[12433] マイク 
   C言語について質問です ....   
     ・[12429] フリオ 
   質問なんですが   
     ・[12394] 管理人 
     ・[12402] バグ 
     ・[12415] リラン 
   質問です。   
     ・[12384] box 
     ・[12387] tkmakwins15 
     ・[12388] つばさ 
     ・[12389] フリオ 
     ・[12392] つばさ 
     ・[12403] やそ 
     ・[12406] たかぎ 
   math.h?   
     ・[12397] 管理人 
     ・[12398] 管理人 
     ・[12399] TestBan 
     ・[12400] 管理人 
     ・[12405] たかぎ 
   Winsockについて   
     ・[12371] mas 
     ・[12380] りょうちん 
     ・[12381] mas 
     ・[12382] りょうちん 
     ・[12386] mas 
     ・[12401] りょうちん 
   DxLibのことでききたい ....   
     ・[12393] 管理人 
   最短パスを求める   
     ・[12236] box 
     ・[12248] hum-king 
     ・[12251] へろり 
     ・[12253] ひのきお 
     ・[12254] box 
     ・[12255] へろり 
     ・[12268] hum-king 
     ・[12274] やそ 
     ・[12280] hum-king 
     ・[12281] やそ 
     ・[12289] hum-king 
     ・[12290] へろり 
     ・[12309] hum-king 
     ・[12320] hum-king 
     ・[12322] 組木紙織 
     ・[12324] hum-king 
     ・[12325] 組木紙織 
     ・[12351] hum-king 
     ・[12390] hum-king 
   シューティンゲームの ....   
     ・[12355] 管理人 
     ・[12377] アルル 
   課題が解けないんです ....   
     ・[12375] フリオ 
     ・[12376] ココ 
   int型の値の文字列への ....   
     ・[12358] 組木紙織 
     ・[12359] Wis 
     ・[12360] たかぎ 
     ・[12361] Wis 
     ・[12362] たかぎ 
     ・[12369] Wis 
     ・[12373] 組木紙織 
   bccでライブラリ   
   取得した文字列を1文 ....   
     ・[12364] tkmakwins15 
     ・[12365] やそ 
     ・[12366] tkmakwins15 
   余計な文字が・・   
     ・[12332] Hermit 
     ・[12333] box 
     ・[12334] tkmakwins15 
     ・[12335] YYY 
     ・[12336] YYY 
     ・[12340] box 
     ・[12342] tkmakwins15 
     ・[12343] tkmakwins15 
     ・[12348] Hermit 
     ・[12349] tkmakwins15 
     ・[12357] YYY 
   2つの文字列をn文字ま ....   
     ・[12339] box 
     ・[12341] K 
     ・[12344] tkmakwins15 
     ・[12346] K 
     ・[12350] tkmakwins15 
     ・[12352] K 
   順位付け   
     ・[12329] へろり 
     ・[12330] フリオ 
   なぜかサーバではエラ ....   
     ・[12318] box 
     ・[12321] れい 
     ・[12326] toyo 
     ・[12327] れい 
   FusionChar ....   
   fseekについてお聞きし ....   
     ・[12273] box 
     ・[12275] たかぎ 
     ・[12277] toyo 
     ・[12295] たかぎ 
     ・[12319] たまー 
   僕にでも・・・。   
     ・[12205] 管理人 
     ・[12317] ネイチャー 
   C言語の学習   
     ・[12314] 管理人 
     ・[12316] tkmakwins15 
   管理人さんに提案   
     ・[12294] たかぎ 
     ・[12315] 管理人 
   ここのプログラムの   
     ・[12313] 管理人 
   2Dのシューティングで ....   
     ・[12301] やそ 
     ・[12303] A 
     ・[12305] GPGA 
     ・[12306] A 
     ・[12307] GPGA 
     ・[12308] やそ 
     ・[12312] 管理人 
   管理人様に質問です。   
     ・[12311] 管理人 
   描画を何個も表示させ ....   
     ・[12201] 組木紙織 
     ・[12299] C.P.P 
   無題   
     ・[12288] tkmakwins15 
     ・[12291] みっちゃん 
   黒い四角   
     ・[12283] バグ 
     ・[12285] ひろ 
   質問なんですが   
     ・[12245] 管理人 
     ・[12256] リラク 
     ・[12264] 管理人 
     ・[12284] リラク 
   コンパイルでのエラー ....   
     ・[12278] バグ 
     ・[12279] たかぎ 
     ・[122761201550494] イシイ 
   複数ノード同士の最短 ....   
     ・[122691198037067] hum-king 
   反射させるには?   
     ・[12226] tkmakwins15 
     ・[12229] 管理人 
     ・[12257] 藍 
     ・[12265] 管理人 
     ・[12266] tkmakwins15 
     ・[12267] 管理人 
   volatile の問題   
     ・[12261] Justy 
     ・[12263] 組木紙織 
   微妙にわからないんで ....   
     ・[12260] box 
     ・[12262] YYY 
   学校の宿題   
     ・[12200] 組木紙織 
     ・[12202] オルムント 
     ・[12203] オルムント 
     ・[12204] 組木紙織 
     ・[12206] オルムント 
     ・[12208] 組木紙織 
     ・[12210] やそ 
     ・[12211] 組木紙織 
     ・[12214] オルムント 
     ・[12215] オルムント 
     ・[12218] オルムント 
     ・[12220] オルムント 
     ・[12221] オルムント 
     ・[12231] 組木紙織 
     ・[12252] オルムント 
   ファイルの読み込みに ....   
     ・[12246] 管理人 
     ・[12249] tkmakwins15 
     ・[12250] 海 
   イージーモードとハー ....   
     ・[12237] 管理人 
     ・[12240] リク 
     ・[12241] 組木紙織 
     ・[12243] 若葉マーク 
     ・[12244] 管理人 
     ・[12247] 若葉マーク 
   ブザーファイルを取っ ....   
     ・[12173] べり工 
     ・[12178] たまー 
     ・[12185] しりうす〜 
     ・[12186] GPGA 
     ・[12242] たまー 
   無題   
     ・[12224] tkmakwins15 
     ・[12234] ツキノワグマ 
   ウィンドウ   
     ・[12217] parapara 
     ・[12223] tkmakwins15 
     ・[12227] GPGA 
     ・[12232] tkmakwins15 
     ・[12233] GPGA 
   リソースでメニューの ....   
     ・[12213] GPGA 
     ・[12228] 雷 
   rewind(stdin)?   
     ・[11980] F 
     ・[11982] YuO 
     ・[11992] F 
     ・[12001] やそ 
     ・[12007] たかぎ 
     ・[12222] YuO 
   離散フーリエ変換(D ....   
   Windowsのコマンド窓が ....   
     ・[12175] へろり 
     ・[12176] ふしぎ 
     ・[12187] へろり 
     ・[12209] ふしぎ 
   スタックを連結リスト ....   
     ・[12134] box 
     ・[12136] べり工 
     ・[12137] GPGA 
     ・[12138] box 
     ・[12152] ベリ工 
     ・[12153] GPGA 
     ・[12154] べり工 
     ・[12157] フリオ 
     ・[12159] 徹夜 
     ・[12164] box 
     ・[12179] 徹夜 
     ・[12181] フリオ 
     ・[12182] 徹夜 
     ・[12184] box 
     ・[12194] 徹夜 
     ・[12195] フリオ 
     ・[12198] 徹夜 
   学校の課題なんですが ....   
     ・[12190] 管理人 
     ・[12193] tkmakwins15 
   自機の当たり判定につ ....   
     ・[12189] 管理人 
     ・[12192] EL 
   (^^)   
   〜四聖龍神録〜ver.2配 ....   
     ・[11963] ぽいち 
     ・[11964] 管理人 
     ・[11965] 管理人 
     ・[11972] やそ 
     ・[11975] GIL 
     ・[11976] 管理人 
     ・[11977] tkmakwins15 
     ・[11979] 管理人 
     ・[11983] 管理人 
     ・[11984] 組木紙織 
     ・[11985] tkmakwins15 
     ・[11986] 管理人 
     ・[11987] GIL 
     ・[11988] GIL 
     ・[11989] 組木紙織 
     ・[11990] 管理人 
     ・[11991] GIL 
     ・[11993] 管理人 
     ・[12008] 灰色 
     ・[12009] 灰色 
     ・[12012] 管理人 
     ・[12015] 組木紙織 
     ・[12016] 灰色 
     ・[12018] 管理人 
     ・[12020] 組木紙織 
     ・[12022] 管理人 
     ・[12023] 組木紙織 
     ・[12024] 木霊 
     ・[12025] 管理人 
     ・[12033] 雷 
     ・[12036] 管理人 
     ・[12038] 木霊 
     ・[12039] 管理人 
     ・[12041] tkmakwins15 
     ・[12048] 管理人 
     ・[12095] 組木紙織 
     ・[12104] 管理人 
     ・[12129] ネイチャー 
     ・[12130] 管理人 
     ・[12155] ルルーシュ 
     ・[12166] 雷 
     ・[12167]   
     ・[12169] 管理人 
     ・[12171] 木霊 
     ・[12180] 管理人 

Name: 夏天 [URL]  ..初心者(5,553ポイント)   Date: 2007/12/09(日) 04:14   No:12464       
Title: Releaseが    
fopenやfcloseなどの関数を使いReleaseでビルドすると
main.obj : error LNK2001: 外部シンボル "__imp__fscanf" は未解決です。
といったエラーが出てしまいます。
どうすればよいのでしょうか。


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


Name: box  ..比類無きプログラマー(97,513ポイント)   Date: 2007/12/09(日) 06:37   No:12466     
Title: Re:Releaseが    
コンパイラは何をお使いですか?
ソースコードを見せていただけますか?


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

Name: 夏天 [URL]  ..初心者(6,002ポイント)   Date: 2007/12/09(日) 09:43   No:12469     
Title: Re:Releaseが    
開発環境はVS2005を使っています

コードは
#define _CRT_SECURE_NO_DEPRECATE 1 /* VisualC++2005 での警告抑制 */

#include <stdio.h>
#include "DxLib.h"

char Key[256];

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
FILE *fp;
int Num;
fp=fopen("test.txt","r");
if(fp == NULL) return 0;

fscanf(fp,"%d",&Num);



SetGraphMode( 800 , 600 , 32 ) ;
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );
SetMouseDispFlag( TRUE ) ;

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && Key[KEY_INPUT_ESCAPE]==0){
DrawFormatString( 100 , 0 , GetColor(255,255,255) , "%d" ,Num) ;
ScreenFlip();
}
fclose(fp);
DxLib_End();
return 0;
}

main.obj : error LNK2001: 外部シンボル "__imp__fscanf" は未解決です。
C:\Documents and Settings\Tenka\My Documents\Visual Studio 2005\Projects\vcqma\Release\vcqma.exe : fatal error LNK1120: 外部参照 1 が未解決です。

こんな感じに出てきます


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



Name: うしくん  ..ぴよぴよ(244ポイント)   Date: 2007/12/08(土) 19:14   No:12448       
Title: ローマ文字への変換    
OS:Vista コンパイラ:borlandC++

1〜4999までの整数を入力してローマ記法に変換するプログラムを作ったのですが、実行すると
的外れの結果になります。0(ゼロ)を入力すると終了するように作ったつもりなのですが、
終了しません。どこが悪いのかまったくわかりません。宜しくお願いします。
また、もっとスマートに作れるのであれば、指摘もお願いします。


#include<stdio.h>

int main(void)
{
int n=0,m,p,q,r;
char seisu[5];
printf("1〜4999までの整数を入力してください。\n");
fflush(stdout);
while(1)
{
printf("Input integer (0 QUIT)====>");
fflush(stdout);
scanf("%s",&seisu);
if(seisu[0]==0)break;
printf("%s ===> ",seisu);
fflush(stdout);
while(seisu[n]!='\0')
{
n++;
}
p=n-3;
q=n-2;
r=n-1;
if(n==4) /*千の位*/
{
for(m=1;m<=seisu[0];m++)
{
printf("M");
}
n--;
}
if(n==3) /*百の位*/
{
if(seisu[p]>=5)
{
printf("D");
for(m=1;m<=seisu[p]-5;m++)
{
printf("C");
}
}
else
{
for(m=1;m<=seisu[p];m++)
{
printf("C");
}
}
n--;
}
if(n==2) /*十の位*/
{
if(seisu[q]>=5)
{
printf("L");
for(m=1;m<=seisu[q]-5;m++)
{
printf("X");
}
}
else
{
for(m=1;m<=seisu[q];m++)
{
printf("X");
}
}
n--;
}
if(n==1) /*一の位*/
{
if(seisu[r]==9){
printf("IX");
}else if(seisu[r]>=5){
printf("V");
for(m=1;m<=seisu[r]-5;m++)
{
printf("I");
}
}else if(seisu[r]==4){
printf("IV");
}else{
for(m=1;m<=seisu[r];m++)
{
printf("I");
}
}
}
printf("\n");
}
return 0;
}


長い文章ですみません。


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


Name: box  ..比類無きプログラマー(97,263ポイント)   Date: 2007/12/08(土) 19:56   No:12450     
Title: Re:ローマ文字への変換    

> if(seisu[0]==0)break;

数値の0と数字の'0'とは異なります。


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

Name: うしくん  ..ぴよぴよ(251ポイント)   Date: 2007/12/08(土) 20:16   No:12451     
Title: Re:ローマ文字への変換    
ありがとうございます。終了する部分はうまくいくのですがローマ文字への変換がうまくいきません。
もしかしてこれも数値と数字の違いが原因なのでしょうか?


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

Name: box  ..比類無きプログラマー(97,348ポイント)   Date: 2007/12/08(土) 20:27   No:12452     
Title: Re:ローマ文字への変換    
私だったら、こんな構造体を作って考えます。



#include <stdio.h>

typedef struct __roman {
char *romanChar;
int number;
} Roman;

int main(void)
{
Roman roman[] = {
{ "I", 1 }, { "IV", 4 }, { "V", 5 }, { "IX", 9 },
{ "X", 10 }, { "XL", 40 }, { "L", 50 }, { "XC", 90 },
{ "C", 100 }, { "CD", 400 }, { "D", 500 }, { "CM", 900 },
{ "M", 1000 },
};

return 0;
}


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

Name: box  ..比類無きプログラマー(97,636ポイント)   Date: 2007/12/08(土) 20:53   No:12453     
Title: Re:ローマ文字への変換    
ちょっとした例を作ってみました。

参考になるとよいのですけれど。


#include <stdio.h>

typedef struct __roman {
char *romanChar;
int number;
} Roman;

int main(void)
{
Roman roman[] = {
{ "I", 1 }, { "IV", 4 }, { "V", 5 }, { "IX", 9 },
{ "X", 10 }, { "XL", 40 }, { "L", 50 }, { "XC", 90 },
{ "C", 100 }, { "CD", 400 }, { "D", 500 }, { "CM", 900 },
{ "M", 1000 },
};
int m, n, i;

for (n = 1; n <= 4999; n++) {
printf("%4d:", n);
m = n;
for (i = sizeof(roman) / sizeof(roman[0]) - 1; i >= 0; i--) {
while (m / roman[i].number) {
printf("%s", roman[i].romanChar);
m -= roman[i].number;
}
}
putchar('\n');
}
return 0;
}


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

Name: うしくん  ..ぴよぴよ(264ポイント)   Date: 2007/12/08(土) 21:31   No:12454     
Title: Re:ローマ文字への変換    
ありがとうございます。参考にしてみます。

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

Name: うしくん  ..ぴよぴよ(584ポイント)   Date: 2007/12/08(土) 22:42   No:12455     
Title: Re:ローマ文字への変換    

for (i = sizeof(roman) / sizeof(roman[0]) - 1; i >= 0; i--) {
while (m / roman[i].number) {
printf("%s", roman[i].romanChar);
m -= roman[i].number;
}
}


この部分がいまいちよくわかりません。
解説をしていただけないでしょうか?特にforとwhileの条件式のところが
よく理解できません。お願いします。


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

Name: box  ..比類無きプログラマー(97,379ポイント)   Date: 2007/12/08(土) 23:25   No:12456     
Title: Re:ローマ文字への変換    

> for (i = sizeof(roman) / sizeof(roman[0]) - 1; i >= 0; i--) {

sizeof(roman) / sizeof(roman[0]) は、構造体の配列 roman[] の
要素数です。有効な添字の最大値は(要素数-1)です。
このforループでは、roman[] の要素を後ろから順にたどります。

> while (m / roman[i].number) {

ローマ数字に変換したい数値 m を、1000, 900, 500, ..., 5, 4, 1 の順に
割ります。商が正ならば、m は割った数以上の値を持ちます。
ただし、例えば 1000 で割るとき、1 回だけ割って終わり、というわけではありません。
割れなくなるまで繰り返す必要があります。そのために、while 文による
ループを構成しています。

> printf("%s", roman[i].romanChar);

割った数に対応するローマ数字を出力します。

> m -= roman[i].number;

ローマ数字を出力した分を除く必要があります。


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

Name: たかぎ [URL]  ..上級者(19,339ポイント)   Date: 2007/12/09(日) 00:01   No:12457     
Title: Re:ローマ文字への変換    
> typedef struct __roman {

二重の下線で始まる識別子は予約済み識別子ですので使用することは出来ません。
本題からは外れますが、真似する人がいるといけないので、念のため指摘しておきます。


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

Name: box  ..比類無きプログラマー(97,402ポイント)   Date: 2007/12/09(日) 00:09   No:12459     
Title: Re:ローマ文字への変換    
> 二重の下線で始まる識別子は予約済み識別子ですので使用することは出来ません。

あ、そうでしたか。
後学のために、どのように修正すればよいか
教えていただけますか?


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

Name: box  ..比類無きプログラマー(97,475ポイント)   Date: 2007/12/09(日) 00:30   No:12460     
Title: Re:ローマ文字への変換    
下線で始まり、下線または大文字が続く識別子は予約済とのことですので、

typedef struct roman {

あたりで十分のようです。
どうもお騒がせいたしました。


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

Name: うしくん  ..かけだし(1,047ポイント)   Date: 2007/12/09(日) 00:39   No:12461 解決!     
Title: Re:ローマ文字への変換    
分かりやすい丁寧な解説をありがとうございます。
boxさんのを参考にして作ってみたらできました。
自分が作ってたのよりとてもスマートに出来ました。


#include <stdio.h>

typedef struct __roman {
char *romanChar;
int number;
} Roman;

int main(void)
{
Roman roman[] = {
{ "I", 1 }, { "IV", 4 }, { "V", 5 }, { "IX", 9 },
{ "X", 10 }, { "XL", 40 }, { "L", 50 }, { "XC", 90 },
{ "C", 100 }, { "CD", 400 }, { "D", 500 }, { "CM", 900 },
{ "M", 1000 },
};
int n, i;
printf("------------ OUTPUT -----------\n");
fflush(stdout);
while(1)
{
printf("Input integer (0 QUIT)====>");
fflush(stdout);
scanf("%d",&n);
if(n==0)break;
for (i =sizeof(roman) / sizeof(roman[0]) - 1; i >= 0; i--)
{
while (n/roman[i].number)
{
printf("%s", roman[i].romanChar);
n -= roman[i].number;
}
}
putchar('\n');
}
printf("------------- END -------------\n");
return 0;
}


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


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

Name: うしくん  ..かけだし(1,092ポイント)   Date: 2007/12/09(日) 00:42   No:12462 解決!     
Title: Re:ローマ文字への変換    
更新していなかったので気づきませんでした。
下線は消しておきます。
ありがとうございました。


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



Name: JugS  ..かけだし(2,250ポイント)   Date: 2007/12/05(水) 22:30   No:12337       
Title: 無題    
簡単なRPGを作ろうと思って色々構想を練っているんですが、マップの作成方法に困っていて
自分の考えでは、
1、表示画面より大きいマップを、背景として読み込む方法。

2、二次元配列でマップを宣言しておいて、for関数で番号に対応したマップチップを敷き詰める方法。

1だと通れる所と通れない所の判断が、つけにくい。
2は配列がでかくて、初期化が面倒な気がする。

個人的には2の方が良いと思うんですが、
例えば、町のマップを2種類作るとき、構造体で
typedef struct{
int map[10][10];
}TW;

TW city[2];
というのを考えたんですが、これだと配列の初期化に手間がかかりそうなので、悩んでいるんですが。

なにか良い方法はありませんか?

よろしくお願いします。




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


Name: 管理人 [URL]  ..伝説のハッカー(464,302ポイント)   Date: 2007/12/07(金) 01:03   No:12395     
Title: Re:無題    
構造体を初期化する時や配列を初期化する時は、別にループ文を使わなくても出来ます。
memsetという関数を使って、先頭のポインタから示した領域分、指定した値で初期化することが出来ます。

例えばこの通りです。


#define ITEM_MAX 1000

typedef struct{
int flag,cnt,knd;
double x,y;
}item_t;

item_t item[ITEM_MAX];

memset(item , 0, sizeof(item_t)*ITEM_MAX);
 
 
アイテムに関する構造体、item_t型で宣言した配列を全て0で初期化する時はmemsetでこのように書きます。

memset( 1 , 2 , 3);

1のアドレスから
2の値で
3のサイズ埋める

という意味になります。
この関数について詳しく知りたければググっって下さい。

http://www.google.co.jp/search?hl=ja&q=memset&lr=

構造体の構造体の構造体の・・・と深い階層まで入り組んでいて、初期化が面倒な時も、memsetを使えば全て1行で初期化できます。


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

Name: たかぎ [URL]  ..上級者(18,618ポイント)   Date: 2007/12/07(金) 11:24   No:12404     
Title: Re:無題    
主だった処理系では実用上の問題はないのですが、一応処理系不明ですので...

memset でゼロクリアするのは必ずしも正しい方法ではありません。
手前味噌ですが、
http://www.kijineko.co.jp/tech/superstitions/initialization-by-memset.html
http://www.kijineko.co.jp/node/163
でそのことを書いています。


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

Name: JugS  ..入門者(2,548ポイント)   Date: 2007/12/07(金) 23:07   No:12423     
Title: Re:無題    
たかぎさんのリンク先も参考にさせて頂きました。
わざわざありがとうございます。

管理人さんの方法だと、すべて同じ値に初期化するときはいいんですが、
自分の理想としては、
typedef struct{
int map[3][3];
}TW;
TW town[2];
と、宣言しておいて、配列の中身を

town[0].map  //1は壁、2は道
{1,0,1}
{0,0,1}
{1,0,0}

town[1].map
{1,1,1}
{0,0,0}
{0,1,0}
と上記のように、任意の値を入れて、番号に対応したマップチップを敷き詰める描画したいのですが、
このように出来ないでしょうか?




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

Name: たかぎ [URL]  ..上級者(19,249ポイント)   Date: 2007/12/08(土) 00:11   No:12424     
Title: Re:無題    
普通に初期化子を使って、
TW town[2] =

{
{
{1,0,1},
{0,0,1},
{1,0,0},
},
{
{1,1,1}
{0,0,0}
{0,1,0}
},
};


とすればよいだけではないのですか?


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

Name: JugS  ..入門者(3,252ポイント)   Date: 2007/12/08(土) 02:38   No:12430     
Title: Re:無題    
早速打ってみたのですが、
内容はtown.mapを初期化し、値を出力するだけのプログラムですが、
エラーが出ます。原因は何でしょうか?
エラー内容は 初期化子が多すぎる、宣言の構文エラー 等です。

    int a,b,c;

typedef struct{
int map[3][3];
}TW;

TW town[2] ={
{

{1,0,1},

{0,0,1},

{1,0,0}

},

{

{1,1,1},

{0,0,0},

{0,1,0}

},

};


for(a=0;a<2;a++){
for(b=0;b<3;b++){
for(c=0;c<3;c++){
printf("%d ",town[a].map[b][c]);

if(c == 2)
printf("\n");

}
}
}


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

Name: フリオ  ..上級者(18,674ポイント)   Date: 2007/12/08(土) 05:18   No:12431     
Title: Re:無題    
 
 "{}"が足りないのでは?
これだと、3*3の配列 の配列になっているような。
 


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

Name: JugS  ..入門者(3,292ポイント)   Date: 2007/12/08(土) 17:46   No:12444 解決!     
Title: Re:無題    
ご指摘ありがとうございます。

解決しました。


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



Name: skyline  ..ぴよぴよ(383ポイント)   Date: 2007/12/07(金) 22:21   No:12419       
Title: 同じ要素を持つデータのクイックソート    
クイックソートを行うために以下(三番目の投稿)のプログラムを作成しましたが、
ソートデータに同じ要素があると止まってしまいます。
どこを改善すればいいかアドバイスをください。
できれば大きな変更がない方法がいいです。
よろしくお願いします。


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


Name: box  ..比類無きプログラマー(96,084ポイント)   Date: 2007/12/07(金) 22:34   No:12421     
Title: Re:同じ要素を持つデータのクイックソート    
申し訳ありませんが、以下の点を考慮したコードを投稿していただけますか?

1)ヘッダーファイルやmain関数など、実行形式を作るのに必要な情報をすべて提示する。
2)コードの字下げは全角空白でなく、タブやスペースを使い、
  HTMLの<pre>タグと</pre>タグで挟む(< と >は、半角)。


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

Name: skyline  ..ぴよぴよ(933ポイント)   Date: 2007/12/07(金) 22:53   No:12422     
Title: Re:同じ要素を持つデータのクイックソート    
失礼いたしました。見た目だけを考え、全角スペースで代用していました。
再びよろしくお願いします。

=========================================================================


#include<stdio.h>
void quick_sort(int data[],int head,int tail);

int main(void){
int data1[] = {10, 15, 13, 19, 8, 6, 3, 5, 11, 21};
int data2[] = {4, 21, 1, -15, -21, 6, 4, 8, 2, 19};
int data3[] = {5, 3, 2, -4, -6, 11, -12, -13, -22, 17};

int i,j,k;
int *p;

for(k=0;k<3;k++){
if(k==0){
p=data1;
}else if(k==1){
p=data2;
}else{
p=data3;
}
quick_sort(p,0,9);
printf("data %d = ",k+1);
for(i=0;i<=9;i++){
printf("%d ",*(p++));
}
printf("\n");
}
return 0;
}

void quick_sort(int data[],int head,int tail){
int x,y,st,tmp;
if(tail-head<=1){
return;
}else{
st=data[head];
x=head;
y=tail;
while(x<y){
while(data[x]<st){
x++;
}
while(data[y]>st){
y--;
}
if(x<y){
tmp=data[x];
data[x]=data[y];
data[y]=tmp;
}
}

if(x==y){
quick_sort(data,head,x-1);
quick_sort(data,x+1,tail);
}else{
quick_sort(data,head,y);
quick_sort(data,x,tail);
}

}
}



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

Name: box  ..比類無きプログラマー(96,770ポイント)   Date: 2007/12/08(土) 00:12   No:12425     
Title: Re:同じ要素を持つデータのクイックソート    
ちょっと書き換えてみました。



#include <stdio.h>

#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))

void quick_sort(int *data, int head, int tail);

int main(void)
{
int data[][10] = {
{10, 15, 13, 19, 8, 6, 3, 5, 11, 21},
{ 4, 21, 1, -15, -21, 6, 4, 8, 2, 19},
{ 5, 3, 2, -4, -6, 11, -12, -13, -22, 17}
};
int i, j;

for (i = 0; i < SIZE(data); i++) {
quick_sort(data[i], 0, SIZE(data[i])-1);
printf("data %d = ", i + 1);
for (j = 0; j < SIZE(data[i]); j++)
printf("%d ", data[i][j]);
printf("\n");
}
return 0;
}

void quick_sort(int *data, int head, int tail)
{
int x, y, st, tmp;

st = data[head];
x = head;
y = tail;
do {
while (data[x] < st)
x++;
while (data[y] > st)
y--;
if (x <= y) {
tmp = data[x];
data[x] = data[y];
data[y] = tmp;
x++;
y--;
}
} while (x <= y);
if (head < y)
quick_sort(data, head, y);
if (x < tail)
quick_sort(data, x, tail);
}


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

Name: 管理人 [URL]  ..伝説のハッカー(464,488ポイント)   Date: 2007/12/08(土) 01:30   No:12426     
Title: Re:同じ要素を持つデータのクイックソート    
よかったらアプリの方もご覧下さい。
http://dixq.net/sort.html


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

Name: skyline  ..ぴよぴよ(947ポイント)   Date: 2007/12/08(土) 17:27   No:12443 解決!     
Title: 回答ありがとうございました    
boxさん
ソースを参考にいろいろと学んでみます。
上のようにsizeofを使うと、二次元配列の列のサイズを求めれるんですね。
クイックソートの関数も断然わかりやすいです。
ありがとうございました。



管理人さん
アプリのほうも見て学びたいと思います。
ありがとうございました。


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



Name: zzz  ..ぴよぴよ(122ポイント)   Date: 2007/12/08(土) 12:01   No:12434       
Title: いまさら    
初歩にも至らない質問で申し訳ないです。
C言語にはC++やらVCやらありますが、
何が違うのでしょうか?
教えてもらえたら幸いです


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


Name: たかぎ [URL]  ..上級者(19,287ポイント)   Date: 2007/12/08(土) 12:37   No:12436     
Title: Re:いまさら    
> C言語にはC++やらVCやらありますが、

ありません。
CとC++は別物ですし、VCというのは何のことかわかりませんがVisual C++の意味なら単なる製品名です。


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

Name: zzz  ..ぴよぴよ(153ポイント)   Date: 2007/12/08(土) 15:11   No:12438 解決!     
Title: ありがとうございます    
わかりました
VCってVisual C++のつもりです
ありがとうございました


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



Name: C初心者  ..ぴよぴよ(106ポイント)   Date: 2007/12/07(金) 14:29   No:12410       
Title: 予約語 命令語    
int=integer
stdio standard input output などはわかりましたが、
main (void) のvoid
printfのf以降など  省略された英語がわかりません

こういった コマンドの 省略されていない 英語記述されているページか
解説書があれば教えてください。
気になってなかなか すすみません。


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


Name: box  ..比類無きプログラマー(95,833ポイント)   Date: 2007/12/07(金) 14:38   No:12411     
Title: Re:予約語 命令語    
> main (void) のvoid

「空(から)」「無」などの意味を持つ単語です。省略形ではありません。

> printfのf以降など  省略された英語がわかりません

たぶん、「書式(Format)を使った出力(PRINT)」あたりから
printfと名づけているのでありましょう。

名前を気にすることは、局面によっては非常に大切です。
しかし、C言語の勉強を進めていく中で、
もっと気にしたり覚えたりする必要があることは
他にたくさんあると思います。


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

Name: 句読点  ..ぴよぴよ(118ポイント)   Date: 2007/12/08(土) 12:24   No:12435     
Title: Re:予約語 命令語    
>C初心者
となっていますが、日本語も初心者ですね。
句点が2個、読点は1個しかなく、文の途中に空白が入っているなど、まともな日本語ではありません。

C言語の勉強の前に、下のページで「句読点」の勉強をしてください。
http://ja.wikipedia.org/wiki/%E5%8F%A5%E8%AA%AD%E7%82%B9


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



Name: マイク  ..ぴよぴよ(23ポイント)   Date: 2007/12/07(金) 12:17   No:12407       
Title: 無題    
フーリエ変換をしたいのですが、実行したいファイルがEXCELなんでテキストデータへ変換したいと考えています。

そのようなことができるプログラムを教えて下さい。


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


Name: box  ..比類無きプログラマー(95,749ポイント)   Date: 2007/12/07(金) 12:24   No:12408     
Title: Re:無題    
Excelで当該ファイルを開き、csv形式で保存します。

保存したファイルをもとにフーリエ変換を行う
プログラムを書きます。

Excel形式からテキストに変換するプログラムを
書くより楽でしょう。


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

Name: たかぎ [URL]  ..上級者(19,180ポイント)   Date: 2007/12/07(金) 13:23   No:12409     
Title: Re:無題    
処理系不明ではどうしようもありませんね。
boxさんが書かれている通り、Excelを操作して、あらかじめCSV等に変換しておくのがよいでしょう。

ちなみに CSV の仕様は
http://www.ietf.org/rfc/rfc4180.txt
です。
ASCIIしか使えないような気がしますが、片目を閉じて読むことをお勧めします。



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

Name: マイク  ..ぴよぴよ(734ポイント)   Date: 2007/12/07(金) 15:44   No:12412     
Title: Re:無題    
一応ファイルはCSVでまとめています。(下記参照)

出力電圧
-3.5058594
-3.3886719
-3.3496094

ファイル名"text.csv"

これを離散フーリエしたいので参考となるプログラムです。


/*
* 離散フーリエ変換(DFT: Discrete Fourier Transform) &
* 逆離散フーリエ変換(IDFT:
Inverse Discrete Fourier Transform)
*/
#include <stdio.h>
#include <math.h>

#define PI 3.1415926
#define MAX 512

void dft(double x[MAX], double y[MAX]);
void inverse_dft(double x[MAX], double y[MAX]);

int main(int argc, char *argv[])
{
double x[MAX],y[MAX],value;
int i;
FILE *fp,*fp2;

if(argc!=3){
printf("Usage is ...\n");
printf("trans.exe <input file> <output file>\n");
return(-1);
}

/* ファイル読込み */
if((fp = fopen("text.csv","r"))
== NULL){
return(-1);
}
if((fp2=fopen("outcome.txt","w")) == NULL){
return(-1);
}

for(i=0; i<MAX; i++){
fscanf(fp,"%lf\n",&value);
x[i] = value; /* x :実数成分 */
y[i] = 0; /* y :虚数成分 */
}



/* ここからDFT */
dft(x,y);
for(i=0; i<MAX; i++){
// fprintf(fp2,"%f,%f\n",x[i],y[i]);
fprintf(fp2,"% .5f,% .5f\n",((double)100/MAX)*i,sqrt(x[i]*x[i]+y[i]*y[i])*2/MAX);
}

/* ここからIDFT
inverse_dft(x,y);
for(i=0; i<MAX; i++){
printf("%f\t%f\n",x[i],y[i]);
}*/

fclose(fp);
fclose(fp2);
return(0);
}

void dft(double x[MAX],
double y[MAX])
{
int i,j;
double tmp_x[MAX],tmp_y[MAX];

/* データを一旦コピー
*/
for (i=0; i<MAX; i++) {
tmp_x[i] = x[i];
tmp_y[i] = y[i];
}

for (i=0; i<MAX; i++) {
x[i] = 0;
y[i] = 0;
for (j=0; j<MAX;
j++) {
x[i] += tmp_x[j]*cos(2*PI*i*j/MAX) + tmp_y[j]*sin(2*PI*i*j/MAX);
y[i] += -tmp_x[j]*sin(2*PI*i*j/MAX) + tmp_y[j]*cos(2*PI*i*j/MAX);

}
}
}

void inverse_dft(double x[MAX], double y[MAX])
{
int i,j;
double
tmp_x[MAX],tmp_y[MAX];

/* データを一旦コピー */
for (i=0; i<MAX;
i++) {
tmp_x[i] = x[i];
tmp_y[i] = y[i];
}

for (i=0; i<MAX;
i++) {
x[i] = 0;
y[i] = 0;
for (j=0; j<MAX; j++) {
x[i] +=
tmp_x[j]*cos(2*PI*i*j/MAX) - tmp_x[j]*sin(2*PI*i*j/MAX);
y[i] += tmp_y[j]*sin(2*PI*i*j/MAX)
+ tmp_y[j]*cos(2*PI*i*j/MAX);
}
x[i] /= MAX;
y[i] /= MAX;
}
}


長いですが、計算の箇所は理解できますが、ファイル読み込みの箇所がイマイチ理解できません。

本当にこれでいいのかと思うのですが。。。

何か気づいた点あれば教えてください。


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

Name: box  ..比類無きプログラマー(95,847ポイント)   Date: 2007/12/07(金) 16:23   No:12413     
Title: Re:無題    
> for(i=0; i<MAX; i++){
> fscanf(fp,"%lf\n",&value);

このプログラムでは、512個以上のデータが必要です。
そういう仕様でしょうか?


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

Name: マイク  ..ぴよぴよ(756ポイント)   Date: 2007/12/07(金) 22:06   No:12418     
Title: Re:無題    
そうです。

ある信号を処理しようと思っているので、かなり取っています。


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

Name: box  ..比類無きプログラマー(95,985ポイント)   Date: 2007/12/07(金) 22:26   No:12420     
Title: Re:無題    
それで、今は、

-3.5058594
-3.3886719
-3.3496094
.
.
.

という内容の512個以上のデータを、

for(i=0; i<MAX; i++){
fscanf(fp,"%lf\n",&value);

というコードで読み込んでいるのですよね。
イマイチ理解できないのは、どのあたりでしょうか?


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

Name: マイク  ..かけだし(1,253ポイント)   Date: 2007/12/08(土) 02:04   No:12428     
Title: Re:無題    
参考になりそうなものを探していたのでうまく伝わらないかもしれませんが

前半部分のBポイントです(下記参照)


int main(int argc, char *argv[]) ← @このargc argvの意味は?
{
double x[MAX],y[MAX],value;
int i;
FILE *fp,*fp2;

if(argc!=3){
printf("Usage is ...\n");              ← Aここのif文の意味は?
printf("trans.exe <input file> <output file>\n");
return(-1);
}

/* ファイル読込み */
if((fp = fopen("text.csv","r"))
== NULL){
return(-1);                 ← Bこれで読み込めるのか?
}
if((fp2=fopen("outcome.txt","w")) == NULL){
return(-1);
}

for(i=0; i<MAX; i++){
fscanf(fp,"%lf\n",&value);
x[i] = value; /* x :実数成分 */
y[i] = 0; /* y :虚数成分 */
}

特に@とBは関連性が高そうで

資料ではBの箇所は

...=fopen(argv[1] , "r" ) ...

となっていました。

この点で「これではどのファイルを使うのかが解らないし、かといって main関数で argv[]となっているし・・・」

と混乱してしまったのです。

信号解析には必要なので出来る限り理解したいのでアドバイスお願いします。


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

Name: box  ..比類無きプログラマー(96,954ポイント)   Date: 2007/12/08(土) 10:28   No:12432     
Title: Re:無題    

> int main(int argc, char *argv[]) ← @このargc argvの意味は?

実行時に与えるコマンドライン引数のための変数です。
argcは引数の数を、argvは各引数文字列へのポインタの配列です。

このプログラムでは、

プログラム名 入力ファイル名 出力ファイル名 <Enter>

のように実行しますね。このとき、
argc :3
argv[0]:"プログラム名" の先頭文字のアドレス
argv[1]:"入力ファイル名" 同上
argv[2]:"出力ファイル名" 同上

となります。

> if(argc!=3){
> printf("Usage is ...\n");              ← Aここのif文の意味は?
> printf("trans.exe <input file> <output file>\n");

というわけで、実行時に、

プログラム名 入力ファイル名 出力ファイル名 <Enter>

という形式で入力していなければ、プログラムの使い方を
出力して終了するようになっています。

> /* ファイル読込み */
> if((fp = fopen("text.csv","r"))
> == NULL){
> return(-1);                 ← Bこれで読み込めるのか?

入力ファイルを "test.csv" で固定してよければ、このように書いてください。
ただ、今回の場合はコマンドライン引数で指定したいようですので、

if((fp = fopen(argv[1],"r"))

と書くのが本筋でしょうね。


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

Name: マイク  ..かけだし(1,282ポイント)   Date: 2007/12/08(土) 11:31   No:12433     
Title: Re:無題    
よくわかりました!

一度試してみたいと思います。感謝です!


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



Name: CROSS  ..かけだし(1,126ポイント)   Date: 2007/12/08(土) 01:57   No:12427       
Title: C言語について質問です    
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int sleep(unsigned long x);

int main(void)
{
int count = 0;
int success = 0;
int x;
int no[4];
int fal[4];
int inpTable[4][2];
int succount = 0;
int falcount = 0;
int i, j;
clock_t start, end;

srand(time(NULL));
start = clock();

for (i = 0; i < 5; i++){
printf(" ◎問題 %dです\n", i + 1);

no[i] = 1000 + rand() % 9000;

printf(" %d", no[i]);
fflush(stdout);
sleep(1000);
do{
printf("\r[%2d]入力せよ:", count + 1);
scanf("%d", &x);

if (x != no[i]){
printf("\a間違いです。\n");
falcount++;
}
else{
printf("正解です。\n");
success++;
succount++;
}

inpTable[i][count] = x;
count++;
}while (count < 3 && succount == 0);

count = 0;
succount = 0;
fal[i] = falcount;
falcount = 0;
}

end = clock();

printf("++++++++++++++++++++++処理結果++++++++++++++++++++++\n");
printf("5回実行 %d回成功しました。\n", success);
printf("%.1f秒でした。\n", (double)(end - start) / CLOCKS_PER_SEC);
printf("++++++++++++++++++++++++++++++++++++++++++++++++++++\n");

for (i = 0; i < 5; i++){
if (fal[i] == 3)
printf("問題%d   間違いです\n", i + 1);
else
printf("問題%d  %d回目で正解です\n", i + 1, fal[i] + 1);

printf("  値(%d)", no[i]);
if (fal[i] == 0)
printf(" %d", inpTable[i][0]);
else{
for (j = 0; j <= fal[i]; j++){
printf(" %d", inpTable[i][j]);
if (j != fal[i])
printf(" ,");
}
}
printf("\n\n");
}

return 0;
}

/* xミリ秒経過するのを待つ */
int sleep(unsigned long x)
{
clock_t c, s = clock();

do{

if ((c = clock()) == (clock_t)-1)
return 0;
}while (1000UL * (c - s) / CLOCKS_PER_SEC < x);

return 1;
}

-----------------------------------------------------------------------------------------
課題で、記憶ゲームを作成しています。
ルールとしては、1秒間の間表示される4文字の数字を見て入力する。3回間違えるか、一回正解したらクリア。を、5回くりかえし、最後にその履歴を表示するというものです。

しらべてみたところ、なぜか最初のfor文の後に各配列の0番目の要素に格納されている数がおかしくなっているようなのですが、自分ではどうしてもダメな理由が発見できず、質問させていただきました。

お手数ですが、ご指摘の程よろしくお願いいたします。


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


Name: フリオ  ..上級者(18,653ポイント)   Date: 2007/12/08(土) 02:21   No:12429     
Title: Re:C言語について質問です    
 
 a[4] と宣言された配列は、a[0]~a[3] です。


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



Name: リラン  ..ぴよぴよ(285ポイント)   Date: 2007/12/06(木) 21:08   No:12374       
Title: 質問なんですが    
時間(秒)を画面に表示したいのですがやり方が分かりません。
たぶんGetNowCount()を使うのだと思うのですが・・・

回答よろしくお願いします。

それと処理速度を一定にした方がいいのでしょうか?


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


Name: 管理人 [URL]  ..伝説のハッカー(464,151ポイント)   Date: 2007/12/07(金) 00:55   No:12394     
Title: Re:質問なんですが    
以前GetNowCountを呼んだ時の値と、今の瞬間GetNowCountを呼んだ時の値をひくと、その間のミリ秒が得られる事を利用します。
ミリ秒とは1/1000秒のことです。
http://dixq.net/g/#s5
こちらで処理速度を一定にする方法を書いていますのでよければご覧下さい。


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

Name: バグ  ..比類無きプログラマー(65,785ポイント)   Date: 2007/12/07(金) 09:10   No:12402     
Title: Re:質問なんですが    
私が作ったクラスです。
Main.cppがサンプルプログラムで、Timer.cppとTimer.hがクラスのソースです。
DxLibは使用していませんが、当然、DxLibとの併用も可能です。
まぁ、こんなのもあります…という感じで…(^_^;)
Windows.hを使用しない、標準関数のみのバージョンもありますので、もし希望があれば公開しますね。


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

Name: リラン  ..ぴよぴよ(323ポイント)   Date: 2007/12/07(金) 18:02   No:12415     
Title: Re:質問なんですが    
回答ありがとうございます。

管理人さんがおっしゃったミリ秒が1/1000秒ってことは
ミリ秒が1000で割れたときにcounter++して
そのcounterを画面に表示すれば時間(秒)を表示することが
できるということですか?