C/C++の宿題を片付けます 57代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/01/09(月) 10:02:47【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 2.9 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
【前スレ】
C/C++の宿題を片付けます 56代目
http://pc8.2ch.net/test/read.cgi/tech/1135125328/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0412デフォルトの名無しさん
2006/01/14(土) 01:18:42[2] 問題文(含コード&リンク):
int t(int x, int y, int z) {
if (x > y) return t(t((x-1),y,z),t((y-1),z,x),t((z-1),x,y));
return y;
}
という関数tがある。tと等価な関数で高速なものを実装せよ。
目安としてはt(2006,1003,0)がtimeコマンドで10s以内
[3] 環境
[3.1] OS: 問わない
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006年1/15(日)の23:59まで
おねがいします。
0413デフォルトの名無しさん
2006/01/14(土) 01:29:59数学の問題得意じゃないけど
int t( int x, int y, int z )
{
if ( x <= y ) return y;
if ( y <= z ) return z;
return x;
}
でいいんじゃないか?
元の関数と違う結果を返す x, y, z の組み合わせ例を見つけたら
教えて。
0414デフォルトの名無しさん
2006/01/14(土) 01:30:33ノシ
とりあえず枠だけ作るのに2時間かかりました
0415デフォルトの名無しさん
2006/01/14(土) 01:34:30・・・まあ、なんだ・・・あとは明日以降。
0416デフォルトの名無しさん
2006/01/14(土) 01:43:28ワロタ
0417413
2006/01/14(土) 01:47:51再帰複雑すぎて脳内実行できないし、元のアルゴリズム遅すぎて結果でるまで待てないし、
検証の仕様がないんだけど。
0418デフォルトの名無しさん
2006/01/14(土) 01:51:590419405
2006/01/14(土) 01:52:05ノシ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1454.txt
[2]CPU戦・ランダムで置くところまで。4でCPU対戦。
update 1451.txt
>右上→左下の判定が出来てなかったもより
今は反省している
>あと、メッセージを問題文に準拠
0420405
2006/01/14(土) 02:13:57とりあえず今の考えでは
1.自分が置いて「勝ち」なら、その手を選ぶ
リーチ目の行・列があれば、ってこと
2.相手にリーチ目があれば全力で阻止
3.ライン(1列)上に相手の石が無く、なおかつ
自分の石が一番多いラインをカウント
ライン上に相手の石があれば、そのラインを
揃えて勝つことはできない
4.3.のラインの自石が置ける場所にクロスするラインで
3.の判定を行い、最善を選ぶ
5.3.を満たす列がまったく無い場合、勝つことができない。
逆に相手に揃えさせない手を選ぶ。
6.5.を満たす列が無くなった場合、すなわちどこの
空きマスを見ても縦横に○×両方入っている場合は
実質引き分けとなる。空いてるマスにランダムで。
これからの方針はこんな感じ。では寝ます ノシ
ちなみに4.の判定をすると、ダブルリーチの目を
自ら潰すように動くと思われ。
0421デフォルトの名無しさん
2006/01/14(土) 02:15:49[2]問題文:
既定のディレクトリにあるファイルをオープンし、ファイルの中身を読む。
ファイルは一日単位で自動的に生成され、名前は
2005_12_31.txtのようなフォーマットになっていて、開く対象のファイルはコマンドラインの
オプションで指定する。(./exefilename prm1 prm2)
例えば、prm1が2005_12_20,prm2が2006_01_10であれば、2005年12月20日から
2006年1月10日までのファイルを順番にオープンする。
ファイルの中身は一行が最大200Byteのテキストで、全て5行で構成されるログのようなもので、
1つのレコードの最後、つまり5行目の終端に、DBGPRT=ONかDBGPRT=OFFという文字列が
付加されている。
ファイルリードは1つの関数として実行し、開くファイルの数だけその関数を実行する事とする。
ファイルリード関数の先頭で子プロセスを生成しておく。
関数内で1つのレコード(MAX200Byte*5)を読み込み、5行目の最後がDBGPRT=ONだった場合、
標準出力に吐き出させる。ただし、吐き出しは子プロセスで行う事。
子プロセスとのプロセス間通信には共有メモリを用い、また、ダブルフォークは禁止とする。
子プロセスの埋葬は必ず行う事。
尚、ソースコードはC言語で記述し、文字列はchar型の配列で扱う事。
上記以外の制約は無し。
[3]環境
OS:Linux
コムパイラ:GCC
言語:C
[4]期限 お勉強なので特になし。
どう取り組んだら良いのかさっぱりです。
取り合えず方針だけでも教えて頂ければ幸いです。それ以前に、プロセス間通信は分かりますが共有メモリを使っての
プロセス間通信はどうやってやるとですか??
0422デフォルトの名無しさん
2006/01/14(土) 02:19:28だぶるふぉーっくって何だ?
0423デフォルトの名無しさん
2006/01/14(土) 02:22:420424デフォルトの名無しさん
2006/01/14(土) 02:23:18量子力学の基本だろ
0425デフォルトの名無しさん
2006/01/14(土) 02:26:18http://www.system5.jp/asp/ItemFile/10004843.html
0426デフォルトの名無しさん
2006/01/14(土) 02:30:19[2] 問題文(含コード&リンク):
【1】1+2+3+...+100を計算するプログラムを作成してくださいfor文を使用してください。
#include<stdio.h>
void main(void)
{
int gokei,i;
【2】【1】のプログラムをwhile文を用いて書き直してください。
【3】整数iの自乗が1000以上で、もっとも100に近い値となるiとiの自乗を算出するプログラムを作成してください。
#include<stdio.h>
void main(void)
{
int i;
【4】18の倍数で、300以下の最大の整数を求めるプログラムを作成してください。
#include<stdio.h>
void main(void)
{
int i;
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc32 Ver.5.5.1.2
[3.3] 言語:C
[4] 期限:2006/1/15
[5] その他の制限:あまり詳しいことは分からないのですが、
出来るだけ初歩的なコードで書いてください。
すいません。
結構、量があるとは思いますが、どうぞよろしくお願い致します。
0427デフォルトの名無しさん
2006/01/14(土) 02:35:480428デフォルトの名無しさん
2006/01/14(土) 02:39:22gokei = 0;
for(i =1;i<=100;++i){
gokei += i;
}
【2】
gokei = 0;
i = 1;
while(i <= 100){
gokei += i;
++i;
}
【4】
i = 300 - (300 % 18);
>427
10000の間違いなんじゃない?
0429デフォルトの名無しさん
2006/01/14(土) 02:41:12main(void){
int n1 = 1;
for(;n1 * n1 > 1000;n1++)
ん?? LOOPしねぇぞオイ
0430デフォルトの名無しさん
2006/01/14(土) 02:45:49int n1 = 200;
int n2 = 0;
while(1)
{
n2 = n1 * n1;
if(n2 < 1000)
break;
n1--;
}
0431デフォルトの名無しさん
2006/01/14(土) 02:48:32#include<stdio.h>
void main(void){int gokei,i;gokei=0;for(i=1;i<=100;i++)gokei+=i;printf("%d\n",gokei);}
2.
#include<stdio.h>
void main(void){int i=0,gokei=0;while(i<100)gokei+=++i;printf("%d\n",gokei);}
3.
#include<stdio.h>
void main(void){int i=0;while(i*i<1000)i++;i--;printf("i=%d, i^2=%d\n",i,i*i);}
4.
#include<stdio.h>
void main(void){int i;i=300-(300%18);printf("%d\n",i);}
0432431
2006/01/14(土) 02:52:27問題読めば読むほどワカラン
0433デフォルトの名無しさん
2006/01/14(土) 02:53:00おマイの頭にSIGKILL
SIGSEGVしてるぞ
0434デフォルトの名無しさん
2006/01/14(土) 03:00:55リーチ目をおさえるまでやってみた。
0435デフォルトの名無しさん
2006/01/14(土) 03:02:01#include<stdio.h>
void main(void){puts("100");return 0;}
0436デフォルトの名無しさん
2006/01/14(土) 03:03:10なんでそんな情熱あるの?w
0437434
2006/01/14(土) 03:03:41if(search_reach(&x, &y, current)) printf("<%c%c>\n",x+'1', y+'A');
はテストコードなんで無視してちょ。
0438デフォルトの名無しさん
2006/01/14(土) 03:05:30やるな>435
i=0;
while(1){
if(1000 <= (100-i)^2){
i = 100-i;
break;
}
if(1000 <= (100+i)^2){
i = 100+i;
break;
}
++i;
}
printf("%d %d\n",i,i^2);
0439デフォルトの名無しさん
2006/01/14(土) 03:14:52愛がゼロだからそのまま抜けるな。
0440デフォルトの名無しさん
2006/01/14(土) 03:40:21なんて愛の無いプログラムなんだろう。
0441デフォルトの名無しさん
2006/01/14(土) 03:43:480442426
2006/01/14(土) 03:58:11【3】の問題は
整数iの自乗が1000以上で、もっとも「1000」
です。
こんな下らないミスで混乱させてしまい、申し訳ありません。
それでも、真剣に考えてくださって本当にありがとうございます。
これで、単位どうにかなりそうです。
0443デフォルトの名無しさん
2006/01/14(土) 04:00:38別の人?
0444デフォルトの名無しさん
2006/01/14(土) 04:03:490445デフォルトの名無しさん
2006/01/14(土) 04:04:24ハズカシス
0446438
2006/01/14(土) 04:07:29>441
あー、何考えてんだ、漏れ。
>444-445
もう寝れ。漏れも寝る。
0447デフォルトの名無しさん
2006/01/14(土) 04:18:57私が質問するのは今回が初めてなので、
同じ授業を取っていた人が質問したと思います。
0448デフォルトの名無しさん
2006/01/14(土) 04:26:000449デフォルトの名無しさん
2006/01/14(土) 04:35:31めんどくさいってのもあるけど
0450デフォルトの名無しさん
2006/01/14(土) 04:40:13(゚Д゚)ノ ァィ
#include<stdio.h>
void main(void){
int i;
for(i=1;i*i<1000;i++);
printf("%d %d\n",i,i*i);
}
0451デフォルトの名無しさん
2006/01/14(土) 04:50:17>整数iの自乗が1000以上で、もっとも「1000」
日本語勉強し直せよ
整数iの自乗が1000以上で、もっとも「1000」に近い「i」なら1000だろ
i == 32 を期待してるなら、
整数iの自乗が1000以上で、もっとも小さい「i」
0452デフォルトの名無しさん
2006/01/14(土) 04:52:18死ね
0453デフォルトの名無しさん
2006/01/14(土) 04:54:40とりあえず通報しといた
0454デフォルトの名無しさん
2006/01/14(土) 05:38:12ところで、総当り方式のマルバツプログラムは組んだんだが、3x3までは動く。
4x4はダメダ...
3x3の組合せ(9!)362880
4x4の組合せ(16!)20922789888000
...いや、6x6のオセロが解けるってきいてたもんで、4x4ならラクに行けるんじゃないかと...
先に計算量を予想しとかんといかんですな...
0455デフォルトの名無しさん
2006/01/14(土) 05:42:160456デフォルトの名無しさん
2006/01/14(土) 07:10:35ここでソースコード書いてもらっても理解出来なきゃ自分が困るだけだな。
0457デフォルトの名無しさん
2006/01/14(土) 07:12:41実際問題そんなの出して問題ないのかな?
0458デフォルトの名無しさん
2006/01/14(土) 07:30:54C99以前では
int num;
scanf("%d",&num);
int hoge[num];
というのは駄目ですからー
遅かれ早かれ動的メモリ確保は履修するべき、しないならうんこ
0459デフォルトの名無しさん
2006/01/14(土) 07:38:52それは教官が馬鹿な場合だけだ
0460デフォルトの名無しさん
2006/01/14(土) 07:40:51えっ?それできるの?マジで?
0461デフォルトの名無しさん
2006/01/14(土) 07:43:26できないんですけど・・・
0462デフォルトの名無しさん
2006/01/14(土) 07:50:09馬鹿じゃなくて理解できているかどうか確認するために書かせる
0463デフォルトの名無しさん
2006/01/14(土) 07:56:08自分で理解して組み上げたものか、ここで丸投げしたものかの判断で
ソース内か別pdfなどで説明を要求してくる先生もいる。
0464デフォルトの名無しさん
2006/01/14(土) 08:00:40俺はそんなことなかったな
0465デフォルトの名無しさん
2006/01/14(土) 08:03:13余所(このスレの回答者とか)で動作確認できなくすることで
丸投げ対策してるのではないかとも思いたくなる。
0466デフォルトの名無しさん
2006/01/14(土) 08:03:23それが恐ろしいとか、うざいとか言うなら
大学なんて辞めてアルバイトでもした方がいいよ
生半可な知識で現場に出てこられても使えないだけだし
0467デフォルトの名無しさん
2006/01/14(土) 08:04:33たかが大学の授業なのに
0468デフォルトの名無しさん
2006/01/14(土) 08:05:240469デフォルトの名無しさん
2006/01/14(土) 08:16:440470デフォルトの名無しさん
2006/01/14(土) 08:16:48えっ、それが普通じゃないの?
てか、そうじゃないと本当の意味で理解してるのか分からない。
友達のソースを改変して、できましたって持ってくこともできるし。
0471デフォルトの名無しさん
2006/01/14(土) 08:29:05だけど、コピーペーストだけはするな
まんまでいいから自分で打ち込めとか言ってた
0472デフォルトの名無しさん
2006/01/14(土) 08:34:57プログラムは組みたいけど、数学の勉強はいまさらしたくない。
漸化式とか、ぐぐってもサパーリ理解不能。
本末転倒だとは思うんだけど、ね。
めんどうな計算はコンピーターにやらせよう。
「3桁×3桁は電卓で。」の、ゆとり教育。
0473デフォルトの名無しさん
2006/01/14(土) 08:35:33あたかも自分で書いたように見せかけて提出すると犯罪だけど
覚えるだけならそれでもいいかもね。
0474377
2006/01/14(土) 09:05:38コンピュータ側を強くするという意味だそうです。
>>405さん 有難うございます。俺も頑張ってみますが、まだプログラムを
考えてくださってる方もいるようなので、よろしくお願いします。
0475デフォルトの名無しさん
2006/01/14(土) 09:15:000476デフォルトの名無しさん
2006/01/14(土) 09:18:30おまえ漸化式も知らないでプログラマやってんの?w
0477デフォルトの名無しさん
2006/01/14(土) 09:20:55ここで書かれたコンピュータ側プログラムでどれが一番強いか競わせたいね。
だれかネットワーク対戦用に共通の土俵を作ってくれ。
0478デフォルトの名無しさん
2006/01/14(土) 09:31:380479472
2006/01/14(土) 09:46:19正直、行列とかわからん。3D興味ないし。
ベクトル内積ぐらいならなんとか。
作りたいものが10年前のレベルだからいいじゃん。
日曜プログラマだし。(元プロ)
0480デフォルトの名無しさん
2006/01/14(土) 09:47:140481デフォルトの名無しさん
2006/01/14(土) 10:01:12[2] 問題文(含コード&リンク):
構造体の配列を用いて、5人分の氏名、学籍番号、点数を記録し、
新しく入力された点数以上の氏名を出力するプログラムを書け。
(必ず、print_student(struct student s)と言う学生一人分の情報を
1行に表示する関数を作成し、それを利用して出力を行うこと。)
< 構造体の例 >
struct student{
char name[50], id[20];
int score;
};
< 実行例 >
Name? Tanaka (fgets と sscanf によって5人分のデータを入力する)
ID? 103
Score? 80
(途中省略)
Passing score? 70
102 Suzuki 90
103 Tanaka 80
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 2006年1月17日まで
何とぞお手柔らかにお願いします
0482479
2006/01/14(土) 10:03:12Cだけど、表示まわりは社内ライブラリが充実してたし
(支店の人間がさわることは許されなかった)、
ほとんどSQLだけ。
業務アプリなんて、VB+データベースの知識だけで十分。
こんなんで全国1,000店舗の販売管理できるんだもんな。
0483デフォルトの名無しさん
2006/01/14(土) 10:07:08雑談したいだけならどっか逝けよ
0484デフォルトの名無しさん
2006/01/14(土) 12:29:07× データベースの知識
○ データベースの使い方
0485デフォルトの名無しさん
2006/01/14(土) 13:47:50[2] 問題文:
二分探索木における挿入、削除、検索のアルゴリズムを簡潔に説明し、そのプログラムを作成せよ。
ただし、挿入、削除、検索はそれぞれ再帰を用いた関数でプログラムを作れ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:1/26まで
[5] その他の制限:特に無し
よろしくお願いします。
0486デフォルトの名無しさん
2006/01/14(土) 13:49:48ttp://www.geocities.jp/ky_webid/algorithm/017.html
0487デフォルトの名無しさん
2006/01/14(土) 13:51:14BinarySearchで再帰なんて使うメリット無いだろ
0488デフォルトの名無しさん
2006/01/14(土) 14:22:450489デフォルトの名無しさん
2006/01/14(土) 14:41:410490デフォルトの名無しさん
2006/01/14(土) 14:49:52[2] 問題文(含コード&リンク):数字パズル。パズル完成時にクリアメッセージ「おめでとう!」等が表示されるようにせよ。(配列の初期配置と現在値の合同判定をする関数を組んで下さい)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1462.txt
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: bcc32
[3.3] 言語: C
[4] 期限: [2006年01月16日24:00まで]
[5] その他の制限: 特にありませんが、お願いする関数はint moveのswitch(S)下、caseのbreak;直前毎に組み込んでくださると見易くて助かります。
それと私自身の力不足の為、グローバル変数が混じっていますが多めに見て下さい…それでは宜しくお願い致します。
0491デフォルトの名無しさん
2006/01/14(土) 14:50:590492デフォルトの名無しさん
2006/01/14(土) 14:52:35いわゆる15パズルっぽいな
0493490
2006/01/14(土) 15:01:06プログラムとして動くようにはなっているので、bcc32でコンパイルすればどんな状態なのか一発でわかるのですが…
実際参考にする必要性のある箇所は少ないはずです…多分グローバル関数のnumと配列担当のint table位だと思います。
他の関数は数字混ぜたり書いたりしてるだけなので…
0494デフォルトの名無しさん
2006/01/14(土) 15:49:14masu 定義直後に int masu0[11][11];int started = 0;
tableinit() 呼出直後に copy();
start() 呼出直後に started = 1;
指定位置に judge();
void copy(){int x, y;for(x=1;x<=num;++x) for(y=1;y<=num;++y) masu0[x][y]=masu[x][y];}
void judge(){int x, y;if(!started) return;for(x=1;x<=num;++x) for(y=1;y<=num;++y) if(masu0[x][y]!=masu[x][y]) return;printf("おめでとう!\n");}
0495デフォルトの名無しさん
2006/01/14(土) 16:25:01最近はできる
昔はできなかった
VC++6.0なんかだとできない
0496212
2006/01/14(土) 16:34:33ややこしい問題ですがどうかよろしくお願いします。
符号付2進展開のプログラムについてです。
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
a^rをa,rごとに入力し、rを2進展開して(5^3)*(2^6)を求めるプログラムを作りなさい。
またrを符号付2進展開にした場合のプログラムも作りなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語:C言語
[4] 期限:2006年1月15日
[5] その他の制限:a,rの入力は面倒だと思うのでscanf使わずにプログラムに埋め込んでいいです。
問題文分かりにくいですが以下のようなことです。
(符号付じゃない場合)
3 = 0 1 1・・・・・・5の指数部
6 = 1 1 0・・・・・・2の指数部
ーーーーーーーーーー
上のように指数部を2進展開して上位ビットから見ていきます。
1がたったビットでは×仮数部をして、右にシフトするごとに2乗するようにします。
このような仕様です。よろしくお願いします。
0497デフォルトの名無しさん
2006/01/14(土) 17:00:38この程度で長いって逝ってたらやばいぞ
0498デフォルトの名無しさん
2006/01/14(土) 17:11:05僕にはこれが限界ですた
http://smzk55.hp.infoseek.co.jp/maru_batu.c
0499デフォルトの名無しさん
2006/01/14(土) 17:33:42[2] 問題文 台形の面積を計算する関数を作成せよ.ただし上底,下底,高さは
main関数内で取り込み,これら3変数を関数の引数として与えるものとする.
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:明日まで
[5] その他の制限:初心者でもわかりやすい感じ…;
よろしくお願いします。
0500デフォルトの名無しさん
2006/01/14(土) 17:50:00・関数内で表示するのか、値を返すのか
・引数および面積の値は実数か整数か
0501デフォルトの名無しさん
2006/01/14(土) 17:53:50値は実数
0502デフォルトの名無しさん
2006/01/14(土) 17:55:23「値を返す」「実数」でお願いします!
0503デフォルトの名無しさん
2006/01/14(土) 17:55:280504デフォルトの名無しさん
2006/01/14(土) 17:56:33表示する必要はなさそう
0505デフォルトの名無しさん
2006/01/14(土) 17:57:240506デフォルトの名無しさん
2006/01/14(土) 18:00:02マジレスワロスw
>>499
double (double top,double bot,double h)
{
return (top+bot)*h/2.0;
}
0507デフォルトの名無しさん
2006/01/14(土) 18:04:11506番さんのを詳しく教えてほしいのですが…
0508デフォルトの名無しさん
2006/01/14(土) 18:04:25このタイミングで桁あふれしないか?
(h/2.0)*(top+bot)
とするとか...
0509デフォルトの名無しさん
2006/01/14(土) 18:06:010511デフォルトの名無しさん
2006/01/14(土) 18:12:02>(h/2.0)*(top+bot)
このタイミングで桁落ちしないか?
■ このスレッドは過去ログ倉庫に格納されています