C/C++の宿題を片づけます 51代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/10/05(水) 15:21:12――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: Windows/Linux/等々
[3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0等
[3.3] 言語: C/C++/どちらでも可 のいずれか
[4] 期限: [yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか (「できるだけ早く」は不可)
[5] その他の制限: どこまで習っているか、標準ライブラリは使ってはいけない等々
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html
【前スレ】
50代目: http://pc8.2ch.net/test/read.cgi/tech/1126357741/
0002デフォルトの名無しさん
2005/10/05(水) 15:21:5449代目: http://pc8.2ch.net/test/read.cgi/tech/1123661447/
48代目: http://pc8.2ch.net/test/read.cgi/tech/1121471445/
47代目: http://pc8.2ch.net/test/read.cgi/tech/1120522752/
46代目: http://pc8.2ch.net/test/read.cgi/tech/1119514274/
45代目: http://pc8.2ch.net/test/read.cgi/tech/1118165596/
0003デフォルトの名無しさん
2005/10/05(水) 15:22:2743代目: http://pc8.2ch.net/test/read.cgi/tech/1115794784/
42代目: http://pc8.2ch.net/test/read.cgi/tech/1113811213/
41代目: http://pc8.2ch.net/test/read.cgi/tech/1109542053/
40代目: http://pc5.2ch.net/test/read.cgi/tech/1107625122/
39代目: http://pc5.2ch.net/test/read.cgi/tech/1106650397/
38代目: http://pc5.2ch.net/test/read.cgi/tech/1105541524/
37代目: http://pc5.2ch.net/test/read.cgi/tech/1103913840/
36代目: http://pc5.2ch.net/test/read.cgi/tech/1102753497/
35代目: http://pc5.2ch.net/test/read.cgi/tech/1101568895/
34代目: http://pc5.2ch.net/test/read.cgi/tech/1100530682/
33代目: http://pc5.2ch.net/test/read.cgi/tech/1097932699/
32代目: http://pc5.2ch.net/test/read.cgi/tech/1097592876/
31代目: http://pc5.2ch.net/test/read.cgi/tech/1095075678/
30代目: http://pc5.2ch.net/test/read.cgi/tech/1091954342/
0004デフォルトの名無しさん
2005/10/05(水) 15:23:0728代目: http://pc5.2ch.net/test/read.cgi/tech/1089974839/
27代目: http://pc5.2ch.net/test/read.cgi/tech/1089448445/
26代目: http://pc5.2ch.net/test/read.cgi/tech/1088860889/
25代目: http://pc5.2ch.net/test/read.cgi/tech/1087929711/
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
0005デフォルトの名無しさん
2005/10/05(水) 15:23:4113代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
09代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
08代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
07代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
06代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
05代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
04代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
03代目: http://pc5.2ch.net/tech/kako/1041/10419/1041992392.html
02代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
01代目: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
0006デフォルトの名無しさん
2005/10/05(水) 16:39:170007前回の946,894
2005/10/05(水) 17:14:44[2] http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/955.txt
テストできる環境にして欲しいです。
[3] 環境
[3.1] Windows2000
[3.2] VC 6.0
[3.3] C
[4]2005年10月5日18:00まで
[5] その他の制限: 特に無いと思います。
0008デフォルトの名無しさん
2005/10/05(水) 17:28:42余計な注釈入れずにテストしたコードをそのまま上げろ
それに<vector>ってC++だろ
0009前回の946,894
2005/10/05(水) 17:39:02に全部書いたつもりなんですけどね。。
最初のファイルのバイナリ読み込みモードでのオープンができないです。
0010デフォルトの名無しさん
2005/10/05(水) 17:51:07正直、糞すぎ。
一番下の
GetEnergy((struct _iobuf*)&allFp,(char*)&lpszFileName,(int)&nStep,(int)&allDNum);
はたぶん。
GetEnergy(allFp,lpszFileName,nStep,allDNum);
こう。
で、こう直してもallFpもnStepも未初期化だから絶対に意図したようには動かない。
これ以上は見る気も失せたから知らん。
0011デフォルトの名無しさん
2005/10/05(水) 17:57:07lpszFileNameも未初期化ですね。
というか何したいねん。これ
00127,8
2005/10/05(水) 18:02:38質問しました。
初めは>>10のGetEnergy(allFp,lpszFileName,nStep,allDNum);
にしたんですけど、↓になってしまい
warning C4700: 値が割り当てられていないローカルな変数 'nStep' に対して参照が行われました。
warning C4700: 値が割り当てられていないローカルな変数 'lpszFileName' に対して参照が行われました。
warning C4700: 値が割り当てられていないローカルな変数 'allFp' に対して参照が行われました。
苦し紛れにキャストしてしまいました。
0013デフォルトの名無しさん
2005/10/05(水) 18:07:34それを黙らすのがそもそも間違いというか人間として腐ってる。
あと、テストするときの値を何にするかは今の情報だけじゃ、こっちは分かるはずがない。
自分でテストするべき値を割り当てろ。
00147,8
2005/10/05(水) 18:13:56もう一回調べてみます。
0015デフォルトの名無しさん
2005/10/05(水) 18:17:4600167,8
2005/10/05(水) 18:23:010017デフォルトの名無しさん
2005/10/05(水) 18:23:56自分で作っといてテスト方法が分からんはありえんだろ。
0019デフォルトの名無しさん
2005/10/05(水) 18:35:530020おしえて厨
2005/10/05(水) 18:41:01[2] 問題文(含コード&リンク):
白黒画像ファイルを読み込んで、その画像ファイルを碁盤の目のような感じに小さい正方形たちに区切られているとみなし、
その正方形ひとつひとつにつき、正方形内に占める黒画素の割合をそれぞれ計算して出力するプログラムを作れ。
左上、右上、左下、右下の4つの正方形領域があるとみなして、それぞれの領域内での黒画素の割合を出すってだけでもいい。
何個の正方形に区切るかは任意。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C/C++/どちらでも可
[4] 期限: [2005年10月6日まで]
[5] その他の制限: 画像ファイルはpgm形式
0021デフォルトの名無しさん
2005/10/05(水) 18:47:56なんつーかね,君がやりたいことを書いてくれれば一から書き直すからさ.
きちんと全部説明してくれよ.そのほうが絶対に早いし,動くものができるからさ.
0022デフォルトの名無しさん
2005/10/05(水) 18:50:42下のことをまとめてくれ。
1) プログラムの概要(何をするためのプログラムか?)
2) 入力ファイルの形式(orサンプルファイル)
3) プログラムの処理の流れ
4) 期待している処理の結果(出力ファイル、表示形式等)
あと、ソースにmain関数が入ってないぞ。
00237,8
2005/10/05(水) 18:50:58nStepって言う名の番号と、allDNumという名のデータ数を渡したいんですけど
ファイル名とnStepとallDNumは渡せたんですけど、
ファイルポインタだけ渡せないんですけどどうすれば渡せますか?
00247,8
2005/10/05(水) 19:16:56お願いします。
バイナリのallファイルをテキストに変えて、.ascファイルで保存するプログラムです
.allから.asc
処理の流れは出来てます。このソースは他に作った関数と組み合わせて使うので、
mainは別にあります。
関数に引数の渡し方が解らないだけです。。よろしいでしょうか?
0025デフォルトの名無しさん
2005/10/05(水) 19:20:310026デフォルトの名無しさん
2005/10/05(水) 19:22:140027デフォルトの名無しさん
2005/10/05(水) 19:29:18char型の入力をするのに
scanf()とgetchar()
がありますが、それぞれの長所短所って何ですか?
初歩の初歩ですいません
0028デフォルトの名無しさん
2005/10/05(水) 19:32:58そうでなくて、そーゆー疑問をもったのなら、以下のスレで聞くこと。
C言語なら俺に聞け! Part 115
ttp://pc8.2ch.net/test/read.cgi/tech/1127737437/
00297,8
2005/10/05(水) 19:37:330030デフォルトの名無しさん
2005/10/05(水) 19:38:02ごめんなさい。
誘導ありがとうございます。そっちのほうで聞いてみます
0031デフォルトの名無しさん
2005/10/05(水) 19:42:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/958.cpp
plain text な pgm (ヘッダが P2) なら動作するはず.
あと,pgm は濃度情報もあるから,完全に黒のときに割合が 1 になるようにしといた.
不都合があったら適当になおしてくれい.
0032デフォルトの名無しさん
2005/10/05(水) 19:47:58C++の標準ライブラリ、俺も使いこなしてぇ。>>31
スレ違いだが、参考書を教えてちょ。
0033デフォルトの名無しさん
2005/10/05(水) 19:54:51main の if (!pgm_read( "sample.pgm", data, max_level)); はセミコロンの前に
return 0 でも入れてください.エラー処理書くつもりで忘れてた.
0034& ◆hJb7GWrzxo
2005/10/05(水) 20:16:51どうもたすかりましたありがとう
0035デフォルトの名無しさん
2005/10/05(水) 20:17:03エスパーになった気分で質問に答えとく。
AllToAscFileConvert()でバイナリファイルが開けないなら、
引数のファイルパスが本当に正しいか確認しろ。
あと、GetEnergy()はAllToAscFileConvert()の中じゃないと呼べない。
なぜなら、引数で渡してるallFpはAllToAscFileConvert()の中で開いてるファイルの
ポインタだからだ。
コンパイルが通ったなら、あとはブレークポイント張ったり、ログを出力したりで
怪しいところを1個ずつチェックしていけ。
0036おしえて君
2005/10/05(水) 20:37:17[2] 問題文(含コード&リンク):
白黒2値画像ファイルを二枚読み込んで、二枚の画像を引き算した結果を出力するプログラムを作れ。
画像の引き算というのは、画像のそれぞれの画素を、もうひとつの画像の同じ座標にある画素で引き算するということ。
引き算の結果は1か0になるように、すべて絶対値をとること。
最後にすべての画素での引き算結果の絶対値を合計する。そしてその数値を出力してほしい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C/C++/どちらでも可
[4] 期限: [2005年10月6日まで]
[5] その他の制限: 画像ファイルはpgm形式
0037デフォルトの名無しさん
2005/10/05(水) 20:43:20元画像のファイルをupしてくれ。
0038デフォルトの名無しさん
2005/10/05(水) 20:55:470039& ◆McolPJAn7.
2005/10/05(水) 21:14:45これが元pgm画像(2個)です
004036
2005/10/05(水) 21:26:35これでおしまいです。どうもご迷惑おかけしてすみません
0041デフォルトの名無しさん
2005/10/05(水) 22:02:34引き算の意味がわからんな・・・。
A B A - B
0 0 0
0 1 0
1 0 1
1 1 0
って考えればいいのか?
あと、。閾値もかんがえんといかんのか。
0042デフォルトの名無しさん
2005/10/05(水) 22:21:222つの画像で重なってる画素の部分を単純にXORすればいいんじゃないの?
004336
2005/10/05(水) 22:32:24でも、255の半分の127か128を閾値にして、それより上は全部255、
それより下は全部0みたいにすればいいと思います。
あと、引き算はマイナスになると絶対値をとるので、
例えば0-1も1となるようにしてもらいたいです。
0044デフォルトの名無しさん
2005/10/05(水) 22:39:25グレースケールの XORって何物さ?
例えば 0.7 xor 0.4 っていくら?
004536
2005/10/05(水) 22:58:26グレイスケールの各要素を閾値を使って2値分割してからXORすれば
いいんじゃないかと
0046デフォルトの名無しさん
2005/10/05(水) 23:02:260047デフォルトの名無しさん
2005/10/05(水) 23:10:23>>42で言ってるのは、
グレースケール1画素=8bitのunsigned値でXORってことでしょ。
・・・って、釣られてる?
004836
2005/10/05(水) 23:53:280049デフォルトの名無しさん
2005/10/06(木) 00:17:370050デフォルトの名無しさん
2005/10/06(木) 00:18:390051デフォルトの名無しさん
2005/10/06(木) 01:25:20一番重要な部分のアルゴリズムに関しては
・128を閾値にして2値化 → 最上位ビットが1か0か
・2値の差の絶対値 → XOR
・…の和をとる → 該当ビットが0なら足さない、そうでなければ+1
をまとめて1行になってる。
チェックは半端にしかやってない。
$ a.out n0.png std0.png
の形で実行して。
0052デフォルトの名無しさん
2005/10/06(木) 09:05:24例えば、
--
P2 1 1 255
128
--
ってファイルもありなんだけど。
00537,8
2005/10/06(木) 12:48:03[2] バイナリモードで開いたallファイルの値をテキストで保存する処理
allファイルの値↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/961.txt
[3] 環境
[3.1] Windows2000
[3.2] VC 6.0
[3.3] C
[4] 期限: [2005年10月6日14:00まで]
[5] その他の制限:特になし
0054デフォルトの名無しさん
2005/10/06(木) 12:57:27入力バイナリファイルのサンプル
出力テキストファイルのサンプル
および、それぞれのファイルの構造を説明した文章
をUPせよ。
00557,8
2005/10/06(木) 12:58:11よろしくお願いします。
0056デフォルトの名無しさん
2005/10/06(木) 13:00:060057デフォルトの名無しさん
2005/10/06(木) 13:03:54だから、あなたが示したものはソースコードであって、バイナリファイルの本体じゃない。
『藻前の持ってるallファイル』をUP汁。それとも人には見せられない内容なのか?
0058デフォルトの名無しさん
2005/10/06(木) 13:11:54仮にバイナリファイルを読み込んだ結果が>>53だとしても、
出力ファイルの書式がわからないし、
構造体の値をどのように使えばよいのかわからない。
せめて出力結果の例と、構造体メンバとの対応くらいは説明しろ。
なんか3回くらい同じこと言ってる気がするぞ。
0059デフォルトの名無しさん
2005/10/06(木) 13:14:4700607,8
2005/10/06(木) 13:18:36allファイルはバイナリの値が入ってるものだと思ってください
出力は例えば、
10.509150
1212
12.90324
4235
・
・
・
BOOLは出力しなくていいです。気にしないで下さい。
AAAは可変なんですAAA内のデータ件(10件)分出力する
MMMも可変でデータ件数(5件)分出力する
AAAのみ出力
AAAはBBBを読み込まないとAAAは解らないとします。
やっぱりバイナリの値を決めます。
バイナリの値は
f=22.33F
i=5
d=12.3
です。
0061デフォルトの名無しさん
2005/10/06(木) 13:18:51これにものすごい違和感を覚えたのは俺だけだろうか。
00627,8
2005/10/06(木) 13:23:02*.ascファイル名は変換元となる*.allファイルの拡張子をascとしたもの
0063デフォルトの名無しさん
2005/10/06(木) 13:23:28rename()
0064デフォルトの名無しさん
2005/10/06(木) 13:26:14int c;
FILE *fin, *fout;
/* 略 */
while ((c = getchar(fin)) != EOF)
fprintf(fout, "%02x ", c);
0065デフォルトの名無しさん
2005/10/06(木) 13:30:15> AAAは可変なんですAAA内のデータ件(10件)分出力する
> MMMも可変でデータ件数(5件)分出力する
データ件数はどこから持ってくる?
> AAAのみ出力
ということは、上の例はAAAのメンバを順番に1行ずつ出力してると
考えていいんだな?その場合、有効桁数はどうするんだ?
> AAAはBBBを読み込まないとAAAは解らないとします。
AAAとBBBの関係を示せ。
BBBからAAAのデータを作るという意味か?わけわからんぞ。
0066デフォルトの名無しさん
2005/10/06(木) 13:30:24そのファイルの形式が不明(Cの構造体では説明になっていない)。
ってことで、>>54 >>57-58が要求している情報の回答が必要だと思うよ。
00677,8
2005/10/06(木) 13:36:50allファイルにあります。。。
(allファイル)
データ件数 int ここでは10件とします
00687,8
2005/10/06(木) 13:40:100069デフォルトの名無しさん
2005/10/06(木) 13:42:19>>53 のプログラムは説明用に書いたものか・・・。
わざわざわかりにくくしてるね。
んで、これ、業務? ゼミ?
質問の仕方が下手だと、仕事おわんないよ。とりあえず、本番のプログラム、データをUPしよう。
複数ファイルになるならzipで固めるとかすればよろしい。
00707,8
2005/10/06(木) 13:43:4200717,8
2005/10/06(木) 13:49:20項目名 型 備考
データ件数 int ここでは10件とします
ここからデータ件数分繰り返す
AAA内のデータ数 int ここでは5件とします
AAAの値 float AAA内のデータ数分出力
0072デフォルトの名無しさん
2005/10/06(木) 13:51:11本番の名前をつかいましょう。
00737,8
2005/10/06(木) 13:55:3810←データ件数(固定)
10.509150
2.906092
-2.487760
・
・
・
・
00747,8
2005/10/06(木) 13:57:41ええっとAAA→TOP
AAAを格納する構造体の名前→ONESELF
00757,8
2005/10/06(木) 13:58:36解りやすいかと勘違いしました。それでAAAとしました。すみません。
0076デフォルトの名無しさん
2005/10/06(木) 13:58:420077デフォルトの名無しさん
2005/10/06(木) 14:02:01・本番の構造体
・本番のファイル
・本番のソースファイル
をUPしたうえで、>>1のテンプレートにしたがって、書き直してください。
変遷してるみたいだから、書き直してもらわないと、全体がつかめなくなっています。
00787,8
2005/10/06(木) 14:02:41処理ができたらファイルをくれるので、値は決まってないです。
0079デフォルトの名無しさん
2005/10/06(木) 14:04:39終了だな。乙。
00807,8
2005/10/06(木) 14:06:080081デフォルトの名無しさん
2005/10/06(木) 14:07:580082デフォルトの名無しさん
2005/10/06(木) 14:14:37ちゃんと動くようにしてくれってことでしょ。
>>78
> バイナリのファイルはこれが出来上がってじゃないと先生がくれないんですよ。
それでも、
・バイナリファイルの形式(データ構成)
・テキストファイルの形式(出力フォーマット)
これらは何らかの形で先生から提示されてるはずなので、
それを「そのまま」UPしろ
0083デフォルトの名無しさん
2005/10/06(木) 14:20:0400847,8
2005/10/06(木) 14:42:49に書いてあります。お願いします。
↑架空の人物じゃありませんよ
00857,8
2005/10/06(木) 14:46:33テキストに変えるのが解らないです。
バイナリからテキストに変えるだけが解りません。
書き込みは何とかなると思います
0086デフォルトの名無しさん
2005/10/06(木) 14:50:0200877,8
2005/10/06(木) 14:56:2200887,8
2005/10/06(木) 15:53:120089デフォルトの名無しさん
2005/10/06(木) 15:58:2900907,8
2005/10/06(木) 16:27:58009186
2005/10/06(木) 17:05:08つーか・・・printf系は教科書の最初の方にでてるはずだし、
仮にfprintfを知らなくてもマニュアルのprintfと同じ位置に書かれてそうに思うが。
0092デフォルトの名無しさん
2005/10/06(木) 17:44:05いくらなんでもネタだろ
0093デフォルトの名無しさん
2005/10/06(木) 17:47:380094デフォルトの名無しさん
2005/10/06(木) 17:53:32manとかLSI Cの付属のものJISCのPDFとか。ネタだと思っても反応してしまう。
俺はマニュアル代わりにH&Sリファレンス使ってるが・・・絶版だな。
00957,8
2005/10/06(木) 18:33:13009636
2005/10/06(木) 18:37:28のこれ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/958.cpp
ウィンドウズのコマンドプロンプトで動作確認してみたところ、
何も出力されないんだけど、linuxだとうまくいきますか??
ウィンドウズで何も出力されないのは、何が原因なんでしょうか??
どこを変えるとウィンドウズでもlinuxでも動くようになるの??
0097デフォルトの名無しさん
2005/10/06(木) 18:41:37009831
2005/10/06(木) 18:47:49手元の Windows の Borland C++ Compiler と cygwin の g++,Gentoo の g++ で
pgm の資料のページにあった奴をコピペしたら一応走ったので書いちゃったけど,
エラー処理とか全然してないので駄目かも.
入力に使ったファイルうpできますか?
009936
2005/10/06(木) 18:52:45ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/959.zip
これが入力画像です
どうも申し訳ない
0100デフォルトの名無しさん
2005/10/06(木) 19:03:04その画像はバイナリ版(ヘッダがP5)だね。
>96はテキスト版を想定しているから入力ロジックを書き換えないと動かない。
>98が書き換えてくれるのを待つか、今晩遅くに私が自作ロジックをあげるのを待つよろし。
010136
2005/10/06(木) 19:28:4098氏にも100氏にもどっちにも期待・・・
おねがいします
0102デフォルトの名無しさん
2005/10/06(木) 19:34:16罠だ、気を付けろ!100はおまえの先生だ!
0103デフォルトの名無しさん
2005/10/06(木) 19:39:510104デフォルトの名無しさん
2005/10/06(木) 19:43:180105デフォルトの名無しさん
2005/10/06(木) 19:44:03[2] 問題文(含コード&リンク):
F(s)=(1/(2*PI*PI*s*s))*(sin(2*PI*s*R)-(2*PI*s*R)*cos(2*PI*s*R))
半径Rの球の散乱関数F(s)を求めるプログラムです。
scanfでRを指定して、sは0から無限大を指定したいです(while構文?)
printfでsが変わる度にF(s)を表示したいです。
グラフで表すと、sを無限大にするとF(s)が0に収束するような感じになります。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:わかりません。
[3.3] 言語: C
[4] 期限: [明日早朝まで]
[5] その他の制限: 4年前に勉強したがさっぱり忘れました。
もっこすお願いします
0106デフォルトの名無しさん
2005/10/06(木) 19:50:43できれば、
・その数式をグラフ付きで説明しているページ
プリーズ。
それから、
・sのキザミはいくつごと?
・プログラムで無限大は扱えないんだけども
ってことで、現在の情報では組めない。
010731
2005/10/06(木) 19:57:01>>100 のとおり形式違い.というわけでさくっと作り直しますた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/965.cpp
0108デフォルトの名無しさん
2005/10/06(木) 20:19:45>104 のとおりどこまで表示したらいいかわからんかったので
F(s) が十分小さくなるまで h 刻みで表示してやった
#include <stdio.h>
#include <math.h>
#define PI 3.141592653589793238462643383279
#define h 0.001
#define EPS 0.0001
double F(double s, double R) {
return (1.0/(2.0*PI*PI*s*s))*(sin(2.0*PI*s*R)-(2.0*PI*s*R)*cos(2.0*PI*s*R));
}
int main() {
double s, R, Fs = -1;
scanf("%lf", &R);
for (s = h; fabs(Fs) >= EPS; s += h) {
Fs = F(s, R);
printf("%lf %lf\n", s, Fs);
}
}
0109デフォルトの名無しさん
2005/10/06(木) 20:20:07刻み幅がわからんから勝手に0.1刻みにした。
都合悪かったらs+=0.1のところの0.1を適当に変えといて
#include<stdio.h>
#include<math.h>
double F(double s,int R){
return (1/(2* M_PI* M_PI*s*s))*(sin(2*M_PI*s*R)-(2*M_PI*s*R)*cos(2*M_PI*s*R));
}
int main(){
double R,s;
printf("R = ");
scanf("%lf",&R);
for(s=0;;s+=0.1)printf("F(%f)=%f\n",s,F(s,R));
return 0;
}
0110デフォルトの名無しさん
2005/10/06(木) 20:29:49s = 0 でその F(s) は分母ゼロになって未定義になるので lim_{s → 0} F(s) = 0 を
分けて書くかループの開始をずらすかしたほうが幸せと思われ
0111109
2005/10/06(木) 20:29:53×double F(double s,int R)
○double F(double s,double R)
0112デフォルトの名無しさん
2005/10/06(木) 20:33:08s = s*2で、Fの絶対値が0に十分近くなるまで計算しとけばいいんじゃないか?
0113105
2005/10/06(木) 20:58:11>>109=111
>>110
の先生がたありがとうございます。
グラフは探したけど見当たりませんでした、すいません。
ちなみに
lim_{s → 0} F(s) = 4/3πR^3
になります。
グラフを求めるためのプログラムなので
sの刻みは0.1でお願いします。
F(s)は原点反射で+−を繰り返して0に収束します。
今から夜勤なのでまた早朝チェックします。
0114デフォルトの名無しさん
2005/10/06(木) 21:02:420115デフォルトの名無しさん
2005/10/06(木) 21:14:27え? Taylor 展開したら F(s) = 4/3 π R^3 s - 8/15 (π^3 R^5) s^3 + O(s^4) になったんだが。
もし s の付け忘れでないなら、式が間違ってる可能性があるのでチェックよろしく。
刻みくらいはプログラム見て直してくれ。
0116デフォルトの名無しさん
2005/10/06(木) 21:32:04[2] 問題文(含コード&リンク): http://49uper.com:8080/html/img-s/86373.zip
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2005年10月07日]
[5] その他の制限: とくにないです。
よろしくお願いします。
0117デフォルトの名無しさん
2005/10/06(木) 21:34:10[2]
(x-x1)^2+(y-y1)^2+h^2=r1
(x-x2)^2+(y-y2)^2+h^2=r2
(x-x3)^2+(y-y3)^2+h^2=r3
但し r1:r2:r3=a:b:c
x1,x2,x3,y1,y2,y3,h,a,b,cは既知。これを満たすx,y,r1,r2,r3を求めよ。
要は三元連立二次方程式を解けってことだと思います。
[3] 環境
[3.1] UNIX
[3.2] gcc ?
[3.3] C
[4] 期限: [2005年10月8日23:00まで]
[5] 特にないです
急に出題されたもので困っています。よろしくお願いします!
0118デフォルトの名無しさん
2005/10/06(木) 22:15:271,2と3,4とでそれぞれ1問と考えてよいのだろう。4つ組む必要があるけどね。
>>117
わからん。式からして、円が3つあって、それぞれ
原点が、(x1, y1), (x2, y2), (x3, y3)
半径^2が、r1-h^2, r2-h^2, r3-h^2で、
半径の比がa, b, c。
この3つの円周が3つとも重なる点がx, yだけど・・・。
数学板で解き方おしえてもらったほうがいいかも。
0119デフォルトの名無しさん
2005/10/06(木) 22:27:390120デフォルトの名無しさん
2005/10/07(金) 00:05:48とりあえず、1.
#include<stdio.h>
int main(int argc,char *argv[]){
char buf[1024];
FILE *fp;
size_t n;
if(argc!=2)return 1;
fp=fopen(argv[1],"r");
if(!fp)return 1;
while(1){
n=fread(buf,1,sizeof(buf),fp);
if(!n)break;
fwrite(buf,1,n,stdout);
}
fclose(fp);
return 0;
}
0121デフォルトの名無しさん
2005/10/07(金) 00:08:59んでもって、2.
#include<stdio.h>
int main(int argc,char *argv[]){
char buf[1024];
FILE *ifp,*ofp;
size_t n;
if(argc!=3)return 1;
ifp=fopen(argv[1],"r");
if(!ifp)return 1;
ofp=fopen(argv[2],"w");
if(!ofp){
fclose(ifp);
return 1;
}
while(1){
n=fread(buf,1,sizeof(buf),ifp);
if(!n)break;
fwrite(buf,1,n,ofp);
}
fclose(ifp);
fclose(ofp);
return 0;
}
0122デフォルトの名無しさん
2005/10/07(金) 01:06:173.完成
#include<stdio.h>
#include<string.h>
int main(int argc,char *argv[]){
char buf[8192];
FILE *fp;
size_t line;
if(argc!=2)return 1;
fp=fopen(argv[1],"r");
if(!fp)return 1;
for(line=1;fgets(buf,sizeof(buf),fp);line++){
if(buf[strlen(buf)-1]=='\n')buf[strlen(buf)-1]='\0';
size_t words;
char *dp;
printf("-----%d-----\n",line);
dp=strtok(buf,",");
for(words=1;dp;words++){
printf("%d:%s\n",words,dp);
dp=strtok(NULL,",");
}
}
fclose(fp);
return 0;
}
0123デフォルトの名無しさん
2005/10/07(金) 02:26:47#include<string.h>
#include<stdlib.h>
int main(int argc,char *argv[]){
char buf[8192],*data[256];
FILE *fp;
size_t line,a,b;
if(argc!=4)return 1;
if(!(fp=fopen(argv[1],"r")))return 1;
a=atoi(argv[2]),b=atoi(argv[3]);
for(line=1;fgets(buf,sizeof(buf),fp);line++){
if(buf[strlen(buf)-1]=='\n')buf[strlen(buf)-1]='\0';
size_t words=0,i;
char *dp=strtok(buf,",");
printf("-----%d-----\n",line);
if(dp) for(words=1;dp;words++){
data[words-1]=dp;
dp=strtok(NULL,",");
}
if(a<=words&&b<=words){
char *tmp=data[a-1];
data[a-1]=data[b-1];
data[b-1]=tmp;
}
for(i=0;i<words-1;i++) printf("%d:%s\n",i+1,data[i]);
}
fclose(fp);
return 0;
}
0124デフォルトの名無しさん
2005/10/07(金) 06:32:32要するに連立方程式
(x-x_1)^2 + (y-y_1)^2 + h^2 - t a = 0
(x-x_2)^2 + (y-y_2)^2 + h^2 - t b = 0
(x-x_3)^2 + (y-y_3)^2 + h^2 - t c = 0
の解 (x,y,t) を求めりゃいいんだな.
解析解が結構複雑になるのが見えてるので,適当にNewton法で数値計算.
面倒なので実数解の範囲で求めた.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/966.c
0125113
2005/10/07(金) 07:28:39式の計算までしてくださってありがとうございます。
ロピタルの定理を使って分母分子を2回微分してs=0を代入すると
F(s)=4/3πR^3になるみたいです。
ありがとうございました。
0126デフォルトの名無しさん
2005/10/07(金) 09:14:57もう解決してる気がするけど、分子二回微分したら
4πR^2 ( sin(2πRs) + 2πRs cos(2πRs) )
になって s → 0 で 分子 → 0 だから、結果 0 と思うがなあ。
0127125
2005/10/07(金) 11:43:22すいません、僕の間違いでした。
最初の式が
F(s)=(1/(2*PI*PI*s*s*s))*(sin(2*PI*s*R)-(2*PI*s*R)*cos(2*PI*s*R))
でした。
すいません。。
0128デフォルトの名無しさん
2005/10/07(金) 19:57:06【質問テンプレ】
[1] 授業単元: ソートとサーチ
[2] 問題文(含コード&リンク):
�@主な準備
・対象データ配列作成プログラム
その都度指定する個数X(最大100万程度)の整数をランダムに並べた配列を作成、
また、必要に応じ整列済み、逆順整列済みなどのデータを作成。
・処理時間の測定方法の調査
・ソート結果が正しいかどうかチェックするプログラム
�Aサーチプログラム1 与えられた配列から指定した値を検索する。
�Bソートプログラム1 バブルソート、挿入ソートなどのNの2乗オーダのプログラムを1つ以上。
�Cサーチプログラム2 整列済みの配列から指定した値を高速に検索する。
�Dソートプログラム2 クイックソートなどNlogNオーダの高速ソートプログラムを1つ以上。
[3] 環境
[3.1] OS: Unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2005年10月14日07:00まで]
[5] その他の制限: 特になしです。
まるっきり分かりません(´・ω・`)
0130デフォルトの名無しさん
2005/10/07(金) 20:52:46(1)
>個数X(最大100万程度)の整数
これって要素数が100万って言うことですよね
→malloc()か初めから無駄に100万要素確保
>ランダムで作成
→とりあえずrand()でいいんじゃないかな
値が気に入らないようだったら複数回呼び出して作るか
(8771と6584と8402とかでたら * / \ % 使って 775840 とか)
自前で疑似乱数作るのも…
>ソート結果が正しいかどうかチェック
昇順か降順かわからないけど
昇順チェックにforかwhile使ってa[i]>a[i+1]だったらbreakして
その時のiの値によって最後までいったか途中で(ry
ごめん…time.hまともに使ったことないんだorz
(2)探してるものをbとすると
a[0]がbかどうか、a[1]が…を延々とやる。見つからない場合は(ry
(4)→バイナリサーチ
a[0]〜a[99]まで昇順のがあったら
a[(0+99)/2]=a[49]を調べる。あたり→よかったね
a[49]より大きい→a[(49+1+99)/2]=a[74]を
a[49]より小さい→a[(0+49-1)/2]=a[24]を
以下あたるまでループ。見つからなかったときの言い訳を考えておくこと
(3)(5)講義で習ったんじゃないの?
わかんなかったらその単語をgoogle他で検索
腕試しに徹夜で考えてみます
0131デフォルトの名無しさん
2005/10/07(金) 20:54:28>必要に応じ整列済み、逆順整列済みなどのデータを作成。
ってのは整列済みのデータを生成する、つまりランダム生成してからソートは駄目ってこと?
あと
>処理時間の測定方法の調査
は、 linux なら time とかいうコマンドがいるはず。詳しくは man time とか Google。
0132デフォルトの名無しさん
2005/10/07(金) 21:31:30http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/967.c
0133デフォルトの名無しさん
2005/10/08(土) 00:50:30あと・・・n log n のソートだと100万件でもあっとゆー間だったように思う。
1メガ個だろ・・・。今の3ギガHzとかのCPUじゃ1秒もかからんのじゃないか?
0134デフォルトの名無しさん
2005/10/08(土) 01:17:110135デフォルトの名無しさん
2005/10/08(土) 01:51:21[2] 問題文:
�@高さと幅40*40で8bitのグレースケールビットマップの画素値を入れた[40][40]の二次元配列を使い
画像のエッジ処理をせよ。(輪郭を際立たせよ)
�A高さと幅40*40で8bitのグレースケールビットマップの画素値を入れた[40][40]の二次元配列を使い
80%に縮小せよ。
[3] 環境
[3.1] OS: Windows2000
[3.2] コンパイラ名とバージョン:VC
[3.3] 言語: C
[4] 期限:[無期限]
[5] その他の制限:ライブラリ禁止 モジュールなど使わずにfor文や配列などの基礎的なものだけで回答せよ。
1の問題はラプラシアンなど微分演算しないでも出来、マスク処理をするとやりやすいとのことでしたが、msdnのサイトや
ビットマップの構造についていろいろ調べてもさっぱりでした。
2の問題は2分の一に縮小は出来たのですが、配列のみで%で縮小・拡大率を変えることが出来ませんでした。
あまり役に立たないと思いますが二分の一の時のソースを記しておきます。よろしくお願いします。
//2分の1縮小
biWidth = srt->biWidth/2;
biHeight = srt->biHeight/2;
Arr = CreateArr2(biHeight, biWidth);
for(i=0; i<Height; i+=2){
for(j=0; j<Width; j+=2){
Arr[i/2][j/2] = Arr[i][j];
}
}
0136デフォルトの名無しさん
2005/10/08(土) 02:09:201は注目画素と隣接画素の差を取るだけでもそれっぽくなるけどそれじゃダメなのかな?
2は同じ要領で1/2のかわりに.8倍すればいいと思う。
0137128
2005/10/08(土) 03:06:12まるっきしソースから分からないんです;;
もし、お暇があればお願いしますです。
>>131様
私もそこで迷ったんですが。。。そもそもランダムのさえ作るのがわからなくって・・・全然進展しません;;
いきなり作れって言われた感じで・・・
>>132様
ありがとうございます!ありがたく受け取りますです┏oペコリッ
0138デフォルトの名無しさん
2005/10/08(土) 07:04:530139デフォルトの名無しさん
2005/10/08(土) 08:08:57(2), (3), (4) まとめて。(1) はよくわからんのでパス。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/968.c
0140デフォルトの名無しさん
2005/10/08(土) 09:12:24>・処理時間の測定方法の調査
時間を計るときにどこにスタートとストップを置くかじゃないかな?
0141デフォルトの名無しさん
2005/10/08(土) 09:45:18神。・;+゜・(ノД`):・゜+:・。ありがとうです;;
0142デフォルトの名無しさん
2005/10/08(土) 10:03:32不完全の上先越されたけどあぷ
>対象データ配列作成プログラム
ここくらいしか見るところないかも。領域確保とデータ作成が別になってる
0143135
2005/10/08(土) 12:33:59�@
一応下記のように前後の配列を比べて違う時だけ取り出すやり方を一つのやり方を作ってみたのですが
違うやり方を想定していたらしくて。
下記のものも不完全で縦の行を上下で比べ方が前後を比べるやり方で出来ないため横の直線だけ空白になってしまい
どうしたらいいのか解らないので凍結していました。
for(i=0; i<Height; i++){
for(j=0; j<Width; j++){
if(Arr[i][j+1] != Arr[i][j-1]){
Arr2[i][j] = Arr[i][j];
}
}
}
�Aは今は80%だけど35%もしくは117%のように縮小拡大に対応させれるようにしなくてはいけないので。
縮小の場合は配列を何個飛ばしで読み込みの計算が小数の扱いなどがわからなくて。
拡大は2倍の時は2個連続で同じ配列の値を読みこんでいたのですが。
0144デフォルトの名無しさん
2005/10/08(土) 12:44:14(1)
if (Arr[i][j+1] != arr[i][j-1] || Arr[i-1][j] != Arr[i+1][j]) Arr2[i][j] = Arr[i][j]
じゃだめなの?
(2) x パーセントにする → 画像を x 倍して100個飛ばし or 100個の平均を取る
0145デフォルトの名無しさん
2005/10/08(土) 13:43:32今すぐは試すことが出来ないのですがやってみます。ありがとうございました。
0146デフォルトの名無しさん
2005/10/08(土) 15:25:00[2] 問題文(含コード&リンク):
コマンドラインから指定したファイルをいったんメモリに全て読み込み、
その後内容をバイト単位で16進するプログラムを書け
[3] 環境
[3.1] OS: X端末っていわれてるこんぴゅーたです
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: できれば月曜中でおねがいします
[5] その他の制限: よろしくおねがします
0147デフォルトの名無しさん
2005/10/08(土) 15:26:28[2] 問題文:デジタル音声データ処理において、音の高低を求めるピッチを求める時雑音処理のために平均化処理が行われる。
音声を短い時間窓で区切って、各区間で周波数を求めることにより、音の高低の推移がわかる。
ある手法で求められた各時間窓の周波数(HZ)を入力し、その値を平均化するプログラムを作成せよ。
ここで平均化処理は以下のように前後の値の平均からその値を求めることによりなされる。
例えば入力データが以下のようだとする。
104 99 99 97 96 93 90 87 83 79 75 72 69 67......
すると5番目のデータの平均化された値は5番目のデータの前後のデータに重みをつけた平均で求められる。
今回は前後2個のデータと、指定した数値自身のデータ(5番目の場合3,4,5,6,7番目のデータ)で平均を求め、平均を求めるに当たっての重み付けは自分より2つはなれたデータの重みは2、後の3つのデータは3とする。
したがって、5番目のデータの平均化された値は以下の式で求められる。
{(3番目*2)+(4番目*3)+(5番目*3)+(6番目*3)+(7番目*2)}/13
これを一般的に書くと重み関数をw[5]={2,3,3,3,2}
元の値が配列p[]に入っているとすると、
i番目の平均化された値q[i]
q[i]=(廃[i-2+k]*w[k])/13(シグマはk=0,5つの数値の総和)で求めることが出来る
ただし、最初や最後の数値の場合は、前後の値が無いので、i-2+kが0以下の場合は0番目のデータ、データ数を超えた場合は最後のデータを用いることにする。
また、入力データはdouble型の配列で処理する。
実行結果はリダイレクションでファイルからデータを読み込み、結果もリダイレクションでファイルに書き出す。
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:不明
[3.3] 言語:C++
[4] 期限: [2005年10月12日9:00まで]
[5] その他の制限:配列まで習ってます。
どなたかお願いします。使ってるテキストに書かれている例がわかりづらくてどうにもならないんです。
0148デフォルトの名無しさん
2005/10/08(土) 16:18:56#include <iostream>
#include <functional>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
using namespace std;
vector<double> v;
copy(istream_iterator<double>(cin), istream_iterator<double>(), back_inserter(v));
v.insert(v.begin(), 2, v[0]), v.insert(v.end(), 2, v[v.size() - 1]);
vector<double> result(v.size() - 4, 0.0);
for (int i = 0; i < 5; ++i) {
int weight[] = {2, 3, 3, 3, 2};
for (int j = 0; j < weight[i]; ++j) {
transform(result.begin(), result.end(), v.begin() + i, result.begin(), plus<double>());
}
}
transform(result.begin(), result.end(), ostream_iterator<double>(cout, "\n"), bind2nd(divides<double>(), 13));
}
0149128
2005/10/08(土) 18:23:0015ビット乱数×2の15乗+15ビット乱数で30ビット乱数が作成できるとか、。。。まず�@番
を完成させなくちゃいけないですよね・・・(⊃д⊂)
0150デフォルトの名無しさん
2005/10/08(土) 18:42:46どうもありがとうございます。
あとこれincludeをiostreamだけで書く方法ありませんか?
自分の書き方が『配列まで習ってる』としか書かなかったので悪いのは自分なんですが、
<functional>も<vector>も<algorithm>も<iterator>も習ってないのですよorz
0151デフォルトの名無しさん
2005/10/08(土) 19:04:020152デフォルトの名無しさん
2005/10/08(土) 19:18:58>>130で少しいったけど
>値が気に入らないようだったら複数回呼び出して作るか
>(8771と6584と8402とかでたら * / \ % 使って 775840 とか)
(int)(1.0 * P * rand() / RAND_MAX);
とかでもいいとは思うけど 最大(RAND_MAX)種類しか値取れないので
v1=(rand()>>4)&255;
v2=(rand()>>4)&255;
v3=(rand()>>4)&255;
a[i]=v1<<16+v2<<8+v3;
たとえばこんなのでどうですか?
stdlib.hのrandはお手軽にランダムな数字を取ってくる二はいいけど
アレなので 統計に使いたいなら>>151でいってるメルセンヌ・ツイスターとかの方がいいかも
ttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html
0153デフォルトの名無しさん
2005/10/08(土) 20:32:49[2] 問題文(含コード&リンク):まず、getOpenというユーザーから任意のファイル名を入力させ、そのファイルを開く関数を作成しなさい。
またこのとき、ファイルが存在しなかったら、エラーを返しプログラムを終了するようにしなさい。
次に、void sumCountAndAverage(ifstream&, double&, double&, double&); という
先ほど作成した関数から呼び出したファイルの中のdouble型の数の総和とその数の個数を求め、
その後それらの値から平均値を求める関数を作成しなさい。
最後にこれらの関数とmain関数を用いて1つのプログラムとして稼動するようにしなさい。
このとき、main関数において、先ほど求めたファイルの中の数の総和、個数と平均値を表示しなさい。
なお、今回使用するファイルは一行に1個ずつdouble型の数が収められており、
最後の行の数が入力されたあとはエンターキーが一回入力された.dat型ファイルとする。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: 2005年10月10日20:00まで
[5] その他の制限: 特になし。よろしくお願いします。
0154デフォルトの名無しさん
2005/10/08(土) 21:35:04#include<iostream>
#include<fstream>
#include<string>
int getOpen(std::ifstream&strm){
std::string filename;
std::cout << "Open file name ?:";std::cin >> filename;
strm.open(filename.c_str());
return !strm;
}
void sumCountAndAverage(std::ifstream&strm, double&sum, double&n, double&average){
for(double var;strm>>var;++n)sum+=var;
average = sum / n;
}
int main(){
std::ifstream strm;
double sum=0,n=0,average;
if(getOpen(strm)){
std::cout << "Can't open file."<< std::endl;
return 1;
}
sumCountAndAverage(strm,sum,n,average);
std::cout
<< " Sum = " << sum << std::endl
<< " N = " << n << std::endl
<< "Average = " << average << std::endl;
return 0;
}
0155デフォルトの名無しさん
2005/10/08(土) 21:54:52getOpenはboolを返していいだろ。
0156デフォルトの名無しさん
2005/10/09(日) 09:46:00#include <stdio.h>
hexdump(FILE * fp) {
char byte;
/* ファイルの終りまで一文字ずつ byte に読み込み */
while ((byte = getc(fp)) != EOF) {
printf("%x", (int)byte);
}
}
main(int argc, char **argv)
{
int i;
FILE *input;
if (argc == 1) /* コマンドライン引数がないとき */
printf("Specify the file name.\n");
else{
for (i = 1; i < argc; i++) {
/* argv[i] をファイル名として読み込み用のオープンをする */
input = fopen(argv[i], "rb");
if (input == NULL) {
fprintf(stderr, "cannot open %s\n", argv[i]);
return 1;
}
hexdump(input);
fclose(input);
}
}
return 0;
}
0158デフォルトの名無しさん
2005/10/09(日) 16:18:08[2] 問題文(含コード&リンク):
次のC言語のプログラムを最適化せよ。ただしint型は無限長のbitを持つと仮定して良い。
int f(int x,int y){
if (x==1||x==y) return 1;
return f(x?1,y?1)+f(x,y?1);
}
int g(int N){
int sum=0;
for(int i=1;i<=N;++i) sum+=f(i,N);
return sum;
}
int main(){ return g(100000); }
[3] 環境
[3.1] OS: 規定されていない
[3.2] コンパイラ名とバージョン: 多分紙と鉛筆だけで解くのだと思う
[3.3] 言語: C
[4] 期限: とくにありません。
[5] その他の制限: 他に2問あって、合計1時間で解くものでした。
0159デフォルトの名無しさん
2005/10/09(日) 16:24:52何これ?
式 ? 真の時の値:偽の時の値
とは違うよな...
0160デフォルトの名無しさん
2005/10/09(日) 16:26:15それでも構文変だが
0161デフォルトの名無しさん
2005/10/09(日) 16:27:080162デフォルトの名無しさん
2005/10/09(日) 17:04:580163デフォルトの名無しさん
2005/10/09(日) 17:11:330164デフォルトの名無しさん
2005/10/09(日) 18:09:50やねう企画の入社試験
0165デフォルトの名無しさん
2005/10/09(日) 18:29:31ちょいと樹形図を書けばわかるけど,その g(N) のオーダーは O(2^N) より大きい.
というわけで,小手先の最適化くらいでなんとかなる問題じゃあない.
というわけで動的計画法.簡単のため M を g の入力の最大の数として,
int tbl[M+1][M+1];
int init() {
for (int i = 0; i <= M; ++i) tbl[1][i] = tbl[i][i] = 1;
for (int i = 1; i <= M; ++i)
for (int j = 1; j <= M; ++j)
tbl[i][j] = tbl[i-1][j-1] + tbl[i][j-1];
}
int f(int x,int y) { return tbl[x][y]; }
入力の値に上界を設けたくなければ適当に realloc でもすればいい.
0166デフォルトの名無しさん
2005/10/09(日) 18:39:55f()を書き換えるだけで、main()には手をつけんな・・・俺なら。
0167デフォルトの名無しさん
2005/10/09(日) 18:41:20やっつけで
int g(int N){
int i,sum=1;
for(int i=1;i<N;i++) sum+=sum;
return sum-1;
}
int main(){ return g(100000); }
0168デフォルトの名無しさん
2005/10/09(日) 18:41:27f = y-1 C x-1
∴
g = 輩-1 C k
∴
g = 2 ^ (y -1)
g = 1 << (y-1)
∴
int main(){ return 1<<(100000-1); }
0169デフォルトの名無しさん
2005/10/09(日) 18:43:280170デフォルトの名無しさん
2005/10/09(日) 18:46:250171デフォルトの名無しさん
2005/10/09(日) 18:49:180172デフォルトの名無しさん
2005/10/09(日) 18:52:51問い2だけ......
問い3はプログラムじゃないんで放置
//再帰版
int W(int a[7][7],int x,int y){
return a[y][x]==0?a[y][x]=2,1+W(a,x-1,y)+W(a,x+1,y)+W(a,x,y-1)+W(a,x,y+1):0;
}
//非再帰版
#define push(x,y) (*p)[0]=x,(*p++)[1]=y
#define pop(x,y) p != stack && ( x=(*--p)[0],y = (*p)[1] ,1)
int W(int a[7][7],int x,int y){
int stack[7*7*6][2]={x,y},(*p)[2]=stack+1,sum = 0;
while(pop(x,y))
while(!a[x][y]) a[x][y] = 2,++sum,push(x-1,y),push(x+1,y),push(x,y-1),++y;
return sum;
}
0173デフォルトの名無しさん
2005/10/09(日) 19:52:56んじゃ問3.
(1)
φ(φ(x)) = φ(A x + a) = A^2 x + A a + a = x,
整理して (A + I) a = (I - A^2) x.
これが任意の x について成立するためには両辺がゼロにならないといけないので
case1: A = -I
case2: A^2 = I かつ a = 0
のどちらか.ただし I は単位行列.
(2)
case1 のとき φ(x) = x <=> -x + a = x <=> x = a/2.
よって F(φ) = { a/2 }.( x = 0 は A x = x を満たす )
case2 のとき φ(x) = x <=> A x = x.
(3)
case1 のとき一点なのは既に示した.
case2 のとき 0 ∈ F(φ) は明らかだから,非自明な x が F(φ) に入ったら F は一点集合でない.
A を Jordan 標準形にしてみてちょっと計算すると A は対角化できることがわかり,
その固有値は 1 か -1 を取る.
固有値が全て -1 とすると A は -I と相似になって A = -I となって φ(x) = -x で case1 に入る.
一つでも -1 でないものがあったとすると,その固有ベクトル x は A x = x を満たすので ∈ F(φ).
0174デフォルトの名無しさん
2005/10/09(日) 20:48:48[2] 問題文:
テキスト内にある/home/abcd/ap1,10,A,1,AP1,V01,20041014,log
がファイルフォーマットだとして、
/home/abcd/ap1,10,A,,,V01,,logのように項目が抜けていた場合に
何番目の項目が抜けているのかを特定したいのですが、いいアイディアが浮かびません。
なるべく短いステップで処理したいのですが、いい方法ありませんか?お願いします。
[3] 環境
[3.1] OS: Windows2000
[3.2] コンパイラ名とバージョン:VC
[3.3] 言語: C
[4] 期限:[無期限]
0175デフォルトの名無しさん
2005/10/09(日) 20:55:54の意味が理解不能です
0176デフォルトの名無しさん
2005/10/09(日) 21:03:37/home/abcd/ap1,10,A,,,V01,,logの場合
,と,の間に文字が入ってないのでその位置を特定したい。
(例として、3個目と4個目の間に文字がありません。)
見たいな特定がしたいです。よろしくお願いします。
0177namahage
2005/10/09(日) 21:04:400178デフォルトの名無しさん
2005/10/09(日) 21:21:19宿題なら>>1に従ったフォーマットを。宿題でないなら別スレへ。
0179デフォルトの名無しさん
2005/10/09(日) 21:31:20#include <string.h>
void check_field( chr *str, int *exist ){
char *tp;
tp = strtok( str, "," );
*exist = tp?1:0; exist++;
while ( tp ) {
tp = strtok( NULL, "," );
*exist = tp?1:0; exist++
}
}
0180デフォルトの名無しさん
2005/10/09(日) 21:49:27せめてコンパイラぐらいは通してくれ
0181デフォルトの名無しさん
2005/10/09(日) 22:35:380183デフォルトの名無しさん
2005/10/10(月) 01:47:08174です。遅れましたがご解答ありがとうございます。
この処理は、','(コンマ)が4つとか連続で入っていた時でも対処できるものでしょうか?
勉強不足ですみません。
例として、3目個と4個目の間に文字がありません。4個目と5個目の間に文字がありません。みたいな事が行ないたいのです。
ソースでなくてもいいアイディアなにか無いでしょうか?おねがいします。
0184デフォルトの名無しさん
2005/10/10(月) 01:56:19[1] 授業単元: 文字列関係
[2] 問題文(含コード&リンク):1 文字列をキーボードから入力し、その結果を表示するプログラム。
2 文字列をキーボードから入力し、入力した文字列の長さを計算し表示するプログラム。(例[Syukudai]→結果[8] [ganbaru]→結果[7])
3 文字列をキーボードから入力し、以下の処理を行う(そして表示)。i,英字は全て英大文字に ii,数字はそのまま iii,特殊文字は空白に
(例「Syu+ku12dai」→結果「SYU KU12DAI」 「ga(n)baru」→結果「ga n baru」)
4 文字列をキーボードから入力し、その文字列を逆転する処理して表示。その処理のフローチャートも書くこと。
(例「Syukudai」→結果「iadukuyS」
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2005年10月10日23:00あたりまで] または [無期限] のいずれか (「できるだけ早く」は不可)
[5] その他の制限: イ、GOTO文を使用してはいけない
ロ、入力は繰り返し行えるように(なんらかの行動で終われるようにする。[end]と打つと終わりとかそういう感じ)
ハ、必ずmain()関数とサブ関数を使用
ニ、ポインタじゃなく配列を使用
一度全て作成したのですが、文字「列」として出力しなかったりしたり、毎回キーボードで打つのとか繰り返しの判定処理とか
出力するprintfの文とかはほぼ同じだからそこをmainとサブで効率よくできるように〜〜みたいなことを言われました(´・ω・`)
あくまで文字列として出力しろ〜〜みたいなことも・・・どうすればいいかわかりません、、よろしくお願いしますです。
0185184
2005/10/10(月) 01:57:360186デフォルトの名無しさん
2005/10/10(月) 02:05:051とかmain一つで事足りるわけだが、それも関数分けないとダメ?
それとctype.hは使っておk?
0187デフォルトの名無しさん
2005/10/10(月) 02:06:50strchrとか使ったら?ループでstr[i]==','とか判定するのとあんまり変わらんかも知れんが。
>>128
ランダム版 for(i=0;i<N;i++) data[i]=rand();
整列済み版 for(i=0;i<N;i++) data[i]=i;
逆整列済み版 for(i=0;i<N;i++) data[i]=N-i;
でいいんじゃね?ただ、ランダム版でデータ重複がいやだとか(逆)整列済み版で重複有りとなると多少改造が必要だが。
0188デフォルトの名無しさん
2005/10/10(月) 02:08:480189179
2005/10/10(月) 02:09:27確かにコンパイルもパスしない代物で申し訳無かったが
existというintのarrayにトークン(コンマで区切られた文字列)の有無が入るように書いた(つもり)
実行環境が手許に無いので試験してみることが出来ないけど。
main(){
int e[100]=[0];
char *any = "任意の文字列";
check_field( any, e )
/* ここでeの内容を確認 */
}
のようなテストドライバでも書いて試験してみて下さい。
例に挙げたようなことはe(exist)が正しく出来ているなら簡単でそ
0190デフォルトの名無しさん
2005/10/10(月) 02:25:55まだ試していませんがいいアイディアいただけて、感謝しています。
またいいアイディアありましたらよろしくお願いします。
0191デフォルトの名無しさん
2005/10/10(月) 03:07:02http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strsep.3.html#lbAF
0192デフォルトの名無しさん
2005/10/10(月) 12:38:28[2] 問題文(含コード&リンク):
バブルソート法で数列
80 40 30 90 50 20 10 60
を昇順にソートするプログラムを書け
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2005年10月12日
[5] その他の制限: 無し
よろしくおねがいします
0193デフォルトの名無しさん
2005/10/10(月) 12:40:500194デフォルトの名無しさん
2005/10/10(月) 13:05:16void out_num(int *,int);
void srt_bub(int *,int);
int main(int argc,char **argv){
int a[]={80,40,30,90,50,20,10,60},n=8;
out_num(a,n);srt_bub(a,n);out_num(a,n);
return 0;
}
/* 出力 */
void out_num(int *a,int n){
int i;
for(i=0;i<n;i++)printf("%d ",a[i]);
printf("\n");
}
/* (3)バブルソート */
void srt_bub(int *a,int n){
int i,j,tmp;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j]){
tmp=a[i];a[i]=a[j];a[j]=tmp;
}
}
ホイ、使い回し
0195デフォルトの名無しさん
2005/10/10(月) 14:24:32[2] 問題文(含コード&リンク): UNIXの(ls -l)コマンドをプログラムで再現しなさい。
という課題が出されました。指定のディレクトリ内のファイル等を(ls -l)で表示できる、
パーミッションやユーザ名、ファイルサイズ等を表示したいのですが、
全く知恵が出てきません。ご教授お願いします。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:[無期限]
[5] その他の制限: 特にありません。
UNIX全くの無知です。お力を貸してください。よろしくお願いします。
0196デフォルトの名無しさん
2005/10/10(月) 14:26:47ls.c をwebで検索
0197デフォルトの名無しさん
2005/10/10(月) 14:27:35int main() {
return system("ls -l");
}
0198デフォルトの名無しさん
2005/10/10(月) 15:03:43追加機能として、自分で決めた任意のディレクトリの表示は可能でしょうか?
0199デフォルトの名無しさん
2005/10/10(月) 15:04:37試したの?>>195さん。
0200デフォルトの名無しさん
2005/10/10(月) 15:09:20ありがとうございます
0201デフォルトの名無しさん
2005/10/10(月) 15:14:30すみません。
明日さっそく学校で試してみたいと思います。
0202デフォルトの名無しさん
2005/10/10(月) 16:21:530204デフォルトの名無しさん
2005/10/10(月) 17:12:57>>188
0205デフォルトの名無しさん
2005/10/10(月) 20:33:29でも、この手の面白いな。またあったらネタでもかまわんのでよろしく。
0206デフォルトの名無しさん
2005/10/10(月) 22:27:36[2] 問題文 a[ ]の箱を100個作ってi*iを代入。その合計と平均を求める。
「input」と「nijou」と「calc_sum」と「calc_average」を使って、「input」で、まずa[ ]=i*iの形?いみたいなのを作る。
そして「nijou」で実際に計算、「calc_sum」で合計を求めて「calc_average」で平均を出して終わり。説明下手でごめんなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:よくわからない。
[3.3] 言語: C
[4] 期限 今日の24時まで・・・。
[5] その他の制限: 関数のい課題です。ポインタとかまだ、習ってません。
大体のプログラムの形は作ったんですが、明らかに変です。これ↓を修正して作ってくれませんか?お願いします。
0207206
2005/10/10(月) 22:28:09float input(void);
float nijou(float);
float calc_sum(float);
float calc_average(float);
int main(void){
float s,r,a,b;
s=input();
r=nijou(s);
a=calc_sum(r);
calc_average(a);
}
float input(void){
float z,i,a[99];
a[i]=i*i;
z = a[i];
return z;
}
float nijou(float nn){
float a[99],i;
a[i]=i*i;
return a[i];
}
0208デフォルトの名無しさん
2005/10/10(月) 22:28:530209206続き
2005/10/10(月) 22:29:02float x,i,sum,a,a[99];
sum=0;
for(i=0;i<=99;i++){
a[i] = i*i;
}
for(i=0;i<99;i++){
sum=sum+a[i];
}
a=sum;
printf("sum=%d\n",sum);
return a;
}
float calc_average(float aa){
float average;
average = (float)aa/100
printf("average=%f\n",average);
}
sage忘れててごめんなさい・・・。
0210206
2005/10/10(月) 22:30:42分かりにくくてすみません。
0211デフォルトの名無しさん
2005/10/10(月) 22:33:31出題者に問題聞いて来い。
0212デフォルトの名無しさん
2005/10/10(月) 22:35:56[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):BM法をもちいて住所のデータから郵便局を検索せよ。住所データは配列でファイル読み込みすることです。
[3] 環境:
[3.1] OS: WindowsXp
[3.2] コンパイラ名とバージョン: vC.net2003
[3.3] 言語: C/C++/どちらでも可
[4] 期限:3日以内
[5] ライブラリをもちいての文字列検索は不可
お願いしますm(−−)m
0213デフォルトの名無しさん
2005/10/10(月) 22:36:560214206
2005/10/10(月) 22:37:01その出題者と連絡が取れないんです・・・。明日になれば聞けますが、それだと締め切りに間に合いません・・・。
やっぱり、ちゃんとした問題文がないと出来ませんよね・・・。ごめんなさい。
0215デフォルトの名無しさん
2005/10/10(月) 22:44:06そいつらに答え聞くか、問題聞いてみるとか。
0216206
2005/10/10(月) 22:59:18いや・・・他の友人はみんな金曜に学校で終わらせたんだよね。
・・・で、みんなのそのときのデータは学校。問題文が載ってるサイトも学内専用・・・。
友人に聞いても「課題終わってるのに家にデータ持って帰るわけないだろ」と、言われました。しかも問題文も覚えてないっていうし・・・。
今回は自分が悪いですね・・・。
0217初心者
2005/10/10(月) 23:00:44#include <stdio.h>
#include <conio.h>
#include <stdio.h>
int main (void)
{
int kai,kane;
int oturi = kane - kai;
char buf[3];
printf("いくらの買い物ですか\n");
kai = atoi(gets(buf));
printf("お金はいくら出しますか\n");
kane = atoi(gets(buf));
printf("おつりは%d円です\n",oturi);
}
こんな感じで打ったのですがエラーになります。初心者ゆえなにを如何したら改善するのか皆目検討つきません
ちなみにコンパイラはborlandC++compilerです。
どなたかご教授願えますか?
0218デフォルトの名無しさん
2005/10/10(月) 23:00:45BM法==ボイヤ・ムーアアルゴリズムです。
http://www.rsch.tuis.ac.jp/~nagai/ALG2/Alg10-18-2004.pdf
自分でつくったんですけど、配列のループがうまくいきませんでした。
0219初心者
2005/10/10(月) 23:01:31警告
W8065 mondai10.c 14: プロトタイプ宣言のない関数 'atoi' の呼び出し(関数 main
)
警告 W8065 mondai10.c 16: プロトタイプ宣言のない関数 'atoi' の呼び出し(関数 main
)
警告 W8070 mondai10.c 20: 関数は値を返すべき(関数 main )
警告 W8004 mondai10.c 16: 'kane' に代入した値は使われていない(関数 main )
警告 W8004 mondai10.c 14: 'kai' に代入した値は使われていない(関数 main )
0220デフォルトの名無しさん
2005/10/10(月) 23:01:540221デフォルトの名無しさん
2005/10/10(月) 23:04:26>>1くらい読め
0222206
2005/10/10(月) 23:06:400223デフォルトの名無しさん
2005/10/10(月) 23:21:46どうして、
#include <stdio.h>
が二行もあるの?
0224デフォルトの名無しさん
2005/10/10(月) 23:32:55#include <conio.h>
#include <stdlib.h> // atoiってstdlibでしょ?
int main (void)
{
int kai,kane;
int oturi;
char buf[3];
printf("いくらの買い物ですか\n");
kai = atoi(gets(buf));
printf("お金はいくら出しますか\n");
kane = atoi(gets(buf));
oturi = kane - kai; // kaneとkaiの値が決まってから代入しなきゃダメ。
printf("おつりは%d円です\n",oturi);
return 0; // main関数がint型だから値を返す必要がある
}
0225デフォルトの名無しさん
2005/10/10(月) 23:33:51#include <stdio.h>
void input(int a[]);
int nijou(int n);
int calc_sum(int a[]);
float calc_average(int a[]);
int main(void)
{
int a[100];
float ave;
input( a );
ave = calc_average( a );
printf("average=%f\n", ave);
return 0;
}
void input(int a[])
{
int i;
for(i = 1; i <= 100; i++)
{
a[i] = nijou( i );
}
}
0226デフォルトの名無しさん
2005/10/10(月) 23:35:23int nijou(int n)
{
return n * n;
}
int calc_sum(int a[])
{
int i, sum = 0;
for(i = 0; i < 100; i++)
{
sum += a[i];
}
return sum;
}
float calc_average(int a[])
{
return (float)calc_sum(a) / 100;
}
0227デフォルトの名無しさん
2005/10/10(月) 23:36:29プロトタイプ宣言のない関数 'atoi' の呼び出し(関数 main
atoiって関数宣言してないからエラーだとおもう。
0228デフォルトの名無しさん
2005/10/10(月) 23:47:15つ man atoi
0229初心者
2005/10/10(月) 23:55:13すいません 今後はテンプレートどおりに質問させて頂きます。
>>223>>224>>227
ご指摘有難う御座います。
224さん細かな教授感謝です。
0231デフォルトの名無しさん
2005/10/10(月) 23:58:09なるほどなー
ホインタ習って無いってのをどうしようか迷っていたが、
int a[]で受けるならポインタ使ってないよって誤魔化せるか
0232206
2005/10/11(火) 00:00:05ありがとうございました。
0233デフォルトの名無しさん
2005/10/11(火) 00:05:07ttp://www.tt.rim.or.jp/~rudyard/torii009.html
0235C言語始めたばかり
2005/10/11(火) 00:43:43[2] 問題文(含コード&リンク):
入力(1):文字列データ apple,banana,peach,pineapple,orange
入力(2):挿入、削除の操作を指定する一文字 I,D,P リンクドリストの何番目のデータに対する操作かを示す自然数、挿入(I)の時は英語の果物名を文字列として入力
操作:入力(1)で入力された5個の文字列データを入力された順に配列を使って実現されたリンクドリストに記憶する。
リンクドリストのm番目に文字列を挿入する関数insert、リンクドリストに記憶されているn番目の文字列データを削除する関数delete、
リンクドリストに記憶されているデータをその記憶されている順に出力する関数plistを定義し、
入力(2)の一文字I、D、Pの入力によって、入力で指定されたデータをパラメータとして、
それぞれの関数insert,関数delete,関数plistが呼び出されて実行される。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2005年10月17日13:00まで
[5] その他の制限: 特に指示はありませんでした。
自分でもC言語の本とか見て調べたのですが、理解できなかったので、どうかお願いします。
0236デフォルトの名無しさん
2005/10/11(火) 00:53:060237デフォルトの名無しさん
2005/10/11(火) 00:56:21→あきらめる
→人にたよる(ま、嫌われんようにな)
→別の本なりサイトなりで調べてみる
0238デフォルトの名無しさん
2005/10/11(火) 01:02:590239デフォルトの名無しさん
2005/10/11(火) 01:04:470240デフォルトの名無しさん
2005/10/11(火) 01:29:21リンクドリストって聞き慣れないが、要はただの単方向リストか?
大量にサンプルコード有るんだからそれみて理解しろ
無理なら諦めろ
0241デフォルトの名無しさん
2005/10/11(火) 01:41:150242デフォルトの名無しさん
2005/10/11(火) 01:44:57[1] 授業単元:アルゴリズム入門
[2] 問題文:まず、符号化したい文字列を入力する。それぞれの文字につい
て出現頻度を表示し、
次にハフマン符号の考え方を用いて、各文字に0と1の符号を割り当てよ。
例 aaaabbbccdを入力。出力結果→出現頻度 a→4回 b→3回 c→2回 d→1回
符号化した結果はa→0 b→11 c→101 d→100
[3] 環境
[3.1] OS: Windowsxp home
[3.2] c++bulider 5.5
[3.3] 言語:Cのみ
[4] 期限: 今週水曜まで
[5] 学校の授業でcに触れたくらいで、あまりまだプログラミングというものを理解できていません・・・。わかる方がいらっしゃいましたらよろしくお願いします<(_ _)>
0243デフォルトの名無しさん
2005/10/11(火) 01:54:09例えば、入力が3だとすると出力は以下のようになる。
******
C
0244デフォルトの名無しさん
2005/10/11(火) 01:55:140245デフォルトの名無しさん
2005/10/11(火) 03:20:10アマゾンで頼んでも水曜には間に合わんと思うがなぁ
0246デフォルトの名無しさん
2005/10/11(火) 03:22:230247245
2005/10/11(火) 03:44:30>error("使用法は本文を参照してください");
なんて書いてあるが、コメントもいっぱい付いてるし、問題なさげだ
0248デフォルトの名無しさん
2005/10/11(火) 04:05:510249デフォルトの名無しさん
2005/10/11(火) 04:26:47ご指導お願いします。UNIXです? シグインとかいうソフトで起動させてます
・アルファベットがどのような数値で表されているか表示するプログラムを作りなさい
・乱数を発生する関数rand()を使って0〜99の乱数を50個作りなさい
またその50個の乱数の最大値と最小値を見つけるプログラム作りなさい
・switch〜case文を使って、入力された文字について
大文字、小文字、数字、記号などの種類を表示するプログラムを作りなさい
・入力された文字が
大文字なら小文字に、小文字なら大文字に変換し、その他ならそのまま出力するプログラムを
つくりなさい
0250デフォルトの名無しさん
2005/10/11(火) 04:41:22>>1
0251デフォルトの名無しさん
2005/10/11(火) 04:41:270252249
2005/10/11(火) 05:14:03[1] 授業単元: 情報制御工学
[2] 問題文(含コード&リンク):
・アルファベットがどのような数値で表されているか表示するプログラムを作りなさい
・乱数を発生する関数rand()を使って0〜99の乱数を50個作りなさい
またその50個の乱数の最大値と最小値を見つけるプログラム作りなさい
・switch〜case文を使って、入力された文字について
大文字、小文字、数字、記号などの種類を表示するプログラムを作りなさい
・入力された文字が
大文字なら小文字に、小文字なら大文字に変換し、その他ならそのまま出力するプログラムを
つくりなさい
[3] 環境
[3.1] OS: WindowsXP セレロン
[3.2] コンパイラ名とバージョン: gcc (よく分からないですがgccってので起動してます)
[3.3] 言語: C
[4] 期限: 今日の17時までです。
[5] その他の制限: ほとんど初心者です。すみません
0253デフォルトの名無しさん
2005/10/11(火) 05:24:42データファイルの形式とかがわからなかったので適当に.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/971.cpp
0254デフォルトの名無しさん
2005/10/11(火) 05:41:07int main() {
char c;
for (c = 'a'; c <= 'z'; ++c) printf("%2c ", c);
printf("\n");
for (c = 'a'; c <= 'z'; ++c) printf("%02x ", c);
printf("\n");
for (c = 'A'; c <= 'Z'; ++c) printf("%2c ", c);
printf("\n");
for (c = 'A'; c <= 'Z'; ++c) printf("%02x ", c);
printf("\n");
return 0;
}
0255デフォルトの名無しさん
2005/10/11(火) 05:43:43int main() {
int i, tbl[50], min, max;
srand(time(NULL));
for (i = 0; i < 50; ++i)
tbl[i] = (int)(50.0 * rand() / RAND_MAX);
min = max = tbl[0];
for (i = 0; i < 50; ++i) {
if (min > tbl[i]) min = tbl[i];
if (max < tbl[i]) max = tbl[i];
}
printf("min = %d, max = %d\n", min, max);
return 0;
}
0256デフォルトの名無しさん
2005/10/11(火) 05:44:44int main() {
char c;
scanf("%c", &c);
if ('a' <= c && c <= 'z') {
printf("small character\n");
} else if ('A' <= c && c <= 'Z') {
printf("large character\n");
else {
printf("otherwise\n");
}
return 0;
}
(4)
int main() {
char c;
scanf("%c", &c);
if ('a' <= c && c <= 'z') {
printf("%c", c + 'A'-'a');
}
else if ('A' <= c && c <= 'Z') {
printf("%c", c + 'a'-'A');
} else {
printf("%c", c);
}
return 0;
}
0257デフォルトの名無しさん
2005/10/11(火) 06:17:12[2]ある数字の数だけ記号を表示するにはどうすればいいでしょうか?
例えば3なら@@@、5なら@@@@@といったようにです。
[3] 環境
[3.1] Windows2000
[3.2] VC 6.0
[3.3] C++
[4] 今日の朝8時まで
[5] 基礎程度です。
あるプログラムの最後の一部分なんですがこれをどうすればよいかがわかりません。
どなたかよろしくお願いします。
0258デフォルトの名無しさん
2005/10/11(火) 07:00:130259デフォルトの名無しさん
2005/10/11(火) 08:12:250260デフォルトの名無しさん
2005/10/11(火) 11:43:54int main(void);
int main(void)
{
int i;
float rate,kekka;
rate = 113.95 ;
while(i<=50){
kekka=i*rate;
printf("%.2f\n",kekka);
i++;
}
[1] 授業単元:情報基礎
[2] 問題文(含コード&リンク): forループを使って25ドル〜50ドルまでの円への換算表を作りなさい
為替るーとは113.95円とする
これと同じことをwhileループを使って書け
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 本日14時
[5] 上のプログラムを作ったのですがうまく起動しません
$ gcc j3.c
j3.c: In function `main':
j3.c:20: error: syntax error at end of input
と表示されます、具体的にどこを直せばよいのでしょうか?
0261デフォルトの名無しさん
2005/10/11(火) 11:46:02int main(void); ←不要
あと中括弧の閉じが一個足りない
0262>>260
2005/10/11(火) 11:47:10{
int i;
float rate,kekka;
rate = 113.95 ;
while(i<=50){
kekka=i*rate;
printf("%.2f\n",kekka);
i++;
}
}
0263デフォルトの名無しさん
2005/10/11(火) 11:50:10ありがとうございます。ソースを読んだんですが理解でいません(><)
自分で書いたものがあるんですがみてもらえますか??
0264260
2005/10/11(火) 11:50:53何故int main が余計なのですか?簡単な理由だったら教えて欲しいです
0265デフォルトの名無しさん
2005/10/11(火) 11:52:00main関数は特別で、プロトタイプ宣言が必要ないということになってるだけ。
0266260
2005/10/11(火) 11:55:192848.75
2962.70
3076.65
3190.60
3304.55
3418.50
3532.45
3646.40
3760.35
3874.30
3988.25
4102.20
4216.15
4330.10
4444.05
4558.00
4671.95
4785.90
4899.85
5013.80
5127.75
5241.70
5355.65
5469.60
5583.55
5697.50
結果がとなり
0267260
2005/10/11(火) 11:56:122962.70
3076.65
3190.60
3304.55
3418.50
3532.45
3646.40
3760.35
3874.30
3988.25
4102.20
4216.15
4330.10
4444.05
FORだと
4558.00
4671.95
4785.90
4899.85
5013.80
5127.75
5241.70
5355.65
5469.60
5583.55
5697.50
と、結果に違いが生じてしまうのですが、何故でしょうか?
0268260
2005/10/11(火) 11:56:54#include <stdio.h>
int main(void)
{
int i;
float rate,kekka;
rate = 113.95 ;
for(i=25;i <=50; i++){
kekka=i*rate;
printf("%.2f\n",kekka);
}
}
0269デフォルトの名無しさん
2005/10/11(火) 11:57:13よく見たら i 初期化してねぇじゃん。
0272デフォルトの名無しさん
2005/10/11(火) 12:09:00iの初期値は25だろ?どこでその数値を入れてる?
0273デフォルトの名無しさん
2005/10/11(火) 12:12:45↓
int i = 25;
にしろってことだよ。
0274デフォルトの名無しさん
2005/10/11(火) 12:35:12http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/972.txt
whileのループがうまくまわりません。エラーはないです。みてください。無理やりみじかくしたのでかなりへんですが・・おねがいします。
0276デフォルトの名無しさん
2005/10/11(火) 15:01:130277249
2005/10/11(火) 17:08:362〜3のプログラムが上手く走りません、エラーは以下の通りです
何がいけないのでしょうか?
gcc j7.c
j7.c:5: error: syntax error before '{' token
j7.c:7: error: syntax error before string constant
j7.c:7: warning: conflicting types for built-in function `scanf
j7.c:7: warning: data definition has no type or storage class
$ gcc j7.c
j7.c:5: error: syntax error before '{' token
j7.c:7: error: syntax error before string constant
j7.c:7: warning: conflicting types for built-in function `scanf
j7.c:7: warning: data definition has no type or storage class
$ gcc j8.c
j8.c:4: error: syntax error before '{' token
j8.c:6: error: syntax error before string constant
j8.c:6: warning: conflicting types for built-in fun
j8.c:6: warning: data definition has no type or sto
j8.c:16:2: warning: no newline at end of file
0278249
2005/10/11(火) 17:10:49こう書きました
(4)
#include<stdio.h>
int main(void);
{
char c;
scanf("%c", &c);
if ('a' <= c && c <= 'z') {
printf("%c", c + 'A'-'a');
}
else if ('A' <= c && c <= 'Z') {
printf("%c", c + 'a'-'A');
} else {
printf("%c", c);
}
return (0);
}
0279249
2005/10/11(火) 17:12:03int main(void);
{
char c;
scanf("%c", &c);
if ('a' <= c && c <= 'z') {
printf("small character\n");
} else if ('A' <= c && c <= 'Z') {
printf("large character\n");
else {
printf("otherwise\n");
}
return (0);
}
0280249
2005/10/11(火) 17:13:03(2)
#include<stdio.h>
int main(void)
{
int i, tbl[50], min, max;
srand(time(NULL));
for (i = 0; i < 50; ++i)
tbl[i] = (int)(50.0 * rand() / RAND_MAX);
min = max = tbl[0];
for (i = 0; i < 50; ++i) {
if (min > tbl[i]) min = tbl[i];
if (max < tbl[i]) max = tbl[i];
}
printf("min = %d, max = %d\n", min, max);
return (0);
}
0281デフォルトの名無しさん
2005/10/11(火) 17:22:460282249
2005/10/11(火) 17:26:15(2)
$ gcc j6.c
j6.c: In function `main':
j6.c:10: error: `RAND_MAX' undeclared (first use in
j6.c:10: error: (Each undeclared identifier is repo
j6.c:10: error: for each function it appears in.)
(3)
$ gcc j7.c
j7.c: In function `main':
j7.c:12: error: syntax error before "else"
(4)
$ gcc j7.c
j7.c: In function `main':
j7.c:12: error: syntax error before "else"
0283デフォルトの名無しさん
2005/10/11(火) 17:57:050284デフォルトの名無しさん
2005/10/11(火) 18:18:03スレの範疇なのかねぇ
0285249
2005/10/11(火) 18:20:09ケアレスミスなのですね、じっくり観察して見ます
ありがとうございました。
0286デフォルトの名無しさん
2005/10/11(火) 19:52:53[2] 環境
[2.1] OS: Linux
[2.2] コンパイラバージョン: gcc
[2.3] 言語: C
[3] 期限: 木曜13時
[4] 問題: ビットごとのXOR演算子を用いて、文字列を暗号化するプログラムを作成し、実行しなさい。ただし、プログラムは以下の条件を満たすものとする。
条件1:対象とする文字列は80文字以下とし、アルファベット小文字、スペース、ピリオド、コンマからなる。
条件2;暗号化は、対象文字列を逆順にするとともに、各文字と0から9までの数字(キーナンバーとして打ち込んだもの)とのXORをとって完了する。ただし、スペース、ピリオド、コンマについてはXOR演算の対象としないこと。
条件3;暗号化、復号化の処理は、それぞれ少なくとも一個ずつ関数を定義し、実行させること。
<仕様>1.ファイルoriginal.dat(ASCII型式)に保存されている文字列を暗号化対象として読み込む。original.datが存在しないときは、最初に対象文字列をそのファイルに書き込ませること。
2.上記条件2で示した方法によって、暗号化する。そして、キーナンバーと暗号化文字列をファイルcoded_wds.dat(ASCII型式)に書き込む。
3.復号化の際は、coded_wds.datを読み込んで実行すること。まず、キーナンバーを打ち込ませる。誤ったキーナンバーを3回連続して打ち込んだ場合、処理を終了させること。正しいキーナンバーが打ち込まれた場合、復号化してその結果を表示させること。
以上が問題なのです、どうかお願いします(iДi)
0287デフォルトの名無しさん
2005/10/11(火) 20:11:20無理に短くしないで全部上げてくれたほうがよかったな.手元でコンパイルが通らん.
ま,Search 関連だけ見た.アルゴリズム自体は間違ってないはず.
「whileのループがまわらない」ってのはよくわからんが,予想される不具合は
日本語の文字列を char にぶち込んだときに,その値が範囲外になってること.
実際こっちの環境で試したら key[k] が負の値を取ってた.
もしそちらで入力を全部ローマ字にしてまともに動けばこれが原因と思う.
skip[x] を全部 skip[(unsigned char)x] に置き換えればとりあえず動くけど,
検索が「日本語の文字列単位で」まともに動く保証は全く無い.
0288287
2005/10/11(火) 21:12:36http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/973.cpp
skip[(unsigned char)x] はあまりに場当たり的っぽいので wchar_t で書いてみた.
アルゴリズムは >>274 のものを使ってるので読めると思う.
# C/C++ で日本語文字列をシームレスに扱える時代は来ないもんかねえ
0289デフォルトの名無しさん
2005/10/11(火) 21:53:52そこまでいくと、std::mapを使いたくなるよ
0290デフォルトの名無しさん
2005/10/11(火) 22:02:40[1] 授業単元:アルゴリズム入門
[2] 問題文(含コード&リンク):下記のプログラムは文字列を入力し、
連続している文字があった場合連続数に直し、結果を表示するプログラムである。
例、abcdを入力→abcdを出力
例2、aabbを入力→a2b2を出力
このプログラムの逆の働きをするプログラムを上記プログラムを参考にし作成せよ。
[3] 環境
[3.1] OS: Windows2000
[3.2] コンパイラ名とバージョン: Borland C++builder5.5
[3.3] 言語: C
[4] 期限:明日17時まで
[5] その他の制限:参考にするプログラムにわからないことが多く、逆のプログラムの作成方法もよくわからないです。明日までと急ですみませんがよろしくお願いします。
0291290
2005/10/11(火) 22:07:47while (fgets(bun, 256,stdin) != NULLや if (i&&bun[i-1]==bun[i])の意味がよくわからないです。
#include <stdio.h>
#include <conio.h>
int main (void) {
char bun[256];
int i,n;
printf("文字を入力(256文字まで): ");
for (i=0;bun[i]!='\0';i++) {
while (fgets(bun, 256,stdin) != NULL){
break;
}
printf("結果:");
for (n=i=0;bun[i]!=NULL;i++){
if (i&&bun[i-1]==bun[i]){
n++;
}
else {
if(n!=NULL){
printf("%d",n+1);
}
if(!bun[i]) {
break;
}
n = 0;
putchar(bun[i]);
}
}
}
getch();
return 0;
}
0292デフォルトの名無しさん
2005/10/11(火) 22:11:29while (fgets(bun, 256,stdin) != NULL
バッファ(256バイト)にstdinから1行読み込む。読み込めなければ、ループ終了。
if (i&&bun[i-1]==bun[i])
iが0以外(つまり最初の文字でなでなく)、かつ、今の文字が直前の文字といっしょならば・・・
0293287
2005/10/11(火) 22:44:54まあ基本的に投稿者のプログラムを残してますので.
細かな話をすると,std::map は普通は赤黒木だから要素の参照は
配列参照よりもちょっとだけだけ遅くなります.でも検索が必要となる場面って
「(すごく長い文字列から普通の長さの文字列を探す)×たくさん」が多いから,
参照コストは計算量に響いちゃう,という理由もあります.
0294C言語始めたばかり
2005/10/11(火) 22:54:18この課題の解答もお願いします。
0295デフォルトの名無しさん
2005/10/11(火) 23:00:050296デフォルトの名無しさん
2005/10/11(火) 23:25:47http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/974.txt
coded_wds.datが存在したら復号化してcoded_wds.datを削除します。
0297デフォルトの名無しさん
2005/10/11(火) 23:46:50[2] x^2 * tan(x) = A をニュートン法を使って解く
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語: C言語
[4] 期限: 本日中が望ましいが明日の朝まで(明日の授業で提出)
[5] その他の制限: なし
ずっと考えていましたが解りませんでした。
時間がないですが、よろしくお願いします。
0298290
2005/10/12(水) 00:06:02ご返答ありがとうございます。おかげさまで
この条件文の意味がわかりました。
只今、プログラムに取り組んでますが上手くいきません orz
教えてくださる方がいればよろしくお願いします。
0299デフォルトの名無しさん
2005/10/12(水) 00:10:41こんな汚い条件式書くような奴に習いたくないな
0300デフォルトの名無しさん
2005/10/12(水) 00:32:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/975.txt
0302デフォルトの名無しさん
2005/10/12(水) 00:49:57もう寝るので数学っぽいヒントだけ
f(x)=x^2*tan(x)-A だから f'(x)=2*x*tan(x)+x*x/(cos(x)*cos(x))
適当な初期値を x として、
x ← x - f(x)/f'(x)
をひたすら計算。毎回 x の変動量を見て、十分小さくなるまでとかの判定を。
0303290
2005/10/12(水) 01:08:41お答えありがとうございました。自分のほうでもなんとかできましたが、
こちらのプログラムのほうがすっきりしてて大変参考になりました。
ありがとうございますm(_ _"m)
0304デフォルトの名無しさん
2005/10/12(水) 01:14:32クラスの他の人も同じ課題をしてるわけだから
C言語は始めたばかりってのは何の言い訳にもならん罠
君が嫌われてる理由
1.いちいちageる
2.名前欄の初心者って主張がウザイ
3.そもそもマルチポスト
0305286
2005/10/12(水) 01:23:05本当にありがとうつД`)
0306デフォルトの名無しさん
2005/10/12(水) 03:19:49> printf("文字を入力(256文字まで): ");
こんなの書くような奴に習いたくないなw
0307デフォルトの名無しさん
2005/10/12(水) 03:25:04> char bun[256];
> for (i=0;bun[i]!='\0';i++) {
初期化なしかよ
> while (fgets(bun, 256,stdin) != NULL){
256文字かよ
> for (n=i=0;bun[i]!=NULL;i++){
char と NULL 比較かよ
んな奴に習いたくないなw
0308デフォルトの名無しさん
2005/10/12(水) 03:25:49俺のヘボいプログラムやるから今度はテンプレ使えよ
#include <stdio.h>
main(){
int i,j;
printf("数字を入れてみなさい:");
scanf("%d",&i);
if(i<0){
printf("バカ!そんな数字入れんな!\n");
printf("数字を入れてみなさい:");
scanf("%d",&i);
}
for(j=0;j<=i+2;j++)
printf("*");
printf("\n");
}
0309デフォルトの名無しさん
2005/10/12(水) 03:37:15どうせ書くならもっと萌えるセリフかけよな
0310デフォルトの名無しさん
2005/10/12(水) 05:36:09二度目のおいたはスルーするのな
0311デフォルトの名無しさん
2005/10/12(水) 05:45:41http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/976.txt
cはほぼ履修しました。簡単ぽいけど何かうまくいきません何故だろうorz
0312デフォルトの名無しさん
2005/10/12(水) 06:07:02�@p �Ap �Bb �Ca �Dk �Ek
あと>>1をよく読め。
0313311
2005/10/12(水) 06:16:43出力結果がこうなります、AとBが何か違くありません?
A:
0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000
0.000 +NAN 0.000 0.000
B:
0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000
0.000 +NAN 0.000 0.000
U:
1.000 0.000 0.000
0.000 1.000 0.000
0.000 0.000 1.000
0314デフォルトの名無しさん
2005/10/12(水) 06:37:32300万行くらい(サイズは150MBくらい)あるテキストファイルの
\n\n(改行2つ)を\t(タブ)に置換するだけのCのプログラムお願いします
コンパイラはBCC5.5で期限は特にありません
0315デフォルトの名無しさん
2005/10/12(水) 10:19:34[2] 問題文(含コード&リンク): ヒストグラムを求めよう
対象画像
横20×縦15の乱数を用いた画像(値の範囲は0〜9)
画像データを乱数で設定し、その画像のヒストグラムを求め、
求めたヒストグラムを '*' 文字で表示する。
0 : 30 ******************************
1 : 28 ****************************
2 : 32 ********************************
.......
[3] 環境
[3.1] OS: soralis
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2005/10/12 まで
[5] その他の制限: 特になし
0316デフォルトの名無しさん
2005/10/12(水) 10:37:24[2] 問題文(含コード&リンク):
次に記すcellの構造の定義と変数の宣言の下で、以下の問題に答えよ
struct cell {int data;struct cell *next};
struct cell *p, *q, *r
問題1 次に示す状態で計算が始まるものとする
data next
p□→□ □
50 null
如何に示す各プログラムコードを順に実行したとき、変数p,q,rとそれらが指す
セル内容の各コードに図示せよ。
1 r=(struct cell *)malloc(sizeof(struct cell));
2 p=q->next;
3 p->next=r;
4 r->data= 100;
5 r->next=q;
[3] 環境
[3.1] OS: 手書きの問題です
[3.2] コンパイラ名とバージョン: 無し
[3.3] 言語: C
[4] 期限: 2005年10月13日
[5] その他の制限:
5問ありますがお願いします
0317デフォルトの名無しさん
2005/10/12(水) 10:40:01#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void make_image(int image[15][20]){
int y,x;
for(y=0;y<15;++y)for(x=0;x<20;++x)image[y][x] = rand()%10;
}
int main(int argc,char**argv){
int image[15][20],count[10]={0},i,j;
srand(time(NULL));
make_image(image);
for(i=0;i<15;++i)for(j=0;j<20;++j)++count[image[i][j]];
for(i=0;i<10;++i){
printf("%d : %2d ",i,count[i]);
for(j=0;j<count[i];++j)
putchar('*');
putchar('\n');
}
return 0;
}
0318電大さんが通る
2005/10/12(水) 11:59:49友達にきいたら、こんなんもわからんカスは死ねと言われました。
こんなカスにお力を…
----------------------------------------------------------------------
自給(円/時間)、働いた時間(時間)、交通費(片道、円)を入力してアルバイト料
を計算し、表示する。扱う数(変数)は整数とする。
----------------------------------------------------------------------
0319デフォルトの名無しさん
2005/10/12(水) 12:19:39>>1も読めないカスは氏ね。
0320デフォルトの名無しさん
2005/10/12(水) 13:06:39特に図示すべき対象物の指定がないので、
単純に変数p, q, r と問題文の該当コード部分を写した後に
「図示すべき対象物の指定なし」と書いて出せば大丈夫でしょう。簡単!!
0322デフォルトの名無しさん
2005/10/12(水) 14:41:26問題文が正しいかもう一度チェックしてみ(特に2)
それと、初期状態の図は画像でくれた方がわかり易いかも
0323デフォルトの名無しさん
2005/10/12(水) 16:34:15ありがとうございますm(ーー)mいまからやってみます。
0324デフォルトの名無しさん
2005/10/12(水) 18:22:26main()
{
int n, i, s;
printf("n を入力して下さい : ")
scanf("%d", &n)";
s=0;
for (i=1; i<=n; i++) {
s +=i;
}
printf("n=%f Sum=%d/n",n,s);
}
1 この例題を変更して1+1/2+1/3+........+1/n の結果を表示するプログラムを作成せよ
2 nの値を読み込んで、n!を計算し表示するプログラムを作成せよ
これ課題でてるんだけど解けない。。。orz
頭いい先輩方お願いします。よろしくお願いします。
0325デフォルトの名無しさん
2005/10/12(水) 18:33:381.
#include <stdio.h>
int main()
{
double s;
int i, n;
printf("n を入力してください : ");
scanf("%d", &n);
s = 0.0;
for (i=1; i<=n; i++) {
s += 1.0/i;
}
printf("n=%d sum=%g\n", n, s);
return 0;
}
2.
#include <stdio.h>
int main()
{
int i, s, n;
printf("n を入力してください : ");
scanf("%d", &n);
s = 1;
for (i=1; i<=n; i++) {
s *= i;
}
printf("n=%d n!=%d\n", n, s);
return 0;
}
0326デフォルトの名無しさん
2005/10/12(水) 19:57:59なんどもすいません。。打ち直していろいろやったんですが、検索された文字列が表示されません。
検索されてないのか??エラーはないです。。警告がありますファイル処理で・・cwcharのincludeを検索したのですがよくわかりません。
wchar_tの型ファイル処理などがこれでいいのかわかりません。何度もすいません。
mainのcpp==http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/979.txt
mainのh==http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/983.txt
searchのcpp==http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/981.txt
公共データ==http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/982.txt
0327デフォルトの名無しさん
2005/10/12(水) 20:05:33教えてください。お願いします
[1] 授業単元: ネットワークとプログラミング
[2] 問題文:ホスト名を元にIPアドレス、サブネットマスク、GW、優先DNS、代替DNSを設定するプログラムを作りなさい。
なお、アドレスの設定は、ファイル(CVS)から読み設定するものとする。
ファイル(CVS)の中身以下の元のする。
ホスト名IPアドレスサブネットマスクGW優先DNS代替DNS
host110.192.1.5255.255.255.010.192.1.25410.192.30.110.192.40.12
host210.192.1.6255.255.255.010.192.1.25410.192.30.110.192.40.12
host310.192.1.10255.255.255.010.192.1.25410.192.30.110.192.40.12
host410.192.2.10255.255.255.010.192.2.25410.192.30.110.192.40.12
・
・
・
・
host10010.192.100.5255.255.255.010.192.100.25410.192.30.110.192.40.12
なお、ホスト名がファイルのリストに無い場合エラーで警告させるようにする
また、正常に設定されたら、再起動させるようにせよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: Cまたは、C++
[4] 期限: [2005年10月15日00:00まで]
[5] その他の制限: 特になし。
よろしくお願いします。
0328デフォルトの名無しさん
2005/10/12(水) 20:18:42ホスト名とかがつながって表示されているのでスペースであけました。
ファイルは、以下のようになっています。
ホスト名 IPアドレス サブネットマスク GW 優先DNS 代替DNS
host1 10.192.1.5 255.255.255.0 10.192.1.254 10.192.30.1 10.192.40.12
host2 10.192.1.6 255.255.255.0 10.192.1.254 10.192.30.1 10.192.40.12
host3 10.192.1.10 255.255.255.0 10.192.1.254 10.192.30.1 10.192.40.12
host4 10.192.2.10 255.255.255.0 10.192.2.254 10.192.30.1 10.192.40.12
・
・
・
host100 10.192.100.5 255.255.255.0 10.192.100.254 10.192.30.1 10.192.40.12
なんどもすみません。よろしくお願いします。
0329デフォルトの名無しさん
2005/10/12(水) 22:47:30[2] 問題文:
ある人工衛星が地球を1周する周期は T=2.0π((R+h)^3/(gR^2))^0.5 である
この人工衛星の地球からの高さを100kmからはじめ100kmきざみで
1000kmまで変化させた時のTの値を求めよ。
Tは関数を用いて計算せよ
また
T:周期(秒)
g:重力加速度(9.81m/s^2)
R:地球の半径(6.37*10^6メートル)
h:地表から人工衛星までの高さ(m)
とする
[3] 環境
[3.1] OS: Windows XP
[3.3] 言語: C
[4] 期限: 2005年10月14日まで
[5] その他の制限:よろしくお願いします
0330デフォルトの名無しさん
2005/10/12(水) 23:01:14そのまんま。
#include <stdio.h>
#include <math.h>
#define PI 3.1415926
#define R 6.37e6
#define G 9.81
double T(double h)
{
retrun 2.0*PI*pow((pow(R + h,2.0) / (G*pow(R,2.0))),0.5);
}
int main(void)
{
int i;
double t;
for(i = 1;i <= 10;i++){
t = T(i * 100.0);
printf("%2d:T=%lf\n",i,t);
}
return 0;
}
0331デフォルトの名無しさん
2005/10/12(水) 23:21:44#include<stdio.h>
#include<math.h>
#define PAI 3.14
#define G 9.81
#define R 6.37E6
/*地表から人工衛星までの高さ(km)*/
#define H 100
double CULt(int h)
{
return 2.0*PAI*pow((pow(R + h,3.0) / (G*pow(R,2.0))),0.5);
}
int main(void)
{
int h=1000*H;
int i;
for(i=h;i<=1000000;i=i+100000){
printf("h=%4d(km): T=%f(sec)\n",i/1000,CULt(i));
}
return 0;
}
0332デフォルトの名無しさん
2005/10/12(水) 23:32:18ありがとうございます。
0333デフォルトの名無しさん
2005/10/13(木) 00:07:03ホスト名を入力・選択すると、そのPCのネットワーク設定が変更、でいいのかな?
でも正直こんな課題、家とかでも実験しにくいし、出題者は何を考えているんだ...
そして>>333ゲッ
0334デフォルトの名無しさん
2005/10/13(木) 00:21:42[1] 授業単元:ソフトウェア基礎
[2] 問題文(含コード&リンク): テキストファイルを読み込んで、文字ごとに登場頻度を%表示で表すプログラムを作成せよ。
例えば、aaaabbcccdと書いてあるテキストファイルを読み込むとする。
出力結果は読み込まれたファイル内容→aaaabbcccdと各文字の割合→a=40% b=20% c=30% d=10% と出力されるようにせよ。
[3] 環境
[3.1] OS: Windowsxp home
[3.2] コンパイラ名とバージョン:家ではbcpad、学校ではC++ビルダー6.0
[3.3] 言語: Cのみ
[4] 期限:明日中
[5] その他の制限: ファイルポインタというのをこの前の授業で習ったので、それを使用します。
考えてたらわからないまま期限になってしまいました。どうぞよろしくお願いします。
0335デフォルトの名無しさん
2005/10/13(木) 00:28:03含まれてる文字はアルファベット小文字のみか?
0336デフォルトの名無しさん
2005/10/13(木) 00:28:41#include <stdio.h>
#include <ctype.h>
int main(void)
{
int c, total = 0, count[256] = {0};
while ((c = getchar()) != EOF) {
count[c]++;
total++;
}
for (c = 0; c < 256; i++) {
if (count[i] && isprint(c)) {
printf("%c = %f%%\n", c, count[c] / (double) total);
}
return 0;
}
0337デフォルトの名無しさん
2005/10/13(木) 00:39:57ファイルポインタを使用するってのが曖昧で
どうしたいかわからんから、推測気味に書いてみた。
#include<stdio.h>
int main(){
int counts[256]={0},count=0,ch,i;
FILE* fp = fopen("a.txt","r");
if(!fp){
puts("Error: ファイルが存在しません。");
return 0;
}
while((ch=getc(fp))!=EOF)++count,++counts[ch];
for(i=0;i<256;++i)
if(counts[i])printf("%c=%g%%\n",i,counts[i]*100.0/count);
return 0;
}
0339デフォルトの名無しさん
2005/10/13(木) 00:51:420340334
2005/10/13(木) 00:53:21素早い返信大変感謝です。問題には書いてませんが、読み込むファイルは自分で指定できるようにして
と言われました。書いていなくてすみません(*_ _)
0341334
2005/10/13(木) 00:56:25皆さんのを参考にもう少し頑張ってみます
0342デフォルトの名無しさん
2005/10/13(木) 00:59:30暇なんで貼り絵した。脳内gccすら通してないからミスってたら修正よろ
mainの仮引数間違ってる可能性大
#include<stdio.h>
#include <ctype.h>
int main(int argc, char *argv){
int c, total = 0, count[256] = {0};
if (argc <= 1) {
puts("Error: ファイル名を指定してください");
return 1;
}
FILE* fp = fopen(argv[1], "r");
if(!fp){
puts("Error: ファイルが存在しません。");
return 1;
}
while ((c = getc(fp)) != EOF) {
count[c]++;
total++;
}
for (c = 0; c < 256; i++) {
if (count[i] && isprint(c)) {
printf("%c = %f%%\n", c, count[c] / (double) total);
}
return 0;
}
0343デフォルトの名無しさん
2005/10/13(木) 01:03:16return 0;の前に}が1個不足してる。
って、漏れも脳内コンパイラだけど。
0344デフォルトの名無しさん
2005/10/13(木) 01:06:48やっぱり久しぶりに触るとダメだな
Pascalなんて時代遅れな言語やらせる大学がUzeeeeeeeeeeeeeeee('A`)
0345デフォルトの名無しさん
2005/10/13(木) 01:17:42Javaあたりがおすすめ。(C知ってるとC++を勉強するのに足かせになる)
0346デフォルトの名無しさん
2005/10/13(木) 01:19:49無論、大学の方は課題だけ仕上げて独学でやってるよ
今はオブジェクト指向とC++学び中
Javaやろうかとは思ったんだけど、どうもあの言語好かないんだよな
言語仕様云々じゃなくてJREが遅いってのが原因だけど
0347デフォルトの名無しさん
2005/10/13(木) 01:57:080348デフォルトの名無しさん
2005/10/13(木) 02:25:03[2] 問題文 (以下にすべて書きました。)
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/984.txt
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc か bcc
[3.3] 言語: C
[4] 期限:2005/10/14まで
[5] その他の制限:配列はまだです。For文までやりました。
0349デフォルトの名無しさん
2005/10/13(木) 02:57:30器A 茶 透 緑
器B 茶 透 緑
器C 茶 透 緑
となっていて、
ゴール状態が
器A 茶 茶 茶
器B 透 透 透
器C 緑 緑 緑
となればよいのか?
移動ってのは例えば、
移動前
器A 茶 透 緑
器B 茶 透 緑
器C 茶 透 緑
移動後
器A 茶 茶 透 緑
器B 茶 透 緑
器C 透 緑
ということか?
0350348
2005/10/13(木) 03:17:03えと
器A:茶1 緑2 透明3
器B:茶4 緑5 透明6
器C:茶7 緑8 透明9
だったら
器A:茶のみ1+4+7
器B:緑のみ2+5+8
器C:透明のみ3+6+9
と集めて
最小値は4+7+2+8+3+6の30ということになります
出力 BGC 30 (茶緑透明)
なので
器A 茶 透 緑
器B 茶 透 緑
器C 茶 透 緑
となっていて、
ゴール状態が
器A 茶 茶 茶
器B 透 透 透
器C 緑 緑 緑
のように1つの容器を1色だけにするための最小移動数を求めればいいそうです。
0351デフォルトの名無しさん
2005/10/13(木) 03:22:010352デフォルトの名無しさん
2005/10/13(木) 03:41:31つまり、r1〜r6の最小の物を見つけて(同値ならr1の方を優先で)
コードを6分岐できればいいということだな?
0353デフォルトの名無しさん
2005/10/13(木) 03:42:00num = r1; name = 1; こう変更
各if内を同様に変更 -> num = r2; name = 2;
printfはifから消す
最後に以下
switch (name) {
1: printf("BCG %d", num); break;
2: printf("BGC %d", num); break;
略
6: printf("GCB %d", num); break;
}
多分この変更でいけるんじゃまいか?
switchをまだやってないならif (name == 1)とかの羅列に変えてくれ
つーか配列もポインタも使えないからすっきりした実装ができないな
0354デフォルトの名無しさん
2005/10/13(木) 03:49:51ところで、switch習った?
0355デフォルトの名無しさん
2005/10/13(木) 03:52:10ttp://online-judge.uva.es/p/v1/102.html
問題の概要はこれ(ただし英語)だろ?これならやったことあるからソース探してみる。似た実装だった気がするが。
0356デフォルトの名無しさん
2005/10/13(木) 03:58:11while(cin >> b1 >> g1 >> c1 >> b2 >> g2 >> c2 >> b3 >> g3 >> c3) {
bb1 = b2 + b3; gg1 = g2 + g3; cc1 = c2 + c3;
bb2 = b1 + b3; gg2 = g1 + g3; cc2 = c1 + c3;
bb3 = b1 + b2; gg3 = g1 + g2; cc3 = c1 + c2;
// BCG
min = bb1 + cc2 + gg3; color = "BCG";
// BGC
if((sum = bb1 + gg2 + cc3) < min) {
min = sum; color = "BGC";
}
// CBG
if((sum = cc1 + bb2 + gg3) < min) {
min = sum; color = "CBG";
}
// CGB
if((sum = cc1 + gg2 + bb3) < min) {
min = sum; color = "CGB";
}
// GBC
if((sum = gg1 + bb2 + cc3) < min) {
min = sum; color = "GBC";
}
// GCB
if((sum = gg1 + cc2 + bb3) < min) {
min = sum; color = "GCB";
}
cout << color << " " << min << endl;
}
C++だが、根幹が分かれば大丈夫だと思う。重要なのは出力を1カ所で行うことだな。
0357デフォルトの名無しさん
2005/10/13(木) 04:09:10配列まだって言ってるから文字列無理じゃね?
0358348
2005/10/13(木) 04:17:46そうです。
アルファベット順(若しくは茶色>透明>緑色)だそうです。
>>353-354
switchは分かります。でも使わなきゃムリなんですかね・・・。
IF文で出来るとかあったけど、switch使ってもいいよってことなのか・・。
>>356
c++は触ったことも無いかも・・・でも同じような感じですね。
もすこし見てみます。
0359デフォルトの名無しさん
2005/10/13(木) 04:20:52配列をやっていない=>ポインタなんでなおのことやってない
colorをどう宣言すれば良いかもわかんないと思うぞ
Cを標準装備しているならchar *color;でいいが
無理やりするなら
char color1,color2,color3;
color1='B';color2='C';color3='G';
printf("%c%c%c",color1,color2,color3);
かなorz
0360287
2005/10/13(木) 06:16:31警告とか出たなら書いてくれ.
で……申し訳ないが g++,bcc でも動作するコードは書けなかった.どうやら locale 周りで
死んでるみたい.もしファイル読み込みが fscanf(fp, "%d,%l[^,],%l[^,],%d", 略): で動作するならラッキー.
動かなかったら
1. wchar_t は諦めて素敵な日本語ライブラリを探す.
2. 日本語単位になるのを諦めて char でやる.skip[ (unsigned char)x ].
3. wchar_t でやる方法をがんばって調べる.
お勧めは 2. あと誰か日本語処理強い人が居たらお願いします.
0361デフォルトの名無しさん
2005/10/13(木) 07:13:33>>333
>ホスト名を入力・選択すると、そのPCのネットワーク設定が変更、でいいのかな?
>でも正直こんな課題、家とかでも実験しにくいし、出題者は何を考えているんだ...
ホスト名は、入力しません。ホストに設定されている、名前とファイルにある名前を照らし合わせて、一致したら
IPを設定するプログラムです。違う場合、エラー通告。
ホストに設定されている、名前がファイル上にあったら、その行のアドレスをPCに設定するプログラムです。
よろしくお願いします。
0362デフォルトの名無しさん
2005/10/13(木) 07:25:040363デフォルトの名無しさん
2005/10/13(木) 14:32:13[2] 問題文(含コード&リンク):ウェブサーバーの構築。
[3] 環境
[3.1] OS: LINUX
[3.2] gcc
[3.3] C
[4] 期限: 10月15日。
[5] その他の制限: ネットワークに関する基礎とソケットプログラミングを少し。
ポート80や8080や6789を使う代わりに、自分独自のポートを選ぶ。
次の2つのステップを含む。
「ステップA」
メッセージのリクエストをダンプするウェブサーバーを構築。
ブラウザーを使用して、自分のサーバーにつなぎ、メッセージのリクエストを記録する。
「ステップB」
パートAで作ったコードに基づき、ブラウザーからHTTPリクエストをparseし、、
ヘッダーラインによってprecedeされるリクエストファイルを含むHTTPの応答メッセージをつくり、
応答を直接clientに送るウェブサーバーを作るために、関数を1つ加える。
「注意。」ブラウザーとサーバーを同じマシーンでやっているならば、local hostまたは、127.0.0.1を使う。
contentType functionは少なくともHTMLファイルを認識する。
パートA、パートBが終われば、自分のサーバーをテストする。
最初にHTMLファイルをサーバーのdirectoryにおき、サーバーに接続する。
webserver.c とレポートするhtmlファイルを提出する。
ネットワークの授業の最初のレポートです。
宿題に関しては、教授等まったくサポートしてくれないということになっています。
最初のプロジェクトで、まず何をどう始めていいかさえわかりません。
よろしくお願いします。
0364デフォルトの名無しさん
2005/10/13(木) 15:25:40[2] 問題文:文脈自由文法で入力された
「わしのにわのわしのきにわしがとまったので,わしがてっぽうでうったら,
わしもおどろいたが,わしもおどろいた。」
この仮名文字の文章を,
「わしの庭のわしの木に鷲が留まったので,わしが鉄砲で撃ったら,
鷲も驚いたが,わしも驚いた。」
このように漢字変換されるアルゴリズムと,それに基づくプログラムを作成する課題です。
入力形式は,1文全てを入力しての1発変換か,カンマ区切りの入力(課題では4回の入力)で,
正しい日本語に変換するという問題です。
問題にはカンマはない状態でしたので,もしカンマの位置が不適切でしたら,
プログラムできるように変えてください。
カンマで区切る場合は,変換の度に正しい漢字に変換できるようにしてください。
例えば,「わしのにわのわしのきにわしがとまったので」と入力されたら
1回の変換で「わしの庭のわしの木に鷲がとまったので」と変換されるようにしたいです。
それと,「とまった」は「留まった」でいいと思うのですが
もし間違っているようであれば,訂正してください。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語:C++
[4] 期限: [2005年10月14日2:00まで]
[5] その他の制限: 関数,構造体,ポインタの基本的なことは習っていると思います。
変換の際,辞書ファイルが必要になるような気もするので
もし必要であれば,辞書ファイルもアルゴリズムに合わせてください。
*アホなので,コメント多めでお願いします><
サポートやヒントらしいヒントもなく,まったく組めない状態です。
よろしくお願いします。
0365デフォルトの名無しさん
2005/10/13(木) 15:51:57問題がよくわからん.その特定の文章の連続部分文字列の変換だけ対応すればいいのか,
もっと一般的なアルゴリズムがほしいのか,とか.
背景が知りたいので,どんなゼミでどんな状況でこの課題が出されたか詳しくキボン.
0366デフォルトの名無しさん
2005/10/13(木) 16:14:13課題については、strcmp(line, "わしの・・・")
で。
0367デフォルトの名無しさん
2005/10/13(木) 16:21:34[2] 問題文
正整数を入力し、それをローマ数字で表示するプログラムを作りなさい。
例:
3 III
5 V
12 XII
46 XXXXVI
73 LXXIII
111 CXI
378 CCCLXXVIII
521 DXXI
1002 M�U
[3] 環境
[3.1] Windows
[3.3] C言語
[4] 期限: 10月17日(月)
[5] その他の制限: 制限についてはそこまで考慮していただかなくて
かまいませんが、一応今まで習ったのはfor,if,多重ループ、while、配列、
関数です。多少非効率的でも簡単なプログラムだと嬉しいです。
よろしくお願いします。
0368not 287
2005/10/13(木) 17:30:16VS.NET 2003のようだし、こんなモンでいいだろ。>>287氏のmain()の変わりに使ってくれ。
stdinから読んでstdoutから吐くのでリダイレクトしてくれ。検索キーは引数で指定。
void look(wchar_t *key)
{
table(key);
int m, n;
wchar_t s[1024], t[1024], *p;
while (scanf("%d,%l[^,],%l[^,],%d", &m, s, t, &n) == 4)
if (p = Search(s, key))
printf("%d,%ls,%ls,%d\n", m, s, t, n);
}
int wmain(int argc, wchar_t **argv) {
locale::global(locale("japanese"));
if (argc < 2) {
fprintf(stderr, "usage: %s searchkey\n", argv[0]);
return 1;
}
look(argv[1]);
return 0;
}
0369デフォルトの名無しさん
2005/10/13(木) 17:38:59#include<stdio.h>
int main(){
char *M[10]={"","M","MM","MMM","M?","?","?M","?MM","?MMM","M?"};
char *C[10]={"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
char *X[10]={"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
char *I[10]={"","I","II","III","IV","V","VI","VII","VIII","IX"};
unsigned num;
scanf("%u",&num);
printf("%s",M[num%10000/1000]);
printf("%s",C[num%1000/100]);
printf("%s",X[num%100/10]);
printf("%s",I[num%10]);
return 0;
}
0370デフォルトの名無しさん
2005/10/13(木) 17:39:42<<368
ありがとうございます早速がんばってみます。
あっ警告いろいろやってたらきえました(−−;)
0371デフォルトの名無しさん
2005/10/13(木) 18:05:22char szStr[1024 * 64];
DWORD dwAccBytes;
HANDLE hFile = ::CreateFile( csvFile.c_str(), GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
// ファイルポインタを読み込む
if( ReadFile(hFile, szStr, 1024*64, &dwAccBytes, NULL) )
{
::CloseHandle( hFile );
}
szStrに、ファイルの全部の内容がどば〜っとはいってしまってどうしたらいいかわかりません。
szStrを改行ごとにしらべて分解していくしかないのでしょうか?
0372デフォルトの名無しさん
2005/10/13(木) 18:11:31読んだ後にカンマとか改行とかでセパレート
これでわからんようなら >>1 参照
0373デフォルトの名無しさん
2005/10/13(木) 19:08:20stdioを使え。fopen()してfgets()。
カンマで区切るには
ttp://plaza.harmonix.ne.jp/~fakira/turedure/cprog_01.htm
のGetCSV()でも使え。一応ダブルクォートに対応しているようだ。
0374364
2005/10/13(木) 19:18:33有難う御座います。説明下手ですみません。
特定の文章の連続部分文字列の変換だけ対応というよりは、
課題も含んだ一般的なアルゴリズムでお願いします。
課題が出された背景は,ゼミで文脈自由文法について習っていた中で
文脈自由文法を漢字変換する際に,
アルゴリズムとすることが難しい例として
「わし」と「鷲」の変換例が出されて,より日本語らしい文章ということで
課題のような仮名文が出されました。
>>366
有難う御座いました。
最長一致法で認識率が高いのは分かるのですが,
この課題では,2回出てくる「わしもおどろいた。」の部分で
それぞれ違う変換を求められるので,最長一致法では無理かなって思ってました。
私が勝手に最長一致法では無理と判断して書かなかったので
もしできるようなら,最長一致法でお願いします。
0375デフォルトの名無しさん
2005/10/13(木) 19:30:33{
if (strcmp(s, "わしのにわのわしのきにわしがとまったので,わしがてっぽうでうったら,わしもおどろいたが,わしもおどろいた。") == 1)
return "わしの庭のわしの木に鷲が留まったので,わしが鉄砲で撃ったら,鷲も驚いたが,わしも驚いた。";
else
return s;
}
ワードプロセッサの「貴社の記者は汽車で帰社した」なんかはこんな発想で作られている。
何がいいたいかというと、特例を作ってしまえばよいってこと。
(マジメにやるなら、その手のフリーソフトのソース読んでください)
0376デフォルトの名無しさん
2005/10/13(木) 19:36:100377デフォルトの名無しさん
2005/10/13(木) 19:36:20×strcmp(...,...) == 1
○strcmp(...,...) == 0
0378377
2005/10/13(木) 19:37:200379デフォルトの名無しさん
2005/10/13(木) 19:52:05ちょっと感動した。
0380デフォルトの名無しさん
2005/10/13(木) 20:04:190381デフォルトの名無しさん
2005/10/13(木) 20:11:07「こういう論文とかプログラムを参考にしてこんなもん考えてこう実装したらこうなった」
「こういう場合にはうまくいくがこういう場合にはうまくいかない」
とか発表するのがゼミならちょうどいいところだと思うが
0382デフォルトの名無しさん
2005/10/13(木) 20:18:38それをどう報告するかってのを学ばせるためだと思う。
0383デフォルトの名無しさん
2005/10/13(木) 22:25:180384デフォルトの名無しさん
2005/10/13(木) 22:39:24ソートのプログラムで実行できるのですがn=50となってしまいます。
n=100にしたいんですがどこを修正したらいいでしょうか?
お願いします。
0385デフォルトの名無しさん
2005/10/13(木) 22:40:460386デフォルトの名無しさん
2005/10/13(木) 23:00:540387デフォルトの名無しさん
2005/10/14(金) 00:21:52[1] 授業単元: ソートとサーチ
[2] 問題文(含コード&リンク):
�@主な準備
・対象データ配列作成プログラム
その都度指定する個数X(最大100万程度)の整数をランダムに並べた配列を作成、
また、必要に応じ整列済み、逆順整列済みなどのデータを作成。
・処理時間の測定方法の調査
・ソート結果が正しいかどうかチェックするプログラム
�Aサーチプログラム1 与えられた配列から指定した値を検索する。
�Bソートプログラム1 バブルソート、挿入ソートなどのNの2乗オーダのプログラムを1つ以上。
�Cサーチプログラム2 整列済みの配列から指定した値を高速に検索する。
�Dソートプログラム2 クイックソートなどNlogNオーダの高速ソートプログラムを1つ以上。
[3] 環境
[3.1] OS: Unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2005年10月14日07:00まで]
[5] その他の制限: プログラムのソースをお願いします><�A〜�Dはすでに答えてもらっているので合ってるのでしょうか?
�@のデータを作成っていうあたりもよくわかりません。。プログラムのソースと一緒に説明できる方おられました
らお願いします。。
0388364
2005/10/14(金) 00:29:54特例を認めるってことですか。
「貴社の記者は汽車で帰社した。」の例文は知らなかったので、
その辺ももう少し調べてみたいと思います。
>>380〜>>383
みなさんおっしゃるように、
「うまくいかない」ことを学ばせるためかもしれません。
というか、言われて気づきました・・・。
卒論ではなくゼミなので、
それならサポートもらえないのも理解できますし。
特例の件も含めて、検討してみます。
本当にありがとうございました。
0389デフォルトの名無しさん
2005/10/14(金) 00:42:50void make_data(int data[], int size, int type)
{
int i, j, k;
if( type == 0 ) { // ランダム(重複有り)
for( i = 0 ; i < size ; i++ ) data[i] = rand();
} else if( type == 1 ) { // ランダム(重複無し)
make_data(data, size, 2);
for( i = 0 ; i < size ; i++ ) {
j = rand() % size;
k = data[i];
data[i] = data[j];
data[j] = k;
}
} else if( type = 2 ) { // 整列済み(重複無し)
for( i = 0 ; i < size ; i++ ) data[i] = i;
} else if( type = 3 ) { // 逆順整列済み(重複無し)
for( i = 0 ; i < size ; i++ ) data[i] = size - i;
}
}
前(>>187)にこれと同様なのを答えたことあるけど、具体的なソースとして
ここまで作ってあげる必要があるんならもっとキミは勉強が必要。
0390デフォルトの名無しさん
2005/10/14(金) 02:06:59せっかく段階を踏んで課題をだされても、ぜんぜん理解できないよ。
0391デフォルトの名無しさん
2005/10/14(金) 02:20:28>>187に気づいてさえいなかったに1票
0392デフォルトの名無しさん
2005/10/14(金) 05:44:37[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/986.txt
[3] 環境
[3.1] OS:Unix
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 2005年10月17日0:00まで
[5] その他の制限:配列を少しだけやりました
0393デフォルトの名無しさん
2005/10/14(金) 06:06:15#define MAX 1000
int main(void)
{
int i=0, sum=0, ary[MAX];
puts("整数を入力してください。");
while(i < MAX){
printf("NO.%d:", i+1);
scanf("%d", &ary[i]);
sum += ary[i++];
}
if(i > 1)
printf("合計は%dで平均は%.2fです。\n", sum, (double)sum / i );
return (0);
}
0394デフォルトの名無しさん
2005/10/14(金) 06:10:21終了条件を消してどうする
0395デフォルトの名無しさん
2005/10/14(金) 07:39:410396デフォルトの名無しさん
2005/10/14(金) 07:44:200397デフォルトの名無しさん
2005/10/14(金) 08:57:56本当にありがとうございます;;
簡単なプログラムしか作れない初心者で・・・・
授業では一切説明とかなくて・・・「はい、つくって」って感じで・・・助かりました><
自分でも勉強して行きますが、また力不足のとき、ここの方々の力を借りたいと思います;;
0398デフォルトの名無しさん
2005/10/14(金) 14:15:24そんな汚いコードは見るだけで害だから、すぐ忘れた方がいい
#include<stdio.h>
#define MAX 1000
int main(void)
{
int i=0,sum=0;
puts("整数を入力してください。");
for(i=0;i<MAX;i++){
int num;
printf("NO.%d:",i+1);
if(scanf("%d",&num)<1)break;
if(num==9999)break;
sum+=num;
}
if(i){
printf("合計は%dで平均は%.2fです。\n",sum,(double)sum/i);
}
return 0;
}
0399398
2005/10/14(金) 14:18:25入ってしまった
0400デフォルトの名無しさん
2005/10/14(金) 14:54:49[2] 問題文1:入力された数値を大きい順、小さい順に並びかえよ。
入力の終了条件/継続条件は各自決定すること。ただし、実行時に変更できるようにすること。
問題文2:入力された数値を大きい順、小さい順に並びかえよ。
ただし、同じ値には同じ順位を付けて、順位は一つずつ変化する。
問題文3:入力された数値を大きい順、小さい順に並びかえよ。
ただし、同じ値には同じ順位を付けて、順位は個数ずつ変化する。
[3] 環境
[3.1] OS:unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:2005/10/24(月)17時まで
[5] その他の制限:選択ソートを使用。
お願いしますorz
04011-1
2005/10/14(金) 16:35:54#include<stdlib.h>
#define MAX 10000
void selsort(int data[],int n,int flg);
int main(int argc,char** argv){
int i,n;
int *data;
n=atoi(argv[1]);
data = (int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
printf("No.%d = ",i+1);
scanf("%d",&data[i]);
}
selsort(data,n,0);
printf("\n[Ascending order]\n");
for(i=0;i<n;i++){
printf("%d\n",data[i]);
}
selsort(data,n,1);
printf("\n[Descending order]\n");
for(i=0;i<n;i++){
printf("%d\n",data[i]);
}
return 0;
}
04021-2
2005/10/14(金) 16:37:06int i,j,k,min,max,temp;
if(flg==0){
for(i=0;i<n-1;i++){
k=i; min=data[i];
for(j=i+1;j<n;j++){
if(min>data[j]){
min=data[j];
k = j;
}
}
temp=data[i];
data[i]=data[k];
data[k]=temp;
}
}
if(flg==1){
for(i=0;i<n-1;i++){
k=i; max=data[i];
for(j=i+1;j<n;j++){
if(max<data[j]){
max=data[j];
k = j;
}
}
temp=data[i];
data[i]=data[k];
data[k]=temp;
}
}
}
0403401-402
2005/10/14(金) 16:38:52自分も学生なんでなんか間違ってるかもしれませんが(´・ω・`)
0404デフォルトの名無しさん
2005/10/14(金) 18:17:12mallocしたものはfreeしましょう。(OSが…、とかじゃなく気持ち悪いから)
> if(min>data[j]){
> min=data[j];
> k = j;
> }
とかは
if(data[k]>data[j]){
k = j;
}
の方が見やすいかな
あと、int flagはint descとか意味のある名前にしましょう。
0405401-402
2005/10/14(金) 18:39:40ご指摘ありがとうございます。
mallocしてたこと忘れてましたorz
#define MAX 10000 も要らないですね。
0406367
2005/10/14(金) 23:51:08ありがとうございます!
…が、charというものがよく分かりません。
習っていないものはあまり使わないほうがよいのですが、
他の方法はありませんか?申し訳ないです。
別解を思いついた方、是非教えて下さい。お願いします。
0407デフォルトの名無しさん
2005/10/15(土) 00:07:14[2] 問題文
あるファイルには、全て小文字で書かれた英単語が、スペースまたは改行を区切りに書かれている。
このファイルの中には同じ単語が何回か繰り返し入力されている。このようの単語ファイル名をキーボードから入力すると、
各単語とそれぞれの出現回数と、その訳をディスプレイに表示し、かつ指定した出力ファイルにも書き込むプログラムを作成せよ。
ただし、入力単語ファイルの単語の種類は100未満とする。単語の一覧表示の順序はファイル中に出てきた順でよい
このプログラムを作成するに当たり、ofstream、ifstreamを使用する。
ifstreamでは英単語用と、辞書用の二つのifstreamのオブジェクトを定義する。
辞書には『英単語 訳』と入っているので英単語用の配列と訳用の配列を用意し、i番目の英語の訳はi番目に入るようにする。
ファイルに出現した単語を格納するstring配列を用意する。
上記の単語配列にあわせて、その単語の出現頻度を格納する整数配列も用意する。
<実行例>
Specify input file! words.txt
Specify output file! result.txt
result:
and と 3
apple リンゴ 2
button ボタン 1
cat 猫 3
kiwi 未登録 1
辞書ファイル以下にアップロードしてあります
ttp://www.geocities.jp/ryo_haruka2002/dicE1.txt
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語: C++
[4] 期限: [2005年10月17日9:00まで]
[5] その他の制限: 分岐、多重繰り返し、リダイレクション、配列あたりまでやってます。
作ってるうちに8つくらい配列が出来てしまい、コンパイルしたらエラーだらけで
とても使い物にならなかったので…お力添えをお願いします。
0408デフォルトの名無しさん
2005/10/15(土) 00:25:410409デフォルトの名無しさん
2005/10/15(土) 01:19:080410369
2005/10/15(土) 01:30:13charが解らないってこと?(それならお手上げ)
*(ポインタ)が解らないってことなら
char M[10][5]={"","M","MM","MMM","M?","?","?M","?MM","?MMM","M?"};
char C[10][5]={"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
char X[10][5]={"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
char I[10][5]={"","I","II","III","IV","V","VI","VII","VIII","IX"};
ならどう?
04111-1
2005/10/15(土) 02:12:17#include<stdio.h>
int main(void){
int i,num;
printf("正整数を入力してください:");
scanf("%d",&num);
i=1;
while(i){
if(num>=1000){
printf("M");
num = num-1000;
}
if(num<1000) i=0;
}
i=1;
while(i){
if(num>=900){
printf("CM");
num = num-900;
}
if(num<900) i=0;
}
04121-2
2005/10/15(土) 02:12:53while(i){
if(num>=500){
printf("D");
num = num-500;
}
if(num<500) i=0;
}
i=1;
while(i){
if(num>=400){
printf("CD");
num = num-400;
}
if(num<400) i=0;
}
i=1;
while(i){
if(num>=100){
printf("C");
num = num-100;
}
if(num<100) i=0;
}
i=1;
while(i){
if(num>=90){
printf("XC");
num = num-90;
}
if(num<90) i=0;
}
04131-3
2005/10/15(土) 02:14:01while(i){
if(num>=50){
printf("L");
num = num-50;
}
if(num<50)i=0;
}
while(i){
if(num>=40){
printf("XL");
num = num-40;
}
if(num<40) i=0;
}
i=1;
while(i){
if(num>=10){
printf("X");
num = num-10;
}
if(num<10) i=0;
}
if(num==0) printf("\n"); if(num==1) printf("I\n");
if(num==2) printf("II\n"); if(num==3) printf("III\n");
if(num==4) printf("IV\n"); if(num==5) printf("V\n");
if(num==6) printf("VI\n"); if(num==7) printf("VII\n");
if(num==8) printf("VIII\n"); if(num==9) printf("IX\n");
return 0;
}
0414デフォルトの名無しさん
2005/10/15(土) 02:15:42って今よく見たら関数使ってもよかったのねorz
0415デフォルトの名無しさん
2005/10/15(土) 02:37:530418デフォルトの名無しさん :
2005/10/15(土) 06:53:07[2] 問題文: 狼と山羊とキャベツと男のパズルを横型探索するプログラムを作成せよ。
[3] 環境
[3.1] OS: Unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2005年10月18日まで]
よろしくお願いします。
0419デフォルトの名無しさん
2005/10/15(土) 10:38:27>>328 の問題と似ているんですが、以下の問題でました。
[1] 授業単元:ネットワーク論
[2] 問題文(含コード&リンク):
ホスト名を入力し、ファイルリストのからホスト名を元にIPアドレス、
GW、サブネット、DNSを設定させるプログラムを作成せよ。
なお、ホスト名が正しくない場合、エラーで通告せよ。
IPアドレスなどが、正しく設定されたら、
設定を反映させるために再起動を実行させるプログラムを実行せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0等
[3.3] 言語: C/C++/どちらでも可
[4] 期限: [2005年10月17日00:00まで]
[5] その他の制限: 特になし。
>>327 と違う点は、ホストも変更する点です。
よろしくお願いします。
0420デフォルトの名無しさん
2005/10/15(土) 15:40:52環境依存スレかネットワーク関係のスレのほうがいいかもねー
>>407
文字列はどうならいました?
#include <string>
std::string ...;
とか
#include <string.h>
string ...;
とか
#include <string>
using namespace std;
string ...;
とかあるんですけど。
0421デフォルトの名無しさん
2005/10/15(土) 16:00:01そんなこと言われなくてもわかってます。
それ以前に、そんな忠告するぐらいだったら最初から全部答えろやカスが。
0423デフォルトの名無しさん
2005/10/15(土) 17:00:120424デフォルトの名無しさん
2005/10/15(土) 19:26:41423 じゃないけど,できたのでうp.
std::vector を避けるためにデータ数の上限を仮定したのと番兵多用したのと
std::map を避けるために回数のカウントとか辞書参照とかは毎回線型探索したので
可読性も効率もあんまりよろしくないけど勘弁してください.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/987.cpp
0425デフォルトの名無しさん
2005/10/15(土) 22:04:01ありがとうございます!助かりました!
あと番兵って何ですか?初めて聞く言葉ですが…
>>423
先に>>424さんが作られてしまいましたが、何パターンもみれた方が勉強になるんで完成したらアップしてもらえるとうれしいです。
0426424
2005/10/15(土) 22:20:30配列の最後に終端記号を置くことを番兵を置く,って言います.配列から何かを検索するときに
int i; for (i = 0; i < size; ++i) if (a[i] == 何か) break; の代わりに
a[size] = 何か; int i; while (a[i] != 何か) ++i; と書いたりする感じです.
上のプログラムの最後の部分では、日本語辞書の一番最後に "未登録" を置いておいて,英語辞書の
対応する部分に翻訳前のを設定して先頭から探索をかければ,もし普通に登録されてれば対応する英語,
登録されてなければ一番最後の部分で引っかかって "未登録" が出る,とかやってます.
0427デフォルトの名無しさん
2005/10/15(土) 23:50:55C/C++の文字列リテラルのナル文字も、ある意味番兵。
番兵(Sentinel)を使わない場合、文字列長を保存する仕掛けが必要になってしまう。
#そういう言語も少なくないし、C++の文字列クラスもそうなってたりはするが。
0428デフォルトの名無しさん
2005/10/16(日) 00:01:080429デフォルトの名無しさん
2005/10/16(日) 00:07:24[2] 問題文(含コード&リンク):
あるテキストから(絶対パス、相対パスどちらかが記入されている)
ディレクトリを読み込み、ディレクトリを移動した後、ディレクトリ内にファイル
が存在する場合は、そのファイルのパーミッション、グループ名、ユーザ名、
ファイルサイズ、名前の順に表示する。
例)
テキスト内
/home/users/d05/d05a0rst/dir1/work
workディレクトリ内のファイル
hoge.c
hoge.txt
実行結果
-rw-rw-rw-rw- root root 1541 hoge.c
-rw-rw-rw-rw- users users 2416 hoge.txt
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 無期限
[5] その他の制限: システム関数は使用してはいけない。
私が問題を聞いて感じたのは、構造体から必要な
情報のみを取得し、表示させるプログラムを作る
って事だと思いましたが、ls -l コマンド以外に
思いつきません。
なのでどうか皆さんお力お貸しください。
よろしくお願いします。
0430デフォルトの名無しさん
2005/10/16(日) 00:16:08ユーザー名とグループ名は持ってきたことないからわからん。
0431デフォルトの名無しさん
2005/10/16(日) 00:22:06FILE* fp=fopen("la -l", "r");
while( !feof(fp) ) { char tmp[1000]; fgets(tmp, 1000, fp); fputs(tmp, stdout); }
(短くするために色々省いた)で行けるんだけどなぁ…
0432デフォルトの名無しさん
2005/10/16(日) 00:23:120433デフォルトの名無しさん
2005/10/16(日) 00:27:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/988.c
0434デフォルトの名無しさん
2005/10/16(日) 00:29:45>>431さん
さっそくご返答ありがとうございます。
system("ls -l"); が使用できないので、大変困っています。
自分が無知なもので、すみません。
イメージは多分、ディレクトリ内のファイル一つ一つに対して
パーミッション、グループ名、ユーザ名、ファイルサイズ、名前を
取得し表示の繰り返しだと思うんですが。
0435デフォルトの名無しさん
2005/10/16(日) 00:35:010436429
2005/10/16(日) 00:41:30できればどなたか簡単なパーミッション、グループ名、ユーザ名、ファイルサイズ、名前
取得のサンプルソースなんか書いていただけないでしょうか?
テキストからのディレクトリの取得やディレクトリの移動、あたりは
自分で何とかしようと思っていますが、パーミッションあたりは
何も知識が無く、どうしようもなく困っています。
よろしければ、お願いします。
execlも使用できないと思われます。
構造体からの取得ってものが私の悩みどころです。
0437デフォルトの名無しさん
2005/10/16(日) 00:48:14stat()のマニュアルページを見よ。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man2/stat.2.html
0438デフォルトの名無しさん
2005/10/16(日) 00:53:23stat()したあとに/etc/passwdを検索とか(w
0439デフォルトの名無しさん
2005/10/16(日) 00:56:23stat() で得られる uid gid から逆引きしたら?速さを気にしなければ何とかなるでしょ。
ってまぁ ls のソース見れば多分一発解決なんだろうが。
0440デフォルトの名無しさん
2005/10/16(日) 00:57:420441デフォルトの名無しさん
2005/10/16(日) 01:00:460443デフォルトの名無しさん
2005/10/16(日) 01:06:13getpwent()系の関数を使え。
0444デフォルトの名無しさん
2005/10/16(日) 01:42:41皆さんご返答ありがとうございます。
私の力では、>>438さん>>439さんの回答ネタなのかどうかもわかりませんが、
スマートなコーディングを行いたいと言うのが希望です。
unix初心者ですが、やさしい内容でご教授できないでしょうか?
0445デフォルトの名無しさん
2005/10/16(日) 01:44:40こっちでは一応こっちのUNIX・Linux・Cygwinでは動作テストしてみる。
0446デフォルトの名無しさん
2005/10/16(日) 01:46:190447444
2005/10/16(日) 01:47:26ほんとココの住人の皆さんはしっかり答えてくれる方々が
いてくれて助かります。
ありがとうございます。
0448デフォルトの名無しさん
2005/10/16(日) 01:50:440449デフォルトの名無しさん
2005/10/16(日) 01:56:33元>>195なのかな?
やさしいかどうかは受け皿次第だ。
0450447
2005/10/16(日) 02:07:20が、わからないんですが・・・
詳しく教えていただけないでしょうか?
>>449さん 元>>195なのかな?
私ではないですが、>>195さんを読む限り同じ授業を受けてると思う
内容に感じます。誰だろ??
0451デフォルトの名無しさん
2005/10/16(日) 02:20:32ftp.gun.orgの/pub/の下のどっかにfileutil-4.xx.xx.tar.gzと言うファイルがある。
それを持ってきて適切な解凍ツールで解凍するとsrcの中にls.cが有るのでそれを見ろ。
大抵のLinuxで使ってるlsはそれだ。
0452448ではないが
2005/10/16(日) 02:21:16下のをそのまま打ってくれ
ftp ftp.gnu.org
anonymous
cd gnu/fileutils
binary
ls
get fileutils-4.1.tar.gz
bye
tar xzf fileutils-4.1.tar.gz
cd fileutils-4.1/src
less ls.c
0453デフォルトの名無しさん
2005/10/16(日) 02:21:52ttp://directory.fsf.org/all/fileutils.html
ここからtarball拾ってくるといい
ってかCの授業で環境依存なのを出すのはどうかと思う俺ガイル
0454デフォルトの名無しさん
2005/10/16(日) 02:24:480455448
2005/10/16(日) 02:25:000456デフォルトの名無しさん
2005/10/16(日) 02:28:51gzip -dc fileutils-4.1.tar.gz | tar xf -
推奨。システム標準のtarがzオプションに対応しているとは限らない。
同様にlessではなくmore推奨。
なにせ環境Linuxではなく「UNIX」だからな。
コンパイラはgccみたいだけれど。
0457デフォルトの名無しさん
2005/10/16(日) 02:29:47http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/989.txt
>>430,437,443 を元にしたら簡単にできて、後は単純作業。
最初はオモロイかもと思ってたのが良くなかったか。
Cygwin, Linux(Debian), UNIX で動作確認済み。
0458450
2005/10/16(日) 02:47:05なめてんのか?って言われるかも知れませんが、
ttp://directory.fsf.org/all/fileutils.html からtarball拾いましたが
strフォルダのls.cを見ましたが、理解が出来ませんでした。
>>457さんサンプルありがとうございます。
これを元に何とかしてみようと思います。
お手数おかけしました。
ココの住人の皆さん、もし他にもこんなやりかたあるよ、みたいなソースありましたら、
今後unixを勉強する私に色々なコーディングの行い方の知識を
随時UPしていただけないでしょうか?
このC/C++の宿題を片づけます板を元にどんどんC言語の面白さを
もっともっと感じて行きたいです。
ぜひぜひよろしくお願いします。
0459デフォルトの名無しさん
2005/10/16(日) 02:49:450460450
2005/10/16(日) 02:56:47了解しました。unix板にも行ってみます。
でもこのC/C++の宿題を片づけます板の方々は、
しっかり回答してくれるし、ここが勉強になると思ってたんです。
これからもよろしくお願いします。
0461デフォルトの名無しさん
2005/10/16(日) 02:59:17スレタイ100回読め。
ここはC/C++の宿題を片づけるスレであって、それ以上でもそれ以下でもないの。
宿題以外の話はスレ違いだから、他のスレや板を当たれ。
0462デフォルトの名無しさん
2005/10/16(日) 03:03:07そうでした・・・
自分の国語力の無さを感じました。
ごめんなさい。
宿題があるときのみ依頼します。
失礼しました。
0463デフォルトの名無しさん
NGNG何が原因かわからないので原因を教えてください。お願いします。
/*今日の日付を表示する*/
#include<time.h>
#include<stdio.h>
voidput_date(void)
{
time_tcurrent;
struct tm*local;
charwday_name[][3]={"日","月","火","水","木","金","土"};
time(¤t);/*現在の時刻を取得*/
local=localtime(¤t);/*地方時の構造体に変換*/
printf("%4d年%02d月%02日(%s)",local->tm_year+1900/*年*/
,local->tm_mon+1/*月*/
,local->tm_mday/*日*/
,wday_name[local->tm_wday]/*曜日*/
);
}
void main()
{
printf("今日は");
put_date();
printf("です。\n");
}
0464デフォルトの名無しさん
2005/10/16(日) 04:06:07空白が消えまくっているのがアレだが、「実行できない」ってのは、
具体的にどういう症状なんだ?
コンパイルはできたんだな?
0465463
NGNG[3]環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VC++6.0
[3.3] 言語: どちらでも可
[4] 期限:無期限
です。
0466デフォルトの名無しさん
2005/10/16(日) 04:07:130467デフォルトの名無しさん
2005/10/16(日) 04:11:36〇 %4d年%02d月%02d日(%s)
だな。それで動くだろ。
0468463
NGNG空白はTabでやってたのでコピーした時に消えてました(;^ω^)
>>467
できました(;^ω^)ありがとうございます。
何回も見直したのに全く気づかなかったorz
0469デフォルトの名無しさん
2005/10/16(日) 14:17:29[2] 問題文: SSDA法を用いてステレオマッチングを行い,左のカメラの画像の全ての点について,
右のカメラで撮った画像のどの点に対応するかを求め,対応する点の組を出力せよ。
また得られた対応する点をもとに左のカメラの画像の各点の3次元位置を,三角測量の
原理により計算するプログラムを作成せよ。得られた3次元空間中の点の集合の様子を
描画するプログラムを作成せよ.
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: borland C++ 5.5
[3.3] 言語: C
[4] 期限: [2005年10月24日7:00まで]
[5] その他の制限:pgm形式の画像ファイル。
よろしくお願いします。
0470デフォルトの名無しさん
2005/10/16(日) 14:28:08うぁぁ、面倒だ。
画像のサイズの上限は?
認識率と拒否率は?
safety distanceは?
0471デフォルトの名無しさん
2005/10/16(日) 14:55:52返信ありがとうございます。
画像サイズの上限は1280×960です。
認識率,拒否率,safety distancとはなんのことなのでしょうか?
よろしければ教えていただけないでしょうか?
よろしくお願いします。
0472デフォルトの名無しさん
2005/10/16(日) 15:23:00使い心地、かなりいいぞ。ギコナビ+プニルみたいな感じ
【おっぱい】うはwww2chブラウザつくったwwうぇwww
http://ex11.2ch.net/test/read.cgi/news4vip/1129427490/l50
0473デフォルトの名無しさん
2005/10/16(日) 16:00:05車輪の再開発だろうけど、まあ、ぼちぼちと。
0474名無し
2005/10/16(日) 17:36:50期限が近いのでよろしくお願いします。
0475デフォルトの名無しさん
2005/10/16(日) 18:07:22確認だけど,配列を使った LinkedList ってのは (data, next) のペアの配列で
next が次の配列の中のインデックスを保持する,ってやつでいいの?
0476デフォルトの名無しさん
2005/10/16(日) 19:16:550477名無し
2005/10/16(日) 20:41:20実行結果が課題どうりであれば、配列を使っても構造体をつかってもいいと言っていました。
0478デフォルトの名無しさん
2005/10/16(日) 20:57:18一応問題文どおり配列で作ったけど,かなり ad hoc なコードになっちゃった.
あと,plist の仕様がよくわからなかったのでとりあえず先頭から全部表示しといた.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/990.c
0479名無し
2005/10/16(日) 21:03:22ありがとうございます。
明日 早めに学校へ行って実行してみます。
本当に助かりました。
0480デフォルトの名無しさん
2005/10/16(日) 21:31:15教科書よもーね
0481デフォルトの名無しさん
2005/10/17(月) 03:12:41[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): ピボット選択付きガウス消去法のプログラムを作り
Ax=bのxを求めなさい。
また、出てきたxの値をつかいb−Axの値をだすプログラムも追加し、
そのプログラムの計算がどれだけ正確かをレポートしなさい。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0(推奨)何でもいい。
[3.3] 言語: C++
[4] 期限: [2005年10月19日12:00pmまで]
今、ガウス消去法(ピボット選択付き)のプログラムを作ってます。
大方、出来ていると思うんですが、
テストしたい値が分数になるとエラーが出てしまいます。
また出てきた値xと入力した値A,bの数値の差b−Axを
付け加えたいんですが、どうしてもしたらいいですか?
以下のサイトを主に参考にしてます↓
http://www.fuka.info.waseda.ac.jp/~kozo/suuchi/simple_equation/simple_equation_2.html
0482デフォルトの名無しさん
2005/10/17(月) 03:29:13まずは原型プログラムをうpしなさい。行列の入力方法とか、どの範囲で
(質問文を見ると分数処理もする必要あるの?)やらなきゃいけないかも分からん。
>どうしてもしたらいいですか?
あと、日本語の勉強もしなさい。
0483481
2005/10/17(月) 03:30:01参照ページ間違えました。
こちらです↓
http://hp.vector.co.jp/authors/VA009453/prog/gauss.htm
0484デフォルトの名無しさん
2005/10/17(月) 03:38:520485481
2005/10/17(月) 03:43:57すみません、なぜか焦ってしまいました。
483に載せてある参照ページのプログラムをほぼ使ってあります。
http://hp.vector.co.jp/authors/VA009453/prog/gauss.htm
0486481
2005/10/17(月) 03:51:48たびたびすみません。
分数処理が必要です。
0487デフォルトの名無しさん
2005/10/17(月) 04:09:32解はs[]に入っているがローカル変数なので、他からアクセスできない→外にだす。
b-Axの1行目だけ式でかくと
b_1 - A_11 * x_1 + A_12 * x_2 + ... + A_1N * X_N という式。
i行だと
b_i - A_i1 * x_1 + A_i2 * x_2 + ... + A_iN * x_n という式。
上の式のb_iはプログラム上ではB[i][N+1],同様に、A_ijはB[i][j]、x_jはs[j]な。
まあ、そんなんでがんばれ。
0488481
2005/10/17(月) 04:13:56ありがとうございます。
何度か作ってみたんですがどうしても無限ループになってしまうので
困ってました!
とりあえず、なんとか頑張ってみます
0489デフォルトの名無しさん
2005/10/17(月) 12:22:40[2] 問題文(含コード&リンク):
>>194の続きで
交換が行われたかどうかを判定する変数exchangeを使った
やり方のバブルソートのプログラムを完成せよ
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2005年10月19日
[5] その他の制限: 無し
よろしくおねがいします
0490デフォルトの名無しさん
2005/10/17(月) 13:32:20#include <stdio.h>
void print(int * data, int length) {
int i;
for (i = 0; i < length; i++) { printf(" %d", data[i]); }
puts("");
}
void bubble_sort(int * data, int length) {
int exchange;
do {
int i;
exchange = 0;
for (i = 0; i < length - 1; i++) {
if (data[i] > data[i+1]) {
int temp = data[i];
data[i] = data[i+1];
data[i+1] = temp;
exchange = 1;
}
}
// print(data, length); ソート範囲を表示
length--;
} while (exchange);
}
int main(void)
{
int arr[] = { 80, 40, 30, 90, 50, 20, 10, 60 }, length = sizeof(arr)/sizeof(arr[0]);
printf("before :"), print(arr, length);
bubble_sort(arr, length);
printf("after :"), print(arr, length);
return 0;
}
0491デフォルトの名無しさん
2005/10/17(月) 13:40:11[2] レポート課題:
(1)ユークリッド平面上に配置された都市を入力とする巡回セールスマン問題に対する以
下の近似解法のプログラムを作成せよ.
(1-1)Nearest Neighbor法
(1-2)Nearest Addition法(最近追加法)
(1-3)Nearest Neighbor法を適用して得られる巡回路を初期解とする2-opt法
(1-4)Nearest Addition法を適用して得られる巡回路を初期解とする2-opt法
(2)(1)で作成したプログラムおよびランダムな巡回路を初期解とする2-opt法(サンプルプ
ログラム)を用意した全ての例題に対して実行し,得られた巡回路の長さおよび実行時間
を比較せよ.
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2005年10月20日
[5] ・サンプルプログラムを自由に改変してプログラムを作成して構わない.
うわ〜!破滅だ〜!神様!仏様!プログラム板様〜!!
大変忙しい中すみません!なにとぞ よろしくおながいします!
0492デフォルトの名無しさん
2005/10/17(月) 13:45:420493デフォルトの名無しさん
2005/10/17(月) 13:50:27/* ランダムな巡回路を生成するプログラム */
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#define MAX_CITY_NUM 3000 /* 最大都市数 */
struct point{ /* 都市の座標を格納する構造体 */
double x;
double y;
};
struct point city[MAX_CITY_NUM]; /* 外部変数: 都市の座標を格納する配列 */
int city_num; /* 外部変数: 都市数 */
int tour[MAX_CITY_NUM]; /* 外部変数: 都市の巡回順を格納する配列 */
/* 関数の宣言 */
double distance(int i, int j); /* 都市(i,j)間のユークリッド距離 */
void random_tour(); /* ランダムな巡回路の生成 */
/* メインプログラム */
int main(int argc, char *argv[]){
FILE *input_file, *output_file;
double length;
int i;
double start_time, search_time;
0494491
2005/10/17(月) 14:09:07続き/* 引数のチェック */
if(argc <= 1){
fprintf(stderr,"Please input the name of data file!\n");
exit(1);
}
/* 入力データの読み込み */
input_file = fopen(argv[1], "r");
fscanf(input_file,"%d", &city_num);
for(i = 0; i < city_num; i++){
fscanf(input_file,"%lf %lf",&(city[i].x),&(city[i].y));
}
fclose(input_file);
/* 入力データの表示 */
printf("city_num= %d\n",city_num);
for(i = 0; i < city_num; i++){
printf("%4d\t%f\t%f\n",i,city[i].x,city[i].y);
}
0495デフォルトの名無しさん
2005/10/17(月) 14:26:42・レポート提出期限内にレポートを提出しない
・提出されたレポートが上記の(1)(2)を満たさない
・作成したプログラムが完成していない
・プログラムもしくはレポートが他人のコピーである
・レポートの内容が基準を満たしていない
梅谷センセにここのURLメールすればいいのか。ふむ。
0496491
2005/10/17(月) 15:02:340497デフォルトの名無しさん
2005/10/17(月) 15:32:590498デフォルトの名無しさん
2005/10/17(月) 15:50:49ありがとうございます
0499デフォルトの名無しさん
2005/10/17(月) 16:28:15[2] 問題文(含コード&リンク):
半球電鉄の運賃は距離によって決まる(距離と運賃は整数)
距離 運賃
0km以上3km未満 120円
3 5 150
5 8 190
8 13 240
13 19 310
19 30 450
30 50 560
50km以上 670
距離を画面から入力し運賃を求めるプログラムを作成せよ。
また2次配列、while、EOF、foe、を使いなさい。
また結果は4件以上出しなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2005年10月18日まで]
[5] その他の制限:2次配列まで習っています
何ぶん未熟なもので、どなたか宜しくお願いします。
0500デフォルトの名無しさん
2005/10/17(月) 16:55:042次配列は2次元配列の書き間違いだよね?
#include <stdio.h>
#include <stdlib.h>
#define foe for
#undef EOF
#define EOF if
int main(void)
{
int table[][2] = {{3,120},{5,150},{8,190},{13,240},{19,310},{30,450},{50,560},{0,670}};
int i, distance, table_idx;
foe (i = 0;;) {
EOF (scanf("%d", &distance) != 1 || distance < 0) {
EOF (i < 4) {
scanf("%*[^\n]");
continue;
}
break;
}
foe (table_idx = 0; table[table_idx][0]; table_idx++)
EOF (distance < table[table_idx][0])
break;
printf("\\%d\n", table[table_idx][1]);
i++;
}
return 0;
}
0501デフォルトの名無しさん
2005/10/17(月) 16:58:17なにしてるのかがわからないです><教えて下さい><
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("size of char = %d\n", sizeof(char));
printf("size of short int = %d\n", sizeof(short int));
printf("size of int = %d\n", sizeof(int));
printf("size of long int = %d\n\n", sizeof(long int));
printf("size of float = %d\n", sizeof(float));
printf("size of double = %d\n", sizeof(double));
printf("size of long double = %d\n\n", sizeof(long double));
printf("size of char* = %d\n", sizeof(char*));
printf("size of short int* = %d\n", sizeof(short int*));
printf("size of int* = %d\n", sizeof(int*));
printf("size of long int* = %d\n\n", sizeof(long int*));
printf("size of float* = %d\n", sizeof(float*));
printf("size of double* = %d\n", sizeof(double*));
printf("size of long double* = %d\n", sizeof(long double*));
exit(0);
}
-------------------------------
0502500
2005/10/17(月) 17:06:19どこかに適当に while(0); って入れといて。
0503デフォルトの名無しさん
2005/10/17(月) 17:18:08はい、落第ね。
0504デフォルトの名無しさん
2005/10/17(月) 17:27:51ポインタ変数なんかどこにもありませんがそれはそうと>>1ぐらい読んでスレ違いに気づこうね
0505デフォルトの名無しさん
2005/10/17(月) 17:53:04マルチされるのも面倒なのでここで答えとく。
sizeof()の意味はわかってるよな?
あと、データ型の勉強もしてるよな?
そのプログラムでは、指定したデータ型のサイズ(バイト単位)を表示してる。
お前がポインタ変数だと思ってるのは、ポインタのデータ型だ。
ポインタのデータ型は、参照する型の種類に関わらず全部同じサイズになる。
だったらあとはプログラム実行して確かめろ。
0506デフォルトの名無しさん
2005/10/17(月) 17:59:54> 距離を画面から入力し
どうしてもタッチパネルを思い浮かべてしまう。
0507デフォルトの名無しさん
2005/10/17(月) 18:38:18[2] 環境
[2.1] OS: Linux
[2.2] コンパイラバージョン: gcc
[2.3] 言語: C
[3] 期限: 木曜14時
[4] 問題:人数を入力後、その人数分の名前を入力し、それら名前を入力順序と逆順にして出力するプログラムを作成し、実行しなさい。
その際、人数を入力後、人数に応じたメモリ領域を確保してから、名前を入力すること。
また、最後にメモリ領域の開放もすること。
また、メモリ領域の確保は、標準関数であるmallocを使うこと。
以上ですよろしくお願いいたします
0508499
2005/10/17(月) 19:11:06早々のレスありがとうございます。
、、、、、、、、、、、、、、、、
大変申し訳ないのですが、foe じゃなくえ for でした。
すみませんが499のものを
2次元配列、while、EOF、for、を使ってお願いします。
0509デフォルトの名無しさん
2005/10/17(月) 20:37:00#include <stdio.h>
#include <stdlib.h>
typedef char string[256];
int main() {
int i, n;
string *namelist;
scanf("%d", &n);
namelist = (string*)malloc(sizeof(string) * n);
for (i = 0; i < n; ++i)
scanf("%s", namelist[i]);
for (i = n - 1; i >= 0; --i)
printf("%s\n", namelist[i]);
for (i = 0; i < n; ++i)
free(namelist[i]);
}
0510509
2005/10/17(月) 20:40:04× for (i = 0; i < n; ++i) free(namelist[i]);
○ free(namelist);
0511デフォルトの名無しさん
2005/10/17(月) 21:28:21[2] 環境
[2.1] OS: windows
[2.2] コンパイラバージョン: gcc
[2.3] 言語: C
[3] 期限: 18日17:00
[4] 問題:ttp://49uper.com:8080/html/img-s/89348.zip
以上です、どうかよろしくお願いいたします。
0512デフォルトの名無しさん
2005/10/17(月) 21:34:59ちょっと考えたら分かる事。
0513デフォルトの名無しさん
2005/10/17(月) 21:42:450514デフォルトの名無しさん
2005/10/17(月) 22:06:49入力した数値に対して、浮動小数点での表記に書き換えるものです。
0515デフォルトの名無しさん
2005/10/18(火) 00:20:40こんなカンジのが出来ればいいのか?
>>491
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/991.zip
0516デフォルトの名無しさん
2005/10/18(火) 11:25:04問題文とか条件を省略してないか?
その問題だとEOF使う所がないんだが...
>また結果は4件以上出しなさい。
も意味不明。ある距離に対して複数(4件以上)の運賃があるのか?
0517デフォルトの名無しさん
2005/10/18(火) 13:36:39多分こういうことじゃないか?
int main(int argc, char **argv)
{
int table[][2] = {{3,120},{5,150},{8,190},{13,240},{19,310},{30,450},{50,560},{0,670}};
int i=0, distance, table_idx;
while (i<4) {
if(scanf("%d", &distance) == EOF || distance < 0) {
printf("やりなおし。4件以上入力しる\n");
scanf("%*[^\n]");
continue;
}
for(table_idx = 0; table[table_idx][0]; table_idx++)
if(distance < table[table_idx][0])
break;
printf("\\%d\n", table[table_idx][1]);
i++;
}
return 0;
}
0518517
2005/10/18(火) 13:41:29int main(int argc, char **argv)
{
int table[][2] = {{3,120},{5,150},{8,190},{13,240},{19,310},{30,450},{50,560},{0,670}};
int i=0, distance, table_idx;
while (1) {
if(scanf("%d", &distance) == EOF || distance < 0) {
if(i<4) {
printf("やりなおし。4件以上入力しる\n");
scanf("%*[^\n]");
continue;
}
break;
}
for(table_idx = 0; table[table_idx][0]; table_idx++)
if(distance < table[table_idx][0])
break;
printf("\\%d\n", table[table_idx][1]);
i++;
}
return 0;
}
0519デフォルトの名無しさん
2005/10/18(火) 17:19:00どこが違うんですかね?
#include <stdio.h>
#include <stdlib.h>
#include <string.h> // strcpy() のため
#define BUFFER_SIZE 100
#define TABLE_SIZE 10
int main(void)
{
int i, j;
char *buffer[BUFFER_SIZE];
char *table[TABLE_SIZE];
for (i = 0; i < TABLE_SIZE; i++) {
if (fgets(buffer, BUFFER_SIZE, stdin) == EOF) { break;}
table[i] = (char *)malloc(TABLE_SIZE*sizeof(char));
strcpy(*buffer, table[i]);
}
for (j = 0; j < i; j++) {
printf("table[%d]: %s", j, *buffer);
}
exit(0);
}
0520デフォルトの名無しさん
2005/10/18(火) 17:21:21途中,EOF (End Of File) が入力されるか,i = TABLE_SIZE - 1 になったら,入力を終了し,ポインタ配列の各 table[i] (0≦i<TABLE_SIZE) が指す文字列を順に出力するプログラム
はっきりいってこれじゃあ動かないんです。エラーが出てしまうんですけど
どこが違うんですかね?
0521デフォルトの名無しさん
2005/10/18(火) 17:21:40strcpy(*buffer, table[i]);
が逆な気がする。
0522デフォルトの名無しさん
2005/10/18(火) 17:22:420523デフォルトの名無しさん
2005/10/18(火) 17:23:22char *buffer[BUFFER_SIZE];
↓
char buffer[BUFFER_SIZE];
strcpy(*buffer, table[i]);
↓
strcpy(table[i], buffer);
printf("table[%d]: %s", j, *buffer);
↓
printf("table[%d]: %s", j, table[j]);
あと一応freeもしとけ
0524デフォルトの名無しさん
2005/10/18(火) 17:30:42if (fgets(buffer, BUFFER_SIZE, stdin) == EOF) { break;}
の文に下のようなエラーが出てしまうんです。。。
2kadai04b.c:15: warning: comparison between pointer and integer
0525デフォルトの名無しさん
2005/10/18(火) 17:33:27fgetsは失敗するとEOFではなく空ポインタを返すから、
== NULL
にしないと
0526デフォルトの名無しさん
2005/10/18(火) 17:34:33fgets()の戻り値はEOFにはならない。
sizeof(char)は常に1だから書く必要がない。
exit()は使う必要がない。returnで充分。
0527デフォルトの名無しさん
2005/10/18(火) 17:37:590528デフォルトの名無しさん
2005/10/18(火) 17:45:400529デフォルトの名無しさん
2005/10/18(火) 17:52:060530499
2005/10/18(火) 18:05:57問題はそっくりそのままです。
4件以上ってのは、ちゃんと作れているか、たしかめるために、
1, 6, 25, 50 などの数字を入力し、出てきた結果を
プログラムの後ろに貼り付けて提出しなさいとうことなので
そのためのものです。
>>517
どうもありがとうございます。助かりました。
0531デフォルトの名無しさん
2005/10/18(火) 18:36:02EOFやNULLといったマクロ定数の実際の数値は処理系依存
俺はC入門書とK&Rしか読んでないがどっちかに書いてあったぞ
0532デフォルトの名無しさん
2005/10/18(火) 18:47:15あぁ。そういう意味ですか。了解しました。
0533デフォルトの名無しさん
2005/10/18(火) 18:48:04そういう問題じゃないから。
>>527
0x1aのコードを持つ制御文字をファイル終端と見なすのはCP/Mだけ。
初期のMS-DOSでは互換性のためにファイル終端と見なすこともあったが、
今では単なる制御文字と見なすのが普通。
標準入力を閉じるのに^zを使うのはその名残だが、0x1aの文字が入力されるわけではない。
0534デフォルトの名無しさん
2005/10/18(火) 19:04:31[前提条件]
・ユニークなIDが100個あります
・当選確率は30%
[期待する動作]
・任意のIDを入力すると、当選確率に応じて「当たり」か「外れ」か表示される
[自分で考えたこと]
IDを種とした 0-99 までの乱数を算出して、それが33以下だったら当たり、とか・・・
この程度しか思いつきませんでした。
えらい人教えてください。よろしくお願いします。
0535デフォルトの名無しさん
2005/10/18(火) 19:05:38[前提条件]のところを以下のように訂正させてください
×・ユニークなIDが100個あります
○・ユニークなIDがたくさんあります
0536デフォルトの名無しさん
2005/10/18(火) 19:14:23>>1
0537デフォルトの名無しさん
2005/10/18(火) 19:23:57NULLのソースコード上の値は(型は定められていないが)0と決まっている。
0538デフォルトの名無しさん
2005/10/18(火) 20:20:34ぜんぜん条件が足りない.というかそもそも何がしたいの?懸賞プログラムって何?
とりあえず,同じ ID に対して常に同じ結果が出る必要があるかとか,
入力された全 ID の中の 30% が必ず当選する必要があるかとかは規定してくれんと.
0539デフォルトの名無しさん
2005/10/18(火) 21:04:26#define AX 50000
とやってから
int i = AX;
とやるとAXレジスタの値が入ってしまうんですが、
何とかすることできないでしょうか?
0540デフォルトの名無しさん
2005/10/18(火) 21:12:43[2] 問題文:�@ 1からnまでの自然数の総和は、最初のn-1個の数を加算し、その合計を最後の数nを加えることによっても計算できる。
この方法を使って、1からnまでの総和を計算するアルゴリズムを再帰的に設計し、そのプログラムを書け。
�A フィボナッチ数と呼ばれる数列の第n項は、第n-1項と第n-2を足して得られる。
したがって、第1項、第2項とも1の場合のフィボナッチ数は、1,1,2,3,5,8,13,21,34,・・・となる。
このとき、数Nをコマンドライン上から読み込み、第N項までのフィボナッチ数列を出力する再帰アルゴリズムと、そのプログラムを書け。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語: C
[4] 期限: [2005年10月28日15:00まで]
以上です。
0541デフォルトの名無しさん
2005/10/18(火) 21:53:17>>540 適当
#include <stdio.h>
int sum(int n){
return (n > 1) ? sum(n - 1) + n : 1;
}
int main(){
int n;
printf("n?>");
scanf("%d", &n);
printf("sum(1:%d) = %d\n", n, sum(n));
return 0;
}
#include <stdio.h>
int fibonacci(int n){
//printf("%d ", n);
return (n > 2) ? fibonacci(n - 1) + fibonacci(n - 2) : 1;
}
int main(){
int i, n;
printf("n?>");
scanf("%d", &n);
for(i = 1; i <= n; i++){
printf("%d ", fibonacci(i));
}
printf("\n");
return 0;
}
0542デフォルトの名無しさん
2005/10/18(火) 22:31:56(´・ω・`)?
0543デフォルトの名無しさん
2005/10/18(火) 23:06:19BX レジスタの値とか、一通りレジスタの値の取得法をまとめれば
雑誌の記事とかになるんじゃないかな?
まああんまりお金になりそうにはないけど。
0544デフォルトの名無しさん
2005/10/19(水) 00:00:21お返事遅くなってすみません。
ありがとうございました、助かりました!
0545539
2005/10/19(水) 00:30:58本来であればdefineされた値になっていてほしいのに、
レジスタと同じ名前の識別子が
レジスタの値が入る変数のように振舞うので困っているのです。
コンパイルオプションとかで設定できるのでしょうか?
0546デフォルトの名無しさん
2005/10/19(水) 00:48:06>>1
0547デフォルトの名無しさん
2005/10/19(水) 01:36:19【質問テンプレ】
[1] 授業単元: すべてリンク先にありますです。。
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[5] その他の制限: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/992.txt
0548デフォルトの名無しさん
2005/10/19(水) 02:04:29\\netdrv\test\work\sample.txt
をReadさせようとすると、何故か作業フォルダ配下の
\netdrv\test\work\sample.txt
をReadしようとしてしまうんですが・・・
これは何故??
0549デフォルトの名無しさん
2005/10/19(水) 02:12:110550デフォルトの名無しさん
2005/10/19(水) 02:40:52[昇順チェック]
for(先頭から今見ている香具師が、一つ前より大の間繰り返し)
;
最後まで逝ってれば正しい
降順の場合は一つ前より小か、で
0551デフォルトの名無しさん
2005/10/19(水) 02:51:14[2] 問題文: XYZの三次元座標上でランダムに座標(0,0,0)からの距離が平均値1となる座標
を決定するプログラムを作成せよ。ただしX方向とYZ方向で2:1の楕円状の確率依存性を持つも
のとする。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C 不明
[4] 期限: [2005年10月24日まで]
[5] その他の制限:乱数の生成には逆関数を使うらしい
お願いします
0552デフォルトの名無しさん
2005/10/19(水) 02:57:38>>132や>>139からもらったものはとうしたの?
「まるっきり分りません」とか「よくわからない」とか言われても
聞いてる方はもっと分らない。
日本語も分らない奴として放置させてもらいますが、よろしいか?
0553デフォルトの名無しさん
2005/10/19(水) 04:05:360554デフォルトの名無しさん
2005/10/19(水) 07:27:140556デフォルトの名無しさん
2005/10/19(水) 11:00:05[2] 問題文:
C言語でガウスの消去法で連立一次方程式を解くプログラム(LU分解・コレスキー分解なし)
を作成せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:10/20まで
[5] その他の制限:特に無し
どなたかご教授お願いします。
0557デフォルトの名無しさん
2005/10/19(水) 11:02:26>>515
0558491
2005/10/19(水) 11:19:32メシアよ!これです これこれ 超これなんです!
0559デフォルトの名無しさん
2005/10/19(水) 12:13:200560デフォルトの名無しさん
2005/10/19(水) 13:04:11ここ見た方が早いと思うぞ
ttp://www.fuka.info.waseda.ac.jp/~kozo/suuchi/simple_equation/simple_equation_1.html
0561デフォルトの名無しさん
2005/10/19(水) 13:11:53[2] 問題文(含コード&リンク):
二問あります
�@二つの整数を受け取って和をとる関数を定義し、main関数から
二つの整数データを渡し、結果を返してもらいmainで印刷するプログラムを書け。
�A二つの整数の値をいれかえる関数swapを定義し、main関数から
二つの整数データを渡し、main関数のデータを入れ替えて印刷するプログラムを書け。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2005年10月21日
[5] その他の制限: プロっぽいソースプログラムじゃない物でお願いします。
0562556
2005/10/19(水) 13:25:43すげー、ありがとうございます。
自分でも色々探してみたんですが、
これほどわかりやすいプログラムは見つかりませんでした。
0563デフォルトの名無しさん
2005/10/19(水) 13:26:51素人っぽさが足りなければ自分で変更して
�@
#include <stdio.h>
int sum( int a, int b ){ return a+b; }
int main( int ac, char **av ){ printf( "%d", sum( 1, 2 ) ); return 0; }
�A
#include <stdio.h>
void swap( int *a, int *b ){ int work; work = *a; *a = *b; *b = work; }
int main( int ac, char **av ){ int a = 3; int b=4; swap( &a, &b ); printf( "%d %d", a, b ); return 0; }
0564デフォルトの名無しさん
2005/10/19(水) 13:48:52この三行だけでいいんですか?
なんか結果が表示されないんです
0565デフォルトの名無しさん
2005/10/19(水) 14:01:02お前今までの授業でどうやって結果見てたんだよ
0566デフォルトの名無しさん
2005/10/19(水) 14:03:430567デフォルトの名無しさん
2005/10/19(水) 14:05:12コンパイルして./a.outでやったけど見れなかったです
0568デフォルトの名無しさん
2005/10/19(水) 14:05:38じゃあ今回もそれでいいじゃん(*^ー゚)b
0569568
2005/10/19(水) 14:06:210570デフォルトの名無しさん
2005/10/19(水) 14:08:09a.out.exeなんてファイル名、ふつうつけるか?
0571デフォルトの名無しさん
2005/10/19(水) 14:20:33a.outはファイル名じゃなくて実行のコマンドです
いつもはできるのにやっぱりできませんでした
0572デフォルトの名無しさん
2005/10/19(水) 14:47:130573568
2005/10/19(水) 14:52:54例えUNIXであろうとa.outはgccでコンパイルした結果出来上がるファイル名だ
>>570のは,今回の課題はWindowsでは実行ファイルは拡張子exeを付ける事になってることを踏まえての発言(だろう)
君にはプログラミング以前の基本的知識が欠如してる気がする
0574デフォルトの名無しさん
2005/10/19(水) 14:55:22なんかもうボロボロ
0575デフォルトの名無しさん
2005/10/19(水) 15:00:07もしかしてOSが違うと>>563のプログラムが実行できないんですか
0576573
2005/10/19(水) 15:03:250577デフォルトの名無しさん
2005/10/19(水) 15:29:43[2] 問題文:
http://www.cda.ics.saitama-u.ac.jp/~ikuko/ProgIntro/14/meibo.txt
ここにあるNameFileのアルファベット氏名を使って,
一行分のデータ(ユーザーID、漢字氏名、アルファベッド氏名等)読み込み、
各個人データをメモリ内で二分木を一旦作成して,
それから,アルファベット順に名前データを表示するプログラムを作って下さい.
strcasesmp() を使用すること。
ヒントとしてscanfの使い方が与えられてます↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/994.txt
[3] 環境
[3.1] Windows/Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 3日以内
0578デフォルトの名無しさん
2005/10/19(水) 15:39:050579デフォルトの名無しさん
2005/10/19(水) 15:51:410580デフォルトの名無しさん
2005/10/19(水) 15:52:19ヒープソートでもやりたいのか?
ってかstrcasesmpって何よ?当然manでも何も出てこないし、ググってもそれらしいの無いが
0581デフォルトの名無しさん
2005/10/19(水) 15:59:09まあ非標準関数だがな
0582デフォルトの名無しさん
2005/10/19(水) 16:57:47心当たる人は手を挙げて。
0583デフォルトの名無しさん
2005/10/19(水) 17:55:1950音順に並んでるものをアルファベット順に出力でいいんだろ?
scanf()のところかなり適当だが、うpしといた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/995.txt
0584デフォルトの名無しさん
2005/10/19(水) 17:56:230585577
2005/10/19(水) 17:57:03>>578
ファイルの中はあいうえお順なので、それをアルファベッド順に表示したいのです
03TI001 阿部 恒彦 j0301at Abe Tsunehiko
03TI002 荒牧 孝洋 j0302at Aramaki Takahiro
03TI011 江田 慎太郎 j0311es Eda Shintarou
という風に
0586デフォルトの名無しさん
2005/10/19(水) 17:58:580587デフォルトの名無しさん
2005/10/19(水) 18:04:16ルールは普通のしりとりと同じ。同じワードは使えない、最後に"ん"がついたらいけない
英単語は不可等。
まず最初は自分が入力をし、その後コンピュータ側が持っている
テキスト(辞書ファイル)の中からユーザーが入力した言葉に続く文字を見つけて出力、
その後またユーザーの入力→コンピュータ側がファイルを読み込んで出力の繰り返し。
ユーザーが入力した単語の中でファイルの中に無い単語の場合、学習(ファイルに登録)させる。
仮にファイルの中身が1Mあったとして、1M全て読み切ったらユーザーの勝ち。
勿論学習機能があるのでファイルの容量はいつまでも増え続ける。
がんばってくださーい
0588デフォルトの名無しさん
2005/10/19(水) 18:06:02その仕様じゃ、ユーザーはありもしない単語延々と並べるだけで絶対負けないじゃないか。
っていうかスレ違い。
0589デフォルトの名無しさん
2005/10/19(水) 18:12:010590デフォルトの名無しさん
2005/10/19(水) 18:15:47スレどころか板も違う気がする。
>>589
トリビアのネタって?
0591デフォルトの名無しさん
2005/10/19(水) 18:19:40タモリが出てるトリビアの泉ってTV番組、知らない?
0592デフォルトの名無しさん
2005/10/19(水) 18:21:070593デフォルトの名無しさん
2005/10/19(水) 18:22:23番組は知ってるけど>>587のしりとりプログラムがどうしてトリビアなのかな、と。
0594デフォルトの名無しさん
2005/10/19(水) 18:28:22およびそのリンク。
0595デフォルトの名無しさん
2005/10/19(水) 18:31:120596デフォルトの名無しさん
2005/10/19(水) 18:35:11表示するプログラムを作りたいんですけど、2次元配列を使ってはいけないんです。strlen関数を使ったら
どうなりますか?説明つきで教えて下さい。m(_ _)m
0597587
2005/10/19(水) 18:44:33ヤッテクレと言った
宿題スレで聞いてはいけないならどのスレなんだ?
0599デフォルトの名無しさん
2005/10/19(水) 18:53:58そんな問題設定じゃアルゴリズムなんてねーだろ.どうせプレイヤー側が 588 の手順で 100% 勝つ.
0600587
2005/10/19(水) 18:57:140601デフォルトの名無しさん
2005/10/19(水) 18:58:54>>1
>>594
0602デフォルトの名無しさん
2005/10/19(水) 18:59:580603デフォルトの名無しさん
2005/10/19(水) 19:04:12表示するプログラムを作りたいんですけど、2次元配列を使ってはいけないんです。strlen関数を使ったら
どうなりますか?説明つきで教えて下さい。m(_ _)mお願いします。
0604デフォルトの名無しさん
2005/10/19(水) 19:04:560605デフォルトの名無しさん
2005/10/19(水) 19:05:280606デフォルトの名無しさん
2005/10/19(水) 19:05:33表示するプログラムを作りたいんですけど、2次元配列を使ってはいけないんです。strlen関数を使ったら
どうなりますか?説明つきで教えて下さい。m(_ _)mお願いします。
ちなみにこれが実行例です。
% ./kadai04c ← コマンドライン引数が 0 個の時の例
%
% ./kadai04c abc ← コマンドライン引数が 1 個の時の例
cba
% ./kadai04c abc 12345 QWERTY ← コマンドライン引数が 3 個の時の例
cba
54321
YTREWQ
%
0607デフォルトの名無しさん
2005/10/19(水) 19:07:430608デフォルトの名無しさん
2005/10/19(水) 19:12:09int main(int argc, char* argv[]){
この時点で ↑で二次元配列を使ってるんだけど(w
0609デフォルトの名無しさん
2005/10/19(水) 19:13:10#include <stdio.h>
void moin(char *p) { if (*p != '\0') moin(p+1), putchar(*p); }
int main(int argc, char **argv) { if (argc > 0) main(argc-1, argv), moin(argv[argc-1]), putchar('\n'); }
0610デフォルトの名無しさん
2005/10/19(水) 20:25:20[2]問題文:3人のテストの点数、合計値、平均点を2次元配列を利用して表示するプログラムを作成しなさい。
実行結果
A : 70 80 75 60 : sum = 285, ave = 71.25
B : 75 83 70 70 : sum = 298, ave = 74.50
C : 60 76 70 55 : sum = 261, ave = 62.25
[3]環境
[3.1]OS:Linux
[3.2]コンパイラ名とバージョン:
[3.3]言語:C言語
[4]期限:10月20日午前9時まで
[5]その他の制限:なし
先月からC言語を学び始めたのですがいきずまってしまい、何卒よろしくおねがいします。
0611デフォルトの名無しさん
2005/10/19(水) 20:41:090612デフォルトの名無しさん
2005/10/19(水) 20:45:43Cでオブジェクト指向しなきゃいけないんじゃない?
0613デフォルトの名無しさん
2005/10/19(水) 20:53:530614デフォルトの名無しさん
2005/10/19(水) 21:01:11全く同じようなかんじでテキストファイルってつくれたっけ?
ファイルのコピーじゃなくて。。
何がやりたいかって言うと、
テキストファイルの上15行が文字列で
16行目がブランク
17行目から300万行くらいが数字配列(300万行、3列)
なんだけど、ほしいのはその300万行の数列、
1〜16行を排除したい。
ただ、データが膨大で普通のエディタでは開けなくて、
そこだけ手動で消すことができない。
そこで、プログラムでなんとかしようかと思ってるのだけど。
ちなみにもとはCSVファイルだったんだけど、
テキストならと思ってコピペでテキストファイルSCV
両方用意しとります。
もし、できるなら100行づつの3つのファイルになってもかまいません。
よろしくお願いします。
0615デフォルトの名無しさん
2005/10/19(水) 21:01:52Cで書いてみたけど手続き指向になってしまった。
誰かオブジェクト指向版を頼む。
#include<stdio.h>
int main(void){
int score[][4]={ {70,80,75,60,},{75,83,70,70,},{60,76,70,55,}, };
char name[][2] = { "A","B","C", };
int i,j,sum;
double ave;
for(i=0;i<3;++i){
printf("%s :",name[i]);
for(j=0,sum=0;j<4;sum+=score[i][j],++j) printf(" %d",score[i][j]);
ave = sum / 4.0;
printf(" : sum = %d, ave = %2.2f\n",sum,ave);
}
return 0;
}
0616デフォルトの名無しさん
2005/10/19(水) 21:09:30for (int i = 0; i < 16; ++i) { 1行読み込む; }
for (int i = 16; i < 300万; ++i) { 1行読み込む; 読んだ行を出力; }
これでわからんようなら >>1 参照
0617デフォルトの名無しさん
2005/10/19(水) 22:38:22悪いこと言わんから
http://pc8.2ch.net/test/read.cgi/tech/1023556171/
ここ行って聞きなさい。
0618デフォルトの名無しさん
2005/10/19(水) 23:16:46この問題、点数を二次元配列でもったら、オブジェクト指向のしようがない気がする。
0619デフォルトの名無しさん
2005/10/19(水) 23:20:14人クラスを作って、そのインスタンスの要素数3の配列作るのが妥当か・・・?
0620デフォルトの名無しさん
2005/10/19(水) 23:27:11その後そのコードをオブジェクト指向に書き換えさせるって方針なんじゃない?
だから多分後で>>615のプログラムをオブジェクト指向を用いて作成せよってのをやると思うよ。
まあ勝手な憶測でしかないんだけど。
うちの学校はオブジェクト指向の授業が無いから羨ましい。
0621デフォルトの名無しさん
2005/10/19(水) 23:32:23それ恐ろしく効率悪いというか意味無いだろ
あくまでOOPは分析・設計レベルから実装までの一貫した流れな訳で
一旦手続き指向で実装した物をオブジェクト指向で実装し直すとか意味ナサス
つ憂鬱なプログラマのためのオブジェクト指向
0622デフォルトの名無しさん
2005/10/19(水) 23:39:550623デフォルトの名無しさん
2005/10/19(水) 23:50:21#include <stdio.h>
struct Student {
char name[2];
int score[4];
};
int Sum(struct Student s) {
return s.score[0] + s.score[1] + s.score[2] + s.score[3];
}
double Ave(struct Student s) {
return Sum(s) / 4.0;
}
void main() {
struct Student s[3] = {{"A", 70, 80, 75, 60}, {"B", 75, 83, 70, 70}, {"C", 60, 76, 70, 55}};
char* format = "%s : %d %d %d %d : sum = %d, ave = %.2f\n";
char dimArray[3][128]; // 二次元配列!
int i;
for (i = 0; i < 3; i++) {
sprintf(dimArray[i], format, s.name, s.score[0], s.score[1], s.score[2], s.score[3], Sum(s), Ave(s));
}
for (i = 0; i < 3; i++) {
printf("%s", dimArray[i]);
}
}
0624デフォルトの名無しさん
2005/10/19(水) 23:55:43題意を満たすために二次元配列を強引に入れてるのにワロタw
0625デフォルトの名無しさん
2005/10/20(木) 00:06:07問題文とか解説ってWeb上にあるなら、URL晒してくれ。
0626デフォルトの名無しさん
2005/10/20(木) 00:12:50491じゃないけど、梅谷センセから検索すると、
ttp://www.se.uec.ac.jp/lab/yura-lab/umetani/lecture.html
ttp://www.se.uec.ac.jp/lab/yura-lab/umetani/nanzan2005/report2005.txt
あたりでしょう。
0627デフォルトの名無しさん
2005/10/20(木) 00:25:59締め切りから察するにこっちかな・・・
ttp://www.se.uec.ac.jp/lab/yura-lab/umetani/uec2005
ぼちぼち、アルゴリズムから理解していきます。
0628デフォルトの名無しさん
2005/10/20(木) 02:22:16[2] 問題文:0〜1の擬似乱数を30000個ずつ3行発生させ、その平均と分散を求めるプログラムを作成せよ。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Fujitsu Fortran&C Academic Package V2.1
[3.3] 言語: C言語
[4] 期限:2005年10月25日
[5] その他の制限:なし
別スレからの誘導で来ました。マルチと呼ばないでください…orz
0629628
2005/10/20(木) 02:22:55どうもうまくいかなくて、どこをどう書き換えたらいいのかわかりません…。
それとも、書き換えるのでは駄目なんでしょうか??
これがそのプログラムです…
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
int i,j;
/* 乱数系列の変更 */
srand((unsigned) time(NULL));
/* 1〜100の擬似乱数を10個ずつ10行発生 */
for (i=1; i<=10; i++) {
for (j=0; j<10; j++) {
printf("%3d ",rand()%100+1);
}
printf("\n");
}
return 0;
}
すみませんが、卒業かかってるので本当によろしくお願いします…。
0630デフォルトの名無しさん
2005/10/20(木) 02:27:21(0,1)
[0,1]
(0,1]
[0,1)
のどれだ?
0631デフォルトの名無しさん
2005/10/20(木) 02:45:06[8050h] ← [8051h] + [8052h] を計算し、符号付2進数加算としてのオーバーフローを判定する。
(オーバーフローのとき Cy ← 1、オーバーフローでないとき Cy ← 0 とする)
オーバーフローの判定方法を付け加えること。
0632デフォルトの名無しさん
2005/10/20(木) 02:56:05できればスレタイを65535回ほど読んで欲しいかなー
0633628
2005/10/20(木) 03:35:25(0,1)
[0,1]
(0,1]
[0,1)
の違いがわかりません…。発生させたいのは、0.ナニナニの小数です…
0634デフォルトの名無しさん
2005/10/20(木) 03:45:57上から順に
0.0 < x < 1.0
0.0 ≦ x ≦ 1.0
0.0 < x ≦ 1.0
0.0 ≦ x < 1.0
ようするに境界を含むかどうか
ところでそれが卒研なのか?
0635628
2005/10/20(木) 03:57:18…はい、コレを卒研で使うんですけど、もう全然ムリポで…。
私、建設学科なのに…orz
0636デフォルトの名無しさん
2005/10/20(木) 04:55:44printf("%f ", (1.0 / (RAND_MAX + 1.0)) * (rand() + 0.5));
『C言語による最新アルゴリズム辞典』の乱数の項を参考にした。
この方法は0や1にならない。
0637デフォルトの名無しさん
NGNGいろんなサイト見てみたけどわけわかめです。
サイトに載ってたのには実行画面にC:\があるんですが、
実行してもこれが出ません。どうすれば出るんでしょうか?
ちなみにコマンドプロンプト起動したらC:\Documents and Settings\名前>
が出てこっちでもできません。
環境:OS:XP、コンパイラ:VCです。
期限:出来れば8:40までに・・・
0638637
NGNG0639628
2005/10/20(木) 07:29:03とりあえず学校行ってきます!!
0640デフォルトの名無しさん
2005/10/20(木) 07:30:080642デフォルトの名無しさん
2005/10/20(木) 07:42:350643637
NGNGでも結局コマンドラインから入力できないorz
ちょっとコードのミスを探してきます。
0644デフォルトの名無しさん
2005/10/20(木) 08:02:28脳内コンパイルで妥当かどうかもチェックしてません。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
int i,j;
double v,sum,/*合計*/var,/*分散*/ave;/*平均*/
/* 乱数系列の変更 */
srand((unsigned) time(NULL));
/* 0〜1の擬似乱数を30000個ずつ3行発生 */
for (i=0; i<3; i++) {
for (j=0,sum=0,var=0; j<30000; j++){
v = (rand()+0.5)/(RAND_MAX+1.0);
sum += v;
var += v*v;
}
ave = sum / 30000;
var = var / 30000 - ave*ave;
printf("%f %f\n",ave,var);
}
return 0;
}
0645デフォルトの名無しさん
2005/10/20(木) 09:26:02�@で作ったのを利用して他のをやっていきたいんですが、それにその都度乱数の量を指定できないので・・・
起動に./ファイル 1000 などのような感じでやっていきたいのですが・・・うまく説明できなくてごめんなさい。
0646デフォルトの名無しさん
2005/10/20(木) 11:00:53お前うちの大学だな。金曜の演習の課題か。
printf("データの個数を入力\n");
scanf("%d", &n);
を消して
n = atoi(argv[2]);
ってコードを追加してみろ。
./コマンド名 出力ファイル名 1000 とか入れればその数だけ乱数が生成される。
ちなみにatoiは引数の文字列をint型に変換する関数だ。あとは自分で調べろ。
0647デフォルトの名無しさん
2005/10/20(木) 12:17:52どなたか>>563のプログラムを完成させてください。
0648デフォルトの名無しさん
2005/10/20(木) 12:25:150649デフォルトの名無しさん
2005/10/20(木) 12:29:060650デフォルトの名無しさん
2005/10/20(木) 12:53:190651デフォルトの名無しさん
2005/10/20(木) 13:10:38ところでコンパイルすると
警告 W8060 6k.c 29: おそらく不正な代入(関数 bin_tree_add )
こんなのが出るんですけど無視して良いんですかね? 実行はちゃんとできました
0652デフォルトの名無しさん
2005/10/20(木) 13:35:08○○社で大規模爆発事故
原因は面接に来た学生のイオナズン
3月1日午後、○○社(東京中央区)で大規模な爆発事故が発生し、
社員ら約300名が100以上のダメージの大怪我を負った。死者はいない模様。
原因は面接に来た学生が唱えたイオナズンと見られている。
「イオナズンを使うぞ」「使えるものなら使ってみろ」といった押し問答の後、
逆上した学生がイオナズンを唱えたという。
「どうせMPが足りないと思っていた。まさか本当に使うとは」
(面接を担当した○○社の社員)
「最近の若者はすぐにキレやすいし、MPも10年前に比べると
格段に増えている。マホカンタやマホトーンなど自分で自分を
守らないといけない」と関東学院大学牛島助教授(呪文心理学)は警告する。
関連記事 社会面
経済面
0653507
2005/10/20(木) 13:45:26助かりました。
ところで私のPCでそのプログラムを実行したところ、
結果が
bash-2.05b$ gcc src10-20.c
bash-2.05b$ ./a.out
3
kido
sato
ito
このようになったのですが、これはどこに問題があるのでしょうか?
0654デフォルトの名無しさん
2005/10/20(木) 13:55:02タイマーつけました。
しかしさらにこれに何かオプション的なものをつけろと言われたのですが。
何かいい案ありませんか?
Windows C++ 特に制限はありません。
0655デフォルトの名無しさん
2005/10/20(木) 13:58:130656デフォルトの名無しさん
2005/10/20(木) 14:37:280658デフォルトの名無しさん
2005/10/20(木) 15:34:21[2] 組み合わせの数nCmを求める関数を作成し,この関数が正しく計算できることを調べるmain関数も作成せよ.
ここで,nとmは入力によって求めることとし,組み合わせの数nCmを求める関数は次のようだとする.
int combi(int n, int m);
[3] 環境
[3.1] OS: Redhat Linux
[3.2] gcc ver?
[3.3] C
[4] 21日(明日)の正午
[5] ポインタは未だ習っていません
0659デフォルトの名無しさん
2005/10/20(木) 15:52:55#include<stdio.h>
int combin(int n,int m){
if(n==m || m==0)return(1);
return(combin(n-1,m-1)+combin(n-1,m));
}
int main(void){
int i,j;
for(i=1;i<=10;i++){
for(j=0;j<=i;j++){
printf("%dC%d = %d\n",i,j,combin(i,j));
}
}
}
0660デフォルトの名無しさん
2005/10/20(木) 16:54:57int combi(int n, int m);
int combi(int n, int m)
{
int i,s;
if(n<m||n<1)
return 0;
else if((n>=1&&m==0)||n==m)
return 1;
else
{
for(i=0,s=1;i<m;i++)
s *= (n-i);
for(;m>1;m--)
s /= m;
return s;
}
}
int main(void)
{
int n,m;
printf("n=");
scanf("%d",&n);
printf("m=");
scanf("%d",&m);
printf("%dC%d = %d\n",n,m,combi(n,m));
return 0;
}
0661デフォルトの名無しさん
2005/10/20(木) 17:00:39return ((n/m)*combi(n-1, m-1));
else return 1;
ってやったらだめだったんだけど何でかね?
0662デフォルトの名無しさん
2005/10/20(木) 17:35:050663デフォルトの名無しさん
2005/10/20(木) 17:40:460664デフォルトの名無しさん
2005/10/20(木) 18:28:49今から作るしちょっと待ってろ。
0665デフォルトの名無しさん
2005/10/20(木) 18:49:100666デフォルトの名無しさん
2005/10/20(木) 18:51:330667デフォルトの名無しさん
2005/10/20(木) 18:54:450669デフォルトの名無しさん
2005/10/20(木) 19:10:06> var += v*v;
ここって
vat += (v-ave)*(v-ave)
じゃなかったっけ。
結局2パス必要になると思う
0670デフォルトの名無しさん
2005/10/20(木) 19:14:200671デフォルトの名無しさん
2005/10/20(木) 19:23:04(1/n) (x - x~)^2
= (1/n) x^2 − (x~)^2
だから、
var += v * v;
した後に、
var = var / n - ave * ave;
で分散になる。
0672デフォルトの名無しさん
2005/10/20(木) 19:44:10データ数nは3、平均x~は2。
(1/n) (x - x~)^2
= (1/3) { (1 - 2) ^ 2 + (2 - 2) ^ 2 + (3 - 2) ^ 2) }
= (1/3) { 1 ^ 2 + 0 ^ 2 + 1 ^ 2 }
= (1/3) (1 + 1) = 2/3
(1/n) x^2 − (x~)^2
= (1/3) (1 ^ 2 + 2 ^ 2 + 3 ^ 2) - 2 ^ 2
= (1/3) (1 + 4 + 9) - 4
= (1/3) (14) - (12 / 3)
= 2/3
ありゃ。この計算では正しいな。
0673デフォルトの名無しさん
2005/10/20(木) 19:49:52ポインタresultが指すメモリ領域にコピーするプログラムをつっくたのですが、エラーが出てしまうのですがどこが間違ってるのか教えてください!!
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define BUFFER_SIZE 100
void capitalizeCopy(char*, char*);
int main(void)
{
char *buffer, *result;
buffer = (*char)malloc(sizeof(char));
result = (*char)malloc(sizeof(char));
printf("input string: ");
fgets(buffer, BUFFER_SIZE, stdin);
capitalizeCopy(result, buffer);
printf("buffer: %s", buffer);
printf("result: %s", result);
exit(0);
}
void capitalizeCopy(char *dest, char *src)
{ while (src != '\0')
if (islower(*src)) { *dest = *src - 32; }
else { *dest = *src; }
src++;
}
}
0674デフォルトの名無しさん
2005/10/20(木) 19:55:170675デフォルトの名無しさん
2005/10/20(木) 19:56:25ネタだろ
0676デフォルトの名無しさん
2005/10/20(木) 19:56:50ソースコード張りなおし.お前が本当に書いたソースコードを手で写さずにコピーペーストしろ.
あと,エラーが出るならそのエラーメッセージも手で写さずにコピーペーストしろ.
0677デフォルトの名無しさん
2005/10/20(木) 20:07:45手持ちの統計学の教科書にも計算上便利な1/nΣx^2 - x~^2が使えるって書いてあるしな
ただし、場合によっては桁落ちが落ちるので気をつけろとも書いてあるが
0678デフォルトの名無しさん
2005/10/20(木) 20:09:520679デフォルトの名無しさん
2005/10/20(木) 20:13:460680669
2005/10/20(木) 20:24:51ttp://www.kwansei.ac.jp/hs/z90010/sugakuc/toukei/avgvar/avgvar.htmの下の2.
勉強になったよ
0681デフォルトの名無しさん
2005/10/20(木) 21:17:51[2]データの個数nとデータa1,a2...anの値をファイルにdate1.dから読み込みデータ
と平均値と標準偏差を計算し、結果をファイルdate2.dに出力するプログラムを作り
なさい。
10個のデータは適当な数字でよい
[3.1]xp
[3.2]わからないでです
[3.3]C
[4]10月21日16時30分
[5]わからなくて困ってます。よろしくお願いします。
0682デフォルトの名無しさん
2005/10/20(木) 21:32:15データの個数はn個?10個?
data1.d、data1.dのフォーマットは?
0683682
2005/10/20(木) 21:33:140684デフォルトの名無しさん
2005/10/20(木) 21:51:58あれはnとΣxとΣx2だけ保存しておいてx~, σn, σn-1は押されたときに計算するだけだぞ。
#昔の関数電卓ではちゃんと取り説で解説されていたのだが……
0685デフォルトの名無しさん
2005/10/20(木) 22:03:40漏れの関数電卓は回帰直線・曲線も求めることができるんだが
これも全データは取っておいてないの?
0686681のものです。
2005/10/20(木) 22:12:43流れとしてはまずdate1.dに10個の数字を入れておいてそれを問題のプログラムに計算させてdate2.dに出力させるわけですが、プログラムの部分が全然わからずすすまないんですよ。
0687デフォルトの名無しさん
2005/10/20(木) 22:16:211次回帰ならΣx, Σy, Σxy, Σx2, Σy2があれば計算できる。
2次回帰でも1次回帰のほかにΣx3, Σx2y, Σx4辺りがあればいい。
#式の詳細は「一次/二次回帰分析」で検索すると出てくる漏れのサイトにも書いてある。
0688デフォルトの名無しさん
2005/10/20(木) 22:24:29[2] string str;
str = "さんたすよん";が与えられたとする。
このとき,さんを数字の3に,よんを数字の4に,たすを演算子+になおし,その結果を表示するプログラムを考えよ
[3] 環境
[3.1] OS: WindowsXP SP1
[3.2] Borland C++ Compiler 5.5
[3.3] C++
[4] 期限: [2005年10月27日09:00まで]
[5] その他の制限: 特にありません
0689デフォルトの名無しさん
2005/10/21(金) 00:17:07●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●(´・д・`)●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
これを見た人は確実に【不合格】です。これをコピペでどこかに1回貼れば回避できます。
これは本当です。やらないと一年無駄になります
0690625
2005/10/21(金) 00:19:13あり? 2つの方法で、実装2つ作ったけど・・・一致しねぇ。。。
まあいいか、俺の仕事じゃねぇし・・・
時間があったら3つ目の実装つくってみるべ・・・。
デバッグとか考えて作りましょう>わし
0691デフォルトの名無しさん
2005/10/21(金) 00:58:52#include <stdio.h>
#include <math.h>
int main(void)
{ FILE* fp=fopen("data1.d", "r");
int n, i, data;
double ave, var;
fscanf(fp, "%d", &n);
ave = var = 0.0;
for( i = 0 ; i < n ; i++ ) {
fscanf(fp, "%d", &data); ave += data; var += data * data;
}
fclose(fp);
ave /= n; var = var / n - ave * ave;
fp = fopen("data2.d", "w");
fprintf(fp, "Ave:%f\nSig:%f\n", ave, sqrt(var));
fclose(fp);
return 0;
}
テキストの形は次の行から
10 // データ数 n (コメントはデータファイルに書かない。あくまで説明用。)
1234 // データ1個目
:
8374 // データ最後
上の行まで、という感じで。
0692デフォルトの名無しさん
2005/10/21(金) 01:02:32ネタだと思うが敢えてマジレス。
なんでBUFFER_SIZEを1000に設定してるのにmallocで1バイトしか確保しとらんの?
しかもBUFFER_SIZE分読み込もうとしてるし。
これじゃ下手したらSegmentation faultするぞ。
自分にバッファオーバーフロー攻撃してどうする?
あと小文字=>大文字変換用関数。ただし必要最小限の機能だけ。
void Capitalize(char *org,char *dest)
{
char *ptr;
for(ptr = org;*ptr != '\0';ptr++){
if(islower(*ptr))
*dest++ = toupper(*ptr);
}
}
あとはどうにでもなるだろ。
0693デフォルトの名無しさん
2005/10/21(金) 01:08:58unsigned charにキャストしる
0694デフォルトの名無しさん
2005/10/21(金) 01:10:500695628
2005/10/21(金) 02:53:38実行してみたところ、6つの乱数が出てきたのですが、それでいいのでしょうか??
0696デフォルトの名無しさん
2005/10/21(金) 02:59:38[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/998.txt
ここにあるNameFileのアルファベット氏名を使って,
一行分の各データを読み込み、各個人データをメモリ内で二分木を一旦作成して,
それから,アルファベット順に名前データを表示するプログラムを作って下さい.
strcasecmp() を使用すること。
ヒントとしてscanfの使い方が与えられてます↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/994.txt
[3] 環境
[3.1] Windows/Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: 2日以内
[補足]上記の問題は>>577と同じようですが、以下の点が違います
NameFileの中身が、[03TI001 阿部 恒彦 j0301at Abe Tsunehiko]から
[03TI001,阿部 恒彦,g2,Abe,Tsunehiko,0123450]と、コンマで区切られている
因みにそれぞれ[ユーザーID,漢字氏名,学年,e苗字,e名前,学籍番号]となっています。
>>577のに比べて人数が減っているのは気にしなくていいです
因みに>>577の解答コードは>>583です、これをうまく改造すればいいのでしょうが
どうもうまくいきません、コーディングをお願いしますm(__)m
0697デフォルトの名無しさん
2005/10/21(金) 03:08:19ファイル形式が違うだけなら、フォーマット文字列を"%[^,],%[^,],%[^,],%[^,],%[^,]\n"にでもして、
漢字名の部分を姓名二つのメンバから一つのメンバに換えればよろしかろ。
0698デフォルトの名無しさん
2005/10/21(金) 04:20:25http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/999.c
NameFileの最後の1件に学年がないから、read errorで終了しちまうけどな。。
0699698
2005/10/21(金) 04:35:23× if(i != 6)
○ if(i == 6)
0700696
2005/10/21(金) 04:43:44NameFileをちゃんと書き直しても、read errorで終了してしまいます・・・。
何故なんでしょう・・・。
因みにコンパイルすると
警告 W8060 NF.c 29: おそらく不正な代入(関数 bin_tree_add )
ってのが出ます
0701696
2005/10/21(金) 04:45:40ありがとうございましたm(__)m
0702644
2005/10/21(金) 08:00:56……えーと、ソース読めばわかると思うけど表示してるのは平均と分散。
乱数部分は全部表示してたら鬱陶しいと思って表示を切ってある。
もし表示したいなら、君が最初に見せたソースと同じ要領で、
printf文で%fを指定してvを表示してくれ。
0703デフォルトの名無しさん
2005/10/21(金) 09:51:13[2] 問題文:
static double data[] = {1.23, 2.34, 3.45, 4.56, 0.98};
上記のように double 型の配列を宣言、初期化した場合、
各データはメモリ空間上のどのようなアドレスに格納されているか
数値と一緒に表示せよ。
次に、データ中の最大値を探して表示するプログラムを作成せよ。
なお、配列の各要素を参照する場合、ポインタ変数を使用すること。
※printf文におけるアドレス表示の変換指定子は %p を利用すること
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:10/24まで
[5] その他の制限:ポインタを習い始めたばかりです。
どなたかご教授お願いします。
0704デフォルトの名無しさん
2005/10/21(金) 10:35:32#include <stdio.h>
static double data[] = {1.23, 2.34, 3.45, 4.56, 0.98};
int main(int argc, char **argv)
{
double *p = data, *max = data;
int i, num = sizeof(data)/sizeof(double);
for(i = 0; i < num; i++, p++) {
printf("data[%d]のアドレス = %p, data[%d]の値 = %lf\n", i, p, i, *p);
if(*max < *p) {
max = p;
}
}
printf("最大値 = %lf\n", *max);
return 0;
}
0705デフォルトの名無しさん
2005/10/21(金) 11:05:56[2] 問題文(含コード&リンク):
累計
1 2 3 4 5 15
7 8 9 10 49
13 14 15 91
19 20 130
25 155
上の様に表示するプログラムを作る
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VS.net
[3.3] 言語: C
[4] 期限:2005年10月23日0:00まで
[5] その他の制限:配列を使わないで作成
0706705
2005/10/21(金) 11:10:041 2 3 4 5 15
7 8 9 10 49
13 14 15 91
19 20 130
25 155
訂正です
よろしくお願いします
0707705
2005/10/21(金) 11:17:19上手くいかないのでアップローダーを使わせてもらいます
よろしくお願いします
0708デフォルトの名無しさん
2005/10/21(金) 11:24:50#include <stdio.h>
int main(){
printf(
"累計\n"
"1 2 3 4 5 15\n"
"7 8 9 10 49\n"
"13 14 15 91\n"
"19 20 130\n"
"25 155\n"
);
return 0;
}
ほい
マジレスすると問題文に転載漏れあるだろ?
それを追加してから出直してきてください。たぶん入力された数字の和を求めよとかそういうのだと思うけど。
しかしCの演習でVisual Studioとはリッチな学校だな
0709708
2005/10/21(金) 11:25:400711デフォルトの名無しさん
2005/10/21(金) 11:53:12(・∀・)ニヤニヤ
0712デフォルトの名無しさん
2005/10/21(金) 12:17:34対応しないといけない数はそれだけ?他の入力とかは考慮しなくていいの?しなきゃいけないならその個数は?
0713712
2005/10/21(金) 12:18:400714デフォルトの名無しさん
2005/10/21(金) 12:49:38>>707がサンプルでないなら、>>708が回答だろw
0715デフォルトの名無しさん
2005/10/21(金) 13:09:58どなたか>>563のプログラムを実行して結果を貼ってください、おねがいします。
0716デフォルトの名無しさん
2005/10/21(金) 13:13:410717デフォルトの名無しさん
2005/10/21(金) 13:18:49機種依存しそうなコードじゃないので715の行いに問題があると考えられる
0718デフォルトの名無しさん
2005/10/21(金) 13:19:30どうして実行できないのか書いたほうがいいよ。
例えばこんなエラーが出たとか。
0719デフォルトの名無しさん
2005/10/21(金) 13:47:56問題文が本当にそれだけなら出題者がだいぶボンクラであるに違いない。
あと、配列がダメなら文字列もアウトか?
0720デフォルトの名無しさん
2005/10/21(金) 14:02:340721デフォルトの名無しさん
2005/10/21(金) 14:46:03[2] 問題文:
データの個数nとデータa1,a2,・・・anの値をファイル(A.d)から読み込み、
データの平均値と標準偏差を計算して結果を別のファイル(B.d)に出力するプログラムを作り、
データの値が
90.4, 70.6, 29.3, 48.2, -12.8,
33.3, -21.8, 35.6, 99.9, 38.9,
の10個の場合について求めよ。
[3] 環境
[3.1] OS:Windows
[3.3] 言語: C
[4] 期限: [2005年10月22日まで]
[5] その他の制限:ありません
お願いします。
0722デフォルトの名無しさん
2005/10/21(金) 16:12:22#include <stdio.h>
#include <math.h>
int main() {
double a[100]; /* データ数は高々 99 と仮定 */
int n, i;
double m = 0, sigma2 = 0;
FILE *fin, *fout;
fin = fopen("A.d", "r");
for (n = 0; fscanf(fin, "%lf,", &a[n]) != EOF; ++n);
fclose(fin);
for (i = 0; i < n; ++i) m += a[i] / n; /* m = Σa[i]/n */
for (i = 0; i < n; ++i) sigma2 += pow(a[i]-m, 2) / n; /* σ^2 = Σ(a[i]-m)^2/n */
fout = fopen("B.d", "w");
fprintf(fout, "m = %lf, sigma = %lf\n", m, sqrt(sigma2));
fclose(fout);
}
0723デフォルトの名無しさん
2005/10/21(金) 16:22:590724デフォルトの名無しさん
2005/10/21(金) 16:30:330725デフォルトの名無しさん
2005/10/21(金) 16:32:17入力した整数が入っている変数を n とするとif (!(n % 3))。
0726681
2005/10/21(金) 16:47:46ありがとうございます。
0728722
2005/10/21(金) 16:54:570729デフォルトの名無しさん
2005/10/21(金) 17:05:550730デフォルトの名無しさん
2005/10/21(金) 17:49:34ありがとうございます
0731デフォルトの名無しさん
2005/10/21(金) 20:54:08[2] 問題文(含コード&リンク):
素数を求めるプログラムを作成せよ。素数を求める範囲(下限 上限)を標準入力から入力すること。
求めた素数はファイルout.txtに出力すること。main関数の他に引数として与えた数が素数なら1、素数でないなら
0を返す関数を作成すること。
[3] 環境
[3.1] OS: WINxp
[3.2] Borland BCC dev
[3.3] 言語: C
[4] 期限: 今月中
おながいします!
0732デフォルトの名無しさん
2005/10/21(金) 21:14:57確か素数を見つけるアルゴリズムが有ったと思うが
俺はよく知らないので時間のかかる奴でもいいか?
0733デフォルトの名無しさん
2005/10/21(金) 21:17:53はい
0734デフォルトの名無しさん
2005/10/21(金) 21:19:450735デフォルトの名無しさん
2005/10/21(金) 21:32:250736デフォルトの名無しさん
2005/10/21(金) 21:45:08エラトステネスの篩使ってるのにめっちゃ無駄が多い(w
#include <stdio.h>
#include <stdlib.h>
int is_prime(int upper) {
int i, notprime, *integers = (int*)malloc(sizeof(int) * (upper + 1)), ret;
for (i = 2; i <= upper; i++) integers[i] = 1;
integers[0] = integers[1] = 0;
for (i = 2; i <= upper / 2; i++) {
notprime = i;
while ((notprime += i) <= upper) integers[notprime] = 0;
}
ret = integers[upper];
free(integers);
return ret;
}
int main(void) {
int upper_num, lower_num, i;
FILE* fp = fopen("data.txt", "w");
scanf("%d%d", &lower_num, &upper_num);
for (i = lower_num; i <= upper_num; i++)
if (is_prime(i)) fprintf(fp, "%d\n", i);
fclose(fp);
return 0;
}
0737デフォルトの名無しさん
2005/10/21(金) 22:00:10・・・mallocの正否を確認していませんが。
いつもそうなのですか?
0738デフォルトの名無しさん
2005/10/21(金) 22:05:54やってもらったのにすいませんが、なんか割り算をして求める方法らいしです!
0739628
2005/10/21(金) 22:06:34卒研もうまくいきそうです。本当に助かりました!!
あなたは ネ申!!!
0740デフォルトの名無しさん
2005/10/21(金) 23:06:17んじゃこれで。n % iがnをiで割った余りだから。
#include <stdio.h>
int is_prime(int n) {
int i;
for (i = 2; i <= n / 2; i++) if (n % i == 0) return 0;
return 1;
}
int main(void) {
int i, upper_num, lower_num;
FILE* fp = fopen("data.txt", "w");
scanf("%d%d", &lower_num, &upper_num);
for (i = lower_num; i <= upper_num; i++)
if (is_prime(i)) fprintf(fp, "%d\n", i);
fclose(fp);
return 0;
}
>>737
どゆこと?
0741デフォルトの名無しさん
2005/10/21(金) 23:10:17ありがとうございます。これをヒントに考えてみます
0742デフォルトの名無しさん
2005/10/21(金) 23:14:11下限や上限が整数でない場合はどうしたらいいですか?double型を使うとして
for文のところがわからないです
0743デフォルトの名無しさん
2005/10/21(金) 23:23:28釣りか?と思いつつも。
#include <stdio.h>
#include <math.h>
int is_prime(int n) {
int i;
for (i = 2; i <= n / 2; i++) if (n % i == 0) return 0;
return 1;
}
int main(void) {
int i, upper_num, lower_num;
double upper, lower;
FILE* fp = fopen("data.txt", "w");
scanf("%lf%lf", &lower, &upper);
upper_num = floor(upper);
lower_num = ceil(lower);
for (i = lower_num; i <= upper_num; i++)
if (is_prime(i)) fprintf(fp, "%d\n", i);
fclose(fp);
return 0;
}
0744デフォルトの名無しさん
2005/10/21(金) 23:27:23例えば下限に6.5が入力されたとして、for文で1ずつ足していくと7とかが無視されないですか?
0745デフォルトの名無しさん
2005/10/21(金) 23:27:330746デフォルトの名無しさん
2005/10/21(金) 23:28:43おまえは floor と ceil という文字が見えんのか?
というか、なんで実際に動かして試してみろ馬鹿
0747デフォルトの名無しさん
2005/10/21(金) 23:33:48floorとceilは習ってません・・・
0748デフォルトの名無しさん
2005/10/21(金) 23:35:340749デフォルトの名無しさん
2005/10/21(金) 23:37:12実行してみて不具合があったら報告すればよろし。
0750デフォルトの名無しさん
2005/10/21(金) 23:43:39[2] 問題文(含コード&リンク): 30人のテストの得点データを読み込む。得点は0点以上10点以下。
各点数の人数を求め、その人数を点数ごとに*の数で表しなさい。
また、最も人数の多い得点と、最も人数の少ない得点を示しなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.3] 言語: どちらでも可
[4] 期限: 日曜日までにお願いします。
[5] その他の制限: 配列を利用しなさいということ以外は特に指定はありませんでした。
お願いします。
0751デフォルトの名無しさん
2005/10/21(金) 23:51:180752デフォルトの名無しさん
2005/10/21(金) 23:53:500753デフォルトの名無しさん
2005/10/21(金) 23:57:260754デフォルトの名無しさん
2005/10/21(金) 23:58:220755デフォルトの名無しさん
2005/10/22(土) 00:03:03#include <iostream>
#include <fstream>
#include <algorithm>
int main() {
int scores[10+1];
std::fill(scores, scores+11, 0);
std::ifstream ifs("score.dat");
for (int i = 0, x; i < 30; ++i) ifs >> x, scores[x]++;
for (int i = 0; i <= 10; ++i) {
for (int j = 0; j < scores[i]; ++j) std::cout << '*';
std::cout << std::endl;
}
int minid = 0, maxid = 0;
for (int i = 0; i <= 10; ++i) {
if (scores[i] < scores[minid]) minid = i;
if (scores[i] > scores[maxid]) maxid = i;
}
std::cout << minid << "," << maxid << std::endl;
}
0756デフォルトの名無しさん
2005/10/22(土) 00:07:02スマソ_| ̄|○
C++の間違いだった……。
0757デフォルトの名無しさん
2005/10/22(土) 00:15:140758705
2005/10/22(土) 01:10:16整数の値は各行に5個ずつ
各行の終わりにはそれまでの累計を表示
逆階段の様に表示するプログラムです
同時に出された問題2はは
1〜25までの好きな数字を入力して
入れた数字まで整数の値を各行に表示(6だったら5まで表示
行の累計だけではなく
列の累計も表示するプログラムです
おそらく最初の問題は2番目の問題の雛形だと思います
最初の問題だけ教えてもらって
後半は自力で解こうとした為
説明不足になってしまいました
改めてよろしくお願いします
0759デフォルトの名無しさん
2005/10/22(土) 08:19:53>最も人数の多い得点と、最も人数の少ない得点を示しなさい。
ここは自分でやってくれい
#include <iostream>
#include <vector>
using namespace std;
void input_result( vector<int> &v ){
int i;
for( i=0; i<30; i++ )
v.push_back( rand()%11 );
}
0760デフォルトの名無しさん
2005/10/22(土) 08:22:59void show( vector<int> v ){
int i;
for( i=0; i<=10; i++ )
{
cout << i << ": ";
vector<int>::iterator p = v.begin();
while( p != v.end() )
{
if( i == *p )
cout << "*";
p++;
}
cout << endl;
}
}
int main()
{
vector<int> v;
input_result(v);
show(v);
return 0;
}
0761デフォルトの名無しさん
2005/10/22(土) 21:36:59[2] 環境
[2.1] OS: Linux
[2.2] コンパイラバージョン: gcc
[2.3] 言語: C
[3] 期限: 木曜16時
[4] 問題:任意の2自然数に関する最小公倍数計算のためのルールを見出し、それにもとづきアルゴリズムを考案し、
プログラムを作成・実行せよ。2数は使用者がプログラム実行時に打ち込めるものとする。
<出力例1> Please input first number:60 ←60を入力
Please input second number:84 ←84を入力
The least common multiple of 60 and 84 is 420
<入出力例2>Please input first number:84 ←84を入力
Please input second number:84 ←84を入力
The first number (84)is equal to the second(84).
Try again!
<ルール確率のためのヒント>
以下に60と84の最小公倍数の求め方を示す。
�@60と80は2で割れる
�A30と40は2で割れる
�B15と21は3で割れる
�C5と7を割れる数はない
�D2*2*3*5*7=420が最小公倍数
上記手順は人間の勘に依存する部分があるので、そのままアルゴリズム化できない。
ルールを確立するためには、以下の点に着目。
「1」手順�Cにおける2数(5と7)間に1以外の公約数はない。
「2」2*2*3は最大公約数である
「3」最大公約数に5を乗じると60になり、7を乗じると84になる
以上が課題ですよろしくお願いします・゚・(ノД`)・゚・
0762デフォルトの名無しさん
2005/10/22(土) 21:42:2060=2*30=2*2*15=2*2*3*5
84=2*42=2*2*21=2*2*3*7
最小公倍数 2*2*3*5*7
0763デフォルトの名無しさん
2005/10/22(土) 21:51:06#include <stdio.h>
#include <stdlib.h>
int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }
int lcm(int x, int y) { return x / gcd(x, y) * y; }
int main(void)
{
int x, y;
do {
while (printf("Please input first number:"), scanf("%d", &x) != 1 || x < 0) scanf("%*[^\n]");
while (printf("Please input second number:"), scanf("%d", &y) != 1 || y < 0) scanf("%*[^\n]");
} while (x == y && printf("The first number (%d)is equal to the second(%d)\nTry again!\n", x, y));
printf("The least common multiple of %d and %d is %d\n", x, y, lcm(x, y));
return 0;
}
0764デフォルトの名無しさん
2005/10/22(土) 23:27:51繰り返していくのがなかったっけ?
0765デフォルトの名無しさん
2005/10/22(土) 23:52:49{
if(b) return gcd(b, a%b);
return a;
}
int lcm(int a, int b)
{
return (a/gcd(a,b))*b;
}
0766デフォルトの名無しさん
2005/10/23(日) 01:03:21久しぶりに見たけど色々な人を助けてるようですね。
あの時はありがとう。なんか自分の人生は変わってしまったけど
ここは変わってなくて安心した
0767デフォルトの名無しさん
2005/10/23(日) 02:45:58かなり亀レスだが…
お前の使ってる緑色の教科書の、2分探索木を操作するプログラムを改良して作ったほうがシンプルで楽だぞ…
お前と同じ大学に通っている俺が言うんだから間違いない
0768デフォルトの名無しさん
2005/10/23(日) 05:05:34宿題ってわけではないのですが・・・なぜこうなるのでしょうか。
詳しい解説をしてくれる方いらっしゃいますか?
0769デフォルトの名無しさん
2005/10/23(日) 06:19:34a = [1, 2, 3, 4, 2, 3, 4, 5],d = [a, a+4]
になるのは明らか.funcJ の中で d[0] = a, d[1] = a+4 なので,
for 文の中身は (a+4)[j] += (a)[j].
ここで C 言語では a[k] は *(a+k) の構文糖衣なので,
(a+4)[j] = *(a+4+j) = a[4+j]
となって,for 文の中身は a[4+j] += a[j] と同値.
よって a = {1, 2, 3, 4, 3, 5, 7, 9}
0770デフォルトの名無しさん
2005/10/23(日) 06:23:12a【100】って領域が確保されている以外は図の通りと考えて問題ない。
0771デフォルトの名無しさん
2005/10/23(日) 10:05:47[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1002.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2005年10月24日8:00まで]
よろしくお願いします
0772デフォルトの名無しさん
2005/10/23(日) 10:17:45[2] スタックを用いて、後置式を前置式に変換するアルゴリズムを考える、あるいは調べよ。
プログラムにした場合加点対象とする。
例:54*1+なら、((5*4)+1)
[3] 環境
C言語。WinXP、Borland C++ Compiler 5.5がコンパイラ。
[4] 期限: [2005/10/25]
[5] 半年C言語を習った程度。
アルゴリズムが分かりません。スタックって・・・木構造じゃないのかorz
0773デフォルトの名無しさん
2005/10/23(日) 10:45:580774デフォルトの名無しさん
2005/10/23(日) 10:59:15問題のコードが変だなぁ
UINT_MAX行だけ出力するようになっているし、なぜかintを16ビットと見なしているし。
教科書と言うのは時代に即してないのね
元のコードが動くものであるなら、こんな変更でいいんじゃないかな(コンパイルもしてみてない)
int count_bits(unsigned x)
↓
int count_bits(unsigned char x)
for(i=0;i<UINT_MAX;i++){
print_bits(i);
printf("%6o%5u%4x\n",i,i,i);
}
↓
i=CHAR_MAX;
print_bits(i);
printf("%5u%4x\n",i,i);
0775デフォルトの名無しさん
2005/10/23(日) 11:18:53アルゴリズムとしては,それが項か演算子かを区別して,式を最初から読んでいって
1. 項だったらスタックに突っこむ
2. 演算子だったら二つスタックから取ってきてそれを結合してスタックに突っこみなおす
3. 式を全部読んだらスタックの先頭に結果が入ってる.
例えば 54*1+ だったら,
・5 だからスタックに突っこむ
・4 だからスタックに突っこむ
・* だからスタックから 5 と 4 を取ってきて * でつないで (5*4) を作ってスタックに突っこむ
・1 だからスタックに突っこむ
・+ だからスタックから (5*4) と 1 を取ってきて + でつないで ((5*4)+1) を作ってスタックに突っこむ
で読みきったとき,スタックの先頭には ((5*4)+1) が入ってるはず.
これを普通に書くと↓みたいになる.スタックに文字列を突っこむことになるので最初に語句解析しとくと楽.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1003.c
0776デフォルトの名無しさん
2005/10/23(日) 11:23:380777デフォルトの名無しさん
2005/10/23(日) 12:55:57char buf[256];
int ptr = 0;
中身が頻繁に変わるbufを strに順番に保存しておきたいのですが
strcpy( str[ptr++], buf);
これではだめなんでしょうか?うまくいきません。
0778デフォルトの名無しさん
2005/10/23(日) 12:56:33strに領域割り当ててるか?
0779デフォルトの名無しさん
2005/10/23(日) 13:00:36やり方教えてもらえますか?
ごく簡単でかまいません m(_ _)m
0780デフォルトの名無しさん
2005/10/23(日) 13:02:07char str[256][100]; で strcpy(str[ptr++], buf);
0781デフォルトの名無しさん
2005/10/23(日) 13:10:02恐らく添字が逆
0782デフォルトの名無しさん
2005/10/23(日) 13:14:05ありがとうございます。
文字列をスタックに入れる発想ができませんでした。
文字列を数値に変換するのとか習ってたのに・・・
参考になりました。
0784デフォルトの名無しさん
2005/10/23(日) 16:39:37[1] 授業単元:名前解決を実装するソケットプログラミング
[2] 問題文(含コード&リンク):ドメイン名をIPアドレスに変換するプログラムを作成せよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1004.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2005年10月28日まで]
[5] その他の制限:nslookupやdig等のようにローカルDNSに問合せに行って
ローカルDNSがルートDNSに問い合わせると言う形はNGです。
あくまで、このプログラムが直接ルートDNSに問合せに行き、
名前解決をする必要があります。
0785デフォルトの名無しさん
2005/10/23(日) 16:47:55それと>784をコンパイルし./プログラム名 www.livedoor.co.jpと入力すると
-------------------------
データ送信:www.livedoor.co.jp
データ受信:4294967295
-------------------------
と表示されます。
データ受信の欄にjpドメイン全体を管理するネームサーバのアドレスを表示させ、
順次co全体を管理するネームサーバのアドレス、
livedoor全体を管理するネームサーバのアドレス、
と表示させたいのですが。
0786デフォルトの名無しさん
2005/10/23(日) 20:14:42そりゃぁ、全く間違ったものを表示させようとしているだろ。
0787デフォルトの名無しさん
2005/10/23(日) 20:29:53ルートDNSの53番ポートにドメイン名を送ると、上記の4294967295が返ってきます。
送り方に問題がありそうなのですが、良く分からなくて・・・。
0788デフォルトの名無しさん
2005/10/23(日) 20:31:500789デフォルトの名無しさん
2005/10/23(日) 20:40:470790デフォルトの名無しさん
2005/10/23(日) 20:43:07[2] 問題文(含コード&リンク):
int yaw, pitch, rollに角度(0゚〜360゚=0〜65536)、float distに原点座標からの距離が代入されている。
これをfloat vecx, vecy, veczに原点座標からのベクトル値に変換しなさい。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC.net2003
[3.3] 言語: C++
[4] 期限: [2005年10月24日08:00まで]
[5] その他の制限:特になし、C++に関してはほぼ習得出来ているつもり
宜しくお願いします。
0791デフォルトの名無しさん
2005/10/23(日) 20:47:02ヨーピッチロールとxyzの方向の関係を図示したまえ。
0792質問です。
2005/10/23(日) 22:03:23得るプログラムがどうしても欲しいのです。C++でもCでも良いのです。
注意点を守ってないのは承知の上なのですが、どうしても力を借りたいので
お願いします。
0793デフォルトの名無しさん
2005/10/23(日) 22:04:57libjpeg使え。
0794デフォルトの名無しさん
2005/10/23(日) 22:06:02あれ?自力で調べるんではないの?
http://pc8.2ch.net/test/read.cgi/tech/1129589500/278
0795デフォルトの名無しさん
2005/10/23(日) 22:06:480796デフォルトの名無しさん
2005/10/23(日) 22:17:53>789
なんで、0xffffffffが送られてくるのか理解できてないです。
DNSパケットとかRFCとかをもう少し勉強してきます。
0797デフォルトの名無しさん
2005/10/23(日) 22:19:31そもそもDNS参照は生の文字列を送りつければ結果が返ってくるような単純なものじゃないよ。
0798デフォルトの名無しさん
2005/10/23(日) 22:20:37rootサーバに何してるんだ?
0799デフォルトの名無しさん
2005/10/23(日) 23:27:12>797のおっしゃるとおり、ルートの53番ポートにドメイン名をそのまま送りつけているだけです。
そんな単純な話じゃないんですねorz
0800デフォルトの名無しさん
2005/10/24(月) 11:01:20俺も興味があったのでちょっと調べてるが、とりあえず@ITでも見てみれ
0801デフォルトの名無しさん
2005/10/24(月) 12:27:05下記などをみて頑張ってみます。
http://www.atmarkit.co.jp/fnetwork/rensai/tcp20/03.html
http://www.atmarkit.co.jp/fnetwork/rensai/tcp07/01.html
まずは下記に記載されているDNSパケットの図を見ながらソースに組み込んでみます。
http://www.atmarkit.co.jp/fnetwork/rensai/tcp07/zu5.gif
http://www.atmarkit.co.jp/fnetwork/rensai/tcp20/tcp20_06(L).gif
http://www.atmarkit.co.jp/fnetwork/rensai/tcp20/tcp20_05(L).gif
0802デフォルトの名無しさん
2005/10/24(月) 14:18:02このプログラムをwindowsで表示させたいんです。
ウインドウの左側にファイルから読み込んだデータを表示させ"ソート"というボタンを押したら右側に整列されたデータを表示させるという問題です。
どうかお願いします。
0803デフォルトの名無しさん
2005/10/24(月) 17:02:40ttp://x68000.q-e-d.net/~68user/net/sample/resolver-1.pl
Perlが読めること前提だが、これがまさにそれじゃねーの?
移植に挑戦してみれ
0804デフォルトの名無しさん
2005/10/24(月) 17:43:05そんなGUIの絡んだような宿題は基本的に手間ばかりで宿題の醍醐味に欠けるのでやりたがる人は少ない。
そもそも、>1を読んでくれ。
0805デフォルトの名無しさん
2005/10/24(月) 19:32:59情報ありがとうございます。
実行させてみたところ、私の作りたいものにきわめて類似していることが分かりました。
./resolver-1.pl 198.41.0.4 www.livedoor.com(書式: DNSサーバ名 名前解決ホスト名)
とルートDNSを指定して実行したところ、
権威(1): リソースデータ: A.GTLD-SERVERS.NET
と返ってきて、次に
./resolver-1.pl A.GTLD-SERVERS.NET www.livedoor.com
と実行したところ、
権威(1): リソースデータ: zns05.data-hotel.net
と返ってきて、次に
./resolver-1.pl zns05.data-hotel.net www.livedoor.com
と実行したところ、
回答(1): リソースデータ: 203.131.197.197
と答えの203.131.197.197にたどり着くことが出来ました。
このソースをCに移植して、出来れば一回の入力で、
名前解決が完了できるプログラムを作れるよう今週頑張ってみます。
Perlは以前少し触ったことがありますし、頑張って解読してみようと思います。
0806デフォルトの名無しさん
2005/10/24(月) 23:31:480807デフォルトの名無しさん
2005/10/25(火) 00:41:32[2] 問題文: 24bit BitmapのデータをYUV444,YUV422に変換し保存せよ。
また、YUV444,YUV422のデータを24bit Bitmapに変換し、保存せよ。
[3] 環境
[3.1] OS: Windows2000
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: [2005年10月26日11:00まで]
[5] その他の制限: 変換で外部ライブラリ等の使用は禁止
よろしくお願いします。
0808デフォルトの名無しさん
2005/10/25(火) 02:07:58BitmapとYUV444、YUV422の変換に関しての参考リンク、または説明を。
どうせ授業で何かしら資料提示されてるでしょ?それ出しな。
0809デフォルトの名無しさん
2005/10/25(火) 10:55:24Yamada、Yoshizaki、Suzuki、Kato、Kamata、Kuwata、Maeda
をポインタ配列へ登録し、イニシャルを入力するとそのイニシャルを持つ名前のみを表示するプログラムを作成しなさい
なお、イニシャルの入力はmain()関数にて行い、ユーザ関数は、判別表示のみで行なうようにすること。
どなたかオチカラをm(__)m
0810デフォルトの名無しさん
2005/10/25(火) 10:57:05お前、>>1も読めないのか?
0811デフォルトの名無しさん
2005/10/25(火) 10:57:30[2] 問題文(含コード&リンク):標準入力からよみこんだ2つの整数除算を行い
その解を小数点20桁まで表示させよ。このプログラムでは、ループを回し挌桁を
その都度計算し表示させよ。但し、途中で割り切れたら以後の小数点は求めず、割る数に
0が入力されたら計算はしない。
[3] 環境
[3.1] OS: Unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2005年10月26日20:00まで]
長文すみませんがよろしくお願いします。
0812デフォルトの名無しさん
2005/10/25(火) 11:06:35#include <stdio.h>
#include <string.h>
void print(int s, char *str[], int n);
int main(void)
{
char *str[] = {"Yamada", "Yoshizaki", "Suzuki", "Kato", "Kamata", "Kuwata", "Maeda"};
char buf[128];
while (1) {
printf("イニシャルを入力して下さい(Enterで終了): ");
fgets(buf, sizeof(buf), stdin);
if (*buf == '\n') break;
print(*buf, str, sizeof(str) / sizeof(char *));
}
return 0;
}
void print(int s, char *str[], int n)
{
int i;
for (i = 0; i < n; i++)
if (s == str[i][0])
puts(str[i]);
}
0813809
2005/10/25(火) 11:11:50期限も12時までだったんで助かります。本当にありがとうございました!
いい一日になりそうです
0814デフォルトの名無しさん
2005/10/25(火) 11:29:02今見返したら、string.hいらないや。ま、いいか。
0815809
2005/10/25(火) 11:41:11Call by Referenceを最近習った。
せっかく力を貸してくれたのにちゃんとデンプレ通りにやらない自分が悪いですね‥すいません。
0816デフォルトの名無しさん
2005/10/25(火) 11:42:27かなり適当。
#include <stdio.h>
int main(int argc, char **argv)
{
int a,b,c,i;
scanf("%d %d", &a, &b);
if(b == 0) {
fprintf(stderr, "error: divide by 0");
return -1;
}
for(i = 0; i <= 20; i++) {
c = a / b;
a = (a % b) * 10;
printf("%d", c);
if(a == 0) {
break;
}
if(i == 0) {
putchar('.');
}
}
return 0;
}
0817809
2005/10/25(火) 11:46:16イニシャルを入力してください? Z
該当者無し
実行例2:
イニシャルを入力してください? Y
Yamada
Yoshizaki
こういう風なプログラムらしいです。連カキやばいなぁ‥
0818デフォルトの名無しさん
2005/10/25(火) 11:56:49strはポインタ配列です。それから、bufは入力バッファ。
getchar()では不都合が起きる事があるので、fscanf()にした。
void print(int s, char *str[], int n)
{
int i, f = 0;
for (i = 0; i < n; i++)
if (s == str[i][0]) {
puts(str[i]);
f = 1;
}
if (!f)
puts("該当者無し");
}
0819816
2005/10/25(火) 12:14:19負の数のこと考慮してなかったので訂正。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int a,b,i;
scanf("%d %d", &a, &b);
if(b == 0) {
fprintf(stderr, "error: divide by 0");
return -1;
}
if((a > 0 && b < 0) || (a < 0 && b > 0)) {
putchar('-');
}
a = abs(a);
b = abs(b);
printf("%d", a/b);
a = (a % b) * 10;
if(a > 0) {
putchar('.');
for(i = 0; i < 20 && a > 0; i++) {
printf("%d", a/b);
a = (a % b) * 10;
}
}
return 0;
}
0820デフォルトの名無しさん
2005/10/25(火) 14:14:43[2] 問題文(含コード&リンク):
0-1 1-2 2-0
0-3 3-1 1-0
0-2 2-3 3-0
3-2 2-1 1-3
のデータから
0-1 1-2 2-0 0-3 3-1 2-3
の順で抜き出せ。ただしstlの連想コンテナを用いること。
[3] 環境
[3.1] OS: Win
[3.2] コンパイラ名とバージョン: VC++
[3.3] 言語: C++
[4] 期限: [2005年10月25日24:00まで]
長文すみませんがよろしくお願いします。
0821デフォルトの名無しさん
2005/10/25(火) 16:05:12連想コンテナと言えば、std::mapかstd::multimap(今回はstd::multimapだろう)
になるけど、その抜き出す順序ってのは、どういう規則があるの?
0822デフォルトの名無しさん
2005/10/25(火) 16:35:030-1と1-0は同じ
1-2と2-1は同じ
2-0と0-2は同じ
0-3と3-0は同じ
3-1と1-3は同じ
2-3と3-2は同じ
格納順は
0-1 1-2 2-0 0-3 3-1 1-0 0-2 2-3 3-0 3-2 2-1 1-3
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
○ ○ ○ ○ ○ × × ○ × × × ×
0-1 1-2 2-0 0-3 3-1 2-3
0823デフォルトの名無しさん
2005/10/25(火) 17:27:07サンクス。
>>820
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1007.txt
こんなのでどうですか?
データはinput.txtというファイルに入れて読み取るようにしてあります。
0824デフォルトの名無しさん
2005/10/25(火) 17:44:16教えて下さい。
0825デフォルトの名無しさん
2005/10/25(火) 17:52:49x = gcd(n, d);
n /= x;
d /= x;
gcd は最大公約数。
最大公約数の求め方はぐぐればすぐ出てくると思われ。
0826デフォルトの名無しさん
2005/10/25(火) 17:53:52約分の定義を考えてみよう
それで得られた数値で分子・分母を割る
0827デフォルトの名無しさん
2005/10/25(火) 17:57:080828デフォルトの名無しさん
2005/10/25(火) 17:59:34ユークリッドの互除法を知らないのか。
0829デフォルトの名無しさん
2005/10/25(火) 17:59:42>最大公約数の求め方はぐぐればすぐ出てくると思われ。
0830デフォルトの名無しさん
2005/10/25(火) 18:02:050831デフォルトの名無しさん
2005/10/25(火) 18:03:01http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E4%BA%92%E9%99%A4%E6%B3%95
0832デフォルトの名無しさん
2005/10/25(火) 18:04:13{
int t;
if(b > a)
{
t = a; a = b; b = a;
}
while (b > 0)
{
int r = a % b;
a = b; b = r;
}
return a;
}
0833デフォルトの名無しさん
2005/10/25(火) 18:04:390834デフォルトの名無しさん
2005/10/25(火) 18:05:35int gcd(int a, int b)
{
if(b > a)
{
int t = a; a = b; b = t;
}
while (b > 0)
{
int r = a % b; a = b; b = r;
}
return a;
}
0835デフォルトの名無しさん
2005/10/25(火) 18:07:020836デフォルトの名無しさん
2005/10/25(火) 18:08:040837デフォルトの名無しさん
2005/10/25(火) 18:09:07最初のifは要らない。
>>835
aの値は途中で変わってるが。
0838デフォルトの名無しさん
2005/10/25(火) 18:09:130839デフォルトの名無しさん
2005/10/25(火) 18:11:080840デフォルトの名無しさん
2005/10/25(火) 18:11:280841デフォルトの名無しさん
2005/10/25(火) 18:11:37if文が無いと収束が悪い
0842デフォルトの名無しさん
2005/10/25(火) 18:13:07一回余分な除算をするだけだが。
0843デフォルトの名無しさん
2005/10/25(火) 18:26:34もはやエスパーよりも、クマーのAAの方が適切かもな。
>>842
まあ、ちょこっと841を擁護するなら、除算と比べれば条件分岐の方が処理早い環境もあるわけで。
0844デフォルトの名無しさん
2005/10/25(火) 19:02:19コンソールで動かしてみましたが、0-1としか表示されないです・・・
ソースを拝見したところ、一度データを全部格納してから、更に順に
ペア探索して、見つかったら削除って感じですかね???
自分なりに↑のを元に考えてみたのですが
insertするときに毎回格納したmultimap内でfirstとsecondと対になるペアを探索して
(例えば、最初のデータが0-1なら、multimap内でequal_range(1)で
1-*を検索して、その中からsecondが0のを探すという作業を全データに対して行う)
multimap内に、ペアが無い場合はinsertして、結果出力するなり別個にvectorに格納。
ペアがある場合は何もせずに次に進む。
ちょっとプログラム組んでみます
0845デフォルトの名無しさん
2005/10/25(火) 19:08:29int gcd(FRACTION v){
FRACTION j;
int t;
if(j.numerator >= j.denominator){
do{
t = j.numerator % j.denominator;
j.numerator = j.denominator;
j.denominator = t;
}while(t != 0);
}
j.numerator /= t;
j.denominator /= t;
return j;
}
0846デフォルトの名無しさん
2005/10/25(火) 19:11:06ク、クマー
まあ、素でやってるんだろうけど。
gcd 関数は最大公約数求めるだけにして、それとは別に
x = gcd(j.numerator, j.denominator);
j.numerator /= x;
j.denominator /= x;
0847デフォルトの名無しさん
2005/10/25(火) 19:34:51・関数の引数を FRACTION vとしているのに、次の行からは jを使ってしまっている
→jを全部vに書き換える。
・関数の戻り値が int型なのに、return jと書いている。
→return tと書き換える。
あと根本的な問題として、main関数が存在して無いからどんなに頑張っても無理(他に存在してるなら別)
C言語の最初の授業でmain関数が無いと動きませんって習いませんでしたかい
main以外の関数の作り方を習ってないなら、>>834の上下二行づつを無視して書き換えればいい
if (j.numerator > j.denominator)
{
t = j.numerator; j.numerator = j.denominator; j.denominator = t;
}
while (j.denominator > 0)
{
r = j.numerator % j.numerator; j.numerator = j.numerator; j.denominator = r;
}
これを途中に組み込んで、>>846(xをrに置き換えて)を実行。足りない所は補完しる
0848844
2005/10/25(火) 20:09:25http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1008.txt
出力結果
0 1
1 2
2 0
0 3
3 1
2 3
とりあえず雑ですが出来ました。ヒント有難う御座いました。
0849教えて厨
2005/10/25(火) 21:27:56[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1009.zip
上のpgm形式サンプル画像ファイルに対して次の3つの処理を行ってください。
(1)画像のノイズをメディアンフィルタ等で取った上で、エッジ検出を行った後のエッジ画像を出力してね。
(2)画像内にちらばっている多角形に対してラベリング処理を行って境界線追跡をするか、
あるいは図形を切り出すなどしてそれら図形の周囲長・面積・円形度・モーメント、その他自分で考案した特徴を計算してください。
(3)(2)で求めた特徴量から2〜3の特徴を選び、各図形が特徴空間のどこに位置するか表示してね。
さらに、これらの図形において三角形と円を識別するにはどのような特徴が適当か考察してください。
[3] 環境
[3.1] OS: Windows/Linux/どちらでも実行できること!
[3.2] コンパイラ名とバージョン: gccかVC++6.0、bccどれでも動くのが望ましい
[3.3] 言語: C/C++/どちらでも可
[4] 期限: [2005年10月27日まで]
[5] その他の制限: 制限無し。答えさえ正しければ、何でもOK。
0850デフォルトの名無しさん
2005/10/25(火) 21:33:09> 画像のノイズをメディアンフィルタ等で取った上で、エッジ検出を行った後のエッジ画像を出力してね。
は?それがお願いする態度か?
やり直せ。
0851デフォルトの名無しさん
2005/10/25(火) 21:33:39先生の配ったプリントにまんまそう書いてあるとか。
0852デフォルトの名無しさん
2005/10/25(火) 21:51:230853やり直しました
2005/10/25(火) 22:00:37[1] 授業単元: 画像処理関係
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1009.zip
上のpgm形式サンプル画像ファイルに対して次の3つの処理を行ってください。
(1)画像のノイズをメディアンフィルタ等で取った上で、エッジ検出を行った後のエッジ画像を出力してください。
(2)画像内にちらばっている多角形に対してラベリング処理を行って境界線追跡をするか、
あるいは図形を切り出すなどして
それら図形の周囲長・面積・円形度・モーメント、その他自分で考案した特徴を計算してください。
(3)(2)で求めた特徴量から2〜3の特徴を選び、各図形が特徴空間のどこに位置するか表示してください。
さらに、これらの図形において三角形と円を識別するにはどのような特徴が適当か考察してください。
[3] 環境
[3.1] OS: Windows/Linux/どちらでも実行できるのが望ましい
[3.2] コンパイラ名とバージョン: gccかVC++6.0、bccどれでも動くのが望ましい
[3.3] 言語: C/C++/どちらでも可
[4] 期限: [2005年10月27日まで]
[5] その他の制限: 制限無し。答えさえ正しければよい。
0854デフォルトの名無しさん
2005/10/25(火) 22:01:20スレは「解いてください」じゃなくて「解かせてください」だから。
勘違いしないように
0855デフォルトの名無しさん
2005/10/25(火) 22:05:04そういう態度とるんなら、解いてやる義理はないな。
もう来なくていいよ。
0856デフォルトの名無しさん
2005/10/25(火) 22:07:33折れは単なる閲覧者 >>853ではない
むしろ「解いてやってる」とか勘違いしてる喪前が来るなよ
0857デフォルトの名無しさん
2005/10/25(火) 22:07:51最初から「解いてやる義理」はないんだから
お前こそ来なくていいと思う。
0858デフォルトの名無しさん
2005/10/25(火) 22:09:51と勘違いするヤツは今直ぐこのスレから出てけ
0859853
2005/10/25(火) 22:10:330860デフォルトの名無しさん
2005/10/25(火) 22:11:09発注、受注、閲覧者ともに。
発注側は受注側の確認には答えたほーがいいとは思うが。
0861デフォルトの名無しさん
2005/10/25(火) 22:13:59えーと、どこにそんなこと書いてあるのかな。
テンプレの注意点の2番目には、解いてもらう方、になっているな。
0862デフォルトの名無しさん
2005/10/25(火) 22:14:37お前が勘違いしているんだよ。
恥ずかしいから出ていってくれない?
0863デフォルトの名無しさん
2005/10/25(火) 22:16:48最近移住してきた香具師か?
0864デフォルトの名無しさん
2005/10/25(火) 22:21:15このスレは、スレ住人の良心によって、課題が解けない哀れな人を助ける目的でたてられたものです。
質問者は解答者に対しては感謝の気持ちを忘れてはいけません。
解答者は良心を忘れてはいけません。
0865デフォルトの名無しさん
2005/10/25(火) 22:21:20煽るのも答えるのもご自由に。
0866デフォルトの名無しさん
2005/10/25(火) 22:21:40何度読んでも解いてあげますではないな。解かさせてくださいでもないが、
どっちかというと質問者の方が立場は上だナ
0867デフォルトの名無しさん
2005/10/25(火) 22:22:56これはある種のボランティア活動です。
2ちゃんねるとは素晴らしいボランティア団体なのです。
感謝されることが私たちスレ住人の一番の宝物です。
0868デフォルトの名無しさん
2005/10/25(火) 22:24:34発注元は受注側の質問には真摯に答えろよ
0869849&853です
2005/10/25(火) 22:29:47私は849と853しか書き込んでません。
そのほかの書き込みは私とは関係がございません。
859で勝手に自己解決したことにされていますが、
もちろん自己解決していませんし、
ふんぞりかえって「解きたまえ」という高圧的態度で
問題を提示しているつもりもありませんので、
ひきつづき皆様の好意のアドバイスを頂きたく思います。
どうぞよろしくお願いいたします。
0870デフォルトの名無しさん
2005/10/25(火) 22:29:51***白い腕輪でも買ってろ
0871教えて厨
2005/10/25(火) 22:30:570872デフォルトの名無しさん
2005/10/25(火) 22:31:40頭の隅からすみまで腐ってやがる
0873デフォルトの名無しさん
2005/10/25(火) 22:33:01あなたが解けないC/C++の宿題を片付けます
【重要】
気に入らない質問や発言はスルーしましょう
【質問者へ】
回答者の便宜のため、質問の際は以下を守ることを推奨します。
・質問は【質問テンプレ】に従ってください。
・問題文は、わかりやすいように全文を書きましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
0874デフォルトの名無しさん
2005/10/25(火) 22:35:490875デフォルトの名無しさん
2005/10/25(火) 22:39:270876デフォルトの名無しさん
2005/10/25(火) 22:40:05>>868
そだね。気が向いたら解く。
資料が添付されてなかったり、態度が悪かったすると、気が向かないな。
まあ、気が向かんでも、ネタになるようだったら、無駄な努力はするか。
センセの名前だしてみたり、解答できてるのに画像しか出さんかったり。
かつてコピー!コピー! でいい味だしてたセンセも居るなぁ・・・。
0877デフォルトの名無しさん
2005/10/25(火) 22:41:110878教えて厨 ◆AU/OjWxByc
2005/10/25(火) 22:45:33自己解決したと勝手に宣言しているのは私ではありません。
ひきつづき悩んでいます。助けを求む。
0879教えて厨 ◆AU/OjWxByc
2005/10/25(火) 22:47:17[1] 授業単元: 画像処理関係
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1009.zip
上のpgm形式サンプル画像ファイルに対して次の3つの処理を行ってください。
(1)画像のノイズをメディアンフィルタ等で取った上で、エッジ検出を行った後のエッジ画像を出力してください。
(2)画像内にちらばっている多角形に対してラベリング処理を行って境界線追跡をするか、
あるいは図形を切り出すなどして
それら図形の周囲長・面積・円形度・モーメント、その他自分で考案した特徴を計算してください。
(3)(2)で求めた特徴量から2〜3の特徴を選び、各図形が特徴空間のどこに位置するか表示してください。
さらに、これらの図形において三角形と円を識別するにはどのような特徴が適当か考察してください。
[3] 環境
[3.1] OS: Windows/Linux/どちらでも実行できるのが望ましい
[3.2] コンパイラ名とバージョン: gccかVC++6.0、bccどれでも動くのが望ましい
[3.3] 言語: C/C++/どちらでも可
[4] 期限: [2005年10月27日まで]
[5] その他の制限: 制限無し。答えさえ正しければよい。
0880デフォルトの名無しさん
2005/10/25(火) 22:52:35ひょっとして画像関係を取り扱った会社の開発で必要だから宿題なのか?
問題見ると"学校の宿題"かどうかはかなり怪しく見えるんだけど
0881デフォルトの名無しさん
2005/10/25(火) 22:59:14質問者はどういう情報があれば回答を得られるか考えて欲しいもんだが。
以下のものに関する資料が足りないので、どうしようもない。
・メディアンフィルタ
・画像の読み書き
・エッジ検出、ラべリング処理、境界線追跡
・特徴量とはどういうものか
・図形の周囲長・面積・円形度・モーメント
ソースコードや、解説文をもらってるハズだから、提示するように。
0882教えて厨 ◆AU/OjWxByc
2005/10/25(火) 23:00:28とある三流大学の画像関連の科目の宿題です。
C言語で学ぶ実践画像処理というオーム社の本に
よく似たサンプルがあるんですが、プログラミングが苦手で自力で組めません。
お願いだから力を貸して〜
0883デフォルトの名無しさん
2005/10/25(火) 23:02:48その他の制限は無いんだから、適当にすりゃいいんだよ。
お前はいちいち あーしろこーしろ と言われないとできないのか?
まぁ、会社人なら底辺の仕事しかしていないだろうし、学生なら本当に課題しかしないクズなんだろうな。
0884デフォルトの名無しさん
2005/10/25(火) 23:04:390885デフォルトの名無しさん
2005/10/25(火) 23:04:42後は>>881の言う以下の資料
・メディアンフィルタ
・画像の読み書き
・エッジ検出、ラべリング処理、境界線追跡
・特徴量とはどういうものか
・図形の周囲長・面積・円形度・モーメント
0886デフォルトの名無しさん
2005/10/25(火) 23:06:170887デフォルトの名無しさん
2005/10/25(火) 23:08:50おいおい、上から3つまでは別段難しい事無いじゃないか
てか、そこまで判らん奴が手を出して終わる様な問題じゃないぞ
ここで聞くより、画像関係スレで相談してアイデアを出してもらう方が良い位の内容
0888デフォルトの名無しさん
2005/10/25(火) 23:09:56pgmの読み書きくらい、常識として知っておくといいよ。
0889デフォルトの名無しさん
2005/10/25(火) 23:11:510890デフォルトの名無しさん
2005/10/25(火) 23:12:329マスでラスタスキャンしながら。
0891教えて厨 ◆AU/OjWxByc
2005/10/25(火) 23:32:02・メディアンフィルタというのは注目画素の周囲8近傍の画素値を並べたときの中間値を
注目画素の新たな画素値に置き換えるというフィルタだと思います。
・画像はpgm形式です。pgm形式で開いて、pgm形式で出力画像を出力してください。
・エッジ検出については
http://www.f-kmr.com/dsp_edge.htm
↑ここか、
http://homepage2.nifty.com/gimpman/31.html
ここなんかが参考になるかも。エッジ検出とここで言っているけど、輪郭抽出という言い方のほうがポピュラーかもしれません。
・ラベリング処理ラベリングはここが詳しい?↓
http://www.microsoft.com/japan/msdn/academic/Articles/Algorithm/03/
・境界線追跡
ラベリングで得られた図形の輪郭を一筆書きのようにたどって一周するように追跡
するという意味だと思う。その間通った画素の数をカウントして周囲長とするのかも。
・特徴量とは
周囲長や画像の面積、円形度、ピクセル画像のモーメントなどなどの
画像の特徴の度合いを現すような、なんらかの計算で得た量。
図形の周囲長はたぶん、図形の輪郭の画素数をカウントしたものでいいとおもいます。
図形の面積は図形の輪郭の内側の画素数と輪郭の画素数の合計。
円形度とは
http://cutie.dip.jp/pc/image/13.php
↑こういうものです。画像のモーメントとかも↓このへんがあるけど、分かりにくいかな
http://mikilab.doshisha.ac.jp/dia/research/person/shuto/research/0605/tokutyo.html
ソースコードは貰っていません。C言語で学ぶ実践画像処理というオーム社の本が参考になりそうでした。
0892教えて厨 ◆AU/OjWxByc
2005/10/25(火) 23:39:19大したものじゃなくてもいいはずだと思います。
黒画素の比率を数えて黒濃度だとかそういうのでかまわないと思います。
0893デフォルトの名無しさん
2005/10/25(火) 23:43:120894デフォルトの名無しさん
2005/10/25(火) 23:48:180895デフォルトの名無しさん
2005/10/26(水) 00:41:18んー。参考になるかもしれんが、俺もってねぇし(笑)
・・・もうちっとアタマ使おうな。
0896デフォルトの名無しさん
2005/10/26(水) 01:50:10宿題を解く側は多分YUV形式からから24bitRGBに展開するところだけしか興味が持てない
0897デフォルトの名無しさん
2005/10/26(水) 02:05:360898デフォルトの名無しさん
2005/10/26(水) 02:08:250899デフォルトの名無しさん
2005/10/26(水) 02:10:29誰か助けてくれ
1年だから相当簡単だと思われる
UNIX環境です。
getcharで入力された数字文字をカウントするってやつなんだが
例えば
112233
4455
って感じに途中で改行があった場合に
改行前の数字だけ読み込ませる、って感じ。
要するに上の2行の数字をうったあとCtrl+D押すと
1が2個、2が2個、3が2個、あとは0個って感じに認識させるわけです。
どうやっても2行分全部カウントしてしまう・・・。誰かお助けお願いします。
0900デフォルトの名無しさん
2005/10/26(水) 02:16:020901デフォルトの名無しさん
2005/10/26(水) 02:33:37あ、ごめん
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):>>899
[3] 環境
[3.1] OS: UNIX(UNIXの何てOSなのかは不明)
[3.2] 不明(gcc?)
[3.3] 言語: C
[4] 期限: 10月28日
[5] その他の制限: まだ全然習ってません。ポインタの手前って感じです。
0902デフォルトの名無しさん
2005/10/26(水) 03:03:49#include <stdio.h>
int main(void)
{
int count[256], i;
char c;
for(i=0;i<256;i++)count[i]=0;
while(c=getchar()) {
if(c=='\n')break;
count[c]++;
}
for(i=0;i<256;i++)
if(count[i])
printf("%cは%d個ありました。\n",(char)i,count[i]);
return 0;
}
0903デフォルトの名無しさん
2005/10/26(水) 03:04:56#include <stdio.h>
#include <ctype.h>
int main() {
int c, hist[10] = {0};
while(c = getchar(), c != EOF && c != '\n')
if (isdigit(c))
hist[c-'0']++;
for(c = 0; c < 10; c++)
printf("%dx%d\n", c, hist[c]);
return 0;
}
0904デフォルトの名無しさん
2005/10/26(水) 10:35:17[2] 環境
[2.1] OS: LiNUX
[2.2] コンパイラgcc
[2.3] 言語: C
[3] 期限: 10月27日午後4時
[4] 問題文:
画面上で、出力時のファイル名を入力後、任意の長さの文章(半角英数字のみでも良い)を入力し、
最後にQUITを入力することで、入力した文章データを先に入力したファイル名(拡張子はtxtとする)のascii形式データファイルとして保存し終了するプログラムを作成し、実行しなさい。
ここでは、文字入力に応じてメモリ領域の確保を繰り返し、文字列データを可変長配列に格納すること、
その文字列を格納する構造体は、以下のように定義できる。また、メモリ領域の確保は、
標準関数であるmallocを使うこと。
struct Textdata
{
char textline[NN]; /* 記述する文章の1行分の文字列 NNは1行の最大文字数+1 */
struct Textdata*NextP /* NextPは次の要素へのポインタ */
}
職人さんお願いします<(_ _)>
0905デフォルトの名無しさん
2005/10/26(水) 12:10:35言ってることが無茶苦茶だ
0906デフォルトの名無しさん
2005/10/26(水) 12:11:58殴ってきました。次にすべき事は何でしょうか?
0907デフォルトの名無しさん
2005/10/26(水) 12:22:110908デフォルトの名無しさん
2005/10/26(水) 13:27:250909デフォルトの名無しさん
2005/10/26(水) 13:41:550910デフォルトの名無しさん
2005/10/26(水) 13:45:000911デフォルトの名無しさん
2005/10/26(水) 15:31:23まじありがと
明日大学でやってみます。
0912デフォルトの名無しさん
2005/10/26(水) 16:57:04ヒントをベースにして次まで作って見たんですが…
#include<stdio.h>
#include<math.h>
main()
{
int a,i,flag;
for(a=2 ; a<=100 ;a++){
flag=0;
for(i=2 ;i<=a-1;i++){
if( (a%i) == 0 ){;
flag=1;
break;
}
}
}
if(flag){
printf("%d is a prime number.\n",a);
最後から二行目の if(flag〜)の〜に何か付け加えないと
うまくプログラムが働いてくれないのですが…
何を入れればよいか全く分かりません…。
教えてください。
0913デフォルトの名無しさん
2005/10/26(水) 16:58:42if (!flag) {
0914デフォルトの名無しさん
2005/10/26(水) 17:00:250915デフォルトの名無しさん
2005/10/26(水) 17:01:20int i;
double x,y,x0=0.5,y0=0.5;
double a=0.8,b=0.8;
double N=1000;
double ignore=N/10;
x=x0;y=y0;
for(i=1;i<N;i++){
printf("%f %f \n",x,y);
if(x>=0 && x<=0.5){
x=2*a*x;y=(1/2)*b*y;}else{
x=a*(2*x-1);y=(1/2)*b*(y+1);
}
}
return0;
}
0に収束してるわけでもないのに
なぜかYの値が0になってしまいます・・・なぜでしょうか
0916デフォルトの名無しさん
2005/10/26(水) 17:03:480917デフォルトの名無しさん
2005/10/26(水) 17:06:49[2] 環境
[2.1] OS: WindowsXP
[2.2] コンパイラ gcc
[2.3] 言語: C
[3] 期限: 10月27日午後6時
[4] 問題文: >>915の計算プログラムを完成
です。失礼しました。
0918デフォルトの名無しさん
2005/10/26(水) 17:10:49それやとメンバーの順番がおかしいがな
struct line
{
struct line *next;←普通はこれが先
char text[1]; /* 可変長 */
};
それより、デスマ明けにプロジェクトが頓挫してしもた
10年やってるけどこんなアホなん初めてやわ
もっと早うに連絡してくるんが常識やんけ
ブ゙ツブツブツブツブ゙ツブツブツブツ
ブ゙ツブツブツブツブ゙ツブツブツブツ
ブ゙ツブツブツブツブ゙ツブツブツブツ
ブ゙ツブツブツブツブ゙ツブツブツブツ
・・・そや、勝手に帰ってしもたろ
0919デフォルトの名無しさん
2005/10/26(水) 17:15:511/2 = 0 (int)
0920デフォルトの名無しさん
2005/10/26(水) 17:20:12intは i だけにしかしてませんから、それは違うと思います。i をdoubleにしても同じ結果でした。
実際に計算する値x,yはdoubleなのでそのようなことは無いかと・・・
0921920
2005/10/26(水) 17:25:16どうみても1/2 = 0 (int)です
本当にありがとうございました。
0922名無し
2005/10/26(水) 17:41:06[2] 問題文:
入力:二つの10進数(非負の整数、4桁以下で符号無し)を加算記号"+"、減算記号"-"、で連結し最後に等号を付け加えた式を文字列として入力。
操作:入力された文字列から加算記号、減算記号、等号を区切り記号として二つの10進数を文字列として切り出す。
切り出した文字列を数値に変換する。加減算を行って結果を計算。
出力:計算結果を等号"="の後ろに出力。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2005年10月29日9:00まで]
[5] その他の制限:特にはありません。
ちょっとわからないので、よろしくお願いします。
0923デフォルトの名無しさん
2005/10/26(水) 20:12:43ろくにエラーチェックもしてないし冗長だと思うから、まぁ参考程度にしてくれ
最近Pascalばっかやらされてて感覚が鈍ってた_| ̄|○
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void)
{
char expr[80];
int i, op1=0, op2=0, len, flag = 0;
fgets(expr, 80, stdin);
len = strlen(expr) - 1;
expr[len] = '\0';
for (i=0;i<len;i++) {
if (isdigit(expr[i])) {
if (!(flag & 1)) {
op1 = op1*10 + (expr[i] - '0');
} else {
op2 = op2*10 + (expr[i] - '0');
}
continue;
}
0924デフォルトの名無しさん
2005/10/26(水) 20:14:26if (expr[i] == '+') {
flag |= 1;
flag |= (1<<1);
continue;
} else if (expr[i] == '-') {
flag |= 1;
flag |= (1<<2);
continue;
} else if (expr[i] == '=') {
if (flag & (1<<1)) {
printf("%s %d\n", expr, op1+op2);
} else {
printf("%s %d\n", expr, op1-op2);
}
break;
}
/* Error handling */
puts("Syntax Error!");
return -1;
}
return 0;
}
0925デフォルトの名無しさん
2005/10/26(水) 20:16:04ソース貼ってから気づいたが、わざわざ切り出さないとダメだったのか・・・
ちょっと問題有りだが配列2つ用意して、strtokで切り出すのが手っ取り早い希ガス
参考にもならんな・・・_| ̄|○
0926904
2005/10/26(水) 20:25:38ほんとにわけわからん教授でして、、、、
あぁこれはどうしよう・・・
0927デフォルトの名無しさん
2005/10/26(水) 21:40:170928デフォルトの名無しさん
2005/10/26(水) 23:08:22問題の言うことは判らんでもないんだが、プログラムの仕様にviかぶれだと思える頭の悪さがある。
また、文言の脳内置換や脈絡の補完が必要な部分もある。
少なくとも問題の文言通りに組める人はまず居ない。
0929名無し
2005/10/26(水) 23:12:59参考にさせてもらいます。ありがとうございました。
strtokで切り出すと簡単なプログラムになるのですか?
0930904
2005/10/26(水) 23:14:45おっしゃることは飲み込めました。
脳内置換とか想像でも構わないので
骨組みなど作れないでしょうか?(´Д⊂
0931デフォルトの名無しさん
2005/10/26(水) 23:18:14別にそんなことは無いと思うが
ただ、俺のソースだと演算子で分けて2つのオペランドを切り出すという行程を経ずに
直に2つのオペランドを数値として取り出してるから要件的にどうかね?と
0932名無し
2005/10/26(水) 23:29:27まだ、Cをはじめたばかりなのでこのような質問をしてすみません
0933デフォルトの名無しさん
2005/10/26(水) 23:36:49/*
・可変長配列=リスト構造と仮定
・1行あたり最大255文字(改行含む)と仮定
・行の入力が"QUIT"と完全一致した場合に入力終了するものと仮定
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#defineNN256
struct Textdata
{
char textline[NN]; /* 記述する文章の1行分の文字列 NNは1行の最大文字数+1 */
struct Textdata*NextP;/* NextPは次の要素へのポインタ */
};
void cleanup_textdata(struct Textdata *p)
{
struct Textdata *p_sav;
while(p) {
p_sav = p;
p = p->NextP;
free(p_sav);
}
}
0934933
2005/10/26(水) 23:38:01{
struct Textdata *head = NULL, **p = &head;
FILE*fp;
charfilename[32+4];
scanf("%s\n", filename);
strcat(filename, ".txt");
while(1) {
if(!(*p = (struct Textdata *)malloc(sizeof(struct Textdata)))) {
cleanup_textdata(head);
return -1;
}
fgets((*p)->textline, NN, stdin);
if(!strcmp((*p)->textline, "QUIT\n")) {
free(*p);
*p = NULL;
break;
}
p = &((*p)->NextP);
}
if(!(fp = fopen(filename, "w"))) {
cleanup_textdata(head);
return -1;
}
for(p = &head; *p; p = &((*p)->NextP)) {
fputs((*p)->textline, fp);
}
fclose(fp);
cleanup_textdata(head);
return 0;
}
0935default新規
2005/10/27(木) 00:08:11急に単元が進んで、結構ピンチです。。
性能比較というのは、どういうことなのでしょうか?
[1] 授業単元: 再帰と木
[2] 環境 Windows VC6.0
[3] 言語:C
[4] 期限: [2005年10月27日23:59提出期限なのですが、出来れば23時ぐらいまでに。。] または [無期限] のいずれか (「できるだけ早く」は不可)
[5] その他の制限:標準ライブラリ使用可
★課題★プログラム10 と プログラム11 の性能比較を行え。
【例】
[user@mypc ~] ./a.out 35
f(35)= 9227465
[user@mypc ~] time ./a.out 35
f(35)= 9227465
1.330u 0.032s 0:02.43 55.9% 0+0k 0+0io 0pf+0w
★再帰呼出し版 (プログラム10)
int F(int i){
if (i < 1) return 0;
if (i == 1) return 1;
return F(i-1) + F(i-2);}
★トップダウン動的計画法(プログラム11)
int F(int i){
int t;
if (knownF[i] != unknown) return knownF[i];
if (i == 0) t = 0;
if (i == 1) t = 1;
if (i > 1) t = F(i-1) + F(i-2);
return knownF[i] = t; }
宜しくお願いします(M_M)
0936デフォルトの名無しさん
2005/10/27(木) 00:09:440937デフォルトの名無しさん
2005/10/27(木) 01:34:35実際、どんな呼び出しが行われるか数える。プログラムをちょいと変更して
int F(int i){
static count=0;
printf("i = %d (%d 回目の呼び出し)\n", i, ++count);
:
}
みたいにすれば分かる。で、両方のプログラムについて引数を少しずつ増やしながら
その増え方を見ればいいのでは?
あとは元のプログラムを使って、例にあるように time で実際にかかる時間の伸びを見るとか。
n を入力とした場合、プログラム10は O(2^n)、 プログラム11は O(n) くらいになると思う、多分。
あとはメモリ効率…っていっても、メモリが問題になるような環境だと時間が
洒落になってないだろうなぁ…ということで私は放置。
0938default新規
2005/10/27(木) 06:17:20もし、実行された方がいらっしゃいましたら、教えて頂けませんか?
0939デフォルトの名無しさん
2005/10/27(木) 06:30:170940POPP
2005/10/27(木) 10:27:16[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ファイルの先頭からテキストを1行ずつ読み込み、何行目の何文字目に検索文字列の先頭が存在するか出力する。
探索文字列中に同じ文字が含まれる場合について検索方法を改良する。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm?
の投稿者POPPです。
[3] 環境
[3.1] OS: Windows/UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: [2005年11月2日24:00まで]
[5] その他の制限: 特にないと思います。
わかりません。お願いします。
0941名無し
2005/10/27(木) 12:44:21文字列を読み込み、整数か記号であるかを判断(isalpha,isdegit等)、次に数字を数値変換(strtoi,strtol等)でその後、演算記号に従って計算と言われたので、strtolを使ったプログラムの方をのせていただけないでしょうか?
せっかく、作っていただいたのですが、お願いできないでしょうか?
0942デフォルトの名無しさん
2005/10/27(木) 14:06:08次に各領域に順に1、2、3、… の整数を代入した後、それらの値を逆順に表示するプログラムを作成せよ。
0943デフォルトの名無しさん
2005/10/27(木) 14:53:38これは何?
0944デフォルトの名無しさん
2005/10/27(木) 15:05:43ちゃんと書いて欲しければ>>1見ろ。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i,length, *arrray;
scanf("%d",&length);
array=(int*)malloc(length * sizeof(int));
for(i=0;i<length;i++)array[i]=i+1;
for(i=length-1;i>=0;i--)printf("%d,"array[i];
return 0;
}
0945デフォルトの名無しさん
2005/10/27(木) 17:23:23それしかないよ('A`)
0946デフォルトの名無しさん
2005/10/27(木) 18:33:19感謝しろ作ってやったぞ
#include <vector>
#include <cstddef>
#include <iostream>
#include <algorithm>
#include <boost/lambda/lambda.hpp>
int main(){
std::size_t length;
std::cin >> length;
int i = 0;
std::vector<int> v;
std::generate_n(std::back_inserter(v), length, boost::lambda::var(i)++);
std::copy(v.rbegin(), v.rend(), std::ostream_iterator<int>(std::cout));
}
最後1行は↓でも
std::for_each(v.rbegin(), v.rend(), std::cout << boost::lambda::_1);
0947デフォルトの名無しさん
2005/10/27(木) 19:31:22#include <stdio.h>
#include <string.h>
#define BUF_SIZE 256
int main() {
FILE *fp = fopen("in.txt", "r");
char *key = "keyword";
char buf[BUF_SIZE];
int i, j, l, n, m = strlen(key);
for (l = 1; fgets(buf, BUF_SIZE, fp); ++l) {
int n = strlen(buf);
for (i = 0; i + m < n ; ++i) {
for (j = 0; j < m; ++j)
if (buf[i+j] != key[j]) break;
if (j == m)
printf("%s found in %d.%d\n", key, l, i);
}
}
}
0948島野
2005/10/27(木) 20:25:35[2] 問題文(含コード&リンク): RSA暗号の鍵の作成、暗号化、復号化
[3] 環境
[3.1] OS: FreeBSD
[3.2] コンパイラ名とバージョン: gcc 3.3.3らしい
[3.3] 言語: c
[4] 期限: [2005年11月6日24:00まで]
[5] その他の制限: あまり知識が無いんで、量が多くてもできるだけ分かりやすくお願いします。
0949デフォルトの名無しさん
2005/10/27(木) 20:31:04ネタか?ほんとに卒研ならOpenSSLのソースでも読んで自力でどうにかしろよ
0950デフォルトの名無しさん
2005/10/27(木) 20:34:21RSA社によるリファレンス実装(rsarefという名前で出回っているはず)
を参考にするというか丸パクするしかないだろう。
全部で3000行強のソースだ。
ここでの回答は期待しないように。
0951デフォルトの名無しさん
2005/10/27(木) 20:36:21著カーニハンあたりの本読めば一発w
0952デフォルトの名無しさん
2005/10/27(木) 20:43:50参考に。JavaScriptによる1024-bit RSA実装
PigPGP 0.2.3
http://www.faireal.net/demo/PigPGP/
0953デフォルトの名無しさん
2005/10/27(木) 21:01:57[2] 問題文:
ある整数値を入力し、その値分の整数型データ用のメモリ領域を動的に確保せよ。
次に各領域に順に1、2、3、… の整数を代入した後、それらの値を逆順に表示するプログラムを作成せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:10/29まで
[5] その他の制限:
include <stdio.h>
int main (void)
{
で始めてください。
よろしくお願いします。
0954デフォルトの名無しさん
2005/10/27(木) 21:18:13[2] 問題文(含コード&リンク):
以下のようなウェブサーバーを作りなさい。
#ブラウザからHTTPのリクエスト1つのみを受け付ける。
#サーバーのファイルシステムからリクエストファイルを受け取る。
#そのリクエストファイルのヘッダーラインを表示するHTTP responseメッセージをつくる。
#クライアントに直接、それを送る。
[3] 環境
[3.1] OS: Linuxが好ましいけどWindowsでも可。
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日。
[5] その他の制限: レベル等に制限はなし。
見よう見まねで途中までやったファイルがここにあります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1013.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1014.txt
どうかお願いします。
0955953
2005/10/27(木) 21:19:480956デフォルトの名無しさん
2005/10/27(木) 21:20:28[2] 問題文:
文字列strの中に、文字cが含まれている個数(含まれていなければ0とする)を返す
関数 int str_chnum(const char str[],int c)
を作成せよ
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ:cc
[3.3] 言語:C
[4] 期限:30日
[5] その他の制限:
市販のテキストの問題なのですが、
文字cといっているのに仮引数がint c な意味がわかりません。
よろしくお願いします。
0957デフォルトの名無しさん
2005/10/27(木) 21:24:22細かい事を気にするな
0958デフォルトの名無しさん
2005/10/27(木) 21:29:05{
int count=0;
char *p=str;
for(;*p!='\0';p++){
if(*p==(char)c)count++;
}
return count;
}
0959デフォルトの名無しさん
2005/10/27(木) 21:29:360960浩輔
2005/10/27(木) 21:32:14[2] 問題文(含コード&リンク):フラクタル画像圧縮により生じた画像劣化の復元について。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:どちらでも可
[4] 期限:2005年10月28日12:00まで
[5] その他の制限:画像についてまったくの初心者です。画像の反転と�A値化処理までは作ることができました。お願いします。
0961デフォルトの名無しさん
2005/10/27(木) 21:32:21文字処理関数はEOFを返すものがあったりするのでintで行われることが多い
0962デフォルトの名無しさん
2005/10/27(木) 21:41:38while ((str = getchar()) != EOF) {
putchar(str);
}
こういうやつだよ int を使うのは。char str でも通るけどね
EOF は -1 だから
0963デフォルトの名無しさん
2005/10/27(木) 21:43:040964デフォルトの名無しさん
2005/10/27(木) 21:44:40俺もその本もってるよw
3日前くらいにその問題やったよ
○○○○の極意だろ?
0965デフォルトの名無しさん
2005/10/27(木) 21:53:14ありがとうございます。それを参考に
#include<stdio.h>
int str_chnum(const char str[],int c);
main(){
char s[30];
int ch;
printf("文字列を入力\n"); scanf("%s",s);
printf("検索する文字を入力\n"); scanf("%d",&ch);
printf("%d文字あります\n",str_chnum(s[30],ch));
}
int str_chnum(const char str[],int c)
{
int count=0;
char *p=str;
for(;*p!='\0';p++){
if(*p==(char)c)count++;
}
return count;
}
このようにしたのですが、エラーが出ずにコンパイルは通っても、文字列を数えてはくれません。
考えてはいるのですが、なぜ通らないかわかりません。
よろしくお願いします。
>>961-962
ありがとうございます。
>>964 たぶん違うと思います。ナニナニの極意ではないです。
0966デフォルトの名無しさん
2005/10/27(木) 22:04:33> printf("%d文字あります\n",str_chnum(s[30],ch));
→printf("%d文字あります\n",str_chnum(s,ch));
0967デフォルトの名無しさん
2005/10/27(木) 22:05:06は
scanf("%c",&ch);
では?
0968956
2005/10/27(木) 22:14:02なんかwarningが出なくなりました。
ありがとうございます。
>>967
int ch
は関数int str_chnumの仮引数なのですが、問題文の文字cをint cで扱うために
int型で入力させています。
正直、問題文の意味がわからないのですが>>961-962さんの話のように
とりあえずintで扱ってからcharにキャストしています。
0969デフォルトの名無しさん
2005/10/27(木) 22:22:09Σ(´□`;) ハウ
違ったの!?
吊ってきます('A`)
0970デフォルトの名無しさん
2005/10/27(木) 22:36:16分かりにくい説明だな…。
取り敢えずこんな感じか?
#include<stdio.h>
int main(void) {
int size = 0;
int *buf;
printf("数値を入力:");
scanf("%d", &size);
if(0 >= size || (buf = (int*)malloc(sizeof(*buf))) == NULL) return 1;
for(i=1; i <= size; i++)
*buf++ = i;
while(*(--buf) != 1) printf("%d, ", *buf);
printf("%d\n", *buf);
return 0;
}
試して無い。
0971名無し
2005/10/27(木) 22:48:14[2] 問題文:
入力:二つの10進数(非負の整数、4桁以下で符号無し)を加算記号"+"、減算記号"-"、で連結し最後に等号を付け加えた式を文字列として入力。
操作:入力された文字列から加算記号、減算記号、等号を区切り記号として二つの10進数を文字列として切り出す。
切り出した文字列を数値に変換する。加減算を行って結果を計算。
出力:計算結果を等号"="の後ろに出力。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [2005年10月29日9:00まで]
[5] その他の制限:文字列を読み込み、整数か記号であるかを判断(isalpha,isdegit等)、次に数字を数値変換(strtoi,strtol等)でその後、演算記号に従って計算
0972教えて厨 ◆AU/OjWxByc
2005/10/27(木) 23:05:09[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1009.zip
上のpgm形式サンプル画像ファイルに対して
画像内にちらばっている多角形に対してラベリング処理を行って境界線追跡をするか、
あるいは図形を切り出すなどして
それら図形の周囲長・面積・円形度・モーメント、その他自分で考案した特徴を計算してください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1018.c
↑こんな感じでコードを作ってみたのですが、どうもうまく行きません。
どこが原因でしょうか・・・教えてすごい人
[3] 環境
[3.1] OS: Windows/Linux/どちらでも実行できるのが望ましい
[3.2] コンパイラ名とバージョン: gccかVC++6.0、bccどれでも動くのが望ましい
[3.3] 言語: C/C++/どちらでも可
[4] 期限: [2005年10月27日まで]
[5] その他の制限: 制限無し。答えさえ正しければよい。
0973デフォルトの名無しさん
2005/10/27(木) 23:06:460974教えて厨 ◆AU/OjWxByc
2005/10/27(木) 23:17:44ratio[i] = 4*PI*size[i]/(l*l);
この部分でl*lがlの中身がいつも0なためにゼロ除算になって止まってる
ような感じがするんですが、どうしてlの中身がいつも0になるの?
0975教えて厨 ◆AU/OjWxByc
2005/10/27(木) 23:37:24どうやらimage_label_inの中身が空っぽの奴をfeaturesに渡してたのが原因。
labelingで出来たimage_labelをちゃんと渡せば無事うごきました。
あとはsprintfでちゃんとデータを表示するようにput(buf)をいれたら
望みどおりに動いたっぽいんだけど・・・でもなぜかデータを吐いた後に
強制終了されて後味が悪いっス・・・なぜこうなるの??
0976デフォルトの名無しさん
2005/10/27(木) 23:41:56PCのスペック^−^
0977デフォルトの名無しさん
2005/10/27(木) 23:44:50labeling()ではimage_labelにラベルをセットしている。
features()ではimage_label_inからラベルを読もうとしている。
0978977
2005/10/27(木) 23:46:37で、強制終了はこれが原因。
char buf2;
0979教えて厨 ◆AU/OjWxByc
2005/10/28(金) 00:09:330980デフォルトの名無しさん
2005/10/28(金) 00:15:050981デフォルトの名無しさん
2005/10/28(金) 00:20:14この手の失敗が目立つ。
0982教えて厨 ◆AU/OjWxByc
2005/10/28(金) 00:26:19やっぱ強制終了されちゃうぜよ。buf2を配列にすりゃいいんじゃないの?
なにがいけないのよ
0983デフォルトの名無しさん
2005/10/28(金) 00:36:59buf2だけじゃなくてbufも配列にした?
0984デフォルトの名無しさん
2005/10/28(金) 00:37:01お前の態度
0985教えて厨 ◆AU/OjWxByc
2005/10/28(金) 00:46:48featuresの中のbuf2とグローバルのbuf2だけ配列にしたんだけど。
これだけじゃ駄目?どこの箇所をどう直さないといけないかおしえてちょ
0986デフォルトの名無しさん
2005/10/28(金) 00:47:51ソースの前の方にあるchar buf; も char buf[100]; ぐらいにしてみな。
0987教えて厨 ◆AU/OjWxByc
2005/10/28(金) 01:22:10こんな風なんだけどうまくいかねーよ〜
0988デフォルトの名無しさん
2005/10/28(金) 01:48:40http://pc8.2ch.net/test/read.cgi/tech/1130431335/
0989デフォルトの名無しさん
2005/10/28(金) 02:06:13もっかい>>1読み直せ。何がどううまくいかないのか。エラーが出るならエラーメッセージをちゃんと書け。
ついでに、○○行目じゃ分からん。どの関数のどの辺とか言ってくれなきゃ、ブラウザには行ラベルが付いてないから。
0990デフォルトの名無しさん
2005/10/28(金) 08:47:59行番号のほうが一意特定できるから嬉しいが
0991953
2005/10/28(金) 10:21:59すいません、そのプログラムは以下のようなエラーが出ました。
:In function `main':
:8:error: `i' undeclared(first use in this function)
:8:error: (Each undeclared identifier is reported only once
:8:error: for each function it appears in.)
それとヒントがあったので、一応参考までに貼り付けておきます↓
入力された整数値を 50 とすると、50個分の整数型データの動的確保は、
int *ptr;
ptr = (int *)malloc(sizeof(int) * 50);
で行うことができる。このとき ptr はそのデータの先頭アドレスが代入されている。
0992デフォルトの名無しさん
2005/10/28(金) 10:24:31ppmを読み込む所まで作っておいて、メインの処理のみ記述するって事にしないか?
ようするに画像処理のテンプレート作ろうぜって話
0993デフォルトの名無しさん
2005/10/28(金) 10:26:45めんどくさい奴だな。もう少し理解力つけろ。そんなんじゃ社会に出ても使えない奴だぞ
int i;
↑をint *buf;の行の後ろに追加しろ
0995鈴木
2005/10/28(金) 10:33:210996デフォルトの名無しさん
2005/10/28(金) 10:40:210997鈴木
2005/10/28(金) 10:42:590998デフォルトの名無しさん
2005/10/28(金) 10:44:570999デフォルトの名無しさん
2005/10/28(金) 10:45:451000デフォルトの名無しさん
2005/10/28(金) 10:46:5310011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。