1 名前:デフォルトの名無しさん [2008/02/04(月) 23:32:19 ] あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。 【質問者へ】 回答者の便宜のため、質問の際は以下を行うことを推奨します。 ・質問は【質問テンプレ】を利用してください。 ・問題文は、出題されたまま全文を書いてください。 ・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう. ・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。 ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。 ・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。 ・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。 【質問テンプレ】 [1] 授業単元: [2] 問題文(含コード&リンク):() [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html 【過去ログ検索】 chomework.sakura.ne.jp/ 【wiki】 www23.atwiki.jp/homework/ 【前スレ】 C/C++の宿題を片付けます 103代目 pc11.2ch.net/test/read.cgi/tech/1200318925/
628 名前:626 [2008/03/15(土) 09:17:13 ] 巡回セールスマンで最短を最長に変えたものと同じですね 距離をマイナス倍すれば(例えば10から引く)巡回セールスマンと一致しますね
629 名前:デフォルトの名無しさん [2008/03/15(土) 09:29:21 ] でももとの位置へ戻ってこなくて良いところが違いますが・・・ レンタカーやタクシーで巡回するようなものです
630 名前:541 mailto:sage [2008/03/15(土) 10:48:04 ] >>625 ありがとうございます。 参考にさせて頂きます。
631 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 11:06:09 ] >>626 同じ点(文字)を二度以上通ってもいいですか? もし、いいなら単純な動的計画法が適用できる気が。
632 名前:デフォルトの名無しさん [2008/03/15(土) 11:13:59 ] >>631 おなじ文字を何度も使ったら値は無限に増えます ACACACACA・・・・とか 一度だけの並べ替えにしてください
633 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 11:17:26 ] >>632 ACA で終わりじゃないの?
634 名前:デフォルトの名無しさん [2008/03/15(土) 11:21:06 ] 一度だけの使用で、最も高得点になるものを求めたいです 文字は全て使わなくても良いですが、全部使った方が高得点になります
635 名前:626 [2008/03/15(土) 11:35:08 ] すみません 設定を間違えました 出直してきます
636 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 12:01:14 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):英和辞書を作成せよ。 辞書データはプログラム開始時にファイル(ファイル名はdic.dat)より読み込みメモリ上にリスト構造を構築する。 以下これをリストという。 次の機能をメニューで選べるようにすること。(機能ごとに関数にしておく) (1)検索:英単語(半角)を入力すると、リストより検索して日本語(全角)の意味を表示する。 (2)追加:新しい単語とその意味をキーボードより入力し、リストに追加する。 (3)修正:リストのデータを修正する。 (4)削除:リストより任意の単語を削除する。 (5)保存:リストをファイルに保存する。 (6)終了:プログラムの終了。もしデータが変更されているのに保存されていない時は、 保存せず終了して良いか確認する処理を行う。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual Studio 2005 [3.3] 言語:C [4] 期限:3月中 [5] その他の制限:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6146.txt お願いします。
637 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 13:01:11 ] >>634 >文字は全て使わなくても良いですが、全部使った方が高得点になります それは得点配分しだいじゃないか?
638 名前:デフォルトの名無しさん [2008/03/15(土) 20:00:13 ] >>636 STLのmapをCに移植すればいいんじゃね?
639 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 20:03:22 ] リスト構造で実現しろって言ってるのに。
640 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 20:08:23 ] >>639 は出世しないタイプ
641 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 20:29:04 ] >>638 これがマリー・アントワネットの力か……
642 名前:デフォルトの名無しさん [2008/03/15(土) 21:14:11 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 標準入力からファイル名を受け取り、ファイル内容を以下のように要素毎に整列し出力せよ 入力ファイル:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6147.txt 出力ファイル:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6148.txt [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:gcc3.4 [3.3] 言語:C [4] 期限:3月20日 [5] その他の制限: 入力するファイルの行数は1000行以内とする 「Perlの方が楽かもねぇ」と言われてもどっちもわからず・・・
643 名前:デフォルトの名無しさん [2008/03/16(日) 05:45:48 ] >>642 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6149.c
644 名前:642 mailto:sage [2008/03/16(日) 06:50:08 ] >>643 6日かけてもロクにできなかったのに・・・ありがとうございます ソース内容理解して説明できるよう頑張ります
645 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 11:29:30 ] >>594 取り合えず動く程度の簡易なもの(非VC++)。 ルールはググって上2つぐらいをざっと見ただけなんでもしかしたら間違ってるかも。 役に立つか分かりませんが参考程度にどうぞ。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6150.txt
646 名前:594 mailto:sage [2008/03/16(日) 15:41:04 ] >>645 本当にありがとうございます、助かりました。 参考にさせていただきます。
647 名前:sage [2008/03/16(日) 18:04:32 ] [1] 授業単元:プログラミング [2] 問題文 :入力した西暦が閏年かどうか出力せよ 閏年:4年に一度であり、100年に一度ではなく、400年に一度である [3] 環境 [3.1] OS: windowsxp [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C言語 [4] 期限: なるべく早く よろしくお願いします
648 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:23:04 ] >>647 #include <stdio.h> int is_leap_year(int year) { return (year%400==0) || ((year%100!=0)&&(year%4==0)); } int main() { int year; printf("西暦:"); scanf("%d", &year); printf("%d年は%sです。\n", year, is_leap_year(year) ? "閏年" : "平年"); return 0; }
649 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:27:02 ] >>647 >[4] 期限: なるべく早く Cより先に、この変な言葉を直すよう日本語を学べ。 #include <stdio.h> int main(void) { int d; char* toshi[] = {"平", "閏"}; scanf("%d", &d); printf("%s年\n",toshi[!(d&3)-!(d%100)+!(d%400)]); return 0; }
650 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:28:39 ] ×char* toshi[] ○static const char * const toshi[]
651 名前:636 mailto:sage [2008/03/16(日) 18:57:42 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):英和辞書を作成せよ。 辞書データはプログラム開始時にファイル(ファイル名はdic.dat)より読み込みメモリ上にリスト構造を構築する。 以下これをリストという。 次の機能をメニューで選べるようにすること。(機能ごとに関数にしておく) (1)検索:英単語(半角)を入力すると、リストより検索して日本語(全角)の意味を表示する。 (2)追加:新しい単語とその意味をキーボードより入力し、リストに追加する。 (3)修正:リストのデータを修正する。 (4)削除:リストより任意の単語を削除する。 (5)保存:リストをファイルに保存する。 (6)終了:プログラムの終了。もしデータが変更されているのに保存されていない時は、 保存せず終了して良いか確認する処理を行う。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual Studio 2005 [3.3] 言語:C [4] 期限:3月中 [5] その他の制限:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6151.txt 1〜6の「」のに入っている処理の仕方がわかりません。 お願いします!
652 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 21:55:52 ] >>636 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6153.txt 651より以前から作ったので適当に変えた箇所がある。
653 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 00:54:00 ] >>650 >>649 のままで良いんじゃね?こんな所で質問するような奴が staticだconstを使ったら変に思われちまう。
654 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 06:18:05 ] というか、そろそろうるう年の条件式を、効率の良いものにしない? 最初に y%4 == 0 で条件に合わないものはそれ以降は比較しないと。 それが通ったら y%100 != 0 || y%400 == 0 にすると。
655 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 08:53:34 ] >>654 A || B はAが真ならBは評価されない。 A && B はAが偽ならBは評価されない。 Bの位置に関数呼び出しを入れたりするとA次第で実行されない、というのはよくバグの原因になる。
656 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 08:53:55 ] [1] 授業単元:プログラミング [2] 問題文 :英小文字をgetsで標準入力より配列テーブルへ入力する 入力されたデータの個数と共に配列の先頭アドレスを関数 英大文字変換に渡す 英大文字に変換されたデータをprintfで標準出力に出力する ただし、入力するデータの個数は最大10個までとする 入力のときの表示は「str=」、出力のときの表示は「STR=XXX....X」とする [3] 環境 [3.1] OS: windowsxp [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C言語 [4] 期限: 今日のお昼頃 よろしくお願い致します
657 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:14:10 ] >>656 #include <stdio.h> void capital_letter(char *str, int num); int main(void) { char str[10]; printf("str="); gets(str); // fgets(str, sizeof(str), stdin); にしたいところ capital_letter(str, sizeof(str)); printf("STR=%s",str); return 0; } void capital_letter(char *str, int num) { int i; for(i = 0; i < num; i++) { if('a' <= str[i] && 'z' >= str[i]) { str[i] += 'A' - 'a'; } } }
658 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:15:36 ] >>655 だから何?閏年の条件式になんでそんな無意味な突込みを??? Bの位置に関数呼び出しをするような条件式じゃないからw
659 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:20:20 ] >>658 >>654 が言うような最適化はすでにされてるって意味なんだが。
660 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:21:57 ] >>659 はぁ?ちゃんと読め。それから、数多く繰り返し実行をしてみろ。 明らかに4の倍数以外を400で割り切れるかまで条件判定しなくても済むから 処理時間に差が出ているんだが?
661 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:24:10 ] わかった、ではその速度差が出ると言うコードを提示してくれ。
662 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:27:20 ] int is_leap_year(int year) { return (year%400==0) || ((year%100!=0)&&(year%4==0)); } int is_leap_year(int year) { if(year%400) return 1; else if((year%100!=0)&&(year%4==0)) return 1; else return 0; }
663 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:28:19 ] >>661 いや、なんで自分で clock() を用いて検証しない? 何噛み付いてんの?理屈からして筋の通る理論に 無駄で間違った持論で噛み付かれても迷惑。 お前が理解していないとしか言いようがないんだが
664 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:31:14 ] >>662 いや、だから違うって、なんで先に400で割り切れる条件判定をするんだ? それが400年に1度で、更に4で割り切れない年も判定するのが無駄だって話なんだが・・・ まず4で割り切れなきゃ、100で割り切れない、または、400で割り切れるという条件判定に 持ち込まないという条件について述べているんだが?
665 名前:デフォルトの名無しさん [2008/03/17(月) 09:32:59 ] 裏切り者の福留を許さない。
666 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:39:22 ] return (year%400==0) || ((year%100!=0)&&(year%4==0)); return (year%4==0 && (year%100!=0 || year%400==0));
667 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:44:42 ] ここであえて%100から試すのを提案する。 year % (year % 100 != 0 ? 4 : 400) == 0
668 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:52:23 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6154.c 回数を多くすれば、些細なことだが無駄に気づくだろう
669 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:02:13 ] >year%4==0 && (year%100!=0 || year%400==0) 測ってないけどこの形が最速じゃね。
670 名前:661 mailto:sage [2008/03/17(月) 10:16:09 ] >>663 なんで私にレスするのか理解に苦しむ。 噛み付くも何も、>660が阿呆なことを言うから論破しようと思っただけなんだが。
671 名前:デフォルトの名無しさん [2008/03/17(月) 13:13:55 ] >>670 > 阿呆なこと 何が?そうやってアホとか相手を罵倒する発言、人間性を疑うよ。 言葉にはあんたの人間性がモロに露呈しているが、噛み付いているのが あんただけって気づかない?そう、あんたが話題の本質を理解せずに 勘違いしているだけだろ。論より証拠。あんたもソースで示したら? 論点が食い違っていることが明白だから。
672 名前:661 mailto:sage [2008/03/17(月) 13:15:34 ] >>671 このスレは、>661と>670しか書いていないんですが。 それとも、勝手に他人の発言を拡大解釈したがる阿呆ですか?
673 名前:656 mailto:sage [2008/03/17(月) 13:17:10 ] >>657 ありがとうございます。助かりました
674 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:17:56 ] >>669 理屈としてはそれでおk。
675 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:19:19 ] >>672 あんたさすがに自分の勘違いを認めない上に、このスレに粘着しているのか。 未熟者がでしゃばると、お前みたいな墓穴を掘っても、更に何か言い訳をしたり 相手を否定して自分を押し切ろうとするから嫌われるんだよ。マジ、ソースを出せよ gdgd言ってねーで。ごちゃごちゃとみっともないんだよ、言い訳するやつって。
676 名前:661 mailto:sage [2008/03/17(月) 13:21:16 ] >gdgd言ってねーで。ごちゃごちゃとみっともないんだよ、言い訳するやつって。 いや、自己紹介しなくてもw
677 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:21:50 ] >>655 をもう一度読んでみな。いつ誰がBの位置に関数を呼び出す処理について 話を始めた?ここから勘違いを始めて、それについて必死に弁解する意味がないだろw なのに、アホだの、なんだこの低俗な品のない奴は?まぁ、春休み中なんで、 どんな精神レベルの低い子供かは分かるが、こんなのがそのまま大人になったら面倒だな。
678 名前:661 mailto:sage [2008/03/17(月) 13:25:35 ] おーい、>655はどこに行った? あんたのレスに粘着されてるぞ〜w まぁ、いきなり関数呼び出し云々を持ち出した>655も半端に知識をひけらかしたいだけに見えなくもないが。 言っていることは正しいだけに、場とタイミングを間違えたとしか言いようがないな。 恐らくは、安易に短絡構文を使ってデバッグに苦労した経験でもあったのだろう。 >>677 で、誰が何をどう勘違いして、どう弁解していると「あんたは」考えているのかな?
679 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:50:49 ] 言ってることは正しくてもコミュニケーション能力が不足していたら伝わらない典型だな。 別に君が相手側を説得することにメリットがあるわけでも無し、そろそろ放っておいたらどうよ。 どっちにとは言わんけど。
680 名前:デフォルトの名無しさん [2008/03/17(月) 13:51:37 ] 議論なら他でやれカスども
681 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 14:02:30 ] >>668 > for(i=1; i<=MAX; i++) { > for(y=1; y<=MAX_Y; y++) { > if( y%4 != 0 ) leap=0; > else if( y%100 != 0 || y%400 == 0 ) leap = 1; > } > } 潜在的バグがあるね 以下のようにすれば顕在化する for(y=1; y<=MAX_Y; y++) { ↓ for(y=1; y<=MAX_Y; y++,leap=1) {
682 名前:デフォルトの名無しさん [2008/03/17(月) 14:46:59 ] うるう年の判定なんて別に高速じゃなくてもいいじゃないか。
683 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 14:50:06 ] まぁ、事実上4年に一度で充分だしね。 # まさか、1900年や2100年を処理しなくてはいけないケースなんてそうそうないだろ。
684 名前:デフォルトの名無しさん [2008/03/17(月) 14:53:45 ] 問題になるほど何回も何回も判定を行うなら、0〜3000くらいの判定表(0か1が入るintとかcharの配列)を作ってテーブル参照にするとか。 範囲外はいつものの方法でやるとして。
685 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 15:00:48 ] 発想は悪くないけど、無駄だから。
686 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:23:50 ] はぁ・・・効率よく、無駄を省くという点が重要なのに、やれ自分にとって 必要あるないだの、何を基準に話を始めてんだ? それが分かってないから、お前らはいつまで経っても 客観的な立場、意見が重要となる社会に出てまともに活動が出来ないんだよ。 路上じゃあんたらにとってそんなルールは必要ないとか都合が悪いとか言ってると すぐに事故るぞ。自分が原因で。
687 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:28:44 ] まともに議論できる奴はこのスレにはいないな。 所詮は宿題スレか。
688 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:34:18 ] 効率の基準が違うから〜♪ スレ違いはしょうがない〜♪
689 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:36:06 ] 宿題スレに何を期待してたんだ…
690 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 17:24:37 ] >>668 かなり差が出るんだな。 正直、感動した。 >>681 もう少し詳しく
691 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:02:49 ] 400の倍数に該当しない、100で割り切れたときの判定が不十分か。 たまたまその前年が平年でleapを平年の値で受け継いでいるが。
692 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:24:39 ] >>691 説明ありがとん。 つーか、自分の鈍さに絶望。
693 名前:648 mailto:sage [2008/03/17(月) 22:17:07 ] 俺が最初に4で割り切れるかを判定しなかったばかりに、スレがこんなことに!w
694 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:19:46 ] [1] 授業単元:プログラミング [2] 問題文 :5つの数字を標準入力より配列テーブルへ入力する。 配列の先頭アドレスと共に結果用の配列の先頭アドレスを関数 四則演算に渡す。 四則演算された結果をprintfで標準出力に出力する。 入力のときの表示は DATA = とする 出力のときの表示は X + Y = Z X - Y = Z X * Y = Z X / Y = Z とする なお、加算はaの0と1番目、減算はaの0と2番目、乗算はaの0と3番目、 除算はaの0と4番目をそれぞれ行い、計算結果をpに入れる。 注)ポインタを使用すること。 リンク方法 cal(a,p); 入出力情報・「記号 a 型名 char *」「記号 p 型名 int *」 [3] 環境 [3.1] OS: windowsxp [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C言語 [4] 期限: 今日の朝まで よろしくおねがいします
695 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:33:20 ] >>694 #include <stdio.h> void cal(char *a, int *p) { p[0] = a[0]+a[1]; p[1] = a[0]-a[2]; p[2] = a[0]*a[3]; p[3] = a[0]/a[4]; } int main() { char a[5]; int p[4], i, tmp; /* 入力 */ for(i=0; i<5; i++) { printf("DATA="); scanf("%d", &tmp); a[i] = (char)tmp; } /* 計算 */ cal(a, p); /* 出力 */ printf("%d+%d=%d %d-%d=%d %d*%d=%d %d/%d=%d\n", (int)a[0], (int)a[1], p[0], (int)a[0], (int)a[2], p[1], (int)a[0], (int)a[3], p[2], (int)a[0], (int)a[4], p[3]); return 0; }
696 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 06:33:18 ] 久しぶりにアイツが来たのかと思ったじゃねーかw
697 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 07:03:53 ] >>654 過去スレでも似たような議論あったな。 int isLeapyear(int year) { return year%4 ? 0 : year % 100 ? 1 : year % 400 ? 0 : 1; } &&とか||使わないでこれで十分じゃね?
698 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 07:31:13 ] えっと、4で割り切れても100で割り切れた場合の対処が不十分だったという指摘があったが・・・ とにかく、4の倍数に当たらないものまで、100で割り切れるかどうか、400で割り切れるかどうか といった判定にまで持ち込まなければ、その無駄がかなり省けるというのは 繰り返す回数を増やして目に見える処理時間の差を出したコードを参照して頂ければお分かりになられるかと。
699 名前:694 mailto:sage [2008/03/18(火) 07:43:30 ] >>695 ありがとうございます
700 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 08:47:13 ] まぁ、それほど大きなロスではないが、関数を呼び出して値を返す仕組みと、 main関数の中に条件判定を入れて処理するのとでは、自分の環境で計測したところ、 1.7倍の差が出た。mainの中で判定した場合で1秒だと、関数を呼び出した方は1.7秒。
701 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 09:05:24 ] まさかとは思うが、最適化しないで較べてないか?
702 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 13:59:46 ] 最適化しちまったら同じになってしまうだろう
703 名前:デフォルトの名無しさん [2008/03/18(火) 19:13:06 ] 最適化して同じになるなら コードが読みやすいほうが良いに決まってるだろ。 実用時は最適化するんだから。
704 名前:名無しです [2008/03/19(水) 22:00:09 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ・リスト構造の実現 1,グラフデータを記憶する隣接リストの作成, 2,深さ優先探索に必要なスタック, 3,幅優先探索に必要なキューの作成に必須なデータ構造です. 4,ポインタを用いて動的に確保するかの選択が必要です. 5,また,データへのアクセス効率を考えて,両方向環状リストとして構築する ・上記リスト構造を用いて,スタックおよびキューの実現 もっとも大雑把に書くと, スタックを使ったグラフの深さ優先探索,キューを使ったグラフの幅優先探索,グラフの連結成分分解の実装. ファイル(複数のグラフデータが列記されている)からグラフを1つずつ読み込み,プログラム上で扱い やすいデータ構造上にグラフデータを反映させ,その上で探索してもらうという構成になっています. グラフは無向グラフです [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン:visual studio 2003 [3.3] 言語: C言語 [4] 期限: 20008年3月20日20:00まで [5] その他の制限: C言語初心者なのでなるべく簡単にしてくれるとありがたいです. リンクの張り方がわからず、問題文が長くなりお手数をかけて申し訳ありません。 どうぞよろしくお願いします。
705 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 06:51:42 ] >>704 4.が意味不明。 ポインタを使わなければ任意で複数のエッジの表現はできない。
706 名前:名無しです [2008/03/20(木) 09:40:57 ] 4について、領域を(配列を用いて)静的に確保するか,ポインタを用いて動的に確保するかの選択が必要です. 「静的」と「動的」とは,例えば配列 a[10]のように格納する領域が指定されているのを静的といい, 動的というのは問題によりその格納する領域が変化すると、説明されました 文章が稚拙でわかりにくいところが多々あるかもしれませんが、よろしくお願いします
707 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 11:43:20 ] >>706 リストは動的に領域を確保しないと意味ないぞ。 目的が単にスタック、キューの実現なら、配列を使って実装できるけど、 リストを使うことが課題で決められているなら、動的に確保するしかない。
708 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 11:52:50 ] 多分リスト構造で表現するのと ノード数Xノード数の2次元配列を使う表現の2種類を区別しろというこではなかろうか?
709 名前:名無しです [2008/03/20(木) 11:55:02 ] なるほど。課題でリストを使うようにと言われているので動的に確保したいです。 後出しになってしまってすいません。ご教授お願いします
710 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 12:06:38 ] あとファイルのフォーマットがわからないと 後出しでファイルの入出力の仕様追加が発生すると困りそうだな。
711 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 12:08:32 ] >>708 なんか俺もそう思うんだが、 >>704 の1にはグラフデータを記憶する隣接リストの作成って書いてあるんだよな。 なんか余計分からなくなってきた…orz
712 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 12:15:52 ] >>709 もう少し詳しい課題の内容が分からないと教えられないかも
713 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 12:22:42 ] 実は元教官の俺が言うのもなんだが、 ワザと曖昧な出題をして学生がちゃんと仕様を確定する的確な質問をするか。 頓珍漢な答えを提出するか。 曖昧さの中から考えられるすべてのケースを想定して複数回答を提出するか というのを試したことがある。
714 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 12:32:57 ] >>713 >>704 が出された正確な課題で、わざと曖昧な課題にしてあるのなら いくらでも作りようがあるけど、なんか単に課題が書ききれてないだけのような気が…。
715 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 13:17:43 ] このスレのことをよく知っていて、わざと曖昧に出題してるとか…
716 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 13:23:05 ] ちなみに713がどんな問題を出したのか気になる
717 名前:名無しです [2008/03/20(木) 13:47:10 ] たぶん>>708 だと思います。 ファイルの入出力の仕様というのはfopenとかのことでしょうか? 「リスト構造」を基に「スタック」,「キュー」,およびグラフのデータ構造(隣接リスト等)を実現し, アルゴリズムに従い,グラフ上を探索し,得られた探索木を出力してもらうプログラムの作成と課題には 書いてあるのですが、これじゃ情報不足でしょうか? 至らぬ文章力ですいません orz
718 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 14:04:39 ] どこかに書いてあるなら、書いてあることすべて写して書き込めばいいのに 量が多いなら>>1 のうpろだを使うとかして。
719 名前:名無しです [2008/03/20(木) 19:55:13 ] ファイル kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6158.txt 読み込むデータはこれを渡されました。
720 名前:名無しです [2008/03/20(木) 22:46:18 ] 期限で3月20日20:00と書きましたが解けるまでやらなきゃいけないので ぜひご指導お願いします 何度も書き込んですいません orz
721 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 23:26:25 ] >>720 で、グラフの探索とのことですが、何を探索すればいいのでしょうか? 1: 2 3 4 5 10 とかあるのは、「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」という意味でしょうか? そして、互いに一番遠い距離にあるノードの組を求めればいいのでしょうか? 何か情報をくださらないと、これだけでは私は解けないのです。
722 名前:名無しです [2008/03/21(金) 07:52:46 ] 1: 2 3 4 5 10とあるのは、「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」 という意味です。 ファイル kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6159.txt 深さ優先探索を途中までやって間違っているやつを知り合いにもらいました。これを 書き直してわかりやすようにしてはもらえないでしょうか? お願いします
723 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 10:21:30 ] >>704 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6160.c ごり押しで作ってたら、かなり汚いソースになってしまった 初心者には難しいと思うから、ほとんど参考にはならないと思うけど だれもうpしてないので上げてきます
724 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 12:48:03 ] スレチなのを承知でお願いします。気に触ったら無視して下さい。 [1] 授業単元:C#の個人課題 [2] 問題文(含コード&リンク):VC#(VS2008C#)にてwindowsフォームアプリケーションにて WEBカメラ(USB)をプレビューするプログラムを書け。 [3] 環境 [3.1] OS: (WindowsXP) [3.2] コンパイラ名とバージョン:VC#2005or2008 [3.3] 言語: (C#) [4] 期限: [無期限] C#だけどやってもいいか。という方いらっしゃいましたらお願いします。
725 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 16:05:35 ] 内容が変じゃないか?ここ作成依頼スレじゃないぞ ぶっちゃけ知りたいこと課題に偽装しただけにしかみえない
726 名前:名無しです [2008/03/21(金) 22:17:45 ] >>704 作って頂きありがとうございます。 ですがすいませんわからないです orz >>722 のやつを作り変えて簡単なプログラムを作れないでしょうか? 何度もお願いして悪いと思うのですがお願いします。
727 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 13:16:37 ] 未だに>>704 の問題文が意味わからんのは俺だけ? 「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」 これだけ求めたいのなら、ファイルから読み込んだデータを線形リストに格納して ノード番号の位置のデータを参照するだけで済むだろう。 スタック、キューなんて使う必要ないし使いどころがないよな。 >>721 のいうように互いに一番遠い距離にあるノードの組を求めるとか、そんな問題ならわかるが。
728 名前:デフォルトの名無しさん [2008/03/22(土) 13:37:49 ] www.na.cse.nagoya-u.ac.jp/~reiji/lect/alg01/sec10-2.html tnt.math.metro-u.ac.jp/labo/grad/2003/egu/adjoin_list.htm tnt.math.metro-u.ac.jp/labo/grad/2004/masa/graph/0.html
729 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 13:43:50 ] >>727 > 未だに>>704 の問題文が意味わからんのは俺だけ? 本人も含めて誰もわかっていないのでは? >>704 からは、実装方法に関する制限は読み取れるが、 結局どういう問題を解きたいのかが示されていない。
730 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 13:48:19 ] とりあえず混乱しすぎだぞ。おまいら。 ・隣接リスト != リンクリスト, 連結リスト etc. ・動的確保しない連結リスト表現 struct Node { int num; int next; } nodes[20]; とでもして next は次のノードを指す添え字番号を指す。 例えば次の要素アクセスするなら nodes[nodes[i].next]。無効値は -1 とか。 C 使いなら普通ポインタ使うんでこんなことしないだろうが、アルゴリズムやデータ構造の教科書的にはたまにある表現だと思う。 ・「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」はファイルフォーマットの説明。 ・「スタック、キューなんて使う必要ないし使いどころがないよな。」→幅優先探索と深さ優先探索で使うって書いてあるじゃん。 ・(とりあえずの)探索内容→グラフ上を探索し,得られた探索木を出力 つまり単純に辿るだけ。出力フォーマットはしらんが、とりあえずどういう風に探索したかを出力できればいいんだろ。 木というからにはちゃんと親子が分かるようにするべきっぽく、>722 もそんな感じだ。 ・グラフの連結成分分解って書いてあるからここは深さ優先を使うことになるはず。
731 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 13:52:04 ] まとめるとこういうことだろう。 ・両方向環状リストの実装 ・上記を用いた、スタック、キュー、隣接リストの実装 ・上記を用いた、深さ優先探索、幅優先探索アルゴリズムの実装(出力は探索木) ・上記を用いた、グラフの連結成分分解の実装 これ、何回かに分けて出された課題をまとめてやろうとしてるんじゃないの?
732 名前:名無しです [2008/03/22(土) 15:01:51 ] 説明が下手でみなさんを混乱させてしまって本当に申し訳ありません。 >>731 さんがまとめてることをしたいんです。こんなにわかりにくい説明で 理解してくださってありがとうございます。
733 名前:名無しです [2008/03/22(土) 19:43:43 ] >>731 さんのを基にもう一度作ってもらうわけにはいかないでしょうか? 私が最初から>>731 さんのように書けば良かったのですが、説明が下手なのと 理解力がないばかりに orz
734 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 23:56:13 ] >>733 双方向リングリストの実装のみ ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6164.c
735 名前:733 mailto:sage [2008/03/23(日) 00:03:31 ] >>734 リングリストなのに double ended はねーよ orz
736 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 00:17:48 ] double circular linked list が正しい英語
737 名前:733 mailto:sage [2008/03/23(日) 00:21:49 ] >>734 はバグってた kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6165.c 訂正内容 次の行を追加 list->next->prev=ret;
738 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 06:55:06 ] >>733 >>737 を元にスタック実装して、グラフの連結成分分解を作ってみた 連結成分について考え方が間違ってたらすまん できるかぎり簡単にしたつもり kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6166.c
739 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 10:14:59 ] [1] 授業単元:プログラミング [2] 問題文: 問1)次のコードの実行結果を答えなさい。 byte a = 3; System.out.println(a = 2); 問2)次のコードの実行結果を答えなさい。 short a = 3; System.out.println(a == 2); 問3)次のコードの実行結果を答えなさい。 int a = 0; if (a == 1) System.out.print("aの値:"); System.out.println(a); System.out.println("終了"); [3] 環境 [4] 期限:[無期限] [5] その他の制限: なし レベルが違うような質問で申し訳ありません・・。 スレ違いでしたらスルーでお願いします。
740 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 10:19:48 ] Javaの宿題スレにゴー
741 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 10:34:10 ] >>740 ご親切にありがとうございました。
742 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 17:05:36 ] なんだか和んだぞ。
743 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 19:59:02 ] ナゴナゴ
744 名前:名無しです [2008/03/23(日) 22:19:32 ] みなさん>>704 を解いて頂きありがとうございました。
745 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 00:22:15 ] >>738 あぁ・・・ミスった memset(adj, 0, sizeof(adj)*NODENUM*NODENUM); を memset(adj, 0, sizeof(int)*NODENUM*NODENUM); に変えてね・・・
746 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 04:54:50 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6168.txt [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン: visual studio 2005 [3.3] 言語:C言語 [4] 期限:2008年3月24日午前11時(できれば午前中で・・ 急なお願いですがよろしくお願いします。 [5] その他の制限:なし
747 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 06:15:00 ] 教官からどう指示されたのか不明だが、 フローチャートは矢印で繋ぐだけじゃ不十分だよ。
748 名前:746 mailto:sage [2008/03/24(月) 08:06:46 ] 矢印だけではダメなのはわかっています、確かに不十分ですよね それ以外は自分でんはんとかしようと思っているので・・・ ここではそれしか表現できなくて
749 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 09:55:10 ] 丸投げするか自分で全部やるかどっちかにしろよこんな簡単なもの。 この程度の物は矢印をまともに全部書いたらほとんどそれで答えじゃねーか。
750 名前:746 mailto:sage [2008/03/24(月) 10:37:09 ] その程度すら分からないんです、スイマセン・・、丸投げでおねがいします。
751 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 10:55:48 ] もう時間ないが、処理の流れはわかっているようだから ソースにくどいほどコメント書いて、それを適切な四角で括って 矢印で繋げばいいんじゃねーの。
752 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 12:35:40 ] ○開始 ↓ ◇センスの有無 ↓あり ↓なし □合格処理□不合格処理 ↓←───┘ ○終了
753 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 13:24:28 ] [1] 授業単元:プログラミング [2] 問題文:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6170.txt [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:visual studio 2003 [3.3] 言語:C [4] 期限:3/27 よろしくお願いします。
754 名前:デフォルトの名無しさん [2008/03/24(月) 13:31:41 ] >>753 超初心者の宿題だろう 自分で出来ないのかよ
755 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 13:32:42 ] >>753 strcatとstrlen使っちゃ駄目ってのは面倒だね。 (1) #include<string.h> int mystrlen(char*p){ return strchr(p,0)-p; } (2) #include<string.h> int mystrcatlen(char*a,char*b){ return strchr(strcpy(strchr(a,0),b),0)-a; }
756 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 13:34:34 ] >>754 なんだと!テメこのやろー ここがどこだか分かってるのか? 戦闘アドレス なめんなよ
757 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 13:38:50 ] ああ、main部分も書くのか。じゃあこれを>>755 の関数定義の下に付けといて。 (1) #include<stdio.h> int main(){ char p[100]; printf("文字列を入力してください -> "); scanf("%99s",p); printf("'%s'の長さは%dです\n",p,mystrlen(p)); } (2) #include<stdio.h> int main(){ char p[100],q[100]; printf("文字列を入力してください -> "); scanf("%99s",p); printf("文字列を入力してください -> "); scanf("%99s",q); printf("'%s'と'%s'を繋げると",p,q); printf("'%s'になり、長さは%dです\n",p,mystrcatlen(p,q)); }
758 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 14:15:04 ] >>757 助かりました。 ありがとうございます。
759 名前:名無しです [2008/03/24(月) 17:44:14 ] >>704 なんですが>>738 で解いてもらったやつでプログラムの動作チェックを行ったら, コンパイルすると「int main(int argc, char **argv){ /*argv main関数に引数を渡す*/」 でエラーが出てしまいます. エラー表示は「'0x40'は認識できません」と「'0x81'は認識できません」の2つが出てしまいます. 後,幅優先探索と連結成分分解のプログラムは>>738 には入ってないんでしょうか? 何度もレスしてすいません.どうかお力を貸してください.
760 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 17:46:39 ] コメント以外のところに全角スペースがあるんだろ
761 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 21:21:20 ] >>759 幅優先探索は入ってない 連結成分分解ってのが、つながってる点をまとめて表示することでないなら、 俺の連結成分の考えかたが間違ってる
762 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 00:00:16 ] >>759 連結成分分解は、>>738 で問題ない? 問題ないなら、幅優先探索での連結成分分解も作るけど (キューの実装できれば深さ優先探索とほとんど処理変わらないから、 必要ないかもしれないけど)
763 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 02:17:34 ] ちょっと面白い問題考えたから、みんなで解いてみてくれ。 Python で作ったプログラムで N < 10 までは試したけど、 発展問題についてはまだやってない。 基本問題: 例えば N = 8 としたときに 「この文章には0が1個、1が5個、2が3個、3が2個、 4が1個、5が2個、6が1個、7が1個含まれています」 という文章が生成されるとして、9以下の任意の自然数Nについて もこのような文章を生成するプログラムを作れ。 解がない場合は「解なし」とする。 発展問題: Nが10以上の時、解はあるだろうか?
764 名前:デフォルトの名無しさん [2008/03/25(火) 02:30:37 ] 0から順に数えていき、値が更新されたら追加していけばいつか出来ると思うが
765 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 02:46:44 ] 基本問題がわからない
766 名前:デフォルトの名無しさん [2008/03/25(火) 02:50:48 ] >>765 文書中に現れる文字をカウントして正しい文書にする
767 名前:デフォルトの名無しさん [2008/03/25(火) 02:54:58 ] もし解があることがわかれば総当たりでやればいつか解けるので いつでもとけるのかどうかを考えればよい
768 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 02:55:46 ] >>765 正しい自己言及文を生成する問題。 「」の中の数字の数と文章の内容を確認すれ。
769 名前:デフォルトの名無しさん [2008/03/25(火) 03:04:03 ] 0、1、・・・N-1と並べて、 0の個数をカウントしてそれを記録 次に1の個数をカウントして記録 もしその個数に0が現れれば0を更新 それにも1が現れれば1の個数を更新 ・・・・ 無限に値が更新される事はなく次へ進めるとは思う たとえば0が現れるのは桁上がりが現れるときだから(何度か更新を繰り返したとすると) 一度に0がいくつも増えなくては行けなくなりいつか停止すると思う
770 名前:デフォルトの名無しさん [2008/03/25(火) 03:07:45 ] 解ありをちゃんと説明してくれれば後は簡単なんだ だれか頼む
771 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 03:14:53 ] 「1が1個」 ↓ (あ、1の数が変わった。更新しよう) ↓ 「1 が 2 個」 ↓ (あ、1の数が1個にもどった。更新しよう) ↓ 無限ループ。
772 名前:デフォルトの名無しさん [2008/03/25(火) 03:17:33 ] 解無しも有るのか・・・
773 名前:デフォルトの名無しさん [2008/03/25(火) 03:25:48 ] nがn個ってなったら駄目なんだな そうなる所はカウントを保留しておき個数が変化するのを待ってカウントするか 簡単にはできそうにないね 巡回セールスマンと同じ種類では?
774 名前:871 mailto:sage [2008/03/25(火) 03:27:12 ] (さっき Python スレで突っ込まれた) ちなみに、Nの意味はN以上の数が出てこないって解釈で。すると N=1 のときは解なし。 N=2 も解なし。 N=3 も解なし。 N=4 では 「0が1個、1が3個、2が1個、3が3個」 「0が1個、1が2個、2が3個、3が2個」 N=10 ってのは「"10"という部分文字列の数」という解釈にしようと思う。
775 名前:デフォルトの名無しさん [2008/03/25(火) 03:29:53 ] N=1は解あるだろ 0が1個じゃないの? 間違えている?
776 名前:デフォルトの名無しさん [2008/03/25(火) 03:31:13 ] N=2 0が1個、1が2個では? どこか間違えている?
777 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 03:31:36 ] N以上が現出するとダメらしい。
778 名前:871 mailto:sage [2008/03/25(火) 03:34:29 ] 「0が1個」 だと、0については言えてるけど、 1について言及が無いので美しくない(俺的に) できれば文章中に出てくる全ての数字について言及させたい。 だから <N 以上の数を使わない>てルールをつけたんだ。
779 名前:デフォルトの名無しさん [2008/03/25(火) 03:34:50 ] そしたら総当たりの有限時間では解判定は出来るんだな その制限を外した場合は>>771 のような無限ループは発生するのだろうか?
780 名前:デフォルトの名無しさん [2008/03/25(火) 03:44:13 ] N以上が現れない場合でも、簡単には求められないよな 試行錯誤か、全パターンを生成して文書チェックするかくらいで いずれにしても時間がかかる 例えばN=1000を一日以内に解くプログラムとかは作れないんじゃないか?
781 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 04:38:11 ] 0が1個、1が12個、2が3個、3が2個、4が1個、5が1個、6が1個、7が1個、8が1個、 9が1個、10が1個、11が1個、12が2個、13が1個、14が1個。
782 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 04:57:56 ] >>781 その文章中の0は2個ありそうだ。 例えば11という数字があった場合、1として2個で11として1個と数えるのか、 それとも11という塊になっている場合は1としてはカウントしないのか。
783 名前:デフォルトの名無しさん [2008/03/25(火) 04:59:50 ] 111は、1が3つ、11が2つ、111が1つ ですよね
784 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 05:01:08 ] こういう問題の場合数えないのが普通だと思うけど。
785 名前:デフォルトの名無しさん [2008/03/25(火) 05:04:00 ] 異なるものがいくつあるのか正しく求めるのが正解のはずだ 783が正解
786 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 05:14:04 ] 数値の組み合わせ(順序数, 順序数と個数自身を含めた個数)について無矛盾にする問題とみなすか、 文章から得られる全ての部分文字列の集合内の数値に相当する要素の個数について無矛盾にする問題とみなすか。
787 名前:デフォルトの名無しさん [2008/03/25(火) 05:18:23 ] これはやる意味ないと思っている 巡回セールスマンと同じく多項式時間では解けないというやつと思う プログラム作るだけ時間の無駄と思っている
788 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 11:22:49 ] 0が2 1が8 2が3 3が3 4が1 5が1 6が1 7が1 8が2 9が1 10が1
789 名前:デフォルトの名無しさん [2008/03/25(火) 11:25:04 ] 一般Nで解けるソースはりつけてよ
790 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 11:53:54 ] const int N = <整数> std::string S[N]; int count(int num){ int sum=0; std::string substr = <num の文字列表現> for(int i=0; i<N; ++i) { std::string i2s = i の文字列表現 sum += <文字列 i2s に含まれる substr の数> sum += <文字列 S[i] に含まれる substr の数>; } return sum; } int check(){ for (int i=0; i<N; ++i) { if (count(i) != <文字列S[i]の整数表現>) return; } printf("----\n"); for (int i=0; i<N; ++i) printf("%d が %s\n", i, S[i]); } void find(int depth) { if (depth < 0) { check(); return; } for (int i=0; i<N; ++i) { S[depth] = <i の文字列表現>; find(depth-1); } void main() { find(N-1); }
791 名前:名無しです [2008/03/25(火) 12:20:30 ] 流れを切って申し訳ありません >>704 の問題ですが >>738 さんのでやると連結成分分解のプログラムの動作を確認できるんですけど,ずっと同じ出力結果なんです。 出力結果の数字が何を指しているのかわからないのでどのような意味なのか教えてもらえないでしょうか? 幅優先探索での連結成分分解もよくわからないので作っていただけないでしょうか? よろしくお願いします
792 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 13:42:01 ] >>789 間違ってるかもしれないし、厳密解でもない ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6174.c
793 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 15:38:35 ] 763って個数の合計はN*2に決まってるんだから 対数時間で計算出来そうにみえるけど ナップザック系とは関係なくないか
794 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 16:26:33 ] >>763 面白いな
795 名前:デフォルトの名無しさん [2008/03/25(火) 20:59:56 ] コード貼るならここがいいよ ttp://codepad.org 実行結果までやってくれる
796 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 21:48:06 ] [1] 授業単元:プログラミング言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6176.txt kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6177.txt [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン:gcc 3.4 VC 6.0 [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限:明日の夜まで [5] その他の制限:ほとんど素人が手をつけ始めたくらいの知識しかないです。だから難しいことはしてないかも。 何問か課題を出されたのですがどうしてもこの2つが分かりません。よろしくお願いします。
797 名前:796 mailto:sage [2008/03/25(火) 21:49:55 ] 申し訳ありません。OSと言語のこと忘れてました。 OSはwindowsで言語はC言語です。
798 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 21:55:15 ] >>796 一問だけ解いてみた #include <stdio.h> int main(void){ int i, j; for(i=0;i<26;i++){ for(j=0;j<=i;j++) putchar('A'+i); for(;j<=26;j++) putchar('Z'-i); putchar('\n'); } return 0; }
799 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:01:47 ] >>763 やってみたけど問題としてはツマンナイ答えしかでないっぽいよ。 いいアルゴリズム探す気力なくなったの途中でやめました.. ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6178.c
800 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:08:22 ] >>799 対応しているのは N=10 まで?
801 名前:799 mailto:sage [2008/03/25(火) 22:10:25 ] 10行目まちがえた。適当でごめん × if( c[ a[ i ] ] != 1 ) ○ if( c[ i ] != 1 )
802 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:13:38 ] 800 N=19ぐらいまで。それ以上でも正解は同じパターン一個っぽい。 (のでそれ以上追求するのやめました。)
803 名前:796 mailto:sage [2008/03/25(火) 22:16:38 ] >>798 ありがとうございます。putchar使えば良かったのですね。
804 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:18:17 ] >>802 N=11 のときに 0 と 1 の個数が違うんだが…
805 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:28:36 ] >>796 下の奴適当にやってみた 曜日を調べるのは「C言語 曜日」でぐぐって一番上の奴使った ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6179.txt
806 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 23:14:47 ] >>800 のやつを貼付けてみた。 ttp://codepad.org/3hP8x4xd
807 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 23:32:13 ] >>791 全部のグラフで同じ出力結果になるってこと? 出力結果はただ単に、到達可能な点をまとめて{ }で囲んで表示してるだけ 出力結果が何を指しているのか分からないってことは、 >>738 のプログラムがあってないってことなんで、幅優先探索は作れない
808 名前:デフォルトの名無しさん [2008/03/26(水) 10:24:33 ] >>796 1番目の問題の表示例は AZZZZZZZZZZZZZZZZZZZZZZZZZZ BBYYYYYYYYYYYYYYYYYYYYYYYYY CCCXXXXXXXXXXXXXXXXXXXXXXXX の間違いか? AZZZZZZZZZZZZZZZZZZZZZZZZZZZ BBYYYYYYYYYYYYYYYYYYYYYYYYYY CCCXXXXXXXXXXXXXXXXXXXXXXXXX だと26行目は ZZZZZZZZZZZZZZZZZZZZZZZZZZAA になってしまうぞ。
809 名前:デフォルトの名無しさん [2008/03/26(水) 20:37:58 ] [1] 授業単元: プログラミング演習 [2] 問題文:5人のテストの点数をキーボードから入力し、合計と平均を表せ。 [3] 環境 [3.1] OS: Windows・Linux/ [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 明日まで 初期的な問題ですがお願いします。
810 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 20:55:18 ] >>809 #include<stdio.h> int main() { int i, test[5], sum = 0; for (i=0; i<5; i++) { printf("%d人目の点数を入力してください:", i+1); scanf("%d", &test[i]); sum += test[i]; } printf("合計:%d 平均:%f\n", sum, (double)sum / 5); }
811 名前:デフォルトの名無しさん [2008/03/26(水) 23:19:00 ] test+iでええやん。
812 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 23:25:25 ] >>811 君は一年後自分のレスを思い出してこう言うだろう 「認めたくないものだな、自分自身の若さ故の過ちと言うものを。」
813 名前:812 mailto:sage [2008/03/26(水) 23:27:41 ] おれは今自分自身の過ちを後悔している コピペ元が間違ってた orz 「認めたくないものだな。自分自身の、若さ故の過ちというものを。」
814 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 23:55:53 ] ガノタ乙 と言って欲しいんだろ?
815 名前:デフォルトの名無しさん [2008/03/27(木) 00:01:02 ] >>812-813 なんだこいつ・・・
816 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 00:07:28 ] それより>>811 の解説してくれ
817 名前:812 mailto:sage [2008/03/27(木) 00:18:13 ] >>816 シンタックスシュガーを知ったばかりなので使いたがっている状態
818 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 01:08:39 ] 糖衣構文でええやん。
819 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 02:17:54 ] ところで、 >>44 > /* 文字列の長さ */ > for(str_length=0; str[str_length]; str_length++) {} ではなく str_length = sizeof (str) - 1; だと思うが。
820 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 02:20:36 ] >>811 そもそもtest[5]はscoreでええがな
821 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 02:30:33 ] >>819 わざわざ「文字列の長さ」と書いてあるんだから配列の大きさを基準にしちゃダメじゃないか?
822 名前:デフォルトの名無しさん [2008/03/27(木) 09:03:35 ] >>817 こいつもしかして、test[i]こそがシンタックスシュガーだということを知らないのでは・・・
823 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 10:49:45 ] >>816 test[i]は*(test+i)のシンタックスシュガー &test[i]は&*(test+i)のシンタックスシュガー &*ってムダじゃね?ってことだろ。
824 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 14:09:52 ] 糖衣だろうがなんだろうが &test[i] なんて書き方はしねーよ
825 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 14:17:26 ] それが、&test[i]の方が多数派だったりするんだよw
826 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 14:29:03 ] 確かに&test[i]って記述はよく見かけるね 俺は個人的に好かない書き方だ Cの配列とアドレッシングとの関連がわかってないのかな
827 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 15:00:27 ] 俺はCだと基本どうでもいい。所詮、構文糖。 が、C++だと&a[i]とa+iの意味が違う事がある。(std::vector等)。 STL等のランダムアクセス可能なコンテナだと&a[i]は使えるけどa+iは使えない。 そうなるとCを使うときもC++の流儀に合わせて&a[i]と書きたくなる。
828 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 15:21:10 ] vectorで&a[i]なんて何に使うんだ?
829 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 15:45:00 ] char*を要求する関数を呼び出すときとか
830 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 15:55:40 ] char*ならstd::string使えよ・・・
831 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 16:00:56 ] 非constのchar*が必要なとき
832 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 16:48:17 ] &を見れば定義をみないでもアドレスであることがわかる ソース中の[をみれば配列にアクセスしている箇所を testをキーワードにして検索したりしないでもすぐ探せる 保守しやすくなるからワザとやってるんじゃないの
833 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 16:52:58 ] >>826 Cの配列とアドレッシングとの関連がわかっていることと &test[i]と書くことは全く別問題。
834 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 22:46:33 ] &test[ i ] 配列testのi番目の要素のアドレス test + i ポインタtestからi * nずらしたアドレス って感じだから前者の方がしっくりくるって人が多数派ににるんじゃない?
835 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 23:52:10 ] &test[i]って書き方はあまりしないけど、&test[0]って書き方なら結構するな testだけだとパッと見わかりにくいし。
836 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 04:23:24 ] >>835 char buf[1024]; int size = sizeof(&buf[0]); って書くってこと?
837 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 04:35:51 ] オッス、オラC言語歴10年、もっとオラがwktkするような宿題を依頼してくれYO!
838 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 04:42:23 ] >>836 何をしたいのか理解できない
839 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:17:42 ] 整数を入力してください:25 1234567890123456789012345 こんな感じで1234567890123…を読み込まれた整数の個数だけ繰り返し表示するプログラムを作成する問題なのですが 誰か教えて頂けないでしょうか?
840 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:27:22 ] [1] 授業単元: [2] 問題文(含コード&リンク):>>839 [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:BCC Developer 1.2.21 [3.3] 言語:C [4] 期限:[無期限] [5] その他の制限:独学ゆえに聞ける人が居なくて困ってます
841 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:29:21 ] printf("%u", n%10); あとは頑張れ。
842 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:30:16 ] >>839 #include <stdio.h> int main() { int n, i; printf( "整数を入力してください:" ); scanf( "%d", &n ); for(i=1; i<=n; i++) putchar( '0'+i%10 ); return 0; }
843 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:30:26 ] 独力で学習することが独学。 聞ける人がいないのは孤独。
844 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:31:01 ] >>841 勉強用に捻くれたコードにしてみた。 #include<stdio.h> int main(void){ int n; printf("整数を入力してください:"); for(scanf("%d",&n);n>0;n-=10) printf("%.*s",n,"1234567890"); return 0; }
845 名前:844 mailto:sage [2008/03/29(土) 14:31:36 ] おっとアンカミス s/841/840
846 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:42:21 ] ありがとうございます! 上京したてで友達がいない中、予習してまして…
847 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:50:16 ] 勉強用に、の意味がわからない
848 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 16:14:46 ] 勉強用に捻くれたコードを提示すると、捻くれた知識が身に付くだけだぞ。
849 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 17:55:02 ] と、捻くれた人が言ってます
850 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 18:43:08 ] >>840 と >>844 は師匠と弟子か? もしそうならスレ立てしてそっちでやれよ ついでに俺は前置きで > こんなの書いても現段階だと悪影響にしかならん気はするぞ って書いておいたんだがな
851 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 18:55:00 ] >って書いておいたんだがな どこに?
852 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 19:11:50 ] >>850 > >>840 と >>844 は師匠と弟子か? いや、まったく関係なし。 単に暇つぶしで適当かつ、それなりに捻くってコードを書いただけ。 真面目なコードは既に出てたし、こういう捻った書き方もあるよーってね。 #まぁぶっちゃけprintfの書式で遊んでみたかっただけなんだけど。
853 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 19:16:56 ] 勉強用に、って自分の勉強のことか
854 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 21:07:15 ] 変なコードを書くときは、一々捻くれたとか書かないでそのまま書く。 そういうことを書くとちょっと変わった俺臭がきついから。
855 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 21:10:10 ] いよいよCにすら関係なくなってきたぞ
856 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 23:39:59 ] まぁ、ぶっちゃけ、これらを習って最終的に何を作る目的があるのか? 自分も大学生時代にC言語の授業はあったけど、そこで習ったことだけじゃ通用せんが 必要なことは習っていた。その後、自分でライブラリを調べて、日ごろの使用目的に応じて 必要なプログラムを作るようになった。そうなるのが望ましい。
857 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:22:05 ] まあここに来るのは「プログラムの宿題マンドクサ。誰かにやってもらおう」って人だから、望むべくもないかもね。
858 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:36:29 ] それくらいの人の方がうれしい 単位がかかってるとか理解できないからもっと簡単にしてくれとかちょっとうざい
859 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:43:56 ] 何でも良いから宿題かもん
860 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:46:37 ] ひまなら project Euler でもやってれば
861 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:48:37 ] おおやってみるdクス
862 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 12:55:14 ] [1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク):() 指定文字列と一致する文字列が規定の文字列に存在するかどうかを2分探索法で探索するプログラム [3] 環境 [3.1] OS: (Windows/Linux/等々) linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)3月31日AM9:00まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)特になし 上記のプログラムの作り方が分かりません。文字列は2つとも配列に格納してある状態です。よろしくお願いします。
863 名前:862 mailto:sage [2008/03/30(日) 12:57:51 ] ↑書き忘れました。 規定の文字列というのは2分探索法ですので aaabbcのように辞書順にソートされている1行の文字列です。
864 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 13:32:09 ] | 1 2 3 4… 9 --------------------- 1| 1 2 3 4… 9 2| 2 4 6 8… 18 3| 3 6 9 12… 27 4| 4 8 12 16… 36 以下省略 と、いった感じの九九の表をforを使って作りたいのですが、どうしたらよいのでしょうか?
865 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 14:02:38 ] int main() { int i, j; const int max = 9; printf(" |"); for (i = 1; i <= max; i++) { printf(" %3d", i); } printf("\n--+"); for (i = 1; i <= max; i++) { printf("----"); } for (i = 1; i <= max; i++) { printf("\n%2d|", i); for (j = 1; j <= max; j++) { printf(" %3d", i * j); } } return 0; }
866 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:06:39 ] >>862 mainは適当に書いたから書き直したほうがいいかも kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6186.c
867 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:09:28 ] >>862 二分探索には標準ライブラリ関数bsearchを使いました。 #include <stdio.h> #include <stdlib.h> #include <string.h> int cmp( const void* key, const void* elm ) { return strcmp( (const char*)key, *(const char**)elm ); } int main(void) { // 規定の文字列。辞書順にソートされていること。 static const char* const table[] = { "abc", "def", "ghi", "jkl", "mno", "pqr", "stu", "vwx", "yz", }; const char** hit; char str[101]; printf( "検索文字列:" ); scanf( "%100s", str ); hit = (const char**)bsearch( str, table, sizeof(table)/sizeof(*table), sizeof(*table), cmp ); if( hit ) printf( "'%s'は%d番目に存在します。\n", str, hit-table ); else printf( "'%s'は存在しません。\n", str ); return 0; }
868 名前:867 mailto:sage [2008/03/30(日) 15:21:42 ] >>863 を把握していなかった。修正。 #include <stdio.h> #include <stdlib.h> #include <string.h> int cmp( const void* key, const void* base ) { const char* key_str = (const char*)key; return strncmp( key_str, (const char*)base, strlen(key_str) ); } int main(void) { static const char base[] = "aaabbc"; // 規定の文字列 const char* hit; char str[101]; printf( "検索文字列:" ); scanf( "%100s", str ); hit = (const char*)bsearch( str, base, strlen(base), 1, cmp ); if( hit ) printf( "'%s'は%d文字目から存在します。\n", str, hit-base+1 ); else printf( "'%s'は存在しません。\n", str ); return 0; }
869 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:03:32 ] >>864 int x,y; puts(" | 1 2 3 4 5 6 7 8 9\n------------------------------" for(x=1; x<10; x++) { printf("%d | ", x); for(y=1; y<10; y++) printf("%d ", x * y); }
870 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:08:44 ] >>869
871 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:50:16 ] 〉〉868 アルゴリズムの問題なのだから、bsearchを使うのはだめなんじゃないか?アルゴリズムを作って使う課題なのだろうし。
872 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 22:57:05 ] C++ のSTLのvectorで、要素の最後から開放していくのはこんな感じであってますか? std::vector<Hoge*>::reverse_iterator itr = v.rbegin() ; while( false == v.empty() ) { delete *itr++ ; v.pop_back() ; }
873 名前:デフォルトの名無しさん [2008/03/31(月) 23:11:01 ] 基本的に領域の開放は無理だろ swapでやるしか無いのでは? ブロックごとに管理して100個使わなくなったら解放とかじゃないか
874 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:11:47 ] constでない操作を呼び出した時点でiteratorは無効になる。 (実装によりたまたま有効なままかもしれないけど) ↓でいいんじゃない。 while(!v.empty()) { delete v.back(); v.pop_back(); }
875 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:14:51 ] pop_backした際にiteratorが無効になるので駄目。 なので while( ! v.empty() ){ delete v.back(); v.pop_back(); } もしくは for(std::vector<Hoge*>::reverse_iterator itr = v.rbegin();itr != v.rend();++itr) delete *itr; v.clear(); もしくは std::for_each(v.rbegin(),v.rend(),boost::checkd_deleter<Hoge>()); v.clear(); あたりをどうぞ。 2番目か3番目がお勧め(3は要boost)
876 名前:デフォルトの名無しさん [2008/03/31(月) 23:18:15 ] 上のソースで、一つずつ領域解放出来るの??? swapしか出来ないと思ってたけど
877 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:21:33 ] 解放しようとしているものを取り違えている。 v.empty()がtrueだけどメモリがreserveされてる話とは別。 vector<Hoge*>().swap(v); てことだろうけど、これだとvの中のHoge*が指す先はリークする。
878 名前:デフォルトの名無しさん [2008/03/31(月) 23:22:22 ] delete v.back(); 'delete' のオペランドは非 const ポインタでなければならない
879 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:23:14 ] >>878 vがconstなんだろ。それなら無理だ。
880 名前:デフォルトの名無しさん [2008/03/31(月) 23:23:47 ] >>877 後ろからサイズを小さくしていくならばresize()という関数あるけど駄目なの?
881 名前:デフォルトの名無しさん [2008/03/31(月) 23:24:36 ] vector<int> v(10000); だが・・・
882 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:25:26 ] >>880 元の質問読んでる?vector<Hoge*>の各要素が指す先をdeleteしつvectorをemptyにしたいって言ってるんだよ。
883 名前:デフォルトの名無しさん [2008/03/31(月) 23:31:04 ] そういうことね
884 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:39:18 ] >>875 3番目はboost無くても数行で実装できるよね www.google.com/search?q=for_each+delete
885 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:48:18 ] >>875 うん。今回だとdeleteを適用する関数オブジェクト作るだけだしね。
886 名前:デフォルトの名無しさん [2008/04/01(火) 16:21:58 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6189.txt [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン: visual studio 2003 [3.3] 言語:C言語 [4] 期限:2008年4月2日午前8時 [5] その他の制限:なし よろしくお願いします