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


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

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



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/

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] その他の制限:なし

よろしくお願いします






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

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

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