トップページ⇒tech
1001コメント399KB

C/C++の宿題を片付けます 97代目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/10/09(火) 22:40:13
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

【前スレ】
C/C++の宿題を片付けます 96代目
http://pc11.2ch.net/test/read.cgi/tech/1190331997/
0153デフォルトの名無しさん2007/10/12(金) 21:05:46
>>144
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5056.txt
0154デフォルトの名無しさん2007/10/12(金) 21:56:11
>>149
やたら回りくどくなってしまったお・・・。いい訳だけどCは使いにくすぎ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5058.c

ヒントが素晴らしかったお。
0155デフォルトの名無しさん2007/10/12(金) 21:57:13
test
0156デフォルトの名無しさん2007/10/12(金) 22:03:01
>>154
23: 不正な初期化(関数 calc )って出てコンパイルできません・・・・

0157デフォルトの名無しさん2007/10/12(金) 22:20:13
>>156
その23行とやらをコピペしてみてくれ。
0158デフォルトの名無しさん2007/10/12(金) 22:25:39
>>157
node n = {tail, '\0', 0};

です


あと構造体を使わないでかけますか?
0159デフォルトの名無しさん2007/10/12(金) 22:28:36
ポインタを使わないとな。俺の力では無理だょ…。ほかの誰か頼んだ!
0160デフォルトの名無しさん2007/10/12(金) 22:29:32
やっぱりポインタを使わないときついですか・・・・
0161デフォルトの名無しさん2007/10/12(金) 22:33:21
>>159
違う違う
変数を使って初期化できるのはC99ってだけ
01621612007/10/12(金) 22:36:46
変なことを書いてしまったようだ
0163≠1542007/10/12(金) 22:38:09
>>158
gccでは警告だけでコンパイルできる。
それが通らないとは一体どんなコンパイラだ?
一応こう書き換えれば通ると思うが。
--
node n;
n.tail = tail;
n.c = '\0';
n.value = 0;
--
しかし、問題は他にもあって、環境によっては
--
fprintf(stderr, "\nFIND:");
--
をprintf()にしないと表示がぐずぐずになる。
また、割り切れない除算を強行するので例えば、1 2 / 3 + 4 *が得られている。
と言うことで、誰かが書き直すのを待った方がいいかも知らん。
0164デフォルトの名無しさん2007/10/12(金) 22:38:22
node n;
n.tail = tail;
みたいに分ければいけるかも
01651492007/10/12(金) 22:40:35
>>163
コンパイルとおりました。

しかし、問題の要件を満たしてないです・・・
0166≠1542007/10/12(金) 22:44:43
入れ替えや括弧までって言うと結構面倒なんだよね。私ゃパスだ。
01671492007/10/12(金) 22:51:20
>>166
そうですね。
9C4=126通りの組合せに対してそれをやらないといけないですね
0168デフォルトの名無しさん2007/10/12(金) 22:52:56
括弧は入れ替えの一種だから考慮しなくていいんじゃね?
01691532007/10/12(金) 23:02:31
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5059.txt
>>153で上げたのはコインの枚数を変えるとおかしくなったので修正した。
ろだのコメントがおかしいけど気にしないで。
0170デフォルトの名無しさん2007/10/12(金) 23:09:00
再帰使えばポインタも構造体も使わずに解けるはず。
0171デフォルトの名無しさん2007/10/12(金) 23:15:07
やべ、calc(..., 1, ...)じゃなくてcalc(..., number - 1, ...) だったわ…。
ポインタ使うなってのは配列をスタックにしてやれってことなんだろうけど。
0172デフォルトの名無しさん2007/10/12(金) 23:24:12
つかいろいろ間違ってた…鬱
0173デフォルトの名無しさん2007/10/13(土) 00:05:07
>>149直したょ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5060.c
0174デフォルトの名無しさん2007/10/13(土) 00:12:39
>>173
どうもありがとうございます。
。でも数字を自分で入力するんじゃなく、9個の数字から4つ選ぶ9C4=126通りの組合せそれぞれに対して
12になるのが一つだせればいいんです。もし一つもなければNGを出すんですが・・・
0175デフォルトの名無しさん2007/10/13(土) 00:37:27
>>173
割り算それでいいの?
0176デフォルトの名無しさん2007/10/13(土) 00:51:43
>>173
ポインタ使わずに頑張ったところ悪いが、
1 3 / 9 * 4 *
↑こんなんが出ない
0177デフォルトの名無しさん2007/10/13(土) 00:51:45
>>175
まずい?浮動小数点数になおすべきなんかな

>>174
longjmp使っていいならやるお
0178デフォルトの名無しさん2007/10/13(土) 01:02:31
13/が0になっていいわけないだろw
0179デフォルトの名無しさん2007/10/13(土) 01:15:30
そりわ悪かった。投げやりになっちたったお
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5061.c
0180デフォルトの名無しさん2007/10/13(土) 01:35:37
> 9 7 2 1 ---> 9 7 2 / + 1 *
本当にわかってんの?
0181デフォルトの名無しさん2007/10/13(土) 01:41:53
>>179
tmpもdoubleにするか、キャストしないと、
端数切り捨てられますよ、っと

しかしポインタ使うなと言われて関数ポインタ使うとはw
0182デフォルトの名無しさん2007/10/13(土) 01:48:32
がんばれ。
0183デフォルトの名無しさん2007/10/13(土) 01:51:11
今度こそ最終リビジョンで�e…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5062.c
0184デフォルトの名無しさん2007/10/13(土) 02:42:24
>>149 >>183
ポインタなしでどうやってんのかと見てみたら、関数の仮引数を int a[] みたいな書式でやってるのな、痛々しいw
0185デフォルトの名無しさん2007/10/13(土) 03:57:11
もっとみんな人に優しく
0186デフォルトの名無しさん2007/10/13(土) 05:55:11
>>149
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5064.c
0187デフォルトの名無しさん2007/10/13(土) 06:02:55
>>186 の67行目と68行目の間に追加
if(!is_12) printf("%d %d %d %d ---> NG\n", num[0], num[1], num[2], num[3]);
0188デフォルトの名無しさん2007/10/13(土) 06:17:04
>> 186
もう気づいてるかもだが、 >>183 では 1789 ---> 98*71-/ になってるとこが
NG になるお。 9*8/(7-1) の括弧に対応してないのかな
0189デフォルトの名無しさん2007/10/13(土) 06:25:46
括弧の事なんて忘れてたさ
0190デフォルトの名無しさん2007/10/13(土) 07:58:19
カッコ悪い
01911112007/10/13(土) 08:06:53
>>145
>>153
遅くなりましたがありがとうございました
本当に助かりました
0192デフォルトの名無しさん2007/10/13(土) 08:35:31
>>184
配列わずにポインタ使えって言うから例題みたら*(array+i)とかよくあること。
01931492007/10/13(土) 09:39:26
>>183
>>186

おお!すごい。ありがとうございます。186と183の結果違いますね。

アルゴリズム的にはどういう感じですか?
186も改造して 1789にも対応しようと思うんですが
0194デフォルトの名無しさん2007/10/13(土) 10:39:44
[1] 授業単元: C言語�U
[2] 問題文(含コード&リンク):
mem1に入っているプログラムで
data2に入っているsimulation_dataを読み込んで、モデル化するプログラムを作っているのですが、
うまく読み込めてないようなんです。実行されるとdata6_arspecの中のresult4bに結果が入力されます。

/*simulation_dataを読み込む文です間違いありかもしれません*/
FILE *fp1;
fp1=fopen("..\\data2\\simulation_data","r");
for(j=0;j<n;j++){
fscanf(fp1,"%15.5f \n",&raw_16ch[0][j]);
}
for ( j=0; j<n; j++ ) {
printf("%15.5f \n",raw_16ch[0][j]);
}
fp1=fopen("sim1_","w");
fprintf(fp1,"sim1_ \n");
for(j=0;j<n;j++){
fprintf(fp1,"%15.5f \n",raw_16ch[0][j]);
}
fclose(fp1);
この文が間違っているんだと思います。実行時に入力するのは、
�@..\data2\simulation_data �A2500 �B..\data6_arspec\ �Cresult4b\ �D1  �E64 �F25 �G1.0 �H1
の順です。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: 10月15日10時まで
[5] その他の制限:よろしくお願いしますm(_ _)m
UP先はこちらです。
http://www.dotup.org/uploda/www.dotup.org6676.zip.html
0195デフォルトの名無しさん2007/10/13(土) 10:56:45
脊髄反射でscanが%15.5lfと予測
0196デフォルトの名無しさん2007/10/13(土) 11:07:50
>>194
どっかで色々指摘したと思うのだが、完全無視か?
0197デフォルトの名無しさん2007/10/13(土) 11:29:15
15.5fが怪しいな
019876(78)2007/10/13(土) 11:51:27
>>146
今日、出しに行ったら何とか受け付けてくれました。
ありがとうございました。
0199デフォルトの名無しさん2007/10/13(土) 12:24:58
宿題マダァ?(・∀・ )っ/凵⌒☆チンチン
0200デフォルトの名無しさん2007/10/13(土) 12:54:15
>>199
[1] 授業単元:暇つぶしにもならないか?
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5065.txt
[3] 環境
 [3.1] OS: 自由
 [3.2] コンパイラ名とバージョン: 自由
 [3.3] 言語: C
[4] 期限:2007年10月20日0時00分
[5] その他の制限:他の課題を優先
0201デフォルトの名無しさん2007/10/13(土) 13:13:34
>>200
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5066.c
0202デフォルトの名無しさん2007/10/13(土) 13:22:39
>>201
show_deckやり直し
0203デフォルトの名無しさん2007/10/13(土) 13:35:47
>>200
( ´∀`)つttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5067.txt
0204デフォルトの名無しさん2007/10/13(土) 13:55:21
>>186
今さら指摘すると、それ分数使えない
0205デフォルトの名無しさん2007/10/13(土) 14:08:26
>>203 のシャッフル方法は一般に使われてるもんなんでしょうか?
混ぜ具合の要求レベルによるんだろうってことはわかるんですけど。
0206デフォルトの名無しさん2007/10/13(土) 14:09:32
一般的でもないだろう
0207デフォルトの名無しさん2007/10/13(土) 14:18:53
>>205
シャッフルとして使っちゃダメなレベル
0208デフォルトの名無しさん2007/10/13(土) 14:20:54
完全にシャッフルされていることを証明するのってどうすればいいの?
高卒の俺に教えてください。
02091112007/10/13(土) 14:23:50
>>169
重ね重ねありがとうございました
0210デフォルトの名無しさん2007/10/13(土) 14:24:03
>>200
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5068.txt
0211デフォルトの名無しさん2007/10/13(土) 14:34:11
seed をきちんと選べば、それなりにシャッフルされると思ったのですが・・・
あ、seed(time(0)); はめんどくさくて端折りました。
0212デフォルトの名無しさん2007/10/13(土) 14:35:19
srand(time(0)); だった・・・かるく自殺してくる。
0213デフォルトの名無しさん2007/10/13(土) 14:38:40
>>208
53枚のカードから一発でババを引き当てることが出来る状態のことを
完全シャッフル状態といいます。
0214デフォルトの名無しさん2007/10/13(土) 14:40:15
前半と後半(乱数)の入れ替えだから後半に動かないカードが多少出るね。
どちらかといえば>>203のほうがいいと思うんだ、うん。
0215デフォルトの名無しさん2007/10/13(土) 14:43:20
>>214
210じゃなくて203?
0216デフォルトの名無しさん2007/10/13(土) 14:46:45
>>215
うげ、安価ミスw>210です
0217デフォルトの名無しさん2007/10/13(土) 14:47:05
>>208
農学部卒の俺の答え
今回の例だったら 52x52 のカウンタの配列作って、数万回試行、カウンタとって
標準偏差とってほかの方法と比べる、みたいなんじゃないか?証明はムリ
0218デフォルトの名無しさん2007/10/13(土) 14:58:18
シャッフルについては95代目で議論があった。
for(i=0;i<N;i++){
r=(int)(rand() / (RAND_MAX + 1.0) * (i+1));
temp=array[i]; array[i]=array[r]; array[r]=temp;
}
みたいするといい感じに混ざるらしい。
詳しくは510からの議論を参照されたし
0219デフォルトの名無しさん2007/10/13(土) 14:59:33
>>203のは後半に動かないカードが多少出るどころじゃないだろ。
1から25までに入ってる奴は自分より小さい番号のところに絶対入らない糞仕様だぞ
0220デフォルトの名無しさん2007/10/13(土) 15:00:28
あ、書こうと思ったら先越された>>218

均一に混ぜるなら>>218の方法だけど、
リアルに似せるなら多少不均一でもいいかもね。よくないか。
0221デフォルトの名無しさん2007/10/13(土) 15:25:33
なるほどねぇ。
0222デフォルトの名無しさん2007/10/13(土) 18:41:50
>>204
いまさら指摘すると、分数を使う必要はない
1/3*6 = 2 ができなくても 6*1/3 のように並び替えで同じ解が得られるから
0223デフォルトの名無しさん2007/10/13(土) 18:58:14
カードシャッフルのチート対策版
メモリ内を覗かれても、カードが配られる時まで
次に配られるカードが何であるか分からない
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void){
int card[52], i, idx, temp;

srand(time(NULL);
for(i=0;i<52;i++) card[i]=i;
for(i=0;i<52;i++){
idx=rand()%(52-i);
temp=card[i];
card[i]=card[i+idx];
card[i+idx]=temp;
}
for(i=0;i<52;i++) printf("%d\n", card[i]);

return 0;
}

※上記の表現は誇張しています。頑張れば次のカードを調べることは可能です
0224デフォルトの名無しさん2007/10/13(土) 19:13:15
ちょっと聞きたいんだけどLoad Imageってvoid文でもいけたよね?
void mywindow_init2()
{
int i;
HDC hdc = GetDC(mywin[0]);
for(i=0;i<MDC_MAX;i++){
mdc[i]=CreateCompatibleDC(hdc);
}
bmp[0]=CreateCompatibleBitmap(hdc,WINX,WINY);
bmp[1]=LoadImage(myinst,"bitmap1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
bmp[2]=CreateBitmap(WINX,WINY,1,1,NULL);
bmp[3]=LoadImage(myinst,"title.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
bmp[4]=LoadImage(myinst,"gameover.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
bmp[5]=LoadImage(myinst,"ending.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
SelectObject(mdc[0],bmp[0]);
PatBlt(mdc[0],0,0,WINX,WINY,WHITENESS);
SelectObject(mdc[1],bmp[1]);
SelectObject(mdc[2],bmp[2]);
SelectObject(mdc[3],bmp[3]);
SelectObject(mdc[4],bmp[4]);
SelectObject(mdc[5],bmp[5]);
COLORREF c;
c=GetPixel(mdc[1],0,0);
BitBlt(mdc[2],0,0,640,371,mdc[1],0,0,SRCCOPY);
BitBlt(mdc[1],0,0,640,371,mdc[2],0,0,SRCINVERT);
ReleaseDC(mywin[0],hdc);
}
で、ビットマップが変換できないってエラーでて困ってるんだけど
02251492007/10/13(土) 19:30:02
完全な回答だれかできませんか?

183は組合せが1234から始まってないので・・・

あとプログラムのアルゴリズムに対して考察もしないといけないので・・・
0226デフォルトの名無しさん2007/10/13(土) 19:33:18
その書き方だと「できます」ってだけのやつが出てくるぞ
催促するならはっきり書かなきゃ
0227デフォルトの名無しさん2007/10/13(土) 19:35:56
考察したら自分で完全版作れるんじゃない?
02281492007/10/13(土) 19:36:02
>>226
はい。では仕様を満たすプログラムを作ってください。
お願いします。。。
0229デフォルトの名無しさん2007/10/13(土) 20:07:21
1234から始めたいだけなら
for(i=1; i<=6; i++) {
for(j=i+1; j<=7; j++) {
for(k=j+1; k<=8; k++) {
for(l=k+1; l<=9; l++) {
//チェック用の関数
}}}}
ってやればよくね?
0230デフォルトの名無しさん2007/10/13(土) 20:10:27
>>229
チェック用の関数がどこにあたるかわからないです。。。
>>183のプログラムが理解できなくて・・・

>>186ならなんとか理解できそうなんですが
0231デフォルトの名無しさん2007/10/13(土) 20:28:58
理解できるんなら、それを自分で変えればいいだけだろ。
0232デフォルトの名無しさん2007/10/13(土) 20:29:32
>>222
うは、俺恥ずかしす
02331492007/10/13(土) 20:48:59
>>231

やっぱり理解できなかったです。

122行目の
temp=work[index], work[index]=work[i], work[i]=temp; の構文がよくわからないです。なんでセミコロンじゃなくてコンマなんですか?
0234デフォルトの名無しさん2007/10/13(土) 21:01:58
temp=work[index];
work[index]=work[i];
work[i]=temp;

と同じ。
ただ、そういう書き方もできるだけ。
02351492007/10/13(土) 21:04:24
>>234
わかりました。
02361492007/10/13(土) 21:05:09
途中で送信してしまいました。


>>186の方がまだいるならば完全版をお願いしたいです。
0237デフォルトの名無しさん2007/10/13(土) 21:07:42
1〜9の数字を重複せずに選んで、入力した数nを計算できる数式を全て列挙せよ
0238デフォルトの名無しさん2007/10/13(土) 21:17:13
>>186 の人は立ち上がってポインタを解禁して欲しそうにしている
解禁しますか?はいかイエスで答えて下さい
ニア はい
     イエス
0239デフォルトの名無しさん2007/10/13(土) 21:30:04
>>149こんなん簡単だろ

まず f ( a b c d) 数字abcdをそのままの順序でつかって計算可能な式すべてを計算する を作る

○は加減乗算とする

可能性として  a  b ○ c ○ d ○ または  a  b ○ c d ○○ の形しかない 

これで関数fはつくれるだろ
02401492007/10/13(土) 21:33:04
>>239
a b c * + d - (b*c)+a-d   

みたいな感じもありえますよね?
0241デフォルトの名無しさん2007/10/13(土) 21:33:31
すまん まちがえた
0242デフォルトの名無しさん2007/10/13(土) 21:42:04
3つなら a b○c○   a bc○○ のみ

4つなら
a b○c○d○   a bc○○d○  と
a bcd○○○
でいいか?
0243デフォルトの名無しさん2007/10/13(土) 21:44:18
a b○c○d○   a bc○○d○  a bcd○○○ a b○cd○○ だな
0244デフォルトの名無しさん2007/10/13(土) 21:47:12
>>243
ab○c○d○ は dcab○○○ と等価
0245デフォルトの名無しさん2007/10/13(土) 21:48:41
順番はかえないっていってるだろ
0246デフォルトの名無しさん2007/10/13(土) 22:00:56
任意の個数のときは、全部を後方に置くか、、一カ所区切りをいれる
というのを再帰して求めれば全ての配置が決まるな
0247デフォルトの名無しさん2007/10/13(土) 22:09:59
(1〜9から重複せず4個選ぶ組み合わせ)×(+-*/から重複を許して3個選ぶ組み合わせ)×(8個の物を並べる順列)
0248デフォルトの名無しさん2007/10/13(土) 22:22:20
>>149
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5069.c
表示部分がちょっと手抜き
02492482007/10/13(土) 22:27:59
あー
9/(8-5)*4=12
が抜けとる

思ったよりめんどいな
0250デフォルトの名無しさん2007/10/13(土) 22:34:06
なぜ抜けている事がわかった?
02512482007/10/13(土) 22:36:35
割り算が可換じゃないことを思い出したから
0252デフォルトの名無しさん2007/10/13(土) 22:41:58
というか>>183じゃ駄目なのか?
俺は試してないから知らないけど
■ このスレッドは過去ログ倉庫に格納されています