C言語何でも質問掲示板


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

規約と使い方

 
   PostMessageの代わりっ ....   
     ・[4093] keichan 
     ・[4094] ヒロ 
     ・[4097] ヒロ 
   new演算子って   
     ・[3971] keichan 
     ・[3972] バグ 
     ・[4089] ヒロ 
   ウィンドウが表示され ....   
     ・[4072] 管理人 
     ・[4075] むつ 
     ・[4078] 管理人 
     ・[4083] 名無しさん 
     ・[4085] 名無しさん 
     ・[4088] 管理人 
   ★2007年 ROLEX -ロレ ....   
   無題   
     ・[3955] バグ 
     ・[3957] 管理人 
     ・[4077] hiroki 
     ・[4079] 管理人 
   つまらない質問ですが ....   
     ・[4045] 管理人 
     ・[4065] きつね 
     ・[4073] 管理人 
   パソコンのメーカーに ....   
     ・[4059] 管理人 
     ・[4060] バグ 
     ・[4067] ま〜く 
     ・[4069] ダッシュ 
     ・[4070] ダッシュ 
     ・[4071] 管理人 
   最小二乗法に関する課 ....   
     ・[4063] box 
     ・[4064] ウィーヤ 
   sinのグラフについて   
     ・[3981] box 
     ・[3985] 管理人 
     ・[3986] にゃんこ 
     ・[3988] 管理人 
     ・[3990] 管理人 
     ・[3991] 管理人 
     ・[3993] にゃんこ 
     ・[3995] box 
     ・[3999] にゃんこ 
     ・[4002] 管理人 
     ・[4056] にゃんこ 
   お願いがあります   
     ・[4018] 管理人 
     ・[4020] ダッシュ 
     ・[4021] 管理人 
     ・[4055] 夢霧 
   課題を教えてください ....   
     ・[4025] バグ 
     ・[4026] ひろし 
     ・[4027] バグ 
     ・[4028] ひろし 
     ・[4029] バグ 
     ・[4030] ひろし 
     ・[4031] バグ 
     ・[4032] ひろし 
     ・[4034] バグ 
     ・[4035] ひろし 
     ・[4036] ま〜く 
     ・[4037] バグ 
     ・[4038] Justy 
     ・[4042] ま〜く 
     ・[4043] バグ 
     ・[4044] Justy 
     ・[4046] 管理人 
     ・[4049] バグ 
     ・[4050] バグ 
     ・[4053] Justy 
     ・[4054] バグ 
   大きな値の階乗につい ....   
     ・[4017] box 
     ・[4019] 管理人 
     ・[4023] 女郎花 
     ・[4039] box 
     ・[4040] 女郎花 
     ・[4052] 管理人 
   効率のよいプログラム ....   
     ・[4006] 管理人 
     ・[4007] sign 
     ・[4008] 管理人 
     ・[4009] sign 
     ・[4014] mas 
   ファイル入力   
     ・[3871] box 
     ・[3872] 大阪 
     ・[3873] box 
     ・[3874] 大阪 
     ・[3886] box 
     ・[3893] 大阪 
     ・[3910] 管理人 
     ・[3949] 大阪 
     ・[3961] 管理人 
     ・[3964] 大阪 
     ・[3966] 管理人 
     ・[4010] 大阪 
     ・[4013] 管理人 
   関数の受け渡し   
     ・[3827] a 
     ・[3828] ヒロ 
     ・[3833] ま〜く 
     ・[3839] mai 
     ・[3840] box 
     ・[3841] mai 
     ・[3845] Yuki 
     ・[3856] mai 
     ・[3860] box 
     ・[3862] mai 
     ・[3864] ダッシュ 
     ・[3865] ダッシュ 
     ・[3867] box 
     ・[3868] mai 
     ・[3870] mai 
     ・[3884] box 
     ・[3895] mai 
     ・[3950] mai 
     ・[3952] box 
     ・[3959] mai 
     ・[3967] 管理人 
     ・[3968] ま〜く 
     ・[3969] 管理人 
     ・[4011] mai 
     ・[4012] 管理人 
   初期設定   
     ・[4001] 管理人 
   やっと終わり(>_&l ....   
     ・[3918] 管理人 
     ・[3994] ダッシュ 
     ・[4000] 管理人 
   座標比較   
     ・[3819] box 
     ・[3847] 管理人 
     ・[3876] しゅう 
     ・[3879] keichan 
     ・[3901] しゅう 
     ・[3907] 管理人 
     ・[3908] 管理人 
     ・[3924] しゅう 
     ・[3925] box 
     ・[3926] しゅう 
     ・[3928] box 
     ・[3941] 管理人 
     ・[3942] 管理人 
     ・[3954] しゅう 
     ・[3958] フリオ 
     ・[3960] フリオ 
     ・[3963] 管理人 
     ・[3965] フリオ 
     ・[3998] しゅう 
   ゲーム   
     ・[3733] バグ 
     ・[3735] 霧子 
     ・[3740] 霧子 
     ・[3747] box 
     ・[3757] 霧子 
     ・[3779] 霧子 
     ・[3783] 管理人 
     ・[3789] 霧子 
     ・[3793] 管理人 
     ・[3797] 霧子 
     ・[3807] バグ 
     ・[3842] バグ 
     ・[3843] 管理人 
     ・[3858] 霧子 
     ・[3896] 霧子 
     ・[3899] 管理人 
     ・[3900] 霧子 
     ・[3902] 管理人 
     ・[3903] 管理人 
     ・[3916] 霧子 
     ・[3919] 管理人 
     ・[3920] 管理人 
     ・[3927] バグ 
     ・[3945] 管理人 
     ・[3946] バグ 
     ・[3947] 霧子 
     ・[3951] フリオ 
     ・[3962] 管理人 
     ・[3992] 霧子 
   課題が進まなくて困っ ....   
     ・[3974] keichan 
     ・[3975] keichan 
     ・[3976] tower 
     ・[3977] keichan 
     ・[3984] tower 
     ・[3987] keichan 
   フローチャート   
     ・[3956] 管理人 
     ・[3982] かすみ 
   宿題なのですが   
     ・[3904] 管理人 
     ・[3905] 管理人 
     ・[3906] 管理人 
     ・[3922] 女郎花 
     ・[3923] box 
     ・[3938] 女郎花 
     ・[3943] 管理人 
   プログラムから別のプ ....   
     ・[3933] ヒロ 
     ・[3934] Yuki 
     ・[3936] ヒロ 
     ・[3937] box 
     ・[3939] ヒロ 
   リバーシのアルゴリズ ....   
     ・[3929] keichan 
     ・[3931] box 
     ・[3935] バグ 
   宿題がわかりません(; ....   
     ・[3881] keichan 
     ・[3882] あゆみ 
     ・[3883] keichan 
     ・[3887] box 
     ・[3888] バグ 
     ・[3889] box 
     ・[3892] フリオ 
     ・[3894] フリオ 
     ・[3909] binjo 
     ・[3915] 管理人 
     ・[3930] box 
   無題   
     ・[3835] P 
     ・[3837] GPGA 
     ・[3846] 管理人 
     ・[3859] P 
     ・[3914] 管理人 
   超初心者です。どうか ....   
     ・[3878] keichan 
     ・[3912] 管理人 
   やれることはやりまし ....   
     ・[3866] box 
     ・[3890] ヒカル 
     ・[3891] box 
     ・[3911] 管理人 
   繰り返しの問題   
     ・[3534] box 
     ・[3538] たく 
     ・[3541] フリオ 
     ・[3551] たく 
     ・[3897] たく 
   main関数について   
     ・[3853] box 
     ・[3880] アコ 
     ・[3885] box 
   プリントでの”の使用 ....   
     ・[3855] box 
     ・[3857] hiro 
   2値化プログラム   
     ・[3838] バグ 
     ・[3844] 若旦那 
     ・[3849] box 
     ・[3851] 若旦那 
   無題   
     ・[3706] Yuki 
     ・[3713] 若旦那 
     ・[3715] Yuki 
     ・[3791] 若旦那 
     ・[3848] box 
     ・[3850] 若旦那 
   ルーレット   
     ・[3812] kazu 
     ・[3816] バグ 
     ・[3821] GPGA 
     ・[3836] kazu 
   お願いします!!   
     ・[3832] box 
   VC++のエディタ変更   
     ・[3820] keichan 
     ・[3822] ヒロ 
     ・[3823] GPGA 
     ・[3824] ヒロ 
     ・[3830] GPGA 
     ・[3831] ヒロ 
   解説について   
     ・[3716] Yuki 
     ・[3744] mai 
     ・[3746] box 
     ・[3755] mai 
     ・[3756] box 
     ・[3766] mai 
     ・[3768] box 
     ・[3770] mai 
     ・[3772] box 
     ・[3798] mai 
     ・[3799] box 
     ・[3804] mai 
     ・[3809] box 
     ・[3813] mai 
     ・[3818] box 
     ・[3825] mai 
   無題   
     ・[3750] バグ 
     ・[3751] すぷりんたー 
     ・[3753] バグ 
     ・[3754] バグ 
     ・[3758] すぷりんたー 
     ・[3762] バグ 
     ・[3763] box 
     ・[3764] バグ 
     ・[3777] すぷりんたー 
     ・[3780] 管理人 
     ・[3794] すぷりんたー 
     ・[3795] Hermit 
     ・[3811] すぷりんたー 

Name: ヒロ  ..かけだし(1,101ポイント)   Date: 2007/01/29(月) 16:00   No:4090       
Title: PostMessageの代わりって    
API関数のPostMessageの代わりに使える標準関数を探してます。
仕事で使っているプログラムなので、詳しい説明はできないんですが・・・
「キーを押すと別のプログラムファイル内の押したキーに対応したクラスが動きだす」
ようなプログラムをLinux上で使いたい為、API関数が使えないんです。

説明不足で申し訳ありませんが、よろしくお願いします。


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


Name: keichan  ..中級者(11,583ポイント)   Date: 2007/01/29(月) 16:16   No:4093     
Title: Re:PostMessageの代わりって    
Linuxでの開発は行ったことがないので、確証はありませんが

"Linux プロセス間 通信"でググったらわかりやすそうなのがちらほら出てきました。

http://72.14.235.104/search?q=cache:OYlEtk87OkAJ:web-old.turbolinux.co.jp/world/library/features/c_magazine/vol_05.html+linux+%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E9%96%93%E3%80%80%E9%80%9A%E4%BF%A1&hl=ja&gl=jp&ct=clnk&cd=3

この辺とか、分かりやすそうではないでしょうか?

WindowsのPostMessageに近い扱い方といえば、Linuxではメッセージキューを利用した
方法になるのではないかと思います。

ご参考までに。


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

Name: ヒロ  ..かけだし(1,156ポイント)   Date: 2007/01/29(月) 16:28   No:4094     
Title: Re:PostMessageの代わりって    
keichanさん、いつもありがとうございます。
標準関数としては無いですか?
ANCI対応の関数だったら使えるんで、
依存関係になっていれば普通の関数としても扱えると思うんで、
もし関数があれば・・・


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

Name: ヒロ  ..かけだし(1,244ポイント)   Date: 2007/01/29(月) 17:49   No:4097 解決!     
Title: Re:PostMessageの代わりって    
keichanさんありがとうございました!
チャレンジしてなんとか通りました!


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



Name: ヒロ  ..ぴよぴよ(882ポイント)   Date: 2007/01/26(金) 09:35   No:3970       
Title: new演算子って    
こんにちわ、毎度毎度すみません。

new演算子の事がよくわかりません!!
サルでもわかる様な詳しくわかりやすく解説しているサイト知ってる人いませんか?


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


Name: keichan  ..中級者(10,936ポイント)   Date: 2007/01/26(金) 10:03   No:3971     
Title: Re:new演算子って    
new演算子の何が理解できないのかが書かれていませんので、掴みきれていませんが。。

http://www1.kcn.ne.jp/~robe/cpphtml/index.html
上記アドレスの [第1部 先ずは基本から]第71章〜第73章をご覧になれば
"どのように使う"のかがわかると思います。


そうではなくて、new演算子を使ったときに内部で何が起こっているのかを知りたいのであれば
http://www.jisc.go.jp/
から JIS検索 で JISX3014 を検索して該当箇所を探してみてください。


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

Name: バグ  ..上級者(23,324ポイント)   Date: 2007/01/26(金) 11:21   No:3972     
Title: Re:new演算子って    
私の個人的な解釈なので間違っているかもしれませんが、new演算子って、実体付きの動的メモリ確保っていう感じで理解してます。なので、私はクラスを動的に用意したい時などによく使用しています。
同じように動的にメモリを確保するmalloc関数との違いは、中身の有無だと思ってもらえたらいいのではないかと思います。


>>keichanさん
おぉ、このページ良いですね♪(^o^)
早速ブックマークしておきましたよ。まだまだ初心者なので、こういうページは本当に助かります。


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

Name: ヒロ  ..ぴよぴよ(977ポイント)   Date: 2007/01/29(月) 15:48   No:4089 解決!     
Title: Re:new演算子って    
返事が遅れてしまい、本当に申し訳ありません。

keichanさん、バグさん、本当にありがとうございました。

おかげでなんとか理解できるようになりました。
本当にわかりやすいサイトですね!
私もブックマークしました!


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



Name: 名無しさん  ..ぴよぴよ(585ポイント)   Date: 2007/01/28(日) 22:46   No:4066       
Title: ウィンドウが表示されませんorz    
include "DxLib.h"

struct CharaData{
int x;
int y;
int mae,hidari,migi,tama;
};

struct CharaData jikidata;

int jikinomuki=0;
int statusboard=LoadGraph("StatusBoard.png");

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);// ウインドウモードに変更
SetGraphMode(600,480,16);//ウィンドウの大きさ
if(DxLib_Init()==-1) return(-1);//DXライブラリ初期化

WaitKey();
DxLib_End();//DXライブラリ終了
return(0);//終了
}


エラーの表示がでてないのにウィンドウが表示されません。
PCの動作が重くなっているので実行はされてると思うのですが・・・
誰かわかる人いましたら解決策を教えてください。


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


Name: 管理人  ..ハッカー(179,544ポイント)   Date: 2007/01/29(月) 00:13   No:4072     
Title: Re:ウィンドウが表示されませんorz    
PCがないので実行していませんが、記述は間違ってないんじゃないかと思います。
ビデオカードのドライバの事も絡んできますので
本家で質問されてはいかがでしょうか。
明日でよければ私の方でチェックしてみまる。


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

Name: むつ  ..ぴよぴよ(2ポイント)   Date: 2007/01/29(月) 01:29   No:4075     
Title: Re:ウィンドウが表示されませんorz    
当方の経験より。
画面のプロパティ→設定→画面の色
当方の環境では、24ビットではウィンドウ表示されないので16ビットに変更しました。


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

Name: 管理人 [URL]  ..ハッカー(179,660ポイント)   Date: 2007/01/29(月) 08:38   No:4078     
Title: Re:ウィンドウが表示されませんorz    
おぉ!むつさん、2ポイントって掲示板設立以来最低ポイントです^^;

DXライブラリ本家の掲示板はココです。
http://hpcgi2.nifty.com/natupaji/aska.cgi


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

Name: 名無しさん  ..ぴよぴよ(561ポイント)   Date: 2007/01/29(月) 10:37   No:4083     
Title: Re:ウィンドウが表示されませんorz    
16ビットに変更したのですが変わりませんでした;
本家に質問してみます(・ω・`)


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

Name: 名無しさん  ..ぴよぴよ(639ポイント)   Date: 2007/01/29(月) 12:59   No:4085 解決!     
Title: 解決しました!    
DxLib_Init関数の後に int statusboard=LoadGraph("StatusBoard.png"); をもっていったら
うまくいきました!
DxLib_Init関数より前にLoadGraph関数を使用したら
エラーが起こるみたいです。


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

Name: 管理人 [URL]  ..ハッカー(180,763ポイント)   Date: 2007/01/29(月) 15:39   No:4088     
Title: Re:解決しました!    
あ、ホントですね^^;

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



Name: 佐木 [URL]  ..ぴよぴよ(250ポイント)   Date: 2007/01/29(月) 14:53   No:4086       
Title: ★2007年 ROLEX -ロレックスN級最高等級時計大量入荷超人気!!!★    
★2007年 ROLEX -ロレックスN級最高等級時計大量入荷超人気!!!★
HAPPY NEW YEAR!!
2007年ブルガリ腕時計推薦★!!

在庫処分価格なのでヴコーチが激安です。

★1月27日2007年 ROLEX -ロレックスN級最高等級時計大量入荷超人気!!!★
  推薦★超人気!!!★、送料無料!!

★1月10日2007年最新作ヴィトン財布新品、新素材入荷!!
  推薦★推薦★推薦★、送料無料!!

★1月18日2006年最新作ヴィトン バック、財布新品入荷!!
  皆様に感謝の気持ちを込めて、送料無料!!

★12月14 マフラー&ニット帽のクリスマス特集 、手袋、ハンドルカバー…… 大量入荷!推薦!!
  2006年最も人気がある商品
★11月28日クロエ(CHLOE)バック 再入荷!
  2006年最も人気がある商品

■HP:http://www.lvyahoo.net/
■店長:佐木
■連絡先:lvyahoo@188.com or info@lvyahoo.net



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




Name: hiroki  ..ぴよぴよ(225ポイント)   Date: 2007/01/25(木) 21:29   No:3953       
Title: 無題    
はじめまして。
今プログラミングの授業で下の問題に取り組んでいるんですが、どうしていいのかいまいちよくわりません。
もしよかったら、どういうふうにやったらいいのか教えていただけませんか???


「以下の条件を満たすプログラムを作成する..

なんらかのデータを扱うプログラムであり(非常にユニークなものの場合は加点がある),データをファイルから読み込む機能と,書き込む機能がある.

自分の持っている音楽CD(コレクションしているものなど)を管理するデータベースプログラム
新しいデータ(もしくはデータの一部分)を追加する機能,特定のデータ(もしくはデータの一部分)を削除する機能がある
データのソート(並び替え)を行う機能がある. ソートを行うことが適切でないデータの場合(音声データや画像データなど)は, そのデータにあったなんらかの処理を加える機能でも良い
データから特定の部分のみを取り出して表示(もしくは保存)する機能がある
構造体を使用している
構造体のポインタを引数として持つ関数を使用している」





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


Name: バグ  ..上級者(23,141ポイント)   Date: 2007/01/25(木) 22:14   No:3955     
Title: Re:無題    
hirokiさん自身でどこまで出来ましたか?
「全く出来ていない」とか「全く分からない」というのは無しです。


Name: 管理人 [URL]  ..ハッカー(175,617ポイント)   Date: 2007/01/25(木) 23:00   No:3957     
Title: Re:無題    
ちょっと多すぎて、どこがわからないのかわかりません・・。

質問を限定してください。

プログラムの内容までまず掘り下げてください。自分の詰まったところでもう一度投稿してください。


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

Name: hiroki  ..ぴよぴよ(664ポイント)   Date: 2007/01/29(月) 04:49   No:4077 解決!     
Title: Re:無題    
返事遅れてもうしわけございません。
自分なりにできたのが以下です。


#include<stdio.h>

#include<stdlib.h>
int main(void)
{
char file0[64];
char onngakumei[256];
int s;
unsigned int m;
char buff[256];
FILE *fp0;





printf("\n\n");
printf(" 音楽ファイルを管理しているファイル名を入力してください。\n ");
printf("存在しない場合は新規作成するファイル名を入力してください。\n");
printf("\nファイル名:");
scanf("%s",file0);
printf("\n");


printf("\n 音楽ファイル管理しているプログラム名: %s\n\n",file0);


if(NULL==(fp0=fopen(file0,"a+")))
{
printf("\n Cannot open file : %s\n\n", file0);
exit(1);
}



printf("現在このファイルで管理されている音楽名は下記のとおりです。\n");
printf("(新規作成した場合は空白)\n");

for(m=0;m<10000;++m)
{
if(NULL==fgets(buff,255,fp0))
{
break;
}
printf("%5d: %s",1+m,buff);
}



if(NULL == (fp0 = fopen(file0, "a+")))
{
printf("\n Cannot open file : %s\n\n", file0);
exit(1);
}

for(s=1;s!=0;)
{
printf("\n 追加したい音楽名を入力してください");
scanf("%s",onngakumei);
fprintf(fp0,"%s\n",onngakumei);
printf("続けて入力:1\n入力を終了:0\n");
scanf("%d",&s);
}

printf("入力を終了します\n\n");

fclose(fp0);

if(NULL==(fp0=fopen(file0,"r")))
{
printf("\n Cannot open file : %s\n\n", file0);
exit(1);
}

printf("現在管理されている音楽名は下記のとおりに変更されました\n");
for(m=0;m<10000;++m)
{
if(NULL==fgets(buff,255,fp0))
{
break;
}
printf("%5d: %s",1+m,buff);
}

fclose(fp0);

}



ここから削除と並び替えがどうしてもできませんでした。
なにか方法はないでしょうか。
よろしくお願いします。


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

Name: 管理人 [URL]  ..ハッカー(180,749ポイント)   Date: 2007/01/29(月) 09:44   No:4079     
Title: Re:無題    
不要な部分があったのでコメントアウトしておきました。

#include<stdio.h>

#include<stdlib.h>
int main(void)
{
char file0[64];
char onngakumei[256];
int s;
unsigned int m;
char buff[256];
FILE *fp0;

printf("音楽ファイルを管理しているファイル名を入力してください。\n ");
printf("存在しない場合は新規作成するファイル名を入力してください。\n");
printf("ファイル名:");
scanf("%s",file0);
printf("音楽ファイル管理しているプログラム名: %s\n\n",file0);
if(NULL==(fp0=fopen(file0,"a+"))){
printf("Cannot open the file. : %s\n", file0);
exit(1);
}
printf("現在このファイルで管理されている音楽名は下記のとおりです。\n");
printf("(新規作成した場合は空白)\n");
for(m=0;m<10000;++m){
if(NULL==fgets(buff,255,fp0))
break;
printf("%5d: %s",1+m,buff);
}
// if(NULL == (fp0 = fopen(file0, "a+"))){
// printf("\n Cannot open file : %s\n\n", file0);
// exit(1);
// }
for(s=1;s!=0;){
printf("追加したい音楽名を入力してください:");
scanf("%s",onngakumei);
fprintf(fp0,"%s\n",onngakumei);
printf("続けて入力:1\n入力を終了:0\n");
scanf("%d",&s);
}
printf("入力を終了します\n\n");
fclose(fp0);
if(NULL==(fp0=fopen(file0,"r"))){
printf("Cannot open file : %s\n", file0);
exit(1);
}
printf("現在管理されている音楽名は下記のとおりに変更されました\n");
for(m=0;m<10000;++m){
if(NULL==fgets(buff,255,fp0))
break;
printf("%5d: %s\n",1+m,buff);
}
fclose(fp0);
}


削除の仕方は、例えばこうです。

GLAY
LA'rc~en~ciel
AYUMI

と書かれたmusic.txtがあるとします。
このうち、AYUMIを消したければ、このように出来ます。


#include<stdio.h>

#include<stdlib.h>
int main(void){
FILE *fp0;
char write[2][32]={
"GLAY",
"LA'rc~en~ciel",
};
if(NULL==(fp0=fopen("music.txt","w"))){
printf("Cannot open the file.\n"); exit(1);
}
fprintf(fp0,"%s\n",write[0]);
fprintf(fp0,"%s\n",write[1]);
fclose(fp0);
return 0;
}


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



Name: きつね  ..ぴよぴよ(44ポイント)   Date: 2007/01/27(土) 14:51   No:4022       
Title: つまらない質問ですが;    
画面に表示する文字のフォントを変えることはできるのでしょうか?
もしできるのなら方法等教えてもらいたいです。


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


Name: 管理人 [URL]  ..ハッカー(178,235ポイント)   Date: 2007/01/28(日) 01:31   No:4045     
Title: Re:つまらない質問ですが;    
今日は犬小屋を作っていて、遅くなってしまいましたm(_ _)m


画面というのはどこの事ですか?コンソール画面?DXライブラリ?その他?
コンソール画面なら上バー上で右クリックから規定値を選択すると色々オプションがいじれます。
DXライブラリでしたら本家DXライブラリにいけば、全ての関数の仕様説明が書いてあります。


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

Name: きつね  ..ぴよぴよ(68ポイント)   Date: 2007/01/28(日) 22:32   No:4065 解決!     
Title: Re:つまらない質問ですが;    
DXライブラリのほうです
本家にいったら解決しました!
おさわがせいたしました。


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

Name: 管理人  ..ハッカー(179,579ポイント)   Date: 2007/01/29(月) 00:14   No:4073     
Title: Re:つまらない質問ですが;    
つまらない質問なんかじゃないですよ☆
DXライブラリを楽しんでください♪


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



Name: ダッシュ  ..初心者(8,328ポイント)   Date: 2007/01/28(日) 16:01   No:4057       
Title: パソコンのメーカーについて    
いとこから「パソコンを買いたいが、どこのメーカーにしたらいいだろうか?」と質問されました。僕としては自分の使用用途に合っていて、そこまで無名なメーカーでもないようならそれでいいのですが・・・。皆様はどこのメーカーがよいと思いますか?いとこはノート型パソコンが欲しいようです。

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


Name: 管理人 [URL]  ..ハッカー(179,479ポイント)   Date: 2007/01/28(日) 19:45   No:4059     
Title: Re:パソコンのメーカーについて    
(((デスクトップパソコンなら私から買っt・・・。


えぇと、

ノートにしても、デスクトップにしても、もちろんパソコンはオーダーメイドパソコンがいいと思いますよ。

意見は様々あるでしょうが、メーカー品はメーカーというだけで高くなっているのであほらしいです。

いらないソフトはあれこれ付いているし、いる機能はなかったり。

それならオーダーメイドパソコンでいる奴だけチョイスしたほうがいい。

オーダーメイドと聞くと高いイメージがありますが、パソコンに関しては逆で、オーダーメイドの方が安いです。

私は5回フェイスやドスパラのような、オーダーメイドパソコンを注文しましたが、不良品は一度もありませんでした。

しかし、パソコン工房はかなり粗悪品があって、CPUにグリスすらいい加減に塗られていました。

学校に10台パソコン工房のパソコンがあるんですが、そのうち1台は壊れました。

原因を探るべく、あけてみたら、ファンの線が抜けてて、ファンがまわってなかったのと、CPUのグリスがちゃんと塗られていなかったので、熱暴走したんじゃないかと思います。

別の1台はLEDがつかなくなりました。あけてみると、コネクタを接続した後にテープでとめてなかったので振動で接触不良になっていました。

私の経験から、オーダーメイドパソコンはフェイスか、ドスパラをお勧めします。フェイスの方が安いです。

http://www.faith-go.co.jp/index.asp

私達大学生の中ではかなり有名な会社です。

チェーン店もありますし、信頼のおける業者だと思います。

私の中の常識として、ソニーや富士通、NECのようなメーカー品を買うのはありえないです。

なんであんなもの欲しい人がいるんだろうと思うほど。

こだわりがある人や、製品に絶対的な信用をおきたい人はメーカー品を好むのでしょうけど、一般的にはメーカー品を買う意味が私にはわかりません。

なので、フェイス、ドスパラをはじめ、「オーダーメイドパソコン」というキーワードで、探してみてください。


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

Name: バグ  ..プログラマー(25,651ポイント)   Date: 2007/01/28(日) 20:10   No:4060     
Title: Re:パソコンのメーカーについて    
DELLが安いですよね。

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

Name: ま〜く  ..ぴよぴよ(649ポイント)   Date: 2007/01/28(日) 23:11   No:4067     
Title: Re:パソコンのメーカーについて    
faithいいですよね〜^^
ぼくの自宅マシンもfaithで買いました。

でもノート扱っていましたっけ??

DELLも安くていいですね!よくお小遣い稼ぎの仕事で納品してますww


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

Name: ダッシュ  ..初心者(8,486ポイント)   Date: 2007/01/28(日) 23:17   No:4069     
Title: Re:パソコンのメーカーについて    
>>(((デスクトップパソコンなら私から買っt・・・。

ちょっとふきました・・・。


オーダーメイドですか〜。僕が次に買うのなら是非ともチャレンジしたいのですが、何しろいとこはパソコン買うのも使うのも初めてなんです・・・。しかも、住んでるのが大阪なので逐一説明するのが、なかなか困難ですよね・・・。オーダーメイドがいいと言っても、たぶんそうやすやすとは、首を縦に振らない気が・・・。

初心者でも(ほんとに何も知りません)でも何とかなるものでしょうか?


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

Name: ダッシュ  ..初心者(8,635ポイント)   Date: 2007/01/28(日) 23:29   No:4070 解決!     
Title: Re:パソコンのメーカーについて    
すいません!!!

いきなりで大変悪いのですが、いとこからたった今、「もう決まった。」とのメールが入ってきました。折角回答していただいたのに本当に申し訳ないです。面目ない。

でも、これは絶対に僕がパソコン買う時に役に立てていくつもりです。とにかく、大変勝手な都合では御座いますが、解決という形にさせていただきます。

本当にすいません!!!


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

Name: 管理人  ..ハッカー(179,639ポイント)   Date: 2007/01/28(日) 23:52   No:4071     
Title: Re:パソコンのメーカーについて    
今日はパソコンの無いとこにいるので携帯から。

もちろん素人でも大丈夫ですよ。カスタマイズせずに標準構成で注文すれば

パーツに詳しくなくてもちゃんとした構成で注文できます。

もしよければ
使用用途、予算、重視要素を教えてもらえたら最善の構成考えますよ☆

ちゃんと私のメルアドに送ってもらえたらメールでも詳しくお伝えしますし。

それなりにパーツの事は存じているつもりですから何でも聞いてください♪


……しかしPCになれてしまうと携帯で文章うつのがもどかしくてしょうがないですね( ̄  ̄;)


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



Name: ウィーヤ  ..かけだし(1,064ポイント)   Date: 2007/01/28(日) 16:51   No:4058       
Title: 最小二乗法に関する課題がわかりません    
どうもお世話になっております。

以前、学校で最小二乗法による一次式近似のプログラムを教わりました。
(↓こんな感じになりました)

#include <stdio.h>
#include <math.h>
#define NMAX 20
void main(void)
{
int i=0,n;
double xi=0,fi=0,xi2=0,xifi=0;
double data_x[NMAX],data_f[NMAX];
double a=0,b=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%lf %lf",&data_x[i],&data_f[i]);
}
for(i=0;i<n;i++){
xi+=data_x[i];
fi+=data_f[i];
xi2+=data_x[i]*data_x[i];
xifi+=data_x[i]*data_f[i];
}
a=(xi*fi-n*xifi)/(xi*xi-n*xi2);
b=(xi*xifi-fi*xi2)/(xi*xi-n*xi2);
printf("F(x)=%fx+(%f)\n",a,b);
}


さて、課題として、
入力されるデータ点を二次式で近似するための最小二乗法のプログラムを作成することになりました。

ある程度はわかるのですが、近似式をF(x)=a*x^2+b*x+cとしたときの係数a,b,cをどう求めるのか…。

どうぞよろしくお願いします。


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


Name: box  ..熟練のプログラマー(42,382ポイント)   Date: 2007/01/28(日) 21:43   No:4063     
Title: Re:最小二乗法に関する課題がわかりません    

手元にある関数電卓の取扱説明書によりますと、
y=Ax2+Bx+C
の定数項C、一次係数B、二次係数Aの計算式は下記のとおりです。

Σy Σx Σx2
C = ---- − B(----) − A(-----)
n n n

Sxy・Sx22 − Sx2y・Sxx2
B = ------------------------------------
Sxx・Sx22 − (Sxx2)2

Sx2y・Sxx − Sxy・Sxx2
A = ----------------------------------
Sxx・Sx22 − (Sxx2)2


ただし、
Sxx = Σx2 − ((Σx)2 / n)
Sxy = Σxy − ((Σx・Σy) / n)
Sxx2 = Σx3 − ((Σx・Σx2) / n)
Sx22 = Σx4 − ((Σx2)2 / n)
Sx2y = Σx2y − ((Σx2・Σy) / n)



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

Name: ウィーヤ  ..かけだし(1,133ポイント)   Date: 2007/01/28(日) 22:22   No:4064 解決!     
Title: Re:最小二乗法に関する課題がわかりません    
ありがとうございます。

色々教科書や参考書、インターネットで係数の計算式を探したのですが見つからなかったので、

本当に助かりました。

これを元にプログラムを作ってみます。


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



Name: にゃんこ  ..ぴよぴよ(42ポイント)   Date: 2007/01/26(金) 13:12   No:3978       
Title: sinのグラフについて    
はじめまして。大学の課題なんですがどんなに考えてもまったく分からないので教えてください(>△<)

1. 時間t[s]を変数とする正弦波y=20*sin(g(t))を考える。g(t)は、角度変化を表し、g(t)=t-180.0[deg]とする。t=0[s]から360[s]まで1[s]刻みでyの値(データと呼ぶ)を求める。その角度とデータをそれぞれ配列に保存する。配列に保存した角度とデータの数値をモニタに表示する。

2. 1.のデータをスペースとアスタリスクを用いて表示するプログラムを作成せよ。ただし、横軸を角度、縦軸をデータとする。(ただし、グラフの縦軸と横軸はそれぞれ適切に設定せよ)また、グラフを描画する部分は必ず関数化すること。

1.の方は以下のような感じで作ってみたのですが、2.がまったく分かりません。。よろしくお願いします。

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

#define theta 360

main()
{
double y,f,b[theta];
int t,g,a[theta];

printf("配列の添字(時間) "
"角度を保存する配列 "
"データを保存する配列\n");

for(t=0; t<=theta; t++){
g = t - 180;
f = g*M_PI/180;
y = 20*sin(f);
a[t] = g;
b[t] = y;

printf("\t%d",t);
printf("\t\t%d",a[t]);
printf("\t\t\t%.3f",b[t]);
printf("\n");
}
}


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


Name: box  ..熟練のプログラマー(41,412ポイント)   Date: 2007/01/26(金) 13:56   No:3981     
Title: Re:sinのグラフについて    
> 1.の方は以下のような感じで作ってみたのですが、2.がまったく分かりません。。よろしくお願いします。

tが360の場合までを扱うためには、配列の大きさは361でなければなりません。
a[361]と定義して、a[0]〜a[360]の361個の値を扱ってください。bも同じです。

さて、サインカーブの表示の件です。
画面の縦方向を角度、横方向を関数値にすると、プログラミングが楽です。
そうすると、横方向の値の範囲は-20〜20となります。縦方向は0〜360の361行です。
パソコン画面の横方向が80桁分あるとして、仮に横幅全体を使ってサインカーブを
表示するとしたら、
-20→1桁目に'*'を表示する
(中略)
+20→80桁目に'*'を表示する
ことになります。
つまり、「関数値」から「画面上の桁数」への変換ができればよいことになります。


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

Name: 管理人 [URL]  ..ハッカー(175,957ポイント)   Date: 2007/01/26(金) 15:20   No:3985     
Title: Re:sinのグラフについて    
↑クリックで画像が拡大します↑

まず、簡単なグラフから書いてみましょう。
boxさんのおっしゃっているグラフを
水平方向をy,鉛直方向をxとして考えます。

y=x^2のグラフはどんな形になるか想像できますね。

今それが-90度傾いた形になるはずです。

xの値を1つずつ動かしながら、そのつどyの値を計算し、
yの値分だけスペースを表示します。

以下のプログラムを見て、仕組みを理解してください。

#include <stdio.h>

int main(){
int i,x,y;
for(x=-7;x<=7;x++){
y=x*x;
for(i=0;i<y;i++)
printf(" ");
printf("*\n");
}
return 0;
}



実行結果は添付画像のようになります。


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

Name: にゃんこ  ..ぴよぴよ(126ポイント)   Date: 2007/01/26(金) 15:20   No:3986     
Title: Re:sinのグラフについて    
回答ありがとうございます♪♪
ご指摘のところはそのように直してみます。


画面の縦方向を角度、横方向を関数値にするとプログラミングが楽とのことですが、問題文で「横軸を角度、縦軸をデータ」と指定されているのですが、そうするとまた考え方も変わってくるのでしょうか??


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

Name: 管理人 [URL]  ..ハッカー(176,231ポイント)   Date: 2007/01/26(金) 15:40   No:3988     
Title: Re:sinのグラフについて    
すみません、そういう指定があるんですね。
それでしたら先ほどのような考え方はふさわしくないので、
もろ関数として解きましょう。

次にサンプルを示しますね。


ちなみにコンソール画面の画面のバッファサイズ、フォントサイズは
上のバー上で右クリックすることで「規定値」から変更できますので
バッファサイズ、画面サイズを大きくして、フォントサイズを小さくすると
グラフが見やすくなります。


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

Name: 管理人 [URL]  ..ハッカー(176,769ポイント)   Date: 2007/01/26(金) 15:52   No:3990     
Title: Re:sinのグラフについて    
↑クリック↑

このグラフは普通のグラフです。

このプログラムは、yが0〜25、xが-5〜5としてループさせてグラフを書いています。
格子点を1つずつ全て進んでいき、その値が「x*x」と一致したところでは*を表示し、
一致しなかったところでは、スペースを表示しています。

例えば、yは25からはじまりますね。xは-5から始まりますね。
今y=25,x=-5において、25は-5*-5と一致するから*を出力します。
次y=25,x=-4において、25は-4*-4と一致しませんからスペースを出力します。
水平方向が全部すんだら改行・・・。

これを全部やるとグラフのようになります。

サンプルはこちらです。

#include <stdio.h>

int main(){
int i,x,y;
for(y=25;y>=0;y--){
for(x=-5;x<=5;x++){
if(y==x*x)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}



これをdouble型で解く場合は、その判定において、適合する範囲を決めましょう。


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

Name: 管理人 [URL]  ..ハッカー(176,750ポイント)   Date: 2007/01/26(金) 16:08   No:3991     
Title: Re:sinのグラフについて    
↑クリック↑

上記プログラムを利用して普通のsin波作ってみたんですけど、完成品はこんな感じになりました。


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

Name: にゃんこ  ..ぴよぴよ(202ポイント)   Date: 2007/01/26(金) 21:33   No:3993     
Title: Re:sinのグラフについて    
何度も何度もすいません。
管理人さんのおっしゃっているy=x^2のグラフについては理解できました。。
ですが、それを利用してsinのグラフを作ってみようとしても、どうしてもうまくいきません。
申し訳ありませんがもう少し教えてください(>_<)
お願いします。


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

Name: box  ..熟練のプログラマー(41,437ポイント)   Date: 2007/01/26(金) 21:59   No:3995     
Title: Re:sinのグラフについて    
> ですが、それを利用してsinのグラフを作ってみようとしても、どうしてもうまくいきません。

では、現時点のソースコードを見せてください。


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

Name: にゃんこ  ..ぴよぴよ(232ポイント)   Date: 2007/01/26(金) 23:21   No:3999     
Title: Re:sinのグラフについて    
中途半端なトコまでですいませんが、現在はこんな感じです↓↓

int main(){

int x,y;
double f,y1;

for(y=-20; y<=20; y++){
for(x=0; x<=80; x++){
f = x*360/80-180;
y1 = 20*sin(f*M_PI/180);



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

Name: 管理人 [URL]  ..ハッカー(176,903ポイント)   Date: 2007/01/27(土) 03:26   No:4002     
Title: Re:sinのグラフについて    
私の書いたとおりにかけば出来るはずですよ。

ちなみに普通のサイン波のプログラムはこちらです。

お書きになったプログラムはif文による*の出力が無いので表示されないと思います。

振幅は-1〜1で、角度は4πまでとしています。0.1刻みですすめていますので、

判定する範囲は、今の場所プラスマイナス0.05ということになります。

#include <stdio.h>

#include <math.h>

#define PI 3.141592

int main(){
double i,x,y;
for(y=1.0;y>=-1.0;y-=0.1){
for(x=0;x<=4.0*PI;x+=0.1){
if(y-0.05<=sin(x) && sin(x)<y+0.05)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}


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

Name: にゃんこ  ..ぴよぴよ(272ポイント)   Date: 2007/01/28(日) 12:13   No:4056 解決!     
Title: Re:sinのグラフについて    
回答ありがとうございました☆★
おかげで何とか課題も進められそうです(*^_^*)
本当にありがとうございました。。


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



Name: 夢霧  ..かけだし(1,017ポイント)   Date: 2007/01/27(土) 10:24   No:4015       
Title: お願いがあります    
私はこれまで、プログラミングの勉強をしてきました。それは親友との夢を叶える為です。
私と親友の夢は「『3分ゲームコンテスト』に出せるほどの作品を作ること」です。
その日を目指して今まで頑張ってきましたが、ど素人+独学ではいつもで経っても進歩がありません。
そしてもう時間がないのです。私たちは現在、中学3年生で受験生真っ只中です。3月には卒業し、親友とも離れ離れになってしまいます。
どうしても、卒業までに私たちの夢を果たしたいのですが、私たちの力だけではどう足掻いてももう間に合いません。
どなたか、私たちの『協力者』もしくは『救世主』になっていただけないでしょうか?
受験生ということなので、私達にはあまり余裕がなく、私達に出来ることは、キャラデザ・音楽くらいしかありません。
それにプラスして期限は2月中です。そのため、かなり厳しいことになると思われます。

もしも、私たちの夢の実現に協力してくださる方が居られましたら、ご連絡下さい。

尚、制作を頼むこととなるゲームについては以下の予定です。この条件さえ守っていただけるなら、あとの設定・システムはお任せいたします。
・縦スクロールシューティング
  (敵に弾が当たると、敵が爆発し、連鎖を起こす というようなもの)

『3分ゲームコンテスト』に出すことが夢ですので、完成したゲームを『3分ゲームコンテスト』に出してもよいという方の方が良いですが、
その辺のことは配慮いたします。


どうか、私たちの夢を叶えて下さい。お願いいたします。


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


Name: 管理人 [URL]  ..ハッカー(177,420ポイント)   Date: 2007/01/27(土) 13:28   No:4018     
Title: Re:お願いがあります    
まるまる全部作るわけにはいかないですけど、わからないところがあればその都度アドバイスしますよ☆

縦スクロールシューティングゲームなら丁度シューティングゲームの館で紹介していますので、
そちらを参考に、ほぼ丸写ししながら作れば早いのではないでしょうか?

最後まで作ってないですけど、そこまでできたら後はもうちょっとだと思います。

一度シューティングゲームの館をのぞいてみてはいかがでしょうか。

それにしても中学生でシューティング作りとはすごいですね♪


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

Name: ダッシュ  ..初心者(8,286ポイント)   Date: 2007/01/27(土) 13:50   No:4020     
Title: Re:お願いがあります    
こうして回答して、変な期待をさせてしまったらごめんなさい。はじめに言っておきますが、僕はそのような力量を持ち合わせておりません。

しかし、夢霧さんの気持ちにはかなり共感できるものがあります。僕は今高校2年生で、この前センター試験(大学の1次試験)を今の3年生が受けましたので、あと一年で受験です。僕としてはもう受験勉強を始めてるつもりでいます。
今、僕も友達と一緒にゲームやソフトを作ろうと約束しています。もちろん今の僕にそのような実力はなく、これからプログラムの勉強して力をつけていかなければいけません。それに受験する大学はそれぞれ違います。高校を卒業したら、会う事なんてほとんど無くなってしまうでしょう。コンテストに出すかどうかの違いはありますが、夢霧さんとお友達がおかれている状況とかなり似ています。

それに今まで受験のことなど考えず遊んでた僕ですから、これから相当頑張らないと勉強の遅れを巻き返すことは出来ないでしょう。これから受験までの間に時間を取ってプログラミングに励むことも難しい状況です。

それでも僕はその友達とゲーム制作をしたいのです。ですから、卒業してもこれは続けるつもりです。幸いなことに、今、ネットのお陰で、たとえ遠くにいても情報や意思の伝達が可能です。ここの管理人さん曰く、もし共同開発をしていくなら、口で話すより、メールなどを使って計画をたてていったほうがやりやすいらしいです。
ですから夢霧さんもあまり、焦らなくてもいいのではないかなと思います。それに自分と親友との力だけで作ったゲームが一番価値があり、思い出深いと思いますよ。


と、夢霧さんのお願いに水を差すようなことをいってしまったので、気分を害されたかもしれません。しかし、ここまで状況が似ていると、まるで自分のことのようで、放っておくことが出来ませんでした。ここのHPにはとても親切な人が多いので、協力者が現れることもあるかもしれません。それはそれで「めでたし」ですが、折角、お友達と誓い合った約束なのですからもう少しよく考えてみるといいのではないでしょうか。そちらの詳しい事情は分かりませんので僕がアドバイスできるのはこの程度です。


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

Name: 管理人 [URL]  ..ハッカー(178,063ポイント)   Date: 2007/01/27(土) 14:01   No:4021     
Title: Re:お願いがあります    
ダッシュさんのおっしゃるとおり、高校で離れ離れになってしまっても、
ネットという手段があるじゃないですか^^
MSNチャットでは、ビデオチャットも出来ますから、あたかもそこにいるかのようなチャットも出来ます。

2人・・・だと作らないかもしれませんが、普通、大きなソフトを作る時、共同で作る時には、仕様書が必要です。
口で言うだけで、メソッドの決まりや返り値の決まりなど言い切れないですからね。
分担が「音楽」と「プログラム」っていう風にきっぱりわかれているならなおのこと、直接会えなくなる事はさほど障害ではないのではないでしょうか?

確かに完成したときに、そこに友達がいて、一緒に喜ぶって事は出来ないかもしれませんけど、
2人で一緒にゲームを作ると言う夢は、卒業したらたたれるわけじゃないですよ^^

そういう意味で、せっかく意気込んでらっしゃるところに水をさすようですが、ゲーム作りはいつでもできますよ。
受験と好きな趣味の両立はなかなか難しいです。今は受験の時ならまず、そちらを一生懸命やって、
すんでからゲーム作りでも、遅くはないと思います。あせって作るより、じっくり作った方が、
いい作品にもなると思いますしね。
それにプログラムを頼んで作ってもらったのでは、余計に「2人で作ったぞ!」っていう気持ちは薄れてしまうのではないでしょうか?
だって、絵はとりあえず書く事はできますが、プログラムは誰にでもかけるものじゃないです。
プログラムはゲームの中核そのものであって、その人の描いているゲームはその人にしか作れません。
言ってみれば、プログラムを書いていないのならゲームを作ったとはいえないでしょう。

ですから、せっかくお二人でゲームを作るっていう夢があるのなら、是非ともお二人で力を合わせて作っていただきたいです。

せっかくの気持ちに水をさしてごめんなさい。
受験、共同作業、色々今あるみたいですけど、トータルでみたら、やはりその時に大事な事ってありますからね。いろんな事を考えて今、何をすべきかよく考えてみてください☆

どちらにしても、後から悔いが残る事のないように応援しています^^


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

Name: 夢霧  ..かけだし(1,128ポイント)   Date: 2007/01/28(日) 09:49   No:4055 解決!     
Title: Re:お願いがあります    
私が焦り過ぎてどうかしていたようです。
2人の約束を期限ばかりに気をとられていました。2人で作ってこそいい思い出が出来ますよね。
2人で、話し合って考えてみます。
たとえ高校で離れ離れになっても、高校に入れなくても、親友には違いないですから。

私の目を覚まさせてくれるようなお返事をありがとうございました!
きっと素晴らしいゲームを2人で作りあげてみせます。
本当にありがとうございました!!


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



Name: ひろし  ..ぴよぴよ(128ポイント)   Date: 2007/01/27(土) 15:50   No:4024       
Title: 課題を教えてください。    
課題があるのですが
どうしてもわかりません。。
良ければ教えてください。


‒基本クラス「drink」を下記の要素を含めて作成しなさい。

•メンバ変数:甘味,塩味,酸味,苦味,旨味(すべてint型)
•メンバ関数:
・コンストラクタ(各メンバ変数の初期化(適当な値でよい)とコンストラクタが呼ばれたコンソール出力を実装)
・デストラクタ(デストラクタが呼ばれたコンソール出力を実装)
・各メンバ変数の入出力
・メンバ変数のコンソール出力

‒基本クラス「drink」を継承する「tea」クラスおよび「milk」クラスを下記の要素を含めて作成しなさい。

•メンバ変数:渋み,こく,香り(すべてint型)
•メンバ関数:
   ・drinkクラスと同じ機能

‒main()関数で「tea」オブジェクトおよび「milk」オブジェクトを1つづつnew演算子で作成し,delete演算子で削除しなさい。そして,この時のコンストラクタおよびデストラクタの呼ばれ方を確認しなさい。


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


Name: バグ  ..上級者(23,314ポイント)   Date: 2007/01/27(土) 16:05   No:4025     
Title: Re:課題を教えてください。    
何が分からないのでしょうか?

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

Name: ひろし  ..ぴよぴよ(183ポイント)   Date: 2007/01/27(土) 16:15   No:4026     
Title: Re:課題を教えてください。    
>バグさん

発言ありがとうございます。
いきなりやれと言われたので
正直言いますとすべてわかりません。



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

Name: バグ  ..上級者(23,386ポイント)   Date: 2007/01/27(土) 16:22   No:4027     
Title: Re:課題を教えてください。    
クラスを作るという事ですので、おそらくC++の課題だと思いますが、どこまでC++について理解していますか?
変数、関数、構造体、クラスは分かりますか?


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

Name: ひろし  ..ぴよぴよ(218ポイント)   Date: 2007/01/27(土) 16:25   No:4028     
Title: Re:課題を教えてください。    
>バグさん

C++の課題です。

習ってないのでまったくわかりません。
明後日までに作って来いと言われました。。


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

Name: バグ  ..上級者(23,465ポイント)   Date: 2007/01/27(土) 16:36   No:4029     
Title: Re:課題を教えてください。    
習ってないのに課題に出るのも不思議な話ですが…(^_^;)

それでは、プログラム…特にC言語の知識はどの程度ありますか?
それによって、アドバイスの内容が変わってきますので…。


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

Name: ひろし  ..ぴよぴよ(237ポイント)   Date: 2007/01/27(土) 16:39   No:4030     
Title: Re:課題を教えてください。    
>バグさん
C言語は数年前にやってたのですが
もうほとんど忘れてしまいました。

申し訳ないのですが、ソースを書いてもらうことはできませんか??


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

Name: バグ  ..上級者(23,507ポイント)   Date: 2007/01/27(土) 16:46   No:4031     
Title: Re:課題を教えてください。    
ソースを書いて提示するのは簡単な事ですが…ここはアドバイスする場であって、課題の丸投げをする場ではありませんので、それは出来かねます(-_-;)


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

Name: ひろし  ..ぴよぴよ(208ポイント)   Date: 2007/01/27(土) 16:58   No:4032     
Title: Re:課題を教えてください。    
>バグさん

そうですよね。
申し訳ありません。


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

Name: バグ  ..プログラマー(25,502ポイント)   Date: 2007/01/27(土) 19:19   No:4034     
Title: Re:課題を教えてください。    

#include <iostream.h>

// drinkクラス
class drink
{
public:
int m_Ama;
int m_Sio;
int m_San;
int m_Niga;
int m_Uma;

public:
drink();
~drink();

public:
void Input();
void Output();
};

drink::drink()
{
m_Ama = 0;
m_Sio = 0;
m_San = 0;
m_Niga = 0;
m_Uma = 0;

cout << "drinkクラスのコンストラクタです" << endl;
}

drink::~drink()
{
cout << "drinkクラスのデストラクタです" << endl;
}

void drink::Input()
{
cout << "甘味を入力してください" << endl;
cin >> m_Ama;

cout << "塩味を入力してください" << endl;
cin >> m_Sio;

cout << "酸味を入力してください" << endl;
cin >> m_San;

cout << "苦味を入力してください" << endl;
cin >> m_Niga;

cout << "旨みを入力してください" << endl;
cin >> m_Uma;
}

void drink::Output()
{
cout << "甘味 = " << m_Ama << endl;
cout << "塩味 = " << m_Sio << endl;
cout << "酸味 = " << m_San << endl;
cout << "苦味 = " << m_Niga << endl;
cout << "旨味 = " << m_Uma << endl;
}



// teaクラス
class tea : public drink
{
public:
int m_Sibu;
int m_Koku;
int m_Kaori;

public:
tea();
~tea();
void InputEx();
void OutputEx();
};

tea::tea()
{
m_Sibu = 0;
m_Koku = 0;
m_Kaori = 0;

cout << "teaクラスのコンストラクタです" << endl;
}

tea::~tea()
{
cout << "teaクラスのデストラクタです" << endl;
}

void tea::InputEx()
{
Input();

cout << "渋味を入力してください" << endl;
cin >> m_Sibu;

cout << "コクを入力してください" << endl;
cin >> m_Koku;

cout << "香りを入力してください" << endl;
cin >> m_Kaori;
}

void tea::OutputEx()
{
Output();

cout << "渋味 = " << m_Sibu << endl;
cout << "コク = " << m_Koku << endl;
cout << "香り = " << m_Kaori << endl;
}



// milkクラス
class milk : public drink
{
public:
int m_Sibu;
int m_Koku;
int m_Kaori;

public:
milk();
~milk();
void InputEx();
void OutputEx();
};

milk::milk()
{
m_Sibu = 0;
m_Koku = 0;
m_Kaori = 0;

cout << "milkクラスのコンストラクタです" << endl;
}

milk::~milk()
{
cout << "milkクラスのデストラクタです" << endl;
}

void milk::InputEx()
{
Input();

cout << "渋味を入力してください" << endl;
cin >> m_Sibu;

cout << "コクを入力してください" << endl;
cin >> m_Koku;

cout << "香りを入力してください" << endl;
cin >> m_Kaori;
}

void milk::OutputEx()
{
Output();

cout << "渋味 = " << m_Sibu << endl;
cout << "コク = " << m_Koku << endl;
cout << "香り = " << m_Kaori << endl;
}

// main関数
void main()
{
tea *pTea = new( tea );
pTea->InputEx();
pTea->OutputEx();
delete( pTea );

milk *pMilk = new( milk );
pMilk->InputEx();
pMilk->OutputEx();
delete( pMilk );
}


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

Name: ひろし  ..ぴよぴよ(239ポイント)   Date: 2007/01/27(土) 19:27   No:4035 解決!     
Title: Re:課題を教えてください。    
>バグさん

ありがとうございます!!
本当に嬉しいです。
助かりました。


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

Name: ま〜く  ..ぴよぴよ(613ポイント)   Date: 2007/01/27(土) 20:16   No:4036     
Title: Re:課題を教えてください。    
あら・・・いいんですかねー^^;


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

Name: バグ  ..プログラマー(25,514ポイント)   Date: 2007/01/27(土) 20:26   No:4037     
Title: Re:課題を教えてください。    
自分の復習の為につくりました(苦笑)
レスしてしまったので、乗り掛かった船ということで、中途半端にしておくのが気持ち悪かっただけなんですよ。次はないです(;^_^A

今、気付いたんですけど、newでのメモリ確保に失敗した時のチェックが無かったですね…まぁ、これ位は自分でやってもらいましょう♪


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

Name: Justy  ..熟練のプログラマー(53,833ポイント)   Date: 2007/01/27(土) 20:35   No:4038     
Title: Re:課題を教えてください。    
newでのメモリ確保に失敗した時のチェックが
 ほかにもありますが、それらも含めてひろしさんへの課題、ということでいいんじゃないでしょうか >ま〜くさん


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

Name: ま〜く  ..ぴよぴよ(636ポイント)   Date: 2007/01/27(土) 22:44   No:4042     
Title: Re:課題を教えてください。    
そうですね^^

そもそも習ってないのにそんな課題がでるはずないですもんね〜


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

Name: バグ  ..プログラマー(25,518ポイント)   Date: 2007/01/28(日) 00:42   No:4043     
Title: Re:課題を教えてください。    
>>Justyさん
う…何かやらかしてましたか?(;^_^A
ソースを見直してみたんですが分からないです(;-_-)
もし、私の知らない致命的なミスだったらいけないんで、良ければヒントだけでもいただけると有り難いのですが…m(__)m


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

Name: Justy  ..熟練のプログラマー(53,724ポイント)   Date: 2007/01/28(日) 01:22   No:4044     
Title: Re:課題を教えてください。    
 えーと致命的ではないです。
 見方によっては大した問題ですらないです。

・ 課題が規定しているメンバ関数が実装されていない気が。
・ main関数の「形」が・・・
・ "iostream.h"は今は存在しない環境も・・・。
・ cinで数値以外を入力すると・・・。
・ 使い方次第で teaのデストラクタが呼ばれないかも・・・。


 でも問題の方の teaクラスと milkクラスって何が違うんでしょうねぇ???


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

Name: 管理人 [URL]  ..ハッカー(178,247ポイント)   Date: 2007/01/28(日) 01:37   No:4046     
Title: Re:課題を教えてください。    
バグさん、ありがとうございます。
今日は友達の犬小屋作りで今までかかってたんで、ずっと家を空けていました^^;
やっと出来ましたよ〜!いや〜日曜大工って楽しいですね♪
木材せっせこ切って、それをつなげるのにこの前かった電動ドリルが大活躍・・・・。って関係ないですね^^;

う、管理人のくせに、関係ない話しか出来ない・・。
ハイ、C++勉強してきます(T_T


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

Name: バグ  ..プログラマー(25,712ポイント)   Date: 2007/01/28(日) 01:49   No:4049     
Title: Re:課題を教えてください。    
>>Justyさん
指摘、ありがとうございますm(__)m
iostream.hって無い環境があるんですね〜。知らなかったです(;^_^A
普段はstdio.hを使うのですが、今回はC++ということだったのでわざとiostream.hを使ってみたんですよ。
main関数の型はint型が標準なのは承知していたのですが、いつもの癖でついついvoid型にしてしまっていました(;^_^A
cinで数値以外を入力したら…どうなるんでしょう?とりあえず、Enterキーは無視されたみたいなんですが…?

問題を読む限りでは、teaクラスとmilkクラスは同じですよね。分ける意味が分かりませんでしたが、問題文に忠実に作ってみました(笑)


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

Name: バグ  ..プログラマー(25,733ポイント)   Date: 2007/01/28(日) 01:54   No:4050     
Title: Re:課題を教えてください。    
あ、メンバ関数の実装については、よく分からないのですが…
コンソールへの入出力というのは、画面に出すだけでは駄目だったのでしょうか?


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

Name: Justy  ..熟練のプログラマー(54,110ポイント)   Date: 2007/01/28(日) 02:07   No:4053     
Title: Re:課題を教えてください。    
iostream.hって無い環境があるんですね
 古いヘッダなんですよ、それ。
 今の標準は <iostream>です。


cinで数値以外を入力したら…どうなるんでしょう
 うちの環境だと、以後の cinが全部そのままスルー(無視)されます。


メンバ関数の実装については、よく分からないのですが
 実装するべきメンバ関数に「各メンバ変数の入出力」があります。
 「各」ということはメンバ変数の数だけ入出力の関数があるわけで。
 問題はこの入出力が「どこ」と行うのか明記されていないので、
普通はクラスの外と中との入出力を指すと思います。

 つまり、
void drink::set_ama(int val);

int drink::get_ama() const;

 のようなメンバ関数を作る必要があるのではないか、ということです。


コンソールへの入出力というのは、画面に出すだけでは駄目だったのでしょうか
 コンソールへの出力は問題ないと思います。


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

Name: バグ  ..プログラマー(25,639ポイント)   Date: 2007/01/28(日) 02:16   No:4054     
Title: Re:課題を教えてください。    
なるほど!クラス外へメンバ変数の情報を出力する関数が必要だった訳ですか(^-^)
コンソールへの入出力だけで良いのだと思ってました。というか、なぜ入出力に関する記述を2つに分けているのだろう?と考えもしてなかったです(苦笑)
自分の読解力の無さを反省します(;´Д`)
ありがとうございましたm(__)m


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



Name: 女郎花  ..ぴよぴよ(873ポイント)   Date: 2007/01/27(土) 12:29   No:4016       
Title: 大きな値の階乗について    
30の階乗を計算するプログラムを作りたいのですが

#include<stdio.h>
int kaijo(int);
int main(void)
{
  int i;
  i=30;
  printf("%d!=%d \n",i,kaijo(i));
  return 0;
}
int kaijo(int n)
{
  if(n==0)
  return 1;
  else
  return n*kaijo(n-1);
}


として実行したところ
30!=1409286144
となってしまいました
5行目のint i;がまずいのでしょうか?



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


Name: box  ..熟練のプログラマー(41,514ポイント)   Date: 2007/01/27(土) 12:50   No:4017     
Title: Re:大きな値の階乗について    
> 5行目のint i;がまずいのでしょうか?

そこはたぶんint型のままでよいと思います。
結果が概算でよければ、kaijo関数の型をdouble型にしてください。

一の位まで正確に求める必要があれば、
何桁かごとに分割してint型の配列に格納する、
というような特別な方法を使う必要があります。

ソースを貼り付ける際、インデントは全角空白ではなく
半角空白かタブコードを使ってください。
そして、ソースの前後を

<pre>
ソース本体
</pre>

のようにタグ(不等号は半角を使います)ではさんでください。


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

Name: 管理人 [URL]  ..ハッカー(177,421ポイント)   Date: 2007/01/27(土) 13:30   No:4019     
Title: Re:大きな値の階乗について    
極端に大きな桁を扱う時は、longlong型っていう型もあるので、そういうのも参考にしてみてください。

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

Name: 女郎花  ..ぴよぴよ(987ポイント)   Date: 2007/01/27(土) 15:39   No:4023     
Title: Re:大きな値の階乗について    
boxさん、管理人さん、ありがとうございます。

自分がやろうとしているのは一の位まで求めるため配列を用いる
やり方のようなのですが、もしよろしければどのようになるのか
教えてもらってもよろしいでしょうか?

ソースを貼り付ける際は気をつけます、すみませんでした。


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

Name: box  ..熟練のプログラマー(41,927ポイント)   Date: 2007/01/27(土) 21:20   No:4039     
Title: Re:大きな値の階乗について    

ヒントになればよいのですが…。

配列の各要素に3桁ずつ格納するとします。

array[2] array[1] array[0]
0! = 0 0 1
1! = 0 0 1
2! = 0 0 2
3! = 0 0 6
4! = 0 0 24
5! = 0 0 120
6! = 0 0 720
7! = 0 5 40
8! = 0 40 320
9! = 0 362 880
10! = 3 628 800
11! = 39 916 800
12! = 479 1 600
以下省略

1)0!として、array[0]に1を入れておくことから始めます。
2)次の数の階乗を求めるときの処理は次のとおりです。
・配列の各要素に、その数を掛ける
・各要素に3桁ずつ格納するので、1000で割った余りを自分の要素とし、
1000で割った商を配列の次の要素に加える

答えを出力する際には、やや工夫が必要です(例:上記の7!や12!)。



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

Name: 女郎花  ..かけだし(1,007ポイント)   Date: 2007/01/27(土) 21:40   No:4040     
Title: Re:大きな値の階乗について    
boxさん、ありがとうございます!
頑張ってやってみます。


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

Name: 管理人 [URL]  ..ハッカー(178,772ポイント)   Date: 2007/01/28(日) 02:03   No:4052     
Title: Re:大きな値の階乗について    
そうやって大きな数が計算できるんですね〜。
参考になりました。

中学生の先生が「人間知識より知恵が大事」といつも言ってた意味が実感できます^^;


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



Name: sign  ..ぴよぴよ(797ポイント)   Date: 2007/01/27(土) 03:52   No:4004       
Title: 効率のよいプログラムの書き方    
ファイルから2つの値の組を読み込む。
その2つの値の組について処理を行う。
ファイルには2つの値の組が何組か書かれている。
読み込んだ2つの値が共に負であったときにプログラムを終了する。

という流れのプログラムを書くとき、
読み込む方法(ループの使い方)と、2つの値が負であるかを判定する方法
の効率のよい書き方が自分では判断できません。


例えば、テキストファイルに次のように書かれているとします。
==================================================
10,10
20,-20
-30,-30
40,40
==================================================

プログラム内でファイルから値を読み込み、処理をするプログラムをこのように書いています。

#include <stdio.h>
int main(void){
FILE *fp;
int x, y;
fp = fopen("text.txt", "r");
while( fscanf(fp, "%d,%d", &x, &y) != EOF ){
if(x<0 && y<0) break;
/* 処理 */
}
fclose(fp);
return 0;
}

質問のために簡素化させていますが、
「xとyが共に負」という条件以外の問題(値が読み取れないなど)があった場合にループを外れるには、
while文の制御式のところを「!= EOF」ではなく「== 2」と書いた方がよいのでしょうか?

「xとyが共に負」を判断するためには、if(x<0 && y<0)よりも、
if(x<0) if(y<0) と書いた方がよいのでしょうか?
(xが負じゃなかったらyについては判断しないような書き方)
xとyが対象的でなくなるので少し気になるのですが、普通はこのように判断回数を少なくするように書くのでしょうか。

また、fscanfの時点で読み込んだ値を評価することはできるのでしょうか?
while( (fp から "%d,%d" を読み込んで、その両方が負ではなければループに入る) )
というような書き方はできるのでしょうか?


拙い文章ですみません。


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


Name: 管理人 [URL]  ..ハッカー(177,181ポイント)   Date: 2007/01/27(土) 05:33   No:4006     
Title: Re:効率のよいプログラムの書き方    
while条件内で全て判定してしまいたいのでしたらこのようにかけるのではないでしょうか?

#include <stdio.h>

int main(void){
FILE *fp;
int x, y;
fp = fopen("text.txt", "r");
while( fscanf(fp, "%d,%d", &x, &y) == 2 && x>=0 && y>=0 );
fclose(fp);
return 0;
}


ここまで小さな処理でしたらどこでどう書いてもほとんど処理スピードは同じだと思いますから、

こんな場合でしたら「よりみやすい書き方」を重視した方がいいように思います。

確かにプログラムはスマートに書くようにしていくものですけど、

コマコマ小さくして後でみにくくてもいけませんしね。

スマートに書く方法というのも知ってて損は無いはずですから色んな書き方をしてみると良いと思います。



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

Name: sign  ..ぴよぴよ(909ポイント)   Date: 2007/01/27(土) 06:02   No:4007 解決!     
Title: Re:効率のよいプログラムの書き方    
> こんな場合でしたら「よりみやすい書き方」を重視した方がいいように思います。

実際には、この程度の判断(if文の処理)回数は気にしなくてよいのですね。
仰られるとおり、処理を優先させてしまうとソースの可読性が悪くなってしまいがちです。


> while( fscanf(fp, "%d,%d", &x, &y) == 2 && x>=0 && y>=0 )

同じ文内でも、読み込む処理以降であれば参照しても問題ないのですね。
プログラミングは初歩なのでこんな程度の理解で恐れ入ります…。


参考になりました。ありがとうございます。


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

Name: 管理人 [URL]  ..ハッカー(177,209ポイント)   Date: 2007/01/27(土) 06:09   No:4008     
Title: Re:効率のよいプログラムの書き方    
おはようございます^^

よくswap関数を作る時なんかは1行に3つ処理を書いたりしますね。

void swap(int a, int b){

int t;
t=a , a=b , b=t;
return;
}


こんな感じでコンマで区切れば左から順に処理を行ってくれます。

t=a , a=b , b=t;


t=a ; a=b ; b=t;


がどう違うのかはよく知りません^^;


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

Name: sign  ..かけだし(1,053ポイント)   Date: 2007/01/27(土) 07:42   No:4009     
Title: Re:効率のよいプログラムの書き方    
おはようございます。。
変数宣言みたいですね。

t=a , a=b , b=t;

t=a ; a=b ; b=t;


これだけだと同じように使うことができるのですかね。

int x, y, z;
とは書けますが、

int x; y; z;
とは書けませんよね。


レスありがとうございます。


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

Name: mas  ..初心者(5,528ポイント)   Date: 2007/01/27(土) 09:36   No:4014     
Title: Re:効率のよいプログラムの書き方    
> t=a , a=b , b=t;
> と
> t=a ; a=b ; b=t;
>
> がどう違うのかはよく知りません^^;

厳密なことはわかりませんが、
式の評価という観点で見ると違うのだと思います。

t=a , a=b , b=t;
は全体で一つの値を持ちます。
c = (t=a , a=b , b=t);
なので、上のような書き方もできます。
コンマ演算子は左→右の順に処理していって右側の値を全体の評価値とします。
最終的にはcにはb=t, つまりbの値がcに代入されると思います。
(ちなみにコンマ演算子は代入の'='よりも優先順位が低いです)

より単純に比較するなら、
int c = (0, 1, 2);
int d = 0; 1; 2;
printf("%d %d\n", c, d);
これを実行すると違いがわかりやすいかもしれません。

C言語の用語の使い方が間違っていたらすみません。


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



Name: 大阪  ..ぴよぴよ(498ポイント)   Date: 2007/01/23(火) 22:51   No:3869       
Title: ファイル入力    

入力ファイル内にあるアラビア数字の個数を数えるプログラムを以下の手順に沿って作成せよ.
@ コマンドラインから入力ファイル名,出力ファイル名を引数として指定する準備をプログラム内に記     述する.
A 入力ファイルをread属性,出力ファイルをwrite属性としてオープンする記述を行う.
B fgetc関数を用いて入力ファイルから1文字,関数sに代入する.
C 関数sの値をif文を用いて比較し,1〜9の数字であればカウンターに1プラスする構文を記述する    (例えばi++を使用).
D @〜Cを入力ファイルの最後の文字まで一文字ずつ実行し(EOFまで),ファイル内のすべての1〜9までの数字の個数をカウントする.
E 数えた1〜9までの文字数を画面および出力ファイルに出力する.

という問題で以下のようにといてみましたが途中の部分がよくわからずスカスカの状態でとまっています どなたかアドバイス もしくは模範解答お願いします
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[]){

FILE *fin, *fout;

char c;

int ;

if(argc!=3){
printf("引数の数が正常ではない\n");
exit(1);
}

if((fin = fopen(argv[1], "r")) == NULL ) {
printf("入力ファイルオープンエラー\n");
exit(1);
}
if((fout = fopen(argv[2], "w")) == NULL ) {
printf("出力ファイルオープンエラー\n");
exit(1);
}

while ( (c=fgetc(fin)) != EOF){
if(c==' ')
}
fclose(fin);
fclose(fout);

return 0;
}





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


Name: box  ..熟練のプログラマー(40,112ポイント)   Date: 2007/01/23(火) 23:08   No:3871     
Title: Re:ファイル入力    
> 入力ファイル内にあるアラビア数字の個数を数えるプログラムを以下の手順に沿って作成せよ.

アラビア数字にはゼロを含みます。
必要なのは0〜9の個数ですか?1〜9の個数ですか?

> B fgetc関数を用いて入力ファイルから1文字,関数sに代入する.

関数sではなく、変数sではありませんか?
ちなみに、fgetcの戻り値はchar型ではなくてint型です。

> C 関数sの値をif文を用いて比較し,1〜9の数字であればカウンターに1プラスする構文を記述する

もし、0〜9であれば、標準関数のisdigitで判定できます。


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

Name: 大阪  ..ぴよぴよ(553ポイント)   Date: 2007/01/23(火) 23:32   No:3872     
Title: Re:ファイル入力    
さっそくの解答ありがとうございます
必要なのは01〜9の個数です 関数sではなく、変数sでした、問題を間違えていましたすみません。


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

Name: box  ..熟練のプログラマー(40,132ポイント)   Date: 2007/01/23(火) 23:51   No:3873     
Title: Re:ファイル入力    
> 必要なのは01〜9の個数です

「0〜9」のことでしたら、先ほどの回答に書きましたとおり、
isdigitが使えます。


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

Name: 大阪  ..ぴよぴよ(617ポイント)   Date: 2007/01/24(水) 00:05   No:3874     
Title: Re:ファイル入力    
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[]){

FILE *fin, *fout;

char c;

int ;

intの後にどんなものをかけばいいのでしょうか


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

Name: box  ..熟練のプログラマー(40,428ポイント)   Date: 2007/01/24(水) 14:36   No:3886     
Title: Re:ファイル入力    
> intの後にどんなものをかけばいいのでしょうか

全く手詰まり状態ですか?
最初に提示されたコードは、完全ではなかったものの
それをベースにすればいいところまでいくと思うのですが…。

ファイルを読んだり、文字種別を判定したりする関数は
すでにわかっているのですから、後はファイルに書く関数について調べれば、
おおかた完成すると思います。


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

Name: 大阪  ..ぴよぴよ(628ポイント)   Date: 2007/01/24(水) 17:11   No:3893     
Title: Re:ファイル入力    
まったくの手詰まりじょうたいです

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

Name: 管理人 [URL]  ..ハッカー(172,064ポイント)   Date: 2007/01/25(木) 04:35   No:3910     
Title: Re:ファイル入力    
もし自分でそこまでお書きになっているなら簡単に解けると思うのですが。

1、2番の問題は解けましたか?

例えば、argv[1]には何が入っているか答えられますか?


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

Name: 大阪  ..ぴよぴよ(651ポイント)   Date: 2007/01/25(木) 20:10   No:3949     
Title: Re:ファイル入力    
授業中にやっていた課題でできない分は自分で持ち帰る というもので先生も質問を受けつけてくれず ここまでできたのが奇跡なぐらいです 自分でもわからないまま解いているので正直この後どうしていいかわからない状況なので質問させていただきました

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

Name: 管理人 [URL]  ..ハッカー(175,654ポイント)   Date: 2007/01/26(金) 01:10   No:3961     
Title: Re:ファイル入力    
>関数sに代入する

という意味が解らないのですが、どういう意味ですか?


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

Name: 大阪  ..ぴよぴよ(660ポイント)   Date: 2007/01/26(金) 01:25   No:3964     
Title: Re:ファイル入力    
もしかしたら 変数Sかもしれません

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

Name: 管理人 [URL]  ..ハッカー(175,726ポイント)   Date: 2007/01/26(金) 02:11   No:3966     
Title: Re:ファイル入力    
このプログラム、どこまで自分でお書きになったものですか?

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

Name: 大阪  ..ぴよぴよ(678ポイント)   Date: 2007/01/27(土) 08:24   No:4010     
Title: Re:ファイル入力    
似たような問題を改造しただけでほとんど理解せずかきましたのが現状です

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

Name: 管理人 [URL]  ..ハッカー(177,265ポイント)   Date: 2007/01/27(土) 09:32   No:4013     
Title: Re:ファイル入力    
次回の回答はしばらくお待ち下さい。

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



Name: mai  ..入門者(2,659ポイント)   Date: 2007/01/22(月) 11:00   No:3826       
Title: 関数の受け渡し    
関数の受け渡しの問題で
次のアイウの手順を参考にプログラムを作成せよ
(ア) 氏名,出身地,年齢,体重のそれぞれの変数名をname,hc,age,weightとして,それらの情報を持つ構造体profを宣言する.また,それぞれの変数に以下の3名分の情報を代入する.
 山本一郎,東京都,22才,65.3 kg
 近藤次郎,福岡県,21才,98.2 kg
 岡田三郎,北海道,19才,72.1 kg
(イ) 氏名を引数として戻り値をprof型とする関数rirekiを作成する.
(ウ) main関数内でgets関数を用いて氏名を入力し,関数rirekiに引数として渡し,氏名,出身地,年齢,体重の各情報を戻り値として得て,それらを画面に表示する.

最初の各メンバーの部分はこのような感じになるのでしょうか 
char name
int hc
float age
どなたか模擬解答をお願いできませんでしょうか
char weight


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


Name: a  ..ぴよぴよ(22ポイント)   Date: 2007/01/22(月) 11:07   No:3827     
Title: Re:関数の受け渡し    
ここは学校の問題をみんなで解決する掲示板ではないと思いますよ。

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

Name: ヒロ  ..ぴよぴよ(578ポイント)   Date: 2007/01/22(月) 11:14   No:3828     
Title: Re:関数の受け渡し    
確かにaさんの言うことは一理ありますね・・・

maiさんもある程度自分で考えて作ってみて、
作ったソースを見せていただければ、
「こうした方がいいよ」等のアドバイスもできると思いますよ。
まずは自分で挑戦してみましょう!

なぁんてぴよぴよレベルが偉そうに言える事ではないんでしょうけど・・・


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

Name: ま〜く  ..ぴよぴよ(567ポイント)   Date: 2007/01/22(月) 14:57   No:3833     
Title: Re:関数の受け渡し    
> 最初の各メンバーの部分はこのような感じになるのでしょうか 
> char name
> int hc
> float age
> char weight

名前と出身地は文字列、年齢は整数値、体重は実数値ですよね?
そうなると以下のようになります。

char name[20]; <--- 20は適当です
char hc[20]; <--- 20は適当です
int age;
float weight;


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

Name: mai  ..入門者(2,806ポイント)   Date: 2007/01/22(月) 21:44   No:3839     
Title: Re:関数の受け渡し    
最初の部分はこんな感じで大丈夫でしょうか
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct prof {
char name[20];
char hc[20];
int age;
float weight;



};

struct prof a(char c[])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
x.hc = 東京都;
x.age = 22才;
strcpy(x.weight, "65.3Kg");
}


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

Name: box  ..プログラマー(39,542ポイント)   Date: 2007/01/22(月) 22:05   No:3840     
Title: Re:関数の受け渡し    

> 最初の部分はこんな感じで大丈夫でしょうか

一部が正しくありません。

> x.hc = 東京都;

出身地は文字列データです。名前と同じようにstrcpyを使ってください。

> x.age = 22才;

数値データをセットするときに、単位(才)は不要です。

> strcpy(x.weight, "65.3Kg");

体重は数値データです。strcpyを使ってはいけません。



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

Name: mai  ..入門者(2,928ポイント)   Date: 2007/01/22(月) 22:25   No:3841     
Title: Re:関数の受け渡し    
このようになおしてみたのですが大丈夫でしょうか
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct prof {
char name[20];
char hc[20];
int age;
float weight;



};

struct prof a(char c[])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
strcpy(x.hc, "東京都");
x.age = 22;
x.weight=65.3;
}


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

Name: Yuki  ..入門者(4,162ポイント)   Date: 2007/01/23(火) 09:11   No:3845     
Title: Re:関数の受け渡し    
ちなみに、コンパイル〜実行環境はありますか?

タイプするだけより、ご自分で試していただけたほうが、より理解が深まると思うのですが。


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

Name: mai  ..入門者(3,429ポイント)   Date: 2007/01/23(火) 17:56   No:3856     
Title: Re:関数の受け渡し    
アドバイスありがとうございます 全体的には以下のように作ってみました どうでしょうか
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct ken {
char chiji[80];
int pop;
float tmp;
char flw[30];
};
struct prof a(char c[])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
strcpy(x.hc, "東京都");
x.age = 22;
x.weight=65.3;
}
if (strcmp(c, "近藤次郎") == 0) {
strcpy(x.name, "近藤次郎");
strcpy(x.hc, "福岡県");
x.age = 21;
x.weight=98.2;
}
if (strcmp(c, "岡田三郎") == 0) {
strcpy(x.name, "岡田三郎");
strcpy(x.hc, "北海道");
x.age = 19;
x.weight=72.1;
return x;
}

int main(void)
{
struct prof data;
char rireki[10];

while (1) {
printf("を入力してください:");
scanf("%s", rireki);
if (strcmp(rireki, "end") == 0) {
break;
}
data = a(rireki);
printf("氏 名:%s\n", data.name);
printf("出身地:%d\n", data.hc);
printf("年齢:%.1f\n", data.age);
printf("体重:%s\n\n", data.weight);
}
return 0;
}




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

Name: box  ..プログラマー(39,734ポイント)   Date: 2007/01/23(火) 19:04   No:3860     
Title: Re:関数の受け渡し    
お手元にCのコンパイラはないのですか?

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

Name: mai  ..入門者(3,454ポイント)   Date: 2007/01/23(火) 19:42   No:3862     
Title: Re:関数の受け渡し    
すみません 学校のパソコンルームにいかなければできないです

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

Name: ダッシュ  ..初心者(7,686ポイント)   Date: 2007/01/23(火) 20:10   No:3864     
Title: Re:関数の受け渡し    
http://dixq.net/c/

ここの管理人さんの作られたHPです。ここの「C言語を学ぶ前に」(ページ左側の欄の一番上)にコンパイラの落とし方が紹介されています。


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

Name: ダッシュ  ..初心者(7,704ポイント)   Date: 2007/01/23(火) 20:11   No:3865     
Title: Re:関数の受け渡し    
なぜかアイコンがお礼になってる・・・orz

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

Name: box  ..熟練のプログラマー(40,065ポイント)   Date: 2007/01/23(火) 21:49   No:3867     
Title: Re:関数の受け渡し    
> struct prof a(char c[])

問題文に
「(イ) 氏名を引数として戻り値をprof型とする関数rirekiを作成する.」
とあります。
関数名はaではないですね。

> return x;

return文を書く場所が正しくありません。

> printf("を入力してください:");

何の入力を求めているのか、正しく書いてください。

> scanf("%s", rireki);

問題文に
「(ウ) main関数内でgets関数を用いて氏名を入力し」
とあります。
scanfは使えないですね。
また、名前に対する変数名がrirekiというのは、ふさわしくないですね。


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

Name: mai  ..入門者(3,503ポイント)   Date: 2007/01/23(火) 22:37   No:3868     
Title: Re:関数の受け渡し    
boxさんがおっしゃられていた部分を変えてみましたがいかがでしょうか
gets関数の部分があまり自信がないのですが


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

Name: mai  ..入門者(3,761ポイント)   Date: 2007/01/23(火) 23:01   No:3870     
Title: Re:関数の受け渡し    
すみませんちゃんと貼れていませんでした 失礼しました
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct ken {
char chiji[80];
int pop;
float tmp;
char flw[30];
};
struct prof rireki(char c[])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
strcpy(x.hc, "東京都");
x.age = 22;
x.weight=65.3;
}
if (strcmp(c, "近藤次郎") == 0) {
strcpy(x.name, "近藤次郎");
strcpy(x.hc, "福岡県");
x.age = 21;
x.weight=98.2;
}
if (strcmp(c, "岡田三郎") == 0) {
strcpy(x.name, "岡田三郎");
strcpy(x.hc, "北海道");
x.age = 19;
x.weight=72.1;
}
{
printf("正しい名前を入力して下さい\n");
exit(0);
}
return x;
}

int main(void)
{
struct prof data;
char rireki[10];

while (1) {
printf("名前を入力してください:");
gets(ss, rireki);
if (strcmp(rireki, "end") == 0) {
break;
}
data = rireki(name);
printf("氏 名:%s\n", data.name);
printf("出身地:%d\n", data.hc);
printf("年齢:%.1f\n", data.age);
printf("体重:%s\n\n", data.weight);
}
return 0;
}



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

Name: box  ..熟練のプログラマー(40,072ポイント)   Date: 2007/01/24(水) 13:33   No:3884     
Title: Re:関数の受け渡し    
コンパイルすると何個かエラーが出るはずです。
エラーメッセージを見て、ご自分でどこまで修正できるか
挑戦してみてください。


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

Name: mai  ..入門者(3,970ポイント)   Date: 2007/01/24(水) 17:34   No:3895     
Title: Re:関数の受け渡し    
学校のパソコンルームを先生に無理を言ってお願いしてあけてもらい、コンパイルしてみましたが、以下の部分でエラーが多く確認されましたが修正不可能でした 一部を直すと前の部分でエラーが出てしまいエラーの連鎖となってしまいます
while (1) {
printf("名前を入力してください:");
gets(ss, rireki);
if (strcmp(rireki, "end") == 0) {
break;
}
data = rireki(name);
printf("氏 名:%s\n", data.name);
printf("出身地:%d\n", data.hc);
printf("年齢:%.1f\n", data.age);
printf("体重:%s\n\n", data.weight);
}


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

Name: mai  ..入門者(3,993ポイント)   Date: 2007/01/25(木) 20:28   No:3950     
Title: Re:関数の受け渡し    
エラーが修正できずこまっています どなたかたすけてください お願いします

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

Name: box  ..熟練のプログラマー(41,213ポイント)   Date: 2007/01/25(木) 20:49   No:3952     
Title: Re:関数の受け渡し    
> エラーが修正できずこまっています どなたかたすけてください お願いします

そもそも、構造体の定義が正しくないですよ。よく確認してください。
知事名や県花名などの定義は、以前の問題のものです。


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

Name: mai  ..入門者(4,031ポイント)   Date: 2007/01/26(金) 00:12   No:3959     
Title: Re:関数の受け渡し    
定義の何がちがうのでしょうか。 これでいいと思って解いていたのですが

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

Name: 管理人 [URL]  ..ハッカー(175,752ポイント)   Date: 2007/01/26(金) 02:14   No:3967     
Title: Re:関数の受け渡し    
ネットで「構造体」で調べると沢山出てきますので、まず、定義と宣言をきちんと書いて見ましょう。

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

Name: ま〜く  ..ぴよぴよ(598ポイント)   Date: 2007/01/26(金) 02:16   No:3968     
Title: Re:関数の受け渡し    
あら^^;
私がアドバイスした結果 ちゃんとprofという構造体を定義できていたじゃないですか。

> 最初の部分はこんな感じで大丈夫でしょうか
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
>
> struct prof {
> char name[20];
> char hc[20];
> int age;
> float weight;
>
>
>
> };
> ...


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

Name: 管理人 [URL]  ..ハッカー(175,718ポイント)   Date: 2007/01/26(金) 03:04   No:3969     
Title: Re:関数の受け渡し    
maiさん、お伝えしたい事がありますので私までメールを送っていただけないでしょうか。
どうかルールを守って投稿してください。お願いします。


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

Name: mai  ..入門者(3,771ポイント)   Date: 2007/01/27(土) 08:29   No:4011     
Title: Re:関数の受け渡し    
大変ご迷惑をおかけしもうしわけありませんでした。 以下のようになりましたどうでしょうか
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
>
> struct prof {
> char name[20];
> char hc[20];
> int age;
> float weight;
>
};
struct prof rireki(char c[])
{
struct prof x;

if (strcmp(c, "山本一郎") == 0) {
strcpy(x.name, "山本一郎");
strcpy(x.hc, "東京都");
x.age = 22;
x.weight=65.3;
}
if (strcmp(c, "近藤次郎") == 0) {
strcpy(x.name, "近藤次郎");
strcpy(x.hc, "福岡県");
x.age = 21;
x.weight=98.2;
}
if (strcmp(c, "岡田三郎") == 0) {
strcpy(x.name, "岡田三郎");
strcpy(x.hc, "北海道");
x.age = 19;
x.weight=72.1;
}
{
printf("正しい名前を入力して下さい\n");
exit(0);
}
return x;
}


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

Name: 管理人 [URL]  ..ハッカー(177,253ポイント)   Date: 2007/01/27(土) 09:27   No:4012     
Title: Re:関数の受け渡し    
いえ、投稿内容に問題があると申し上げているのではないのです。
何が規約違反かわからないのでしたら、お伝えしますので、dixqhp@gmail.comまでご連絡下さい。


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



Name: 初心者  ..入門者(4,732ポイント)   Date: 2007/01/26(金) 22:07   No:3996       
Title: 初期設定    
BCC Developerで設定を行い、コンパイルしたところ

1: インクルードファイル 'DxLib.h' をオープンできない

とエラーが出ます。
書いてある通りにしたつもりですが、何が間違っているんでしょうか??

ちなみにプロジェクトとは何でしょうか??
初歩的な質問で申し訳ないです。
よろしくお願いします。


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


Name: 管理人 [URL]  ..ハッカー(176,690ポイント)   Date: 2007/01/27(土) 03:22   No:4001     
Title: Re:初期設定    
それはBCC Developerの設定が出来ていないのではないでしょうか?

すみません、そのコンパイラで設定したことがないので、よくわかりません;

本家の掲示板で聞いてみてください。

http://hpcgi2.nifty.com/natupaji/aska.cgi


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



Name: 管理人 [URL]  ..ハッカー(173,145ポイント)   Date: 2007/01/25(木) 05:23   No:3917       
Title: やっと終わり(>_<) (雑談板)    
いや〜やっと卒論が終わりました〜(>_<

ホントに忙しかったです(T_T)

もう5日連続で徹夜したり、学校泊り込みは当たり前で・・。

結局私の研究室は全員通りましたけど、となりの研究室は7人中4人も卒論不合格になったとか・・・。

シュウカツ終わってるのに卒業できなかったらどうなるんだろう・・とか思いながら見てました;

卒論提出当日までバタバタ修正してホントギリギリで完成しました^^;

やっとゆっくり寝れる!!って言うのがホントに嬉しいです。

卒論が終わったら

・バイクをカスタマイズする
・新しいゲームやツールの作成する
・JAVAへ挑戦する
・やりかけのFF12を最後までやる
・ドライブウェイへ走りに行く
・ヘリのラジコンを買ってみる
・HPの作成続行
・愛犬の毛繕いをする

・・・何より掲示板の回答をしなければ^^;

などなどずっと卒論が終わったらやろうと思ってた事あったんで、それがやっと出来るかと思うと、今までの疲れが吹き飛びます♪

なにより終わってほっとしました(o→ܫ←o)


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


Name: 管理人 [URL]  ..ハッカー(173,446ポイント)   Date: 2007/01/25(木) 05:23   No:3918     
Title: Re:やっと終わり(>_<) (雑談板)    
掲示板も大変多くの方に見ていただきありがとうございますm(_ _)m
一日の質問数が大変な量になってしまいホントに回答者様のお力あっての掲示板になっています。
皆様ありがとうございます。これからもよろしくお願いしますm(_ _)m


後、一つお願いがあります。
「教えてGoo」や「OK Wave」等の質問サイトからお越しいただいている方が多いようです。
そこの回答者の方の中にいつもここを紹介してくださる方がいらっしゃるようなのですが、
時々「丸投げはこちらでしてください」って書いてある記事をみます。

ここは丸投げサイトではないので、そのような認識&記述はどうか行わないで下さい。お願いします。m(_ _)m


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

Name: ダッシュ  ..初心者(7,760ポイント)   Date: 2007/01/26(金) 21:33   No:3994     
Title: Re:やっと終わり(>_<) (雑談板)    
管理人さんお疲れ様です!これで院への進級は確実ですね!あと一年やってやっと大学受験の僕からはちょっと羨ましいです。

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

Name: 管理人 [URL]  ..ハッカー(176,794ポイント)   Date: 2007/01/27(土) 03:20   No:4000     
Title: Re:やっと終わり(>_<) (雑談板)    
進級は試験と卒論が両方いけてたら決まります^^;
発表までドキドキで寝られない・・。



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



Name: しゅう  ..ぴよぴよ(278ポイント)   Date: 2007/01/22(月) 01:50   No:3814       
Title: 座標比較    
ご無沙汰してます。また詰まっちゃいましたんでおねがいします。
テキストファイル(中身は三次元の座標が書いてあります)を比較して何%合ってるかって言うプログラムを作りたいです。
どうすればいいかお願いします。


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


Name: box  ..プログラマー(39,086ポイント)   Date: 2007/01/22(月) 09:49   No:3819     
Title: Re:座標比較    
> 何%合ってるか

合致度を求めるロジック(計算式)は明確になっていますか?


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

Name: 管理人 [URL]  ..ハッカー(168,232ポイント)   Date: 2007/01/23(火) 12:06   No:3847     
Title: Re:座標比較    
2つのファイルからデータを読み取って比較するのでしょうか?

三次元の座標が書いてあるとは主にどんな座標で、どのようなフォーマットすか?

(0,3,4),(2,6,3),(3,6,4)...とか書いてあるんでしょうか?


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

Name: しゅう  ..ぴよぴよ(350ポイント)   Date: 2007/01/24(水) 10:37   No:3876     
Title: Re:座標比較    
ちょっと変更です。
えと何%合ってるかどうかではなく、幾つ一致したかに変わりました。
なのでロジックは引くだけで大丈夫かな?と思っています。
座標は
1,3,2
2,1,4

 ・
 ・

て感じで書かれています。


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

Name: keichan  ..中級者(10,723ポイント)   Date: 2007/01/24(水) 11:00   No:3879     
Title: Re:座標比較    
ファイルに何万もの座標がないのであれば
一旦変数に全部座標を読み込んで、比較を行う方法が楽そうです。


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

Name: しゅう  ..ぴよぴよ(362ポイント)   Date: 2007/01/25(木) 02:08   No:3901     
Title: Re:座標比較    
座標は3万ほど有ります

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

Name: 管理人 [URL]  ..ハッカー(171,789ポイント)   Date: 2007/01/25(木) 04:01   No:3907     
Title: Re:座標比較    
遅くなりました。

えっと、仕様を明確にしていいですか?

1,2,3
4,2,4
6,2,4
3,7,4
1,2,3
6,3,5
4,2,4
1,2,3

このような3次元データがあるとします。
8個のデータのうち、1,2,3は3つ重複していました。
4,2,4は2つ重複していました。

このようにこれが何個って言わないといけないのでしょうか?
それとも一致した座標の個数だけでよく、重複回数は必要ないのでしょうか?


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

Name: 管理人 [URL]  ..ハッカー(172,055ポイント)   Date: 2007/01/25(木) 04:22   No:3908     
Title: Re:座標比較    
重複した座標の個数だけでしたら以下で計算できると思います。

#include <stdio.h>


#define N 10

typedef struct{
int x,y,z;
}zahyou_t;

int main(){
int count=0,on;
int onoff[N]={};
zahyou_t num[N]={{1,2,3},
{2,2,3},
{3,2,3},
{4,2,3},
{5,2,3},
{6,2,3},
{6,2,3},
{1,2,3},
{1,2,3},
{2,2,3}};
for(int i=0;i<N;i++){
if(onoff[i]==1)
continue;
on=0;
for(int j=0;j<N;j++){
if(i==j)
continue;
if(num[i].x==num[j].x && num[i].y==num[j].y && num[i].z==num[j].z){
onoff[j]=1;
on=1;
}
}
if(on==1 && onoff[i]==0)
count++;
}
printf("一致する座標は%d個\n",count);
return 0;
}


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

Name: しゅう  ..ぴよぴよ(630ポイント)   Date: 2007/01/25(木) 10:10   No:3924     
Title: Re:座標比較    
えっと例えば
Aのデータが
1,2,3
1,3,3
2,1,2
2,2,3
3,2,3
3,3,1

Bのデータが
1,1,2
1,2,3
1,3,3
2,1,2
2,2,3
3,2,3


だとしたとき
AとBを比較して一致しない座標が
1,1,2
2,1,2
3,3,1
なので一致しない座標は3個ですみたいにしたいんです。


それで引いて絶対値が1になる部分をカウントしていけばいいかなと思ったんですが、この場合どのような感じになるでしょうか?


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

Name: box  ..熟練のプログラマー(40,653ポイント)   Date: 2007/01/25(木) 10:19   No:3925     
Title: Re:座標比較    
> AとBを比較して一致しない座標が
> 1,1,2
> 2,1,2
> 3,3,1
> なので一致しない座標は3個ですみたいにしたいんです。

2,1,2
はAにもBにもありますが、「一致しない」と判断するのですか?
一致するかしないかの判断基準がよくわかりません。


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

Name: しゅう  ..ぴよぴよ(575ポイント)   Date: 2007/01/25(木) 10:21   No:3926     
Title: Re:座標比較    
>2,1,2
>はAにもBにもありますが、「一致しない」と判断するのですか?

すいません見間違って余計な物まで書いただけです。


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

Name: box  ..熟練のプログラマー(40,725ポイント)   Date: 2007/01/25(木) 10:33   No:3928     
Title: Re:座標比較    
AとBの並び順は
・第一キー:X座標の昇順
・第二キー:Y座標の昇順
・第三キー:Z座標の昇順
であることが保証されていますか?

もし保証されていなければ、座標比較の前にソートのロジックを
組み込んでおく必要がありそうです。


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

Name: 管理人 [URL]  ..ハッカー(174,850ポイント)   Date: 2007/01/25(木) 15:37   No:3941     
Title: Re:座標比較    
↑クリックで画像拡大↑

とりあえず出来ました。
こんな感じでしょうか?
num1とnum2に3次元の座標があり、そのうちnum1のxをソートして比較しています。
詳しい内容は次の投稿の注釈をご覧下さい。

なお、データが3万ということなんでクイックソートを用いました。
クイックソートの説明は私のHPの別ページで詳しく書いていますのでご覧下さい。

 

#include <stdio.h>

#define N 10

typedef struct{
int x,y,z;
}zahyou_t;


void change(int i,int j, zahyou_t num[ ]){//配列要素i番目とj番目の値を入れ替える
int t;
t=num[i].x; num[i].x=num[j].x; num[j].x=t;
t=num[i].y; num[i].y=num[j].y; num[j].y=t;
t=num[i].z; num[i].z=num[j].z; num[j].z=t;
}

void sort(int l, int r, zahyou_t num[ ]){//lを一番左端の配列要素、rを一番右端の要素としてソートする。
int i,j,p;
i=l;j=r;
p=num[(l+r)/2].x;
while(1) {
while(num[i].x<p){//左からピボット以上を探索
i++;
}
while(p<num[j].x){//右からピボット以下を探索
j--;
}
if(i>=j){//探索地点がぶつかったら終了
break;
}
change(i,j,num);//お互い発見した値をいれかえる
i++;
j--;
}

if(l<i-1){//左範囲が分割可能なら
sort(l,i-1,num);//左範囲を分割してソートを行う
}
if(j+1<r){//右範囲が分割可能なら
sort(j+1,r,num);//右範囲を分割してソートを行う
}
}

int main(void){
zahyou_t num1[N]=
{{1,2,3},
{3,8,4},
{7,7,9},
{4,1,5},
{5,1,3},
{1,2,3},
{6,4,6},
{3,1,4},
{6,2,2},
{3,1,4}};
zahyou_t num2[N]=
{{7,2,3},
{1,2,3},
{1,2,3},
{6,4,6},
{5,1,5},
{3,1,4},
{3,2,3},
{6,2,2},
{1,2,3},
{3,1,4}};
int count=0,on;
int onoff[N]={};
int x=-1,y=-1,z=-1;//存在しない座標をセット

printf("num1ソート作業前\n");
for(int i=0;i<N;i++)
printf("%d %d %d\n",num1[i].x,num1[i].y,num1[i].z);

sort(0, N-1, num1);

printf("num1ソート作業後\n");
for(int i=0;i<N;i++)
printf("%d %d %d\n",num1[i].x,num1[i].y,num1[i].z);
printf("num2\n");
for(int i=0;i<N;i++)
printf("%d %d %d\n",num2[i].x,num2[i].y,num2[i].z);

for(int i=0;i<N;i++){
if(num1[i].x==x && num1[i].y==y && num1[i].z==z)
continue;
on=0;
for(int j=0;j<N;j++){
if(num1[i].x==num2[j].x && num1[i].y==num2[j].y && num1[i].z==num2[j].z){
on=1;
printf("num1[%d]とnum2[%d]が一致\n",i,j);
break;
}
}
if(on==1)
count++;
x=num1[i].x; y=num1[i].y; z=num1[i].z;
}
printf("一致したのは%d個\n",count);
return 0;
}


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

Name: 管理人 [URL]  ..ハッカー(175,261ポイント)   Date: 2007/01/25(木) 15:41   No:3942     
Title: Re:座標比較    
最初のprintfは表示をおこなっているだけですので、後半をご覧下さい。

何かわからないところがあったらまた聞いてください。


int main(void){
zahyou_t num1[N]=
{{1,2,3},
{3,8,4},
{7,7,9},
{4,1,5},
{5,1,3},
{1,2,3},
{6,4,6},
{3,1,4},
{6,2,2},
{3,1,4}};
zahyou_t num2[N]=
{{7,2,3},
{1,2,3},
{1,2,3},
{6,4,6},
{5,1,5},
{3,1,4},
{3,2,3},
{6,2,2},
{1,2,3},
{3,1,4}};
int count=0,on;
int onoff[N]={};
int x=-1,y=-1,z=-1;//存在しない座標をセット

printf("num1ソート作業前\n");
for(int i=0;i<N;i++)
printf("%d %d %d\n",num1[i].x,num1[i].y,num1[i].z);

sort(0, N-1, num1);

printf("num1ソート作業後\n");
for(int i=0;i<N;i++)
printf("%d %d %d\n",num1[i].x,num1[i].y,num1[i].z);
printf("num2\n");
for(int i=0;i<N;i++)
printf("%d %d %d\n",num2[i].x,num2[i].y,num2[i].z);

for(int i=0;i<N;i++){
//前の座標をx,y,zに格納しておき、前のと同じだったらカウントしない。
if(num1[i].x==x && num1[i].y==y && num1[i].z==z)
continue;
on=0;//forで回った後、今回の比較で一致したものがあったかどうかを示す。
for(int j=0;j<N;j++){
if(num1[i].x==num2[j].x && num1[i].y==num2[j].y && num1[i].z==num2[j].z){//比較
on=1;
printf("num1[%d]とnum2[%d]が一致\n",i,j);
break;
}
}
if(on==1)//一致したものがあったらカウント
count++;
x=num1[i].x; y=num1[i].y; z=num1[i].z;//今回の座標を次の比較で使うため、記憶
}
printf("一致したのは%d個\n",count);
return 0;
}


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

Name: しゅう  ..ぴよぴよ(767ポイント)   Date: 2007/01/25(木) 21:50   No:3954     
Title: Re:座標比較    
一致した物ではなく一致しなかった物を出したいんでonが0のときカウントするようにしたんですが、これではAにあってBにない時はカウントされますがAになくてBにある場合はカウントされないんですがどこを弄ればいいでしょうか?
あと座標のある部分を1、ない部分を0と考えて絶対値A-Bで1になった部分を数えるようにしようって言うのは間違ってて無理なんでしょうか?(うまく作れてなかったですがそういう風に考えていたので管理人さんの考え方を見てそういうのもあるんだと感心してしまいました)


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

Name: フリオ  ..入門者(3,839ポイント)   Date: 2007/01/26(金) 00:04   No:3958     
Title: Re:座標比較    
 
 こんな感じでどうでしょう。


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

void DataError(int flag)
{
char *message[] = {"File Open Error", "Data Empty",};

puts(message[flag + 1]);
exit(1);
}

int ReadData(int data[][10][10][10], char *fname[])
{
FILE *fp;
int y, x, z, i, j;

for(j = 0; j < 2; j ++){
if((fp = fopen(fname[j + 1], "r")) == NULL) return -1;
for(i = 0; fscanf(fp, "%d,%d,%d", &x, &y, &z) != EOF; i ++){
data[j][y][x][z] |= 1;
}
fclose(fp);
}
return i;
}

int CompData(int result[][10][10], int data[][10][10][10])
{
int y, x, z, count;

for(count = y = 0; y < 10; y ++){
for(x = 0; x < 10; x ++){
for(z = 0; z < 10; z ++){
result[y][x][z] = data[0][y][x][z] ^ data[1][y][x][z];
count += result[y][x][z];
}
}
}
return count;
}

void PrintResult(int result[][10][10], int count)
{
int y, x, z;

for(y = 0; y < 10; y ++){
for(x = 0; x < 10; x ++){
for(z = 0; z < 10; z ++){
if(result[y][x][z]) printf("(%d,%d,%d)\n", x, y, z);
}
}
}
printf("Different %d\n", count);
return;
}

int main(int argc, char *argv[])
{
int result[10][10][10] = {0,};
int data[2][10][10][10] = {0,};
int count, flag;

if(argc != 3){
puts("Parameter Error");
return 1;
}
if((flag = ReadData(data, argv)) < 1) DataError(flag);
count = CompData(result, data);
PrintResult(result, count);
return 0;
}


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

Name: フリオ  ..入門者(4,723ポイント)   Date: 2007/01/26(金) 00:52   No:3960     
Title: Re:座標比較    
 
 配列をひとつにしました。


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

void DataError(int flag)
{
char *message[] = {"File Open Error", "Data Empty",};

puts(message[flag + 1]);
exit(1);
}

int ReadData(int data[10][10][10], char *fname[])
{
FILE *fp;
int y, x, z, i, j;

for(j = 1; j <= 2; j ++){
if((fp = fopen(fname[j], "r")) == NULL) return -1;
for(i = 0; fscanf(fp, "%d,%d,%d", &x, &y, &z) != EOF; i ++){
data[y][x][z] ++;
}
fclose(fp);
}
return i;
}

int ProcessData(int data[10][10][10])
{
int y, x, z, count;

for(count = y = 0; y < 10; y ++){
for(x = 0; x < 10; x ++){
for(z = 0; z < 10; z ++){
data[y][x][z] &= 1;
count += data[y][x][z];
}
}
}
return count;
}

void PrintResult(int data[10][10][10], int count)
{
int y, x, z;

for(y = 0; y < 10; y ++){
for(x = 0; x < 10; x ++){
for(z = 0; z < 10; z ++){
if(data[y][x][z]) printf("(%d,%d,%d)\n", x, y, z);
}
}
}
printf("Different %d\n", count);
return;
}

int main(int argc, char *argv[])
{
int data[10][10][10] = {0,};
int count, flag;

if(argc != 3){
puts("Parameter Error");
return 1;
}
if((flag = ReadData(data, argv)) < 1) DataError(flag);
count = ProcessData(data);
PrintResult(data, count);
return 0;
}


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

Name: 管理人 [URL]  ..ハッカー(175,698ポイント)   Date: 2007/01/26(金) 01:14   No:3963     
Title: Re:座標比較    
単に個数がほしいのでしたら
全部の個数 - count
でいいのではないでしょうか?


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

Name: フリオ  ..入門者(4,733ポイント)   Date: 2007/01/26(金) 01:41   No:3965     
Title: Re:座標比較    
 
 ごめんなさい。
配列が一つのほうは間違ってます。
これだと、同じファイルにデータの重複があると、
正しい結果が出ません。
 


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

Name: しゅう  ..ぴよぴよ(789ポイント)   Date: 2007/01/26(金) 23:14   No:3998 解決!     
Title: Re:座標比較    
載せて下さったソースを参考に何とか完成しましたどうもです。

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



Name: 霧子  ..ぴよぴよ(191ポイント)   Date: 2007/01/19(金) 16:24   No:3728       
Title: ゲーム    
こんにちは。また分からない問題がでましたので、質問しに来ました。
まず、
#include <stdio.h>

#define VT 10
#define HZ 10

int next [VT][HZ];
int now [VT][HZ]={{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,0,1,0,0,0},
{0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};
void calc_cell(int v,int h){
int work;
work=now[(v+VT-1)%VT][(h+HZ-1)%HZ]+now[(v+VT-1)%VT][(h+HZ)%HZ]+now[(v+VT-1)%VT][(h+HZ+1)%HZ]
+now[(v+VT)%VT][(h+HZ-1)%HZ] +now[(v+VT)%VT][(h+HZ+1)%HZ]
+now[(v+VT+1)%VT][(h+HZ-1)%HZ]+now[(v+VT+1)%VT][(h+HZ)%HZ]+now[(v+VT+1)%VT][(h+HZ+1)%HZ];


next[v][h]==0;
if(now [v][h]==0 && work==3)next[v][h]==1;
if(now [v][h]== 1 && work==2 || work == 3) next[v][h]==1;
}


void copystatus(void) {
int v,h;
for( v=0;v<VT;v++)
for(h=0;h<HZ;h++)
now[v][h]=next[v][h];
}



void showstatus(void){
int v,h;
for(v = 0; v< VT; v++) {
for(h= 0; h<HZ; h++)
if(now[v][h]==1)printf("*");
else printf(" ");
printf("\n");
}
}

void cls() {
printf("\033[2J");
}

main() {
int v,h;char com='c';

while(com!='q'){
cls();showstatus();
for(v=0;v<VT;v++)
for(h=0;h<HZ;h++)calc_cell(v,h);
copystatus();
printf("続ける:n セーブ:s ロード:l 戻る:r 終了:q\n");
scanf("%s",&com);
}
}


といったライフゲームをつくりました。

これを、

セーブとロードと1つ前に戻るを可能にしたいのです。



ファイルの入出力をつかって

FILE *fout;

fout=fopen("diskfile","w");でセーブ、wをrにしてロードをつくるようなことを考えているのですが、できませんでした。

それと、1つ戻るは今のところ考えつきません。逆のことをやるようにするとは思うのですが。



いろいろ調べてはみたのですが、分かりませんでした。すみませんが、どなたか教えてください。お願いします。





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


Name: バグ  ..上級者(21,055ポイント)   Date: 2007/01/19(金) 18:01   No:3733     
Title: Re:ゲーム    
1つ戻るだけでいいのならば、変化する1つ前の状態を別の領域にコピーしておけばいいと思います。
しかし、機能追加よりも先にバグ取りをした方がいいのではないでしょうか?ザッと見ただけでも、かなりの数のバグがあるようですし…このままではコンパイルが通らないはずです。


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

Name: 霧子  ..ぴよぴよ(234ポイント)   Date: 2007/01/19(金) 18:10   No:3735     
Title: Re:ゲーム    
バグさん返信ありがとうございます。
急いでつくったもので(^^;。バグがありますか、ちょっと考えてみます。


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

Name: 霧子  ..ぴよぴよ(190ポイント)   Date: 2007/01/19(金) 19:14   No:3740     
Title: Re:ゲーム    
多分バグ直ったと思うのですが・・・。

1つ戻るだけでいいのならば、変化する1つ前の状態を別の領域にコピーとは、どうすればよいのでしょうか?


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

Name: box  ..プログラマー(37,105ポイント)   Date: 2007/01/19(金) 23:18   No:3747     
Title: Re:ゲーム    
> 1つ戻るだけでいいのならば、変化する1つ前の状態を別の領域にコピーとは、どうすればよいのでしょうか?

配列nowと同じ大きさの領域(名前の例:prev)を用意し、
nowからprevへの全要素コピーを行なえばよいです。

全要素コピー直後は、prevとnowの内容は同じです。

次に、一手進めてnowの内容を書き換えると、
prevには直前の状態が、nowには現在の状態が入ります。

ここで、一手前へ戻りたければ、prevからnowへの
全要素コピーを行なえばよいです。


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

Name: 霧子  ..ぴよぴよ(675ポイント)   Date: 2007/01/20(土) 14:00   No:3757     
Title: Re:ゲーム    
boxさん返信ありがとうございます。

自分なりに考えてみたのが、mainの中だけかえて


main() {
FILE *fp,*fin,*prev;
int v,h,x;
char com='c';

while(com!='q'){
cls();showstatus();
for(v=0;v<VT;v++)
for(h=0;h<HZ;h++)calc_cell(v,h);
copystatus();
printf("続ける:n セーブ:s ロード:l 戻る:r 終了:q\n");
scanf("%s",&com);

prev=fopen("file2","w");
x=int now [VT][HZ];
fprintf(fp, "%d\n",x);
fclose(fp);exit(0);

if(com==s){
fp=fopen("file1","w");
x=int now [VT][HZ];
fprintf(fp, "%d\n",x);
fclose(fp);exit(0);
}
if(com==l){
fin=fopen("file1","r");
          fscanf(fin,"%d",&x)
fclose(fin);exit(0);
printf("%d\n",x);
}
if(com==r){

fin=fopen("file2","r");
          fscanf(fin,"%d",&x)
fclose(fin);exit(0);
printf("%d\n",x);
}
}
}
としたのですが、うまくいっていないと思います。(実はすぐコンパイルできる環境がないので確かめられていないのですが)
すみませんがどなたか、どのように直したらよいのか。また正解はどういったものか教えてください。お願いします。
ついでにexit(0);はある本をよんだらのっていましたので、終了するために必要だと思いいれておきました。あっているのでしょうか?


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

Name: 霧子  ..ぴよぴよ(768ポイント)   Date: 2007/01/21(日) 00:06   No:3779     
Title: Re:ゲーム    
入力と出力の部分を
x=int now [VT][HZ];
fprintf(fp, "%d\n",x);
と無理やりしたのはまずいでしょうねやっぱり。
boxさんが指摘してくれたように全要素コピーをしたいところですが・・・どうすればいいんでしょう?
なんか方法があるのでしょうか。それを出力もできるのでしょうか。
未だ、思考中です。



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

Name: 管理人 [URL]  ..ハッカー(166,944ポイント)   Date: 2007/01/21(日) 00:56   No:3783     
Title: Re:ゲーム    
こんにちは。
急いで読んだので、理解落ちがあると思いますが、その時はすみません。

えぇと、コピーした配列の中身をfprintfで書き出したいということですか?

それでしたら2重ループをつかって

for(i=0;i<VT;i++){
  for(j=0;j<HZ;j++){
    fprintf(fp, "%d ",x[i][j]);
  }
  fprintf(fp,"\n");
}

こう書いてみてはいかがでしょうか?

もし


int x[5][5]={
{1,2,3,4,5},
{2,3,4,5,6},
{3,4,5,6,7},
{4,5,6,7,8},
{5,6,7,8,9}};


このようにはいっているxでしたら書き出したファイルは

1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9


このようになっているはずです。

fin=fopen("file1","r");
fscanf(fin,"%d",&x)
fclose(fin);
exit(0);
printf("%d\n",x);

それとこのように書くと、最後のprintfが実行されないように思うのですが。

exitを書くとそこで強制終了しますからその後の処理は行われません。

行いたいことが違ってたらすみません・・



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

Name: 霧子  ..ぴよぴよ(899ポイント)   Date: 2007/01/21(日) 02:03   No:3789     
Title: Re:ゲーム    
管理人さん返信ありがとうございます。

いろいろのべましたが、結局は最初に述べたプログラムの
「セーブとロードと1つ前に戻るを
printf("続ける:n セーブ:s ロード:l 戻る:r 終了:q\n");
とあるように
キーボードでs押したらセーブ、l押したらロード、r押したら戻る
を可能にしたい」のです。


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

Name: 管理人 [URL]  ..ハッカー(167,940ポイント)   Date: 2007/01/21(日) 05:20   No:3793     
Title: Re:ゲーム    
なるほど、ライフゲームというゲームがあるんですね、知りませんでした・・。

ちょろっと解説をみたところルールがよくわかりません:;

時間の有る時よくみておきます。

とりあえず1つ前に戻るのはboxさんのおっしゃるとおりでいいのではないでしょうか。

ファイル書き出し、読み込みはスキャン、プリントそれぞれ2重ループを使って行いましょう。

正解を書いてあげられたらいいのですけど、、;

ちょっと時間を見つけて書いてみますね。(期待せずに待っててください;


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

Name: 霧子  ..ぴよぴよ(922ポイント)   Date: 2007/01/21(日) 13:15   No:3797     
Title: Re:ゲーム    
管理人さんありがとうございます。

自分も足りない頭で考え中です。


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

Name: バグ  ..上級者(22,553ポイント)   Date: 2007/01/21(日) 23:30   No:3807     
Title: Re:ゲーム    
ライフゲームの基本的なルールを調べてみました。

1:調査マスが死んでいて(0の状態)、周囲8マスの内の3マスが生きて(1の状態)いた場合に、次世代に誕生(1の状態)する。

2:調査マスが生きていて、周囲8マスの内の2マスか3マスが生きている場合は、次世代も継続して生き続ける。

3:それ以外の条件では死ぬ。

なんだか面白そうなので、コンソールアプリでパターンエディタも一緒に作ってみようかな?(^-^)

クラス化すれば、楽に作れる気がします…

どうも、C++から入った人間なせいか、C言語のみで組むのが苦手になってしまっているようです…(;^_^A


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

Name: バグ  ..上級者(22,668ポイント)   Date: 2007/01/22(月) 23:13   No:3842     
Title: Re:ゲーム    
1つ戻るとか、保存機能の無い簡単なライフゲームを作ってみました(^-^)

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

Name: 管理人 [URL]  ..ハッカー(167,974ポイント)   Date: 2007/01/23(火) 00:25   No:3843     
Title: Re:ゲーム    
http://dixq.net/game.html

バグさんがおつくりになったゲームをアップロードしておきました^^


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

Name: 霧子  ..ぴよぴよ(954ポイント)   Date: 2007/01/23(火) 18:39   No:3858     
Title: Re:ゲーム    
すごいですね。バグさん。
自分にはなにで作られたか分かりませんが。

自分は結局セーブ、ロード、戻るがまだできていない状況です。なんか単純そうな気がするんですがうまくいきません。


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

Name: 霧子  ..かけだし(1,120ポイント)   Date: 2007/01/24(水) 22:40   No:3896     
Title: Re:ゲーム    
>ファイル書き出し、読み込みはスキャン、プリントそれぞれ2重ループを使って行いましょう。
多分 whileの中の
cls();showstatus();
for(v=0;v<VT;v++)
for(h=0;h<HZ;h++)calc_cell(v,h);
copystatus();
で映し出したものを読み込みすると思うのですが。
でもその前の数字を読み込んでおいて書き出しはこの関数を通のですか?

なんか混乱してきています。

もうすぐ締め切りなので明日の朝までできなければ、残念ながら諦めたいと思います。


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

Name: 管理人 [URL]  ..ハッカー(168,251ポイント)   Date: 2007/01/25(木) 02:04   No:3899     
Title: Re:ゲーム    
すみません、とりあえず落ち着きましたので、今から作りますね。

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

Name: 霧子  ..かけだし(1,165ポイント)   Date: 2007/01/25(木) 02:08   No:3900     
Title: Re:ゲーム    
いえいえ、管理人さん謝る必要はないですよ。むしろこちらが感謝です。

>今から作りますね。
本当にありがとうございます。助かります。


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

Name: 管理人 [URL]  ..ハッカー(169,383ポイント)   Date: 2007/01/25(木) 03:19   No:3902     
Title: Re:ゲーム    
遅くなりました。最大限お書きになったプログラムをいかしたつもりです。

とりあえず、出来たと思うので、実行して自分の行いたい事とあってるか確認してください。

#include <stdio.h>

#include <stdlib.h>

#define VT 10
#define HZ 10

int prev [VT][HZ];
int next [VT][HZ];
int now [VT][HZ]={{0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,1,1,0,0,0,0},
{0,0,0,0,1,0,1,0,0,0},
{0,0,0,1,1,0,0,0,0,0},
{0,0,0,0,0,1,0,1,0,0},
{0,0,0,1,0,0,1,1,0,0},
{0,0,1,1,0,1,0,1,0,0},
{0,1,0,1,0,1,0,1,1,0},
{0,1,0,1,1,0,1,1,0,0},
{0,1,0,0,0,1,0,0,1,0}};
void calc_cell(){
int v,h,work;
for(v=0;v<VT;v++){
for(h=0;h<HZ;h++){
work=now[(v+VT-1)%VT][(h+HZ-1)%HZ]+now[(v+VT-1)%VT][(h+HZ)%HZ]+now[(v+VT-1)%VT][(h+HZ+1)%HZ]
+now[(v+VT)%VT][(h+HZ-1)%HZ] +now[(v+VT)%VT][(h+HZ+1)%HZ]
+now[(v+VT+1)%VT][(h+HZ-1)%HZ]+now[(v+VT+1)%VT][(h+HZ)%HZ]+now[(v+VT+1)%VT][(h+HZ+1)%HZ];
next[v][h]=0;
if((now [v][h]==0 && work==3) || (now [v][h]== 1 && work==2 || work == 3))
next[v][h]=1;
}
}
}

void copystatus(void) {
int v,h;
for( v=0;v<VT;v++){
for(h=0;h<HZ;h++){
prev[v][h]=now [v][h];
now [v][h]=next[v][h];
}
}
}

void copy_prev_status(void){
int v,h;
for( v=0;v<VT;v++)
for(h=0;h<HZ;h++)
now [v][h] = prev[v][h];
}

void showstatus(void){
int v,h;
for(v = 0; v< VT; v++) {
for(h= 0; h<HZ; h++){
if(now[v][h]==1)
printf("■");
else
printf("□");
}
printf("\n");
}
printf("\n\n");
return;
}

void read(){
int v,h;
FILE *fp;
if((fp=fopen("file1.txt","r"))==NULL){
printf("error");
exit(9);
}
for(v=0;v<VT;v++)
for(h=0;h<HZ;h++)
fscanf(fp,"%d\n",&now[v][h]);
fclose(fp);
return;
}

void save(){
int v,h;
FILE *fp;
if((fp=fopen("file1.txt","w"))==NULL){
printf("error");
exit(9);
}
for(v=0;v<VT;v++)
for(h=0;h<HZ;h++)
fprintf(fp,"%d\n",now[v][h]);
fclose(fp);
return;
}

int main() {
char com='c';
while(com!='q'){
system("cls");
if(com!='r' && com!='s' && com!='l'){
calc_cell();
copystatus();
}
showstatus();
printf("続ける:n\nセーブ:s\nロード:l\n戻る:r\n終了:q\n");
scanf("%s",&com);
if(com=='s')
save();
if(com=='r')
copy_prev_status();
if(com=='l')
read();
}
return 0;
}



http://dixq.net/etc/file1.txt

これを実行するフォルダにいれて実行してください。

説明は以下書きます。


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

Name: 管理人 [URL]  ..ハッカー(171,006ポイント)   Date: 2007/01/25(木) 03:29   No:3903     
Title: Re:ゲーム    
注釈を書きました。解らないところがあれば聞いてください。

#include <stdio.h>

#include <stdlib.h>

#define VT 10
#define HZ 10

int prev [VT][HZ];
int next [VT][HZ];
int now [VT][HZ]={{0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,1,1,0,0,0,0},
{0,0,0,0,1,0,1,0,0,0},
{0,0,0,1,1,0,0,0,0,0},
{0,0,0,0,0,1,0,1,0,0},
{0,0,0,1,0,0,1,1,0,0},
{0,0,1,1,0,1,0,1,0,0},
{0,1,0,1,0,1,0,1,1,0},
{0,1,0,1,1,0,1,1,0,0},
{0,1,0,0,0,1,0,0,1,0}};

//ここの処理は変わっていません。if文をちょっとスマートに書いただけです。
void calc_cell(){
int v,h,work;
for(v=0;v<VT;v++){
for(h=0;h<HZ;h++){
work=now[(v+VT-1)%VT][(h+HZ-1)%HZ]+now[(v+VT-1)%VT][(h+HZ)%HZ]+now[(v+VT-1)%VT][(h+HZ+1)%HZ]
+now[(v+VT)%VT][(h+HZ-1)%HZ] +now[(v+VT)%VT][(h+HZ+1)%HZ]
+now[(v+VT+1)%VT][(h+HZ-1)%HZ]+now[(v+VT+1)%VT][(h+HZ)%HZ]+now[(v+VT+1)%VT][(h+HZ+1)%HZ];
next[v][h]=0;
if((now [v][h]==0 && work==3) || (now [v][h]== 1 && work==2 || work == 3))
next[v][h]=1;
}
}
}

//コピーステータスでは、nowに計算結果を格納すると同時に、prev配列、つまり前回の状態を記憶する配列に
//今の状態を記憶します。1つ戻す操作を行う時に、prevをnowにいれたらいいわけです。
//これだと1つしか戻せず、2つ以上戻したい時は3次元配列を使うと良いでしょう。
void copystatus(void) {
int v,h;
for( v=0;v<VT;v++){
for(h=0;h<HZ;h++){
prev[v][h]=now [v][h];
now [v][h]=next[v][h];
}
}
}

//1つ前に戻す操作を実現します。prevの中身をnowにいれています。
void copy_prev_status(void){
int v,h;
for( v=0;v<VT;v++)
for(h=0;h<HZ;h++)
now [v][h] = prev[v][h];
}

//表示を行います。
void showstatus(void){
int v,h;
for(v = 0; v< VT; v++) {
for(h= 0; h<HZ; h++){
if(now[v][h]==1)
printf("■");
else
printf("□");
}
printf("\n");
}
printf("\n\n");
return;
}


//ロード機能です。
void read(){
int v,h;
FILE *fp;
//ファイルの情報ポインタをfpに格納します。このポインタがnullならエラーを表示し、
//即座に終了します。
if((fp=fopen("file1.txt","r"))==NULL){
printf("error");
exit(9);
}
//1行に1データずつあるので、その形式で読み込みます。
for(v=0;v<VT;v++)
for(h=0;h<HZ;h++)
fscanf(fp,"%d\n",&now[v][h]);
//ファイルを閉じます。
fclose(fp);
return;
}

//セーブ機能です。
void save(){
int v,h;
FILE *fp;
if((fp=fopen("file1.txt","w"))==NULL){
printf("error");
exit(9);
}
//1行に1データずつ記録します。
for(v=0;v<VT;v++)
for(h=0;h<HZ;h++)
fprintf(fp,"%d\n",now[v][h]);
fclose(fp);
return;
}

int main() {
char com='c';
while(com!='q'){
//画面のバッファをクリアし、画面の情報を消します。
system("cls");
//前回続ける以外の操作がされた時には計算を実行しません。
if(com!='r' && com!='s' && com!='l'){
calc_cell();
copystatus();
}
//表示します。
showstatus();
printf("続ける:n\nセーブ:s\nロード:l\n戻る:r\n終了:q\n");
scanf("%s",&com);
if(com=='s')
save();
if(com=='r')
copy_prev_status();
if(com=='l')
read();
}
return 0;
}


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

Name: 霧子  ..かけだし(1,213ポイント)   Date: 2007/01/25(木) 05:14   No:3916 解決!     
Title: Re:ゲーム    
管理人さん本当にありがとうございます。お疲れ様です。
多分あっていると思います。
わざわざ注釈までつけてくださって助かります。
ありがとうございました。


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

Name: 管理人 [URL]  ..ハッカー(173,628ポイント)   Date: 2007/01/25(木) 05:27   No:3919     
Title: Re:ゲーム    
私のような人間が書くソースですからあっている保証はないですし、もっとスマートに書く方法もあるはずです^^;
ですのでもし提出されるんでしたらしっかり確認してくださいね!

人の書いたプログラムってホントみにくいですからどこかわからないとこがあったら何でも聞いてくださいね〜☆

ライフゲームってゲーム知らなかったので一つ新しいゲームが知れてよかったです^^


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

Name: 管理人 [URL]  ..ハッカー(173,704ポイント)   Date: 2007/01/25(木) 05:29   No:3920     
Title: Re:ゲーム    

あ、注釈に書き忘れましたが、

強制終了をさせるexit関数は、

#include <stdlib.h>

を最初にかかないと使えません。これはstdlib.hっていう説明書の中にexit関数の使い方が書いてあるので

これをインクルード(直訳=含む)しないと機械がわからないから使えないんだって思ってください。


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

Name: バグ  ..上級者(22,909ポイント)   Date: 2007/01/25(木) 10:25   No:3927     
Title: Re:ゲーム    
変数workの計算式ですが、このままでは霧子さんの思う動きにならないと思います。
VTとHZは変数の個数であって、配列自体は[0]〜[VT -1](今回は[0]〜[9])、[0]〜[HZ - 1](今回は[0]〜[9])までしか用意されていませんので、今のままの計算式では、本来0〜9の間をループしなければいけないのに、0以下になった場合は8に、10より大きくになった場合に0に戻るので、本来参照してはいけないはずの11番目の[10]にアクセスしてしまっていて危険です。
計算式自体は間違っていないので、座標を求めている部分を…

a % b

から

a % ( b - 1 )

に変更するだけで対応できると思います。

でも、この座標計算式は勉強になりました。上下左右にループさせる時には便利ですよね(^-^)


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

Name: 管理人 [URL]  ..ハッカー(175,388ポイント)   Date: 2007/01/25(木) 15:58   No:3945     
Title: Re:ゲーム    
計算式は特に見ていませんでした^^;
ループにあまりが利用できるのは便利ですね^^


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

Name: バグ  ..上級者(23,141ポイント)   Date: 2007/01/25(木) 16:29   No:3946     
Title: Re:ゲーム    
実は、私も霧子さんのソースをとりあえず動くようにしてみたのですが、どうにもおかしな動きをしていたので、解析してみると…前記のような理由だったんです(^_^;)

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

Name: 霧子  ..かけだし(1,333ポイント)   Date: 2007/01/25(木) 17:18   No:3947     
Title: Re:ゲーム    
バグさん、管理人さんいろいろと補足説明ありがとうございます。

バグさんも動くようにして下さっていたんですね。感謝です。


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

Name: フリオ  ..入門者(3,237ポイント)   Date: 2007/01/25(木) 20:30   No:3951     
Title: Re:ゲーム    
 
>変数workの計算式ですが、このままでは霧子さんの思う動きにならないと思います。

 "work"の計算式は、管理人さんや、霧子さんの方法であってます。

VT = 10、v = 9 のとき、 (v + VT + 1) % VT は、
(9 + 10 + 1) % 10 = 20 % 10 = 0
また、VT = 10、 v = 0 のときは、
(0 + 10 - 1) % 10 = 9 % 10 = 9
で、9 の次は 0 に、0 の前は 9 になります。

VT で割った余りは、0 〜 (VT - 1)になるので、
[(v + VT + 1) % VT]は、[0] 〜 [VT - 1]であり、[VT]にはなりません。
HZについても同じです。

おかしな動きは、他に原因があるのではないでしょうか。
 


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

Name: 管理人 [URL]  ..ハッカー(175,667ポイント)   Date: 2007/01/26(金) 01:13   No:3962     
Title: Re:ゲーム    
う〜ん、ライフゲーム自体はじめてみたもので^^;

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

Name: 霧子  ..かけだし(1,357ポイント)   Date: 2007/01/26(金) 18:11   No:3992     
Title: Re:ゲーム    
フリオさんご指摘ありがとうございます。

なかなか、難しいものですね。


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



Name: tower  ..ぴよぴよ(285ポイント)   Date: 2007/01/26(金) 11:33   No:3973       
Title: 課題が進まなくて困ってます。    
今、課題でブロック崩しのゲームプログラミングをしているのですが
error C2660:'ID3DXFont::DrawTextW' :関数に7個の引数を指定できません。というエラーが出てしまいます。

//フォントの描画
RECT rect; //フォント位置を保持する構造体変数
SetRect( &rect , 0,0,640,480); //変数への位置セット
//文字列の準備と生成
TCHAR str[255];
_stprintf( str , _T("x=%f y=%f") , pos.x , pos.y ); //文字列生成

pFont->DrawText( NULL, //標準機能で描画
str, //表示文字列 エラー原因
_T("fontの表示デス"), //表示文字列
-1, //表示文字数
&rect, //表示位置
NULL, // 表示スタイル  
D3DCOLOR_RGBA(255,255,255,255)); //表示色

DXUTGetD3DDevice()->EndScene(); //シーンの描画終了
この辺に問題があると思うのですが、教えて頂けないでしょうか?


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


Name: keichan  ..中級者(11,349ポイント)   Date: 2007/01/26(金) 11:51   No:3974     
Title: Re:課題が進まなくて困ってます。    
ご使用のDirectXのバージョンが明記されていないので当たってないかもしれませんが
DirectX9 SDK (December 2004)のヘルプには引数は6個と書いてあります。


-----------------------------------------------------------------------
Syntax
INT DrawText(
LPD3DXSPRITE pSprite,
LPCTSTR pSring,
INT Count,
LPRECT pRect,
DWORD Format,
D3DCOLOR Color
);
-----------------------------------------------------------------------
なのでおそらく

pFont->DrawText( NULL,
str,
-1,
&rect,
DT_LEFT, // このパラメータはヘルプを見てお好きなのをどうぞ
D3DCOLOR_RGBA(255,255,255,255));
で表示できると思います。



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

Name: keichan  ..中級者(11,383ポイント)   Date: 2007/01/26(金) 11:52   No:3975     
Title: Re:課題が進まなくて困ってます。    
失礼しました。
最後の引数は D3DCOLOR_RGBA ではなく D3DCOLOR でしたね^^;
そこはいい様に変更してください。


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

Name: tower  ..ぴよぴよ(378ポイント)   Date: 2007/01/26(金) 12:26   No:3976 解決!     
Title: ありがとうございました。    
エラーが解消できました。感謝します。先生はどうにも苦手で、聞けずに困っていたんです。
課題はテキストをコピペして作っていくという、本当に初心者な事をやっているんですが
テキストの文章にミスがあったようです。
本当にありがとうございました。(__)


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

Name: keichan  ..中級者(11,479ポイント)   Date: 2007/01/26(金) 13:03   No:3977     
Title: Re:ありがとうございました。    
>先生はどうにも苦手で、聞けずに困っていたんです。
近くに識者がいらっしゃるなら、そちらで解決した方がいいと思います。
ピンポイントな回答だけでなく、その他のいろいろな話が聞けるはずですから。

苦手意識を克服して楽しく話ができるようになればいろいろな勉強になると思いますので頑張ってください。


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

Name: tower  ..ぴよぴよ(484ポイント)   Date: 2007/01/26(金) 15:16   No:3984     
Title: すみません。    
本来なら先生に聞くのが正しいと思うのですが、授業中にも教室を出て行ってしまう事が多いし
相性が合わなくてそれが難しい状態なんです。
なので、こちらにもちょくちょく聞きに来れると良いなぁと思っていたんですが
やはりこんなのは言い訳でしょうか?


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

Name: keichan  ..中級者(11,499ポイント)   Date: 2007/01/26(金) 15:30   No:3987     
Title: Re:すみません。    
いいえ。
あくまで私の意見を述べただけです。

当然諸々の事情で難しいと判断されることがあるでしょうから
"なにがなんでも"ととって頂かなくても構いません。

#ただ、識者が近くにいるのにもったいないなぁって思っただけですので^^;



自発的に自己能力を高めようという方の質問であれば
インターネットの能力を最大限に活用することはとてもいい事だと思います。

「お互いの能力を高めあえる場所」として活用していただける事を切に願っております。


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



Name: かすみ  ..ぴよぴよ(12ポイント)   Date: 2007/01/25(木) 18:12   No:3948       
Title: フローチャート    
フローチャートの質問です。
「変数Aに1〜10の値を加算し、結果を変数Bに代入し、出力する。」
というのをチャートにして表せという問題があります。

関数をABCを宣言し、表すところまではわかっているのですが、ループをどう使ったらいいかわかいません。
どなたかわかる方いらっしゃいますでしょうか。

よろしくお願いします。


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


Name: 管理人 [URL]  ..ハッカー(175,528ポイント)   Date: 2007/01/25(木) 22:57   No:3956     
Title: Re:フローチャート    
こんにちは。フローチャートについては検索すれば沢山出てきます。

http://www.google.co.jp/search?hl=ja&q=%E3%83%95%E3%83%AD%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88&lr=

書き方がよくわからないのでしたら、実際にそのプログラムを書いてみてください。

そのプログラムの処理を図に表すとよくわかりますよ。

慣れてきたらプログラムをいちいちかかなくても想像で書けるようになってきます。


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

Name: かすみ  ..ぴよぴよ(25ポイント)   Date: 2007/01/26(金) 14:38   No:3982 解決!     
Title: Re:フローチャート    
ありがとうございます。
プログラミングに入る前のフローチャートの問題でしたので、自分でなんとか答えを出してみました。

教えてくださりありがとうございました。


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



Name: 女郎花  ..ぴよぴよ(628ポイント)   Date: 2007/01/25(木) 01:51   No:3898       
Title: 宿題なのですが    
試験の成績0〜100点の範囲の整数を読み込む関数inputDataを作り、平均点を書き出すプログラムを作りなさい。入力の終端では関数 inputDataは-1を戻すことにします。

入力部分を関数に分ける目的は関数が戻す値を終了時の-1と正常な点数0〜100に制限し、main関数側では平均値計算に専念できる様にすることです。


#include<stdio.h>
 
/*
inputData関数の仕様
戻り値:
 1)0〜100の数値が入力されたらその値を戻す
 2)入力が数値に変換できない場合は-1を戻し、入力の終端を知らせる
例外:
 範囲外の数値が入力されたら警告をだし再度入力を繰り返す。
(上記1,2の何れかが成立するまで関数にとどまり処理を繰り返す)
*/
int inputData(void)
{
・・・・
}
 
int main(void)
{
  double total;
  int count,point;
  while(1){
     point=inputData();
     if(point==-1)break;
     total=total+point;
     count++;
  }
  if(count==0)printf("データが無いので平均点は計算できません");
  else printf("平均点=%3.1f\n",total/count);
  return 0;
  }



上記のプログラムの・・・・のとこを考えなければならないのですが自分は下記のように
考えたのですが上手くいきません。どうかご教授願えないでしょうか


int i,n;
while(1){
   printf("データを入力してください");
   i=scanf("%d",&n);
   if(i==1&&0<=n&&n<=100)
{
   return n;
   break;
}
else if(scanf("%d",&n)!=1)
{
  return -1;
  break;
}
  else
{
     printf("もう一度入力してください");
}





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


Name: 管理人 [URL]  ..ハッカー(171,022ポイント)   Date: 2007/01/25(木) 03:38   No:3904     
Title: Re:宿題なのですが    
今から見ますので少々お待ち下さい。

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

Name: 管理人 [URL]  ..ハッカー(171,130ポイント)   Date: 2007/01/25(木) 03:52   No:3905     
Title: Re:宿題なのですが    
おぉ、かなり正解ですよ。

めちゃくちゃおしいです。

おかきになったelse ifでくるっています。

ちょっと確かめてみてはいかがでしょう?


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

Name: 管理人 [URL]  ..ハッカー(171,512ポイント)   Date: 2007/01/25(木) 03:57   No:3906     
Title: Re:宿題なのですが    
もしどうしてもわからなければ以下をご覧下さい。

ちなみにreturnは行うとその時点で関数を抜け、main関数に処理が戻りますからbreak以下はおこなわれません。
ですからreturnの後に何かかいてもしかたないので、消しましょう。


#include<stdio.h> 

/*
inputData関数の仕様
戻り値:
1)0〜100の数値が入力されたらその値を戻す
2)入力が数値に変換できない場合は-1を戻し、入力の終端を知らせる
例外:
範囲外の数値が入力されたら警告をだし再度入力を繰り返す。
(上記1,2の何れかが成立するまで関数にとどまり処理を繰り返す)
*/
int inputData(void){
int i,n;
while(1){
printf("データを入力してください\n");
i=scanf("%d",&n);
if(i==1&&0<=n&&n<=100)
return n;
else if(i!=1)
return -1;
else
printf("もう一度入力してください");
}
}

int main(void)
{
double total;
int count,point;
while(1){
point=inputData();
if(point==-1)
break;
total=total+point;
count++;
}
if(count==0)
printf("データが無いので平均点は計算できません");
else
printf("平均点=%3.1f\n",total/count);
return 0;
}


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

Name: 女郎花  ..ぴよぴよ(664ポイント)   Date: 2007/01/25(木) 08:22   No:3922 解決!     
Title: Re:宿題なのですが    
管理人さま、どうもありがとうございます。
returnはそういうふうになっていましたか。
夜遅くに申し訳ありませんでした。


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

Name: box  ..熟練のプログラマー(40,677ポイント)   Date: 2007/01/25(木) 10:06   No:3923     
Title: Re:宿題なのですが    
> int count,point;

countはゼロで初期化しておく必要があります。


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

Name: 女郎花  ..ぴよぴよ(692ポイント)   Date: 2007/01/25(木) 13:58   No:3938 解決!     
Title: Re:宿題なのですが    
boxさん、ありがとうございます
上手く行きました


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

Name: 管理人 [URL]  ..ハッカー(175,275ポイント)   Date: 2007/01/25(木) 15:45   No:3943     
Title: Re:宿題なのですが    
あら、メイン関数の中も問題があったのですね、すみません^^;

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



Name: ヒロ  ..ぴよぴよ(667ポイント)   Date: 2007/01/25(木) 11:41   No:3932       
Title: プログラムから別のプログラムを起動する方法    
仕事のプログラムで詰まってしまいました・・・

プログラムを実行すると別の既存のプログラムを立ち上げたいのですが、
それを実行出来るような便利な関数って無いですかね?

Windows & VC++6.0


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


Name: ヒロ  ..ぴよぴよ(780ポイント)   Date: 2007/01/25(木) 11:58   No:3933     
Title: 補足    
ちょっとわかりにくかったので補足します。

たとえば、
「プログラムA」を実行すると、
別の場所にある「プログラムB」、「プログラムC」等、
複数のプログラムのコンソールが立ち上がるようなプログラムを作成したいです。

補足つけたら余計わかりづらくなったかも・・・


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

Name: Yuki  ..入門者(4,175ポイント)   Date: 2007/01/25(木) 12:12   No:3934     
Title: Re:補足    
ShellExecute関数はいかがでしょう



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

Name: ヒロ  ..ぴよぴよ(786ポイント)   Date: 2007/01/25(木) 13:22   No:3936     
Title: Re:補足    
Yukiさんありがとうございます。

出来ればAPIを使わずに行いたいんですが、
さすがにそれは無理ですか?
ShellExecuteが自作関数として作れれば尚良いんですが・・・
不可能ですよね?


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

Name: box  ..熟練のプログラマー(41,179ポイント)   Date: 2007/01/25(木) 13:33   No:3937     
Title: Re:補足    
標準ライブラリに
system(char *command)
という関数があります。これが使えないでしょうか。


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

Name: ヒロ  ..ぴよぴよ(804ポイント)   Date: 2007/01/25(木) 14:37   No:3939 解決!     
Title: ありがとうございました!    
boxさん、ありがとうございました。
なんとか解決出来そうです!


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



Name: バグ  ..上級者(23,177ポイント)   Date: 2007/01/25(木) 08:14   No:3921       
Title: リバーシのアルゴリズム    
今、かなり以前(C言語を勉強し始めた頃)に作っていたリバーシのプログラムを時間を見つけては組みなおしてるんですよ。

基本的な修正箇所は…

1:C言語らしくない部分の全面見直し(なんだかBASICみたいな組み方してました(笑))

2:置ける場所の検索ルーチンを再帰関数に置き換えてスマートな処理を目指す。

3:CPUのアルゴリズムの強化

という予定にしているんですよ。まぁ、ぶっちゃけ全部作り直した方が早い気もしますね(笑)

この中でも、1番ネックになりそうなのが3番目なんですよね。定石とか紹介されているページも見たりはしたのですが、いまいち規則性を見出だせなくて…(;^_^A

自分自身、リバーシに関しては初心者なので、どうすればCPUが強くなるのか分からないんですよね。

ちなみに今の時点でのアルゴリズムは、4角と確定箇所(絶対に取られない場所)を最優先して、あとはランダムという極めていい加減なものなので弱いです(笑)

何か、このポイントを押さえておけば強くなるようなものがあれば、是非教えてもらえないでしょうか?


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


Name: keichan  ..中級者(10,772ポイント)   Date: 2007/01/25(木) 10:43   No:3929     
Title: Re:リバーシのアルゴリズム    
私もリバーシは強くないのでアレですがw

>ちなみに今の時点でのアルゴリズムは、4角と確定箇所(絶対に取られない場所)を最優先して、あとはランダムという極めていい加減なものなので弱いです(笑)
ランダム抽選の箇所を一番多くひっくり返せるor次に相手が置かれてもひっくり返される数が最も少なくなる所に置く。

という方式に変えれば多少マシになるのではないでしょうか・・・?


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

Name: box  ..熟練のプログラマー(41,154ポイント)   Date: 2007/01/25(木) 11:04   No:3931     
Title: Re:リバーシのアルゴリズム    
もし、「ミニマックス法」や「αβ法」というキーワードについて
ご存じでなければ、調べてみてはいかがでしょうか。

すでにご存じでしたら申し訳ありません。


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

Name: バグ  ..上級者(23,099ポイント)   Date: 2007/01/25(木) 12:58   No:3935 解決!     
Title: Re:リバーシのアルゴリズム    
返信有難うございます(^-^)

色々なところで紹介されているんですねぇ…ちゃんと調べてから書くべきでした(^_^;)

何箇所かを覗いてみての感想なんですが、結局は『先読み』と『マス評価』の2点につきるようですね。
このマス評価というのが曲者でして、どこを高く評価するかというの部分は作り手に依存してしまうという事みたいなんですよ。

という事は、私がいくら頑張ってもある程度のものにしかならない…と(苦笑)

まぁ、それなりに遊べるようになったら、管理人さんにアップロードしてもらおうかと思っていますので、その時が来たら、よかったら遊んでみてくださいm(_ _)m


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



Name: あゆみ  ..ぴよぴよ(40ポイント)   Date: 2007/01/24(水) 10:48   No:3877       
Title: 宿題がわかりません(;△;)    
整数を入力し,それを10進,16進(8桁),8進(11桁)で,
次のように並べて表示するプログラムを作成せよ。16進,8進についてはビ
ット処理を行うこと。繰返し文を用いることにより,幾つかのデータで実行を
確認してみよ。
12 0000000C 000000000014
-1 FFFFFFFF 37777777777


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


Name: keichan  ..中級者(10,767ポイント)   Date: 2007/01/24(水) 11:02   No:3881     
Title: Re:宿題がわかりません(;△;)    
まず、どこがわからないのかを考えてください。

ビット演算については?
繰り返し文については?


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

Name: あゆみ  ..ぴよぴよ(54ポイント)   Date: 2007/01/24(水) 11:25   No:3882     
Title: Re:宿題がわかりません(;△;)    
ビット処理の意味がわかりません(^_^;)

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

Name: keichan  ..中級者(10,854ポイント)   Date: 2007/01/24(水) 11:54   No:3883     
Title: Re:宿題がわかりません(;△;)    
今までにビット演算を行うコードを書いたことがありますか?

int a = 0xdc;
printf("%x\n", a & 0x01);
printf("%x\n", a & 0x02);
printf("%x\n", a & 0x04);
printf("%x\n", a & 0x08);
printf("%x\n", a & 0x10);
printf("%x\n", a & 0x20);
printf("%x\n", a & 0x40);
printf("%x\n", a & 0x80);

これがビット演算の一部ですが、
上記コードがどういう結果になるか分かりますか?
分からなければ実際に実行して動作を確認してみてください。


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

Name: box  ..熟練のプログラマー(40,374ポイント)   Date: 2007/01/24(水) 14:39   No:3887     
Title: Re:宿題がわかりません(;△;)    
> 次のように並べて表示するプログラムを作成せよ。16進,8進についてはビ
> ット処理を行うこと。

今回必要な「ビット処理」って何でしょうね?
出題者が何をイメージしているのか、今ひとつピンとこないです。
printfの書式文字列を工夫すれば、仕様を満たすように出力できますが…。


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

Name: バグ  ..上級者(22,727ポイント)   Date: 2007/01/24(水) 14:50   No:3888     
Title: Re:宿題がわかりません(;△;)    
>>boxさん
多分、ビット演算の練習じゃないでしょうか?
実際、あゆみさんはビット演算についてよく分かっていないようですし…
その為、わざと繰り返し文を使うように明記しているのだと思います。


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

Name: box  ..熟練のプログラマー(40,524ポイント)   Date: 2007/01/24(水) 15:16   No:3889     
Title: Re:宿題がわかりません(;△;)    
最初の投稿にあった出力例を見ると、
12も-1も、ビット演算を行なわない状態で
そのまま16進・8進出力していますね。

繰り返し文を使うのは、いくつかのデータ(例:-1〜12)で
結果を確認するためだと、問題文を読み取りました。

というわけで、ビット演算がどうからんでくるのか、
未だにわかっていない状態です。


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

Name: フリオ  ..入門者(2,939ポイント)   Date: 2007/01/24(水) 16:52   No:3892     
Title: Re:宿題がわかりません(;△;)    
 
 文字列にして表示するのでしょうか。
それなら,ビット演算を使ってできますが。
 


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

Name: フリオ  ..入門者(2,973ポイント)   Date: 2007/01/24(水) 17:21   No:3894     
Title: Re:宿題がわかりません(;△;)    
 
 それとも、16進表記と8進表記を1桁ずつ処理していくのでしょうか。
 


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

Name: binjo  ..ぴよぴよ(215ポイント)   Date: 2007/01/25(木) 04:31   No:3909     
Title: Re:宿題がわかりません(;△;)    
すみません、質問した方と関係ないんですけど、見てて、疑問に思ったので教えてください。

int a = 0xdc;
printf("%x\n", a );
printf("%x\n", a & 0x01);
printf("%x\n", a & 0x02);
printf("%x\n", a & 0x04);
printf("%x\n", a & 0x08);
printf("%x\n", a & 0x10);
printf("%x\n", a & 0x20);
printf("%x\n", a & 0x40);
printf("%x\n", a & 0x80);

これを実行すると

dc
0
0
4
8
10
0
40
80

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


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

Name: 管理人 [URL]  ..ハッカー(172,841ポイント)   Date: 2007/01/25(木) 05:07   No:3915     
Title: Re:宿題がわかりません(;△;)    
まず、ビット演算について、、、、文字で説明するより、
こちらにわかりやすく書かれています。

本当に最初っから書いてありますので、ここで意味を掴んでみてください。

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


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

Name: box  ..熟練のプログラマー(41,098ポイント)   Date: 2007/01/25(木) 10:54   No:3930     
Title: Re:宿題がわかりません(;△;)    

>binjoさん
& はビットごとのANDをとります。

0xdc 11011100
& 0x01 00000001
----------------
00000000 (=0x00)

0xdc 11011100
& 0x02 00000010
----------------
00000000 (=0x00)

0xdc 11011100
& 0x04 00000100
----------------
00000100 (=0x04)

0xdc 11011100
& 0x08 00001000
----------------
00001000 (=0x08)

0xdc 11011100
& 0x10 00010000
----------------
00010000 (=0x10)

0xdc 11011100
& 0x20 00100000
----------------
00000000 (=0x00)

0xdc 11011100
& 0x40 01000000
----------------
01000000 (=0x40)

0xdc 11011100
& 0x80 10000000
----------------
10000000 (=0x80)



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



Name: P  ..かけだし(1,061ポイント)   Date: 2007/01/21(日) 20:51   No:3800       
Title: 無題    
一日中考えたのですが、どうしても解決できないので質問させていただきます。

#include "DxLib.h"


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; //DXライブラリ初期化 エラーが起きたら終了

int x = 100,y = 100,gazou[6],gazou2,flag=0,muki=0;
char key[256];

SetDrawScreen(DX_SCREEN_BACK);
LoadDivGraph("henzi5.png",6,3,2,31,60,gazou);

while(1) {
ClearDrawScreen();
GetHitKeyStateAll(key);
if(x%32!=0) {
flag = 1
if(key[KEY_INPUT_LEFT] == 1)
muki = 1;
else if(key[KEY_INPUT_RIGHT] == 1)
muki = 2;
else
flag = 0;
}
if(flag == 1) {
if(muki == 1)
x--;
else if(muki == 2)
x++;
}
{
if(x%32>0 && x%32<8)
gazou2 = gazou[muki*3-2];
else if(x%32> 8 && x%32<16)
gazou2 = gazou[muki*3-1 ];
else if(x%32>16 && x%32<24)
gazou2 = gazou[muki*3-2];
else if(x%32>24 && x%32<32)
gazou2 = gazou[muki*3-1];
else
gazou2 = gazou[muki*3-3];
}

if( key[ KEY_INPUT_ESCAPE ] == 1 )
break ;
if( ProcessMessage() == 1 )
break ;

DrawGraph(x,y,gazou2,true);
ScreenFlip();
}



DxLib_End() ;
return 0 ;
}


上記のプログラムは、キー入力によって画像を動かすプログラムなのですが
実行しても何も表示されません。
もちろんキーを押しても反応しません。

↑キーと↓キーには対応させていません。
右と左だけです。

なぜなんでしょうか?
ちなみに「char2.png」の画像については添付しておきました。



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


Name: P  ..かけだし(1,182ポイント)   Date: 2007/01/22(月) 18:25   No:3835     
Title: Re:無題    
すいません、少し訂正です。

LoadDivGraph("henzi5.png",6,3,2,31,60,gazou);

ここの「henzi5.png」の部分は「char2.png」です。


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

Name: GPGA  ..上級者(18,233ポイント)   Date: 2007/01/22(月) 19:15   No:3837     
Title: Re:無題    
> gazou2 = gazou[muki*3-3];
mukiが0のとき、gazou[-3]を参照している。


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

Name: 管理人 [URL]  ..ハッカー(168,128ポイント)   Date: 2007/01/23(火) 12:03   No:3846     
Title: Re:無題    
処理がどこでおかしいかわからなくなってしまったときは、デバッカで一つずつチェックしてみるとよいですよ^^
mukiを常に1か2の方向にしたいのでしたら、mukiをそのどちらかで初期化すると良いと思います。


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

Name: P  ..かけだし(1,287ポイント)   Date: 2007/01/23(火) 18:54   No:3859 解決!     
Title: Re:無題    
ご回答ありがとうございます。

>mukiが0のとき、gazou[-3]を参照している。

「−」で参照してはいけないのですね。
勉強になりました。

>デバッカで一つずつチェックしてみるとよいですよ^^

アドバイスありがとうございます。


ちなみに、無事解決できました。
わざわざこんな醜いプログラムソースを読んで、間違っている箇所のご指摘、それにアドバイス
本当にありがとうございました。



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

Name: 管理人 [URL]  ..ハッカー(172,745ポイント)   Date: 2007/01/25(木) 05:04   No:3914     
Title: Re:無題    
私の書くもののようなわかりにくいサンプルをご覧頂いて、ありがとうございます^^;

ゲームプログラミングの館でわかりにくいとことかありましたらいつでも是非聞いてください。

意見・要望によって色々変更していこうと思っていますので。

「こっちのソースの方がわかりやすい」っていうご指摘もお待ちしています☆


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



Name: ramu  ..ぴよぴよ(48ポイント)   Date: 2007/01/24(水) 07:24   No:3875       
Title: 超初心者です。どうかお願いします。。    
レベル(1)のAを選択してボタンを押すごとに(2)の1,2,3が
順番に表示され、レベル(1)のBを選択してボタンを
押すごとに(2)の1,2が順番に表示されるプログラムを書き
たいのですが。。どなたか教えてくださいm(_ _)m

(1) (2)
A 1
2
3

B 1
2


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


Name: keichan  ..中級者(10,688ポイント)   Date: 2007/01/24(水) 10:59   No:3878     
Title: Re:超初心者です。どうかお願いします。。    
説明がわかりません。

レベル(1)(2)って?
ボタンって?
1,2とは、どういう条件で出てくる数字が判定されているのですか?

開発環境はコンソールですか?Win32APIですか?


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

Name: 管理人 [URL]  ..ハッカー(172,060ポイント)   Date: 2007/01/25(木) 04:52   No:3912     
Title: Re:超初心者です。どうかお願いします。。    
何かの問題の書き写しですか?
ネットにその問題や説明画像があればそのURLを教えていただけたらありがたいです。
えぇと、まず質問なさった文章を客観的に見て、補足お願いします。
ここままではレベルの意味もAという正体も、ボタンの意味もわかりませんし、
お書きになったサンプルがコンソール出力されたものなのか、そういう結果が出力される事をお望みなのかもよくわかりませんので・・。


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



Name: ヒカル  ..ぴよぴよ(105ポイント)   Date: 2007/01/23(火) 19:46   No:3863       
Title: やれることはやりました、助けてください    
 入力ファイルSEISEKI.datを事前に用意し、出力ファイルresilt.datを作成するプログラムqtotal.cを書け!
という問題です。 入力と出力ファイルはコマンドラン引数から文字列として取得し、プログラムでは構造体を使用する。実行方法>bcc -ehensa qtotal4.c >qtotal4 SEISEKI.dat result.dat

result.dat の内容                        SEISEKI.datのなかみです↓
Grade Name Eng. Math. Sci. Total Mean Hensa
1 Lawler,E.L. 90 85 78 253 84.33 65   Lawler,E.L. 90 85 78
2 Jong,K.A. 80 80 91 251 83.67 65   Forrest,S. 60 85 100
3 Forrest,S. 60 85 100 245 81.67 63   Richardson,J. 60 70 65
4 Powell,M.J.D. 90 85 40 215 71.67 54   Powell,M.J.D. 90 85 40
4 Martin,F.G. 80 75 60 215 71.67 54   Martin,F.G. 80 75 60
6 Smith,R.E. 50 75 85 210 70.00 53   Reed,J. 50 60 98
7 Reed,J. 50 60 98 208 69.33 52   Holland,J.H. 100 70 33
8 Fletcher,R. 80 65 60 205 68.33 51   Smith,R.E. 50 75 85
9 Holland,J.H. 100 70 33 203 67.67 51   Fletcher,R. 80 65 60
9 Brent,R.P. 30 90 83 203 67.67 51   Brent,R.P. 30 90 83
11 Jones,W.T. 80 65 56 201 67.00 50   Jones,W.T. 80 65 56
12 Richardson,J. 60 70 65 195 65.00 48   Goldberg,D.E. 50 40 35
13 Wilson,S.W. 50 60 73 183 61.00 45   Baker,J.E. 50 40 75
14 Baker,J.E. 50 40 75 165 55.00 40   Wilson,S.W. 50 60 73
15 Ackley,D.H. 50 67 35 152 50.67 36   Jong,K.A. 80 80 91
16 Keller,K.S. 30 40 81 151 50.33 36   Ackley,D.H. 50 67 35
17 Goldberg,D.E. 50 40 35 125 41.67 28   Keller,K.S. 30 40 81

Mean of Total = 198.82 Standard Deviation of Total = 34.25
↑結果がこのようになるそうです。
自分で作ったプログラムではうまくはしらなかったです。


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


Name: box  ..プログラマー(39,970ポイント)   Date: 2007/01/23(火) 21:25   No:3866     
Title: Re:やれることはやりました、助けてください    
> 自分で作ったプログラムではうまくはしらなかったです。

どううまく走らなかったか、具体的な説明がほしかったです。

それはさておき、添付されたコードに何も手を加えずに
Borland C++ Compilerでコンパイルしてみました。
すると、以下の警告が出ました。

>警告 W8060 D:\My Programs\C\temp1\temp1.c 108: おそらく不正な代入(関数 set_hensa_and_grade )
>警告 W8057 D:\My Programs\C\temp1\temp1.c 131: パラメータ 'total_mean' は一度も使用されない(関数 write_file )

これらの警告の意味と、出ないようにする方法がわかりますか?


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

Name: ヒカル  ..ぴよぴよ(111ポイント)   Date: 2007/01/24(水) 15:27   No:3890     
Title: Re:やれることはやりました、助けてください    
わかりません。。。


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

Name: box  ..熟練のプログラマー(40,656ポイント)   Date: 2007/01/24(水) 15:40   No:3891     
Title: Re:やれることはやりました、助けてください    
> わかりません。。。

では、もう少し時間をかけて考えてみてください。

最初の警告は、if文における「おそらく不正な代入」です。
if文における代入って何でしょう?

後の警告は、関数の引数を使っていない、という意味です。
・関数の中で使っていないのに引数にする意味があるのかどうか?
・あるいは、本当は使わないといけないのに、使うためのロジックを組み込み忘れた?
さて、どちらなのでしょう?


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

Name: 管理人 [URL]  ..ハッカー(171,994ポイント)   Date: 2007/01/25(木) 04:48   No:3911     
Title: Re:やれることはやりました、助けてください    
if文の中をみればわかりますよ!

一度あってると確信するとなかなか見つからなかったりするような間違いですが^^;

エラーや警告が出ている時は最初から一つずつ解決してみましょう!

あと、メッセージをそのままGoogleなどで調べたら大抵かいけつしますよ!


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



Name: たく  ..ぴよぴよ(463ポイント)   Date: 2007/01/11(木) 23:17   No:3532       
Title: 繰り返しの問題    
課題に詰まって困っているので投稿させていただきます。

 0≦x≦0.5のとき、x=2x
 0.5<x≦1のとき、x=2(1−x)
これを繰り返していって、以前に出たのと同じ答えが出てきたらストップしてその値を返す。(周期を求める感じです。)
という問題を解きたいのですが、正直さっぱりわかりません。
(初期値は0≦x≦1です。)

一応自分で最初の部分を作ってみたのですが、既にこんがらがってきてしまっています。
申し訳ないのですが、手助けしていただけないでしょうか。

#include <stdio.h>
main(){
 double x[100];
 int i=0,j;

 for(x[i]=0;x[i]<1;x[i]+=0.001){
  for(j=0;j<100;j++){
   if(x[i]<=0.5){
    x[i+1]=2*x[i];
  }else if(x[i]>0.5){
  x[i+1]=2*(1-x[i]);
  }
   i++;
  }
 }
return 0;
}


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


Name: box  ..プログラマー(30,721ポイント)   Date: 2007/01/11(木) 23:32   No:3534     
Title: Re:繰り返しの問題    
>  0≦x≦0.5のとき、x=2x
>  0.5<x≦1のとき、x=2(1−x)

y=2xと、y=2(1-x)という式が正しいですか?

> これを繰り返していって、以前に出たのと同じ答えが出てきたらストップしてその値を返す。(周期を求める感じです。)

提示されたコードではxを0から0.001刻みで変化させているようですので、
xが0.501(yが0.998)の場合にxが0.499の場合と等しくなります。
そういう答えを求めていますか?


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

Name: たく  ..ぴよぴよ(607ポイント)   Date: 2007/01/12(金) 00:08   No:3538     
Title: Re:繰り返しの問題    
わかりにくくてすみません。
x=2xというのは初期値をx0とすると
 x1=2*x0, x2=2*x1,・・・
という感じでどんどんxを更新していくことを表したかったんです。

例えば初期値を0.12とすると
x=0.12, 0.24, 0.48, 0.96, 0.08, 0.16, 0.32, 0.64, 0.72, 0.56, 0.88, 0.24, 0.48,・・・
と一定の法則みたいなのが現れるじゃないですか。
以前に出たのと同じ答えが出てきたらストップというのは、そういう意味で書きました。
この場合は答えは0.24というふうに表示したいです。


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

Name: フリオ  ..入門者(2,910ポイント)   Date: 2007/01/12(金) 02:12   No:3541     
Title: Re:繰り返しの問題    
 
 これでいいのでしょうか。


#include <stdio.h>

int main(void)
{
int x, i, j, flag;
int p[100];

for(x = 0; x <= 1000; x ++){
p[0] = x;
for(flag = i = 0; !flag && i < 99; i ++){
if(p[i] <= 500) p[i + 1] = 2 * p[i];
else p[i + 1] = 2 * (1000 - p[i]);
for(j = 0; j <= i; j ++){
if(flag = (p[i + 1] == p[j])){
printf("%.3f(%.3f) ", p[j] / 1000.0, x / 1000.0);
break;
}
}
}
if((x % 5) == 4) putchar('\n');
}
return 0;
}

 


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

Name: たく  ..ぴよぴよ(694ポイント)   Date: 2007/01/12(金) 15:59   No:3551     
Title: Re:繰り返しの問題    
ありがとうございます。非常に助かります。
int型で作った方がわかりやすくていいですね。

自分の能力の低さが申し訳ないのですが、flagの使われ方がいまいちわかりません。
もう少し詳しく教えていただけると嬉しいです。


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

Name: たく  ..ぴよぴよ(736ポイント)   Date: 2007/01/24(水) 23:36   No:3897 解決!     
Title: Re:繰り返しの問題    
放置しててすみません。
無事解決しました。
なんとか課題も提出できました。
解答してくださった方、ありがとうございました。


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



Name: アコ  ..ぴよぴよ(467ポイント)   Date: 2007/01/23(火) 16:11   No:3852       
Title: main関数について    
初めまして。つい最近C言語に手を出しました。
環境はWindows XP VisualC++ 6.0を使用しています。
C言語でプログラムを書く時にはmain関数が必要だということを習ったのですが、先ほど見ていた本に載っていたプログラムを実行すると、main関数が無いから実行できないとエラーが返ってきました。
見てみると確かにmainを宣言しているところが無いのに気づきました。
新規作成する時には大体コンソールアプリケーションを選べばいいよと言われたのでいつもそれで作っていたのですが、どうやらコンソールアプリケーションで作っているから、エラーが返ってくることが分かりました。

プログラムは以下のように始まります。
#include "params.h"

void histgram(unsigned char image_in[Y_SIZE][X_SIZE], long hist[256])
{
int i,j,n;

params.hには画像の幅や高さなどが載っていました。
のちのち画像処理をやりたいと思っているので上のようなプログラムに手を出したのですが、どのようにしたら問題が解決するのか分かりません。
#include <stdio.h>
int main (void)
{
で始まるプログラムしかあまり見たことも触ったこともないため、どこにどうやってmain関数を入れればいいのかが分かりません。
あと、voidの後にhistgramが入っていたり、カッコの中にunsignedなどが入っている理由もわかりません。

恥ずかしいのですが、どなたか教えていただけないでしょうか…


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


Name: box  ..プログラマー(39,708ポイント)   Date: 2007/01/23(火) 16:31   No:3853     
Title: Re:main関数について    
> C言語でプログラムを書く時にはmain関数が必要だということを習ったのですが、先ほど見ていた本に載っていたプログラムを実行すると、main関数が無いから実行できないとエラーが返ってきました。

結局、そのプログラムは
・コンソールアプリケーション(main関数が必要)
・Windowsアプリケーション(WinMain関数が必要)
のどちらなのでしょうか?

> あと、voidの後にhistgramが入っていたり、カッコの中にunsignedなどが入っている理由もわかりません。

コンソールアプリケーションでもWindowsアプリケーションでも、
C言語のプログラムは(1個以上の)関数が集まってできています。
histgramは関数の名前で、カッコの中にあるのはhistgram関数の引数です。
voidは、histgram関数には戻り値がないことを示します。
「関数」「引数」「戻り値」あたりのキーワードについて、
どのくらいご存じですか?


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

Name: アコ  ..ぴよぴよ(852ポイント)   Date: 2007/01/24(水) 11:01   No:3880     
Title: Re:main関数について    
boxさん、さっそくのご回答ありがとうございます。
そのコンソールアプリケーション、WINDOWSアプリケーションの違いがよくわからないのです。コンソールの方はDOS窓で動き、Windowsの方はDOS窓ではない、普段使っているようなアプリケーションのような窓で動くのでしょうか?
ただ本に載っていたのをみて、実行したらどうなるのかという好奇心だけで行ったものなんです…
プログラムはヒストグラムを求めるものなので、コンソールの方なのでしょうか…よく分かりません。

関数は、int main(void)と書いてあったら、この場合mainが関数になるのですよね?printfやpowなどが標準関数というものの中に入っていて、使うにはそれぞれのヘッダファイルが必要とは聞きましたが…自作関数も作れるとのことですが、まだそこまで勉強していません。

型 関数名(引数)
{
処理
}
であるから、型がvoidで関数名がhistglam、引数がunsigned〜なのですね。

引数は関数に渡される文字と習いました。
戻り値はいまいちよく分かりません…「最初はreturn 0と書いておけば良い」と教えられた程度しか…


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

Name: box  ..熟練のプログラマー(40,315ポイント)   Date: 2007/01/24(水) 14:29   No:3885     
Title: Re:main関数について    
> そのコンソールアプリケーション、WINDOWSアプリケーションの違いがよくわからないのです。コンソールの方はDOS窓で動き、Windowsの方はDOS窓ではない、普段使っているようなアプリケーションのような窓で動くのでしょうか?

さしあたって、そういうご理解でよいと思います。
Microsoft WordやExcel、ジャストシステムの一太郎などのソフトウェアをお使いですか?
これらは、Windowsアプリケーションの仲間です。

> ただ本に載っていたのをみて、実行したらどうなるのかという好奇心だけで行ったものなんです…
> プログラムはヒストグラムを求めるものなので、コンソールの方なのでしょうか…よく分かりません。

ヒストグラムを求めるものなのでコンソールアプリケーションか?という
論理の流れは正しくありません。
main関数があるか、WinMain関数があるか、です。

> 引数は関数に渡される文字と習いました。

関数に渡す文字、ではなくてデータです。

> 戻り値はいまいちよく分かりません…「最初はreturn 0と書いておけば良い」と教えられた程度しか…

すべての関数は、別の誰か(他の関数だったり、あるいはOSだったりします)から呼ばれます。
関数の終了時に、呼び出し元に何らかのデータを返す必要があるときの
一つのやり方として、戻り値を使います。
戻り値の型は、その関数の型と一致していなければなりません。

また、関数には戻り値がないものもあります。先に挙げられていたhistgramは、その例です。
戻り値がない関数は、型がvoidになっています。


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



Name: hiro  ..かけだし(1,149ポイント)   Date: 2007/01/23(火) 17:30   No:3854       
Title: プリントでの”の使用方法を教えてください。    
お久しぶりになります。
文字列のプリントでダブルクオーテーション("")を使いたいのですが、どうしたらよいのでしょうか?

(今、あるアプリケーションを自動実行するバッチファイルをC言語で作成しています。その中で数値部をダブルクオーテーションで括らなければなりません。)

たとえば、下のようなプログラムで、数字の100をダブルクオーテーションで括ってしまったらコンパイルエラーになりますが、
#include <stdio.h>

main()
{

printf("test line No. "100" \n");
}

うまく、test line No. "100" を書き出す方法はないでしょうか?
よろしくお願い致します。


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


Name: box  ..プログラマー(39,724ポイント)   Date: 2007/01/23(火) 17:32   No:3855     
Title: Re:プリントでの”の使用方法を教えてください。    
printf("test line No. \"100\" \n");

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

Name: hiro  ..かけだし(1,163ポイント)   Date: 2007/01/23(火) 18:27   No:3857 解決!     
Title: Re:プリントでの”の使用方法を教えてください。    
boxさん、すばやいご返事ありがとうございます。
これからも宜しくおねがいします。



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



Name: 若旦那  ..かけだし(2,018ポイント)   Date: 2007/01/22(月) 17:45   No:3834       
Title: 2値化プログラム    
BMPを2値化処理して、2値化されたものをBMPとして保存したいのですが、保存方法がわかりません。そもそも2値化の閾値は濃度平均を境に白と黒に分ける方法であっていますでしょうか?
以下が作りかけのプログラムです。

#include <stdio.h>

int main(void)
{
FILE *fp;
int wide,hite,cm;
int v[256][256];
int h[54],palette[1024];
int i,j,a,b,x,n;
int heikin,sum=0;


/*1枚目の画像data*/

fp=fopen("c.bmp","rb"); // mono画像ファイルを開く
if(fp==NULL){
printf("エラー\n");
return 1; }

for(j=0; j<54; j++) h[j]=fgetc(fp); // ヘッダの読み込み
wide=h[18]+h[19]*256; // 画像の幅の計算
hite=h[22]+h[23]*256; // 画像の高さの計算
cm=h[28];
if(cm=8)for(j=0; j<1024; j++) palette[j]=fgetc(fp);

//mono画像データ読み込み
for(a=0; a<hite; a++)for(b=0; b<wide; b++){
v[a][b]=fgetc(fp); //濃度値を取得
n=v[a][b];

sum+=n; //濃度値合計sum
heikin=sum/(wide*hite); //閾値を決めるためのheikin


if(n>heikin) n=0; //濃度値がheikin以上なら黒
else n=255; //以下なら白にする

printf("v=%d\n",n);
}


return 0;
}


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


Name: バグ  ..上級者(22,645ポイント)   Date: 2007/01/22(月) 19:49   No:3838     
Title: Re:2値化プログラム    
http://homepage3.nifty.com/ishidate/vcpp6_g8/vcpp6_g8.htm

ここが参考になりそうですよ(^-^)


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

Name: 若旦那  ..入門者(2,576ポイント)   Date: 2007/01/23(火) 01:21   No:3844     
Title: Re:2値化プログラム    
バグさんありがとうございます!

2値化はどうにかできました。☆

次に2値化したのを画像として保存したいのですが、
BMPの保存の仕方がわからなくて困っています。

とりあえず私の作ったプログラムはこれです。

#include <stdio.h>



int main(void)
{
FILE *fp;
int wide,hite,cm;
int v[256][256];
int h[54],palette[1024];
int i,j,a,b,x,n;
double heikin;
int sum=0;




fp=fopen("5.bmp","rb"); // mono画像ファイルを開く
if(fp==NULL){
printf("エラー\n");
return 1; }

for(j=0; j<54; j++) h[j]=fgetc(fp); // ヘッダの読み込み
wide=h[18]+h[19]*256; // 画像の幅の計算
hite=h[22]+h[23]*256; // 画像の高さの計算
cm=h[28];
if(cm=8)for(j=0; j<1024; j++) palette[j]=fgetc(fp);

//mono画像データ読み込み
for(a=0; a<hite; a++)for(b=0; b<wide; b++){
v[a][b]=fgetc(fp); //濃度値を取得


sum+=v[a][b]; //濃度値合計sum
}

heikin=sum/(wide*hite); //閾値を決めるためのheikin
printf("heikin=%f\n",heikin);

for(a=0; a<hite; a++)for(b=0; b<wide; b++){
n=v[a][b];
if(n>heikin) n=0; //濃度値がheikin以上なら黒
else n=255; //以下なら白にする

printf("v=%d\n",n);

}
return 0;
}




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

Name: box  ..プログラマー(39,631ポイント)   Date: 2007/01/23(火) 14:29   No:3849     
Title: Re:2値化プログラム    
向こうの掲示板で話が順調に進んでいるようですので、
別件と同様、こちらはクローズしておいてください。


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

Name: 若旦那  ..入門者(2,622ポイント)   Date: 2007/01/23(火) 15:01   No:3851 解決!     
Title: Re:2値化プログラム    
マナー違反でした。
すみません。以後気をつけます。


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



Name: 若旦那  ..ぴよぴよ(28ポイント)   Date: 2007/01/18(木) 01:57   No:3704       
Title: 無題    
2枚の同サイズのBMP画像を照合して、相関を取る(パターン認識)プログラムを作っています。
原画像を固定して、100枚用意した画像(入力画像)と順番に連続して相関を取るには
どうすればいいのか教えていただけないでしょうか!
今は原画像も入力画像も指定して開いています。
以下が作りかけのプログラムです。

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


int main(void)
{
FILE *fp;
int wide,hite,wd,ht,cm;
int v,v2;
int h[54],palette[1024],x,y,e,g;
int i,j;
double z,p,n,m;
double sum=0,sum2=0,sum3=0,sum4=0,sum5=0;
double ave=0,ave2=0;

/*原画像データ*/

fp=fopen("m.bmp","rb"); // mono画像ファイルを開く
for(j=0; j<54; j++)h[j]=fgetc(fp);// ヘッダの読み込み
wide=h[18]+h[19]*256; // 画像の幅の計算
hite=h[22]+h[23]*256;// 画像の高さの計算
cm=h[28];
if(cm=8)for(j=0; j<1024; j++)palette[j]=fgetc(fp);

//mono画像データ読み込み
for(y=0; y<hite; y++)for(x=0; x<wide; x++){
v=fgetc(fp); //v=濃度値

sum+=v;

}
ave=sum/(hite*wide);

/*入力画像データ*/

fp=fopen("p.bmp","rb"); // mono画像ファイルを開く
for(j=0; j<54; j++)h[j]=fgetc(fp);// ヘッダの読み込み
wd=h[18]+h[19]*256; // 画像の幅の計算
ht=h[22]+h[23]*256;// 画像の高さの計算
cm=h[28];
if(cm=8)for(j=0; j<1024; j++)palette[j]=fgetc(fp);

//mono画像データ読み込み
for(e=0; e<ht; e++)for(g=0; g<wd; g++){
v2=fgetc(fp);

sum2+=v2;

}

ave2=sum2/(ht*wd);

/*相関をとる*/


for(j=0;j<=hite;j++) for(i=0;i<=wide;i++)
{
n=(v-ave)*(v-ave);
sum3+=n;
}


for(j=0;j<=ht;j++) for(i=0;i<=wd;i++)
{
m=(v2-ave2)*(v2-ave2);
sum4+=m;
}


for(j=0;j<=hite;j++) for(i=0;i<=wide;i++)
{
p=(v-ave)*(v2-ave2);
sum5+=p;

}
printf("sum5=%f\n",sum5);

//sum5÷sum3*sum4のルート
z=sum5/sqrt(sum3*sum4);

printf("類似度=%f",z);



return 0;
}


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


Name: Yuki  ..入門者(4,387ポイント)   Date: 2007/01/18(木) 09:57   No:3706     
Title: Re:無題    
当方画像処理関係はやったことないので、「相関を取る」とやらはよくわからんのですが
「原画像を固定して、100枚用意した画像(入力画像)と順番に連続して・・・」
でしたら、100枚用意した画像のパスを記述したファイルを用意してあげて、
そのファイルを読みながら「相関を取る」処理をすれば良いのではないでしょうか。


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

Name: 若旦那  ..ぴよぴよ(53ポイント)   Date: 2007/01/19(金) 00:59   No:3713     
Title: Re:無題    
返答ありがとうございます!

パスを記述したファイルとはなんなのか分からないんですが。
原画像はいじらず入力画像のみ配列を使うのってだめですか??

#define num 100
:
int gazou[num]
:
:
/*入力画像データ*/
for(x=0;x<num;x++){
fp=fopen("gazou[x].bmp","rb");
:
:
}


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

Name: Yuki  ..入門者(4,082ポイント)   Date: 2007/01/19(金) 09:01   No:3715     
Title: Re:無題    
入力画像がgazou0.bmp〜gazou99.bmpの連番という決まりがあるのでしたら、

char infilepath[256];
int x;

/*入力画像データ*/
for(x=0;x<num;x++){
sprintf(infilepath, "gazou%d.bmp", x);
fp=fopen(infilepath,"rb");
:
:
}


で、できます。

パスを記述したファイルとは、プログラム内でパスを生成するのではなく
gazou0.bmp
gazou1.bmp
:
:
gazou98.bmp
gazou99.bmp
という具合にファイルパスを記述したファイルを用意して、
そのファイルを利用して入力画像を取得する方法です。

入力画像のファイルパスに規則性が無い場合に有効です。



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

Name: 若旦那  ..かけだし(1,462ポイント)   Date: 2007/01/21(日) 02:35   No:3791     
Title: Re:無題    
Yukiさんありがとうございます!
教えていただいたとおりにしたつもりなのですがコンパイルはできても
2枚目の画像をひらくことができません。
用意している画像はgazou0.bmp〜gazou10.bmpです。
プログラムがあるフォルダにいれていればいいんですよね?
もう一度手直ししていただけますでしょうか。
早急に完成させないといけないのでよろしくおねがいします。



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


int main(void)
{
FILE *fp;
int wide,hite,wd,ht,cm;
int v[256][256],v2[256][256];
int h[54],palette[1024];
int i,j,a,b,x;
int n,m,p,t;
double sum3=0,sum4=0,sum5=0;
double z;
char infilepath[256];




/*1枚目の画像data*/

fp=fopen("p.bmp","rb"); // mono画像ファイルを開く
if(fp==NULL){
printf("エラー\n");
return 1; }
for(j=0; j<54; j++) h[j]=fgetc(fp); // ヘッダの読み込み
wide=h[18]+h[19]*256; // 画像の幅の計算
hite=h[22]+h[23]*256; // 画像の高さの計算
cm=h[28];
if(cm=8)for(j=0; j<1024; j++) palette[j]=fgetc(fp);

//mono画像データ読み込み
for(a=0; a<hite; a++)for(b=0; b<wide; b++){
v[a][b]=fgetc(fp);


}




/*2枚目の画像data*/
for (x=0; x<50; x++) {

sprintf(infilepath,"gazou%d.bmp",x);
fp=fopen("infilepath","rb"); // mono画像ファイルを開く

if(fp==NULL){
printf("エラー2\n");
return 1; }
}
for(j=0; j<54; j++) h[j]=fgetc(fp); // ヘッダの読み込み
wd=h[18]+h[19]*256; // 画像の幅の計算
ht=h[22]+h[23]*256; // 画像の高さの計算
cm=h[28];
if(cm=8)for(j=0; j<1024; j++) palette[j]=fgetc(fp);

//mono画像データ読み込み
for(a=0; a<ht; a++)for(b=0; b<wd; b++){
v2[a][b]=fgetc(fp);

}




/*相関の式に代入*/


//左下の計算//

for(a=0;a<hite;a++) for(b=0;b<wide;b++)
{
n=(v[a][b])*(v[a][b]);
sum3+=n;

}
printf("sum3=%f\n",sum3);


//右下の計算//


for(a=0;a<ht;a++) for(b=0;b<wd;b++)
{
m=(v2[a][b])*(v2[a][b]);
sum4+=m;

}
printf("sum4=%f\n",sum4);


//分子の計算//

for(a=0;a<hite;a++) for(b=0;b<wide;b++)
{
p=(v[a][b])*(v2[a][b]);
sum5+=p;

}
printf("sum5=%f\n",sum5);

//sum5÷sum3*sum4のルート
z=sum5/sqrt(sum3*sum4);

printf("類似度=%f",z);


return 0;
}


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

Name: box  ..プログラマー(39,595ポイント)   Date: 2007/01/23(火) 14:28   No:3848     
Title: Re:無題    
向こうの掲示板で問題が解決したのであれば、
こちらは「解決」フラグを立ててしっかりクローズしてください。

# マルチポストは感心できません。


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

Name: 若旦那  ..入門者(2,596ポイント)   Date: 2007/01/23(火) 15:00   No:3850 解決!     
Title: Re:無題    
マナー違反でした。
すみませんでした。


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



Name: kazu  ..ぴよぴよ(2ポイント)   Date: 2007/01/21(日) 02:13   No:3790 解決!       
Title: ルーレット    
こんにちは。
わからないことがあるので、質問させていただきます。

今、授業の自主制作でルーレットを作っています。
イメージとしては人生ゲーム等のボードゲームにあるようなもので、
キーを押すとkazu1.bmp~kazu8.bmpまでの画(それぞれに一つずつルーレット+数を描いている)
が順に表示され、kazu8.bmpまで表示されたらまたkazu1に戻り、
キーを押すと乱数で求めた数字の分ルーレットが進み、そこで画が止まる・・というものです。



#include<stdio.h>
#include<conio.h>
#include<time.h>
#include"dglib2.h"
#include<stdlib.h>
char far *gvram=(char far *)0xA0000000;
char far *bb;
char far *pbmp[13];
int endflg=0;
void init(void);
void en(void);
void end(void);
main(){
    long wc;
    init();
    do{
     en();
dg_flip(gvram,bb);
     for(wc=0;wc<3000000;wc++){}
    }while(endflg==0);
end();
}
void init(void){
    srand(time(0));
    dg_setvideomode(0x13);
    pbmp[0]=dg_loadbmp("kazu1.bmp");
    pbmp[1]=dg_loadbmp("kazu2.bmp");
    pbmp[2]=dg_loadbmp("kazu3.bmp");
    pbmp[3]=dg_loadbmp("kazu4.bmp");
    pbmp[4]=dg_loadbmp("kazu5.bmp");
    pbmp[5]=dg_loadbmp("kazu6.bmp");
    pbmp[6]=dg_loadbmp("kazu7.bmp");
    pbmp[7]=dg_loadbmp("kazu8.bmp");
    pbmp[8]=dg_loadbmp("kazu1.bmp");
    pbmp[9]=dg_loadbmp("kazu2.bmp");
    pbmp[10]=dg_loadbmp("kazu3.bmp");
    pbmp[11]=dg_loadbmp("kazu4.bmp");
    pbmp[12]=dg_loadbmp("kazu5.bmp");
    bb=dg_createBB();
    return;
}
void en(void){
     int key,i=0,r,k,wflg=0;
     if(kbhit()!=0){
         key=getch();
      if(key==0){key=getch();}
       do{
           dg_drawbmp2(bb,0,0,100,100,pbmp[i],0,0);
          if(key=='d'){
             wflg=1;
             r=rand()%5;
             k=r+i;
          }
         i++;
         if(i<8){i=0;}
       }while(wflg==0);
      if(key=='e'){
        endflg=1;
      }
     }
     dg_drawbmp2(bb,0,0,100,100,pbmp[k],0,0);
     return;
}
void end(void){
    getch();
    dg_deletebmp(*pbmp);
    dg_setvideomode(0x3);
    dg_deleteBB(bb);
}


現状ここまでやってみたのですが、
これだと数字が回るどころか、表示すらされずに処理が止まらなくなってしまいます(^^;)
どうすればいいのか、これ以上の処理がどうしても思いつかなくて・・・

どなたかよろしくお願いしますm(_ _)m


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


Name: kazu  ..ぴよぴよ(34ポイント)   Date: 2007/01/22(月) 00:25   No:3812     
Title: Re:ルーレット    
すいません。上げさせていただきますm(__)m

どうすればいいかわかる方、もしいたらよろしくお願いしますm(__)m


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

Name: バグ  ..上級者(22,606ポイント)   Date: 2007/01/22(月) 07:58   No:3816     
Title: Re:ルーレット    
ビットマップを表示するのはコンソールアプリでは無理なのではないですか?
kbhitなんかはコンソール専用の関数だったと思います。


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

Name: GPGA  ..上級者(18,128ポイント)   Date: 2007/01/22(月) 10:14   No:3821     
Title: Re:ルーレット    
たしか、専用のライブラリを使用すれば
DOS上でBMP表示も可能だったと思いますけど
そのライブラリについて詳しくないので
回答できません。

「dglib2.h」で検索しても、目ぼしい検索結果がが見当たらなかったので
たぶん、独自のライブラリを使用していると思うのですが
kazuさんはどのようなライブラリを使用しているのですか?


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

Name: kazu  ..ぴよぴよ(921ポイント)   Date: 2007/01/22(月) 18:39   No:3836     
Title: 解答ありがとうございます    
>バグさん
あまりその辺は詳しくないので、答えにくいのですが・・
とりあえず表示はできるようです。

>GPGAさん
自分でもよくわかりませんが、学校から最初に貰ったデータなので
恐らく独自のライブラリなのでしょう。
自分はダブルバッファリングを使用する時に使っています。


それと、あれから色々試行錯誤した結果、
大分それらしいものになってきました。
というより、あと少しいじれば形になりそうな感じです。すいません(^^;)
一応載せときます。



#include<stdio.h>
#include<conio.h>
#include<time.h>
#include"dglib2.h"
#include<stdlib.h>
char far *gvram=(char far *)0xA0000000;
char far *bb;
char far *pbmp[13];
int endflg=0;
void init(void);
void ki(void);
void end(void);
main(){
long wc;
init();
do{
ki();
dg_flip(gvram,bb);
for(wc=0;wc<8000000;wc++){}
}while(endflg==0);
end();
}
void init(void){
srand(time(0));
dg_setvideomode(0x13);
pbmp[0]=dg_loadbmp("kazu1.bmp");
pbmp[1]=dg_loadbmp("kazu2.bmp");
pbmp[2]=dg_loadbmp("kazu3.bmp");
pbmp[3]=dg_loadbmp("kazu4.bmp");
pbmp[4]=dg_loadbmp("kazu5.bmp");
pbmp[5]=dg_loadbmp("kazu6.bmp");
pbmp[6]=dg_loadbmp("kazu7.bmp");
pbmp[7]=dg_loadbmp("kazu8.bmp");
pbmp[8]=dg_loadbmp("kazu1.bmp");
pbmp[9]=dg_loadbmp("kazu2.bmp");
pbmp[10]=dg_loadbmp("kazu3.bmp");
pbmp[11]=dg_loadbmp("kazu4.bmp");
pbmp[12]=dg_loadbmp("kazu5.bmp");
bb=dg_createBB();
return;
}
void ki(void){
int key,r,k;
static int i=0;
if(kbhit()!=0){
key=getch();
if(key==0){key=getch();}
if(key=='e'){endflg=1;}
}
    if(i>7){i=0;}
dg_drawbmp2(bb,0,0,100,100,pbmp[i],0,0);
i++;
if(key=='d'){
r=rand()%5;
k=r+i;
dg_drawbmp2(bb,0,0,100,100,pbmp[k],0,0);
getch();
}
printf("\x1b[1;30Hi:%d",i);
return;
}
void end(void){
getch();
dg_deletebmp(pbmp[0]);
dg_setvideomode(0x3);
dg_deleteBB(bb);
}



後は自力でなんとかなりそうです。
バグさん、GPGAさん、本当にありがとうございましたm(__)m


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



Name: かやめ  ..ぴよぴよ(490ポイント)   Date: 2007/01/22(月) 11:33   No:3829       
Title: お願いします!!    
初めまして、こんにちは

実は学校の課題でこのプログラムを入力した年月の先月、今月、来月の3ヶ月分を横に表示したいんですが……。なかなかうまくいかず苦戦しています。
どなたかお願いします!!m(_ _)m



#include <stdio.h>

int main(void)
{
int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,m,bias,s,week,i;
while (1){
printf("\n\n西暦の年 月 ? ");
scanf("%d %d",&y,&m);
if((y%4==0 && y%100!=0) || y%400==0)
month[2]=29;
else
month[2]=28;
bias=y+(y-1)/4-(y-1)/100+(y-1)/400; //y年1月1日の日曜日からのズレ
s=0;
for(i=1;i<m;i++)
s=s+month[i];
week=(bias+s)%7; //1日の曜日

printf(" ---%d年%d月---\n",y,m);
printf(" sun mon tue wed thu fri sat\n");
for(i=0;i<week*4;i++)
printf(" ");
for(i=1;i<=month[m];i++){
printf("%4d",i);
if((week+i)%7==0)
printf("\n");
}
}
}


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


Name: box  ..プログラマー(39,444ポイント)   Date: 2007/01/22(月) 13:33   No:3832     
Title: Re:お願いします!!    
ヒントをいくつか。
・ある月のカレンダーは6週にまたがることがある。
・その月の初日の曜日を求めたら、見かけ上の第一日曜日の日付を求める。
例)2007年2月1日は木曜日。よって、2007年2月の第一日曜日は−3日。
・とにかく、6週間(42日)分の日付を出力しようと試みる。その際、
1日〜当月の末日以外の日付は空白を出力すればよい。
例)2007年2月の場合、−3日〜38日の42日分を出力しようと試みる。
末日は28日なので、−3〜0、29〜38の各日は空白を出力する。
・3ヶ月分を出力したいので、年、月、初日の曜日、第一日曜日の日付あたりのデータを
3ヶ月分保持する。前月が前年12月になる場合に注意する。
・出力は、以下のとおり行なう。
1行目:年月の見出し(3ヶ月分)
2行目:曜日の見出し(同上)
3行目:各月の1週目(同上)
4行目:各月の2週目(同上)
  ・
  ・
8行目:各月の6週目(同上)


p.s.
「お願いします」じゃなくて「カレンダーの出力について」くらいの
タイトルを付けていただきたいです。
何をお願いしたいのか、その「何」の部分が重要です。


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



Name: ヒロ  ..ぴよぴよ(376ポイント)   Date: 2007/01/22(月) 09:34   No:3817       
Title: VC++のエディタ変更    
少し質問させてください。
VC++を開くとテキストエディタは既存のノートパッドで出てきますが、
それを秀丸エディタにしたいんですが、出来ませんか?
周りの人はVC++を開くとテキストエディタが自動的に秀丸になっているみたいなのですが・・・
今更周りの人に聞くのも恥ずかしくて聞けません。
教えてください。
VC++6.0を使ってます。


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


Name: keichan  ..中級者(10,618ポイント)   Date: 2007/01/22(月) 10:04   No:3820     
Title: Re:VC++のエディタ変更    
>今更周りの人に聞くのも恥ずかしくて聞けません。
なぜ?周りに知ってる人がいるならすぐ聞けば解決しちゃうんじゃ・・・?

>VC++を開くとテキストエディタは既存のノートパッドで出てきますが、
VC++を開くとVC++専用のエディタで開くはずですが・・・

もしかして秀丸に関連付けられてないだけじゃないですか?
.c .cpp .h .hpp が秀丸に関連付けられているか調べてみてください。


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

Name: ヒロ  ..ぴよぴよ(488ポイント)   Date: 2007/01/22(月) 10:19   No:3822     
Title: Re:VC++のエディタ変更    
keichanさん、ありがとうございます。
.c .cpp .h .hppは秀丸に関連付けされています。
.cファイルのダブルクリックだと秀丸で開けます。

周りの人のVCを見るとエディタが秀丸の様に見えるんですが、
VC++のエディタを秀丸に変更する事は出来ないんでしょうか?
自分の気のせいだったのでしょうかね?


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

Name: GPGA  ..上級者(18,149ポイント)   Date: 2007/01/22(月) 10:28   No:3823     
Title: Re:VC++のエディタ変更    
ヒロさんは何を見て周りの人が
秀丸エディタを使用していると思ったのですか?

エディタのタイトル部分に「秀丸」と書かれていたからですか?
それとも、文字のサイズや、文字や背景の色がデフォルトと
違っていたからですか?


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

Name: ヒロ  ..ぴよぴよ(524ポイント)   Date: 2007/01/22(月) 10:48   No:3824     
Title: Re:VC++のエディタ変更    
エディタのタイトル部分は見ませんでしたが、
文字サイズ等が秀丸に似ていたので、秀丸だと思ったんですが・・・
私の勘違いでしょうか?


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

Name: GPGA  ..上級者(18,217ポイント)   Date: 2007/01/22(月) 13:17   No:3830     
Title: Re:VC++のエディタ変更    
フォントやサイズを変更するだけでしたら、VCを開いて
メニューのツール→オプション

オプション設定のダイアログの「書式」のタブを選択します。

そこで文字のフォント、サイズ、色を設定することができます。


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

Name: ヒロ  ..ぴよぴよ(601ポイント)   Date: 2007/01/22(月) 13:28   No:3831 解決!     
Title: Re:VC++のエディタ変更    
GPGAさん、ありがとうございました。
オプション設定で変更出来たんですね・・・
ありがとうございました!


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



Name: mai  ..かけだし(1,556ポイント)   Date: 2007/01/19(金) 00:53   No:3712       
Title: 解説について    
こんばんわ、学校の課題で千葉県,埼玉県,茨城県を引数として渡すと,戻り値として知事名,人口,年平均気温,県花を返すプログラムを作成せよ.ただし,それぞれの情報(知事名,人口,年平均気温,県花の順)は以下となる.
千葉県:堂本暁子,6,077,632人,15.4℃,菜の花
埼玉県:上田清司,7,075,965人,14.6℃,桜草
茨城県:橋本昌,2,971,798人,13.4℃,薔薇
という問題が出て解答は
#include<stdio.h>
#include<string.h>

struct ken{

char chiji[80];
int pop;
float tmp;
char flw[30];
};

struct ken a(char c[])
{
struct ken x;

if(strcmp(c,"千葉県")==0){

strcpy(x.chiji,"堂本暁子");
x.pop = 6077632;
x.tmp = 15.4;
strcpy(x.flw,"菜の花");
}

else if(strcmp(c,"埼玉県")==0){

strcpy(x.chiji,"上田清司");
x.pop = 7075965;
x.tmp = 14.6;
strcpy(x.flw,"桜草");
}

else if (strcmp(c,"茨城県")==0){

strcpy(x.chiji,"橋本昌");
x.pop = 2971798;
x.tmp = 13.4;
strcpy(x.flw,"薔薇");
}

else{
printf("正しい県を入力して下さい");
exit(0);
}

return x;
}
となるらしいのですが 人口や気温の定義など部分部分で少しわからないので、どなたかこの解答の詳しい解説をお願いできませんでしょうか。 よろしくお願いします


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


Name: Yuki  ..入門者(4,126ポイント)   Date: 2007/01/19(金) 09:07   No:3716     
Title: Re:解説について    
>人口や気温の定義など部分部分で少しわからない

どこをどのように解説すれば良いのかわからないので、
知りたいことを具体的に明記してもらえますか?


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

Name: mai  ..かけだし(1,619ポイント)   Date: 2007/01/19(金) 22:02   No:3744     
Title: Re:解説について    
ほとんど全部の部分について解説していただきたいのですが。例えば float tmp なら気温の部分にどのように働きかけているとかです。 お願いします

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

Name: box  ..プログラマー(37,000ポイント)   Date: 2007/01/19(金) 23:06   No:3746     
Title: Re:解説について    
> ほとんど全部の部分について解説していただきたいのですが。


下図が、kenという名前の構造体の定義
chiji, pop, tmp, flwの4つのメンバーからなる
4つのメンバーをひとくくりにして、
int型やfloat型などと同じくstruct ken型として扱う

+---------+---------+---------+---------+
| chiji | pop | tmp | flw |
| char型 | int型 | float型 | char型 |
| 長さ80 | | | 長さ30 |
+---------+---------+---------+---------+

ここまではいいですか?



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

Name: mai  ..かけだし(1,650ポイント)   Date: 2007/01/20(土) 12:38   No:3755     
Title: Re:解説について    
ありがとうございます 長さ30とか80とかの数字はどうしてその数字になるのでしょうか 初歩的な質問ですみません

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

Name: box  ..プログラマー(37,198ポイント)   Date: 2007/01/20(土) 13:08   No:3756     
Title: Re:解説について    
> 長さ30とか80とかの数字はどうしてその数字になるのでしょうか

最初の投稿で、解答例として挙げられたプログラムの10行目までをごらんください。
そこに、知事名は長さ80の文字列、県花名は長さ30の文字列であることが書いてあります。
人や花の名前ですからそこまでの長さは必要ないと思いますが、
今回はそこに書いてあった内容に従いました。


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

Name: mai  ..かけだし(1,698ポイント)   Date: 2007/01/20(土) 21:01   No:3766     
Title: Re:解説について    
ありがとうございます。続きをお願いします

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

Name: box  ..プログラマー(37,453ポイント)   Date: 2007/01/20(土) 22:01   No:3768     
Title: Re:解説について    
> struct ken a(char c[])
> {
> struct ken x;
>
> if(strcmp(c,"千葉県")==0){
>
> strcpy(x.chiji,"堂本暁子");
> x.pop = 6077632;
> x.tmp = 15.4;
> strcpy(x.flw,"菜の花");
> }

関数aは、「char型の配列cを呼び出し元から受け取って、
struct ken型を呼び出し元へ返す」関数です。

先頭部分で、呼び出し元へ返す領域xを用意しています。

受け取ったcには、県の名前が入っていることを想定しています。
cの中身(つまり県名)が「千葉県」なのか「埼玉県」なのか「茨城県」なのかによって、
xに入れる内容が異なります。

上に引用したのは、千葉県の場合です。
strcmp関数はC言語にもともと用意してある関数(標準関数といいます)で、
文字列どうしを比較する機能を持っています。
cの中身が「千葉県」ならば、xの各メンバーに千葉県の
・知事名
・人口
・年平均気温
・県花名
をセットします。
人口や年平均気温は数値ですので、普通に代入できます。
それに対して、知事名や県花名は文字列ですので、数値と同じ方法は採れません。
strcpyという標準関数を用います。

ここまではいいですか?


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

Name: mai  ..かけだし(1,709ポイント)   Date: 2007/01/20(土) 22:43   No:3770     
Title: Re:解説について    
はい 大丈夫です

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

Name: box  ..プログラマー(37,675ポイント)   Date: 2007/01/20(土) 23:05   No:3772     
Title: Re:解説について    
> else if(strcmp(c,"埼玉県")==0){
>
> strcpy(x.chiji,"上田清司");
> x.pop = 7075965;
> x.tmp = 14.6;
> strcpy(x.flw,"桜草");
> }
>
> else if (strcmp(c,"茨城県")==0){
>
> strcpy(x.chiji,"橋本昌");
> x.pop = 2971798;
> x.tmp = 13.4;
> strcpy(x.flw,"薔薇");
> }
>
> else{
> printf("正しい県を入力して下さい");
> exit(0);
> }
>
> return x;
> }

さっきの続きで、文字列cの内容が「千葉県」ではない場合の話です。
「千葉県」ではなくて「埼玉県」だったら、
xの中に埼玉県に関するデータを格納しています。

さらに、「埼玉県」でもなくて「茨城県」だったら、
xの中に茨城県に関するデータを格納しています。

さらにさらに、「茨城県」でもなかったら、
正しい県名を入力するよう求めて、exitという、プログラムを終了させるための
標準関数を呼び出しています。

文字列cが「千葉県」「埼玉県」「茨城県」のいずれかならば
xの中にはその県に関するデータが入っています。それを、呼び出し元に返します。

ここまではいいですか?


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

Name: mai  ..かけだし(1,715ポイント)   Date: 2007/01/21(日) 14:50   No:3798     
Title: Re:解説について    
はい

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

Name: box  ..プログラマー(38,590ポイント)   Date: 2007/01/21(日) 16:14   No:3799     
Title: Re:解説について    
前回までの回答で、各県のデータをセットして呼び出し元に返す関数aの
説明は終わりました。
しかし、最初の投稿でもそうだったのですが、関数aを呼び出す側に関する
記述がまだありません。

Windowsベースでない、コンソールアプリケーションという種類の
プログラムをC言語で作成する際、main関数という関数が必要です。
コンソールアプリケーションのプログラムを実行すると、
まずmain関数を実行するようになっています。
今回の場合は、main関数から関数aを呼び出すことになります。

というわけで、main関数の例を含めたプログラム全体を提示します。
不明点があったらお聞きください。


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

struct ken {
char chiji[80];
int pop;
float tmp;
char flw[30];
};

struct ken a(char c[])
{
struct ken x;

if (strcmp(c, "千葉県") == 0) {
strcpy(x.chiji, "堂本暁子");
x.pop = 6077632;
x.tmp = 15.4;
strcpy(x.flw, "菜の花");
}
else if (strcmp(c, "埼玉県") == 0) {
strcpy(x.chiji, "上田清司");
x.pop = 7075965;
x.tmp = 14.6;
strcpy(x.flw, "桜草");
}
else if (strcmp(c, "茨城県") == 0) {
strcpy(x.chiji, "橋本昌");
x.pop = 2971798;
x.tmp = 13.4;
strcpy(x.flw, "薔薇");
}
else {
printf("正しい県を入力して下さい\n");
exit(0);
}
return x;
}

int main(void)
{
struct ken data; /* 県のデータ */
char pref[10]; /* 県名 */

while (1) {
printf("県名を入力してください(endで終了):");
scanf("%s", pref);
if (strcmp(pref, "end") == 0) {
break;
}
data = a(pref);
printf("【%sのデータ】\n", pref);
printf("知 事:%s\n", data.chiji);
printf("人 口:%d人\n", data.pop);
printf("年平均気温:%.1f度\n", data.tmp);
printf("県 花:%s\n\n", data.flw);
}
return 0;
}



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

Name: mai  ..かけだし(1,764ポイント)   Date: 2007/01/21(日) 22:27   No:3804     
Title: Re:解説について    
丁寧な解説ありがとうございます。 よろしかったらでいいのですが、もう一問だけ類題のご質問をさせていただいてもよろしいでしょうか

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

Name: box  ..プログラマー(38,976ポイント)   Date: 2007/01/21(日) 23:36   No:3809     
Title: Re:解説について    
ここは、そういうための場所です。いくらでもどうぞ。

ただ、ご質問の中身によっては、boxが回答できないことがあります。
すべてのことを知っているわけではありませんので。

そういう場合、他の方から回答が寄せられますので、
安心して問い合わせてください。


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

Name: mai  ..かけだし(2,444ポイント)   Date: 2007/01/22(月) 00:34   No:3813     
Title: Re:解説について    
ありがとうございます 以下のような問題も同様に考えても大丈夫なのでしょうか

次のアイウの手順を参考にプログラムを作成せよ
(ア) 氏名,出身地,年齢,体重のそれぞれの変数名をname,hc,age,weightとして,それらの情報を持つ構造体profを宣言する.また,それぞれの変数に以下の3名分の情報を代入する.
 山本一郎,東京都,22才,65.3 kg
 近藤次郎,福岡県,21才,98.2 kg
 岡田三郎,北海道,19才,72.1 kg
(イ) 氏名を引数として戻り値をprof型とする関数rirekiを作成する.
(ウ) main関数内でgets関数を用いて氏名を入力し,関数rirekiに引数として渡し,氏名,出身地,年齢,体重の各情報を戻り値として得て,それらを画面に表示する.

最初の各メンバーの部分はこのような感じになるのでしょうか 間違っていたらごめんなさい
char name
int hc
float age
char weight



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

Name: box  ..プログラマー(39,062ポイント)   Date: 2007/01/22(月) 09:47   No:3818     
Title: Re:解説について    
> ありがとうございます 以下のような問題も同様に考えても大丈夫なのでしょうか

せっかくアップしてくださったのに
申し訳ありません。

前の「千葉」「埼玉」「茨城」の問題とは別の話になりますので、
前の問題は「解決」にして、
新規投稿の形をとっていただけないでしょうか?


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

Name: mai  ..かけだし(2,411ポイント)   Date: 2007/01/22(月) 10:57   No:3825 解決!     
Title: Re:解説について    
わかりました 丁寧な解説とても参考になりました boxさんありがとうございました

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



Name: すぷりんたー  ..ぴよぴよ(398ポイント)   Date: 2007/01/19(金) 23:49   No:3749       
Title: 無題    
はじめまして!!!!!大学の課題で〜ポインタ,構造体,関数分割,ファイル分割のすべてを利用した自作ツールをひとつ作成して下さい.テーマは自由!!!
ってレポート課題がでました。。。
んで自分は
1:関数分割、ファイル分割が何かわからないし使い方がわからない
2:ポインタ、構造体のプログラムはあるが、4つを使用したプログラムの組み立て方を教えてもらいたい

ちなみにポインタのプログラムは
#include <stdio.h>

int main(void)
{
char *clubname = "deson.z";

printf("clubname = \"%s\"\n", clubname);

return(0);
}

構造体のプログラムは#include <stdio.h>

struct gstudent{
char name[20]; /*名前*/
int height; /*身長*/
float weight; /*体重*/
float speed; /*速度*/
};

int main(void)
{

struct gstudent masanao = {"Masao", 162, 60.5, 11.78};

printf("めんばー: %s\n", masao.name);
printf("身  長: %d\n", masao.height);
printf("体  重: %f\n", masao.weight);
printf("100M: %f\n", masao.speed);

return(0);
}

です!!!!
てつだってくれませんか?????



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


Name: バグ  ..上級者(21,142ポイント)   Date: 2007/01/20(土) 07:58   No:3750     
Title: Re:無題    
えっと、作るうえの条件ばかりで、結局は何をするプログラムを組みたくて、あなたが何について聞きたいのかが全く分かりません…(;^_^A
質問はもう少し具体的にお願いします…これでは答えようがありません。


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

Name: すぷりんたー  ..ぴよぴよ(316ポイント)   Date: 2007/01/20(土) 09:32   No:3751     
Title: Re:無題    
申し訳ないです。。。。
この4つの条件さえ使ったプログラムならなんでもいいので〜

特にわからないのが〜関数分割とファイル分割です。。。

どうやって使うのかが知りたいです↓


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

Name: バグ  ..上級者(21,565ポイント)   Date: 2007/01/20(土) 10:15   No:3753     
Title: Re:関数分割について    
とりあえず、関数分割から…

関数の分割というのは、あらかじめ宣言だけをしておいて、関数の中身を別の場所で実装することを言います。例えば、余りにも長いコードを書く必要がある場合に、1ヶ所に関数をまとめて宣言しておけば確認が容易になり、名前の重複なども防ぐことができます。


#include <stdio.h>

int Calc( int , int );

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

a = 1;
b = 2;
c = Calc( a , b );

printf( "a + b = %d" , c );
}

int Calc( int d , int e )
{
return( d + e );
}


例えば、こんな感じです。Calcというint型の引き数を2つもった関数の宣言だけを前もって行っているのが分かるでしょうか?実際の関数の中身は、main関数の下で書かれています。
この程度の規模のプログラムならば、あまり必要性を感じないとは思いますが、関数が数十個などになってくるとこの方法の有難みが理解できると思います。


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

Name: バグ  ..上級者(21,955ポイント)   Date: 2007/01/20(土) 10:29   No:3754     
Title: Re:ファイル分割について    
次に、ファイル分割についてですが、これも基本的な考え方は先ほどの関数分割と同じです。ただ、関数や変数の宣言や定義がファイルを跨いでいるだけのことです。#include文で別のファイルから取り込む事ができます。ただし、標準関数以外の自作のヘッダーファイルを取り込みたい時には< >ではなく、" "でファイル名を囲む事に注意してください。


// Kadai.cpp(ファイル名です)
// これがメインのファイルの中身です。
#include <stdio.h>
#include "Calc.h"

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

a = 1;
b = 2;
c = Calc( a , b );

printf( "a + b = %d" , c );
}
// ここまでが1つのファイルです


// Calc.h(ファイル名です)
// このファイル先ほどの関数分割でいうところのプロトタイプ宣言部になります
int Calc( int , int );
// ここまでが1つのファイルです


// Calc.cpp(ファイル名です)
// これが関数の実装部分です
#include "Calc.h"

int Calc( int d , int e )
{
return( d + e );
}
// ここまでが1つのファイルです



同じような処理を行う関数などを同じファイルで管理したりすれば、管理が楽になると思います。


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

Name: すぷりんたー  ..ぴよぴよ(339ポイント)   Date: 2007/01/20(土) 15:46   No:3758     
Title: Re:ファイル分割について    
解説していただいてありがとうございます!!!!

ただファイル分割だけコンパイルリンクの実行ができないみたいです。。。

原因がわからないです。。。

ちなみに

C:\C06>gcc p0083.c -o p0083
p0083.c:2:25: Calc.h: No such file or directory
p0083.c: In function `main':
p0083.c:5: warning: return type of `main' is not `int'
p0083.c:15:25: Calc.h: No such file or directory

C:\C06>p0083
'p0083' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

と出てきました↓↓


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

Name: バグ  ..上級者(22,021ポイント)   Date: 2007/01/20(土) 18:12   No:3762     
Title: Re:無題    
ファイル名〜ここまで

を1つのファイルにしていますか?

今回の場合、Kadai.cpp、Calc.h、Calc.cppの合計3つのファイルになりますが、同じフォルダ内にこの3つのファイルが入ってますか?


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

Name: box  ..プログラマー(37,261ポイント)   Date: 2007/01/20(土) 18:23   No:3763     
Title: Re:ファイル分割について    
> p0083.c: In function `main':
> p0083.c:5: warning: return type of `main' is not `int'

この警告は、main関数の型がintでないために出ています。
C言語の規格上、main関数の型はintと決まっています。

それに反したコードを書くと、gccではこんな風に
警告するようになっているのでありましょう。


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

Name: バグ  ..上級者(22,090ポイント)   Date: 2007/01/20(土) 19:10   No:3764     
Title: Re:無題    
なるほど、gccは触った事がなかったので、勉強になります(^-^)

>>Calc.h: No such file or directory

>>Calc.h: No such file or directory

ただ、この2つの文章はファイルが存在してないことを示していますよね?


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

Name: すぷりんたー  ..ぴよぴよ(403ポイント)   Date: 2007/01/20(土) 23:53   No:3777     
Title: Re:無題    
>BOXさん
この警告は、main関数の型がintでないために出ています。
C言語の規格上、main関数の型はintと決まっています

とコメントいただきありがとうございました!!!
ただ、どこをかえればいいのか全くわからないです↓
お手数ですが、ソースをおしえてもらえないでしょうか???

>バグさん
Kadai.cpp、Calc.h、Calc.cppと3つに分けて、ファイルを保存すればいいのでしょうか??


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

Name: 管理人 [URL]  ..ハッカー(166,959ポイント)   Date: 2007/01/21(日) 00:45   No:3780     
Title: Re:無題    
すぷりんたーさん、

void main

でメイン関数を書き始めていませんか?

boxさんはこれを

int main

で書き出しなさいとおっしゃっています。

#include <stdio.h>

void main(){

int a,b,c....


こんな感じでメイン関数の書き出しがありますよね?




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

Name: すぷりんたー  ..ぴよぴよ(524ポイント)   Date: 2007/01/21(日) 08:24   No:3794 解決!     
Title: Re:無題    
あっ!!!!!できました★管理人さんありがとうございます!!!!

ただ〜

C:\C06>gcc p0083.c -o p0083
p0083.c:2:25: Calc.h: No such file or directory
p0083.c:15:25: Calc.h: No such file or directory

って表示されるって事は、やはりファイルを分けて保存しないといけないってことですよね????


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

Name: Hermit  ..ぴよぴよ(155ポイント)   Date: 2007/01/21(日) 10:52   No:3795     
Title: Re:無題    
>>やはりファイルを分けて保存しないといけないってことですよね????

バグさんの書かれている通りにプログラムを書いているなら、
Kadai.cpp
Calc.cpp
Calc.h
の、3個のファイルに分けて保存するように読み取れますが、
それをコンパイルするには、
gcc Kadai.cpp Calc.cpp -o 出力プログラム名
としなければいけないはず。

vi や、emacs などで、各ファイル名で新規作成しましょう。


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

Name: すぷりんたー  ..かけだし(1,163ポイント)   Date: 2007/01/22(月) 00:16   No:3811     
Title: Re:無題    
>vi や、emacs などで、各ファイル名で新規作成しましょう
すみませんが、それはファイル名の1例ですか??

あとアホなことを言ってると思うのですが〜
ポインタの使ったファイルは↓

#include <stdio.h>

int main(void)
{
char *clubname = "deson.z";

printf("clubname = \"%s\"\n", clubname);

return(0);
}

構造体を使ったファイルは↓

#include <stdio.h>

struct gstudent{
char name[20]; /*名前*/
int height; /*身長*/
float weight; /*体重*/
float speed; /*速度*/
};

int main(void)
{

struct gstudent masao = {"Masao", 162, 60.5, 11.12};

printf("めんばー: %s\n", masao.name);
printf("身  長: %d\n", masao.height);
printf("体  重: %f\n", masao.weight);
printf("100M: %f\n", masao.speed);

return(0);
}

そして、関数分割のファイルが↓

#include <stdio.h>

int Calc( int , int , int);

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

a = 40;
b = 42;
c = 41;
d = Calc( a , b ,c);

printf( "やり投げコントロールテストの合計結果:a槍 + b槍 + c槍 = %dメートル" , d );
}

int Calc( int e , int f , int g)
{
return( e + f + g);
}

この3つのファイルを使っってファイル分割のプログラムってできませんか???
本当にファイル分割がわからないから、むちゃくちゃ馬鹿な質問してるかも
しれないですが。。。



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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +