[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/13 08:24 / Filesize : 133 KB / Number-of Response : 421
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2009/01/15(木) 23:21:27 ]
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

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

前スレ
C/C++の宿題を片付けます 121代目
pc11.2ch.net/test/read.cgi/tech/1230678123/

22 名前:デフォルトの名無しさん [2009/01/30(金) 23:26:01 ]
>>21
すみません、どうゆうことですか(><)?

23 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:26:52 ]
>>22
>>17から出発して、自分で問題文を探してみろよって言ってんだ

24 名前:デフォルトの名無しさん [2009/01/30(金) 23:39:40 ]
>>23
私の問題はNo.8780ですが、どうしたらいいかわからないんです。。。

25 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:45:44 ]
>>17
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=8780

26 名前:デフォルトの名無しさん [2009/01/30(金) 23:50:45 ]
>>25
その問題なんですけど、問題の意味がわからないってことですか?

27 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:57:00 ]
>>26
問題文が長いときはzipに入れとこうね。

28 名前:デフォルトの名無しさん [2009/01/30(金) 23:59:04 ]
>>27
すみません(><)やり方がいまいちわからなかったもんで。。。
ありがとうございます!!

29 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 00:10:36 ]
>>17
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8742.txt
これと同じ問題だよね。

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8743.txt

30 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 00:11:31 ]
>>24
オマエ以外の誰がそれを知ってんだよ、バカ



31 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 00:12:22 ]
>>28
マルチったレッドで回答ついてるだろ。
死ね。

32 名前:デフォルトの名無しさん [2009/01/31(土) 00:22:16 ]
>>29
それとおんなじ問題です。

33 名前:デフォルトの名無しさん [2009/01/31(土) 00:23:01 ]
>>30>>31
すみません。。。

34 名前:デフォルトの名無しさん [2009/01/31(土) 00:29:04 ]
1万個以下の都市間の距離が記録されている。
近い都市どおしをまとめて、n個のグループに分ける。
これわかる人いますか?

35 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 00:34:37 ]
ワーシャル・フロイト法?

36 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 00:35:24 ]
>>34
>>1くらい読め
一刻も早く死ね

37 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 00:40:59 ]
>>34
スレタイと>>1
まともに訊く気があるなら”近い都市どおしをまとめて”って辺りを詳しく

38 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 00:43:59 ]
>>34
よく見ると、日本語でおkだ・・・
ねたか・・・

39 名前:デフォルトの名無しさん [2009/01/31(土) 01:05:08 ]
すみません。 
都市は円形同サイズで、中心間の距離が記録されています。
2つにわれる場合は、同程度サイズになるようにします。
合併後の都市の中心から橋が離れすぎないようにします。

40 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 01:06:58 ]
>>39
>>1くらい読め
死ね



41 名前:デフォルトの名無しさん [2009/01/31(土) 01:10:08 ]
>>39
スレタイ嫁
あと、書いた文を人が読んで理解できるかどうかを考えて文を書け
3行目以下が意味不明

42 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 01:23:32 ]
よく読むと微妙にスレタイ変わってるんだな

43 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 01:38:02 ]
>>17は結局何が悪かったのかに気づいてないんだろうな。
zipじゃなかったことについて怒られたんだと思ってるよきっと。

44 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 01:42:58 ]
スレタイだけ読んだってしょうがないだろ
テンプレも読ませないと

45 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 01:43:01 ]
>>42
重複スレだから仕方ない

46 名前:デフォルトの名無しさん [2009/01/31(土) 02:48:41 ]
[1] 分岐 一次元配列 繰り返し 外部関数
[2] www.pref.fukushima.jp/pc-concours/2008/03/pdf/2007honsen.pdf(問2問3)
[[3] 環境
 [3.1] OS:Windows XP
 [3.2] visual C++
 [3.3] C++
[4] 期限: 2009年2月3日まで]
[5] main関数以外にユーザ定義関数を作成すること。

困ってます。誰か助けてください。

47 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 03:08:02 ]
>>46
スパコン甲子園かと思ったら、パソコン甲子園なんだな・・・

48 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 03:16:41 ]
>>47
高校生が20分掛けずに解くことになっている問題じゃねーか!

49 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 03:20:20 ]
1問あたり20分?

50 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 03:49:05 ]
>>49
予選の問題だろ?
180分で10問だってさ。



51 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 03:52:37 ]
>>50
本選の問題で、240分で12題の配分。

52 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 04:38:32 ]
>>46
こんな?
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8791.txt
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8792.txt

53 名前:デフォルトの名無しさん [2009/01/31(土) 05:13:15 ]
>>52
iostreamライブラリ関数(習っていない)を使わないで
入力もscanfをつかって表現できませんか?

実際、C言語習って3か月しかたってないので
基礎しかわかりません・・。

54 名前:デフォルトの名無しさん [2009/01/31(土) 05:28:08 ]
46>>
main関数以外と最後に書いてありますが
main関数も使って結構です。
要するに二つの関数を用いれば結構です。
たびたび、すみません

55 名前:デフォルトの名無しさん [2009/01/31(土) 05:32:15 ]
[1] 授業単元:while文
[2] 問題文:キーボードから入力された2以上の自然数nが素数であるかどうか繰り返し調べるプログラムを作ってみましょう。
      1回終わるごとに「次の2以上の自然数を入力してください」と再入力
      nに0以下の整数が入力された場合は
      「0以下の整数が入力されました」 「次の2以上の自然数を入力してください」と再入力
      nに1が入力されたら「終了します」として調べるのを終える
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler、bcc developer
 [3.3] 言語: C++
[4] 期限:2009年2月2日10:30まで
[5] その他の制限:while(1)で無限ループとか、goto文使えばできるんですが授業で扱ってません。。

56 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 05:35:30 ]
>>53
C++なのにiostreamやってないの?
Cなんじゃないの?

57 名前:デフォルトの名無しさん [2009/01/31(土) 05:48:28 ]
>>56まだ習ってないです・・汗

58 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 05:50:34 ]
それは酷いな

59 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 06:23:56 ]
>>55
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8793.cpp

60 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 09:34:30 ]
>>53
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8794.txt
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8795.txt

殆んど意味不明。
>>46には一次元配列と書いてあるが使うところが無いし



61 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 09:50:08 ]
問3は配列を使いたいね

62 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 10:14:54 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8796.txt

63 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 13:06:46 ]
前スレで回答いただいた者(>>973)ですが、

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8788.c

をコンパイルしたところ、
59: 警告 return type of 'main' is not 'int'

と表示されます。どう直せばよいのでしょうか?

64 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 13:20:04 ]
>>63
やむを得まい、int main(void) { return0; } にするしかない。

65 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 13:37:57 ]
>>64
ありがとうございました!

66 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 13:42:48 ]
>>46
面白い問題だ
制限時間内に全問正解できる自信がないぜw

67 名前:デフォルトの名無しさん [2009/01/31(土) 15:34:18 ]
>>46
高校レベルなの??

68 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 15:46:13 ]
>>46
プログラムとしてはどうか知らんが
数学的には未解決問題の上に賞金もかけられていたはず

69 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 15:46:34 ]
>>59
本当にありがとうございます!
すっきりしててわかりやすいです!

70 名前:デフォルトの名無しさん [2009/01/31(土) 15:58:37 ]
>>68
与えられた数字より、小さい数字に出来ることを示せばいい。
たとえば、100から始めたら、99以下になる事を示す。
そうすれば数学的帰納法で全ての数字で成り立つ。



71 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 15:59:47 ]
>>70
言ってることは尤もなんだが
数学者を馬鹿にしてるのかw

72 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 16:06:39 ]
>>70
たしかICMで我々人類がこれらの問題を解決するにはまだ十分な準備ができていない発言があったはず

73 名前:デフォルトの名無しさん [2009/01/31(土) 16:11:29 ]
これって1から逆にたどったら、全ての数字が生成出来るのかな。
もし生成出来て、試行回数に応じた出現回数の上限が存在すれば解ける。

74 名前:デフォルトの名無しさん [2009/01/31(土) 16:12:21 ]
間違えた
もし生成出来て、試行回数に応じた出現数字の上限が存在すれば解ける。

75 名前:デフォルトの名無しさん [2009/01/31(土) 16:16:33 ]
1から逆にたどったn回の試行で、f(n)以下の数字が全て生成出来る
という関数f(n)が決定出来れば、解ける。

76 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 16:16:44 ]
>>73
5 → 16
32 → 16
これを逆にたどるとすると枝が多すぎて解析不能

77 名前:デフォルトの名無しさん [2009/01/31(土) 16:20:27 ]
[1] 授業単元: C++
[2] 問題文(含コード&リンク):
自動販売機のオブジェクトを作成しないさい
(商品はオレンジジュース、コーラ、サイダーの三つにする事)更に下記の条件を満たすこと
<条件>
自動販売機で購入できる「商品」,「お金」,「自動販売機」は最低限クラス化すること。
「カプセル化」,「継承」,「多様性」を全て利用すること。
例外処理をすること(プログラムが頓挫した時点でNGとします)。
入出力は,下記のとおり行うこと。
【入力】 【出力】
・お金(10円〜1000円)の個数(枚数)    ・つり銭(10円〜100円)の個数(枚数)と総購入代金
・購入商品選択(複数可)     ・購入商品名(複数)

実現は,main()関数で「自動販売機」クラスのインスタンスを1つ作成し,そのクラスのbuy( )メンバ関数を呼び出したら全てが動作するようにする。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VB2005
 [3.3] 言語: C++
[4] 期限: 2/1まで
[5] その他の制限: 特になし。

78 名前:デフォルトの名無しさん [2009/01/31(土) 16:25:12 ]
n回の試行でlog_10(n)以下の数字が全て生成出来るは合ってるか?

79 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 16:29:35 ]
>>76
だな
コラッツ予想の写像がN→Nへの全単射でないからな
どうにもならん

80 名前:デフォルトの名無しさん [2009/01/31(土) 16:43:13 ]
別に、分岐があってもいいんだ。 全ての数字が生成出来るなら1へたどり着けるからな。
n回試行でlog_10(n)以下の数字生成出来るを証明すれば解けるぞ。
この評価は間違ってはいないと思うが。
10^4 = 10000 回試行で4以下を生成すればいいという余裕と思われる評価。



81 名前:デフォルトの名無しさん [2009/01/31(土) 16:50:01 ]
2進数だと、シフト(2倍する)と1を加えるで、全ての数字が生成出来るが
同じような理屈でできないか?

82 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 17:20:24 ]
>>77
おいおいVBってなんだよw

83 名前:デフォルトの名無しさん [2009/01/31(土) 17:27:03 ]
ろだのPOSシステムの問題どなたかお願いします。

84 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 17:43:24 ]
>>83
>>1くらいよめ
読む前に死ね

85 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 17:44:42 ]
>>46
ハミング問題が15点とかきついな。

86 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 18:41:57 ]
int isHamming(int n)
{
while(n % 2 == 0) n /= 2;
while(n % 3 == 0) n /= 3;
while(n % 5 == 0) n /= 5;

return n == 1 ? 1 : 0;
}
この程度の関数で十分だろ

87 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 19:11:33 ]
wwwwwwwwwwwwwwwwwwwwww

88 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 20:13:36 ]
>>77
例外処理してない&動くかどうかしらんが、

class jusu{ public: virtual int p(){ return 0; } };
class orenji : public jusu{ public: int p(){ return 120; } };
class kora : public jusu{ public: int p(){ return 120; } };
class saida : public jusu{ public: int p(){ return 120; } };
class okane{ int _10, _50, _100, _500, _1000;
public: okane(){} okane(int a, int b, int c, int d, int e){ _10=a; _50=b; _100=c; _500=d; _1000=e; }
int p(){ return _10*10+_50*50+_100*100+_500*500+_1000*1000; }
};
class hanbaiki{ public: okane Buy(okane kane, int o, int k, int s, jusu *syohin){
int out=0;
for(int i=0; i<o; ++i, syohin[out++] = orenji());
for(int i=0; i<k; ++i, syohin[out++] = kora());
for(int i=0; i<s; ++i, syohin[out++] = saida());
int turi = kane.p()-o*orenji().p()+k*kora().p()+s*saida().p();
int _1000=turi/1000; turi-=_1000; int _500=turi/500; turi-=_500; int _100=turi/100; turi-=_100;
int _50=turi/50; turi-=_50; int _10=turi/10; turi-=_10;
return okane(_10, _50, _100, _500, _1000);
}};
int main(){ jusu syohin[100]; okane oturi = hanbaiki().Buy(okane(1,1,1,1,1), 1, 1, 1, syohin); return 0; };

89 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 20:21:46 ]
ちょっとなおした。でも多分まだ間違ってる。でもやるきないのでこれで終わり。

class jusu{ public: virtual int p(){ return 0; } };
class orenji : public jusu{ public: int p(){ return 120; } };
class kora : public jusu{ public: int p(){ return 120; } };
class saida : public jusu{ public: int p(){ return 120; } };
class okane{ int _10, _50, _100, _500, _1000;
public: okane(){} okane(int a, int b, int c, int d, int e){ _10=a; _50=b; _100=c; _500=d; _1000=e; }
int p(){ return _10*10+_50*50+_100*100+_500*500+_1000*1000; }
};
class hanbaiki{ public: okane Buy(okane kane, int o, int k, int s, jusu *syohin){
int out=0;
for(int i=0; i<o; ++i, syohin[out++] = orenji());
for(int i=0; i<k; ++i, syohin[out++] = kora());
for(int i=0; i<s; ++i, syohin[out++] = saida());
int turi = kane.p()-o*orenji().p()+k*kora().p()+s*saida().p();
int _1000=turi/1000; turi-=_1000*1000; int _500=turi/500; turi-=_500*500; int _100=turi/100; turi-=_100*100;
int _50=turi/50; turi-=_50*50; int _10=turi/10; turi-=_10*10;
return okane(_10, _50, _100, _500, _1000);
}};
int main(){ jusu syohin[100]; okane oturi = hanbaiki().Buy(okane(1,1,1,1,1), 1, 1, 1, syohin); return 0; };

90 名前:デフォルトの名無しさん [2009/01/31(土) 20:30:39 ]
0TEN



91 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 21:03:02 ]
>>89
1660円入れて、おつりが1780円?

92 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 21:06:48 ]
_10とかの変数名見てふと思ったんだけど、
Javaの変数名って日本語文字使えるのん?


93 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 21:09:04 ]
使えない

94 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 21:12:49 ]
使えるよw

95 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 21:16:23 ]
試してみればいいよ

96 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 21:19:17 ]
まじだ、JAVAのパーサはUNICODEで解釈するのか。

97 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 21:19:58 ]
あ、やっぱりだめなのね。
わしの持ってる本にはウムラウトとかが許されるって書いてあるから
漢字もできるのかと思った。

98 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 21:20:43 ]
あれw
使えるの? あはーん?

Visual Studio 2008はJ++廃止されちゃったから試せない。

99 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 22:17:54 ]
C#は使えるな

100 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 23:23:38 ]
1] 授業単元:数値計算演習
[2] 問題文:次の二階微分方程式を解け。初期値は適当にとれ。
dv_x/dt=x/(x^2+y^2) , dx/dt=v_x
dv_y/dt=y/(x^2+y^2) , dy/dt=v_y
 [3.1] OS: Windows
 [3.2] コンパイラ名:Borland C++ Compiler、bcc developer
 [3.3] 言語: C
[4] 期限:2月2日
[5] その他の制限:常微分方程式のルンゲクッタでググって調べたんですが、
この問題は変数が多くて応用できませんでした。どなたかよろしくお願いします。



101 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 01:04:09 ]
>>100
まあ、この式をどう読むのかも知らん

102 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 01:05:40 ]
>>98
J++でできるからといってJAVAでできると言ってしまうのはひどい
逆にJAVAで可能なのかどうかを調べる為にJ++を使用するのもひどい

103 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 01:06:35 ]
>>91
おつり計算のところ、括弧忘れてるね

104 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 02:33:56 ]
>>100
ルンゲクッタ使うならこんな感じでいい希ガス
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8797.txt

105 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 12:03:43 ]
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8798.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC2005EE
 [3.3] 言語:C++
[4] 期限:09/02/03迄
[5] その他の制限:問4以外は#include <stdio.h> void main(){  ではじまること。
問1はttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8799.txt
の続きでお願いします。最小値がどうも0になってしまいます。


それではよろしくお願いします。

106 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 13:10:04 ]
>>105
問1はmin=1000ぐらいにしとけ

それより問5が正常に動作していない件について

107 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 14:49:43 ]
>>100
微分方程式の数値解としか言われてないならオイラー法で良かろう。一応1次のルンゲクッタだ。

>>105
問2
/* ヘッダとかdefineとか自分で考えてくれ。 */
int main(void){
char user_name[256];
int i,len;
puts("Input User Name");
scanf("%s",user_name);
len = strlen(user_name) - 1;
if( len > 8 || len <= 0 ) { printf("ユーザー名入力エラーです :: len=%d\n",len); exit(1); }
if( !isupper(user_name[0]) && !islower(user_name[0] ) { printf("ユーザー名の先頭文字が異常です :: %c\n", user_name[0]); exit(1);}
for(i=0;i<8;i++) if( !isalnum(user_name[i])) { printf("ユーザー名の一部が異常です :: %s\n", user_name); exit(1);}
sprintf(user_name,"メールアドレス : %s@%s",user_name,"helloworld.com");
puts(user_name);
reutrn 0;
}

108 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 15:10:38 ]
if( !isupper(user_name[0]) && !islower(user_name[0] ) {
if( !isalpha(user_name[0]) ) {

for (i=0;i<8;i++)
for (i=1;i<len;i++)

sprintf(user_name,
printf(

puts(user_name);

109 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 17:19:22 ]
>>105
問1に関して
maxとminを0で初期化するのは適切ではない
2個目のfor文の前で
max=a[0];
min=a[0];
のようにすべき

110 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 18:30:45 ]
>>105
問4
#include <stdio.h>
#include <math.h>
void main(){
int a,b,c;
double x1,x2;
int D;
printf("a = ");scanf("%d",&a);
printf("b = ");scanf("%d",&b);
printf("c = ");scanf("%d",&c);
D = b*b - 4*a*c;
if(D > 0){
x1 = (-b - sqrt(D))/ 2*a;
x2 = (-b + sqrt(D))/ 2*a;
printf("二次方程式 %d x^2 + %d x+ %d = 0 は相異なる2つの実数解を持ち、解の値は%.2fと%.2fです。\n",a,b,c,x1,x2);
}
else if(D == 0){
x1 = -b / 2*a;
printf("二次方程式 %d x^2 + %d x+ %d = 0 は重解を持ち、解の値は%.2fです。\n",a,b,c,x1);
}
else{
printf("二次方程式 %d x^2 + %d x+ %d = 0 は実数解を持ちません。\n",a,b,c);
}
}



111 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 19:04:47 ]
>>105 問5
#include <stdio.h>
void main(){
int i;
char str1[256];
char str2[256];
int count1 = 0;
int count2 = 0;
printf("文字列1:");fgets(str1,256,stdin);
printf("文字列2:");fgets(str2,256,stdin);
for(i = 0; str1[i] != '\0'; i++){if(str1[i] == ' ') count1++;}
for(i = 0; str2[i] != '\0'; i++){if(str2[i] == ' ') count2++;}
printf("文字列1中の英単語の数= %d\n",count1+1);
printf("文字列2中の英単語の数= %d\n",count2+1);
printf("英単語の数が多い方の文字列は 文字列%d です。\n",(count1 > count2) ? 1 : 2);
}

112 名前:デフォルトの名無しさん [2009/02/01(日) 20:27:47 ]
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8800.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月2日 20:00まで]
[5] その他の制限:


よろしくお願いします。


113 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 21:47:23 ]
>>112
式の長さの上限は?

114 名前:デフォルトの名無しさん [2009/02/01(日) 22:14:05 ]
>>113
特にありません

115 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 22:40:06 ]
>>112 括弧を対応させる方法が思い出せない
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char b[256], *p = b;
double t(void){
  double t = 0;
  while(1){
    if(isspace(*p)) p++;
    else if(*p == '*'){ p++; t *= strtol(p, &p, 10);}
    else if(*p == '/'){ p++; t /= strtol(p, &p, 10);}
    else if(isdigit(*p)) t = strtol(p, &p, 10);
    else return t;
  }
}
double e(double r){
  while(1){
    if(isspace(*p)) p++;
    else if(*p == '\0') return r;
    else if(*p == '+'){ p++; r += t();}
    else if(*p == '-'){ p++; r -= t();}
    else r = t();
  }
}
int main(int c, char *v[]){
  FILE *in, *out;
  if(c < 3 || (in = fopen(v[1], "r")) == NULL ||
    (out = fopen(v[2], "w")) == NULL) return 1;
  fscanf(in, "%255[^\n]", b);
  fprintf(out, "%g\n", e(t()));
  return fclose(in), fclose(out), 0;
}

116 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 22:42:36 ]
【質問テンプレ】
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク): keisan.casio.jp/has10/SpecExec.cgi?path=07000000%2e%93%9d%8cv%8a%d6%90%94%2f01001000%2e%90%b3%8bK%95%aa%95z%2f11003100%2e%90%b3%8bK%95%aa%95z%2fdefault%2exml
上記のリンクの様に、
変数x、平均μ、標準偏差σを与えて
正規分布の確率密度 f(x)、下側累積確率 P(x)、上側累積確率 Q(x)を求める関数を実装したいです。
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc 3.4.4)
 [3.3] 言語: (C/C++/どちらでも可)
[4] 期限: 2009年02月02日12:00まで
[5] その他の制限:

過去ログ等を漁りましたがありませんでした。
よろしくお願いします。



117 名前:116 mailto:sage [2009/02/01(日) 23:00:56 ]
なお、以下のような、平均0、標準偏差1の場合に
下側累積確率、上側累積確率を求める関数を見つけたのですが、
どのように変更を加えて良いのかわかりませんでした。

ご教授お願いします。


#include <math.h>

#define PI 3.14159265358979323846264

double p_nor(double z) /* 正規分布の下側累積確率 */
{
int i;
double z2, prev, p, t;

z2 = z * z;
t = p = z * exp(-0.5 * z2) / sqrt(2 * PI);
for (i = 3; i < 200; i += 2) {
prev = p; t *= z2 / i; p += t;
if (p == prev) return 0.5 + p;
}
return (z > 0);
}

double q_nor(double z) /* 正規分布の上側累積確率 */
{
return 1 - p_nor(z);
}

118 名前:デフォルトの名無しさん [2009/02/01(日) 23:48:49 ]
>>107-111
ありがとうございます。
問5はできたのですがそれ以外ができません。
問1は>>109の通りにやったら最小値でました!ありがとうございます。
平均値はどのようにして出せばいいのでしょうか?
それではよろしくお願いします。

119 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 23:53:00 ]
>>118
> 平均値はどのようにして出せばいいのでしょうか?
値を全部足して、それを値の個数で割る

120 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 23:53:40 ]
>>118
>問5はできたのですがそれ以外ができません。
難しくて全く理解できないのか、自分で作ってバグがでるのか、何を求めているのか。
言われなきゃ分からんとはな。



121 名前:デフォルトの名無しさん [2009/02/02(月) 00:12:12 ]
>>119>>120
ごめんなさい。質問する以前の問題でしたね・・・。

問1:全ての値の合計の仕方がわかりません。
問2:>>107を見てやってみたのですがバグが出てしまって、自分で直そうとしたんですが難しくて手のつけようが・・・。
問3:問2を少し弄れば出来そうな気はします
問4:バグがでます

122 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 00:12:29 ]
あぁ、またsage忘れたorz

123 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 00:21:37 ]
これはひどい

124 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 00:39:39 ]
>>121
合計の出し方
sumを0に初期化
2個目のfor文の中でsum+=a[i];

エラーメッセージを貼るなりしてくれないと
どんなバグが出てるのかわからない

125 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 00:48:26 ]
>>124
問2>>107を実行すると
1>.\11.cpp(8) : error C3861: 'strlen': 識別子が見つかりませんでした
1>.\11.cpp(9) : error C3861: 'exit': 識別子が見つかりませんでした
1>.\11.cpp(10) : error C3861: 'isupper': 識別子が見つかりませんでした
1>.\11.cpp(10) : error C3861: 'islower': 識別子が見つかりませんでした
1>.\11.cpp(10) : error C3861: 'exit': 識別子が見つかりませんでした
1>.\11.cpp(11) : error C3861: 'isalnum': 識別子が見つかりませんでした
1>.\11.cpp(11) : error C3861: 'exit': 識別子が見つかりませんでした
1>.\11.cpp(14) : error C2065: 'reutrn' : 定義されていない識別子です。
1>.\11.cpp(14) : error C2143: 構文エラー : ';' が '定数' の前にありません。

講義で習ってないものばかりで・・・。
>>108は一体?

問4>>110を実行すると
1>.\11.cpp(12) : error C2668: 'sqrt' : オーバーロード関数の呼び出しを解決することができません。
1> D:\c++\VC\include\math.h(581): 'long double sqrt(long double)' の可能性があります。
1> D:\c++\VC\include\math.h(533): または 'float sqrt(float)'
1> D:\c++\VC\include\math.h(128): または 'double sqrt(double)'
1> 引数リスト '(int)' を一致させようとしているとき
1>.\11.cpp(13) : error C2668: 'sqrt' : オーバーロード関数の呼び出しを解決することができません。
1> D:\c++\VC\include\math.h(581): 'long double sqrt(long double)' の可能性があります。
1> D:\c++\VC\include\math.h(533): または 'float sqrt(float)'
1> D:\c++\VC\include\math.h(128): または 'double sqrt(double)'
1> 引数リスト '(int)' を一致させようとしているとき

126 名前:107 mailto:sage [2009/02/02(月) 01:10:16 ]
ヘッダ自分で調べるくらいできるだろう。
strlen , exit , isupper , islower , isalnum ググれ。
returnのタイプミスはすまないが、気付かない方も考えてない証拠かと。
return 0; を 「reutrn 0;」と書けば、reutrnを変数などの識別詞とみなすから
「INTMAX 0;」とか「1 0;」と同等に扱われる。
returnに直せば問題解消。無意味だが「reutrn; 0;」とすれば、警告は片方減る。

127 名前:110 mailto:sage [2009/02/02(月) 01:15:20 ]
>>125
VCでビルドしなかったのは俺のミスだ
sqrt(D)をsqrt((double)D)に直してくれ

128 名前:デフォルトの名無しさん [2009/02/02(月) 01:19:33 ]
>>126
仰るとおりです。申し訳ありません。
>>127
ありがとうございます
できました!

129 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 01:24:31 ]
>>125
>>108>>107の修正分を書いてる。
if( !isupper(user_name[0]) && !islower(user_name[0] ) {

if( !isalpha(user_name[0]) ) {
にする。
一行しかないものは削除

130 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 03:08:57 ]
>>117
関数の引数を↓のようにして(muは平均sigmaは標準偏差)
double p_nor(double z, double mu, double sigma)

変数を宣言しているすぐ下に
z = (z-mu)/sigma;
を追加すればおk



131 名前:116 mailto:sage [2009/02/02(月) 03:27:12 ]
>>130
できました!
こんな夜中にありがとうございます!

t = p = z * exp(-0.5 * z2) / (sqrt(2 * PI) * sigma);
のように、ここにもsigmaをかけなければいけないと思ってて
3日間ほどずっと悩んでました。

ほんとありがとうございます!

132 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 06:14:06 ]
fprintfとfscanfを同時に使用する場合、fopenのモードは何にすれば良いのでしょうか?

当方初心者でかなり無知ですがよろしくおねがいします。

133 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 06:55:57 ]
自己解決したすまね。
fopenを別々ですね。

134 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 10:57:09 ]
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8801.txt
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C++
[4] 期限: 2009年02月4日 まで
[5] その他の制限:

C言語の宿題だったのでお願いしました。
他の方と系統は違いますが、よろしくおねがいします。

135 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 11:47:57 ]
フローチャートくらい・・・
って思ってしまう俺は疲れてるのかな。

136 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 11:49:01 ]
疲れているなら、風呂に入っちゃ〜

137 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 11:50:34 ]
一緒に入りませんか?

138 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 12:07:40 ]
おれバイト&社会人でプログラム8年くらいやってるんだけど
フローチャートって使ったことない。使うもんなの?

139 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 12:09:11 ]
>>133
ふつうは "r+" とか "w+" だな
同時と言っても順序・タイミング考えないとぐちゃぐちゃになってしまうが

140 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 12:09:31 ]
>>138
今はどうか知らんけど、パチンコやパチスロのソフトは認可通すのに必須だとか?



141 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 12:16:55 ]
>>138
使う場合もあるしない場合もあるけど
ISOなんちゃらの監査の時に資料がいるので一応作っている

142 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 12:39:06 ]
>>140-141
そういう使い方なのか・・・

フローチャート書けるってことは、論理がわかってるってことだから
結局同じ手間でソースかけるような気がするんだよね。
だからフローチャートの必要性がわからんかった。

143 名前:デフォルトの名無しさん [2009/02/02(月) 13:30:04 ]
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8800.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual Studio
 [3.3] 言語: C言語
[4] 期限: ([2009年02月3日 23:00まで]
[5] その他の制限:


144 名前:デフォルトの名無しさん [2009/02/02(月) 13:47:15 ]
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&リンク):ttp://beatguiter.xxxxxxxx.jp/text.html
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: ([2009年2月2日0:00まで]
[5] その他の制限: 特にないが構造体とファイル処理まで習いました。

145 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 14:10:00 ]
[1] 授業単元: 人工知能演習
[2] 問題文(含コード&リンク):
Hopfieldネットワークの連想う記憶に関する以下の2つの課題を行いなさい。
Hopfieldネットワークとしては、ニューロン数N=63のものを考える。また記憶さ
せるパターンは、numbers.txtにある、0〜9までの数字のイメージをもちいる。
課題→kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8802.txt
numbers.txt→kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8803.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 2月4日23:59まで
[5] その他の制限: 特になし

146 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 14:21:34 ]
>>145 追記です

よろしくお願いします。助けてください。

147 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 14:43:29 ]
>>144 問1(exam01)を気まぐれにソースかいてみた。パーツに分けて書いた。

int main(void){
int Ary[5],i;
int Sum,Max,Min;
for(i=0;i<5;i++){ // 入力部
printf("Input Data Ary[%d] ?? ",i);
scanf("%d",Ary+i);
}
for(i=Sum=0;i<5;i++){ // 最大値計算部
Sum += Ary[i];
}
Max = Min = Ary[0]; // 0個目までの最小値最大値
for(i=1;i<5;i++){ // 1〜4個目までの最小値最大値
if(Ary[i]>Max) Max = Ary[i];
if(Ary[i]<Min) Min = Ary[i];
}
// 結果出力
printf("\t合計値 = %5d (Sum)\n",Sum);
printf("\t最小値 = %5d (Min), 最大値 = %5d (Max)\n",Min,Max);
printf("逆順:");
for(i=4;i>=0;i--){ // 逆順(forのデクリメント使用)
printf("%+5d ",Ary[i]); // インクリメントが良ければ書き直してくれ
}
return 0;
}

148 名前:デフォルトの名無しさん [2009/02/02(月) 15:17:00 ]
>>147
課題1のすっごいわかりやすかったです!!!
ありがとうございます、助かりました!!!

@課題2・3誰か助けてください orz


149 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 15:47:11 ]
>>144,148
課題2
#include<stdio.h>
void put_n(char c,int n){
while(n--)printf("%c",c);
printf("\n");
}
int main(void){
int i,n;
scanf("%d",&n);
while(n<=0){
printf("正の整数を入力してください。\n");
scanf("%d",&n);
}
for(i=1;i<=n;i++)put_n('*',i);
printf("\n");
for(i=n;i;i--)put_n('*',i);
return 0;
}

150 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 16:24:03 ]
課題3.コメントアウトつけなかったけど、ま分かるだろう。
#include <stdio.h>
#include <string.h>

int count_char(const char* s, char c){
int i,length,count=0;
length = strlen(s)-1;
for(i=0;i<length;i++) if( s[i] == c) count++;
return count;
}

int main(void){
int Size,i,tmpCount;
char strBuff[5][256];

for(i=0;i<5;i++){
printf("Input String (%d) ?? ",i);
scanf("%s",strBuff[i]);
}

for(i=0;i<5;i++){
tmpCount = count_char(strBuff[i],'a');
if(tmpCount == 0) continue;
printf("文字列[%s]に含まれる'a'の個数は%2dです\n",strBuff[i],tmpCount);
}
return 0;
}



151 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 16:25:28 ]
>>149
課題提出に問題ないと思うけど
問題文の解釈は自分ではこうなるけど、、、
while(n<=0){
printf("Input n ?? ");
scanf("%d",&n);
if(n>0) break;
printf("正の整数を入力してください。\n"); //問題文から警告と読み取るとこの位置
}
for文と条件演算子使うと1行で(簡単なんだか難解なんだか)
// for(Size=0;Size<1;Size<1?puts("正の値を入力してください"):0 ) scanf("%d",&Size);



152 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 16:37:51 ]
>>151
scanf("%d",&n);
while(n<=0){
printf("正の整数を入力してください。\n");
scanf("%d",&n);
}

入力部はこれでひと塊なんだ

153 名前:デフォルトの名無しさん [2009/02/02(月) 16:48:57 ]
>>144 です

>>150 を試してみましたが
色々入力してみて結果をみると
a が含まれてるのに表示されないのがあります
どう改善すればいいでしょうか;;;

154 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 16:51:16 ]
>>153
fgets を使う

155 名前:デフォルトの名無しさん [2009/02/02(月) 17:03:33 ]
>>154
fgets って言うのは習ってないので
どこに組み込めばいいか分からないです…。

156 名前:150-151 mailto:sage [2009/02/02(月) 17:11:59 ]
>>152
自分でコンパイルしてなかった。すまん。

>>153>>155
strlenが改行コード含むと思ってプログラムしてたから、自作関数の-1を消してもらえば大丈夫だと思う。

157 名前:デフォルトの名無しさん [2009/02/02(月) 17:14:29 ]
>>156
-1を消したらうまくできました!ありがとうございます^^

>>147,149,150,151,152,154,156
いい人が沢山居て本当に助かりました☆
皆さんありがとうございました!!!

158 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 18:50:58 ]
>>143
読んでないけど、>>115で不満なのか?


159 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 20:53:12 ]
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8804.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++Compiler 5.5
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語
[4] 期限: 2月5日まで
[5] その他の制限:C言語は一通り習ってます。

(1)がさっぱりわかりません・・・・。よろしくお願いします。

160 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:01:55 ]
(x^n) mod m



161 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:04:48 ]
>>160
はええな
マジで?
おれより速い奴がいるなんて興奮して勃起しちゃった

162 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:10:20 ]
>>160
すごいですね!ありがとうございます。

163 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:20:28 ]
>>160
質問者じゃないんだけど
y=1;z=x;
for(i=n;i>0;i>>=1){  ←i>>=1これどういう意味ですか?
if(i%2) y=(y*z)%m;  ←これなんでiが偶数のときは処理しないんですか?
z=(z*z)%m;
}
return y;

164 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:31:18 ]
>>163
www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/BackGround/power.html

165 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:36:58 ]
>>163
>for(i=n;i>0;i>>=1){  ←i>>=1これどういう意味ですか?
iを右に一つシフトした結果をiに代入する。
結果、iが二分の一になる。


166 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:38:49 ]
>>165
>結果、iが二分の一になる。
端数切捨てね。
5(101)→2(10)

167 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:01:27 ]
[1] 授業単元:DirectX研究2
[2] 問題文(含コード&リンク):
サイコロを転がして目を決める。
 ・テーブルとサイコロを作成する。
 ・キー操作でサイコロを投げ下ろすように振る。
 ・落下してきて,1つの目を上にして止まる。
 ・何度でも遊べる

 ◎テーブルにサイコロの影がある
 ◎回転しながら落下してくる
 ◎自由な方向から見ることができる
 ◎テーブルの上でサイコロは跳ね,転がる。
 ◎サイコロとして正しい
pub.idisk-just.com/fview/_tILCoWWjdmUjpPFJTUxmAq6FeoO_tXOymM-2i9jWWI5H3mCxm9x4ARZUBR0TsUi
を参考にしてよい。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC8 or VC9
 [3.3] 言語:C/C++どちらでも可
[4] 期限: 2月10日まで
[5] その他の制限:DirectXの課題ですがよろしくお願いいたします。

168 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:37:41 ]
ここって宿題じゃなくて単発の質問はいいのかな?

169 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:41:33 ]
スレを勃てるまでもないC/C++の質問はここで 7
pc11.2ch.net/test/read.cgi/tech/1232983248/

170 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:41:35 ]
>>168
答えはNO
スレ違い



171 名前:デフォルトの名無しさん [2009/02/02(月) 22:43:50 ]
>>169-170
こっちか。ありがとう

172 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:48:04 ]
内容:[1] 授業単元: プログラミング
[2] 問題文:Visual c++を使って大富豪を作りなさい。
      ルールは、8切りのみです。ペア、階段等は無しにします。 CPUは1名とします。
カード枚数は10枚ずつで、ジョーカーは無しです。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:Visual c++
[4] 期限: できれば早めに・・・・
[5] その他の制限: まだ基礎段階なので、なるべく簡単なプログラムがいいです。         画像の取り込みとかはせずに、文章で表示すればいいらしいです。 Visual c++がよくわからないので、よろしくお願いします

173 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:49:49 ]
>>166
スレ違いなのに質問に答えてくれてありがとうございます

174 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:14:27 ]
>>172
CPUとの1対1でいいのか?
ペアなしっていうのは、常に1枚ずつしかカード出せないってことでいい?

ていうかCPUの思考ルーチン作るのって基礎段階を大幅に超える気がするんだが


175 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:21:42 ]
どなたか>>134をお願いいたします。

176 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:29:56 ]
>>175
お願いされるWORDが無い

177 名前:105 mailto:sage [2009/02/02(月) 23:33:50 ]
問2をここまでやったのですが、どうも何かが違うようで7桁の数字を入力しても学番は7桁〜のほうがでてしまうんです。

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

void main(){

char x[100];
int y,z;

printf("学番を入力:");
gets(x);

y=strlen(x);
     z=atoi(x);

if(y==7 && z==7){
printf("g%s@yahho\n",x);
}
else{
printf("学番は7桁の数字で入力して下さい\n");
}


}


どこがいけないのでしょうか?
何度も住みませんが、よろしくお願いします。

178 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:37:27 ]
>>175
バブルソート フローチャート
でググれ

179 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:40:46 ]
>>177
Z==7がまずい
というかそれ、問3じゃないのか?

180 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:44:31 ]
>>179
あ、ごめんなさい。問3でした

z==7がいけない、ということは
y==7 か z==7  どちらかしか使用してはいけないということなのでしょうか
文字数が7、尚且つ数字であるとき、という風にしたいのですが・・・



181 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:57:45 ]
>>172
仕様を、常に自分からで敵は出せる最小を必ず出す、とすれば楽になる。
が、10行20行で分かりやすく纏めるのやファイルうpはめんどい。

流れの案だけ、書いとく。

全体 [シャッフル]->[配布]->[スタート(自分の番)]->[ループ&終了判定]->[終了時コメント]->end
ループ部分
自分の番:自分のカードを printf("%d:%d ",i%10,ME[i]);とかで表示
scanfでキーボードの1,2,3,...,9,0を選択。フラグ処理などしないと、同じカード捨てる事になる。
相手の番:場に出ている番号(初めは0)より大きい最小のカードのインデックスを計算
あればそのインデックス。無ければ自分の番に。
細かいシステム管理(枚数チェックとか、場のカードの数・切るとか)も必要だし、
[シャッフル]7行 [配布]2〜5行 [ループ&終了判定]30行位[終了時コメント]3行
整理して、こんなもんかな?

182 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:57:45 ]
>>180
言ってることとやってることがめちゃくちゃだぞ

数字かどうか判断するにはxに格納された文字が
'0'と'9'の間にあるかどうかを判断すべき

それと宿題程度ならいいと思うが
getsはなるべく使わない方がいい

183 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:00:57 ]
>>182
よく使ってるscanfも曲者と聞きますし、fgets&sscanfが良いと聞きますが
宿題レベルでもでしょうか?実感ないのですが。

184 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:01:39 ]
z = atoi(x) だから
z==7だと zが7かどうかを判定してることになってしまう。
ほしいのは7桁かどうかだから、これはまずい。

あとはzが7桁の数字かどうか判定すればいいだけだよ。

それとgets()は使わない方がいい。
この辺参考に
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/getc.3.html



185 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:05:49 ]
>>183
オーバーフローするような値を
敢えて入力するやつはいないと思うから
宿題レベルでとやかく言われることはないんじゃね?
でもリスクは少なくしておくべき

186 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:05:57 ]
y=strlen(x);

bool b = true;
int i;
for( i = 0; i < 7; ++i ){
if( x[i] < '0' || x[i] > '9' ) b = false;
}
if(y==7 && b ){
printf("g%s@yahho\n",x);
}
else{
printf("学番は7桁の数字で入力して下さい\n");
}

187 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:06:50 ]
>>174
出せるカードの中で一番弱いカードを出す程度で十分。
商用ゲームですらこれのことあるし。

188 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:07:33 ]
>>174
常に1枚だすので大丈夫です。よろしくお願いします。

189 名前:デフォルトの名無しさん [2009/02/03(火) 00:17:01 ]
C言語、プログラミング基礎の問題です。

整数型変数xに値16を代入文で直接代入する代わりに、ポインタ変数を用いて
間接的に行う方法を与えよ。

とても簡単だと思うのですがわからなくて。。。
お願いします

190 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:21:08 ]
>>189
int x;
int *px;
px = &x;
*px = 16;

こういうことかな?



191 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:23:53 ]
もしくは px[0] = 16 も。ポインタ理解できると→*(&px[1]-1)=16 でもできる事がわかる。

192 名前:デフォルトの名無しさん [2009/02/03(火) 00:24:34 ]
>>182
>>184
ありがとうございます。おかげさまで無事できました!

授業ではgets()しか習っていませんでしたが使わないほうがいいのですね。勉強になります。

193 名前:181 mailto:sage [2009/02/03(火) 00:40:07 ]
シャッフルだけ。
大富豪以外にもカードゲームボードゲームでも同じ事するはずだから、良いソース持ってる人いるだろうケド
山のシャッフルは、短絡的に実装しました。
バグさえなければ、大雑把にCARD_NUMの2乗オーダーの計算だと思うので
10000枚とかでなければ気にする事無いと思います。

#define CARD_NUM (13*4)
int main(){
int cards[CARD_NUM];// カード番号とカードの数字を対応
int yama[CARD_NUM];// カードをシャッフルして代入
int i,j,ran;
srand((unsigned) time(NULL));

for(i=0;i<CARD_NUM;i++){ cards[i]=i; yama[i]=-1; }
for(i=0;i<CARD_NUM;i++){
ran = rand()%(CARD_NUM);
if(yama[ran]==-1) yama[ran]=i; //トランプの数字にするには yama[ran] = i/4;
else i--; //やり直し
}
/* シャッフル検査 */
for(i=0;i<4;i++){
for(j=0;j<13;j++) printf("%2d/",yama[i*13+j]);
puts("");
}
return 0;
}

194 名前:デフォルトの名無しさん [2009/02/03(火) 00:49:48 ]
>>190 >>191
ありがとうございます!!

あと、while(条件){作業}
を、if文とdo-while文を使って表現すると、どうなるのでしょうか・・・

195 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:57:24 ]
マルチポスト

224 名前:デフォルトの名無しさん[] 投稿日:2009/02/02(月) 22:46:51
while文をif文とdo-while文を使って表現せよ

という問題なんですが…ifも使わなきゃいけないというところがわかりません
どうすればよいのですか??


196 名前:デフォルトの名無しさん [2009/02/03(火) 01:00:04 ]
>>195
イタチといわれたので

197 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:02:24 ]
それでも前のスレで答えてくれている人がいるだろ。
チェックしてないのかよ。

198 名前:デフォルトの名無しさん [2009/02/03(火) 01:03:38 ]
見たけどあってるかわからなかったんで

199 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:05:39 ]
じゃあこのスレで答えても同じことになるだろ。

200 名前:デフォルトの名無しさん [2009/02/03(火) 01:08:58 ]
答え2つあったんですけど、どっちがあってるかわかりますか
このスレは答え教えてくれるんで



201 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:15:05 ]
じゃあもう一個増やしてやるよ。

do{
if(!x){ break; }
/*処理*/
}while(x);



202 名前:デフォルトの名無しさん [2009/02/03(火) 01:27:04 ]
暇人・・・ww

203 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:55:24 ]
do {
if(!x) break;
/*処理*/
}while(1);
でもよくね?

204 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:58:34 ]
do {
loop:
    if (!x)
        break;
    /* 処理 */
    goto loop;
} while (0);

205 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:59:27 ]
あ〜あ夜は暇だなっと。マジレスでもするか
while(cnd){
/* ○処理 */
}
if(cnd?"GO"[0|0]:0x0)do{
/* ○処理 */
}while("yoru"['-'-'-']?cnd:69);

206 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 06:08:15 ]
[1] 授業単元:(復習課題) 分岐 繰り返し 一次元配列 2重ループ 2次元配列 文字列(これらどれかを使って解け)
[2] www.pref.fukushima.jp/pc-concours/2008/03/pdf/2007honsen.pdf 問6 問7
[3] 環境
 [3.1] OS:Windows
 [3.2]visual C++
 [3.3] 言語:C++
[4] 期限: 2009年2月4日まで
[5] main関数を使いそれ以外にもユーザ定義関数を1つ以上作成すること。

入力はscanf 出力はprintfでお願いします。
>>46の時は、ほんと助かりました。
今回もお願いします。



207 名前:デフォルトの名無しさん [2009/02/03(火) 06:57:53 ]
>>158
実行できなかったもので・・・

208 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 07:38:52 ]
>>206
問6
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8805.txt

209 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 07:48:04 ]
>>208
>入力はscanf 出力はprintfでお願いします。
ってかいてあるべ
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8806.txt

210 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 08:16:43 ]
>>206
問7
#include <stdio.h>
#define COUNT_OHAJIKI 32
#define MAX_JIRO 25
int main(){
int n;
scanf("%d",&n);
while(n!=0){
int i,rest=COUNT_OHAJIKI,jiro[MAX_JIRO];
for(i=0;i<n;i++)scanf("%d", jiro+i);
i=0;
while(rest!=0){
rest-=(rest-1)%5;
printf("%d\n", rest);
rest-=jiro[i];
if(rest<0)rest=0;
printf("%d\n", rest);
i=(i+1)%n;
}
scanf("%d",&n);
}
return 0;
}



211 名前:デフォルトの名無しさん [2009/02/03(火) 10:13:29 ]
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
   ・2つの分数の分子と分母を入力すると,それらの和・差・積・商を
    出力する.データは構造体で表現すること.
   ・分数計算では通分・約分には最大公約数が必要になる.通分には分母の最小公倍数が,
約分には最第公約数が必要である.したがってこれらを計算する関数をそれぞれ作る.
   ・最大公約数を求めるには,次のアルゴリズムを使うとよい(ユークリッドの互除法).
    @ mをnで割る (ただしm>n).
    A @の割る数を@の余りで割る.
    B Aの割る数をAの余りで割る.
    C 以下同様に,余りが0になるまで繰り返し,そのときの「割る数」が最大公約数になる.
   ・2つの数,m,nの最小公倍数は,m*n/(mとnの最大公約数)で求めることができる.


   (実行例)
    1つめの分数の分子・分母の入力―>3  4
    2つめの分数の分子・分母の入力―>1  6
    和:11 / 12
    差: 7 / 12
    積: 1 / 8
    商: 9 / 2

[3] 環境
 [3.1] OS: Windows vista
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限: 今週中ぐらい
[5] その他の制限: 繰り返し文、条件判断文、構造体を勉強しました。
初心者なので、初心者にもわかるようなプログラムをお願いします。

212 名前:デフォルトの名無しさん [2009/02/03(火) 11:25:26 ]
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8807.txt
[3] 環境
 [3.1] OS: Windows Vista 
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月04日17:00まで]
[5] その他の制限:

213 名前:デフォルトの名無しさん [2009/02/03(火) 11:28:51 ]
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8808.txt
[3] 環境
 [3.1] OS: Windows Vista 
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月04日17:00まで]
[5] その他の制限:

214 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 11:36:27 ]
>>149
これ見てから考えな。あと、これくらい一つのファイルにまとめろ。

215 名前:デフォルトの名無しさん [2009/02/03(火) 11:40:08 ]
>>212
#include <stdio.h>
int main(void) {
int i, j, n;
printf("段数を入力してください: ");
scanf("%d", &n);
for(i = 0; i < n; i++) {
for(j = 0; j < i + 1; j++) printf("*");
printf("\n");
}
return 0;
}

216 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 11:41:04 ]
>>211
構造体はどういう形で作ればいいんだ?
指定なし?
なしなら授業で作った構造体を1つ晒してくれ

217 名前:デフォルトの名無しさん [2009/02/03(火) 11:42:41 ]
>>213
#include <stdio.h>
int main(void) {
int i, j, n;
printf("段数を入力してください: ");
scanf("%d", &n);
for(i = 0; i < n; i++) {
for(j = 0; j < i; j++) printf(" ");
for(j = 0; j < (n - i) * 2 - 1; j++) printf("*");
printf("\n");
}
return 0;
}

218 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 12:48:06 ]
>>211
どう?
#include <stdio.h>
typedef struct bunsu{int bunshi,bunbo;} BUNSU;
int main(){
BUNSU bunsu1,bunsu2;
printf("1つめの分数の分子・分母の入力->\n");scanf("%d%d",&(bunsu1.bunshi),&(bunsu1.bunbo));
printf("2つめの分数の分子・分母の入力->\n");scanf("%d%d",&(bunsu2.bunshi),&(bunsu2.bunbo));
int bunbo=bunsu1.bunbo*bunsu2.bunbo;int bunshi=bunsu1.bunshi*bunsu2.bunbo+bunsu2.bunshi*bunsu1.bunbo;
int GCD = gcd(bunshi,bunbo);
printf("和:%d / %d\n",bunshi/GCD,bunbo/GCD);
//
bunshi=bunshi=bunsu1.bunshi*bunsu2.bunbo-bunsu2.bunshi*bunsu1.bunbo;
GCD = gcd(bunshi,bunbo);
printf("差:%d / %d\n",bunshi/GCD,bunbo/GCD);
//
bunshi=bunshi=bunsu1.bunshi*bunsu2.bunshi;
GCD = gcd(bunshi,bunbo);
printf("積:%d / %d\n",bunshi/GCD,bunbo/GCD);
//
bunshi=bunshi=bunsu1.bunshi*bunsu2.bunbo;
bunbo=bunsu1.bunbo*bunsu2.bunshi;
GCD = gcd(bunshi,bunbo);
printf("商:%d / %d\n",bunshi/GCD,bunbo/GCD);
return 0;
}
int gcd(int m,int n){
if(m<n){int temp=m;m=n; n=temp;}
int amari;
while((amari=m%n)!=0){m=n;n=amari;}
return n;
}

219 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:18:18 ]
全部bunではじめるなよ。 bunsu とbunsu1じゃ大違いだろ。int int1;と同じ。
編集してみた。
#include <stdio.h>
typedef struct bunsu{int son,mom;} BUNSU;

int main(){
BUNSU A,B;
int new_mom,GCD;
printf("1つめの分数の分子・分母の入力-> \t"); scanf("%d %d",&(A.son), &(A.mom));
printf("2つめの分数の分子・分母の入力-> \t"); scanf("%d %d",&(B.son), &(B.mom));

GCD = gcd(A.mom,B,mom); new_mom = (A.mom*B.mom)/GCD; // 通分
GCD = gcd(new_mom,A.son+B.son);
printf("和:%d / %d\n",(A.son+B.son)/GCD,new_mom/GCD);
GCD = gcd(new_mom,A.son-B.son);
printf("差:%d / %d\n",(A.son-B.son)/GCD,new_mom/GCD);
GCD = gcd(A.son*B.son,A.mom*B.mom);
printf("積:%d / %d\n",(A.son*B.son)/GCD,(A.mom*B.mom)/GCD);
GCD = gcd(A.son*B.mom,A.mom*B.son);
printf("商:%d / %d\n",(A.son*B.mom)/GCD,(A.mom*B.son)/GCD);
return 0;
}
int gcd(int m,int n){
if(m<n){int temp=m;m=n; n=temp;}
int amari;
while((amari=m%n)!=0){m=n;n=amari;}
return n;

220 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:28:11 ]
>>219
そんなのを気にするくらいなら
BUNSU bunsu_add(BUNSU a, BUNSU b);
的なのを作ったほうがよくないか?



221 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:32:37 ]
>>220
ツッコミドコロは、そこじゃないな。

222 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:39:36 ]
>>218をbun -> "空白"にWORDで置換してみると
文字数 896 -> 680。実にソースの24%がbun成分です。もはやネタソースだろ。

223 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:39:52 ]
大文字の変数とかやめてよ。
しかも一文字

224 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:47:10 ]
分子が息子で分母がお母さんかw

225 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:49:17 ]
>>222
一文字変数にしてご満悦って、70年代の世界からでも来たのかよ?

226 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:50:00 ]
>>219
通分が分からないって、ありえないだろ。
いじらなくても変数名だけ変えられたし。

227 名前:219 mailto:sage [2009/02/03(火) 13:50:29 ]
小さいプログラムや、ローカルな変数の場合、無駄に長い変数は望ましくないと考えるが。
a,c,i,xは基本の型で、行列や構造体等A,Ary,Array場合によるが大文字も使う。

特にVBとか別言語触れてからは、使い分けるようになった。
>>224 ソースコードで変な想像したら負け組(new_mom?A.mom*B.son:A.son*B.momとか)

228 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:50:52 ]
>>227
ばかか

229 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:52:31 ]
>>227
バカだから、テストどころかコンパイルもしないで貼ってみたわけね・・・

230 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:52:55 ]
>>227
小学校からやり直せよ



231 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:54:02 ]
>>227
そもそも>>219は計算が間違ってるwww

232 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 14:09:51 ]
計算しなければどうということはない

233 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 14:18:21 ]
[1] 授業単元: アルゴリズムと数値計算
[2] ニュートン法とオイラー法で√2の近似値を計算するプログラムを作れ
ただし、計算は50ステップ行い、それぞれの初期値とsqrt(2)との差を表示する事。
初期値は各々が定めてよい
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:VC2005EE
 [3.3] 言語:C
[4] 期限:09/02/04迄
[5] その他の制限:
文字表示・繰り返し文・条件判断とオイラー法の計算は分かります


234 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 14:58:41 ]
>>233
オイラー法ってこんなか?
#include <stdio.h>
#include <math.h>
double newton(){
double x=1.0;
int i;
for(i=0;i<50;i++){
x=x-(x*x-2)/(2*x);
}
return x;
}
double euler(){
int n=50;
double x=1.0,h=(double)(2-1)/n;
int i;
for(i=0;i<n;i++){
x=x+h/(2*x);
}
return x;
}
int main(){
double temp=newton();
printf("sqrt(2):%f,newton:%f,差:%f\n",sqrt(2),temp,sqrt(2)-temp);
temp=euler();
printf("sqrt(2):%f,euler:%f,差:%f\n",sqrt(2),temp,sqrt(2)-temp);
return 0;
}


235 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 15:19:50 ]
>>227
VBに触れたから呪われたんだな

236 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 16:04:45 ]
>>234
ありがとうございます!
for文の中身1行で表せるんですね。
初期値表示と(double)(2-1)を2.0-1.0など軽く置き換えて完成しました。

237 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 19:48:11 ]
>>193
O(N^2)じゃなくO(NlgN)だ

238 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 20:41:50 ]
だいたい、プログラム入れてみるとxln(x)が定数なしで自己相関関数に一致してるくらいだな。
つまり、O(NlnN)だな。でも、NlogNだと思ってて、N^2だったってよりよくない?

239 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 20:51:59 ]
うん。

240 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:18:36 ]
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
 角度はラジアン単位(rad),度単位(degree)【°】で表される.さらに 度単位は 32.4°と10進小数表示する場合と
32度24分と度分秒で表示する場合がある.(60秒で1分, 60分で1度)

@2つの角度(度単位)を10進小数点2桁 でキーボードから入力し(例  69.21° と 33.73° ) 
 それらを度分秒単位で 表示させるプログラムを作成しなさい.

Aさらに度分秒単位で表示された2つの角度の差を求め,度分秒単位で表示しなさい.
 計算は度分秒単位のまま引き算すること(60進法の引き算アルゴリズムを作成すること).

[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2009年2月4日 13:00
[5] その他の制限: よろしくお願いします



241 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:25:50 ]
キーボードから入力し(例  69.21° と 33.73° )
2バイト文字か?まずその入力ができるかが問題だ。
Alt+半角で全角打てるけど、(例 69.21 と 33.73)の間違えだと言ってくれ。

242 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:37:58 ]
>>241
すみません
半角です

243 名前:デフォルトの名無しさん [2009/02/03(火) 22:03:28 ]
>>211のものですが、>>219をコンパイルしたら
和と差が計算できなかったのですが、どうすれば
いいでしょうか?

どなたか教えてください。

244 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:18:25 ]
A.son *= B.mom; B.son *= A.mom; A.mom=B.mom=(A.mom*B.mom); // 通分(約分せず)
GCD = gcd(A.mom,A.son+B.son);
printf("和:%d / %d\n",(A.son+B.son)/GCD,A.mom/GCD);
GCD = gcd(A.mom,A.son-B.son);
printf("差:%d / %d\n",(A.son-B.son)/GCD,A.mom/GCD);

245 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:23:43 ]
分母: mom
分子: son
っていうネーミングセンスが素敵だ

246 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:36:37 ]
辞書片手に英語にしまくったら単語の意味を忘れて自分で読めないというのは聞かなくもないけれど、
日本語の一部を切り出して英語にするっていうのは新しい。

247 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:40:47 ]
>>240
誤差がぁぁぁ
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8809.c

248 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:42:30 ]
>>240
#include<stdio.h>
#include<math.h>
typedef struct { int deg, min, sec; } Degree;
void rad2deg(Degree *pdeg, double rad) {
pdeg->deg = (int)rad;
rad = (fabs(rad) - fabs(pdeg->deg)) * 60;
pdeg->min = (int)rad;
rad = (rad - pdeg->min) * 60;
pdeg->sec = (int)rad;
}
void print_deg(const Degree *pdeg) {
printf("%d度%02d分%02d秒\n", pdeg->deg, pdeg->min, pdeg->sec);
}
void degsub(Degree *pdiff, const Degree *pdeg1, const Degree *pdeg2) {
pdiff->sec = pdeg1->sec - pdeg2->sec;
pdiff->min = pdeg1->min - pdeg2->min;
pdiff->deg = pdeg1->deg - pdeg2->deg;
if (pdiff->sec < 0) { pdiff->sec += 60; pdiff->min --; }
if (pdiff->min < 0) { pdiff->min += 60; pdiff->deg --; }
}
int main() {
double rad1, rad2;
Degree deg1, deg2, degdiff;
printf("radian1="); scanf("%lf", &rad1);
printf("radian2="); scanf("%lf", &rad2);
rad2deg(°1, rad1); printf("degree1="); print_deg(°1);
rad2deg(°2, rad2); printf("degree2="); print_deg(°2);
degsub(°diff, °1, °2); printf("degree1-degree2="); print_deg(°diff);
return 0;
}

249 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:55:09 ]
>>240の人気に嫉妬
#include <stdio.h>
#include <math.h>
struct ds_t { int d; int m; int s;};
struct ds_t dec2ds(double dd){
  struct ds_t ds;
  ds.d = floor(dd);
  ds.m = floor(60*(dd - ds.d) + 0.5/60);
  ds.s = floor(3600*(dd - ds.d) - 60*ds.m + 0.5);
  return ds;
}
void print_ds(struct ds_t *ds){
  printf("%d.%d\'%d\"\n", ds->d, ds->m, ds->s);
}
struct ds_t sub_ds(struct ds_t *ds1, struct ds_t *ds2){
  struct ds_t ds3;
  ds3.d = ds1->d - ds2->d;
  ds3.m = ds1->m - ds2->m;
  ds3.s = ds1->s - ds2->s;
  if(ds3.s < 0) ds3.s += 60, ds3.m--;
  if(ds3.m < 0) ds3.m += 60, ds3.d--;
  return ds3;
}
int main(void){
  double dd1, dd2;
  struct ds_t ds1, ds2, ds3;
  scanf("%lf%lf", &dd1, &dd2);
  ds1 = dec2ds(dd1); ds2 = dec2ds(dd2);
  print_ds(&ds1); print_ds(&ds2);
  ds3 = sub_ds(&ds1, &ds2);
  return 0;
}

250 名前:248 mailto:sage [2009/02/03(火) 22:57:35 ]
degsubの符号の扱いが全然だめだった。>>248は取り下げます。



251 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:58:00 ]
>>243
そのコードはクズだ。捨てろ。

252 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:00:11 ]
[1] 授業単元:ループ
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8810.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2]コンパイラ名とバージョン:C++ Compiler 5.5/Turbo Debugger
 [3.3] 言語:C
[4] 期限:一ヶ月以内
[5] その他の制限:2重ループを使うらしいですが使わなくてもいいそうです。

253 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:01:15 ]
>>244
そこで上書きして残りの積と商をどうするツモリだ。

254 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:03:53 ]
>>253
分母と分子に同じ数掛けてるから大丈夫

255 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:16:22 ]
そうだよね。>>253は2/4拍子と3/6拍子の違いが分かってらっしゃる。
#include<stdio.h>
int main(){
int i,j,tmp,data[5+1];
for(i=0;i<10;i++){
printf("%d人目",i);
scanf("%d",&tmp);
data[tmp]++;
}
for(i=1;i<=5;i++){
printf("\n%d",i);
for(j=0;j<data[i];j++) printf("*");
}
return 0;
}

256 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:16:46 ]
どなたか>>134をお願いいたします。ググってもわかりません。。。

257 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:21:21 ]
>>256
一番上に書く名前が分かりません><

マジレスはお断りしておきます

258 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:23:35 ]
>>247
degree[i][1] = (int)((input[i] - (int)input[i]) * 10) * 6;
degree[i][2] = (int)((input[i] * 10 - (int)(input[i] * 10)) * 10) * 6;
この計算式は何なのか、後でAAで提出するように。


259 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:23:40 ]
5秒で答えにたどり着いたけど
134は馬鹿なの?死ぬの?

260 名前:240 mailto:sage [2009/02/03(火) 23:28:32 ]
>>247-249
ありがとうございました



261 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:34:09 ]
>>256
フローチャートは詳しくないが日本語にそれらしく訳してくと
開始
ファイルをfpiに読み込む
ファイルの先頭からデータ数をnへ代入
ループ iをn回 配列xのi番目にi番目のデータを代入
ループ iをn-1回 (中身jループ)
/* */ ループ jをi+1からnまで
/* */ /* */ 分岐 x[i]>x[j] --YES--> x[i]とx[j]を交換 -->jループへ
/* */ /* */ --NO-->jループへ
ループ iをn回 iとx[i]を表示
終了

262 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:50:17 ]
>>134
オフィスを入れてなかった。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8811.zip

263 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:55:15 ]
>>262
力作乙
だが、extention error だ
名前と実体が異なっている

264 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 00:01:47 ]
>>263
そんな突っ込みは想定していない。

OpenOfficeの操作覚えようかな……。

265 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 00:25:25 ]
>>252
#include <stdio.h>

int main(void)
{
int a[10], c[5], i, j;
for (i = 0; i < 9; ++i) scanf("%d,", &a[i]); scanf("%d", &a[9]);
for (i = 0; i < 5; ++i) c[i] = 0;
for (i = 0; i < 10; ++i) c[a[i] - 1]++;
for (i = 0; i < 5; ++i) {
printf("%d", 5 - i);
for (j = 0; j < c[4 - i]; ++j) printf("*");
printf("\n");
}
return 0;
}

266 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 00:56:37 ]
>>172
コンソールアプリでいいんだよね?
言語はCとC++どっち?

267 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 02:13:27 ]
>>266
>[5] その他の制限: まだ基礎段階なので、なるべく簡単なプログラムがいいです。         画像の取り込みとかはせずに、文章で表示すればいいらしいです。 Visual c++がよくわからないので、よろしくお願いします
C++のWindowアプリケーションを望んでいるようには見えない。
求めてるのは”なるべく簡単”でしょ。

268 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 14:27:20 ]
[1] 授業単元: プロムラミング演習2
[2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8813.txt
 [3.1] OS: Windows
 [3.3] 言語:C言語
[4] 期限:2月5日まで

[5] その他の制限:すみません自力ではわかりません.ご指導お願いします

269 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 14:46:26 ]
void bitpart(int x)
{
char str[33]="";
for(b=31;b>=0;b--){
sprintf(str,"%s%d",(x>>b)&1);
return str;
}
> jprintf(bit pattern=%s\n",bitpart(x,bit));
なんかちがう

270 名前:897です mailto:sage [2009/02/04(水) 14:51:10 ]
すみません...
打ち間違いでした
printf("bit pattern =%s\n", bitpart(x,bit));
です.すみません



271 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 14:51:44 ]
>>268
char*bitpart(int x,char *bit)
{
int b;
bit[32] = '\0';
for(b=31;b>=0;b--){
sprintf(&bit[31-b],"%d",(x>>b)&1);
}
return bit;
}

272 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 15:00:15 ]
>>271
早い返事ありがとうございます
助かりました

273 名前:897 mailto:sage [2009/02/04(水) 17:01:19 ]
[1] 授業単元: C言語
[2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8814.txt
 [3.1] OS: Windows
 [3.3] 言語:C言語
[4] 期限:2月5日まで

[5] その他:お願いします

274 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 17:17:20 ]
>>273
void insert(int num, struct node *p)
{
struct node *n;

while (p->next != NULL && p->next->key < num) {
p = p->next;
}

n = (struct node *)malloc(sizeof *n);
n->key = num;
n->next = p->next;
p->next = n;
}

275 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 17:27:54 ]
>>274
ありがとうございます!!
なんとかいけそうです

276 名前:デフォルトの名無しさん [2009/02/04(水) 17:46:14 ]
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8815.txt
[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月05日12:00まで]
[5] その他の制限:

よろしくお願いします。

277 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:01:53 ]
>>276
#include <stdio.h>

int main(void)
{
int kinshu[10] = { 10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1 };
int i, j, c, n;
printf("金額を入力してください: "); scanf("%d", &n);

for (i = 0; i < 10; ++i) {
for (c = 0; n / kinshu[i]; ++c) n -= kinshu[i];
printf("%5d円: %d枚\n", kinshu[i], c);
}
return 0;
}


278 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:10:45 ]
> for (c = 0; n / kinshu[i]; ++c) n -= kinshu[i];
c=n/kinshu[i]; n-= c*kinsyu[i];

279 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:37:30 ]
[1] 授業単元:数値解析
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8817.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.3] 言語: C
[4] 期限: 2009年02月05日まで
問題多いですがよろしくお願いします。

280 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:38:16 ]
[1] 授業単元: C言語
[2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8816.txt
 [3.3] 言語:C言語
[4] 期限:2月5日まで
[5] その他: 違うところで同様の質問をして,いろいろヒントをもらった
 のですが,いまいちわかりません.その時こちらを紹介されたので,
 どうかお願いします



281 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:52:39 ]
>>280
int pop(void)
{
struct node *n = TOP.next;

if (n == NULL) {
fprintf(stderr, "no stack\n");
return 0;
}
else {
int num = n->key;
TOP.next = n->next;
free(n);
return num;
}
}

int main(void)
{
TOP.next = NULL;

push(21);
push(42);

printf("%d\n", pop());
printf("%d\n", pop());

return 0;
}

282 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 19:29:50 ]
>>279
どんだけ丸投げだよ。

283 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 19:37:05 ]
丸投げスレなんだから当然だろ?


ってこれは・・・w

284 名前:280 mailto:sage [2009/02/04(水) 19:46:00 ]
>>281
ありがとうございます
助かりました!!

285 名前:Rm [2009/02/05(木) 00:09:41 ]
[1] 計算システム(C言語)
[2] N×Nの行列A,Bに大して、次のようなプログラムを作成せよ。
・A+B、A−B、A×Bを出力するプログラム

・Aの逆行列を出力するプログラム(ピボット選択法)

ただし
・Nはdefineで4と定義する。
・A,Bそれぞれの成分データはdouble型配列に保存する。
・行列A,Bの各成分のデータは時間に依存した種から与えられる疑似関数により自動生成する。

mathweb.sc.niigata-u.ac.jp/~yamada/system/wed/kadai.htm

実際ほかの課題もわかりません。1は出来ましたが。

[3] 環境
 [3.1] OS:Windows
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 5日


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



286 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 00:52:15 ]
>>273
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8819.txt

287 名前:280 です mailto:sage [2009/02/05(木) 02:14:54 ]
>>281 さんの方から解答をいただいたのですが
main関数の所がいまいちわかりません
できたらもう一度お願いします.

288 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 02:24:30 ]
>>287
わかりませんもなにも見たまんまpushしてpopしてるだけだと思うが
もう一度といわれてもこれ以外書きようがないと思うべ?
どこがどうわからないか考え直してきなさい

289 名前:280 です mailto:sage [2009/02/05(木) 02:39:14 ]
push(21);
push(42);
これがよくわかりません
コンパイルしてもこれしかでないのですが・・・

mainは、任意個数の数字を入力させてそれをpushし、
EOFになったら逆にpopで値を取り出して画面に表示する
みたいな感じにしたいのですが・・

290 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 02:57:53 ]
>>289
>pushとpopが正常に動作をしているか確かめられるプログラムを作成してください
といわれて>>289の下半分の内容を読み取れなんてエスパーじゃない限り無理
int main(void)
{
TOP.next = NULL;

int d;
while(scanf("%d", &d)!=EOF) push(d);
while(TOP.next) printf("%d\n", pop());
return 0;
}



291 名前:280 です mailto:sage [2009/02/05(木) 03:03:11 ]
>>290
言葉足らずですみません
夜遅くわざわざありがとうございます


292 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 03:06:14 ]
十分テストコードになってると思うんだけどな。

293 名前:デフォルトの名無しさん [2009/02/05(木) 03:23:22 ]
while(1)
{         
     wakeup;
     static int day;
     int time = wakeuptime();
     while(1)
     {
          2ch;
          if(time == Daytime())
          {
              lunch;
          };
          if(time == nighttime())
          {
              supper;
          };
          if( time == sleeptime();)
          {
              break;
          }
          time++;
     }
      day++;
     sleep;
}

こんな毎日、無限ループって怖いよな;;




294 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 03:48:10 ]
>>285
和、差、積のやつ
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8821.c

295 名前:285 [2009/02/05(木) 04:09:48 ]
>>294

ありがとうございます。よろしければ逆行列プログラムもお願いします。

296 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 04:54:22 ]
>>295
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8822.c

297 名前:285 [2009/02/05(木) 05:24:02 ]
>>296

このような時間帯にわざわざありがとうございます。
おかげ様で助かりました。

298 名前:279 mailto:sage [2009/02/05(木) 06:58:42 ]
>>282
>>283
確かにこれはひどいですよね…
1問でもいいのでお願いしたいです。
一応自分でもやっていますが、数学が苦手なもので…

299 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 12:42:16 ]
>>167です。
自己解決したので取り下げます。スレ汚し失礼しました。

300 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 13:13:46 ]
1] 授業単元: C言語
[2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8823.txt
 [3.1] OS: Windows
 [3.3] 言語:C言語
[4] 期限:2月6日まで

[5] その他:お願いします



301 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 14:25:46 ]
[1] 授業単元:C言語プログラミング
[2] 問題文:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8824.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:明日まで
[5] その他の制限:与えられたプログラムを改造(付け足し)する

302 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 15:16:54 ]
>>301
#include <stdio.h>

int main(void)
{
int i, j, c;
char seq[] = "tion";

i = 0;
while ((c = getchar()) != EOF) {
if (c == seq[i]) {
i++;
if (i == sizeof(seq) - 1) {
break;
}
}
else {
for (j = 0; j < i; j++) {
putchar(seq[j]);
}
i = 0;
putchar(c);
}
}

return 0;
}

303 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 15:18:39 ]
300 の問題って リダイレクトじゃだめなのか?

304 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 15:26:50 ]
>>300
#define INPUT_FILE_NAME "foo.in"
#define OUTPUT_FILE_NAME "bar.out"
int main(void)
{
struct student A[Nmax];
double avg=0;
int i;
FILE *fin, *fout;
fin = fopen(INPUT_FILE_NAME, "r");
if (fin == NULL) { perror(INPUT_FILE_NAME); return 1; }
for( i=0; i<Nmax; i++){
fscanf (fin, "%d %d %d %s", &A[i].sc1,&A[i].sc2,&A[i].sc3,A[i].name);
}
fclose(fin);
fout = fopen(OUTPUT_FILE_NAME, "w");
if (fout == NULL) { perror(OUTPUT_FILE_NAME); return 1; }
fprintf(fout, "Score Name\n");
fprintf(fout, "-------------------------------------------\n");
for(i = 0;i <Nmax; i++){
A[i].total =(A[i].sc1+A[i].sc2)*0.4+A[i].sc3;
A[i].res =(A[i].total>=60)?"A": "F";
avg += A[i].total;
fprintf(fout, "%6.1f %s %s\n", A[i].total,A[i].res, A[i].name);
}
fprintf(fout, "---------------------------------------------\n");
fprintf(fout, "%6.1f (Avg)\n",avg/Nmax);
fclose(fout);
return 0;
}

305 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 16:09:19 ]
>>302 "ttion"
>>301
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8825.txt

306 名前: ◆g8eVFLrbyk [2009/02/05(木) 16:49:09 ]
[1] 授業単元:C++言語プログラミング
[2] 問題文:www.s.kyushu-u.ac.jp/~z6st02in/repo2008z/repo2008kprob.html
問題2と3をおねがいします。
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C++言語
[4] 期限:明日まで
[5] その他の制限:与えられたプログラムを改造(付け足し)する


307 名前:suzuki mailto:sage [2009/02/05(木) 16:59:16 ]
君は不可だ!
調査した上で厳正に処理するから首を洗っとれ

308 名前:302 mailto:sage [2009/02/05(木) 17:09:27 ]
>>305
あ、ホントだ。俺の間違ってたね。

309 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 17:27:29 ]
スレチですいません。
今日面接でプログラミングの手書きのテストをやってきました。
テスト終わって家に帰ってから効率のいいコードの書き方を思い出しました。
テスト中は時間のことが気になって思い出せずとりあえず動くコードで書きました。

テストの場合は白紙や書き途中で提出するくらいなら、
とりあえず動くコードで書いておけば特に問題はないですよね?

310 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 17:30:05 ]
宿題やテストの採点思想次第だわな



311 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 19:25:48 ]
>>309
「動かないよりマシ」って言って欲しいんだろうけど、
採点者が何を見ているか次第なんじゃね?

Fizz-Buzz問題って日本でも実施してるのかな?

ナベアツ問題は、このスレでも何度か回答されてるよね。

プログラマーなら「FizzBuzz問題」解けるよな?
pc11.2ch.net/test/read.cgi/prog/1209467166/
Fizz Buzz(ウィキペディア)
ja.wikipedia.org/wiki/Fizz_Buzz
どうしてプログラマに・・・プログラムが書けないのか?
www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

312 名前:301 mailto:sage [2009/02/05(木) 20:15:18 ]
>>305
すみません。問題が間違ってました
正しくはkansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8826.txtでした

313 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 20:23:27 ]
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
データファイル(kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8827.txt) には,1000 人の「学籍番号,科目A,科目B,科目C の各点数」が学籍番号順に並んでいる.
そのデータファイルを元に,キーボードから入力された学籍番号の学生の成績(含:3科目の合計点の順位)を表示するプログラムを作れ.
探索は二分探索を使い,ソートにはクイックソートを使うこと.
合計点が同じになる学生はいないということは既知とせよ.
学籍番号が存在しない場合は,”No data ”と表示するようにせよ.
表示は以下のようにせよ.

Input A Student Number: 14【Enter】

Ranking : #269 /*最高得点は1位とせよ.*/
Subject A : 86
Subject B : 59.1
Subject C : 220.42
Total : 365.52
[3] 環境
 [3.1] OS:Win
 [3.2] gcc
 [3.3] C
[4] 2月6日23:59

おねがいします。

314 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 21:03:57 ]
>>312
#include<stdio.h>
#include<string.h>

int main(void){
int c, i;
char history[4*2]="";

for(i=0;(c=getchar())!=EOF;i++){
history[i%4]=history[(i%4)+4]=c;
printf("%c", c);
if(strncmp(&history[(i+1)%4], "tion", 4)==0) break;
}
return 0;
}

315 名前:305 mailto:sage [2009/02/05(木) 21:07:49 ]
上のプログラムに、入力列としてt、i、o、nの並びが与えられた場合にも入力を終了する機能を追加せよ
例 This is important information for me! の場合 This is important informaと出力
This scene is romantic の場合 This scene is romantic (tionの並びでないのでそのまま出力)

上のプログラムに、入力列としてt、i、o、nの並びが与えられた場合にも入力を終了する機能を追加せよ
例 This is important information for me! の場合 This is important informationと出力
This scene is romantic の場合 This scene is romantic (tionの並びでないのでそのまま出力)

316 名前:305 mailto:sage [2009/02/05(木) 23:50:36 ]
>>314 その手があったか。参ったのでソース貼り付け。
#include<stdio.h>

#define LEN 4
char tion[LEN + 1] = "tion";

int main(void)
{
  int c = '\0', k = 0;

  while ((c = getchar()) != EOF && k < LEN) {
    if (c == tion[0])
      k = 1;
    else if (k > 0) {
      if (c == tion[k])
        k++;
      else
        k = 0;
    }
    putchar(c);
  }
  return 0;
}

317 名前:301 mailto:sage [2009/02/06(金) 00:46:55 ]
皆さんありがとうございました

318 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 02:48:49 ]
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
ニュートン法と二分法の両方を用いて,直線y = x + 1/2 と単位円
x2 + y2 = 1 の交点の座標の近似解(小数点以下第6位まで)を求めよ.
1つのプログラムに書くこと(ニュートン法と二分法に関する箇所はmain
関数から独立させよ)
ニュートン法も二分法もともに何回で収束したかが分かるようせよ.
関数へのポインタは必ず使うこと.
表記は例えば以下のようにすること:

Newton method:
Lower part: count : ????
sol :( ?????, ????? )
Upper part: count : ????
sol :( ?????, ????? )

二分法で用いる初期値は[a,b]= [-1,1]とせよ
ニュートン法で用いる初期値は2つとも0とせよ。その際,1つの関数は
収束しない.収束しない場合は,求められないと分かった時点で計算を終了
するように工夫せよ.また,そのときは以下のように表記せよ.
sol : Not converge
収束しない場合は,なぜ収束しないのかをコメントとして書くこと.
[3] 環境
 [3.1] OS: windows
 [3.2]gcc
 [3.3] 言語: C
[4] 2月6日の夜まで

期限がせまっていて申し訳ありませんが自分でできなかったためよろしくおねがいします><

319 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 03:27:02 ]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *crypt(const char *key, const char *salt);
#define MAXLEN 16
#define TRIPLEN 10
#define PATH "trip.out"
typedef unsigned char uchar;
int get_saltc_old(uchar c){
if(c < '.' || c > 'z') return '.';
if(c >= ':' && c <= '@') return c - ':' + 'A'; // :;<=>?@ - ABCDEFG
if(c >= '[' && c <= '`') return c - '[' + 'a'; // [\]^_` - abcdef
return c;
}
int gen_trip(uchar *o, int n, uchar *w){
uchar sal[3];
uchar *t;
sal[0] = get_saltc_old(n > 1 ? w[1] : 'H');
sal[1] = get_saltc_old(n > 2 ? w[2] : '.');
sal[2] = '\0';
t = crypt(w, sal);
strncpy(o, t + strlen(t) - TRIPLEN, TRIPLEN);
return 0;
}


320 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 03:34:04 ]
int gen_combination(uchar *o, int n, int m, uchar *pos){
int i;
for(i = 0; i < n; i++) o[i] = pos[i];
for(i = n - 1; i >= 0; i--){
if(pos[i] < m - 1){
pos[i]++;
return 1;
}else{
pos[i] = 0;
}
}
return 0;
}
int gen_word_list(uchar *w, int n, int m, uchar *s){
static uchar *pos = NULL;
int i;
if(!pos){
pos = (uchar *)malloc(sizeof(uchar) * n);
for(i = 0; i < n; i++) pos[i] = 0;
}
if(gen_combination(w, n, m, pos)){
for(i = 0; i < n; i++) w[i] = s[w[i]];
w[n] = '\0';
return 1;
}
if(pos){
free(pos);
pos = NULL;
}
w[0] = '\0';
return 0;
}



321 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 03:34:39 ]
int sout(char *path, char *s, int f){
FILE *fp;
if(f)
if((fp = fopen(path, "ab+")) != NULL){
fprintf(fp, "%s\n", s);
fclose(fp);
}
fprintf(stdout, "%s\n", s);
return 0;
}
int scantrip(int n, int m, uchar *s, uchar *f){
uchar *w, *t;
char buf[4096];
w = (uchar *)malloc(sizeof(uchar) * n + 1); w[n] = '\0';
t = (uchar *)malloc(sizeof(uchar) * TRIPLEN + 1); t[TRIPLEN] = '\0';
sprintf(buf, "'%s' in len %d", f, n); sout(PATH, buf, 1);
while(gen_word_list(w, n, m, s)){
gen_trip(t, n, w);
int b = n - 2;
if(w[n - 1] == '.' && (w[b] == '.' || w[b] == 'U')){ sprintf(buf, "%4d #%s %s %s", n, w, "----------------------------------------", t); sout(PATH, buf, 0); }
if(strstr(t, f)){ sprintf(buf, "%4d #%s %s", n, w, t); sout(PATH, buf, 1); }
}
if(t) free(t);
if(w) free(w);
return 0;
}

322 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 03:35:06 ]
int main(int ac, char *av[]){
uchar *s="./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
uchar *f="Linux";
int i;
for(i = 1; i < MAXLEN; i++) scantrip(i, strlen(s), s, f);
return 0;
}

323 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 05:07:28 ]
>>318
> 二分法で用いる初期値は[a,b]= [-1,1]とせよ
その間に、解が二つある気がする。

> ニュートン法で用いる初期値は2つとも0とせよ。その際,1つの関数は
> 収束しない.収束しない場合は,求められないと分かった時点で計算を終了
> するように工夫せよ.また,そのときは以下のように表記せよ.
> sol : Not converge
> 収束しない場合は,なぜ収束しないのかをコメントとして書くこと.
オレの知らないニュートン法?

324 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 05:54:45 ]
>>313をやってみたんだけど
gccだと動作がおかしい
VCだと正常に動く
誰か原因を教えてくれ・・・・orz

gcc
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8828.c

VC
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8829.txt

325 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 08:25:43 ]
8828.c をVCに掛けてみたらどうなる。

326 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 08:39:11 ]
>>325
そのままかけてみたが正常に動作した

gccだと標準入力を促すところまで行くが
直後のsscanfでプログラムが終了してしまう
一応OSはXPです

327 名前:318 mailto:sage [2009/02/06(金) 08:44:17 ]
>>323
交差する点2つありますよね。両方とも求めるんだと思います。
二分法のアルゴリズムは
Step 1
f (a) < 0 かつf (b) > 0(または, f (a) > 0 かつf (b) < 0)を満たす
ような変数a, b の値を設定し,十分小さい正数ε を設定する.
Step 2
c = (a + b)/2 とし,
f (c) = 0 であれば,【Step 3】に移る.
f (c) > 0 であれば,b をc で置き換える.
f (c) < 0 であれば,a をc で置き換える.
|a-b| < 2ε であれば,【Step 3】に移る.
Step 3
c を解とする.

という感じらしいです。ニュートン法は反復の限界値を決めて(100回くらいに)
反復回数がそれを超えたら停止してほしいのですが・・。

328 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 11:30:38 ]
>>324
sscanf(buf, "%d%lf%lf%lf",&(st[i].number),&(st[i].ascore),&(st[i].bscore),&(st[i].cscore));

"%d,%lf,%lf,%lf" に

329 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 12:48:40 ]
>>327
> 二分法のアルゴリズムは
つまり、1セットの初期値からは、一つの解しか見つからないし・・・
xの式、f(x)=0になるxを探すワケだけど、f(a)とf(b)の符号が逆じゃなきゃいけないんだよね。
区間に二つ解があるということは、つまり、f(1)とf(-1)の符号はおんなじなわけだけど・・・?

> という感じらしいです。ニュートン法は反復の限界値を決めて(100回くらいに)
> 反復回数がそれを超えたら停止してほしいのですが・・。
初期値が二つといっているのだから、解の一つごとに初期値をおくように思うが、両方0にしろと言う。
オレの知っているニュートン法ではないようだ。

330 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 13:28:17 ]
にぶんほう?



331 名前:デフォルトの名無しさん [2009/02/06(金) 14:24:29 ]
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク): www.logos.ic.i.u-tokyo.ac.jp/icpc2007/jp/index.html
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2009年2月10日13:00まで
[5] その他の制限:特になし
ACM国際大学対抗プログラミングコンテスト国内予選2007問題Bです
既出だったらすまん
お頼みもうします

332 名前:デフォルトの名無しさん [2009/02/06(金) 14:59:00 ]
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8831.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月07日20:00まで]
[5] その他の制限:

333 名前:デフォルトの名無しさん [2009/02/06(金) 15:08:21 ]
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8832.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月07日20:00まで]
[5] その他の制限:

334 名前:デフォルトの名無しさん [2009/02/06(金) 15:15:00 ]
[1] 授業単元:数値解析
[2] 問題文(含コード&リンク)
(1)区間演算ライブラリを作れ。(加減乗除のみでもOK)
(2)Gaussの消去法のプログラムを作り、それを区間演算化せよ

以上ですが、ソースコードのみでもかまいません

[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限:明日20時まで
[5] その他の制限: 特になし


335 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 15:25:11 ]
>>334
> 以上ですが、ソースコードのみでもかまいません
ソースコード以外だと、何が付くの?

336 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 15:41:34 ]
>>335 それだけじゃない
> [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
『等』・・・・こいつ相当のマニアか。
開発環境が書ききれないほど。ドンと来い。

> [3.3] 言語: (C/C++/どちらでも可 のいずれか)
pu-w

337 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 15:51:08 ]
>>332
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8833.txt

338 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 15:58:57 ]
>>337
どうしようもない時以外に、goto使う奴は
どうしようもない奴だと思うぞ。

elseで全部つなげば解決じゃないですか。

339 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 16:13:48 ]
>>331
素数を出すアルゴリズムがアレなのでめっちゃ遅いけど。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8834.c

340 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 16:23:22 ]
>>338
>>332
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8835.txt



341 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 16:24:18 ]
>>338
しーっ・・・

342 名前:338 mailto:sage [2009/02/06(金) 16:30:32 ]
>>341
これだけは言わせてくれ。>>340ネタ乙。

343 名前:339 mailto:sage [2009/02/06(金) 16:31:29 ]
問題勘違いした…。
アジア地区予選の問題やってたorz

344 名前:デフォルトの名無しさん [2009/02/06(金) 16:40:36 ]
>>333
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8836.txt

345 名前:デフォルトの名無しさん [2009/02/06(金) 17:31:56 ]
ちょっと漏れがあったようなので;;

[1] 授業単元:数値解析
[2] 問題文(含コード&リンク)
(1)区間演算ライブラリを作れ。(加減乗除のみでもOK)
(2)Gaussの消去法のプログラムを作り、それを区間演算化せよ

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:どちらでも可
[4] 期限:明日20時まで
[5] その他の制限: 特になし

346 名前:313 mailto:sage [2009/02/06(金) 20:57:11 ]
>>324
>>328
324さんのプログラムを328さんの言うように修正してみたところ
データを読み込み、表示されるところまではいくのですが全ての数値が0になってしまいます。
どうすればいいでしょうか。。。

347 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 22:06:23 ]
>>327
ニュートン法で100回も反復するとか時間の無駄だからな
初期値が悪くてもせいぜい10回だ

348 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 23:45:25 ]
>>331
なんとなく、計算できているような気がする。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8838.c

349 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 04:11:05 ]
>>348
関数とか要らないことに気づいたので、大分、短くなった。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8839.c

350 名前:325 mailto:sage [2009/02/07(土) 04:18:57 ]
>>326
double total(Student st){
// return (st.ascore + st.bscore + st.cscore);
double a = (st.ascore + st.bscore + st.cscore);
return a;
}

>>346
// printf("%d%lf%lf%lf",&(st[i].number),&(st[i].ascore),&(st[i].bscore),&(st[i].cscore));
printf("%d%lf%lf%lf", (st[i].number), (st[i].ascore), (st[i].bscore), (st[i].cscore));



351 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 04:21:55 ]
>>349
すごい短縮だな。(2階層くらいで関数化したら、もっと打ちやすかったんじゃ)
でも、元ファイルc++だろ? >>331はC指定かかってるよ。

352 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 04:33:39 ]
>>351
C++ではないよ。-std=c99つけないとコンパイルできないけど。

353 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 04:48:34 ]
>>352
「-std=c99つければ、gccでもコンパイルできるよ」かな?

354 名前:325 mailto:sage [2009/02/07(土) 04:54:11 ]
>>326
double a;

do{
while((a=total(st[pl])) > x) pl++;
while((a=total(st[pr])) < x) pr--;

>>346 悪い、間違えた。君の言うとおりだ。

355 名前:325 mailto:sage [2009/02/07(土) 05:01:10 ]
>>326
double a;

do{
pc = (pl + pr) / 2;
if((a=total(st[pc])) == key)
return pc;
else if((a=total(st[pc])) > key)

356 名前:デフォルトの名無しさん [2009/02/07(土) 13:01:57 ]
>>339>>343
>>348>>349
>>351->>353
有難うございます
アジア地区のもやってみたかったので助かりました
なんかテストいけそうな気がする

357 名前:デフォルトの名無しさん [2009/02/07(土) 13:17:05 ]
wwwwwwwwwwwwwwwwww

358 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 13:24:44 ]
>>356
> なんかテストいけそうな気がする
ありえねー・・・

359 名前:325 mailto:sage [2009/02/07(土) 14:50:36 ]
>>326
gcc -O3 8828.c -o 8828.exe

360 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:34:38 ]
>>356
あるとおもいます。



361 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:48:39 ]
??

362 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:06:55 ]
説明しよう!
>起 >>356 いけそうな気が!
>承 >>358 ありえねー・・
>転 >>360 あると思います。
>結 >>361 ??
??に入る言葉を(ry

363 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:11:40 ]
詩吟?

364 名前:326 mailto:sage [2009/02/07(土) 18:31:45 ]
>>325
ありがとうございます。
Rankingの表示が出ないんですが簡単に治せますでしょうか。

365 名前:326 mailto:sage [2009/02/07(土) 18:42:21 ]
return plにしたらできました!ありがとうございます。

366 名前:325 mailto:sage [2009/02/07(土) 18:55:07 ]
え?return pl; って、何行目?参考までに。

367 名前:326 mailto:sage [2009/02/07(土) 19:58:10 ]
50行目ですかね。。あれ違いますか><

368 名前:325 mailto:sage [2009/02/07(土) 20:17:42 ]
Ranking#の値が、合ってれば良いけれど。
> Input A Student Number: 14【Enter】
> Ranking : #269 /*最高得点は1位とせよ.*/

尚こちらでは、>>350 上)の修正で直った。

369 名前:324 mailto:sage [2009/02/07(土) 20:24:17 ]
こちらでも>>350の上の修正で
正常に動作することが確認できました

ちなみにどうして修正前では
正常に動作しなかったのか
理由は分かりますか?

370 名前:325 mailto:sage [2009/02/07(土) 20:26:57 ]
わからない。回避方法は、ステップ実行してて見つけた。



371 名前:324 mailto:sage [2009/02/07(土) 20:32:53 ]
そうですか
お手数おかけしました
ありがとうございました

372 名前:326 mailto:sage [2009/02/07(土) 21:28:36 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8842.txt
このようにして実行するとRankingがすべて0になるんで、52行目のreturn -1;を
return -pr;に変えたところRankingが表示されました。(14のとき269位)
これで正常動作かなーと思ったんですが
例えば生徒番号1の動作みたところ表示される数値間違ってませんか?

373 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 21:38:07 ]
return pl;を入れてなくて終了してたのは、
スタック領域のオーバーフローでセグメンテーション違反。

374 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 21:47:02 ]
>>372
修正したソースを見せて。


375 名前:326 mailto:sage [2009/02/07(土) 21:52:26 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8843.txt
これです。

376 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:22:19 ]
>>375
mark_sortが変。
クイックソートやりたいんだろうけどできてない。
xを基準にして大小をわけてるけど
xがその境界にきてないから変なことになる。

mark_sortやめてqsort使ったら


377 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:36:39 ]
>>376
こっちでは上手く動くようなのだけど、>>375のソースとの違いってあるかな?
www1.cts.ne.jp/~clab/hsample/Sort/Sort9.html

378 名前:324 mailto:sage [2009/02/07(土) 23:54:41 ]
>>376
pivotの選び方に欠陥があることは承知しているが
最も単純な方法でクイックソートを作ったつもり

qsortを使わなかったのは問題にクイックソートを
使うよう指定されていたのでアルゴリズムを理解していることを
示す必要があると思ったから
その必要がなかったら確かにqsort関数を使った方が
高速にできると思う

379 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 00:26:38 ]
>>377
double total(Student st); で3個の数値を合計している所が違う(追加)。

380 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 01:22:08 ]
>>378 バグ取りの報酬として、cmp_doubleを使わなくては駄目な理由を調べて教えてくれ(取れてなかったらゴメンナサイ…)。

int cmp_double(double x, double y)
{
  return x > y ? 1 : x < y ? -1 : 0;
}

void mark_sort(Student *st, int left, int right){
  int pl = left;
  int pr = right;
  double x = total(st[(pl + pr) / 2]);
  while(1){
    while(cmp_double(total(st[pl]), x) > 0) pl++;
    while(cmp_double(total(st[pr]), x) < 0) pr--;
    if(pl >= pr){
      break;
    }
    swap(st, pl, pr);
    pl++;
    pr--;
  }

  if(left < pl - 1) mark_sort(st, left, pl -1);
  if(pr + 1 < right) mark_sort(st, pr + 1, right);
}

>>379
( ´_ゝ`)



381 名前:379 mailto:sage [2009/02/08(日) 02:08:20 ]
>>380
while(1) はそのままにした。めんどうなので。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8844.txt

382 名前:379 mailto:sage [2009/02/08(日) 02:18:25 ]
報酬忘れてた。ヒント:
// while(total(st[pl]) > x) pl++;
while((total(st[pl]) > x) != ((a=total(st[pl])) > x)?printf("%d ",pl):printf(","),
((a=total(st[pl])) > x)) pl++;


383 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 02:27:13 ]
>>381
一回呼び出し側の領域に入れると問題なしなのか!

384 名前:326 mailto:sage [2009/02/08(日) 03:09:16 ]
できました!
色々とみなさんありがとうございました。

385 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 03:25:16 ]
>>382
よく分からんが、ebpレジスタ同士の比較じゃないと上手く動作しないってこと?

386 名前:385 mailto:sage [2009/02/08(日) 03:35:07 ]
これか……
0xcc.net/blog/archives/000164.html
ほとんどバグじゃねーか

387 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 10:40:59 ]
このサイト前半おかしくね?
53*100=5299.9999999..になることだってあるだろ

388 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 11:42:07 ]
>x86 特有のちょっとおもしろい現象


389 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 12:09:34 ]
>>387
もう一度読んできて。

390 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 13:02:12 ]
>>381
xに従ってplとprを移動しているループは、与えられた
st[left,right]を飛び出す可能性があるがその問題は放置?



391 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 13:18:07 ]
ショートカットして、>>380 が正しいと?

392 名前:sage [2009/02/08(日) 16:25:06 ]
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):星型5角形(★)の面積を求めるプログラムを作成せよ。ただし、入力は*.txtファイルから行い、入力、計算は関数化すること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:cygwin1.5.25-15
 [3.3] 言語:C
[4] 期限: ([2009年2月9日10:00まで]
[5] その他の制限:特にありませんが、動的メモリ確保(malloc関数)の勉強をしていました。

393 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 16:38:32 ]
392です。
口頭で問題を言われただけなので問題文がなく、自分で書いたため、少し問題文にミスがありましたため、補足させてもらいます。
入力のtxtファイルには、時計回りに5つ(もしくは、6つ[6つ目は開始地点と同じ座標])の座標を入力することが条件となっております。


394 名前:デフォルトの名無しさん [2009/02/08(日) 16:43:14 ]
以下の問題についてですが、どうやって解いたらいいのでしょうか?

C言語

(問題)
ファイル xy2data.dat には,カンマで区切られた2つの整数データ(値は0以上5以下)が並んだ行が
何行か格納されている.
各行の最初の整数値をx,次の整数値をyとしてx-y座標上の点(x.y)をファイルの行数個考える.
これらの点と、点(4,4)との距離の2乗の値の度数分布を求め,頻度が3以上となる距離の2乗の値
をその値が小さいものから順にカンマで区切って出力するプログラムを作成せよ.


ファイルは
FILE *in_file;
in_file = fopen("xy2data.dat","r");

としてopenし,このファイルからデータを読み出す時は,

fscanf(in_file,"%d,%d",&x,&y);
として読み出せばよい.(xとyは整数型変数とする)
また,読み出しが終わったら,
fclose(in_file);
としてクローズすること.

395 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 17:04:39 ]
>>392
星型の条件が分からん。
正確な五芒星なの?

396 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 17:27:59 ]
正確な五芒星なら最初の2点分だけで面積判る罠

397 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 17:46:19 ]
座標はこれでおねがいします
maps.google.co.jp/maps?ll=41.796944,140.756643&t=h&z=16


398 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 17:49:00 ]
392です。
星型の条件とはどういうことでしょう?><;
頂点5つの座標は
4.00000 0.00000
-3.23607 -2.35114
1.23607 3.80423
1.23607 -3.80423
-3.23607 2.35114
です。
答えになっているでしょうか・・・?

399 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 17:54:40 ]
>>394 解いた
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8845.txt

400 名前:デフォルトの名無しさん [2009/02/08(日) 20:37:04 ]
以下の文で教えて欲しいです。
memcpy(&byteData ,pTimData ,2 ); /* pTimDataからbyteDataへコピー */

byteData = byteData & 0x7c00; /*15bit分のマスクを掛ける。*/

byteData = byteData >> 12; /*12bit移動*/

read(byteData, bmpData, sizeof(short));/*処理後のデータを格納*/

/*次の2byeを格納するためループ。全て格納し終えたらループから抜け出す*/

memcpyでpTimDataからbyteDataへ2byte分切り出した後
論理積でマスクをかけビットシフトしたあと、bmpDataに格納するというものなのですが
このままだと2byte分だけbmpDataに格納して処理を終了してしまいます。
処理後の全pTimDataのデータをbmpDataを入れたいのですが、どのようなループ文を書いたらいいのでしょうか?

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8847.txt



401 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 20:44:44 ]
>>400
スレちがい。
どこぞ、質問スレへ行け

402 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 20:57:03 ]
>>401
申し訳ない。
まんま丸投げじゃないと駄目なんですね。
失礼しました。

403 名前:デフォルトの名無しさん [2009/02/08(日) 21:01:55 ]
>399さん

記載ありがとうございます。
大変もうしわけありませんが、アップしていただいたURLにアクセスできないので、
本文中に記載していただけないでしょうか?

404 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 21:21:26 ]
>>398
ごちゃごちゃしてるけど。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8848.txt
#pragma warning(disable : 4996)の部分は消して使ってね

405 名前:399 mailto:sage [2009/02/08(日) 21:53:01 ]
tp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8845.txt

406 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:01:23 ]
392です。
404さんありがとうございます!
ですが、コンパイルできるのですが、実行ができません><;

& gcc ファイル名.c
& a.exe input.txt

でコンパイル&実行をしたのですが、これではだめなのでしょうか?

↓input.txtの中身
4.00000 0.00000
-3.23607 -2.35114
1.23607 3.80423
1.23607 -3.80423
-3.23607 2.35114


407 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:03:19 ]
連投すみません。392です。
実行は
& ./a.exe input.txt
の間違いです。
「./」を書き入れるのを忘れました^^;

408 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:14:55 ]
>>406
プログラムで指定されているファイル名は、in.txtだからねえ・・・

409 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:15:27 ]
int main(){

int main(int argc, char* argv){

read_points("in.txt",point);

read_points(argv[1],point);
でいくと思う

410 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:23:49 ]
int main(int argc, char* argv[]){
か。ごめん!




411 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:28:49 ]
408さんありがとうございます><助かりました。

412 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:42:10 ]
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8849.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.3] 言語: C
[4] 期限: 2月9日12:00まで

よろしくお願いします。

413 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:46:32 ]
>>412
「重複数」の定義は?

414 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:52:00 ]
>>412
クソな課題だな。

int a[x]をmallocで確保してa[ key % x]++して
全部終わったらa[k]が2以上の数を数えてxを掛ける
これの繰り返し?上限は「入力されたうちの最大値+1」か?

415 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:02:27 ]
>>414
それだとx=1が常に最適になるので、本当のクソになる。
a[k]の大きさも加味すべきだろう。

416 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:09:18 ]
>>413>>414
何も言われてないので分からないです。

417 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:59:23 ]
>>412
keyは一意でいいんだよね?

418 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 00:15:55 ]
>>412
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8850.txt
バケットの要素数count[i]が2以上であるバケットiについて、Σcount[i]!/2を「要素数」とした。count[i]!/2は、バケットから2要素を選ぶ組み合わせ数。
また、バケット数の上限は、(最大のkey)+1とした。

419 名前:418 mailto:sage [2009/02/09(月) 00:23:02 ]
ごめん、思いっきり勘違いを書いた。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8851.txt
バケットから2要素を選ぶ組み合わせ数はcount[i]*(count[i]-1)/2だね。

420 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 02:24:55 ]
[1]C言語中級
[2]問題文:
UNIXなどのオペレーティングシステムで使用されているファイル名称慣用表示を正式表示に変換する。
標準入力から慣用表示を含む表記を正式表記に変換して標準出力に出力すること
先頭文字が.の場合はカレントディレクトリ下のファイル名とすること
例:カレントディレクトリ=/home/test
/usr/bin/ls ===> /usr/bin/ls
/usr/bin/local/sbin/tmp/../localls ==> /usr/bin/local/sbin/localls
/usr/./tmp==>/usr/tmp
./program/source ==>/home/test/program/source
../../home/sample ==>/home/sample
../../../home/sample==>/home/sample
.../test==>/test
./sample/test/...../test==>/test
./bin/../../../.. ==>/
[3]
linux gcc (Windowsでも可)
C言語
[4] ★木曜日の正午までに提出
★標準的な書式(行内マルチステートメント禁止)で250行以内
★再帰呼び出しは使用禁止
★グローバル変数使用禁止
★パス名の長さは制限無しとする
初級コースが満杯なので、中級コースをとって
しまったら、課題レポートが自分には激ムズでした。
自分でやってみたら収拾がつかなくなってしまいました。
期限までわずかに時間はありますが、できれば一両日中に何と
かお願いします。








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<133KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef