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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けない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++の宿題を片付けます 121代目
http://pc11.2ch.net/test/read.cgi/tech/1230678123/
2デフォルトの名無しさん:2009/01/16(金) 00:52:45
皆様のおかげで無事単位を取得できました

本当にありがとうございます

これからは人に頼らずできるかぎり自分の力で頑張っていきたいです
3デフォルトの名無しさん:2009/01/16(金) 01:09:15
C/C++の宿題を片付けます 122代目
http://pc11.2ch.net/test/read.cgi/tech/1232001038/

重複
4デフォルトの名無しさん:2009/01/16(金) 17:24:48
保守しといたらいいのかな


ところで何で122題目じゃなくて122代目なの?
5デフォルトの名無しさん:2009/01/17(土) 21:05:23
janeの隠し機能

1.書き込みウィンドウを出し半角入力に切り替える
2.Wキーを押しっぱなしにする
3.Wキを押しっぱなしにしながらsageのチェックするところをおもむろにクリック
6デフォルトの名無しさん:2009/01/17(土) 21:15:18
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
7デフォルトの名無しさん:2009/01/17(土) 23:40:29
3 は「コテハン記憶チェック」「最前面チェック」「末尾整形」「BE」「Proxy」のどのチェックを操作してもいけるな
8デフォルトの名無しさん:2009/01/27(火) 08:45:05
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
9デフォルトの名無しさん:2009/01/27(火) 11:08:41
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
10デフォルトの名無しさん:2009/01/30(金) 10:49:33
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
11デフォルトの名無しさん:2009/01/30(金) 10:50:17
wwwwwwwwwwwwwwwwwwwwwwwwwww
12デフォルトの名無しさん:2009/01/30(金) 11:00:12
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
13デフォルトの名無しさん:2009/01/30(金) 16:05:21
残ってる期限内の課題はこれだけかな。

C/C++の宿題を片付けます 122代目
http://pc11.2ch.net/test/read.cgi/tech/1232001038/705
→解析と言うのも良く知らないが、これってどう言う処理結果を期待してるんだろ?

C/C++の宿題を片付けます 122代目
http://pc11.2ch.net/test/read.cgi/tech/1232001038/891
→オレには、「きのこのやまはたべざかり」も解析できないが、多分、ここの学生にも出来ないような・・・
14デフォルトの名無しさん:2009/01/30(金) 16:56:07
異なる30個の数字をうんたらかんたらって課題は早稲田大学理工学部かな
15デフォルトの名無しさん:2009/01/30(金) 20:57:38
wwwwwwwwwwwwwwwww
16デフォルトの名無しさん:2009/01/30(金) 20:58:14
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
17デフォルトの名無しさん:2009/01/30(金) 21:32:00
[1] 授業単元: プロムラミング
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C言語
[4] 期限:1月31日まで
[5] その他の制限:変わった問題ですが、誰かお願いします!!
18デフォルトの名無しさん:2009/01/30(金) 21:35:16
うむ、たしかに変わった問題だ。
19デフォルトの名無しさん:2009/01/30(金) 21:50:10
>>17
これで、しかも、マルチ
20デフォルトの名無しさん:2009/01/30(金) 23:14:45
>>18
>>19
変わった問題ですみません。わかりますか?
21デフォルトの名無しさん:2009/01/30(金) 23:17:45
>>17のレスだけを与えられて問題にたどり着けるかどうか試してみたら?
22デフォルトの名無しさん:2009/01/30(金) 23:26:01
>>21
すみません、どうゆうことですか(><)?
23デフォルトの名無しさん:2009/01/30(金) 23:26:52
>>22
>>17から出発して、自分で問題文を探してみろよって言ってんだ
24デフォルトの名無しさん:2009/01/30(金) 23:39:40
>>23
私の問題はNo.8780ですが、どうしたらいいかわからないんです。。。
25デフォルトの名無しさん:2009/01/30(金) 23:45:44
26デフォルトの名無しさん:2009/01/30(金) 23:50:45
>>25
その問題なんですけど、問題の意味がわからないってことですか?
27デフォルトの名無しさん:2009/01/30(金) 23:57:00
>>26
問題文が長いときはzipに入れとこうね。
28デフォルトの名無しさん:2009/01/30(金) 23:59:04
>>27
すみません(><)やり方がいまいちわからなかったもんで。。。
ありがとうございます!!
29デフォルトの名無しさん:2009/01/31(土) 00:10:36
30デフォルトの名無しさん:2009/01/31(土) 00:11:31
>>24
オマエ以外の誰がそれを知ってんだよ、バカ
31デフォルトの名無しさん: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デフォルトの名無しさん:2009/01/31(土) 00:34:37
ワーシャル・フロイト法?
36デフォルトの名無しさん:2009/01/31(土) 00:35:24
>>34
>>1くらい読め
一刻も早く死ね
37デフォルトの名無しさん:2009/01/31(土) 00:40:59
>>34
スレタイと>>1
まともに訊く気があるなら”近い都市どおしをまとめて”って辺りを詳しく
38デフォルトの名無しさん:2009/01/31(土) 00:43:59
>>34
よく見ると、日本語でおkだ・・・
ねたか・・・
39デフォルトの名無しさん:2009/01/31(土) 01:05:08
すみません。 
都市は円形同サイズで、中心間の距離が記録されています。
2つにわれる場合は、同程度サイズになるようにします。
合併後の都市の中心から橋が離れすぎないようにします。
40デフォルトの名無しさん:2009/01/31(土) 01:06:58
>>39
>>1くらい読め
死ね
41デフォルトの名無しさん:2009/01/31(土) 01:10:08
>>39
スレタイ嫁
あと、書いた文を人が読んで理解できるかどうかを考えて文を書け
3行目以下が意味不明
42デフォルトの名無しさん:2009/01/31(土) 01:23:32
よく読むと微妙にスレタイ変わってるんだな
43デフォルトの名無しさん:2009/01/31(土) 01:38:02
>>17は結局何が悪かったのかに気づいてないんだろうな。
zipじゃなかったことについて怒られたんだと思ってるよきっと。
44デフォルトの名無しさん:2009/01/31(土) 01:42:58
スレタイだけ読んだってしょうがないだろ
テンプレも読ませないと
45デフォルトの名無しさん:2009/01/31(土) 01:43:01
>>42
重複スレだから仕方ない
46デフォルトの名無しさん:2009/01/31(土) 02:48:41
[1] 分岐 一次元配列 繰り返し 外部関数
[2] http://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デフォルトの名無しさん:2009/01/31(土) 03:08:02
>>46
スパコン甲子園かと思ったら、パソコン甲子園なんだな・・・
48デフォルトの名無しさん:2009/01/31(土) 03:16:41
>>47
高校生が20分掛けずに解くことになっている問題じゃねーか!
49デフォルトの名無しさん:2009/01/31(土) 03:20:20
1問あたり20分?
50デフォルトの名無しさん:2009/01/31(土) 03:49:05
>>49
予選の問題だろ?
180分で10問だってさ。
51デフォルトの名無しさん:2009/01/31(土) 03:52:37
>>50
本選の問題で、240分で12題の配分。
52デフォルトの名無しさん:2009/01/31(土) 04:38:32
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デフォルトの名無しさん:2009/01/31(土) 05:35:30
>>53
C++なのにiostreamやってないの?
Cなんじゃないの?
57デフォルトの名無しさん:2009/01/31(土) 05:48:28
>>56まだ習ってないです・・汗
58デフォルトの名無しさん:2009/01/31(土) 05:50:34
それは酷いな
59デフォルトの名無しさん:2009/01/31(土) 06:23:56
60デフォルトの名無しさん:2009/01/31(土) 09:34:30
>>53
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8794.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8795.txt

殆んど意味不明。
>>46には一次元配列と書いてあるが使うところが無いし
61デフォルトの名無しさん:2009/01/31(土) 09:50:08
問3は配列を使いたいね
62デフォルトの名無しさん:2009/01/31(土) 10:14:54
63デフォルトの名無しさん:2009/01/31(土) 13:06:46
前スレで回答いただいた者(>>973)ですが、

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

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

と表示されます。どう直せばよいのでしょうか?
64デフォルトの名無しさん:2009/01/31(土) 13:20:04
>>63
やむを得まい、int main(void) { return0; } にするしかない。
65デフォルトの名無しさん:2009/01/31(土) 13:37:57
>>64
ありがとうございました!
66デフォルトの名無しさん:2009/01/31(土) 13:42:48
>>46
面白い問題だ
制限時間内に全問正解できる自信がないぜw
67デフォルトの名無しさん:2009/01/31(土) 15:34:18
>>46
高校レベルなの??
68デフォルトの名無しさん:2009/01/31(土) 15:46:13
>>46
プログラムとしてはどうか知らんが
数学的には未解決問題の上に賞金もかけられていたはず
69デフォルトの名無しさん:2009/01/31(土) 15:46:34
>>59
本当にありがとうございます!
すっきりしててわかりやすいです!
70デフォルトの名無しさん:2009/01/31(土) 15:58:37
>>68
与えられた数字より、小さい数字に出来ることを示せばいい。
たとえば、100から始めたら、99以下になる事を示す。
そうすれば数学的帰納法で全ての数字で成り立つ。
71デフォルトの名無しさん:2009/01/31(土) 15:59:47
>>70
言ってることは尤もなんだが
数学者を馬鹿にしてるのかw
72デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/01/31(土) 17:20:24
>>77
おいおいVBってなんだよw
83デフォルトの名無しさん:2009/01/31(土) 17:27:03
ろだのPOSシステムの問題どなたかお願いします。
84デフォルトの名無しさん:2009/01/31(土) 17:43:24
>>83
>>1くらいよめ
読む前に死ね
85デフォルトの名無しさん:2009/01/31(土) 17:44:42
>>46
ハミング問題が15点とかきついな。
86デフォルトの名無しさん: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デフォルトの名無しさん:2009/01/31(土) 19:11:33
wwwwwwwwwwwwwwwwwwwwww
88デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/01/31(土) 21:03:02
>>89
1660円入れて、おつりが1780円?
92デフォルトの名無しさん:2009/01/31(土) 21:06:48
_10とかの変数名見てふと思ったんだけど、
Javaの変数名って日本語文字使えるのん?
93デフォルトの名無しさん:2009/01/31(土) 21:09:04
使えない
94デフォルトの名無しさん:2009/01/31(土) 21:12:49
使えるよw
95デフォルトの名無しさん:2009/01/31(土) 21:16:23
試してみればいいよ
96デフォルトの名無しさん:2009/01/31(土) 21:19:17
まじだ、JAVAのパーサはUNICODEで解釈するのか。
97デフォルトの名無しさん:2009/01/31(土) 21:19:58
あ、やっぱりだめなのね。
わしの持ってる本にはウムラウトとかが許されるって書いてあるから
漢字もできるのかと思った。
98デフォルトの名無しさん:2009/01/31(土) 21:20:43
あれw
使えるの? あはーん?

Visual Studio 2008はJ++廃止されちゃったから試せない。
99デフォルトの名無しさん:2009/01/31(土) 22:17:54
C#は使えるな
100デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/01(日) 01:04:09
>>100
まあ、この式をどう読むのかも知らん
102デフォルトの名無しさん:2009/02/01(日) 01:05:40
>>98
J++でできるからといってJAVAでできると言ってしまうのはひどい
逆にJAVAで可能なのかどうかを調べる為にJ++を使用するのもひどい
103デフォルトの名無しさん:2009/02/01(日) 01:06:35
>>91
おつり計算のところ、括弧忘れてるね
104デフォルトの名無しさん:2009/02/01(日) 02:33:56
>>100
ルンゲクッタ使うならこんな感じでいい希ガス
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8797.txt
105デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/01(日) 13:10:04
>>105
問1はmin=1000ぐらいにしとけ

それより問5が正常に動作していない件について
107デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/01(日) 17:19:22
>>105
問1に関して
maxとminを0で初期化するのは適切ではない
2個目のfor文の前で
max=a[0];
min=a[0];
のようにすべき
110デフォルトの名無しさん: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デフォルトの名無しさん: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] 問題文(含コード&リンク): http://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デフォルトの名無しさん:2009/02/01(日) 21:47:23
>>112
式の長さの上限は?
114デフォルトの名無しさん:2009/02/01(日) 22:14:05
>>113
特にありません
115デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/01(日) 22:42:36
【質問テンプレ】
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク): http://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] その他の制限:

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

117116: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デフォルトの名無しさん:2009/02/01(日) 23:53:00
>>118
> 平均値はどのようにして出せばいいのでしょうか?
値を全部足して、それを値の個数で割る
120デフォルトの名無しさん:2009/02/01(日) 23:53:40
>>118
>問5はできたのですがそれ以外ができません。
難しくて全く理解できないのか、自分で作ってバグがでるのか、何を求めているのか。
言われなきゃ分からんとはな。
121デフォルトの名無しさん:2009/02/02(月) 00:12:12
>>119>>120
ごめんなさい。質問する以前の問題でしたね・・・。

問1:全ての値の合計の仕方がわかりません。
問2:>>107を見てやってみたのですがバグが出てしまって、自分で直そうとしたんですが難しくて手のつけようが・・・。
問3:問2を少し弄れば出来そうな気はします
問4:バグがでます
122デフォルトの名無しさん:2009/02/02(月) 00:12:29
あぁ、またsage忘れたorz
123デフォルトの名無しさん:2009/02/02(月) 00:21:37
これはひどい
124デフォルトの名無しさん:2009/02/02(月) 00:39:39
>>121
合計の出し方
sumを0に初期化
2個目のfor文の中でsum+=a[i];

エラーメッセージを貼るなりしてくれないと
どんなバグが出てるのかわからない
125デフォルトの名無しさん: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)' を一致させようとしているとき
126107:2009/02/02(月) 01:10:16
ヘッダ自分で調べるくらいできるだろう。
strlen , exit , isupper , islower , isalnum ググれ。
returnのタイプミスはすまないが、気付かない方も考えてない証拠かと。
return 0; を 「reutrn 0;」と書けば、reutrnを変数などの識別詞とみなすから
「INTMAX 0;」とか「1 0;」と同等に扱われる。
returnに直せば問題解消。無意味だが「reutrn; 0;」とすれば、警告は片方減る。
127110:2009/02/02(月) 01:15:20
>>125
VCでビルドしなかったのは俺のミスだ
sqrt(D)をsqrt((double)D)に直してくれ
128デフォルトの名無しさん:2009/02/02(月) 01:19:33
>>126
仰るとおりです。申し訳ありません。
>>127
ありがとうございます
できました!
129デフォルトの名無しさん:2009/02/02(月) 01:24:31
>>125
>>108>>107の修正分を書いてる。
if( !isupper(user_name[0]) && !islower(user_name[0] ) {

if( !isalpha(user_name[0]) ) {
にする。
一行しかないものは削除
130デフォルトの名無しさん:2009/02/02(月) 03:08:57
>>117
関数の引数を↓のようにして(muは平均sigmaは標準偏差)
double p_nor(double z, double mu, double sigma)

変数を宣言しているすぐ下に
z = (z-mu)/sigma;
を追加すればおk
131116:2009/02/02(月) 03:27:12
>>130
できました!
こんな夜中にありがとうございます!

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

ほんとありがとうございます!
132デフォルトの名無しさん:2009/02/02(月) 06:14:06
fprintfとfscanfを同時に使用する場合、fopenのモードは何にすれば良いのでしょうか?

当方初心者でかなり無知ですがよろしくおねがいします。
133デフォルトの名無しさん:2009/02/02(月) 06:55:57
自己解決したすまね。
fopenを別々ですね。
134デフォルトの名無しさん:2009/02/02(月) 10:57:09
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク): http://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デフォルトの名無しさん:2009/02/02(月) 11:47:57
フローチャートくらい・・・
って思ってしまう俺は疲れてるのかな。
136デフォルトの名無しさん:2009/02/02(月) 11:49:01
疲れているなら、風呂に入っちゃ〜
137デフォルトの名無しさん:2009/02/02(月) 11:50:34
一緒に入りませんか?
138デフォルトの名無しさん:2009/02/02(月) 12:07:40
おれバイト&社会人でプログラム8年くらいやってるんだけど
フローチャートって使ったことない。使うもんなの?
139デフォルトの名無しさん:2009/02/02(月) 12:09:11
>>133
ふつうは "r+" とか "w+" だな
同時と言っても順序・タイミング考えないとぐちゃぐちゃになってしまうが
140デフォルトの名無しさん:2009/02/02(月) 12:09:31
>>138
今はどうか知らんけど、パチンコやパチスロのソフトは認可通すのに必須だとか?
141デフォルトの名無しさん:2009/02/02(月) 12:16:55
>>138
使う場合もあるしない場合もあるけど
ISOなんちゃらの監査の時に資料がいるので一応作っている
142デフォルトの名無しさん:2009/02/02(月) 12:39:06
>>140-141
そういう使い方なのか・・・

フローチャート書けるってことは、論理がわかってるってことだから
結局同じ手間でソースかけるような気がするんだよね。
だからフローチャートの必要性がわからんかった。
143デフォルトの名無しさん:2009/02/02(月) 13:30:04
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク): http://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デフォルトの名無しさん:2009/02/02(月) 14:10:00
[1] 授業単元: 人工知能演習
[2] 問題文(含コード&リンク):
Hopfieldネットワークの連想う記憶に関する以下の2つの課題を行いなさい。
Hopfieldネットワークとしては、ニューロン数N=63のものを考える。また記憶さ
せるパターンは、numbers.txtにある、0〜9までの数字のイメージをもちいる。
課題→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8802.txt
numbers.txt→http://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デフォルトの名無しさん:2009/02/02(月) 14:21:34
>>145 追記です

よろしくお願いします。助けてください。
147デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/02(月) 16:51:16
>>153
fgets を使う
155デフォルトの名無しさん:2009/02/02(月) 17:03:33
>>154
fgets って言うのは習ってないので
どこに組み込めばいいか分からないです…。
156150-151: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デフォルトの名無しさん:2009/02/02(月) 18:50:58
>>143
読んでないけど、>>115で不満なのか?
159デフォルトの名無しさん:2009/02/02(月) 20:53:12
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):http://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デフォルトの名無しさん:2009/02/02(月) 21:01:55
(x^n) mod m
161デフォルトの名無しさん:2009/02/02(月) 21:04:48
>>160
はええな
マジで?
おれより速い奴がいるなんて興奮して勃起しちゃった
162デフォルトの名無しさん:2009/02/02(月) 21:10:20
>>160
すごいですね!ありがとうございます。
163デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/02(月) 21:31:18
165デフォルトの名無しさん:2009/02/02(月) 21:36:58
>>163
>for(i=n;i>0;i>>=1){  ←i>>=1これどういう意味ですか?
iを右に一つシフトした結果をiに代入する。
結果、iが二分の一になる。
166デフォルトの名無しさん:2009/02/02(月) 21:38:49
>>165
>結果、iが二分の一になる。
端数切捨てね。
5(101)→2(10)
167デフォルトの名無しさん:2009/02/02(月) 22:01:27
[1] 授業単元:DirectX研究2
[2] 問題文(含コード&リンク):
サイコロを転がして目を決める。
 ・テーブルとサイコロを作成する。
 ・キー操作でサイコロを投げ下ろすように振る。
 ・落下してきて,1つの目を上にして止まる。
 ・何度でも遊べる

 ◎テーブルにサイコロの影がある
 ◎回転しながら落下してくる
 ◎自由な方向から見ることができる
 ◎テーブルの上でサイコロは跳ね,転がる。
 ◎サイコロとして正しい
http://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デフォルトの名無しさん:2009/02/02(月) 22:37:41
ここって宿題じゃなくて単発の質問はいいのかな?
169デフォルトの名無しさん:2009/02/02(月) 22:41:33
スレを勃てるまでもないC/C++の質問はここで 7
http://pc11.2ch.net/test/read.cgi/tech/1232983248/
170デフォルトの名無しさん:2009/02/02(月) 22:41:35
>>168
答えはNO
スレ違い
171デフォルトの名無しさん:2009/02/02(月) 22:43:50
>>169-170
こっちか。ありがとう
172デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/02(月) 22:49:49
>>166
スレ違いなのに質問に答えてくれてありがとうございます
174デフォルトの名無しさん:2009/02/02(月) 23:14:27
>>172
CPUとの1対1でいいのか?
ペアなしっていうのは、常に1枚ずつしかカード出せないってことでいい?

ていうかCPUの思考ルーチン作るのって基礎段階を大幅に超える気がするんだが
175デフォルトの名無しさん:2009/02/02(月) 23:21:42
どなたか>>134をお願いいたします。
176デフォルトの名無しさん:2009/02/02(月) 23:29:56
>>175
お願いされるWORDが無い
177105: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デフォルトの名無しさん:2009/02/02(月) 23:37:27
>>175
バブルソート フローチャート
でググれ
179デフォルトの名無しさん:2009/02/02(月) 23:40:46
>>177
Z==7がまずい
というかそれ、問3じゃないのか?
180デフォルトの名無しさん:2009/02/02(月) 23:44:31
>>179
あ、ごめんなさい。問3でした

z==7がいけない、ということは
y==7 か z==7  どちらかしか使用してはいけないということなのでしょうか
文字数が7、尚且つ数字であるとき、という風にしたいのですが・・・
181デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/02(月) 23:57:45
>>180
言ってることとやってることがめちゃくちゃだぞ

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

それと宿題程度ならいいと思うが
getsはなるべく使わない方がいい
183デフォルトの名無しさん:2009/02/03(火) 00:00:57
>>182
よく使ってるscanfも曲者と聞きますし、fgets&sscanfが良いと聞きますが
宿題レベルでもでしょうか?実感ないのですが。
184デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/03(火) 00:05:49
>>183
オーバーフローするような値を
敢えて入力するやつはいないと思うから
宿題レベルでとやかく言われることはないんじゃね?
でもリスクは少なくしておくべき
186デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/03(火) 00:06:50
>>174
出せるカードの中で一番弱いカードを出す程度で十分。
商用ゲームですらこれのことあるし。
188デフォルトの名無しさん:2009/02/03(火) 00:07:33
>>174
常に1枚だすので大丈夫です。よろしくお願いします。
189デフォルトの名無しさん:2009/02/03(火) 00:17:01
C言語、プログラミング基礎の問題です。

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

とても簡単だと思うのですがわからなくて。。。
お願いします
190デフォルトの名無しさん:2009/02/03(火) 00:21:08
>>189
int x;
int *px;
px = &x;
*px = 16;

こういうことかな?
191デフォルトの名無しさん:2009/02/03(火) 00:23:53
もしくは px[0] = 16 も。ポインタ理解できると→*(&px[1]-1)=16 でもできる事がわかる。
192デフォルトの名無しさん:2009/02/03(火) 00:24:34
>>182
>>184
ありがとうございます。おかげさまで無事できました!

授業ではgets()しか習っていませんでしたが使わないほうがいいのですね。勉強になります。
193181: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/03(火) 01:02:24
それでも前のスレで答えてくれている人がいるだろ。
チェックしてないのかよ。
198デフォルトの名無しさん:2009/02/03(火) 01:03:38
見たけどあってるかわからなかったんで
199デフォルトの名無しさん:2009/02/03(火) 01:05:39
じゃあこのスレで答えても同じことになるだろ。
200デフォルトの名無しさん:2009/02/03(火) 01:08:58
答え2つあったんですけど、どっちがあってるかわかりますか
このスレは答え教えてくれるんで
201デフォルトの名無しさん:2009/02/03(火) 01:15:05
じゃあもう一個増やしてやるよ。

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

202デフォルトの名無しさん:2009/02/03(火) 01:27:04
暇人・・・ww
203デフォルトの名無しさん:2009/02/03(火) 01:55:24
do {
if(!x) break;
/*処理*/
}while(1);
でもよくね?
204デフォルトの名無しさん:2009/02/03(火) 01:58:34
do {
loop:
    if (!x)
        break;
    /* 処理 */
    goto loop;
} while (0);
205デフォルトの名無しさん:2009/02/03(火) 01:59:27
あ〜あ夜は暇だなっと。マジレスでもするか
while(cnd){
/* ○処理 */
}
if(cnd?"GO"[0|0]:0x0)do{
/* ○処理 */
}while("yoru"['-'-'-']?cnd:69);
206デフォルトの名無しさん:2009/02/03(火) 06:08:15
[1] 授業単元:(復習課題) 分岐 繰り返し 一次元配列 2重ループ 2次元配列 文字列(これらどれかを使って解け)
[2] http://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デフォルトの名無しさん:2009/02/03(火) 07:38:52
209デフォルトの名無しさん:2009/02/03(火) 07:48:04
>>208
>入力はscanf 出力はprintfでお願いします。
ってかいてあるべ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8806.txt
210デフォルトの名無しさん: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] 問題文(含コード&リンク): http://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] 問題文(含コード&リンク): http://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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/03(火) 13:28:11
>>219
そんなのを気にするくらいなら
BUNSU bunsu_add(BUNSU a, BUNSU b);
的なのを作ったほうがよくないか?
221デフォルトの名無しさん:2009/02/03(火) 13:32:37
>>220
ツッコミドコロは、そこじゃないな。
222デフォルトの名無しさん:2009/02/03(火) 13:39:36
>>218をbun -> "空白"にWORDで置換してみると
文字数 896 -> 680。実にソースの24%がbun成分です。もはやネタソースだろ。
223デフォルトの名無しさん:2009/02/03(火) 13:39:52
大文字の変数とかやめてよ。
しかも一文字
224デフォルトの名無しさん:2009/02/03(火) 13:47:10
分子が息子で分母がお母さんかw
225デフォルトの名無しさん:2009/02/03(火) 13:49:17
>>222
一文字変数にしてご満悦って、70年代の世界からでも来たのかよ?
226デフォルトの名無しさん:2009/02/03(火) 13:50:00
>>219
通分が分からないって、ありえないだろ。
いじらなくても変数名だけ変えられたし。
227219: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デフォルトの名無しさん:2009/02/03(火) 13:50:52
>>227
ばかか
229デフォルトの名無しさん:2009/02/03(火) 13:52:31
>>227
バカだから、テストどころかコンパイルもしないで貼ってみたわけね・・・
230デフォルトの名無しさん:2009/02/03(火) 13:52:55
>>227
小学校からやり直せよ
231デフォルトの名無しさん:2009/02/03(火) 13:54:02
>>227
そもそも>>219は計算が間違ってるwww
232デフォルトの名無しさん:2009/02/03(火) 14:09:51
計算しなければどうということはない
233デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/03(火) 15:19:50
>>227
VBに触れたから呪われたんだな
236デフォルトの名無しさん:2009/02/03(火) 16:04:45
>>234
ありがとうございます!
for文の中身1行で表せるんですね。
初期値表示と(double)(2-1)を2.0-1.0など軽く置き換えて完成しました。
237デフォルトの名無しさん:2009/02/03(火) 19:48:11
>>193
O(N^2)じゃなくO(NlgN)だ
238デフォルトの名無しさん:2009/02/03(火) 20:41:50
だいたい、プログラム入れてみるとxln(x)が定数なしで自己相関関数に一致してるくらいだな。
つまり、O(NlnN)だな。でも、NlogNだと思ってて、N^2だったってよりよくない?
239デフォルトの名無しさん:2009/02/03(火) 20:51:59
うん。
240デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/03(火) 21:25:50
キーボードから入力し(例  69.21° と 33.73° )
2バイト文字か?まずその入力ができるかが問題だ。
Alt+半角で全角打てるけど、(例 69.21 と 33.73)の間違えだと言ってくれ。
242デフォルトの名無しさん:2009/02/03(火) 21:37:58
>>241
すみません
半角です
243デフォルトの名無しさん:2009/02/03(火) 22:03:28
>>211のものですが、>>219をコンパイルしたら
和と差が計算できなかったのですが、どうすれば
いいでしょうか?

どなたか教えてください。
244デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/03(火) 22:23:43
分母: mom
分子: son
っていうネーミングセンスが素敵だ
246デフォルトの名無しさん:2009/02/03(火) 22:36:37
辞書片手に英語にしまくったら単語の意味を忘れて自分で読めないというのは聞かなくもないけれど、
日本語の一部を切り出して英語にするっていうのは新しい。
247デフォルトの名無しさん:2009/02/03(火) 22:40:47
248デフォルトの名無しさん: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デフォルトの名無しさん: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;
}
250248:2009/02/03(火) 22:57:35
degsubの符号の扱いが全然だめだった。>>248は取り下げます。
251デフォルトの名無しさん:2009/02/03(火) 22:58:00
>>243
そのコードはクズだ。捨てろ。
252デフォルトの名無しさん:2009/02/03(火) 23:00:11
[1] 授業単元:ループ
[2] 問題文(含コード&リンク):http://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デフォルトの名無しさん:2009/02/03(火) 23:01:15
>>244
そこで上書きして残りの積と商をどうするツモリだ。
254デフォルトの名無しさん:2009/02/03(火) 23:03:53
>>253
分母と分子に同じ数掛けてるから大丈夫
255デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/03(火) 23:16:46
どなたか>>134をお願いいたします。ググってもわかりません。。。
257デフォルトの名無しさん:2009/02/03(火) 23:21:21
>>256
一番上に書く名前が分かりません><

マジレスはお断りしておきます
258デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/03(火) 23:23:40
5秒で答えにたどり着いたけど
134は馬鹿なの?死ぬの?
260240:2009/02/03(火) 23:28:32
>>247-249
ありがとうございました
261デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/03(火) 23:50:17
263デフォルトの名無しさん:2009/02/03(火) 23:55:15
>>262
力作乙
だが、extention error だ
名前と実体が異なっている
264デフォルトの名無しさん:2009/02/04(水) 00:01:47
>>263
そんな突っ込みは想定していない。

OpenOfficeの操作覚えようかな……。
265デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/04(水) 00:56:37
>>172
コンソールアプリでいいんだよね?
言語はCとC++どっち?
267デフォルトの名無しさん:2009/02/04(水) 02:13:27
>>266
>[5] その他の制限: まだ基礎段階なので、なるべく簡単なプログラムがいいです。         画像の取り込みとかはせずに、文章で表示すればいいらしいです。 Visual c++がよくわからないので、よろしくお願いします
C++のWindowアプリケーションを望んでいるようには見えない。
求めてるのは”なるべく簡単”でしょ。
268デフォルトの名無しさん:2009/02/04(水) 14:27:20
[1] 授業単元: プロムラミング演習2
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8813.txt
 [3.1] OS: Windows
 [3.3] 言語:C言語
[4] 期限:2月5日まで

[5] その他の制限:すみません自力ではわかりません.ご指導お願いします
269デフォルトの名無しさん: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));
なんかちがう
270897です:2009/02/04(水) 14:51:10
すみません...
打ち間違いでした
printf("bit pattern =%s\n", bitpart(x,bit));
です.すみません
271デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/04(水) 15:00:15
>>271
早い返事ありがとうございます
助かりました
273897:2009/02/04(水) 17:01:19
[1] 授業単元: C言語
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8814.txt
 [3.1] OS: Windows
 [3.3] 言語:C言語
[4] 期限:2月5日まで

[5] その他:お願いします
274デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/04(水) 17:27:54
>>274
ありがとうございます!!
なんとかいけそうです
276デフォルトの名無しさん:2009/02/04(水) 17:46:14
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/04(水) 18:37:30
[1] 授業単元:数値解析
[2] 問題文(含コード&リンク):http://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デフォルトの名無しさん:2009/02/04(水) 18:38:16
[1] 授業単元: C言語
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8816.txt
 [3.3] 言語:C言語
[4] 期限:2月5日まで
[5] その他: 違うところで同様の質問をして,いろいろヒントをもらった
 のですが,いまいちわかりません.その時こちらを紹介されたので,
 どうかお願いします
281デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/04(水) 19:29:50
>>279
どんだけ丸投げだよ。
283デフォルトの名無しさん:2009/02/04(水) 19:37:05
丸投げスレなんだから当然だろ?


ってこれは・・・w
284280 :2009/02/04(水) 19:46:00
>>281
ありがとうございます
助かりました!!
285Rm: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の各成分のデータは時間に依存した種から与えられる疑似関数により自動生成する。

http://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デフォルトの名無しさん:2009/02/05(木) 00:52:15
287280 です:2009/02/05(木) 02:14:54
>>281 さんの方から解答をいただいたのですが
main関数の所がいまいちわかりません
できたらもう一度お願いします.
288デフォルトの名無しさん:2009/02/05(木) 02:24:30
>>287
わかりませんもなにも見たまんまpushしてpopしてるだけだと思うが
もう一度といわれてもこれ以外書きようがないと思うべ?
どこがどうわからないか考え直してきなさい
289280 です:2009/02/05(木) 02:39:14
push(21);
push(42);
これがよくわかりません
コンパイルしてもこれしかでないのですが・・・

mainは、任意個数の数字を入力させてそれをpushし、
EOFになったら逆にpopで値を取り出して画面に表示する
みたいな感じにしたいのですが・・
290デフォルトの名無しさん: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;
}
291280 です:2009/02/05(木) 03:03:11
>>290
言葉足らずですみません
夜遅くわざわざありがとうございます
292デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/05(木) 03:48:10
295285:2009/02/05(木) 04:09:48
>>294

ありがとうございます。よろしければ逆行列プログラムもお願いします。
296デフォルトの名無しさん:2009/02/05(木) 04:54:22
297285:2009/02/05(木) 05:24:02
>>296

このような時間帯にわざわざありがとうございます。
おかげ様で助かりました。
298279:2009/02/05(木) 06:58:42
>>282
>>283
確かにこれはひどいですよね…
1問でもいいのでお願いしたいです。
一応自分でもやっていますが、数学が苦手なもので…
299デフォルトの名無しさん:2009/02/05(木) 12:42:16
>>167です。
自己解決したので取り下げます。スレ汚し失礼しました。
300デフォルトの名無しさん:2009/02/05(木) 13:13:46
1] 授業単元: C言語
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8823.txt
 [3.1] OS: Windows
 [3.3] 言語:C言語
[4] 期限:2月6日まで

[5] その他:お願いします
301デフォルトの名無しさん:2009/02/05(木) 14:25:46
[1] 授業単元:C言語プログラミング
[2] 問題文:http://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デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/05(木) 15:18:39
300 の問題って リダイレクトじゃだめなのか?
304デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/05(木) 16:09:19
306 ◆g8eVFLrbyk :2009/02/05(木) 16:49:09
[1] 授業単元:C++言語プログラミング
[2] 問題文:http://www.s.kyushu-u.ac.jp/~z6st02in/repo2008z/repo2008kprob.html
問題2と3をおねがいします。
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C++言語
[4] 期限:明日まで
[5] その他の制限:与えられたプログラムを改造(付け足し)する
307suzuki:2009/02/05(木) 16:59:16
君は不可だ!
調査した上で厳正に処理するから首を洗っとれ
308302:2009/02/05(木) 17:09:27
>>305
あ、ホントだ。俺の間違ってたね。
309デフォルトの名無しさん:2009/02/05(木) 17:27:29
スレチですいません。
今日面接でプログラミングの手書きのテストをやってきました。
テスト終わって家に帰ってから効率のいいコードの書き方を思い出しました。
テスト中は時間のことが気になって思い出せずとりあえず動くコードで書きました。

テストの場合は白紙や書き途中で提出するくらいなら、
とりあえず動くコードで書いておけば特に問題はないですよね?
310デフォルトの名無しさん:2009/02/05(木) 17:30:05
宿題やテストの採点思想次第だわな
311デフォルトの名無しさん:2009/02/05(木) 19:25:48
>>309
「動かないよりマシ」って言って欲しいんだろうけど、
採点者が何を見ているか次第なんじゃね?

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

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

プログラマーなら「FizzBuzz問題」解けるよな?
http://pc11.2ch.net/test/read.cgi/prog/1209467166/
Fizz Buzz(ウィキペディア)
http://ja.wikipedia.org/wiki/Fizz_Buzz
どうしてプログラマに・・・プログラムが書けないのか?
http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm
312301:2009/02/05(木) 20:15:18
>>305
すみません。問題が間違ってました
正しくはhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8826.txtでした
313デフォルトの名無しさん:2009/02/05(木) 20:23:27
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
データファイル(http://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デフォルトの名無しさん: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;
}
315305: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の並びでないのでそのまま出力)
316305: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;
}
317301:2009/02/06(金) 00:46:55
皆さんありがとうございました
318デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/06(金) 05:07:28
>>318
> 二分法で用いる初期値は[a,b]= [-1,1]とせよ
その間に、解が二つある気がする。

> ニュートン法で用いる初期値は2つとも0とせよ。その際,1つの関数は
> 収束しない.収束しない場合は,求められないと分かった時点で計算を終了
> するように工夫せよ.また,そのときは以下のように表記せよ.
> sol : Not converge
> 収束しない場合は,なぜ収束しないのかをコメントとして書くこと.
オレの知らないニュートン法?
324デフォルトの名無しさん:2009/02/06(金) 05:54:45
>>313をやってみたんだけど
gccだと動作がおかしい
VCだと正常に動く
誰か原因を教えてくれ・・・・orz

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

VC
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8829.txt
325デフォルトの名無しさん:2009/02/06(金) 08:25:43
8828.c をVCに掛けてみたらどうなる。
326デフォルトの名無しさん:2009/02/06(金) 08:39:11
>>325
そのままかけてみたが正常に動作した

gccだと標準入力を促すところまで行くが
直後のsscanfでプログラムが終了してしまう
一応OSはXPです
327318: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/06(金) 12:48:40
>>327
> 二分法のアルゴリズムは
つまり、1セットの初期値からは、一つの解しか見つからないし・・・
xの式、f(x)=0になるxを探すワケだけど、f(a)とf(b)の符号が逆じゃなきゃいけないんだよね。
区間に二つ解があるということは、つまり、f(1)とf(-1)の符号はおんなじなわけだけど・・・?

> という感じらしいです。ニュートン法は反復の限界値を決めて(100回くらいに)
> 反復回数がそれを超えたら停止してほしいのですが・・。
初期値が二つといっているのだから、解の一つごとに初期値をおくように思うが、両方0にしろと言う。
オレの知っているニュートン法ではないようだ。
330デフォルトの名無しさん:2009/02/06(金) 13:28:17
にぶんほう?
331デフォルトの名無しさん:2009/02/06(金) 14:24:29
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク): http://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] 問題文(含コード&リンク): http://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] 問題文(含コード&リンク): http://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デフォルトの名無しさん:2009/02/06(金) 15:25:11
>>334
> 以上ですが、ソースコードのみでもかまいません
ソースコード以外だと、何が付くの?
336デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/06(金) 15:51:08
338デフォルトの名無しさん:2009/02/06(金) 15:58:57
>>337
どうしようもない時以外に、goto使う奴は
どうしようもない奴だと思うぞ。

elseで全部つなげば解決じゃないですか。
339デフォルトの名無しさん:2009/02/06(金) 16:13:48
>>331
素数を出すアルゴリズムがアレなのでめっちゃ遅いけど。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8834.c
340デフォルトの名無しさん:2009/02/06(金) 16:23:22
341デフォルトの名無しさん:2009/02/06(金) 16:24:18
>>338
しーっ・・・
342338:2009/02/06(金) 16:30:32
>>341
これだけは言わせてくれ。>>340ネタ乙。
343339:2009/02/06(金) 16:31:29
問題勘違いした…。
アジア地区予選の問題やってたorz
344デフォルトの名無しさん:2009/02/06(金) 16:40:36
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] その他の制限: 特になし
346313:2009/02/06(金) 20:57:11
>>324
>>328
324さんのプログラムを328さんの言うように修正してみたところ
データを読み込み、表示されるところまではいくのですが全ての数値が0になってしまいます。
どうすればいいでしょうか。。。
347デフォルトの名無しさん:2009/02/06(金) 22:06:23
>>327
ニュートン法で100回も反復するとか時間の無駄だからな
初期値が悪くてもせいぜい10回だ
348デフォルトの名無しさん:2009/02/06(金) 23:45:25
>>331
なんとなく、計算できているような気がする。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8838.c
349デフォルトの名無しさん:2009/02/07(土) 04:11:05
>>348
関数とか要らないことに気づいたので、大分、短くなった。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8839.c
350325: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デフォルトの名無しさん:2009/02/07(土) 04:21:55
>>349
すごい短縮だな。(2階層くらいで関数化したら、もっと打ちやすかったんじゃ)
でも、元ファイルc++だろ? >>331はC指定かかってるよ。
352デフォルトの名無しさん:2009/02/07(土) 04:33:39
>>351
C++ではないよ。-std=c99つけないとコンパイルできないけど。
353デフォルトの名無しさん:2009/02/07(土) 04:48:34
>>352
「-std=c99つければ、gccでもコンパイルできるよ」かな?
354325: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 悪い、間違えた。君の言うとおりだ。
355325: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デフォルトの名無しさん:2009/02/07(土) 13:24:44
>>356
> なんかテストいけそうな気がする
ありえねー・・・
359325:2009/02/07(土) 14:50:36
>>326
gcc -O3 8828.c -o 8828.exe
360デフォルトの名無しさん:2009/02/07(土) 16:34:38
>>356
あるとおもいます。
361デフォルトの名無しさん:2009/02/07(土) 16:48:39
??
362デフォルトの名無しさん:2009/02/07(土) 17:06:55
説明しよう!
>起 >>356 いけそうな気が!
>承 >>358 ありえねー・・
>転 >>360 あると思います。
>結 >>361 ??
??に入る言葉を(ry
363デフォルトの名無しさん:2009/02/07(土) 17:11:40
詩吟?
364326:2009/02/07(土) 18:31:45
>>325
ありがとうございます。
Rankingの表示が出ないんですが簡単に治せますでしょうか。
365326:2009/02/07(土) 18:42:21
return plにしたらできました!ありがとうございます。
366325:2009/02/07(土) 18:55:07
え?return pl; って、何行目?参考までに。
367326:2009/02/07(土) 19:58:10
50行目ですかね。。あれ違いますか><
368325:2009/02/07(土) 20:17:42
Ranking#の値が、合ってれば良いけれど。
> Input A Student Number: 14【Enter】
> Ranking : #269 /*最高得点は1位とせよ.*/

尚こちらでは、>>350 上)の修正で直った。
369324:2009/02/07(土) 20:24:17
こちらでも>>350の上の修正で
正常に動作することが確認できました

ちなみにどうして修正前では
正常に動作しなかったのか
理由は分かりますか?
370325:2009/02/07(土) 20:26:57
わからない。回避方法は、ステップ実行してて見つけた。
371324:2009/02/07(土) 20:32:53
そうですか
お手数おかけしました
ありがとうございました
372326:2009/02/07(土) 21:28:36
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8842.txt
このようにして実行するとRankingがすべて0になるんで、52行目のreturn -1;を
return -pr;に変えたところRankingが表示されました。(14のとき269位)
これで正常動作かなーと思ったんですが
例えば生徒番号1の動作みたところ表示される数値間違ってませんか?
373デフォルトの名無しさん:2009/02/07(土) 21:38:07
return pl;を入れてなくて終了してたのは、
スタック領域のオーバーフローでセグメンテーション違反。
374デフォルトの名無しさん:2009/02/07(土) 21:47:02
>>372
修正したソースを見せて。
375326:2009/02/07(土) 21:52:26
376デフォルトの名無しさん:2009/02/07(土) 23:22:19
>>375
mark_sortが変。
クイックソートやりたいんだろうけどできてない。
xを基準にして大小をわけてるけど
xがその境界にきてないから変なことになる。

mark_sortやめてqsort使ったら
377デフォルトの名無しさん:2009/02/07(土) 23:36:39
>>376
こっちでは上手く動くようなのだけど、>>375のソースとの違いってあるかな?
http://www1.cts.ne.jp/~clab/hsample/Sort/Sort9.html
378324:2009/02/07(土) 23:54:41
>>376
pivotの選び方に欠陥があることは承知しているが
最も単純な方法でクイックソートを作ったつもり

qsortを使わなかったのは問題にクイックソートを
使うよう指定されていたのでアルゴリズムを理解していることを
示す必要があると思ったから
その必要がなかったら確かにqsort関数を使った方が
高速にできると思う
379デフォルトの名無しさん:2009/02/08(日) 00:26:38
>>377
double total(Student st); で3個の数値を合計している所が違う(追加)。
380デフォルトの名無しさん: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
( ´_ゝ`)
381379:2009/02/08(日) 02:08:20
>>380
while(1) はそのままにした。めんどうなので。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8844.txt
382379: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デフォルトの名無しさん:2009/02/08(日) 02:27:13
>>381
一回呼び出し側の領域に入れると問題なしなのか!
384326:2009/02/08(日) 03:09:16
できました!
色々とみなさんありがとうございました。
385デフォルトの名無しさん:2009/02/08(日) 03:25:16
>>382
よく分からんが、ebpレジスタ同士の比較じゃないと上手く動作しないってこと?
386385:2009/02/08(日) 03:35:07
これか……
http://0xcc.net/blog/archives/000164.html
ほとんどバグじゃねーか
387デフォルトの名無しさん:2009/02/08(日) 10:40:59
このサイト前半おかしくね?
53*100=5299.9999999..になることだってあるだろ
388デフォルトの名無しさん:2009/02/08(日) 11:42:07
>x86 特有のちょっとおもしろい現象
389デフォルトの名無しさん:2009/02/08(日) 12:09:34
>>387
もう一度読んできて。
390デフォルトの名無しさん:2009/02/08(日) 13:02:12
>>381
xに従ってplとprを移動しているループは、与えられた
st[left,right]を飛び出す可能性があるがその問題は放置?
391デフォルトの名無しさん:2009/02/08(日) 13:18:07
ショートカットして、>>380 が正しいと?
392sage: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/08(日) 17:04:39
>>392
星型の条件が分からん。
正確な五芒星なの?
396デフォルトの名無しさん:2009/02/08(日) 17:27:59
正確な五芒星なら最初の2点分だけで面積判る罠
397デフォルトの名無しさん:2009/02/08(日) 17:46:19
座標はこれでおねがいします
http://maps.google.co.jp/maps?ll=41.796944,140.756643&t=h&z=16
398デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/08(日) 17:54:40
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を入れたいのですが、どのようなループ文を書いたらいいのでしょうか?

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8847.txt
401デフォルトの名無しさん:2009/02/08(日) 20:44:44
>>400
スレちがい。
どこぞ、質問スレへ行け
402デフォルトの名無しさん:2009/02/08(日) 20:57:03
>>401
申し訳ない。
まんま丸投げじゃないと駄目なんですね。
失礼しました。
403デフォルトの名無しさん:2009/02/08(日) 21:01:55
>399さん

記載ありがとうございます。
大変もうしわけありませんが、アップしていただいたURLにアクセスできないので、
本文中に記載していただけないでしょうか?
404デフォルトの名無しさん:2009/02/08(日) 21:21:26
>>398
ごちゃごちゃしてるけど。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8848.txt
#pragma warning(disable : 4996)の部分は消して使ってね
405399:2009/02/08(日) 21:53:01
tp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8845.txt
406デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/08(日) 22:03:19
連投すみません。392です。
実行は
& ./a.exe input.txt
の間違いです。
「./」を書き入れるのを忘れました^^;
408デフォルトの名無しさん:2009/02/08(日) 22:14:55
>>406
プログラムで指定されているファイル名は、in.txtだからねえ・・・
409デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/08(日) 22:23:49
int main(int argc, char* argv[]){
か。ごめん!
411デフォルトの名無しさん:2009/02/08(日) 22:28:49
408さんありがとうございます><助かりました。
412デフォルトの名無しさん:2009/02/08(日) 22:42:10
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク): http://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デフォルトの名無しさん:2009/02/08(日) 22:46:32
>>412
「重複数」の定義は?
414デフォルトの名無しさん:2009/02/08(日) 22:52:00
>>412
クソな課題だな。

int a[x]をmallocで確保してa[ key % x]++して
全部終わったらa[k]が2以上の数を数えてxを掛ける
これの繰り返し?上限は「入力されたうちの最大値+1」か?
415デフォルトの名無しさん:2009/02/08(日) 23:02:27
>>414
それだとx=1が常に最適になるので、本当のクソになる。
a[k]の大きさも加味すべきだろう。
416デフォルトの名無しさん:2009/02/08(日) 23:09:18
>>413>>414
何も言われてないので分からないです。
417デフォルトの名無しさん:2009/02/08(日) 23:59:23
>>412
keyは一意でいいんだよね?
418デフォルトの名無しさん:2009/02/09(月) 00:15:55
>>412
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8850.txt
バケットの要素数count[i]が2以上であるバケットiについて、Σcount[i]!/2を「要素数」とした。count[i]!/2は、バケットから2要素を選ぶ組み合わせ数。
また、バケット数の上限は、(最大のkey)+1とした。
419418:2009/02/09(月) 00:23:02
ごめん、思いっきり勘違いを書いた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8851.txt
バケットから2要素を選ぶ組み合わせ数はcount[i]*(count[i]-1)/2だね。
420デフォルトの名無しさん: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行以内
★再帰呼び出しは使用禁止
★グローバル変数使用禁止
★パス名の長さは制限無しとする
初級コースが満杯なので、中級コースをとって
しまったら、課題レポートが自分には激ムズでした。
自分でやってみたら収拾がつかなくなってしまいました。
期限までわずかに時間はありますが、できれば一両日中に何と
かお願いします。
421デフォルトの名無しさん:2009/02/09(月) 03:48:45
422デフォルトの名無しさん:2009/02/09(月) 04:01:05
>>420
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8853.txt
・malloc, reallocでNULLが帰ってきたときのエラー処理をしていない
・標準入力から読み込んで標準出力に出力するだけ
勝手に補ってくれ。
423デフォルトの名無しさん:2009/02/09(月) 05:34:00
>>420
.../test ==> /test
./sample/test/...../test==>/test
この2つは一般的な処理ではないので、仕様を出さないと分からん
* 「/\.{3,}/にマッチするものが出たらrootとみなす」と予想
* 因みに、UN*Xでは"..."(dot*3)というファイル名は有効

>>421-422
.hoge      .foo/bar  ..foo/bar  ...foo/bar
foo/.bar    foo/..bar  foo/...bar
///foo/bar  foo///bar
とかが一部おかしい
424デフォルトの名無しさん:2009/02/09(月) 07:44:01
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8854.txt

>>423の指摘を受けて修正してみた。今度こそそれなりに動くのではなかろうか。
スマートじゃないし、見にくいがご了承願いたい。

なお、ドットの数が3つ以上続く場合については、
ドットの数だけ遡る(/foo/bar/baz/.../qux → /foo/qux)と推測して作ってある。

>>423
ドットで始まるファイル(ディレクトリ)名の存在と、
スラッシュが続いたときの処理をすっかり忘れてた。
こんなんだからバグが出るんだろうな…。
425デフォルトの名無しさん:2009/02/09(月) 08:38:35
>>420
求められてる解答とは多分違うし、かなり強引だけど、
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8855.c
426デフォルトの名無しさん:2009/02/09(月) 09:03:19
>>419
無事動作しました。ありがとうございました。
427デフォルトの名無しさん:2009/02/09(月) 14:20:30
[1] 授業単元:並列プログラミング
[2] 問題文(含コード&リンク):
http://www.dotup.org/uploda/www.dotup.org26612.zip.html
[3] 環境
 [3.1] OS: マック
 [3.3] 言語: c
[4] 期限: 2月9日23:59まで
[5] 補足:
すみません。。無茶苦茶難しい問題です。添付のサイトにあるプログラムはアイディーエルで
書かれたコードです。実行すると確かに凄い動画を再生出来ましたが、これを並列プログラミングで
書けという難題を出されて手が出せずに困っています。。こうなったら少しでも何か書いて提出したい
ので、少しでも何か動作すればいいというレベルなのですが、どなたかわかる方いらっしゃいます?
428デフォルトの名無しさん:2009/02/09(月) 14:54:27
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8856.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C言語
[4] 期限:2月10日23:59まで
[5] その他の制限:すみません。よろしくお願いします。
429デフォルトの名無しさん:2009/02/09(月) 16:06:07
>>428
while(1){
int temp = floor(t*10);
int HH,MM,SS,MS;
HH=temp/36000;
temp%=36000;
MM=temp/600;
temp%=600;
SS=temp/10;
MS=temp%10;
//
printf("%02d:%02d:%02d:%01d00\r",HH,MM,SS,MS);
430デフォルトの名無しさん:2009/02/09(月) 16:12:03
>>427
IDLもMPIもしらねーよ
431デフォルトの名無しさん:2009/02/09(月) 16:40:37
432デフォルトの名無しさん:2009/02/09(月) 20:22:34
>>428 CPU 100%なので、Win32 App 作ってみた。
433デフォルトの名無しさん:2009/02/09(月) 20:36:30
[1] 授業単元: ゲームPG
[2] 問題文(含コード&リンク): 下のほうに詳しく
[3] 環境
 [3.1] OS:WindowsXP SP3 32bit
 [3.2] コンパイラ名とバージョン:VS2008
 [3.3] 言語:C/C++/
[4] 期限 : 木曜日まで

ランダムな値を取得する関数を作れと言われました

使い方

サイコロを振るなら
int dice = getRandom(6) + 1;

20%の確立で
if(getRandom(100) < 20) {
}

と言う感じに指示が出されました

宜しくお願いします
434デフォルトの名無しさん:2009/02/09(月) 21:16:39
int getRandom(int n) { return rand() % n; }
435デフォルトの名無しさん:2009/02/09(月) 21:17:09
>>433

int getRandom(int imax)
{ return rand()%imax; }

int getRandom(int imax)
{ return (int)((double)rand()*imax/(1.0+RAND_MAX)); }

お好きな方でどうぞ
436デフォルトの名無しさん:2009/02/09(月) 21:17:51
>>433
これは罠だな
MT法を実装するのが求められてる答えと見た
437デフォルトの名無しさん:2009/02/09(月) 21:19:44
>>434-435
ロケットスタジオにようこそ
438デフォルトの名無しさん:2009/02/09(月) 21:37:14
1] 授業単元:プログラム
[2] 問題文(含コード&リンク): 下記
[3] 環境
 [3.1] OS:WindowsXP SP3 32bit
 [3.2] コンパイラ名とバージョン:VS2008
 [3.3] 言語:C/C++/
[4] 期限 : 水曜日まで
*問題文
二次元配列n×nにおいて「0」「1」3」の三種類の数字が入っている。
その中で「1」のみを検出するプログラムを作りたい。

条件:列において「1」は必ず連続している。
例:
「0」「3」「1」
「1」「0」「0」
「1」「1」「1」
一列目:○
二列目:○
三列目:×

条件では無いが、レスポンスの早いプログラムを意識して作ること。



という問題です。宜しく御願いします。
439デフォルトの名無しさん:2009/02/09(月) 22:03:55
→ int i,j;
の様に「→」が表示されるようになってしまったんですが
これをなおすにはどうしたらいいですか?「→」は青っぽいやじるしです

表示の見栄えの問題なんですが これってどうやったら
なおるの?
440デフォルトの名無しさん:2009/02/09(月) 22:07:04
まず使っているエディタを言え
441デフォルトの名無しさん:2009/02/09(月) 22:07:58
OSとかエディタも書いてくれないと分からん
あとスレ違い
442デフォルトの名無しさん:2009/02/09(月) 22:14:37
VS 2008です
443デフォルトの名無しさん:2009/02/09(月) 22:30:04
>>438
nが不定なのに、行番号を漢数字で出すのは難しすぎだな
444デフォルトの名無しさん:2009/02/09(月) 22:42:34
漢数字に変換するだけならそんなに難しくないような・・・
445デフォルトの名無しさん:2009/02/09(月) 23:54:57
スレの意図とは微妙に違うのですが質問です

先日初めてプログラムの宿題がでましてその内容が簡単なグラフ描画をしてそれをプリントというものなのですが
プログラムの宿題というものはソース提出ではなくプリント出力機能をを自分で搭載してそれを提出汁というものも結構あるのでしょうか?
446デフォルトの名無しさん:2009/02/10(火) 00:07:47
そんなもん決まりはない。
教官に聞け。
447420:2009/02/10(火) 01:30:47
>>421-425
どうもありがとうございます。
参考にさせて頂くつもりですが、
マルチバイトキャラクターというんですか?それにも対応しなければ
ならないらしく、そのような場合はどうすればいいんでしょうか?
448デフォルトの名無しさん:2009/02/10(火) 02:04:55
>>438 パフォーマンスとかプログラムとか曖昧。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8859.txt
449デフォルトの名無しさん:2009/02/10(火) 02:57:40
[1] 授業単元:(復習課題) 分岐 繰り返し 一次元配列 2重ループ 2次元配列 文字列(これらどれかを使って解け)
[2] http://www.pref.fukushima.jp/pc-concours/2008/03/pdf/2006honsen.pdf 問1 問8
[3] 環境
 [3.1] OS:Windows
 [3.2]visual C++
 [3.3] 言語:C++
[4] 期限: 2009年2月11日まで
[5] main関数を使いそれ以外にもユーザ定義関数を1つ以上作成すること。

450433:2009/02/10(火) 07:36:03
ありがとうです
451デフォルトの名無しさん:2009/02/10(火) 08:48:16
452デフォルトの名無しさん:2009/02/10(火) 10:32:09
453デフォルトの名無しさん:2009/02/10(火) 14:12:01
>>447
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8865.txt
何も考えずにワイド文字で取り扱うように変えてみた。これじゃ駄目?
454427:2009/02/10(火) 14:42:20
すみません。やっぱりMPIはマニアックでしょうか。並列でなくても、シリアルでも構いません。
C言語でどなたかIDLと同じ内容のコードを書ける方どなたかお願いします
455デフォルトの名無しさん:2009/02/10(火) 15:16:55
>>449 問8
>>452はスマートだと思ったが、仕様を満たしてないので
俺のへっぽこソースを上げてみる
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8867.cpp
456452:2009/02/10(火) 15:40:41
同じ停留所の事なら、エラーにした。
> また、一度バスに乗車したら途中下車はしないものとします。同じ停
> 留所を乗車停留所、降車停留所に指定することはありません。
// その他
// 乗車する停留所と下車する停留所が同じ場合は、その停留所のみを出力する
457452:2009/02/10(火) 16:22:55
>>455 C++のソースは見てないが、左回りは禁止のはず。
458デフォルトの名無しさん:2009/02/10(火) 19:21:02
[1] 授業単元:演習
[2] 問題文(含コード&リンク):
2X2行列が安定であるかどうかを判定する関数を作れ.
入力はdouble型の二次元配列とする.

安定条件は,行列の固有値の実部が負であるとき
[3] 環境
 [3.1] OS: LINUX
 [3.3] 言語: C
[4] 期限: 2月10日24時
459デフォルトの名無しさん:2009/02/10(火) 20:19:43
>>458
線型代数の基礎から教えてくれ
460デフォルトの名無しさん:2009/02/10(火) 21:12:10
>>458
にわか勉強で書いてみた。
線型代数の素養がないもんだから、
入力と答えの関係が正しいのかどうにもわからん。

#include <stdio.h>
#include <math.h>
int isStable(double l[2][2]) {
double a = 1;
double b = (-l[0][0]) + (-l[1][1]);
double c = l[0][0]*l[1][1] - l[0][1]*l[1][0];
double d = pow(b, 2)-4*a*c;
int out = 0;
if (d > 0) {
if ( (0 > -b + sqrt(d)) && (0 > -b - sqrt(d)) ) {
out = 1;
}
} else {
if (0 > -b) {
out = 1;
}
}
return out;
}
int main() {
//入力
double l[2][2] = {{1, 0},
{0, 1}};
char *s = (isStable(l)?"stable":"unstable");
printf("%s", s);
return 1;
}
461デフォルトの名無しさん:2009/02/10(火) 21:53:45
>>460
ぱっと見、合ってそうだけど
>if (0 > -b)
この書き方はねーよw
462デフォルトの名無しさん:2009/02/10(火) 22:21:33
等価演算子ならたまに見るな
463デフォルトの名無しさん:2009/02/10(火) 22:22:21
>>461
0<=b ってこと?
やー、気にはなったんだが、
解の公式の定義に従って書いたほうが可読性が高いかと
464デフォルトの名無しさん:2009/02/10(火) 22:27:10
>>455
入力
8 7
出力
0 1 2 3 4 5 6 7

ってなる。
465デフォルトの名無しさん:2009/02/10(火) 22:46:49
>>463
それでもいいけど -b < 0 じゃね?数直線的に考えて

あと正常終了なのにmainが1を返すのはおかしいな
このスレ的には二つともどうでもいいことだけど
466デフォルトの名無しさん:2009/02/10(火) 22:50:52
>>463
なるほど!数直線的にか。確かにその方が良いな。
正常終了は0だっけか。C久々だから忘れてた。さんくす。
467452:2009/02/10(火) 22:55:10
// int busstop[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 5, 4, 3, 2, 1, 0};
int busstop[24] = {0,1,2,3,4,5,6,7,8,9,5,4,3,2,1,0,1,2,3,4,5,6,7,8};
16 を 24 に全置換でオッケー。 ロジックが良いから?
468デフォルトの名無しさん:2009/02/11(水) 00:39:25
>>449
問8 できるだけシンプルにしてみた。

#include <stdio.h>
void myfunc(int, int);
int main(){
int x, y;
scanf("%d %d", &x, &y);
myfunc(x, y);
}
void myfunc(int x, int y){
int t, i;
t = 1;
i = x;
if(i<=5)
t *= (x < y)? 1: -1;
putchar(i+'0');
while(i!=y){
i += t;
if(i==0)
t *= -1;
if(i==10){
i = 5;
t *= -1;
}
putchar(' ');
putchar(i+'0');
}
putchar('\n');
}
469デフォルトの名無しさん:2009/02/11(水) 02:29:14
>455
入力 scanf
出力 printf
に直せませんか?
470デフォルトの名無しさん:2009/02/11(水) 03:04:58
直せますよ?
471デフォルトの名無しさん:2009/02/11(水) 03:58:53
472デフォルトの名無しさん:2009/02/11(水) 11:21:41
[1] 授業単元:
[2] 問題文:
n個の引き出しからなるタンスがある。最初各引き出しにはいくつかボールが入っている。
i番目の引き出しを開けるとそれまで入っていたボールのうち1つだけが音もなく1段下の引き出しに落ち、その後のボールの個数だけが見える。
開けた引き出しは次の引き出しを開ける前に閉める。
空の引き出しを開けてもボールは下に落ちない。
ただし最下段(0段)の引き出しに関しては、もともとあったボールの数が見える。
このたんすに最初に入っていたボールの個数を知るアルゴリズムを示せ。アルゴリズムがわからないものは日本語で説明してもかまわない。
(できるだけ引き出しを開ける回数が少ないもの)
i番目の引き出しを開けたときに見えるボールの数はopen(i)という関数でわかるとする。
[4] 期限:2009年2月12日まで

プログラミングというかアルゴリズムの問題なんだけど
誰かわかるひといる?
お願いしますm(__)m
473デフォルトの名無しさん:2009/02/11(水) 11:32:22
>>472
上から順に見ていって見えたボールの数の総和でおk
474デフォルトの名無しさん:2009/02/11(水) 13:01:05
いやそれじゃだめだろ
1個しか入ってない段どうなんだよ
475デフォルトの名無しさん:2009/02/11(水) 13:09:44
>>474
べつに1個の段があっても問題ないように思う。
数え間違う具体例出せる?
476デフォルトの名無しさん:2009/02/11(水) 13:14:43
上から
1
1
1
0

0
0
0
3
見分けつかなくね?
477デフォルトの名無しさん:2009/02/11(水) 13:20:28
>>474
>このたんすに最初に入っていたボールの個数
と言うのは、タンス全体で何個と言う意味に見えるが、
「最初に」と言うのは、暗に各段に入っていた数と言っているようにも思える。


ボールの総数を数えるなら、>>473の言うように上から開けていく事で全部の段を調べればわかる。

各段の個数と言うことになると、
一番下の段を開けて個数を確認、
一つ上の段を開けて個数を確認、
 一つ以上のボールがあれば、元の数は+1。
 0個なら、下の段を開けてボールが増えているか確認。
もう一つ上の段を開けて・・・
と繰り返してゆくのかな?
478デフォルトの名無しさん:2009/02/11(水) 13:35:54
問題文の不備だな。
「それぞれの段に」が省略されたら全体でいくつかと考えるほうが自然に見える。
だがそれでは、出題の意味が無い。
479デフォルトの名無しさん:2009/02/11(水) 14:55:36
最初に各引き出しごとに何個入っていたかを知るアルゴリズム
みたいです。
説明不足すみません
480デフォルトの名無しさん:2009/02/11(水) 14:57:14
答えはフローチャートに、書いて提出しても良いて書いてないか?
> 0個なら、下の段を開けてボールが増えているか確認。
減っているか同じか、どっちかしかないだろう。
> もう一つ上の段を開けて・・・
二つ上の段をあけて0個なら、下の段を開けたいところだが、0個に決まってる。
481デフォルトの名無しさん:2009/02/11(水) 15:00:16
>>480
> 減っているか同じか、どっちかしかないだろう。
一番下の段は減らないから、これを使って再帰的に確認するんじゃね?

> 二つ上の段をあけて0個なら、下の段を開けたいところだが、0個に決まってる。
順繰りにあけて、一番下の段まで送る。
482デフォルトの名無しさん:2009/02/11(水) 15:41:09
[1] 授業単元:応用プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8869.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: cygwin?
 [3.3] 言語: C++
[4] 期限: 無期限
[5] クラスをあまり理解していないので指摘していただきたい。

ここまで出来ているのですが(空欄(a)はクラス全体です)、かなりあてずっぽで書きました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8870.txt

0128.cpp: In function `int main()':
0128.cpp:44: error: no matching function for call to `Record::Record()'
0128.cpp:10: note: candidates are: Record::Record(const Record&)
0128.cpp:22: note: Record::Record(std::string, int, double, double)
と言うエラーが出てきます。

data[num++]=Record(name,age,rs,rl) から混乱してきています。
出来れば回答例を頂きたいです。


483デフォルトの名無しさん:2009/02/11(水) 16:03:33
>>482
Record data[max_num];
ここでデフォルトコンストラクタを呼ぼうとしてるけど、
コンストラクタは Record(string ,int ,double ,double );
しかないので動かないということ
484デフォルトの名無しさん:2009/02/11(水) 16:04:39
>>482
英語読めないの?
> 0128.cpp:44: error: no matching function for call to `Record::Record()'
とあるように、Record data[max_num]; のときに必要な Record::Record() が無いのが問題。
だから、特に何もしないデフォルトコンストラクタでも用意してやればいい。

それから、このスレは丸投げ専用なので質問は質問スレで。
485480:2009/02/11(水) 16:29:12
>>472
> 各段の個数と言うことになると、
1. 一番下の段を開けて個数を記録。(n=0)
2. 一つ上の段を開けて個数を確認。(n=n+1)
2.1. 一つ以上のボールがあれば、元の数は+1。 2. に戻る。
2.2. 0個なら、下の段を開ける。
2.2.1. 一番下の段なら、個数を確認して、2. に戻る。
2.2.2. 一つ以上のボールがあった段なら、個数を確認。 2. に戻る。
2.3.3. 0個の段だったら、2.2. に戻る。
3. 上の段が無いなら終了

2.2.1. 一番下の段で個数が増えていたら、2.2 ではもとは1個有った。
2.2.2. 途中の段で個数が同じだったら、2.2 ではもとは1個有った。
486デフォルトの名無しさん:2009/02/11(水) 16:37:46
>>483
>>484
即レス感謝いたします。

では、丸投げいたしますのでどなたか完璧な回答をお願いいたします。
mainは変えないで、mainに沿ったクラスを作成するという問題です。
487デフォルトの名無しさん:2009/02/11(水) 17:24:42
488デフォルトの名無しさん:2009/02/11(水) 17:37:13
>>487
せっかく書いていただいたのですが、#include<utility>は使えないです。
お手数おかけします。
489デフォルトの名無しさん:2009/02/11(水) 18:05:54
>>488
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
490デフォルトの名無しさん:2009/02/11(水) 19:50:56
>>489
すいません、言葉足らずでした
491デフォルトの名無しさん:2009/02/11(水) 23:51:45
[1] 授業単元:
[2] 問題文(含コード&リンク): 西暦n 年がうるう年か、平年かを判別する。数値がうるう年だったら"leap year"、平
年だったら"ordinary year"と表示する。
数値は次の6つを用意する。int 型配列変数に格納しておくこと。
1740, 1950, 1984, 1998, 2000, 2008
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland C++
 [3.3] 言語:C
[4] 期限: 2月14日
[5] その他の制限: #include<stdio.h>でお願いします。
492デフォルトの名無しさん:2009/02/12(木) 00:39:58
>>491

#include <stdio.h>
int main()
{
int i,bLeap;
 int nYear[6] = {1740,1950,1984,1998,2000,2008};
for( i=0; i< 6; ++i )
{
if( nYear[i] % 400 == 0){bLeap = 1;}
else if( nYear[i] % 100 == 0){bLeap = 0;}
else if( nYear[i] % 4 == 0){bLeap = 1;}
else{ bLeap = 0;}

if( bLeap == 1){printf("%d leap year\n",nYear[i]);}
else {printf("%d ordinary year\n",nYear[i]);}

return 0;
}
493デフォルトの名無しさん:2009/02/12(木) 01:27:23
>>492
ありがとうございます。ですがbLeapというのを初めて見ました。
習っている範囲を書き忘れていてすいません;
変数、制御構造(while if for switch break等)、文字と文字列くらいまで勉強しました。
bLeapを使わないやり方も教えていただけないでしょうか。
手間をとらせてしまってすいません;
494デフォルトの名無しさん:2009/02/12(木) 01:29:59
>>493
釣りかマジか?
495デフォルトの名無しさん:2009/02/12(木) 01:30:05
>>492
int main() (プ
int nYear[6] = {1740,1950,1984,1998,2000,2008}; (プ
for( i=0; i< 6; ++i ) (プ
496デフォルトの名無しさん:2009/02/12(木) 01:31:55
そんなに屁こくなよ、臭いだろw
497デフォルトの名無しさん:2009/02/12(木) 01:32:25
>>494
本当です;無知ですいません;
498デフォルトの名無しさん:2009/02/12(木) 01:32:50
変数名に習うもなにもない
499デフォルトの名無しさん:2009/02/12(木) 01:37:07
半分寝かけてて頭回ってませんでした;
変数名ですから何でもいいですもんね・・お騒がせしましたorz
500デフォルトの名無しさん:2009/02/12(木) 01:47:33
[1] 授業単元:
[2] 問題文(含コード&リンク): 指定された日時の月齢を計算し、その日の月の塑望の様子をグラフィック表示する。
[3] 環境
 [3.1] OS: Windows / Linux
 [3.2] コンパイラ名とバージョン: 特になし
 [3.3] 言語: C
[4] 期限: 2月14日
[5] その他の制限: png/jpeg等のファイルで出力するのではなく画面上に描画してください
501デフォルトの名無しさん:2009/02/12(木) 01:55:31
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 最大8桁の整数を3つ入力させ、int型の配列にそれぞれ格納する。
入力終了後、3つの数値の和を求め出力するプログラムを作成。
ただし9桁以上の文字列が入力された場合は、先頭から8文字までを有効とし、9 文字目以降を無視する。また、負の数が入力された場合はエラーメッセージを表示しプログラムを終了する。
[3] 環境
 [3.1] OS: Windows vista
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 今週中
[5] その他の制限: 負の数が入力された以外に、整数以外が入力された場合・改行のみの入力の場合もエラーと表示させる。
502デフォルトの名無しさん:2009/02/12(木) 03:57:44
503デフォルトの名無しさん:2009/02/12(木) 05:37:07
504デフォルトの名無しさん:2009/02/12(木) 06:06:19
[1] 授業単元:プログラミング演習
[2] 問題文 データを2次元配列のデータを読み込んで ソート後別ファイルに保存すること だったのですが
      以下のプログラムを提出したところ ポインタを使ったものも作るように言われました。
2次元配列とポインタの関係が分からないためお願いします。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc,char* argv[])
{
int i,j,k,n;
double x0,y0;
double v[10000][3],x[10000][3];
double t0,t,h,x1,X=0,Y=0;
FILE *fp1,*fp2;
double temp[3];

if((fp1 = fopen(argv[1],"r"))==0)
{
printf("ファイル %s をオープンできません。\n",argv[1]);
exit(-1);
}
505デフォルトの名無しさん:2009/02/12(木) 06:07:28
for(i=0;i<10000;i++)
{
fscanf(fp1,"%lf",&x[i][0]);
fscanf(fp1,"%lf",&x[i][1]);
fscanf(fp1,"%lf",&x[i][2]);
}
fclose(fp1);

for (i = 0; i < 10000; i++) {
for (j = 9999 ; j > i; j--) {
if (x[j - 1][2] > x[j][2]) {
for(k=0; k<3;k++){

temp[k] = x[j][k];
x[j][k]= x[j - 1][k];
x[j - 1][k]= temp[k];
}
      }
    }
  }


506デフォルトの名無しさん:2009/02/12(木) 06:07:50
if((fp2 = fopen(argv[2],"w"))==0)
{
printf("ファイル %s をオープンできません。\n",argv[2]);
exit(-1);
}
for(i=0;i<10000;i++)
{
for(j=0;j<3;j++)
{
fprintf(fp2," %lf ",x[i][j]);
}
fprintf(fp2,"\n");
}

fclose(fp2);
return 0;
}
    
[3] 環境[3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C/
[4] 期限: 本日午後5時まで
[5] その他の制限: ソートの方法はバブルソートを用いる
507デフォルトの名無しさん:2009/02/12(木) 08:35:04
6時間以上試行錯誤しても、進展が無いので質問させていただきます。

[1] 授業単元:-----
[2] 問題文(含コード&リンク):バイナリファイル(unsigned short(2バイト)型の数値が4096*2個入)を、10進数でテキストファイルに書き出す。

コード
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8874.txt
ファイル
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8875.lzh

途中ファイル名の入力を促されますが以下の通りです。
date ->081128
no ->81
how many files~~ ->1


[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: c
[4] 期限:
[5] その他の制限: 特にありません

読みにくいコードだと思いますが、ご教授ください。
508デフォルトの名無しさん:2009/02/12(木) 08:47:42
write = fopen("test.txt", "w");
if(read==NULL){ ←ここがへん
他にもあるかも知れないけど
509デフォルトの名無しさん:2009/02/12(木) 08:53:54
>>507
間違い探しだな。w
問題文自体も
「バイナリファイル(unsigned short(2バイト)型の数値が4096*2個入)を、10進数でテキストファイルに書き出す。」
何通りか解釈出来てしまうような文章。w

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

int main(int ac, char *av[]){
FILE *write = fopen("test.txt", "w");
FILE *read = fopen("08112801.L81", "rb");
while(!feof(read)){
int j;
for(j = 0; j < 4096; j++){
unsigned short ch1, ch2;
fread(&ch1, 2, 1, read);
fread(&ch2, 2, 1, read);
fprintf(write, "%d %d\n", ch1, ch2);
}
}
fclose(read);
fclose(write);
return 0;
}
510デフォルトの名無しさん:2009/02/12(木) 08:56:24
fprintf(write, "%u %u\n", ch1, ch2);
511デフォルトの名無しさん:2009/02/12(木) 08:59:02
>>508

ありがとうございます。
確かにその条件はへんですね、直します。

先輩がフォートランで同じようなプログラムを書いているのですが、
僕のcの結果と合わないんです。ボスケテ
512デフォルトの名無しさん:2009/02/12(木) 09:10:55
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 最長10文字の文字列を2件入力し、char 型の配列にそれぞれ格納する。2つの文字列
を比較し、文字列が同じだったら「イコール 」を表示し、異なっていたら「ノットイコール 」を表示するプログラムを作成。
11文字以上の文字が入力された場合、先頭から10文字までを有効とし11文字目以降を無視すること。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限:
[5] その他の制限:文字列あたりまで学習。よろしくお願いします。
513デフォルトの名無しさん:2009/02/12(木) 09:17:04
>>509
>>510

貴重なアドバイスありがとうございます。
先輩からいきなりこれやっておいてと言われ、急遽cを勉強したので基礎知識から色々と間違っていると思います。

大変平たくいってしまうと、下記のソフトの出力を10進数でやれればOKらしいのですが、、
Binary Data Extract Ver1.04
ttp://larmtech.com/cgi-local/download.cgi?file=binex104.exe

514デフォルトの名無しさん:2009/02/12(木) 09:29:54
>>492
491です。昨日あのまま寝てしまい質問し損ねたので再度お願いします。
回答してもらったもので実行したところ、1740 leap year としか表示されませんでしたので再度よろしくお願いします。
515デフォルトの名無しさん:2009/02/12(木) 09:31:55
>>514
return の前に }
516デフォルトの名無しさん:2009/02/12(木) 09:34:24
>>515
ありがとうございます、助かりました。」
517デフォルトの名無しさん:2009/02/12(木) 09:43:48
>>513
バックドア注意
518デフォルトの名無しさん:2009/02/12(木) 09:46:20
>>513
そのソフトってこれ?
ttp://larmtech.com/aboutbinext.html
もう2バイト毎にテキストにって書いてあるから
そのままexe使うだけでプログラム書く必要ないんじゃないの?
519デフォルトの名無しさん:2009/02/12(木) 09:51:56
>>513
宿題じゃなくて仕事ならここで頼め
http://pc11.2ch.net/test/read.cgi/software/1230970602
520デフォルトの名無しさん:2009/02/12(木) 09:59:44
>>518
大量に変換し、その後数値処理も行うためとりあえず一から
cでやりなさいということらしいです。

>>519
すみません、一応大学の課題なのでこちらだと判断し質問いたしました。
521デフォルトの名無しさん:2009/02/12(木) 10:39:19
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): char型の配列、char str[ ] = "SAMPLE ex305.c"; を宣言する。strに格納された文字列を、アルファベットの小文字だったら大文字、大文字だったら小文字に書き換え
て表示するプログラムを作成。
ただし、文字列の書き換えは、別の配列を用意するのではなく、配列str の要素を上書きすること。
[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限: 明日まで
[5] その他の制限:
522デフォルトの名無しさん:2009/02/12(木) 10:51:08
>>521
#include <stdio.h>
#include <ctype.h>
char str[] = "SAMPLE ex305.c";
int main(void)
{
char *p = str;
while(*p != '\0'){
if(islower(*p)) *p = toupper(*p);
else if(isupper(*p)) *p = tolower(*p);
p++;
}
printf("%s\n", str);
return 0;
}
523デフォルトの名無しさん:2009/02/12(木) 11:07:47
>>522
すいません、toupperは使わない方法でお願いします。
付け足しで申し訳ないですorz
524デフォルトの名無しさん:2009/02/12(木) 11:24:51
#include <stdio.h>
#include <ctype.h>
char str[] = "SAMPLE ex305.c";
int main(void) {
char *p = str;
while(*p != '\0'){
if('a' <= *p && *p <= 'z') *p += 'A' - 'a';
else if('A' <= *p && *p <= 'Z') *p = 'a' - 'A';
p++;
}
printf("%s\n", str);
return 0;
}
525デフォルトの名無しさん:2009/02/12(木) 11:25:49
間違えた。ごめん。
#include <stdio.h>
char str[] = "SAMPLE ex305.c";
int main(void) {
char *p = str;
while(*p != '\0'){
if('a' <= *p && *p <= 'z') *p += 'A' - 'a';
else if('A' <= *p && *p <= 'Z') *p += 'a' - 'A';
p++;
}
printf("%s\n", str);
return 0;
}
526デフォルトの名無しさん:2009/02/12(木) 11:48:06
>>525
ありがとうございました、なんとか間に合って助かりました。
527デフォルトの名無しさん:2009/02/12(木) 11:49:51
>>512 の者ですが、期限が明日昼までを書き忘れてました。
どなたかよろしくお願いします。
528デフォルトの名無しさん:2009/02/12(木) 12:08:41
>>525
521ですが、char *p の*pは単に変数名なんでしょうか?
もしくは*に何か意味があるのですか。よければ教えてもらいたいです。
529デフォルトの名無しさん:2009/02/12(木) 12:15:20
528
いくら初心者でも
それはないな
530デフォルトの名無しさん:2009/02/12(木) 12:16:39
cを学習した月日はいくつだよ?
531デフォルトの名無しさん:2009/02/12(木) 12:21:17
>>528
char *p → 変数名がp、データ型がchar*
532デフォルトの名無しさん:2009/02/12(木) 12:24:52
説明して理解できるレベルに達してないだろ。初めて一か月よりわかってないな。
533デフォルトの名無しさん:2009/02/12(木) 12:26:54
ポインタという単語すら知らなさそう
534デフォルトの名無しさん:2009/02/12(木) 12:35:13
>>531
ありがとうございます。データ型について調べました。
勉強不足でした;
535デフォルトの名無しさん:2009/02/12(木) 13:01:49
536デフォルトの名無しさん:2009/02/12(木) 13:22:12
>>535
ありがとうございました。
537デフォルトの名無しさん:2009/02/12(木) 13:25:58
>>502
すいません、ctype.hは使わないやり方お願いします。
追記してなくて申し訳ないです
538デフォルトの名無しさん:2009/02/12(木) 13:55:33
>>537
#include <ctype.h>
#include <string.h> ←消し忘れてた。要らない。
を消して、

if(!isdigit(*str))

if(*str < '0' || '9' < *str)
に変えてくれ
539デフォルトの名無しさん:2009/02/12(木) 14:09:13
>>538
= =
お忘れ物ですよ
540デフォルトの名無しさん:2009/02/12(木) 14:09:33
>>539
orz 間違えた
541デフォルトの名無しさん:2009/02/12(木) 14:21:11
>>538
ありがとうございます。
542デフォルトの名無しさん:2009/02/12(木) 16:38:00
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
1から9までの数字を縦横方向に同じものが並ばないように下記の例のように並べる
並べ方が全部で何通りあるかとその並びをすべて列挙する
[3] 環境
 [3.1] OS:特になし
 [3.2] コンパイラ名とバージョン:ANSI C
 [3.3] 言語:C
[4] 期限: 明日まで
[5] その他の制限:

534681297
685293714
948367125
153472869
426538971
261759483
817945632
379126548
792814356
543デフォルトの名無しさん:2009/02/12(木) 16:44:09
>>542
最初に
123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
という配列を作っておいて
縦横方向にシャッフルしていけば医院で内科医?
この方法で出て来ない組み合わせってある?
544デフォルトの名無しさん:2009/02/12(木) 16:46:25
123456789
245678913
356789124
467891235
578912346
689123457
791234568
812345679
923456781
こういうのは出せないと思う
545デフォルトの名無しさん:2009/02/12(木) 16:48:53
>>544
縦が重複してるよ
546デフォルトの名無しさん:2009/02/12(木) 17:07:02
再帰使えば。 
547デフォルトの名無しさん:2009/02/12(木) 17:07:40
Python の宿題ここで答えます Part 1
http://pc11.2ch.net/test/read.cgi/tech/1153585095/785
C/C++の宿題片付けます 122代目
http://pc11.2ch.net/test/read.cgi/tech/1232029287/542
Rubyの宿題教えてください。2限目
http://pc11.2ch.net/test/read.cgi/tech/1200175247/476

こんなんで数独の掲載料もらえるなら俺だって問題送りたい
548デフォルトの名無しさん:2009/02/12(木) 17:13:23
>問題として成立する初期配置の数字の最少個数はまだ結論が出ていないが、
>対称形の問題では18個(初出・パズル通信ニコリ31号 1990年)、
>非対称の物では17個(初出・パズラー187号 1997年)のものが確認されている。

へー
549デフォルトの名無しさん:2009/02/12(木) 17:15:15
>>545
「出せない」という点においては正しい
550デフォルトの名無しさん:2009/02/12(木) 17:19:45
なんて迷惑な奴
551デフォルトの名無しさん:2009/02/12(木) 17:25:07
あんな小銭のために宿題にしてマルチとは…
552デフォルトの名無しさん:2009/02/12(木) 17:39:18
>>542
一通りの並びに対して数字の入れ替えを考慮すると
最低でも 9! (362880) 個の解はあるわけだがそれも全部足すの?
553デフォルトの名無しさん:2009/02/12(木) 17:41:40
>>552
もちろん足すんだろ

こいつは解答がいくつあるかそもそも知らないんだから簡単にそう言うはずだ
できた組み合わせを適当にパズル雑誌に送れば小遣いゲット
554デフォルトの名無しさん:2009/02/12(木) 18:06:52
>>552
9!*8!=362,880*40,320=146,3132,1600 ひゃくよんじゅうろく億通り
555デフォルトの名無しさん:2009/02/12(木) 18:25:40
>>552
9!*9^9=362,880*387,420,489=140,5871,4704,8320 が正解かも
556デフォルトの名無しさん:2009/02/12(木) 18:26:25
一つ小さい枠との漸化式ができるとおもうよ。
たとえば書きながら考えるけど、4*4として、数字の総入れ替えをすれば
1行目は1234で固定していい。
1列目の残りの空きは、234 243 324 ・・の6とおり。
あとは、残りの数字で3*3の枠ができる。

K(n)をn*nの個数とすれば、

K(n) = n! * (n-1)! * K(n-1)かな。 違う?
557デフォルトの名無しさん:2009/02/12(木) 18:30:12
558デフォルトの名無しさん:2009/02/12(木) 18:32:38
数独ではないのだが。問題読んでるか?
559デフォルトの名無しさん:2009/02/12(木) 18:35:26
556は勘違い 例で言うと3*3の枠にはせいやくがついている
560デフォルトの名無しさん:2009/02/12(木) 18:43:49
4*4を書きながらもう一度やってみる。
1行目は、全交換を考慮して1234で固定。
1列目のこりは、3!とおり。
(2,2)は、残りの数字4-2通り。(2,3)は4-3通り。(2,4)は1通り。
(3,2)は、残りの数字4-3通り。(3,3)は1通り。(3,4)は1通り。
それ以降も1通り。

4! * 3! * (4-2)! *・・・ * 1! * (4-3)!*・・・ * 1!*・・・*1か。

nでは、
n! * (n-1)! * (n-2)! *・・・ * 1! * (n-3)!*・・・ * 1!*・・・*1か。
561デフォルトの名無しさん:2009/02/12(木) 19:32:16
[1] 授業単元: 並列プログラミング
[2] 問題文(含コード&リンク):
C言語のコードがようやく出来上がりました。これを並列化したいです。
http://www.dotup.org/uploda/www.dotup.org4916.zip.html
[3] 環境
 [3.1] OS:特になし
 [3.2] コンパイラ名とバージョン:ANSI C
 [3.3] 言語:C
[4] 期限: 明日まで
[5] その他の制限:特になし
562デフォルトの名無しさん:2009/02/12(木) 20:26:18
>>542
#include <stdio.h>
typedef struct tag_map_t{ int data[9][9], used[9]; }map_t;
int disp(map_t *map){
static int i, j, count;
if(map==NULL) return count;
count++;
printf("\n----- %d -----\n", count);
for(i=0;i<9;i++){
for(j=0;j<9;j++) printf("%d", map->data[i][j]);
printf("\n");
}
return -1;
}
void hoge(map_t *map, int flag, int num){
int i;
if(num%9==0) flag=0;
for(i=0;i<9;i++){
if((map->used[num%9]&(1<<i)) || (flag&(1<<i))) continue;
map->data[num/9][num%9]=i+1;
map->used[num%9]|=(1<<i);
if(num+1>=81) disp(map);
else hoge(map, flag|(1<<i), num+1);
map->used[num%9]^=(1<<i);
}
}
int main(void){
map_t map={{{1,2,3,4,5,6,7,8,9}},{1,2,4,8,16,32,64,128,256}};
hoge(&map, 0, 9);
printf("\nTotal:%d\n", disp(NULL));
return 0;
}
563デフォルトの名無しさん:2009/02/12(木) 20:58:07
1〜43までの数字の中から異なる6つの数字の組み合わせを選ぶロト6の
組み合わせの総数を求めるプログラムをきぼんぬ。
それを元に、1〜nまでの数字の中から異なるn個以下の数字の組み合わせが
何通りあるか求めるプログラムに発展させるものをきぼんぬ。
564デフォルトの名無しさん:2009/02/12(木) 21:00:26
>>563
43C6
nCm
だね?
あと テンプレ
565デフォルトの名無しさん:2009/02/12(木) 21:17:37
発展:6つの内、3つ一致すると4等、4つで3等、5つで3等、5つ+ボーナス数字で2等、6つ全て揃うと1等
という条件で、各等の本数を調べよ。
ボーナス数字:6つの本数字とは別で、その6つの本数字と重複しない

あっ、これ、宿題じゃなくただの気まぐれ課題だから。
566デフォルトの名無しさん:2009/02/12(木) 21:48:11
567デフォルトの名無しさん:2009/02/12(木) 23:03:06
ロト6の期待値ってどのくらいだっけ?
568デフォルトの名無しさん:2009/02/12(木) 23:11:47
一等 8.19 %
二等 7.37 %
三等 8.85 %
四等 7.78 %
五等 12.75 %
569デフォルトの名無しさん:2009/02/12(木) 23:15:40
>>565
6C3 * 37C3
6C4 * 37C2
6C5 * 37C1
6C5
6C6
570デフォルトの名無しさん:2009/02/13(金) 00:42:38
>>561
これはマルチプロセス(MPI)で並列化しないといけないのかなあ。
マルチスレッド(pthreadとか)使っていいんだと楽だけど。

// calculate new data values in Tnew
for(i = 1; i < ly-1; i++){
for(j = 1; j < lx-1; j++){
Tnew[i][j] = T[i][j]+ z*(T[i][j+1] + T[i][j-1] + T[i+1][j] + T[i-1][j] -4.*T[i][j]);
}
}
この部分を並列化するには、上下左右のセルの値を参照するから、
マルチプロセス(MPI)で並列化すると、毎回計算結果を往復通信することになって、
通信量がでかくなりそう・・・。むずいなあ。
571561:2009/02/13(金) 02:18:29
>>570
MPIの授業なのでMPIでやる必要があります。。マスタープロセス(プロセス0)と
スレーブプロセスで通信をした後、更に上下左右の端のセルはゴーストセルといって
計算をするためにスレーブ間で送受信しないといけない?。。とかいっていました。

MPI_Cart_Create(だったと思います)を使えばいいとかも言っていましたが、自分には
サッパリです。。
572デフォルトの名無しさん:2009/02/13(金) 04:01:56
[1] 授業単元: 演習
[2] 問題文(含コード&リンク):
2x2行列の固有値を求めるプログラムをかきなさい。
double型の配列とします。
[3] 環境
 [3.1] OS:LINUX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 明日まで
[5] その他の制限:特になし
573デフォルトの名無しさん:2009/02/13(金) 04:37:44
数学板の線形代数スレで聞いたほうがいいと思うぞ
574デフォルトの名無しさん:2009/02/13(金) 05:22:55
>>573
2x2の固有値程度ならここでもいいでしょ
575デフォルトの名無しさん:2009/02/13(金) 05:42:41
>>572
かなりてきとーに作った
#include<math.h>
#include<stdio.h>
int main()
{
double mat[2][2]={{1.0,3.0},{5.0,-4.0}};
double A=mat[0][0]+mat[1][1];
double B=mat[0][0]*mat[1][1]-mat[0][1]*mat[1][0];
double D=A*A-B;
double lh=A/2,rh=sqrt(fabs(D))/2;
if(D>=0)
printf("%.4f,%.4f\n",lh+rh,lh-rh);
else{
printf("%.4f+%.4fi,%.4f-%.4fi\n",lh,rh,lh,rh);
}
return 0;
}
576デフォルトの名無しさん:2009/02/13(金) 10:12:55
>>575
#define a A
#define b B
#define d D
double d=a*a-4*b;
577デフォルトの名無しさん:2009/02/13(金) 11:54:40
C言語の課題でフローチャートを書くものがあるんですが、フローチャートの回答もここで聞いていいんですか?
578デフォルトの名無しさん:2009/02/13(金) 12:14:42
CやC++でフローチャート画像を表示するプログラムを作れとかいう課題ならOK
579デフォルトの名無しさん:2009/02/13(金) 12:24:30
580デフォルトの名無しさん:2009/02/13(金) 12:43:29
プログラムがあって、それをwordとかでフローチャートにしろっていう指示だったので違いますね;
失礼しました。
581デフォルトの名無しさん:2009/02/14(土) 00:01:43
[1] 授業単元:趣味。
[2] 問題文(含コード&リンク):
 自然数n与え、nを1以上の自然数の和で表す組み合わせを求め、配列に入れて返す関数をかけ
 戻り値はstd::vector<std::vector<long> >とする
 (この組み合わせの総数のことを分割数と呼ぶ)
 例えばn=4の場合
  1 1 1 1
  1 1 2
  1 3
  2 2
  4
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ名とバージョン:VC7.1(Visual Studio2005付属)
 [3.3] 言語: C++
[4] 期限: なし
[5] その他の制限:標準で使えるライブラリのみで(Boost等はなし)

分割数の個数を求める関数はこんな感じでかける
long div(long n){
    struct inner{
        static long pnm(long n,long m){
            if(n<=m){return !(n<m);}
            return pnm(n-m,m)+pnm(n,m+1);
        }
    };
    return inner::pnm(n,1);
}
これを実際の和を求めるよう作り替えようとしてつまづいた。
よろしくお願い申す
582デフォルトの名無しさん:2009/02/14(土) 00:25:34
Cでなら昔書いたな
583デフォルトの名無しさん:2009/02/14(土) 00:26:11
>>581
#include<iostream>
#include<vector>
void divide_r(std::vector<std::vector<long> >& all, std::vector<long>& now, long n, long min) {
if (n >= min) {
for (long i = min; i <= n; i ++) {
now.push_back(i);
divide_r(all, now, n-i, i);
now.pop_back();
}
} else if (n == 0) all.push_back(now);
}
std::vector<std::vector<long> > divide(long n) {
std::vector<std::vector<long> > all;
std::vector<long> now;
divide_r(all, now, n, 1);
return all;
}
int main() {
long n;
std::cout << "n="; std::cin >> n;
std::vector<std::vector<long> > all = divide(n);
for (std::vector<std::vector<long> >::const_iterator it = all.begin(); it != all.end(); ++it) {
std::copy(it->begin(), it->end(), std::ostream_iterator<long>(std::cout, " "));
std::cout << std::endl;
}
return 0;
}
584デフォルトの名無しさん:2009/02/14(土) 00:26:40
1] 授業単元: 演習
[2] 問題文:整数は約数(1は含むが、その整数自身は含めない)の和がその整数に等しいとき、完全数と呼ばれる。引数 number が完全数であるかどうかを判定する関数 int IsPerfect(int number)と約数判定関数 int IsDivisor(int dividend, int divisor)を作成しなさい。
そして、これらの関数を使って、2 から 10000 までの間にあるすべての完全数を出力するプログラムを作成しなさい。
[実行例]
% ./a.out
完全数リストは下記の通りです:
6
28
496
8128
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
585デフォルトの名無しさん:2009/02/14(土) 00:33:32
>>583
あなた最高。まさに俺が求めていた物がここにあるよ。ありがとう
586デフォルトの名無しさん:2009/02/14(土) 00:35:05
>>584
#include<stdio.h>
int IsDivisor(int dividend, int divisor) {
return !(dividend % divisor);
}
int IsPerfect(int number) {
int i, sum = 0;
for (i = 1; i <= number/2; i ++) {
if (IsDivisor(number, i)) sum += i;
}
return sum == number;
}
int main() {
int i;
for (i = 1; i <= 10000; i ++) {
if (IsPerfect(i))
printf("%d\n", i);
}
return 0;
}
587デフォルトの名無しさん:2009/02/14(土) 00:41:26
>>584
#include <stdio.h>

int IsDivisor(int dividend, int divisor){
return (dividend%divisor)==0;
}

int IsPerfect(int number){
int i, sum=0;

for(i=1;i<number;i++){
if(IsDivisor(number, i)) sum+=i;
}
return number==sum;
}

int main(void){
int result[]={6,28,496,8128,-1};
int i, j=0;

for(i=2;i<10000;i++){
if(i==result[j] && IsPerfect(result[j])) printf("%d\n", result[j++]);
}

return 0;
}
588デフォルトの名無しさん:2009/02/14(土) 00:42:25
>>586の方がはやいな
589デフォルトの名無しさん:2009/02/14(土) 00:47:46
1] 授業単元: プログラミング言語T
[2]
以下のプログラムは、入力された10個の整数を引き算して
その結果を表示するプログラムです。
9から11行目を別の関数(関数名はFuncDev)とし、修正しなさい。
ただしグローバル変数は使わないこと。
また、FuncDev内のローカル変数名は任意とする。
FuncDev関数は以下の定義とする。
int FuncDev(void);
FuncDev関数の戻り値は、入力されたint型データとする。

#include<stdio.h>
void main(void);
void main(void)
{
int n1,n2;
int nt;
nt = 0;
for(n1=0;n1<10;n1++){
printf("0-9の数値を入力せよ");
scanf(" %d",&n2);
nt-=n2;
}
printf("結果は%dです。");
}

 [3.1] OS: windows xp
 [3.2] VC++ 6.0
 [3.3] 言語: C
[4] 期限:2/16
どうかよろしくお願いいたします
590デフォルトの名無しさん:2009/02/14(土) 03:28:06
>>589
#include<stdio.h>
int FuncDev(void);
void main(void)
{
int n1;
int nt;
nt = 0;
for(n1=0;n1<10;n1++){
nt = FuncDev();
}
printf("結果は%dです。\n",nt);
}
int FuncDev(void)
{
static int count = 0;
static int sum = 0;
int n3;
printf("0-9の数値を入力せよ");
scanf("%d", &n3);
if(count == 9){
return sum - n3;
}
sum -= n3;
count++;
return n3;
}
591デフォルトの名無しさん:2009/02/14(土) 03:28:26
>>589
#include<stdio.h>
void main(void);
int FuncDev(void);
void main(void)
{
    int n1;
    int nt;
    nt = 0;
    for(n1=0;n1<10;n1++){
        nt-=FuncDev();
    }
    printf("結果は%dです。",nt);
}

int FuncDev(void)
{
    int n;

    printf("0-9の数値を入力せよ");
    scanf("%d",&n);
    return n;
}
592デフォルトの名無しさん:2009/02/14(土) 16:20:44
[1] 情報処理 乱数1
[2] n個の任意のサイコロをコンピュータがふって目の和がOdd or Evenを当てるゲーム
[3] 環境
 [3.1] Windows
 [3.2] Borland C++ Compiler
 [3.3] C
[4] 期限: 2月18日
[5] その他の制限:乱数をはじめて使う課題です。配列・ポインタ・ユーザ定義関数などは習いました。
よろしくお願いします。
593584:2009/02/14(土) 16:44:29
>>586-7
Thank you very much.
594デフォルトの名無しさん:2009/02/14(土) 16:50:31
>>592
さいころの目は、一般的な1〜6の立方体を想定?
595デフォルトの名無しさん:2009/02/14(土) 16:53:30
[1] 授業単元:趣味。
[2] 問題文(含コード&リンク):
 自然数n与え、nを1以上の自然数の積で表す組み合わせを求め、配列に入れて返す関数をかけ
 戻り値はstd::vector<std::vector<long> >とする

 例えばn=12の場合。出力順序は問わない
  1 12(12 1でもOK)
  2 2 3
  2 6
  4 3
[3] 環境
WinXP,C++,VC8(VS2005付属)またはgc3.4.4
[4] 期限: なし
[5] その他の制限:標準で使えるライブラリのみで(Boost等はなし)

和に続いて積
参考:お手軽素因数分解のコード
#include <iostream>
#include <cmath>
#include <vector>
void factorize(long P,std::vector<long>& v){
  for(long i=2;i<sqrt((double)P)+1;++i){
    if(P%i==0){
      v.push_back(i);
      P/=i;
      factorize(P,v);
      return;
    }
  }
  v.push_back(P);
}
ひとつよろしくお願いする
596デフォルトの名無しさん:2009/02/14(土) 17:02:09
>>592
6面体、nは入力でつくった
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
int main()
{
int i, n, input, sum_dice;
srand((unsigned)time(NULL));
printf("n? ");
scanf("%d", &n);
printf("Odd(1) or Even(0)? ");
scanf("%d", &input);
sum_dice = 0;
for(i = 0; i < n; i++) sum_dice += rand() % 6;
if(sum_dice % 2) printf("result: %d Odd\n", sum_dice);
else printf("result: %d Even\n", sum_dice);
if(sum_dice % 2 == input) printf("Correct!\n");
else printf("Failed...\n");
return 0;
}
597デフォルトの名無しさん:2009/02/14(土) 17:16:15
598デフォルトの名無しさん:2009/02/14(土) 17:35:21
>>592
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])
{
int i, n=0, t=0, r=0;

if(argc != 2) {
printf("Usage: .\\exe num");
return -1;
}
sscanf(argv[1], "%d", &n);
if(n < 1) return -2;
srand( (unsigned)time( NULL ) );

/* n 個の値を表示します。 */
for( i = 0; i < n; i++ ) {
r = (int)(rand()/((double)RAND_MAX+1)*6)+1;
printf( " %6d\n", r );
t += r;
}
if(t%2 == 0)
printf("Even\n");
else
printf("Odd\n");
return 0;
}
599デフォルトの名無しさん:2009/02/14(土) 17:38:34
printf( " %6d\n", r );
t += r;
600589:2009/02/14(土) 18:38:54
>>590>>591様ありがとうございます
601デフォルトの名無しさん:2009/02/14(土) 18:41:03
授業単元: プログラミング言語U

以下の仕様を満たす共用体を宣言しなさい。
もし構造体が必要ならば、任意の構造体名および変数名で宣言すること。

・共用体名はTEST、共用体変数名はuntest。
・全体のデータサイズは80バイトで、char型配列として扱う。変数名はszData
・最初の10バイトはchar型配列で、変数名をszCodeとする。
・次のメンバは20バイトのchar型配列で変数名はszName

 [3.2] VC++ 6.0
 [3.3] 言語: C
[4] 期限:2/19
よろしくお願いいたします
602デフォルトの名無しさん:2009/02/14(土) 19:24:40
>>601
union TEST {
char szData[80];
struct {
char szCode[10];
char szName[20];
} szAddr;
};
#ifndef DEBUG
main(){}
#else
#include <stdio.h>
#include <string.h>
#include <memory.h>
int main(void)
{
union TEST untest;
char work[21];
char *adr = "1234567890ABCD EFGH ABCD EFGHIABCD EFGHaaaaaaaaaaabbbbbbbbbbbbbbbccccccdddddddddeeeeeeeeee";

memset(untest.szData, 0, 80);
memcpy(untest.szData, adr, strlen(adr)<=80-1 ? strlen(adr) : 80-1);
printf("%s\n", untest.szData);
memset(work, 0, 11);
memcpy(work, untest.szAddr.szCode, 10);
printf("%s\n", work);
memset(work, 0, 21);
memcpy(work, untest.szAddr.szName, 20);
printf("%s\n", work);
return 0;
}
#endif
603デフォルトの名無しさん:2009/02/14(土) 19:30:59
>>602
たぶんそのコードが正解だろうと思うんだけどさ、
・最初の10バイトはchar型配列で、変数名をszCodeとする。
・次のメンバは20バイトのchar型配列で変数名はszName
を満たしてないよね。両方ともszAddr.が付いちゃう。
604デフォルトの名無しさん:2009/02/14(土) 20:26:41
>>603
???
605デフォルトの名無しさん:2009/02/14(土) 20:32:39
601を文面どおり受け取ると
memcpy(work, untest.szAddr.szCode, 10);
ではなく
memcpy(work, untest.szCode, 10);
でアクセスできないといけない
606デフォルトの名無しさん:2009/02/14(土) 21:45:52
607デフォルトの名無しさん:2009/02/14(土) 21:51:50
>>605
そんなのどこに書いてあるんだ?
608デフォルトの名無しさん:2009/02/14(土) 22:01:52
>>607
szCodeはTESTのメンバであって構造体のメンバではない
といえばわかる?
609デフォルトの名無しさん:2009/02/14(土) 22:33:10
>>606
これはすばらしい!
実は先ほど自分でも動作するものがかろうじて作れたんだが
頂いたコードのほうが4096倍ぐらい早く動作する
しかもコードがシンプルでわかりやすい

ただ、VCではlroundやらsqrtのオーバーロードやらでエラーがでたため
lround(...)をsqrt((double)n)に変更して検証
自作コードと2から30までの出力結果をdiffしてみたが
うまく動作してる模様、感謝
610デフォルトの名無しさん:2009/02/15(日) 14:43:43
>>895
対レオナールデッキのAPTのマンティコアへの与ダメ比較
愛染:31(16)/ペガ:70(52)/アヌ:24(9)
レナス:36(21)/クロ:42(27)/パワーズ:36(21)
ペガサス入りの愛染デッキでもピンダメ除けば与ダメに大差ないんだが?
単体攻撃が1体多い分で通常攻撃分はトントンだろ。
それでも普通はレオナール相手でもピン落とし出来て普通な訳だ。
611デフォルトの名無しさん:2009/02/15(日) 14:45:06
すまん。盛大に誤爆した・・・
612デフォルトの名無しさん:2009/02/15(日) 18:08:27
                          刀、           , ヘ
                  /´ ̄`ヽ /: : : \_____/: : : : ヽ、
              ,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
               /: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
     ,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
    /: :.,.-ァ: : : |: : : : : : : : :    :\: : : : :: : : :ヽ  \   /: : : :/
    ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i  / /: : : : :/
     /: :     ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/  /: : : : :/         、
.    /: : /  . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : |  /: : : : :/            |\
   /: : ィ: : : : :.i: : |   \!___/ ヽ:: : : : : : :\|:.:.:.:/:!  ,': : : : /              |: : \
   / / !: : : : :.ト‐|-    ヽ    \: : : : : l::::__:' :/  i: : : : :{              |: : : :.ヽ
   l/   |: : :!: : .l: :|            \: : : l´r. Y   {: : : : :丶_______.ノ: : : : : :}
      l: : :l: : :ト、|         、___,ィ ヽ: :| ゝ ノ    '.: : : : : : : : : : : : : : : : : : : : : : /
      |: : :ト、: |: :ヽ ___,彡     ´ ̄´   ヽl-‐'     \: : : : : : : : : : : : : : : : : : イ
        !: :从ヽ!ヽ.ハ=≠' , ///// ///u /           ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      V  ヽ|    }///  r‐'⌒ヽ  イ〉、
              ヽ、______ー‐‐' ィ´ /:/:7rt‐---、       こ、これは>>611乙じゃなくて
                  ィ幵ノ ./:/:./:.! !: : : : :!`ヽ     ポニーテールなんだから
              r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\   変な勘違いしないでよね!
               /: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
613デフォルトの名無しさん:2009/02/15(日) 22:15:49
[1] 授業単元: C言語プログラミング
[2] 問題文: f(x)と積分区間の両端点a,b及び分割数nが与えられたときのaからbまでn等分して台形則を用いたf(x)の積分値の近似値を求めよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin(1.5.25-15)
 [3.3] 言語: C
[4] 期限: ([2009年2月16日10:00まで]
[5] その他の制限: 授業中に行った台形を求めるプログラム↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8885.txt
614デフォルトの名無しさん:2009/02/15(日) 22:54:20
5つの整数を入力しそれらの数字の最小値と最大値を求めるプログラムを作成せよ
なお出力は最大値と最小値の両方を入力すること。また提出時には入力した5つの数字と出力結果の最大値と最小値をソースコードの最後にコメントとして添付して提出せよ

以上です
615デフォルトの名無しさん:2009/02/15(日) 22:55:17
↑for ifを使ってお願いします…
616デフォルトの名無しさん:2009/02/15(日) 22:58:37
>>613
元のプログラムをなるべく活かすとこんな感じか。

#include <stdio.h>
double f(double x){return x*x};// f(x) = x^2
#define a 2.0//始点 x = 2.0
#define b 3.0//終点 x = 3.0
#define N 4//座標の数
double menseki(double *vx, double *vy){
//もとのまま
}
int main(void)
{
double S;
double Vx[N];
double Vy[N];
int i; // 何番目の台形かを表す
for( i = 0; i< N; i++){
Vx[i] = a+ i*(b-a)/(N-1);
Vy[i] = f(Vx[i]);
}
S = menseki(Vx,Vy);
printf("S: %f\n",S);
return 0;
}
617デフォルトの名無しさん:2009/02/15(日) 22:59:05
ネットワークのシュミレーションってCでも出来ますか?
トラフィックの占有率とか確率分布を計算しろって言われて困ってます
618デフォルトの名無しさん:2009/02/15(日) 23:03:38
完全に、ソフトウェアだけでやるのは、かなり詳しくないと無理では?
会社休みのときにでも、PC使ってテストすれば
619デフォルトの名無しさん:2009/02/15(日) 23:10:11
シュミレーションシュミレーションシュミレーションシュミレーションシュミレーション
620デフォルトの名無しさん:2009/02/15(日) 23:12:56
>>617
理論値でならできるかもしれないけど
多くても基本性能の60%くらいまでで見ておかないと
輻輳とか訳分からん要素が盛りだくさんw
621デフォルトの名無しさん:2009/02/15(日) 23:22:48
ネットワークのシミュレータを作るのが宿題、研究ならばやるしかないが。
622デフォルトの名無しさん:2009/02/15(日) 23:23:19
>>616様ありがとうございます。
ですが、コンパイルすると
ファイル名: In function `f':
ファイル名:2: error: parse error before '}' token
と2行目にエラーが発生してしまいます><
cygwinではコンパイルだめなのでしょうか?
623デフォルトの名無しさん:2009/02/15(日) 23:24:34
// **********
を削除
624デフォルトの名無しさん:2009/02/15(日) 23:31:01
>>623
おまwwwwwwww

>>622
エラーメッセージぐらい読めよ
625デフォルトの名無しさん:2009/02/15(日) 23:32:47
なるほど〜
ns2使いこなせないから先生に相談したら
言語関係なく簡単なのでもいいからネットワークの失敗率とかプログラミングしろって言われたもんで・・・
Cはなんとかだけどtclがわかんないっす
お礼はZIPでよければいくいらでもだから相談のってください!!
626デフォルトの名無しさん:2009/02/15(日) 23:38:44
どんなネットワークか説明なしでは無理
627デフォルトの名無しさん:2009/02/15(日) 23:40:21
P2P、クライアントサーバー、インターネットとかネットワークにはいろいろある。
628デフォルトの名無しさん:2009/02/15(日) 23:57:09
主に匿名通信でつかうような二次j利用のP2Pだと思うんですが
こんな感じです
http://gonzo.dip.jp/~gonzo/cgi-bin/uploader2/src/up3125.bmp_lp6VAOg23kf1DkaFAISC/up3125.bmp
pass 0215です(すいません、あんまりuoしたこたことないもので。。。)
629デフォルトの名無しさん:2009/02/16(月) 00:04:29
こんな絵だけで、ネットワークシミュレータできません。
通信速度やトラフィックなどいろいろいります。
630デフォルトの名無しさん:2009/02/16(月) 00:05:14
>>628
むしろプロキシに見える
ま、スレ違いだからどっか適当な場所に移動だね
631デフォルトの名無しさん:2009/02/16(月) 00:09:05
>>622
{コンパイル通してなくてすまん;}
632デフォルトの名無しさん:2009/02/16(月) 00:39:48
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
連続な関数f(x)において,もしf(a)<0,f(b)>0だったら
a<x<bの範囲で少なくとも1つf(x)=0をみたすようなxが必ず存在する.
これを以下のような方法で求める. 
f(a) < 0, f(b) > 0 となるような a, b が与えられたとする(ただし a < b).
<ループ開始>
(1) b - a < e ならループを抜ける(e は適当に小さい値,0.00001とか)
(2) c = (a + b) / 2;
(3) もし, f(c) == 0 ならばループを抜ける
もし,f(c) > 0 ならば b = c として(1)に戻る(a はそのまま)
もし,f(c) < 0 ならば a = c として(1)に戻る(b はそのまま)
<ループおわり>
これは while ループで書ける.(1)をなくして回数指定のループにすることもできる.
たとえば f(x) = x*x-2, a=1, b=2 として二分法を手計算してみよ.
[3] 環境
 [3.1] windows
 [3.2] gcc
 [3.3] c言語
[4] 期限:2月16日 10時

お願いします。
633デフォルトの名無しさん:2009/02/16(月) 01:06:47
#include <stdio.h> // >>613 >>616 を直した。
int N = 1; // 座標の個数、台形の個数は(N-1)個
double f(double x)
{return 3*x*x + 2*x - 20;} // f(x) = 3*x^2 + 2*x - 20
double menseki(double *vx, double *vy);
int main(int argc, char *argv[])
{
  float a, b; // x 始点, x 終点
  double S, *Vx, *Vy;
  int i; // 何番目の台形かを表す
  if(argc != 4) {
    printf("Usage: .\\exe number start-point end-point\n");
    return -1;
  }
  N = atoi(argv[1]);
  sscanf(argv[2], "%f", &a);
  sscanf(argv[3], "%f", &b);
  Vx = malloc(N*sizeof(double));
  if(Vx == 0) return -2;
  Vy = malloc(N*sizeof(double));
  if(Vy == 0) return -2;
  for(i = 0; i < N; i++){
    Vx[i] = a + (double)i*(b-a)/(N-1);
    Vy[i] = f(Vx[i]);
    printf("x=%f y=%f\n",Vx[i],Vy[i]);
  }
  S = menseki(Vx,Vy);
  printf("S: %f\n",S);
  free(Vx);
  free(Vy);
  return 0;
}
634デフォルトの名無しさん:2009/02/16(月) 01:29:28
635デフォルトの名無しさん:2009/02/16(月) 02:13:03
[1] 授業単元: C言語
[2] http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8887.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C++
[4] 期限: 2月16日正午ごろまで
[5] その他の制限:文字列あたりまで学習。
よろしくお願いします。

相当時間を費やしたのですが、どうしてもこの4題ができそうもありません…
よろしくお願いします。

636デフォルトの名無しさん:2009/02/16(月) 02:16:42
すいません、sageるのわすれてました・・・
637デフォルトの名無しさん:2009/02/16(月) 02:25:52
>>635
4.
#include <stdio.h>

int main(void)
{
int i, j;

for(i=0; i<=26; i++) {
for(j=i; j<26; j++) putchar('a' + j);
for(j=0; j<i; j++) putchar('a' + j);
putchar('\n');
}

return 0;
}
638デフォルトの名無しさん:2009/02/16(月) 02:29:52
639デフォルトの名無しさん:2009/02/16(月) 02:32:41
>>635
3.
#include <stdio.h>
int main(void)
{
int n, ans = 0;
scanf("%d", &n);
while(n) {
ans = ans * 10 + n % 10;
n /= 10;
}
printf("%d", ans);
return 0;
}

2.
#include <stdio.h>
int main(void)
{
int n, ans = 0;
scanf("%d", &n);
while(n) {
ans += n % 10;
n /= 10;
}
printf("%d", ans);
return 0;
}
640デフォルトの名無しさん:2009/02/16(月) 02:35:13
サブ関数使ってねーw
641デフォルトの名無しさん:2009/02/16(月) 02:36:02
2も3もサブ関数使うのかw
642デフォルトの名無しさん:2009/02/16(月) 02:38:28
サブ関数2
int f(int n)
{
int ret = 0;
while(n) {
ret += n % 10;
n /= 10;
}
return ret;
}
サブ関数3
int f(int n)
{
int ret = 0;
while(n) {
ret = ret * 10 + n % 10;
n /= 10;
}
return ret;
}
共通メイン
int main(void)
{
int n;
scanf("%d", &n);
printf("%d", f(n));
return 0;
}
643デフォルトの名無しさん:2009/02/16(月) 03:22:56
printf("値を入力してください:");
scanf("%d",&n);
printf("演算結果!\n");
while(n!=1)
{
if(n%2==0)
{
n /= 2;
;
printf("%d\n",n);
}
else
{
n = 3 * n + 1;
printf("%d\n",n);
}
}
printf("終了!\n");
return 0;
}
で、おそらくできたと思うのですが、これの発展問題で5桁の整数で1になるまでの
最も計算処理がかかる値を求め、その値と1になる経過を出力せよ。
というのが良くわかりません…。よろしくお願いします。
644デフォルトの名無しさん:2009/02/16(月) 03:24:13
スレ汚し申し訳ないです。こんな短時間に本当にありがとうございます。大変あつかましいのですがこちらもできたらよろしくお願いします。
任意の整数nを偶数であればn/2を計算し、奇数であればn*3+1を計算する。
その演算結果を繰り返すと必ず1になるが、これを確かめるプログラムを作成せよ。
これは
#include <stdio.h>
int main()
{
int n=0;
printf("値を入力してください:");
scanf("%d",&n);
printf("演算結果!\n");
while(n!=1)
{
if(n%2==0)
{
n /= 2;
;
printf("%d\n",n);
}
else
{
n = 3 * n + 1;
printf("%d\n",n);
}
}
printf("終了!\n");
return 0;
}
645デフォルトの名無しさん:2009/02/16(月) 03:45:29
#include <stdio.h>
//計算回数を求める関数
int f(int n) {
int ret = 0;
while(n!=1) {
if(n%2==0) n /= 2;
else n = n * 3 + 1;
ret++;
}
return ret;
}

int main(void)
{
int i, max = 1, max_cnt = 0, cnt;
for(i=10000; i<100000; i++) {
cnt = f(i);
if(cnt > max_cnt) {
max = i;
max_cnt = cnt;
}
}

printf("%d, %d回\n", max, max_cnt);

return 0;
}
646デフォルトの名無しさん:2009/02/16(月) 04:12:29
>>614
を誰か
647デフォルトの名無しさん:2009/02/16(月) 04:20:13
>>645のコードに「1になる経過」を出力する機能を追加してみた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8889.c
648デフォルトの名無しさん:2009/02/16(月) 04:27:01
649デフォルトの名無しさん:2009/02/16(月) 04:59:08
>>614
#include <stdio.h>
#include <limits.h>
int main()
{
 int i, max = INT_MIN, min = INT_MAX, tmp = 0;
 for (i = 0; i < 5; ++i) {
  scanf("%d", &tmp);
  max = tmp > max ? tmp : max;
  min = min > tmp ? tmp : min;
 }
 printf("max = %d, min = %d\n", max, min);
 return 0;
}
/*
入力
1 2 4 9 0
出力
max = 9, min = 0
*/
650デフォルトの名無しさん:2009/02/16(月) 05:24:01
>>614
#include <stdio.h>
#include <stdlib.h>
int compare(const int *n1, const int *n2){ return *n1 == *n2 ? 0 : *n1 < *n2 ? -1 : 1; }
void main()
{
    int n[5], i;
    for(i = 0; i < 5; i++) scanf("%d", &(n[i]));
    qsort((void *)n, 5, sizeof(int), (int(*)(const void *, const void *))compare);
    printf("max: %d, min: %d\n", n[4], n[0]);
}
651デフォルトの名無しさん:2009/02/16(月) 05:41:48
訂正
#include <stdio.h>
#include <stdlib.h>
int compare(const char *s1[], const char *s2[]){ return atoi(*s1) - atoi(*s2); }
void main(int argc, char *argv[])
{
    qsort((void *)&(argv[1]), argc - 1, sizeof(char *), (int(*)(const void *, const void *))compare);
    printf("max: %s, min: %s\n", argv[argc - 1], argv[1]);
}
652デフォルトの名無しさん:2009/02/16(月) 10:17:51
n次方程式の全ての極大値とその値を求めるプログラム。
一般の方程式でも可ですが、
double a1、a2、・・・anに対して
x>0 での(1 + a1*x)・・・(1 + an*x)で極大値でいいです。
653デフォルトの名無しさん:2009/02/16(月) 10:38:10
>>652
そうですか
654デフォルトの名無しさん:2009/02/16(月) 10:45:20
そうなんです。お忙しいとおもいますがおねがいします。
655デフォルトの名無しさん:2009/02/16(月) 11:54:52
ポアソン乱数を発生させるプログラムをどなたかお願いします。
656デフォルトの名無しさん:2009/02/16(月) 12:10:03
657デフォルトの名無しさん:2009/02/16(月) 12:10:51
>>648
テンプレに従わなくても回答がつくんだから、従わないだろ
658デフォルトの名無しさん:2009/02/16(月) 12:18:36
>>656
書き込み有難うございます。
ネットで調べてこのサイトは知っていたのですが、
これとは別にもっと簡単なプログラムはないでしょうか。
お願いします。
659デフォルトの名無しさん:2009/02/16(月) 15:55:15
お前の言う簡単とはどういったものなんだ?
その基準が示されないことにはどんなレスも無駄になる可能性がある。
660デフォルトの名無しさん:2009/02/16(月) 16:30:31
ポアソンくらいならすぐ書いてやるぜーと思ったが
>>656が難しいというなら手の施しようが無い…
661デフォルトの名無しさん:2009/02/16(月) 16:43:34
662デフォルトの名無しさん:2009/02/16(月) 17:13:27
>>652は、待っていたら出来るかどうか教えて。 待っても無理なんですか?
663デフォルトの名無しさん:2009/02/16(月) 17:16:05
>>661
最急降下法、共役勾配法等のいろいろな方法があるけどどうするよ
664デフォルトの名無しさん:2009/02/16(月) 17:21:32
おねがいします!みじかいやつでおねがいします。
1000次が数秒ででればいいです。
665デフォルトの名無しさん:2009/02/16(月) 17:23:24
と思ったけど一次元なのな
666デフォルトの名無しさん:2009/02/16(月) 17:32:04
>>665
いや、n次って書いてあるし、
最後の行の式は、掛け算でしょ?
667デフォルトの名無しさん:2009/02/16(月) 17:38:09
変数が1個だから一次元じゃん
668デフォルトの名無しさん:2009/02/16(月) 17:39:26
>>667
一元n次
669デフォルトの名無しさん:2009/02/16(月) 18:15:32
微分が計算できるからニュートン法で導関数が0になるところ探していけばいいのかなぁ。
x=-1/a[i]の近くから探してけばどれかが最適解になるのかな。
670デフォルトの名無しさん:2009/02/16(月) 19:12:18
それもあるけど、挟み込んでいってもできる
ソースを書く気はしないけどな
671デフォルトの名無しさん:2009/02/17(火) 00:34:49
[1] 授業単元:プログラミング発展
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8892.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [2009年2月17日12:00まで]

よろしくお願いします
672デフォルトの名無しさん:2009/02/17(火) 00:42:13
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):f(x)=x2条-5x+6=0の解を二分法を用いたプログラムで求めてみよ。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語:C++
[4] 期限: 2月18日
[5] その他の制限:

よろしくお願いします
673デフォルトの名無しさん:2009/02/17(火) 00:42:56
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):f(x)=x2条-5x+6=0の解を二分法を用いたプログラムで求めてみよ。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語:C++
[4] 期限: 2月18日
[5] その他の制限:

よろしくお願いします
674デフォルトの名無しさん:2009/02/17(火) 00:46:32
>>671
scan()は自分で実装するの?
675デフォルトの名無しさん:2009/02/17(火) 00:52:59
>>674
はい、自分で適当な数字を入力して行なうので
先生は簡単だと仰ってたんですがチンプンカンプンで・・・
676デフォルトの名無しさん:2009/02/17(火) 01:34:01
>>673
>x2条
・・・
677デフォルトの名無しさん:2009/02/17(火) 01:46:07
そんな細かいタイプミスで、レスするとは・・・・・

数学相談系で、確立なんかつっこんでられないぞ!
678674:2009/02/17(火) 05:41:58
>> 675
とりあえず早起きして作ってみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8893.c
こんなので良いのかな?
何か不都合があったら教えてください。
679デフォルトの名無しさん:2009/02/17(火) 07:47:23
680デフォルトの名無しさん:2009/02/17(火) 07:47:47
>>678
ありがとうございます!!
多分不都合はないと思います
本当にありがとうございました
681デフォルトの名無しさん:2009/02/17(火) 11:49:22
>>652 まってます
682デフォルトの名無しさん:2009/02/17(火) 12:46:39
>>681
Mathematicaでも使えばいいんでない?
683デフォルトの名無しさん:2009/02/17(火) 13:03:02
>>681
数値微分を知ってるか?
684デフォルトの名無しさん:2009/02/17(火) 13:03:59
>>659
>>660
656が難しいというか、2種類の違う方法で発生させて結果が同じになるか比較しないといけないので、
これとは違う方法はないでしょうか。
685デフォルトの名無しさん:2009/02/17(火) 13:59:23
方法はいくらでもあるけどねぇ
686 ◆Xs5riRtBYc :2009/02/17(火) 14:02:50
[1] 授業単元: C言語
[2] ttp://www.uploda.org/uporg2024643.zip.html パスつきです
たくさんありますがよろしくおねがいいたします。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:GNNコンパイラGCC(GNU Compiler Collection)
[3.3] 言語:Cだとおもいます
[4] 期限: 2月20日の朝までにお願いいたします。
無理な場合はできるところまででもお願いします。
[5] その他の制限: フローチャートも必要ですがそれは
多分プログラムを見れば自分でできますよね?

3番まではなんとかできましたので4番からお願いいたします。
687デフォルトの名無しさん:2009/02/17(火) 14:23:52
>>652>>661>>662>>681
マシンパワーに任せてみた。
極大値については近似値しか出せなかった。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8895.c
688デフォルトの名無しさん:2009/02/17(火) 14:28:41
>>686

問題4
#include <stdio.h>

#define N 7

int main(void)
{
#if N%3 == 0
puts("3で割り切れます。");
#elif N%2 == 0
puts("2で割り切れます。");
#else
puts("2で割り切れません。");
#endif
return 0;
}
689デフォルトの名無しさん:2009/02/17(火) 14:33:42
テンプレに従わないのは無視しておけばいいのに
690◇Xs5riRtBYc :2009:2009/02/17(火) 14:39:30
パスワード聞かれるけど。
691 ◆Xs5riRtBYc :2009/02/17(火) 14:42:37
>>688さん
ありがとうございます。

>>690さん
メール欄です
よろしくお願いします。
692デフォルトの名無しさん:2009/02/17(火) 14:44:26
制御文のif使った例。
4.
#include<stdio.h>
#define N 9
void main(){
int a = TEIGI;
if(-1) (a%3)?(a%2)?puts("2で割り切れまません。"):puts("2で割り切れます。"):puts("3で割り切れます。");
}
693デフォルトの名無しさん:2009/02/17(火) 15:01:59
なにこれ
694692:2009/02/17(火) 15:04:18
訂正 int a = TEIGI; → int a = N;
>>689 無視は可愛そうだからな

5.switch文
#include<stdio.h>
#define N 4
const char* msg[]={"春です。","夏です。","秋です。","冬です。","不正な値です。"};

void main(){
int a = N;
switch(a<1 || a>12){
case true: puts(msg[4]); break;
case false: (a<=2||a==12) ? puts(msg[3]) :
 (a<=6) ? puts(msg[0]) :
  (a<=8) ? puts(msg[1]) : puts(msg[2]);break;
default: break;
}
}
695デフォルトの名無しさん:2009/02/17(火) 15:05:11
これ、問題があまりにひどくないか?w
これって何の問題なんだ?
696デフォルトの名無しさん:2009/02/17(火) 15:07:19
>>688
変数に代入してないからだめじゃないのか
697デフォルトの名無しさん:2009/02/17(火) 15:12:05
>>695
東京コンピュータサービスの採用試験とか
698 ◆Xs5riRtBYc :2009/02/17(火) 15:12:16
大変失礼しました。
習ったのはC言語の「プログラミングの基礎」と
「条件分岐とアルゴリズム」と「ループとアルゴリズム」と
「配列とアルゴリズム」と「関数と変数」です。

標準ライブラリというのは聞いたことがありませんのでs
今調べます。
699デフォルトの名無しさん:2009/02/17(火) 15:13:11
>>696 定義部分をNからNNにして、main1行目で int N = NN; ってところだね。

6.for文
#include<stdio.h>
#define N 15
void main(){
int i,j;
for(i=1;i<=N&&i<=20;i++,puts("")) for(j=0;j<i;j++,printf("%d",i));
}
これは、・・・普通? (問題の設定上)10以上おかしいけど。
700デフォルトの名無しさん:2009/02/17(火) 15:14:31
>>686
>>695という疑問を抱えつつ、問題9(スキャン0004を問題4と間違えた)

#include "stdio.h"
void main()
{
char *name = "yamada taro";
int list[] = { 0, 1, 4, 10 };
int i, pos;

printf( "文字列は %s\n", name );
for( i = 0; i < 4; i++ )
{
pos = list[i];
printf( "%2d 文字目=%c 領域アドレス=%08x\n", pos + 1, name[pos], name + pos );
}
}
701デフォルトの名無しさん:2009/02/17(火) 15:15:24
>>687
ありがとうございます
702デフォルトの名無しさん:2009/02/17(火) 15:20:00
>>686
6.
#define N 5
j;main(i){for(;i-1==N;exit(0));for(j=0;j<i;j++)printf("%d",i);puts("");main(++i);}

実行時に引数を与えないでください
703デフォルトの名無しさん:2009/02/17(火) 15:22:09
>>686 Q.4
#include <stdio.h>
#define N 203
main(void){
int num = N;
if(num < 3) return -1;

if(num%3 == 0) {
puts("3で割り切れます。");
} else

if(num%2 == 0) {
puts("2で割り切れます。");
} else {
puts("2で割り切れません。");
}
return 0;
}
704692とか699の中の人:2009/02/17(火) 15:23:39
ま、後は自力で似たもんばっかだし。ってか、ソース理解してるの?
ソースに対するつっこみもないところ見ると、ただ意味わからず貼り付けるだけか。
705デフォルトの名無しさん:2009/02/17(火) 15:28:55
東京コンピュータサービスすごいな…
とりあえず俺がこの会社を利用することはなさそうだ
706 ◆Xs5riRtBYc :2009/02/17(火) 15:41:26
ttp://www.uploda.org/uporg2024787.zip.html
いままではこのくらいのレベルでしたので
穴埋めですし適当に生めてましたが

今回配られたのは私には難しすぎて
ちょっとわかりかねています。

宿題に関してはやれといわれてるだけなので
どこからきたものかはわかりmせん。
707デフォルトの名無しさん:2009/02/17(火) 15:53:14
東京コンピュータサービス - Wikipedia

1974年9月9日設立。クロレラ培養を始めた社長がそれを販売し一発儲けようと画策したが失敗し倒産、
その後も懲りずに味付け卵会社→シェービングクリームの会社を設立したがことごとく失敗したため、
数年後一念発起して立ち上げた会社が当時は珍しかった人貸しのIT企業。
売上高 351億円 (2005年度)
708デフォルトの名無しさん:2009/02/17(火) 16:01:21
>>686 Q5:
#include <stdio.h>
#define N 4
main(void){
int num = N;
if(num < 1 || num > 12) {
puts("不正な値です。");
return -1;
}

switch(num) {
case 4:case 5:case 6:
puts("4月,5月,6月は春な。");
break;
case 7:case 8:
puts("7月,8月は夏な。");
break;
case 9:case 10:case 11:
puts("9月,10月,11月は秋な。");
break;
default:
puts("冬です。");
break;
}
return 0;
}
709デフォルトの名無しさん:2009/02/17(火) 16:19:43
>>686 Q.6
#include <stdio.h>
#define N 9

main(void){
int num = N;
int i, j;

for(i=1; i<=num; i++) {
for(j=1; j<=i; j++) {
printf("%d", i);
}
puts("");
}
return 0;
}
710デフォルトの名無しさん:2009/02/17(火) 17:00:48
>>686 Q.7
main(void){
int num = N;
int i, j;
i = 1;
while(i<=num) {
j = 1;
while(j<=i) {
printf("%d", i);
j++;
}
puts("");
i++;
}
return 0;
}
>>686 Q.8
main(void){
int num = N;
int i, j;
i = 1;
do {
j = 1;
do {
printf("%d", i);
j++;
} while(j<=i);
puts("");
i++;
} while(i<=num);
return 0;
}
711デフォルトの名無しさん:2009/02/17(火) 17:56:04
wikiにあるカレンダーのアルゴリズム教えてくれ下さい
712デフォルトの名無しさん:2009/02/17(火) 18:33:02
>>686 Q.9 残りと、Q.10
#include <stdio.h>
main(void)
{
char *pcPtr;
char acName[] = "yamada taro";
char list[] = "11001000001";
int i;

char acData[22+1];
strcpy(acData, "Tokyo Computer Service");
printf("%s\n", acData);

printf( "文字列は %s\n", acName );
for(i = 0, pcPtr = acName; *pcPtr; pcPtr++) {
if(list[i++] != '0')
printf( "%2d 文字目は%c 領域アドレスは0x%08x\n", i, *pcPtr, pcPtr );
}
printf("ポインタ変数のアドレスは0x%08x\n", &pcPtr);
}
713デフォルトの名無しさん:2009/02/17(火) 18:42:39
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8896.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限: 2009/2/18
[5] その他の制限:なし

scan関数の部分の
char buff[10];
if(fgets(buff,10,stdin)==NULL){
next=END;
return;
をどうやったらnext=ENDに辿り付くのか教えてもらえませんでしょうか?
714デフォルトの名無しさん:2009/02/17(火) 18:49:31
>>713
Ctrl+Z
715デフォルトの名無しさん:2009/02/17(火) 18:49:49
fgetsを調べればわかると思うけど、stdinからEOFを読み込んだ時
もしくは読み込みに失敗した時
716713:2009/02/17(火) 19:01:40
>>714-715
ありがとう解決しました
717デフォルトの名無しさん:2009/02/17(火) 19:52:36
>>686 Q.16 数字先頭空白は可
#include <stdio.h>
main(void)
{
int h, g, bmi=0, i;
float ave;
char buf[10];
do {
printf("身長(cm)を入力してください→"); scanf("%10s", buf);
sscanf(buf, "%d", &h);
} while(h<50 || h>300 || *buf<'1' || *buf>'9');
do {
printf("体重(kg)を入力してください→"); scanf("%10s", buf);
sscanf(buf, "%d", &g);
} while(g<1 || g>200 || *buf<'1' || *buf>'9');
ave = (float)g/(h*h)*10000;
if(ave < 22*0.7) bmi = 1; // < 15.4
else if(ave < 22*0.9) bmi = 2; // < 19.8
else if(ave >= 22*1.3) bmi = 5; // >= 28.6
else if(ave >= 22*1.1) bmi = 4; // >= 24.2
else bmi = 3;
printf("\nやせ  |");for(i=0;i< 9;i++)
if(bmi==1) printf("*"); else printf("-"); puts("");
printf("やせ気味|");for(i=0;i<28;i++)
if(bmi==2) printf("*"); else printf("-"); puts("");
printf("標準  |");for(i=0;i<43;i++)
if(bmi==3) printf("*"); else printf("-"); puts("");
printf("太り気味|");for(i=0;i<12;i++)
if(bmi==4) printf("*"); else printf("-"); puts("");
printf("肥満  |");for(i=0;i< 8;i++)
if(bmi==5) printf("*"); else printf("-"); puts("");
}
718デフォルトの名無しさん:2009/02/17(火) 21:12:17
[1]趣味 [2] 問題文(含コード&リンク):
 どう実装してもよいので比の連立方程式が与えられた時に
 それを満たす最小の自然数の組を求めるプログラムを作れ。
 答えがない場合は「no answer」と表示する

 わかりにくいかもしれないので、問題文らしくしてみると
 同じサイズで空でない配列a,b,c,dを考え、iを添え字とする
 a[i],b[i]の値はある集合Xの要素xjの添え字jを表す
 a[i]:b[i]=c[i]:d[i](つまり、b[i]*c[i]=a[i]*d[i])の関係式を与えられた時
 全ての関係式を満たす最小の自然数xjの組e[i]を返せ
 (この問題の形式に従う必要は無い)

 例1 a={1,2,3,4},b={2,3,4,5},c={10,3,2,7},d={3,5,5,12}の時
  x1:x2=10:3
  x2:x3=3:5
  x3:x4=2:5
  x4:x5=7:12
  この解となる組の集合うち、全てが自然数で最小のものであるe={140,42,70,175,300}(={x1,x2,x3,x4})を出力する
 例2 a={2,3,1,4},b={1,2,3,2},c={5,3,4,6},d={6,2,5,3}
  x2:x1=5:6
  x3:x2=3:2
  x1:x3=4:5
  x4:x2=6:3
  このときe={12:10:15:20}(={x1,x2,x3,x4})を出力する
 例3 a={1,1,2} b={2,3,3} c={1,1,1} d={2,3,1}の時これを満たす自然数はないため「no answer」と表示する
[3] 環境 WinXP,VC8.0(or gcc 3.4.4 with cygwin),C++、Cどちらでも可
[4] 期限: なし
[5] その他の制限:標準以外のライブラリはなし(STLはOK,Boostはだめ)
特に「どうやってループを回すか」がわからない
例1みたいな直列につながった例なら何とか解ける気がするが
例2みたいになるとどうやって解いて良いのかわからずつまづいた
よろしくお願いします
719デフォルトの名無しさん:2009/02/17(火) 22:15:09
>>718
ここは、専門家が考えた課題を丸投げするスレです。
質問スレでもいけ
720デフォルトの名無しさん:2009/02/17(火) 23:10:10
>>719
専門家って・・・・ただ連立方程式に直して剰余定理とか使ってくだけでしょう。
まぁ、ただ解が欲しいなら for(i) for(j) for(k) for(l) if( func(i,j,k,l)==true ) printf( あsdfgふじこ );
で、10000の4乗回くらい計算すればええんでない?大体1日位で終わるんでない?

最小の整数の組ってさ、普通何を指すのさ?
(1,9)と(2,3) とか。
721デフォルトの名無しさん:2009/02/17(火) 23:18:00
4個とは限らないからもっと賢く実装しろって問題でしょ。
722デフォルトの名無しさん:2009/02/17(火) 23:26:15
>>686 Q.15
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8897.txt
ところで、gccでの"可能\"のコンパイルオプションが分からないので、そのままにしてる。
723デフォルトの名無しさん:2009/02/17(火) 23:38:12
>>720
トウシロウの考えた駄文は、読むにも値しないってこと。
724718:2009/02/17(火) 23:54:01
なるほど、ここはそういう需要のスレなわけね
一応先ほどの問題には元ネタがあるんだが、
問題文が英語なので俺が駄訳すると状況はかわらんのでよそ行くわ
725デフォルトの名無しさん:2009/02/18(水) 00:17:06
>a[i]:b[i]=c[i]:d[i](つまり、b[i]*c[i]=a[i]*d[i])の関係式を与えられた時
(゚Д゚)ハア?
X_a[i] : X_b[i] = c[i] : d[i] だろ
駄訳というか根幹から間違ってんじゃねーかドアホ
726デフォルトの名無しさん:2009/02/18(水) 00:26:34
ちなみにおそらく「連立方程式に書き直した時、ランクが行列の次元より1小さい」が答えと思われるがどうか
727デフォルトの名無しさん:2009/02/18(水) 00:32:02
原文晒して欲しい
728デフォルトの名無しさん:2009/02/18(水) 01:48:42
>>686 Q.14
#include <stdio.h>
#define BUF_SIZE 1024
main(void)
{
int count, work;
char buffer[BUF_SIZE];
FILE *fp1, *fp2;
if(!(fp1 = fopen("data1.txt", "r"))) {
fprintf(stderr, "File data1.txt open error!");
return -2;
}
if(!(fp2 = fopen("data2.txt", "a"))) {
fprintf(stderr, "File data2.txt open error!");
return -2;
}
do {
count = fread(buffer, 1, BUF_SIZE, fp1);
work = fwrite(buffer, 1, count, fp2);
} while (count == BUF_SIZE);
fclose(fp1);
fclose(fp2);
return 0;
}
729デフォルトの名無しさん:2009/02/18(水) 02:14:56
>>686 Q.13と Q.13の残り
#include <stdio.h>
#define A1 20
#define A2 30
int add(int, int);
void mult2(int*, int);
void TelDataGet(char*);
main(void)
{
int a1 = A1;
int a2 = A2;
int add1, mult;

char acTelData[15];
TelDataGet(acTelData);
printf("TelNo=%s\n", acTelData);

add1 = add(a1, a2);
printf("%dと%dの和は%d\n", a2, a1, add1);
mult2(&mult, add1);
printf("%dの2倍は%d\n", add1, mult);
return 0;
}
int add(int a1, int a2)
{ return a1 + a2; }
void mult2(int *ma, int m1)
{ *ma = m1 * 2; }
void TelDataGet(char* tel)
{ tel[0] = '1'; tel[1] = '\0'; }
730デフォルトの名無しさん:2009/02/18(水) 03:12:42
[1] 授業単元:万年カレンダー
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8904.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:(gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 2009年2月20日まで

1ヶ月表示ですが2×2の4ヶ月表示にしたいのですがどうしたらいいかわかりませんのでお願いします。
あと祝日や土日のマークもつけたいのですがどのようなプログラムをつくればいいのですか?
731デフォルトの名無しさん:2009/02/18(水) 09:55:00
>>730
    /* 空白の表示 */
    for (loop=0;loop<week;loop++) {
//        printf("   ") ;
        printf("    ") ;
    }
732デフォルトの名無しさん:2009/02/18(水) 10:41:18
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8905.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++
 [3.3] 言語: C
[4] 期限: 2/20
[5] その他の制限: 制限など多かったので、上のリンク先にまとめました。よろしくお願いします。
733デフォルトの名無しさん:2009/02/18(水) 11:35:49
734デフォルトの名無しさん:2009/02/18(水) 13:39:43
[1] 授業単元: プログラミング言語論
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8908.txt
[3] 環境
 [3.1] OS:Mac
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2009年2月20日24:00まで
[5] その他の制限:問題文のヒントに沿っていればその他は制限はないはずです。

よろしくおねがいします。
735デフォルトの名無しさん:2009/02/18(水) 17:41:01
>>733
ありがとうございます、助かりました。
736デフォルトの名無しさん:2009/02/18(水) 17:59:49
737デフォルトの名無しさん:2009/02/18(水) 21:11:13
[1] 実践プログラミング2
[2] 問題文
C言語を用いたWindowsプログラミング課題

長方形の左上の頂点の座標(x1,y1)
および右下の頂点の座標(x2,y2)の二点を与えたときに、
その長方形に外接する長方形を描画するプログラムを作成せよ。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ:gcc(講義ではVisualStudio2008使用)
 [3.3] 言語:C
[4] 2009年2月22日24:00まで
[5] その他の制限: ウィンドウの大きさは自由、背景は白ということ以外は特に制限ありません。

何卒、よろしくお願いします。
738デフォルトの名無しさん:2009/02/18(水) 22:03:59
>>737
一意じゃないぞ? 動的プログラムか?
739デフォルトの名無しさん:2009/02/18(水) 22:26:21
横縦がそれぞれx軸y軸に平行な長方形じゃねぇの?とエスパー
740デフォルトの名無しさん:2009/02/18(水) 22:52:47
適当に長方形を回転させながら外接させるのかね
741738:2009/02/18(水) 23:40:08
いやさ、作る長方形どころか基準となる長方形すらx軸平行とかじゃない可能性すらあるってこと。
742デフォルトの名無しさん:2009/02/19(木) 00:16:55
そこは最大限好意的にRECT構造体と判断してやろうぜ
>>739は出来た子や
743デフォルトの名無しさん:2009/02/19(木) 01:31:37
>>685
どれか、お願いします。。。
744737:2009/02/19(木) 01:37:12
皆様ありがとうございます。混乱を招いてしまい申し訳ありません
長方形はx軸並行のものです。長方形の回転はありません。

講師に楕円は一意には定まりませんという質問を送ったのですが
「外接している楕円の中でx軸に平行な辺が長辺・・・
などの縛りを加えて、とにかく長方形に外接する楕円をひとつ描画していればよい」
という条件で解答してよいとのことでした。

長方形につきましてはスキャナ等が無く、図をあげられなかったので説明不足となってしまい、申し訳ありませんでした。
引き続き解答いただけましたら幸いです。
よろしくおねがいします。
745デフォルトの名無しさん:2009/02/19(木) 01:40:29
楕円…?
746デフォルトの名無しさん:2009/02/19(木) 02:04:23
長方形に外接する長方形だったらそのままでいいもんね。
747デフォルトの名無しさん:2009/02/19(木) 02:18:53
mapmodeをANISOTROPICにして円を描けばいいのかね
748737:2009/02/19(木) 02:36:37
今さら問題文を書き間違えていたことに気が付きました。
特にすでに解答を考えてくださっていた方々、本当に申し訳ありませんでした。

以下が正しい問題文になります

[1] 実践プログラミング2
[2] 問題文
C言語を用いたWindowsプログラミング課題

長方形の左上の頂点の座標(x1,y1)
および右下の頂点の座標(x2,y2)の二点を与えたときに、
その長方形に外接する「楕円」を描画するプログラムを作成せよ。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ:gcc(講義ではVisualStudio2008使用)
 [3.3] 言語:C
[4] 2009年2月22日24:00まで
[5] その他の制限: ウィンドウの大きさは自由、背景は白ということ以外は特に制限ありません。

本当に申し訳ありませんでした。
解答いただける方々、どうかよろしくお願いします。
749デフォルトの名無しさん:2009/02/19(木) 02:38:54
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=8667(8912.zipが私のです)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 2月20日
[5] その他の制限: 特になし

どなたかよろしくお願いします.
750デフォルトの名無しさん:2009/02/19(木) 02:44:56
751749:2009/02/19(木) 02:46:36
>>750
うわーお・・・
ごめんなさい
752デフォルトの名無しさん:2009/02/19(木) 03:04:58
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=8667 (8912.zipが私のです)
753emi:2009/02/19(木) 03:09:43
javascriptやPHPの宿題掲示板はありますか?
あったとして答えてくださるような方は
おられるのでしょうか…
(知識レベルではなくて、
スレを随時チェックしておられるのかということです。)
754デフォルトの名無しさん:2009/02/19(木) 05:14:20
755デフォルトの名無しさん:2009/02/19(木) 13:58:53
if( e[0] != 1000 ){
if( e[1] != 1000 ){
if( e[2] != 1000 ){
break;
}
else{
e[2] = 230;
q[2] = m+8;
}
}
else{
e[1] = 230;
q[1] = m+8;
}
}
else{
e[0] = 230;
q[0] = m+8;
}


を簡単にfor文にすることはできるでしょうか?
756デフォルトの名無しさん:2009/02/19(木) 14:22:27
for(i=0; i<3; i++) if(e[i]==1000) break;
if(i < 3) e[i] = 230, q[i] = m + 8;
757デフォルトの名無しさん:2009/02/19(木) 14:31:56
for(i=0; i<3; i++) if(e[i]==1000) {e[i] = 230, q[i] = m + 8; break;}
758デフォルトの名無しさん:2009/02/19(木) 14:38:31
>>755
for ( i = 0; i <= 2; i++) {
if ( e[ i ] == 1000) {
e[ i ] = 230;
q[ i ] = m + 8;
}
}
break;
759デフォルトの名無しさん:2009/02/19(木) 14:49:16
>>758
if-elseを勉強しなおしw
760デフォルトの名無しさん:2009/02/19(木) 16:57:44
break;があるから前後に
while(1)
{
//
}
でもあるのかと思ってね
761デフォルトの名無しさん:2009/02/19(木) 17:02:29
>>760
それでも、元 break に流れる条件と異なるぜ?
762デフォルトの名無しさん:2009/02/19(木) 17:05:22
>>760
breakのことじゃないw
763デフォルトの名無しさん:2009/02/19(木) 17:43:01
if( e[0] == 1000 ) {e[0] = 230; q[0] = m+8;}
else if( e[1] == 1000 ) {e[1] = 230; q[1] = m+8;}
else if( e[2] == 1000 ) {e[2] = 230; q[2] = m+8;}
else break;

と書き直せば、

for(i=0;i<3;i++) if(e[i] == 1000) {e[i] = 230; q[i] = m+8;}
break;

どっか、違ってるかな?
764デフォルトの名無しさん:2009/02/19(木) 17:45:38
>>763
分かったから、おとなしくIF文勉強し直してこいや、な?
765デフォルトの名無しさん:2009/02/19(木) 17:46:31
breakの外のループから全部書いてもらわんとわからんわ
766デフォルトの名無しさん:2009/02/19(木) 17:47:11
>>763
なんというアホ
767763:2009/02/19(木) 17:53:54
>>764
人違い。この問題初投稿。
>>763 ホントだあほだった。
for(i=0;i<3;i++) if(e[i] == 1000) {e[i] = 230; q[i] = m+8; break;}
if(i==3) break;

これでどう?
768デフォルトの名無しさん:2009/02/19(木) 17:56:20
     if( e[0] == 1000 ) {e[0] = 230; q[0] = m+8;}
else if( e[1] == 1000 ) {e[1] = 230; q[1] = m+8;}
else if( e[2] == 1000 ) {e[2] = 230; q[2] = m+8;}
else break;

と書き直す。
769デフォルトの名無しさん:2009/02/19(木) 18:00:10
>>763をインデントしただけでつか?
770755:2009/02/19(木) 20:50:16
>>756-768
ありがとうございました

無事成功しました。
771デフォルトの名無しさん:2009/02/20(金) 01:27:12
772デフォルトの名無しさん:2009/02/20(金) 05:13:14
[1] 授業単元:ポインタ
[2] 問題文(含コード&リンク):
二つの変数を入力し、その四則演算の結果を表示するプログラムex6_5を作成せよ。
プログラムの仕様は以下の通り。
・main()関数では2つの入力値を格納する変数および四則演算結果を格納する変数
を宣言する
・2変数の入力を行うための関数inp_num()を作成する。関数仕様は以下の通り。
void inp_num(int *数値1へのポインタ, int *数値2へのポインタ);
※main()関数内の変数(数値1と数値2)に対して別関数inp_num()にて値を
書き込むため、引数としてポインタを用いる
※2変数の入力を促す表示もinp_num()内で行う
・四則演算の結果を求める関数calc()を作成する。関数仕様は以下の通り。-
int calc(int 変数1, /* 変数1の値 */
int 変数2, /* 変数2の値 */
int *足し算結果格納先, /* 足し算結果格納先のアドレス */
int *引き算結果格納先, /* 引き算結果格納先のアドレス */
int *掛け算結果格納先, /* 掛け算結果格納先のアドレス */
int *割り算結果格納先 /* 割り算結果格納先のアドレス */
);
返却値: 0:正常終了
-1:エラー(ゼロ除算が発生する場合)
・ゼロ除算がある時には、割り算以外の結果は表示し、割り算結果はエラーが
ある旨の表示を行う
[3] 環境
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: なるべく早く。
お願いします。
773デフォルトの名無しさん:2009/02/20(金) 08:49:14
774デフォルトの名無しさん:2009/02/20(金) 11:28:10
<<773
ありがとう。
775748:2009/02/20(金) 15:43:39
>>771
迅速な解答どうもありがとうございました。

動作確認のためコンパイルしたところ、以下のエラーが出て実行できませんでした。
エラー 1 error C2440: '初期化中' : 'const char [11]' から 'TCHAR [100]' に変換できません。 c:\users\media\desktop\drawrect\drawrect.cpp 17行目
エラー 2 error C2440: '初期化中' : 'const char [9]' から 'TCHAR [100]' に変換できません。18行目
エラー 3 error C2731: 'WinMain' : 関数はオーバーロードできません。34行目
エラー 4 error C2664: 'CreateDialogParamA' : 2 番目の引数を 'LPWSTR' から 'LPCSTR' に変換できません。(新しい機能 ; ヘルプを参照)  161行目

可能でしたら、対応のほどよろしくお願いいたします。
776デフォルトの名無しさん:2009/02/20(金) 16:29:04
全くソースも見てないけど文字列の扱いが悪い予感。
文字列をTEXT()でかこってみな
777デフォルトの名無しさん:2009/02/20(金) 17:03:01
>>775
プロジェクトはWin32。誤ってプロジェクトをWin32コンソールにしてないか。
>>771 期待はしないほうがいいけど。
778デフォルトの名無しさん:2009/02/20(金) 17:49:15
>>775
DrawRevt.cppの先頭に
#undef UNICODE
追加したら
779777:2009/02/20(金) 18:07:32
プロジェクト→プロパティ
構成プロパティ→全般→プロジェクトの既定値→文字セット→マルチバイト文字セットを使用する
780デフォルトの名無しさん:2009/02/20(金) 21:05:33
>>771 円しか考え付かなかった。
Rectangle(hdc,lx,ly,rx,ry);
/*
int dx,dy;
dx = (rx - lx)/4;
dy = (ry - ly)/4;
lx -= dx;
rx += dx;
ly -= dy;
ry += dy;
if(lx > 0 && ly > 0)
Ellipse(hdc,lx,ly,rx,ry);
*/
double cx, cy, cr;
cx = lx + (rx - lx)/2; // 中心点のX座標
cy = ly + (ry - ly)/2; // 中心点のY座標
cr = sqrt((cx - lx)*(cx - lx) + (cy - ly)*(cy - ly));
Ellipse(hdc, (int)(cx - cr), (int)(cy - cr),
(int)(cx + cr), (int)(cy + cr));
781777:2009/02/21(土) 01:36:18
782デフォルトの名無しさん:2009/02/21(土) 01:46:26
明日暇だから俺も修正してみるかな
さすがに楕円一個じゃ寂しいだろう
783デフォルトの名無しさん:2009/02/21(土) 05:23:43
長方形に外接する楕円って無限じゃないの?
784デフォルトの名無しさん:2009/02/21(土) 07:44:07
>>783
縦と横の2個じゃないの
785デフォルトの名無しさん:2009/02/21(土) 08:33:23
いや、無限にあるな。
786 ◆Xs5riRtBYc :2009/02/21(土) 08:51:40
>>686です
皆様のおかげで卒業できそうでございます。
ありがとうございました。
無事に第2新卒になれます。

787749:2009/02/21(土) 15:06:39
>>749をどなたかお願いできないでしょうか。
788 ◆r7Y88Tobf2 :2009/02/21(土) 15:08:21
[1] 授業単元:プログラム設計
[2] 問題文(含コード&リンク):

1.0〜100までの乱数axとayを作成し、これを点(ax,ay)とする。この点は、図の四角形の内部にある。
2.点(ax,ay)から点(50,50)までの距離を求める。
3.「2」で求めた距離が50未満であれば円の内側、50以上であれば円の外側とする。
4.「1」〜「3」を繰り返す。

「1」〜「4」を行い、円の内側になる点の数をn1、円の外側にある点の数をn2とするとき、n1+n2は点の総数となる。
四角形の面積は10000であり、円の面積は2500πである。
円の面積と点の数には関係があることから、数多くの点で試行することで、円周率πを求めることができる。
小数点以下6桁程度までの精度でπを求めること。小数点以下6桁程度の精度を持つ場合、小数点以下7桁目の数は変化しなくなるはずである。

※乱数はrand関数を使う。可能であれば、srand関数による乱数シードの設定も行うこと。
※小数点以下切り捨てを行うにはfloor関数を使う。
[3] 環境
 [3.1] OS:Linux
 [3.3] 言語: c言語
[4] 期限: 2009年2月25日まで
[5] その他の制限:この問題文の内容を守りさえすれば大丈夫だと思います。
授業の再レポートなのですが、わからなくて苦戦しております。皆さんの力を貸してください。
789 ◆r7Y88Tobf2 :2009/02/21(土) 15:11:28
788です。
課題のURLは
http://www.riri-chan.homeip.net/kougi_program/kadai.pdf
です。よろしくお願いします。
790デフォルトの名無しさん:2009/02/21(土) 15:44:47
モンテカルロ法の基礎の基礎だね
普通は計算量的に原点と四分円でやるんだけど

んで、「手伝うな」って宿題を手伝うのはOKだっけ?
791デフォルトの名無しさん:2009/02/21(土) 15:59:12
>>790
> んで、「手伝うな」って宿題を手伝うのはOKだっけ?
基本的に、このスレの目的は一番バカな質問を受けつけることと、
他人の学習機会を妨害して、ボウフラの如き自称技術者を量産することだら、
いいんじゃねーの?
792デフォルトの名無しさん:2009/02/21(土) 15:59:44
>>791
だら・・・
793デフォルトの名無しさん:2009/02/21(土) 16:06:38
やってみたけど、なんか3.06位で収束してしまった
どこか間違えたかなぁ
794 ◆r7Y88Tobf2 :2009/02/21(土) 16:19:00
788です。携帯からですみません。

手伝うなと課題を丸投げすることを不快にさせてすみません。
モンテカルロ法についてですが、似たようなプログラムをいくつか見たのですが、どのプログラムも関数などが違っていてわからないことがありました。
よろしくお願いします
795デフォルトの名無しさん:2009/02/21(土) 16:19:34
rand() % 101とかrand() / (RAND_MAX + 1.0) * 101とかにしてない?
796デフォルトの名無しさん:2009/02/21(土) 16:38:31
いや、乱数はboostのライブラリ使って
uniform_int<> dst(0, 100)ってやってたんだけど…まあ、いいかw
797デフォルトの名無しさん:2009/02/21(土) 16:42:24
そのライブラリはわからないけど、100が出る確率が他の数字と同じならずれるよ。
798デフォルトの名無しさん:2009/02/21(土) 16:54:44
ああ、そういえばそうですね。
ありがとう!
799デフォルトの名無しさん:2009/02/21(土) 17:18:32
>>788
試行回数 nTryTimes を億のオーダーで試してみたけど5桁以降は結構ばらける


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

int main(int argc, char* argv[])
{
const int nTryTimes = 10000000;
int n1 = 0;
int n2 = 0;
//乱数の種をUNIX時刻で初期化
srand( time(NULL) );
int i;
for( i = 0; i < nTryTimes; ++i )
{
double dAx = 50.0 - ( ((double)rand() / (double)RAND_MAX) * 100.0);
double dAy = 50.0 - ( ((double)rand() / (double)RAND_MAX) * 100.0);
if( (dAx * dAx + dAy * dAy) < 2500.0 ){
++n1;
}else{
++n2;
}
}
printf("PI = %lf\n", ((double)n1/(double)(n1 + n2))*4.0);
return 0;
}
800デフォルトの名無しさん:2009/02/21(土) 17:21:33
なんでnTryTimesで割らないでn1+n2で割ってるの?
801デフォルトの名無しさん:2009/02/21(土) 17:32:26
確かにそうだwww
802デフォルトの名無しさん:2009/02/21(土) 17:32:30
そのくらい良いじゃないか…
803デフォルトの名無しさん:2009/02/21(土) 17:40:26
まぁその方がユニークで真似したと思われないということか
教官がスレを見てたらアウトだが
804 ◆r7Y88Tobf2 :2009/02/21(土) 17:51:16
788です。
わかりやすいプログラムをありがとうございました。
ただいま、Linaxで起動させてみたところ、確認できました。
本当にありがとうございました。
あとは教官がこのスレを見ていないことを祈りますww
805748:2009/02/21(土) 18:01:07
>>771
>>777
ただ今無事動作確認しました。
自分ではどうしても外接楕円の求め方すら分かりませんでした。
回答および修正・アドバイス等ありがとうございました!
806デフォルトの名無しさん:2009/02/21(土) 18:02:31
6桁程度の精度、とかあるからε-δを使った方が良いんじゃない?
807デフォルトの名無しさん:2009/02/21(土) 19:40:29
ε-δって言ってみたかっただけか?使い慣れない言葉は良くないぞ。

1回の試行で変動する幅はその時点の試行回数の逆数に大体一致するから
6桁精度=変動量が10^-6以下=100万回の試行でOKだな
ただし確度の保証はないが
808デフォルトの名無しさん:2009/02/21(土) 21:29:50
n個の頂点を持つ多角形が、平面座標上にあるときの面積を求める
プログラムを教えてください。

多角形の各頂点の座標は、右回りに(x0,y0),(x1,y1)…(xn-2,yn-2),
(xn-1,yn-1)とする。

コードは簡単なもので構わないです。
お手数おかけしますが、何卒よろしくお願いいたします。
809デフォルトの名無しさん:2009/02/21(土) 21:36:52
>>808
>>1 のテンプレ読んで書き直せ
810デフォルトの名無しさん:2009/02/21(土) 21:52:10
>>809
失礼いたしました。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
n個の頂点を持つ多角形が、平面座標上にあるときの面積を求める
プログラムを教えてください。

多角形の各頂点の座標は、右回りに(x0,y0),(x1,y1)…(xn-2,yn-2),
(xn-1,yn-1)とする。

[3] 環境
 [3.1] OS: (Windows/Linux/等々) :Windows XP
 [3.2] コンパイラ名とバージョン: −
 [3.3] 言語: C
[4] 期限:来週中までに教えて貰えれば結構です。
[5] その他の制限: C言語並びにプログラミングを勉強し始めてまだ間もないので、
  お力をお貸しください。
  コンパイラについては、残念ながら普段は自宅のPCではなく、会社のPCで作業をしている為、
  詳しい事がわかりません。

お手数お掛け致しますが、何卒よろしくお願いいたします。
811デフォルトの名無しさん:2009/02/21(土) 22:02:32
>>810 そんなんで給料くれるんならオレと変わってくれよ
#include<stdio.h>

#define n 3

typedef struct tag_vector_t{double x, y;}vector_t;

vector_t vector_sub(vector_t a, vector_t b){
vector_t c;
c.x=a.x-b.x;
c.y=a.y-b.y;
return c;
}

double triangle(vector_t a, vector_t b){
return 0.0; // ここは自分で考えてね
}

int main(void){
vector_t point[n], a, b;
double result=0.0;
int i;

for(i=0;i+2<n;i++){
a=vector_sub(point[i+1], point[0]);
b=vector_sub(point[i+2], point[0]);
result+=triangle(a, b);
}
printf("%f\n", result);

return 0;
}
812デフォルトの名無しさん:2009/02/21(土) 22:31:58
>>810
去年のスパコンの問題に類題があったな
ピックの定理を使う奴
813デフォルトの名無しさん:2009/02/21(土) 22:34:25
#include <stdio.h>
#include <stdlib.h>

int main(void) {
int i,j;
double x[64],y[64],S=0.0;
char buf[32];
FILE *fp;

fp=fopen("coordinates.dat","r");
if(fp==NULL) {
fprintf(stderr,"File open error.\n");
exit(1);
}
for(i=0;fgets(buf,32,fp);i++) {
sscanf(buf,"%lf %lf",&x[i+1],&y[i+1]);
}

x[0]=x[i]; x[i+1]=x[1];
for(j=1;j<=i;j++) S+=(x[j-1]-x[j+1])*y[j];

printf("%lf\n",-0.5*S);
fclose(fp);
return 0;
}
814 ◆1Ae71LZuns :2009/02/22(日) 01:28:09
[1] 授業単元: プログラム
[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8918.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C言語
[4] 期限: 24日の昼12頃まで
[5] その他の制限: 皆さんご協力お願いします。
815デフォルトの名無しさん:2009/02/22(日) 18:29:45
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8919.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2月23日中(できれば15時前までにお願いします。可能なら今日中に)
[5] その他の制限:
使用関数などの制限はありませんが、自分で理解してからの提出にしたいため、
なるべく簡単な手法で問題のアルゴリズムを実現しているプログラムにしてください。
プログラムの構造が冗長気味になっていても構いませんので、
if文とかfor文とか程度を複数使う感じだと助かります
問題文の各問題の※以降はプログラム自体には関係ないですが、
どういった結果になりそうかを教えてくださるとありがたいです
816デフォルトの名無しさん:2009/02/22(日) 19:55:59
>>814 L-line,C-type は、皆さんご協力お願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8920.txt
817デフォルトの名無しさん:2009/02/22(日) 22:16:05
[1] 授業単元: プログラミング言語V
[2] 問題文(含コード&リンク):

次の記述を呼んで@〜Cの記述の妥当性について簡単に記述せよ

システムに1つのカウンタ回路とカウントパルスを送り込むポートが用意されていて
プログラムによりパルスのon/offを制御する仕組みになっている。
なお、マルチタスクOS上で複数のタスクと割り込み処理がこのカウンタを
制御する必要があるため、このカウンタへのパルスを発生するための関数を作ろうと思う。

@この関数は再帰可能な記述にする必要がある
Aこの関数は再入可能な記述にする必要がある
Bこの関数はセマフォによる資源管理を行う必要がある。
Cこの関数は割り込み禁止にする必要がある

[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C

よろしくおねがいします
818デフォルトの名無しさん:2009/02/22(日) 23:29:33
@がよく分かんない。
誰か優しく解説して。
819デフォルトの名無しさん:2009/02/22(日) 23:34:48
@は無関係、が答えだろ
820デフォルトの名無しさん:2009/02/23(月) 01:52:02
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

以下の問いに答えよ
同じ変数に異なる型名によるアクセスを可能にする仕組みをなんと呼ぶか?

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2月25日

学期末のレポート問題です。よろしくお願いします。
821 ◆1Ae71LZuns :2009/02/23(月) 02:08:24
>>816
ありがとうございます。
残りの機能誰かできませんか??よろしくおねがいします。
822816:2009/02/23(月) 02:18:35
>>814 C-type 入ってない。と、理由は無いがファイルオープンは1回のみ。
仕様的なカーソル移動を直した。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8921.txt
823デフォルトの名無しさん:2009/02/23(月) 03:12:40
>>820
キャストのこと?
変数のオーバーロードは基本的にできないし。Cでは。
それともグローバル変数に対するローカル変数のことかな。
意味不明すぎる。
824デフォルトの名無しさん:2009/02/23(月) 03:15:19
>>820
問題文の意味が分からない
共用体のことかな?
825デフォルトの名無しさん:2009/02/23(月) 04:51:10
キャストかなあ。
型名によるアクセスっていうとなんか違う気もするが。
826デフォルトの名無しさん:2009/02/23(月) 06:45:50
>>814
暇だから作った。クオリティは保障しない。眠いし。。。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8922.zip
827デフォルトの名無しさん:2009/02/23(月) 06:49:13
>>826 に書くの忘れたが、そのプログラムはディスク負荷が高めなので気をつけてくれ。
828749:2009/02/23(月) 08:34:58
>>749
課題1は何とか終わりましたので、課題2をどなたかよろしくお願いします。
829816:2009/02/23(月) 10:05:50
>>814 ファイルオープンは1回のみ。1行の文字数も8で固定。
CVS diff
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8923.txt
830814 ◆1Ae71LZuns :2009/02/23(月) 18:45:27
>>816
>>826
皆さんどうもありがとうございます。
マジで助かります。
自分の非力さを改めて痛感しました(^_^;)
831デフォルトの名無しさん:2009/02/23(月) 19:15:33
>>820
まさか、ポインタじゃないよなw
832817:2009/02/23(月) 22:40:15
>>823>>824>>831
ご考察ありがとうございます。
わたしもこの問題はもうよくわからないので投げます。
本当にありがとうございました
833832=820:2009/02/23(月) 22:41:31
ごめんなさいまちがえました
817様じゃなく820です
すいません
834デフォルトの名無しさん:2009/02/23(月) 22:51:02
共用体なんじゃね?と思ったが、時すでに遅し
835820:2009/02/23(月) 23:36:28
>>834
ありがとうございます
ありがたいです
836817:2009/02/23(月) 23:37:36
[1] 授業単元: プログラミング言語V
[2] 問題文(含コード&リンク):

次の記述を呼んで@〜Cの記述の妥当性について簡単に記述せよ

システムに1つのカウンタ回路とカウントパルスを送り込むポートが用意されていて
プログラムによりパルスのon/offを制御する仕組みになっている。
なお、マルチタスクOS上で複数のタスクと割り込み処理がこのカウンタを
制御する必要があるため、このカウンタへのパルスを発生するための関数を作ろうと思う。

@この関数は再帰可能な記述にする必要がある
Aこの関数は再入可能な記述にする必要がある
Bこの関数はセマフォによる資源管理を行う必要がある。
Cこの関数は割り込み禁止にする必要がある

[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C

どなたか助けてください
おねがいします
837デフォルトの名無しさん:2009/02/23(月) 23:48:01
>>836
自信なし。というかこれCの質問か?
カウンタの制御っていうのが具体的に何を指すのか曖昧だけど

@(゚Д゚)ハア?
Aカウンタ読み出しは同時に出来る必要があるから再入可能であるべきだけど、
 ここで作るのはカウントアップの関数なので、再入可能であってはいけないというか、不可能
Bここで考えてるポートは1つだろうから、同時アクセスができないので資源管理が必要。
 セマフォの資源数が1ならOK。ただそれミューテックスじゃねとは思う。
C他人が使ってるポートを横取りは出来ないので割り込み禁止の必要がある。
838836:2009/02/24(火) 00:29:15
>>837
こんなに早く解答してくださって感謝の言葉もありません。
本当にありがとうございます

>>というかこれCの質問か?
c言語の授業の問題なんです・・・・・
839デフォルトの名無しさん:2009/02/24(火) 01:01:10
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):

振り子の運動方程式 y''+w^2*siny=0 w=(g/l)^1/2
はyが小さい時 y''+w^2*y=0 と近似でき
この解はt=0のとき y=0,y'=0という条件でy=acos(wt)となり周期はT=2π/w
振り子の運動についてt=0からt=Tまで100等分し、それぞれの点に関して時刻t及び、
y=acos(wt)で計算した値と上記の近似していない微分方程式を
ルゲン・クッタ法で計算した値の両方を標準出力へ出力するプログラムを作成せよ。
ここで、振り子の長さl、質量m、及びt=0のときのyの大きさは、
プログラム冒頭で#define指令によってマクロ名によってプログラム中での値を与えるようにせよ。
また、それぞれの値は、1.0(m)、1.0(kg)、及び3.14/4.0(rad)とせよ。
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C

丸投げですみません 返答してもらえると非常に助かります。






840デフォルトの名無しさん:2009/02/24(火) 01:25:18
ルゲン・クッタ…
それいつまでにやればいいの?
841デフォルトの名無しさん:2009/02/24(火) 02:21:38
情報の課題で必ずといっていいほど出るけど
ルンゲクッタってそんなに良いアルゴリズムなん?
842デフォルトの名無しさん:2009/02/24(火) 02:31:24
>>841
ニュートン法の効率知ってる?
違うことやってはいるが、精度的にルンゲクッタ(4次)は上をいくのよ。

ルンゲクッタ10次くらいで、アポロ11号とか飛ばしてたってきいたけど
843デフォルトの名無しさん:2009/02/24(火) 02:46:14
おれはユッケビビンバの方が好きだな
844デフォルトの名無しさん:2009/02/24(火) 02:54:51
こういう、H=T+Vがまんま保存するような系では
明らかに良くないアルゴリズムだけどな
精度も悪いし時間もかかる
845デフォルトの名無しさん:2009/02/24(火) 06:51:18
[1] 授業単元:(復習課題) 分岐 繰り返し 一次元配列 2重ループ 2次元配列 文字列(これらどれかを使って解け)
[2] http://www.pref.fukushima.jp/pc-concours/2008/03/pdf/2008honsen.pdf 問1問4問6
[3] 環境
 [3.1] OS:Windows
 [3.2]visual C++
 [3.3] 言語:C++
[4] 期限: 2月28日
[5]include<stdio.h>を使ってください。文字列のライブラリー関数は必要に応じて使ってください。
iostreamライブラリ関数使わないでください。

お願いします

846デフォルトの名無しさん:2009/02/24(火) 09:58:23
>>840
金曜までなんで早めにやってもらえると助かりますLOL
847 ◆pCAb6WPR/A :2009/02/24(火) 11:17:48
>>810です。
遅くなりましたが、>>811-813の先生方多謝であります。

ただ、いくつか補足でお願いしたいことがあります。

まず、問題の多角形の面積を求めるコードですが難しいコードを使わず、多角形に補助線を引き、台形に何個か分けて面積を求め、その後に余白分の面積を求め最初に求めた面積から引いて、元の多角形の面積を求めるといったコードを「式と演算」を使って書きたいのです。

現時点で僕はまだCの基本と、入出力、式と演算くらいしか学べてないのでその範囲で出来る内容でお願いします。

もし、厳しいようなら、出来ない範囲は個人的に勉強するのでソースだけでも参考にさせてください。

宜しくお願いします。
848 ◆pCAb6WPR/A :2009/02/24(火) 11:21:27
あ、忘れてましたがコンパイラはどうやら
MSC Ver.5.1でした。

あと上に書いた文章、
携帯からだったのでとても見づらいと思いますが
宜しくです。
849デフォルトの名無しさん:2009/02/24(火) 11:36:52
850849:2009/02/24(火) 11:39:03
間違えた。
31行目
×: for(i = 0; i < count; i++)
○: for(i = 1; i < count; i++)
851デフォルトの名無しさん:2009/02/24(火) 13:58:43
852849:2009/02/24(火) 14:26:28
853849:2009/02/24(火) 14:35:49
>>845
問1やっぱ間違ってたから直した。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8928.c
854デフォルトの名無しさん:2009/02/24(火) 15:03:37
>>851
入力
1 550 200 100 3
出力
3 0

ってなる。
855デフォルトの名無しさん:2009/02/24(火) 15:18:40
856デフォルトの名無しさん:2009/02/24(火) 19:18:10
[1] 授業単元:情報処理
[2] http://www.kiso.tsukuba.ac.jp/~watanabe/C3-10.htm
  これがそのプログラムです
  http://www.kiso.tsukuba.ac.jp/~watanabe/stone.htm
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] できるだけ早めに

お願いします
857デフォルトの名無しさん:2009/02/24(火) 19:19:30
>>856
メールで送っておけばいいの?
858デフォルトの名無しさん:2009/02/24(火) 20:04:41
>>856
これは何をすればいいの?
859デフォルトの名無しさん:2009/02/24(火) 20:35:48
[1] 授業単元:卒研
[2] 問題文:マルチスレッドによる並列処理に対応したプログラムを書きます
        内容は二次元配列を平面空間に見立てての磁界計算です
[3] 環境
 [3.1] OS:winXP
 [3.2] VC2008 or 2005
 [3.3] C++
[4] 2009年2月26日までに(できれば早い方が好ましいです)
[5] その他の制限: 自力で進めたのがあるのでできればそれに手を加える形にしてもらいたいです
             自力でやったのはある程度形になってるのですが、実行するとエラーがでます
             磁界の計算式は例えば、A点を測りたい場合はその四方の点の磁力を足して平均にするといった感じです
             自力でやったソースはこれです ttp://www1.axfc.net/uploader/He/so/199245.zip
             もう何がいけないのかわかりません
             よろしくお願いします
860デフォルトの名無しさん:2009/02/24(火) 20:37:36
>>859
並列処理と並行処理がごっちゃじゃね?
861 ◆SjlFdm9roI :2009/02/24(火) 20:38:13
ファイルのパスを忘れてました orz
パスはworkです
862 ◆SjlFdm9roI :2009/02/24(火) 20:39:06
>>860 どういう意味でしょうか?
863デフォルトの名無しさん:2009/02/24(火) 20:41:51
>>862
ググレよ・・・
864 ◆SjlFdm9roI :2009/02/24(火) 20:49:42
>>863
ググってもあまり違いがわからなかったので・・・
えと、磁界を計算する回数が多いので計算する領域を分けて分散させてやりたいんです
865 ◆pCAb6WPR/A :2009/02/24(火) 20:52:43
ある程度、自分の中でどうして欲しいか固まったので
改めて書き直します

[1]プログラム
[2]ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8929.txt
[3]OS:XP
  MSC Ver.5.1
  言語:C言語
[4]期限:できれば今週中
[5]その他

うpろだにうpしたのが僕が書いたソースなんですが、このソースは5〜22行の部分で
多角形ABCDEの座標を入力させ、その後台形の公式(上底+下底*高さ/2)を使い、
多角形ABCDEの面積を求めるといった感じでコードを書きたいと思ってます。

座標を入力させる部分までは何とか自力で出来たんですが、式を使って面積を求める
段階で詰んでしまってます;;

早く会社の教育係を唸らせてやりたいので、どなたかお力お貸しください
お願いします
866デフォルトの名無しさん:2009/02/24(火) 21:12:33
>>855
エラー 12個出るのですが・・・。
867デフォルトの名無しさん:2009/02/24(火) 22:05:47
なにした。
868デフォルトの名無しさん:2009/02/24(火) 22:11:43
>>855じゃないけど、
ウチではエラー出ないよ。
869デフォルトの名無しさん:2009/02/24(火) 22:18:24
>>865

#include <stdio.h>
int main(void)
{
double x1,x2,x3,x4,x5;
double y1,y2,y3,y4,y5;
double S;
printf("多角形ABCDEの面積を求めます。\n");
printf("各頂点の座標を入力して下さい。\n");
printf("例 5,1 のように,(カンマ)を付けて入力すること。\n\n"); /*コンマを区切り文字にすると面倒だからパス*/
scanf("%lf %lf", &x1 ,&y1);
scanf("%lf %lf", &x2 ,&y2);
scanf("%lf %lf", &x3 ,&y3);
scanf("%lf %lf", &x4 ,&y4);
scanf("%lf %lf", &x5 ,&y5);
printf("\nAの座標x1 (%lf),y1 (%lf)が入力されました。", x1, y1);
printf("\nBの座標x2 (%lf),y2 (%lf)が入力されました。", x2, y2);
printf("\nCの座標x3 (%lf),y3 (%lf)が入力されました。", x3, y3);
printf("\nDの座標x4 (%lf),y4 (%lf)が入力されました。", x4, y4);
printf("\nEの座標x5 (%lf),y5 (%lf)が入力されました。", x5, y5);
S = (x1-x2)*(y1+y2)/2.0+(x2-x3)*(y2+y3)/2.0+(x3-x4)*(y3+y4)/2.0+(x4-x5)*(y4+y5)/2.0+(x5-x1)*(y5+y1)/2.0;
printf("\n\n 多角形ABCDEの面積は %lf です。\n", -S);
return 0;
}
870デフォルトの名無しさん:2009/02/24(火) 22:24:33
>>865
そんな書式指定子使ってる段階で溜め息だよ
871 ◆pCAb6WPR/A :2009/02/24(火) 23:55:01
>>869
ありがとう先生!
先生のソースをこれから参考に頑張りたいと思います。
本当にありがとう。

>>870
そう言わないで下さい…
僕だって現時点のソースが最適だとは露とも思ってません。
とりあえず、一朝一石で言語マスターするということは考えず、
今は多くの本を読み、ソースをみて勉強することが一番なんじゃないかって思ってます。
872デフォルトの名無しさん:2009/02/25(水) 00:38:27
>>856
ほとんどコード追ってないけど、
ttp://www.kiso.tsukuba.ac.jp/~watanabe/stone.htm
↑コピペしてコンパイルしたら普通に動いているみたいだけど、それじゃだめなの??
873デフォルトの名無しさん:2009/02/25(水) 00:50:45
>>856
再提出求められても文句言わないように。コピペだからな。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8931.txt
874デフォルトの名無しさん:2009/02/25(水) 02:56:12
>>839
http://pc-physics.com/rk1.html
http://homepage1.nifty.com/gfk/furiko.htm
重要な、比較対照となる近似値は無い。
#include <stdio.h>
#include <math.h>

#define T 20.0 //計測時間(秒)
#define G 1.0 //重り(kg)
#define L 1.0 //紐長さ(m)
#define S 3.1415926/4.0 //角度(rad)初期値

double f1(double t,double x,double v);
double f2(double t,double x,double v);
−−中略−−
x=S; //位置の初期値
v=0.0; //速度の初期値
dt=T/100.; //刻み幅
tmax=T; //繰り返し最大回数
−−中略−−
double f1(double t,double x,double v){return v;}
double f2(double t,double x,double v){return (-G/L*sin(x));}
875デフォルトの名無しさん:2009/02/25(水) 03:40:51
[1] 授業単元:プログラミング言語U
[2] 問題文
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8932.txt
T、このプログラムは、起動時に指定された2つのテキストファイルを
比較して、違う行があればその行番号を表示するプログラムです。
@〜Dを埋めてプログラムを完成させなさい。

U、TのプログラムにおいてFunc_read関数はstrcmpを使用して
読み込んだ2つのレコードが同じかどうか判断しています。
これをmemcmpを利用したロジックに作り直せ。

[3.1] OS:Windows
 [3.3] 言語:C
[4] 期限:2月26日まで

ソースコード長くてすみません
どうかよろしくお願いします
876デフォルトの名無しさん:2009/02/25(水) 11:42:42
>>875
FILE *Fp2/*@*/;
nrtn = Func_open(argv[2]/*A*/,2);
fclose(Fp1/*B*/);
printf("<%s>エラー:%s",szfname,strerror(errno/*C*/));
if(nrtn!=0/*D*/)

あとmain( )関数本体の ; は削除ね
///関数宣言
int main(int argc,char *argv[]);
もいらないだろ
877デフォルトの名無しさん:2009/02/25(水) 12:47:07
度々すみません。

今度は、>>869さんのソースの10〜20行間のscanf文とprintf文を
forループ使って省略することになり、ループさせる所までは自力で出来たのですが
その後の計算式で各x,yが反応しなくなってしまいお手上げ状態です

恐らく、main下で宣言しないからだと思っているのですが、
int iやint xi,yiと一緒に宣言してしまうと、ループの式が狂ってしまうのは
何故でしょうか?

どなたかお教え下さい;;

ちなみに、僕が書いたソースはうpしときました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8933.txt
878デフォルトの名無しさん:2009/02/25(水) 12:51:50
>>877
for(i = a;i < 5;){
i = a + i++;
これはひどい
i = aで初期化する意味がなくなってるし
未定義動作やってるし

配列というのを使うといいよ
double x[ 5 ] ,y[ 5 ];
879デフォルトの名無しさん:2009/02/25(水) 13:06:41
880デフォルトの名無しさん:2009/02/25(水) 13:21:38
>>875
72行目の
> if(prtn1==NULL||prtn2==NULL)

この条件式だと例えば
[ファイル1]
a
[EOF]

[ファイル2]
a

1
[EOF]

の比較をした時、誤認するんじゃね?
881 ◆pCAb6WPR/A :2009/02/25(水) 14:27:34
>>878
早めなご指摘ありがとうございます。
なるほど、配列ですか
その選択は思いつきませんでした・・・まだ勉強してない項目だったのもあって
これから勉強してみます!

>>879
コードありがとうございます。

ですが、式が若干変換されてて、うpしたソースの計算式と
計算結果が合いませんでした;;

んー配列時の演算コードについて勉強する必要があるようです
ちょっと勉強してもう一度トライしてみます
882デフォルトの名無しさん:2009/02/25(水) 15:00:24
>>881
もしかして計算結果の正負が逆な感じ?
だとすれば絶対値を取れば大丈夫かも。
#include <math.h>を追加して
S += fabs((x[i % 5] - x[(i + 1) % 5]) * (y[i % 5] + y[(i + 1) % 5]) / 2.0);
に修正するとか。
883 ◆pCAb6WPR/A :2009/02/25(水) 15:29:22
>>882
いえ、どうやらそうではないようです

S = (x4-x5)*(y4+y5)/2.0+(x5-x1)*(y5+y1)/2.0+(x1-x2)*(y1+y2)/2.0
+(x2-x3)*(y2+y3)/2.0+(x3-x4)*(y3+y4)/2.0
という計算式を、>>879先生のコードで表したかったのですが、
式もスリム化されておりそれが原因なんじゃないかと・・

ちなみにS = (x4-x5)*(y4+y5)/2.0+(x5-x1)*(y5+y1)/2.0+
(x1-x2)*(y1+y2)/2.0+(x2-x3)*(y2+y3)/2.0+(x3-x4)*(y3+y4)/2.0
の式と、S+=fabs((x[i % 5]-x[(i+1)%5])*(y[i%5]+y[(i+1)%5])/2.0);は
同一の結果になるんでしょうか?
884デフォルトの名無しさん:2009/02/25(水) 15:38:59
違うね、 S -= 。
885884:2009/02/25(水) 16:35:53
>>839
printf( "%f\t%f\t%f\n",t,x,S*cos(sqrt(G/L)*t));
886 ◆pCAb6WPR/A :2009/02/25(水) 16:49:33
>>884
出来ました
S -=ではなく、S =で記述してみたら式と結果が合致しました
まぐれかもしれませんが;;
887デフォルトの名無しさん:2009/02/25(水) 19:10:07
>>869の ↓ の式ってどういう風に面積を求めようとしてるの?

S = (x4-x5)*(y4+y5)/2.0+(x5-x1)*(y5+y1)/2.0+
   (x1-x2)*(y1+y2)/2.0+(x2-x3)*(y2+y3)/2.0+(x3-x4)*(y3+y4)/2.0
888デフォルトの名無しさん:2009/02/25(水) 19:56:06
889デフォルトの名無しさん:2009/02/25(水) 20:15:26
>>888
こんな便利な公式があるなんて知りませんでした。
ご回答ありがとうございます。
890875:2009/02/25(水) 21:06:15
>>876
どうもありがとうございます。

どなたか、

[1] 授業単元:プログラミング言語U
[2] 問題文
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8932.txt

U、TのプログラムにおいてFunc_read関数はstrcmpを使用して
読み込んだ2つのレコードが同じかどうか判断しています。
これをmemcmpを利用したロジックに作り直せ。

のU番をお願いします
891デフォルトの名無しさん:2009/02/25(水) 22:19:11
>>890
>if(prtn1==NULL||prtn2==NULL)
ここ本当に||?
&&じゃない?
892デフォルトの名無しさん:2009/02/25(水) 22:26:24
>>891
&&のわけねーだろ、よく見ろw
893890:2009/02/25(水) 22:29:22
>>891
if(prtn1==NULL||prtn2==NULL)
となっています。
&&ではありません。
894デフォルトの名無しさん:2009/02/25(水) 22:49:18
>>893
>nrtn = strcmp(szdat1,szdat2);

nrtn = memcmp(szdat1,szdat2,strlen(szdat1));
にしたらいけるはず
895デフォルトの名無しさん:2009/02/25(水) 22:50:14
長さが違うファイルなのに、一致と判定するのか・・・
896デフォルトの名無しさん:2009/02/25(水) 22:50:46
いけません
897デフォルトの名無しさん:2009/02/25(水) 22:52:26
>>895
return(9)ってやってるのに、mainで対応してないのが悪い。
898デフォルトの名無しさん:2009/02/25(水) 23:04:33
>>895
それを言うと一行に81字以上あると
動作がおかしくなるからな
そう言うプログラムだと思うしかない
899749:2009/02/26(木) 02:20:50
>>749
課題2をよろしくお願いします。
900デフォルトの名無しさん:2009/02/26(木) 07:43:35
901デフォルトの名無しさん:2009/02/26(木) 09:38:36
>>890
nrtn = strcmp(szdat1,szdat2);

if(strlen(szdat1) == strlen(szdat2))
nrtn = memcmp(szdat1,szdat2,strlen(szdat1));
else
ntrn = 100; /* 0以外の適当な値 */
に変えたらどうでしょ?
902デフォルトの名無しさん:2009/02/26(木) 09:57:07
長さが違うなら比較しても違うのは当然。>>895 は行数の違いを言ってるはず。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8935.txt
903902:2009/02/26(木) 10:18:12
凡ミス>>901
// nrtn = strcmp(szdat1,szdat2);
if((nrtn=strlen(szdat1))==strlen(szdat2))
nrtn = memcmp(szdat1,szdat2,nrtn);
904901:2009/02/26(木) 11:13:53
>>902-903
ん?俺に言ってた?
俺は別にファイルの行数について言及してないよ。
strcmpをmemcmpに変えるとこを書いただけ。
905デフォルトの名無しさん:2009/02/26(木) 11:41:53
strcmp を memcpy で実装したコンパチ関数
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8936.txt
906デフォルトの名無しさん:2009/02/26(木) 12:06:21
>>904
ただのアンカーミスだと思うよ
907902:2009/02/26(木) 12:07:08
>>905 に、言ってる。
908デフォルトの名無しさん:2009/02/26(木) 12:16:05
元要求が >>875 だからな…
完全一致のファイルから、末尾に余計な行を追加しても ”同じ内容でした” と返す仕様だしね
909デフォルトの名無しさん:2009/02/26(木) 14:31:04
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク): http://www.kiso.tsukuba.ac.jp/~watanabe/C3-9.htm
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: c言語
[4] 期限: 今週中

再び申し訳ないです 誰か助けてください LOL
910デフォルトの名無しさん:2009/02/26(木) 15:03:25
>>909 = Part122>>839
別の人なら、出題同じだから、過去ログ参照の事。
911 ◆pCAb6WPR/A :2009/02/26(木) 15:16:56
コンパイラ通すとこんなエラーが出るんですが
どう対処すればいいんですかね?

Objaect Modules [.OBJ]:c- +
Objaect Modules [.OBJ]:"sortbb.obj" /farcall
Run File[c-.exe]:"c-.exe" /noi
List File [NUL.MAP]: NUL
Libraries [.LIB]:
Definitions File [NUL.DEF]
LINK : fatal error L1093: c-.obj : object not found

912デフォルトの名無しさん:2009/02/26(木) 15:25:47
>>839 重力が抜けてた。
#define G 9.8
913デフォルトの名無しさん:2009/02/27(金) 01:42:38
>>749
課題2 (a)
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8937.c

(b)の問題の意味が理解できん。
914913:2009/02/27(金) 01:53:24
915デフォルトの名無しさん:2009/02/27(金) 04:05:00
[1] 授業単元: プログラミング言語W
[2] 問題文(含コード&リンク):

次の記述をよく読み、@〜Cで配列が得られる領域を説明し、それぞれの方法の
有効性や問題点について簡単に記述せよ。

マルチタスク環境のあるタスクで、プログラムの1時的な処理のために
大きな配列が必要になった。

@配列を関数内で宣言して自動変数にする
A配列を関数内で宣言してstatic変数にする
B配列を関数外で宣言してグローバル変数にする
Cmalloc()関数を使って配列の領域を確保する

 [3.1] OS: Windows
 [3.3] 言語: c言語
[4] 期限: 2/28日18:00までにメールにて提出

よろしくおねがいいたします
916デフォルトの名無しさん:2009/02/27(金) 05:24:38
マルチスレッドのことじゃないのか??
マルチスレッドっていう前提なら、

1、複数同時呼び出しで変数が競合することはないがメモリをその分食う。確保する領域は使用する大きさの中で知りうる最大を設定しないと目的を果たせない。
2、複数同時呼び出しをした時点で動作は未定義になり配列もめちゃくちゃになってしまう。
3、グローバルにすることを悪とする見方もある。2と同様に複数同時呼び出しした際に未定義の動作をする。
4、メモリを保持するポインタがstaticでないなら、1と同様だが、開放忘れがあると不具合の呼び水になる。その代わり可変長配列を実現できて時と場合によっては最良の解だと言える。
917デフォルトの名無しさん:2009/02/27(金) 06:45:58
確保される領域についても書いておいた方が良いんじゃないかね

1. プログラム(スレッド)のスタックに、関数に入って宣言された時点で確保
2. プログラムの静的変数領域(ヒープの下)に、プログラム開始時に確保
3. 2. と同じ
4. ヒープ領域に、mallocを呼んだ時点で確保。

あと、C99だと配列の動的な確保が可能だから>>916の1は当てはまらない。制限多いけどな。他に
・スレッドの場合、スタックはスレッドごとに確保される。自動変数があまりでかいとスタックからはみ出てエラーになる可能性も
・mallocは他の変数確保に比べて確保にとてもとても時間がかかるのでほんの一時データをおくだけなら不向きかも
・マルチスレッドなら、staticやグローバルに値をいれるときにはクリティカルセクションになるので排他制御を行う必要がある
とでもかいとけ
918デフォルトの名無しさん:2009/02/27(金) 07:15:34
たまにはメガネピッツァでも食べてみろ、な?美味しいぞ?
919デフォルトの名無しさん:2009/02/27(金) 09:47:27
実際、2ch(匿名)で件の文章だけ見たら、「馬鹿なこと言ってら、こいつ」って思う内容でしょ? 本人に高いスキルがあっていろんな功績、貢献がある人物でも、個々の言動の評価はまた別。
ちなみに無知であること自体を非難するつもりは毛頭無いです。さすがに私もそこまで愚かじゃありません。
たぶん、malloc/reallocだけでの動的メモリ管理云々の文章を読んだことがあるということはその人のブログなりなんなりを見たことがあるんだと思うけど。
920デフォルトの名無しさん:2009/02/27(金) 13:18:50
[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8939.cpp

授業の最終課題で簡単なゲームを作成しています
そこで自作の迷路プログラム(上文のtxt)に取り組んでいて、途中である◎を拾ってゴールしたいんですが
今のままだと◎を拾わなくても普通にゴール出来てしまいます

1.◎を拾った事をそのマスに着いたときに判定するプログラム
2.ゴールの際に◎を拾っていないでマスに到達したら「まだ拾ってません」と表示しゴールさせないプログラム

この2つがどうしてもプログラム上に組めなくて困っています
どなたかアドバイスお願いします

[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C
[4] 2009年3月2日までに
[5] その他の制限:
できれば上のtxtに手を加える形にしてもらいたいです
大学内でしかコマンドプロンプト、テラパッドを使用することができないので
作業は平日しかできません
921デフォルトの名無しさん:2009/02/27(金) 14:12:27
>>920
cmdconsole.hhってなんぞ
922デフォルトの名無しさん:2009/02/27(金) 14:40:59
>>920
フラグを一つ用意
◎がある座標Xを記憶。
移動するたびに現在地がXかどうかチェック。
XならフラグをON
ゴールしたときにフラグがONになってるかどうかチェック
923デフォルトの名無しさん:2009/02/27(金) 16:26:01
[1]プログラミングU
[2] 現在の地域時間から15時間後の日時を表示するプログラムを作成せよ。
  表示形式は日付と時間が表示されれば自由とする。
[3] 環境
 [3.1] OS: Windows
  [3.3] 言語: C
[4] 期限: 今週中
[5] その他の制限: 特にありません。どなたか助けてください。
よろしくお願いします。
924デフォルトの名無しさん:2009/02/27(金) 16:37:21
>>920 手を加える形にしてます。
@@ -86 +86 @@
- k = getch();
+ k = getch(); if(k == 0xE0) continue;
@@ -107 +107 @@
- if (xs == 13 && ys == 10) {
+ if (xs == 3 && ys == 7) {
@@ -108,0 +109 @@
+ printf("宝");
@@ -111 +112,6 @@
- printf("脱出おめでとう");
+ if(gameover == 0) {
+ printf("出口です");
+ printf("宝を持ち帰っていないので、まだ出られません。戻ってください");
+ } else {
+ printf("脱出おめでとう");
+ }
@@ -114 +120 @@
- } while (k != 'c' && gameover == 0);
+ } while (k != 'c' && (gameover == 0 || xs != 13 || ys != 10));
925デフォルトの名無しさん:2009/02/27(金) 16:41:30
926宿題は自力で:2009/02/27(金) 16:46:49
宿題は自力でやるから意味がある。
間違えを恐れるな。
間違えてても先生は怒りません。
むしろ、こんな所に頼る方が怒られますよ。
927デフォルトの名無しさん:2009/02/27(金) 16:48:44
>>925
//switch(now->tm_mon){
switch(now->tm_mon+1){

//if(now->tm_mon > 12){
if(now->tm_mon >= 12){
928宿題の依託は停止しました。。。:2009/02/27(金) 16:49:06
真・スレッドリスターター。。。( ̄ー ̄)ニヤリッ
929デフォルトの名無しさん:2009/02/27(金) 16:52:03
>>923
制限無し とのことなので Win32APIを利用
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8941.c
930デフォルトの名無しさん:2009/02/27(金) 16:54:36
宿題は自力でやるべきではあるが
果たして教師が10年前にそれが出来た上で出している
のかどうかは一考の価値がありそう
931デフォルトの名無しさん:2009/02/27(金) 17:12:28
>>930
何の意味もない考察だな
932デフォルトの名無しさん:2009/02/27(金) 17:18:13
>>923
#include <stdio.h>
#include <time.h>

int main()
{
time_t t;

time(&t);
//printf("%s", ctime(&t));
t += 15 * 60 * 60;
printf("%s", ctime(&t));

return 0;
}
933デフォルトの名無しさん:2009/02/27(金) 17:36:17
>>920
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8943.zip

とりあえずやってみた
何箇所か[TAB]になってるから気になるならがんばって修正してくれ
元のファイルを自分で修正してもらってもいいし
934933:2009/02/27(金) 17:47:37
おまけの一行目を修正するの忘れてた・・・
935デフォルトの名無しさん:2009/02/27(金) 19:58:27
>>931
キミのような教師にとってはな
936デフォルトの名無しさん:2009/02/27(金) 20:03:30
>>923 時刻を連続表示
#include <stdio.h>
#include <time.h>

int main()
{
time_t t;

do {
time(&t);
// printf("%s", ctime(&t));
t += (15+13) * 60 * 60;
printf("%s", ctime(&t));
} while(sleep(1),1);
return 0;
}
937デフォルトの名無しさん:2009/02/27(金) 20:26:16
time_tの表現って未規定だよな?
938936:2009/02/27(金) 21:15:07
>>936 は、gccで、void sleep(seconds);
VC++ なら #include <windows.h> が必要で、void Sleep(milliseconds);
ところで、time_t は <time.h> で定義されている。
939デフォルトの名無しさん:2009/02/27(金) 21:21:34
+= が可能な型である != 定義されている
940デフォルトの名無しさん:2009/02/27(金) 22:14:21
>>938
time.hの中身は環境によって違うんじゃね?
941デフォルトの名無しさん:2009/02/27(金) 22:19:10
#include <stdio.h>
#include <time.h>

int main()
{
    time_t time1, time2;
    struct tm *times;

    time1 = time(NULL);
    times = localtime(&time1);
    times->tm_hour += 15;
    time2 = mktime(times);
    printf("現在: %s\n", ctime(&time1));
    printf("15時間後: %s\n", ctime(&time2));
    return 0;
}
942デフォルトの名無しさん:2009/02/27(金) 22:21:02
Cでは、time_tは数値型であることが保証されてるけど、時刻と値の対応は未規定
POSIXでは、time_tはUNIX時間を表す整数

で良かったっけ
だとすると、>>923を標準Cの範囲で解くには>>925みたいにするしかないのか
943デフォルトの名無しさん:2009/02/27(金) 22:42:20
925のやり方するなら閏年の判定も必要になるな
944941:2009/02/27(金) 22:59:12
心配な点が数点
・localtimeで得られたデータを別の変数とかにコピーせずに書き換えてよかったっけ?
・範囲外の値をmktimeに与えた場合の動作は保証されてたっけ?(ex. 0時70分→1時10分)
945デフォルトの名無しさん:2009/02/27(金) 23:29:33
>>944
・範囲外の値をmktimeに与えた場合の動作は保証されてたっけ?(ex. 0時70分→1時10分)
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/mktime.3.html
によると保証されてるみたいね。
946デフォルトの名無しさん:2009/02/27(金) 23:38:49
たかが時間操作。 されど時間操作。
奥が深いな
947938:2009/02/28(土) 01:56:02
>>923 mktime() を使わない方法
#ifdef WIN32
#define compiler 1 // 1:VC++, other:gcc
#define _USE_32BIT_TIME_T // VC++ .NET or later
#endif

#include <stdio.h>
#include <time.h>
#if compiler == 1
#include <windows.h>
#endif
int main()
{
time_t t; // sizeof is 4 bytes if defined _32BIT_, 8 bytes not define _32BIT_.

do {
time(&t);
t += 15 * 60 * 60;
printf("%s", ctime(&t));
}
#if compiler == 1
while (Sleep(1000),1);
#else
while (sleep(1),1);
#endif
return 0;
}
948デフォルトの名無しさん:2009/02/28(土) 12:42:55
1]プログラミングU
[2]
ポインタの有効性について例を挙げて説明しなさい。

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

どうかよろしくお願いします
949デフォルトの名無しさん:2009/02/28(土) 12:44:52
「ポインタ 有効性」でぐぐれw
950デフォルトの名無しさん:2009/02/28(土) 15:29:07
有効性ってなんだ?
何が有効なんだ?
951デフォルトの名無しさん:2009/02/28(土) 15:53:43
>>950
IsBadCodePtr が 0 を返すことかな
もしくは IsBadReadPtr/IsBadWritePtr あたり
952デフォルトの名無しさん:2009/02/28(土) 15:55:05
>>951

意味わからん
953デフォルトの名無しさん:2009/02/28(土) 16:25:52
main(){
int val=0; int *ptr=&val;

//val=&val;
val=(int)&val;
//val=static_cast<int>(&val);
val=reinterpret_cast<int>(&val);

return *ptr;
}

ポインタが有ると便利やわ〜
954デフォルトの名無しさん:2009/02/28(土) 23:21:27
[1] 授業単元:自主的にやっています。
[2] 問題文(含コード&リンク):最終的にはババ抜きのシミュレータを作りたくてカードを配るところでてこずっています。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8945.c
[3] 環境
 [3.1] OS:Windows (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: VC 6.0 gcc4.3.2 MinGw
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限:無期限
[5] その他の制限:制限ではないですがVC6.0とgcc とMinGWとで挙動が違います。
gccの結果が一番理想に近いのですが、VC6.0 とMinGWはallcard[]という配列が途中で書き換えられてしまいます。
その原因が分からず困っています。

955デフォルトの名無しさん:2009/02/28(土) 23:26:55
int allcard[53]
allcard[53] = 99;
956デフォルトの名無しさん:2009/02/28(土) 23:53:31
いろいろひどいな
957デフォルトの名無しさん:2009/03/01(日) 00:00:37
>955
99ってのはジョーカーです。

>956
恥ずかしいの覚悟で聞いています。すいません。

コンパイラによって、挙動が違うって言うことはよくあることなんですか?
958デフォルトの名無しさん:2009/03/01(日) 00:01:33
コンパイラが違うからじゃなくて、Cとして間違ってるw
959デフォルトの名無しさん:2009/03/01(日) 00:04:00
>958
マジスカ。

どの辺りがどうですか?
書き直して出直してきます
960デフォルトの名無しさん:2009/03/01(日) 00:04:19
961デフォルトの名無しさん:2009/03/01(日) 00:05:42
Numerical Recipes in Cででも勉強したんだろうか
こんなソースそれくらいでしか見たことない
Fortranのようだ
962デフォルトの名無しさん:2009/03/01(日) 00:10:36
配列の添え字が全く理解できてない
963デフォルトの名無しさん:2009/03/01(日) 00:14:50
Fortran っぽいですか..。
fortranはみたことないんですが。

>955, 960 ありがとうございました

宣言で[53]しかしてないのに[53]に代入してるのがまずかったんですね。
分かりました

>955~961のみなさん。
ありがとうございました。
964デフォルトの名無しさん:2009/03/01(日) 00:15:47
>962
そのようでした。
ありがとうございます。

いままでソースが冷静になって見れて無かったです。
965デフォルトの名無しさん:2009/03/01(日) 00:19:03
っていうか、これ実行して動くのか?
966デフォルトの名無しさん:2009/03/01(日) 00:25:29
それが動いてたんですよ。
それっぽく。

配列の値を全部+1してもらえばちゃんと思ったとおりに動きました。
やっぱ[0]も使った方がいいんですかね?
何かとこんがらがりそうになって嫌なんですが。
967デフォルトの名無しさん:2009/03/01(日) 00:33:21
なんつーか、もう少し小さなプログラムで基本を勉強してからのほうが……
968デフォルトの名無しさん:2009/03/01(日) 01:25:23
もう見てないかもしれないが
こうするとtestいらない

allcard[53]=99;
for(i=1;i<=53;i++){
j=rand()%53+1;
temp=allcard[i];
allcard[i]=allcard[j];
allcard[j]=temp;
}
969デフォルトの名無しさん:2009/03/01(日) 01:26:22
それは偏るからダメ
970デフォルトの名無しさん:2009/03/01(日) 01:28:58
↑それって、毎回1枚53回のカード移動、交換だよ?
971デフォルトの名無しさん:2009/03/01(日) 01:36:18
allcard[53]=99;
for(i=1;i<=53;i++){
j=i + rand()%(53 - i + 1);
temp=allcard[i];
allcard[i]=allcard[j];
allcard[j]=temp;
}

でおk
972デフォルトの名無しさん:2009/03/01(日) 01:40:16
もしくは
j = rand() % i + 1;
でもおk
973デフォルトの名無しさん:2009/03/01(日) 01:42:17
スンマソン勉強になりました
φ(.. )メモメモ
974デフォルトの名無しさん:2009/03/01(日) 01:47:42
Fisher-Yatesでググれば詳しくわかるよ。
975デフォルトの名無しさん:2009/03/01(日) 03:55:13
>>973 じゃあ、これもお願い。メモしといて。
  for (i = 1; i <= 53/N_PLAYER+1; i++)
  {
    printf("[%2d]", i);
    ck = 0; // 毎回クリア
    for (j = 1; j <= N_PLAYER; j++)
      card[j][i] = 0; // 領域クリア
    for (j = 1; j <= N_PLAYER; j++) // player 1〜4
    {
      m = rand() % 53+1; // 0〜52
      if(test[m] != 0) //test[m] はallcard[m]が使ったかどうかのスイッチ。
      {
        card[j][i] = m;
        printf(" %2d%c m:%2d ck:%2d|", allcard[m], (m-1)/13+'A', m, ck);
        test[m] = 0;
        if(i == 53/N_PLAYER+1 && j == 53%N_PLAYER) // カードを配り終わった
          break;
      } else {
        j--;
        ck++; // 毎回+1
      }
    }
    printf("\n");
  }
976954:2009/03/01(日) 06:36:49
>975
使わせてもらいます。
977デフォルトの名無しさん:2009/03/01(日) 21:10:42
ほどほどに簡単な宿題来いやーーー!
978デフォルトの名無しさん:2009/03/01(日) 22:17:11
>>977
1)N個のさいころをすべて同じ目がでるまで投げ続け
N個のぞろ目がでるまでの回数と、理論的には何回目までにでるかを表示するプログラムを作りなさい。

N=2の場合の出力例
4回目でぞろ目になりました。理論的には6回投げて1回でます。

2)N個のさいころを投げて、すべてのさいころで0がでるまでの回数を求めるプログラムを作りなさい。


よろしくお願いします
979デフォルトの名無しさん:2009/03/01(日) 22:24:38
[1] 授業単元: 暇潰し
[2] 問題文(含コード&リンク):
3^1,000,000,000,000 mod 23を計算せよ
[3] 環境
 [3.1] OS: 自由
 [3.2] コンパイラ名とバージョン: 自由
 [3.3] 言語: 自由
[4] 期限: 無期限
[5] その他の制限:プログラムを作るだけでなく、何故そのプログラムで
答えが求められるのか説明する事
980デフォルトの名無しさん:2009/03/01(日) 22:30:30
>>978 1)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

#define N 3

int get_dice(void){
int r;

do{
r=rand();
}while(r>=(RAND_MAX-RAND_MAX%6));
return r%6;
}

int main(void){
int i, j, dice;

srand(time(NULL));
for(i=1;;i++){
dice=get_dice();
for(j=1;j<N;j++){
if(dice!=get_dice()) break;
}
if(j>=N) break;
}
printf("%d回目でぞろ目になりました。理論的には%.0f回投げて1回でます。\n", i, pow(6,N-1));
return 0;
}
2) ってどんなサイコロ使うの?
981デフォルトの名無しさん:2009/03/01(日) 22:45:11
>>979
#include<stdio.h>

int main(void){
int i, j, x=3, y=1;

for(j=0;j<12;j++){
for(i=0;i<10;i++){
y=(y*x)%23;
}
x=y;
}
printf("%d\n", y);

return 0;
}
あってるかどうか不明
考え中
982デフォルトの名無しさん:2009/03/01(日) 22:57:26
>>980
1〜6までの普通のさいころです
983デフォルトの名無しさん:2009/03/01(日) 23:01:13
>>982
0が出るって書いてあるんだが
984デフォルトの名無しさん:2009/03/01(日) 23:01:28
>>979
64bit整数とフェルマーの小定理使えば3分で出来そうな課題だが
なんか深い意味があるのか?
985981:2009/03/01(日) 23:04:16
>>981 の理由
// 3^(10^12) = (((((((((((((3^10)^10)^10)^10)^10)^10)^10)^10)^10)^10)^10)^10)
// (x^n) mod 23 = ((x^(n-1) mod 23)*x) mod 23
986デフォルトの名無しさん:2009/03/01(日) 23:06:23
>>977
Cで書いたプログラムをJavaに書き換えるプログラムお願い♪
987デフォルトの名無しさん:2009/03/01(日) 23:07:49
>>981を見ると、プログラム以外の素養って大事なんだなと感じる
988デフォルトの名無しさん:2009/03/01(日) 23:11:08
989デフォルトの名無しさん:2009/03/01(日) 23:20:56
3^22 %23 = 1
3^(1,000,000,000,000%22) %23を計算すればよくね?
990981:2009/03/01(日) 23:36:35
検算したら間違ってたorz
991デフォルトの名無しさん:2009/03/01(日) 23:42:51
#include<stdio.h>

int main(void){
int i, j, x=3, y=1;

for(j=0;j<12;j++){
y=1; // これが必要だった
for(i=0;i<10;i++){
y=(y*x)%23;
}
x=y;
}
printf("%d\n", y);

return 0;
}
992デフォルトの名無しさん:2009/03/01(日) 23:45:13
たぶん、3?
993デフォルトの名無しさん:2009/03/01(日) 23:52:09
3^1 mod 23 = 3
3^2 mod 23 = 9
3^3 mod 23 = 4
3^4 mod 23 = 12
3^5 mod 23 = 13
3^6 mod 23 = 16
3^7 mod 23 = 2
3^8 mod 23 = 6
3^9 mod 23 = 18
3^10 mod 23 = 8
3^11 mod 23 = 1
994デフォルトの名無しさん:2009/03/01(日) 23:52:37
3^12 mod 23 = 3
3^13 mod 23 = 9
3^14 mod 23 = 4
3^15 mod 23 = 12
3^16 mod 23 = 13
3^17 mod 23 = 16
3^18 mod 23 = 2
3^19 mod 23 = 6
3^20 mod 23 = 18
3^21 mod 23 = 8
3^22 mod 23 = 1

3^23 mod 23 = 3
3^24 mod 23 = 9
以後ループ
995デフォルトの名無しさん:2009/03/02(月) 00:10:22
10^12 mod 11 = 1
すなわち、3^1 mod 23 でおk?
996デフォルトの名無しさん:2009/03/02(月) 01:02:39
以前張ったコードの指数を long long int 対応にしてみた
基数、指数、法の値によらずO(1) (高々64bits程度では効果は薄いが)

int modexp(int x, long long int n, int p)
{
  long long int i, y = 1;
  for(i = 1LL << 62; i > 0; i >>= 1) {
    y = (y * y) % p;
    if(n & i) y = (y * x) % p;
  }
  return (int)y;
}
997デフォルトの名無しさん:2009/03/02(月) 01:20:49
力づく、無駄な繰り返しを省く考え方も必要さ。
998デフォルトの名無しさん:2009/03/02(月) 01:51:13
じゃ、

printf("answer = 3\n");

ということで。
999デフォルトの名無しさん:2009/03/02(月) 01:55:27
どこに計算式があるの?
1000デフォルトの名無しさん:2009/03/02(月) 01:59:25
ある値を処理する計算式がなければ、答えが3となるプログラム
という意味にしかならんが、それはそれで answer = 3 を表示する
プログラム、と解釈されるだろう・・・
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。