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/
401 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:13:14 ] >>400 ちょっと質問 ソースとか全然みてないでいうんだが、問題文は「厳密解」になってるけど 動的計画法って「近似解」を求める方法じゃない?
402 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 15:19:46 ] >>401 すまn 漏れの勘違いだったorz
403 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:00:32 ] >>400 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6086.c ・cost のサイズがでかすぎで手元でコンパイル通らなかったので減らした ・n や dist や CITY_NUM の定義が分からなかったので適当に補間した 以後ソースを挙げるなら定義の部分も含めてくれ 実行可能であることが最も望ましい
404 名前:403 mailto:sage [2008/02/25(月) 02:01:47 ] >>403 >コンパイル通らなかったので減らした これは間違いで、コンパイルは通ったが実行時エラーが出たので減らした
405 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 17:53:48 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6089.txt [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2月29日正午ごろまで(できれば28日中) [5] その他の制限: 問題文の例の図がずれて見づらくなっちゃってます。すみません。 ←valueの行で‖と‖の間が空白の場所は数値が入っておらず、演算子に対応してる位置だと思ってください。 また、大分長くなってしまってもいいので、なるべく簡単なプログラムでお願いします。 可能であればでいいので、何を目的とした部分なのか程度の注釈をいくつかつけてくださると助かります。
406 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:57:34 ] [1] プログラミング [2] 問題文長くなるので下に書くごめんなさい [3] 環境 [3.1] OS: Windows2000 [3.2] すいませんわかりません [3.3]C 言語 [4] 期限: ([2008年2月26日まで] できるだけ早くお願いしたいです。 [5] 制限は特になし 機動及びmain関数(kin_main.c) このプログラミングの実行ファイルの名称は(kintai)のする。起動時に因数として勤怠情報ファイルを引数を与える。 >kintai kin0004 引数なしで機動した場合には、ファイル名を入力するようにメッセージを表示させる。 >kintai >勤怠情報ファイルパスを指定してください。 > このプログラミングのmain関数。初期化処理(kin_init()),勤怠情報記録ファイル読み込み処理(kin_file_read()), 入力情報論理チェック機能(kin_logic_chk()),勤怠計算機能(kin_calc()),標準出力機能(kin_display),CSVファイル生成機能(kin_create_csv()), を順次に呼び出し。各関数の戻り値がエラーの場合にはその時点でmain関数に戻る。プログラムを終了にするにはmain関数 出なければならない。エラー情報はいかに示す。 エラーディファイン 出力情報 意味 ERR_INIT 初期化エラー 初期化関数内でエラー ERR_FILE_ACCESS ファイルアクセスエラー ファイルアクセスに失敗した場合 ERR_LINE_NUM_OVER 勤怠情報ファイル文字数オーバー 勤怠情報ふぁいるの1行分文字数が所定の値を超える場合 ERR_PARSE 勤怠ファイル構文エラー 勤怠情報記録の構文が誤ってる場合 ERR_TIME_LOGIC 論理チェックエラー 入力された勤怠情報に誤りがある場合 NG 内部処理エラー 上記のエラーに該当しない場合。 丸なげでごめん
407 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:04:29 ] >>406 勤怠情報ファイルのフォーマットもなしどうしろと? 丸なげどころか、情報がたりなすぎる
408 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:19:28 ] >>407 すまんまだはじめたばっかで フォーマットを検索してもわからん でもこんな感じになるはずなんだ yutori.2ch.net/test/read.cgi/news4vip/1203862807/ の>>4 と>>5
409 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:24:18 ] >>408 見えない なんで検索しないといけないのかも分からんよ
410 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:26:18 ] >>406 とりあえずツッコミどころが満載だな…… ・CSVファイル生成機能(kin_create_csv())でのエラーは捕まえないの? ・エラーを出すのなら、その逆として「●●の処理は成功しました」と順次表示していくと親切じゃない? ・NG→ERR_internal の方がかっこよくない? ・ERR_TIME_LOGICで、「一ヶ月の勤務日数が32日です」とか 「終業時刻+残業時間が、退勤時刻を超えてる」とかも出したほうが親切じゃない?
411 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:32:10 ] int main(int argc,char **argv){ int Result=0; if(argc<2){ puts("勤怠情報ファイルのパスを指定してください"); }else{ FILE *pFile=fopen(argv[1],"rb"); if(pFile==NULL){ printf("%s はオープンできないよ\n",argv[1]); }else{ printf("%s をオープンしたよ\n",argv[1]); puts("閉じるよ"); Result=kin_init(); if(Result<0)printf("kin_init()が %d だと言ってる\n",Result); すまんこんな感じになると思うんだ
412 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:34:46 ] >>410 すごい親切だと思うけどどうやるかさっぱりわからん
413 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:36:34 ] 最初のif else 文からしてあやしい。 fopenを二回やることになるぞ ・引数ありで起動した場合 ・引数なしで、ファイルパスを指定(入力?)する場合
414 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:47:15 ] >>411 のは昨日やってもらったやつなんだ 引数与えないと起動しないようにするらしい kintai kin0004.txtをつけるなければきどうしないようにする 0004は日付が入るyymmでyyが西暦の下二桁mmが該当月 .txt入らないと起動しないようにするみたいなです
415 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:53:12 ] >>414 「ファイル構文」という用語を持ち出すほどだから、 勤怠情報のファイルフォーマットはxmlくらいのものだと思った CSV出力があるのなら、最初からCSV形式で勤怠情報のファイルフォーマットを策定すればいいんじゃない? 古い諺だが データ構造+アルゴリズム=プログラミング と言うし。
416 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:58:06 ] >>415 ありがと でも初心者の俺にはさっぱり意味がわからん
417 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:15:29 ] もしかして勤怠情報ファイルのフォーマットは決まってないのか?
418 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:32:40 ] 正直フォーマットって言葉がでてこないから決まってないです。 問題文にkintai kin0004.txtだった 。.txtぬけてたすまん
419 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:22:08 ] 週末、勢い込んでカレー作った。 たまねぎ炒めるところから始めて、 かなり気合入れて作った。 たまねぎの量、土日あわせて6玉。 うまかった。 でも今日の屁が死ぬほどくさい。
420 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:27:19 ] 余ったタマネギは犬猫に食べさせちゃだめだよ!!! でも実験という名目ならいいのかな??
421 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:33:19 ] だるいから嫌
422 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:33:53 ] だるいから嫌
423 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:35:56 ] だるいから嫌
424 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:03:54 ] だるいから嫌
425 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:25:49 ] >>405 多少問題文とやり方が違うし、あんま自信ないけど、一応できたのでうp kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6091.txt
426 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 04:07:54 ] だるいから嫌
427 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:14:34 ] >>425 乙です ありがとう
428 名前:デフォルトの名無しさん [2008/02/26(火) 11:45:04 ] [1] 授業単元: C [2] 問題文(含コード&リンク): 3次元配列を用いたカレンダー生成プログラム 任意の西暦年数nを与えて、n年のカレンダーを下記の仕様により、作成せよ。 1)3次元配列day[12][6][7]を使用する。 2)出力形式は 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 とする。 3)うるう年にも対応させる。 [3] 環境 [3.1] OS:MacOSX 10.5 [3.2] コンパイラ名とバージョン:gcc 4.0.1 [3.3] 言語:Cでお願いします。 [4] 期限:2/27に提出です。 [5] その他の制限:特にありません。できれば、配列に組み込む部分と出力部分には関数を使ってほしいです。 日を配列に組み込むところで、つまってしまい、どうにもならなくなってしまいました。 最終的には理解できるようにしたいので、簡単なコメントなどつけてくれると嬉しいです。 急ぎで申し訳ありませんが、よろしくお願いしますm(_ _)m
429 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 12:11:46 ] わざわざ配列に入れる必要なんてないと思うけど
430 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 12:32:22 ] [1] 授業単元: C++ [2] 問題文(含コード&リンク): 個人課題 )IDカードを読み込んだら、その番号を"IDList.txt"に出力せよ。 buf[]にはそれぞれ二桁の16進数が入ってるのですが、それを繋げて、 strとしました。このstrに入った値を"IDList.txt"に書き込んでいきたいのです。 略) sprintf(str, "%02x%02x%02x%02x%02x\n", buf[0], buf[1], buf[2], buf[3], buf[4]); これ以降をよろしくお願いします。 ※カードを読み込むたびにstrは変わります。 [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン:VS2005pro [3.3] 言語:C++ [4] 期限:特になし [5] その他の制限:特になし ド素人な課題で申し訳ないのですがよろしくお願いします。
431 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 13:21:29 ] >>430 それ本当にC++の授業なのか? C++の特色のひとつは、Cから格段に進化した文字列操作だぞ
432 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 13:31:08 ] >>430 つーかそれ、FILE * fp = fopen("IDList.txt", "w")してsprintf(str, ...)をfprintf(fp, ...)にすればいいだけじゃん。
433 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 13:55:13 ] >>431 C++の授業ではないのですが、C言語の授業の延長の授業で、 環境がC++だったんでそのように書きました、申し訳ありません。 確かにやっていることは++は含んで無いのだと思います。 >>432 ありがとうございます。 "a"にしたら望んでいた物になりました。
434 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 16:43:10 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6092.txt [3] 環境 [3.1] OS: Linux /Windows [3.2] コンパイラ名とバージョン: (Linux)gcc /(Windows)コマンドプロンプト上でコンパイル [3.3] 言語: C [4] 期限: 2月28日中 [5] その他の制限:長いプログラムになっても構いませんので簡単めなプログラムでお願いします。 設問1と設問3は自分で考えて辿り着いた答を書いてます。違っていたら指摘お願いします。 問2のコメント以下は実際に実行時間を計測して考察しろ的なものだと思うのですが、 どうやればいいのかいまいち分からないため簡単にでいいのでどうやればいいのか教えてください。
435 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:53:38 ] >>434 これ問題文そのまま「コピペ」してるか?
436 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:59:02 ] >>434 設問2 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6093.c 設問3 NULL: 「これ以上前の文字が存在しない」はOK、「次の文字に移る」は、違う DEL: 「これ以上後の文字が存在しない」はOK、「全文字の並べ替え終了」は、違う s1 スタックには下→上に、文字が小→大で積まれる s2 スタックには下→上に、文字が大→小で積まれる ので、s1,s2のスタックに有効な文字データが無い状態をチェックするために使用している(番兵) つまり、2.aの処理の場合にNULL文字がなければ、 s1スタックにデータが無いという状態をチェックする文( if (s1が空) { ... } のような文 ) が必要になるが、 番兵(NULL文字)を用いることにより、その必要がなくなる (番兵については、wikiでもみてね)
437 名前:400 mailto:sage [2008/02/26(火) 20:51:48 ] >>403 ありがとうございます。 説明不足で余計なお手数をおかけしてしまい申し訳ありません。 確かに、double では静的確保に成功する配列サイズなのに、 int で同じ添え字の配列を確保しようとすると確かにクラッシュするようです。不思議ですね。 その点は malloc で動的確保することで無事に動作しました。
438 名前:438 mailto:sage [2008/02/26(火) 21:23:50 ] >>428 行数制限のため入出力は関数にしなかったが。 #include<stdio.h> int day[12][6][7]; int z(int y,int m,int d){ if(m<3)y--,m+=12; return(y+y/4-y/100+y/400+(m*13+8)/5+d)%7; } int main(void){ int y,s,m,w,d; while(1){ printf("y="); scanf("%d",&y); //格納 for(m=0;m<12;m++) for(w=0;w<6;w++) for(d=0;d<7;d++){ day[m][w][d]=w*7+d+1-z(y,m+1,1); if(day[m][w][d]<1||day[m][w][d]>(z(y,m+2,1)-z(y,m+1,1)+7)%7+28) day[m][w][d]=0; } //表示 for(s=0;s<3;s++) for(w=0;w<6;w++,printf("\n")) for(m=0;m<4;m++,printf(" ")) for(d=0;d<7;d++) if(day[s*4+m][w][d]>0) printf("%2d",day[s*4+m][w][d]); else printf(" "); } return 0; }
439 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:11:44 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 文字頻度と文字の連接頻度をカウントするプログラムを作成せよ。 尚、入力ファイルにhamlet3-1をWebからダウンロードして使い、tsv形式で結果を出力せよ。($./a.out hamlet3-1.txt > hamlet.tsv としてプログラムを実行) ‐処理 ・入力ファイルを「読み込みモード」でオープンする ・ファイルの銭湯から1文字ずつ読み込みながら小文字にそろえて、'a'〜'z'の範囲にある場合は以下の処理を行う。 @'a'〜'z'の各文字g亜出現する頻度を計数する。 A連続する2文字の連接頻度をa-a,a-b,...z-zまで計数する。 途中にスペース、改行などアルファベットが入った場合は連接していないとする。 ・計数結果を標準出力に出力 hamlet3-1 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6095.txt [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2008/02/27 23;59迄 [5] その他の制限:特にありません。 よろしくお願いします。
440 名前:デフォルトの名無しさん [2008/02/27(水) 00:17:52 ] [1] 授業単元:プログラミング演習 [2] 問題文: 空気中でつるされている銅球の温度変化は以下の式で求まる。 Cp・ρ((πd^3)/6)dT/dt=-πd^2((λ/d)Nu)(T-Tair) 周辺空気の温度Tair=300K、流速3m/sのときの銅球の温度変化を計算しなさい。 なお、t=0sで銅球の初期温度はT0=700K、銅球の温度分布は無視し、各物性値は500Kで計算のこと。 (Cp=1.03kJ/kgK、ρ=8813kg/m^3、λ=39.71×10^3W/mK、Nu=11.04) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: [3.3] 言語:C++ [4] 期限: 2008年2月27日15:00 [5] その他の制限:使用したアルゴリズムは全て関数化する。 ルンゲクッタ法を使用 どうしてもわからないのですみませんがお願いします。
441 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:26:00 ] >>440 微分方程式を解くのか?
442 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:32:01 ] >>441 そうなんだと思います。
443 名前:デフォルトの名無しさん [2008/02/27(水) 01:23:12 ] [1] 授業単元:情報処理 [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: Windows [3.2]コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 2008年2月27日 12:00 2つの文字列A,Bに入力し、、 それぞれの文字列の先頭から順に一文字づつ抜き出し、 交互に出力するプログラムを作成しなさい。 Str関数を使用しない 例: 文字列Aにabcd 文字列Bに123456 と入力すると 出力結果 a1b2c3d456 が出力されるようにする。 よろしくおねがいします
444 名前:デフォルトの名無しさん [2008/02/27(水) 01:29:42 ] >>439 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6096.txt
445 名前:デフォルトの名無しさん [2008/02/27(水) 01:31:44 ] >>444 は間違い。
446 名前:デフォルトの名無しさん [2008/02/27(水) 01:38:15 ] >>439 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6097.txt こっちが正しい。
447 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:44:13 ] >>443 #include <stdio.h> int main(void) { char bufA[32], bufB[32]; int i=0; printf("文字列Aの入力:"); fgets(bufA, sizeof(bufA), stdin); printf("文字列Bの入力:"); fgets(bufB, sizeof(bufB), stdin); while(bufA[i] != '\n' && bufB[i] != '\n') { putchar(bufA[i]); putchar(bufB[i]); i++; } if(bufA[i] != '\n') puts(bufA+i); if(bufB[i] != '\n') puts(bufB+i); return 0; }
448 名前:デフォルトの名無しさん [2008/02/27(水) 01:46:34 ] Str関数ってなんだろう。Str関数を作れって意味ではなさそうだし。 str〜関数を使えってことかな?
449 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:15:44 ] >>439 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6098.c >>444-446 連接の解釈が違うきがする
450 名前:デフォルトの名無しさん [2008/02/27(水) 02:22:55 ] >>449 ああああああ!!! そうか、そういうことか。
451 名前:443 [2008/02/27(水) 02:27:24 ] >>447 すみません、書き忘れてましたorz 配列でなくポインタででした・・ >>448 strのとこはstrcpyとか使わないでということです。
452 名前:!= 447 [2008/02/27(水) 02:48:15 ] >>451 bufA[i]←こういうのがあってはいけないってことかな? ならば、 #include <stdio.h> #include <stdlib.h> int main(void) { char *bufA, *bufB; int i=0; bufA=malloc(32); bufB=malloc(32); printf("文字列Aの入力:"); fgets(bufA, 32, stdin); printf("文字列Bの入力:"); fgets(bufB, 32, stdin); while(*(bufA+i) != '\n' && *(bufB+i) != '\n') { putchar(*(bufA+i)); putchar(*(bufB+i)); i++; } if(*(bufA+i) != '\n') puts(bufA+i); if(*(bufB+i) != '\n') puts(bufB+i); free(bufA); free(bufB); return 0; }
453 名前:440 [2008/02/27(水) 04:50:45 ] 微分方程式は手計算で解いてみたんですがソースを作ってみても解が出てきません… どうすればいいかもまったくわからないです… どのような解法でもいいのでどなたか本当にお願いします。
454 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 10:02:02 ] >>440 この温度変化の微分方程式の本質は dT(t)/dt = a * T(t) + b という形になるはず。 この解は、微分しても同じ形の関数T(t)が出てくるので、 T(t) = c * e^t のように、指数関数になる、っていうのまではいいのか?
455 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 10:15:33 ] >>454 それはよくないんじゃないか?
456 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 10:18:02 ] >>453 ルンゲクッタ法を調べる
457 名前:440 [2008/02/27(水) 10:58:22 ] >>454 そこまではわかったんですが…どのようにソースを作ればいいのかがわからないです。 ルンゲクッタ法を用いてやってみているんですが解が求まりません…
458 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:01:17 ] >>446 ,449 ありがとうございます!
459 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:02:55 ] >>457 ある程度できてるならソース張って添削してもらった方が早いと思うぞ。
460 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:45:16 ] >>440 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6100.cpp
461 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:47:16 ] >>454 T(t) = c e^t だったら温度が指数関数的に吹っ飛ぶことになるが
462 名前:440 [2008/02/27(水) 12:43:05 ] 以下が自分で作成したソースです。 曖昧なところが多々あってすいません。 double Onndo(double t0, double T0, double h,double k) { int i; int x,y,k1,k2,k3,k4,h2; double K ; /* 解法で得られた値を格納する変数 */ x=t0;y=T0; h2=h/2.; for(i=0;i<=y;i++){ k1=f(x,y,k); k2=f(x+h2,y+h2*k1,k); k3=f(x+h2,y+h2*k2,k); k4=f(x+h,y+h*k3,k); x=t0+(double)i*h; y+=(k1+2.*k2+2.*k3+k4)*h/6.; } K=x; return K; }
463 名前:440 [2008/02/27(水) 12:44:34 ] >>462 *---- 関数f(x,y)の設定 ----*/ double f(double x, double y,double k) { double f; f=k*(y-300)*x; return f; } /*----- 解の設定 -----*/ double Ans_f(double y,double x,double k) { return exp(-k*x); } k=(-6*ramu*Nu)/(Cp*ro*d*d);として計算しています。
464 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:31:19 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6101.txt [3] 環境 [3.1] OS: (Windows/Linux/等々) Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 28日24:00まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) まだ講義ではそこまで深くプログラミングを学んでいないため、if文for文など簡単な文を多めに使う感じにしてください。 プログラムでなく考察を要求してるところを横棒で区切りました。 そちらの方にも軽くヒントなどいただきたいです。
465 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:53:39 ] >>440 Cp……銅の比熱(500K) ρ……銅の密度(500K) d……??? λ……熱伝達係数 Nu……ヌッセルト数 流速3m/s はどこで使うの? d は何? πd^2((λ/d)Nu) の部分は πdλNu と約分できそうだけど、ホントにこのままでいいの? それともd^2ってのは二階微分を表してるの?
466 名前:465 mailto:sage [2008/02/27(水) 16:39:07 ] >>440 そもそも、その銅球の半径は? それがd?
467 名前:デフォルトの名無しさん [2008/02/27(水) 22:56:46 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): コマンド ライン引数に指定されたファイルすべてに対して、 改行文字以外の各行を、 逆さまにして表示するプログラムを書いてください。 なお、対象のファイルには英数字などの半角文字のデータのみが入っているものとし、 漢字などの全角文字は含まれていないものとします。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: [3.3] 言語:C [4] 期限: 2008年2月28日 11:00 [5] その他の制限: 1.文字列の最後の文字から先頭に向かって、順に 1 文字ずつ表示 (ただし、文字列の最後の文字が改行文字の場合、その次から始める) 2. 1 で改行文字があったならば、改行文字を表示 だれかよろしくお願いします
468 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:26:20 ] // >>467 #include <stdio.h> #include <string.h> static void flip(char * str) { char * tail = strchr(str, '\n'); if (tail == NULL) tail = strchr(str, '\0'); for (--tail; str < tail; ++str, --tail) { char foo = * str; * str = * tail; * tail = foo; } } static void flipCat(const char * fileName) { FILE * fp = fopen(fileName, "r"); char buf[1000]; while (fgets(buf, sizeof(buf), fp) != NULL) { flip(buf); fputs(buf, stdout); } fclose(fp); } int main(int argc, char ** argv) { for (int ic = 1; ic < argc; ++ic) { flipCat(argv[ic]); } return 0; }
469 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:43:38 ] >>464 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6103.txt こんな感じかな? 再帰関数を使っているのであんまりサイズが大きい配列だとプログラムが異常終了するかも あと時間の計測方法は知らん 適当にmain関数を使っていじってみて
470 名前:デフォルトの名無しさん [2008/02/28(木) 07:54:50 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):以下の条件を満たしロトのプログラムを作成しなさい。 1 1〜42の中から6つの数字と1つのボーナス数字を選ぶことができます。ただし同じ数字を選ぶことはできません。 2 7つの数字は1次元配列の中になければなりません。 3 1つ1つの問題に対して関数定義を作り1つのプログラムで完成させなさい(関数を使う) 4 すべての関数はポインタを使いなさい。 問1 6つの数字と1つのボーナス数字を選ぶプログラム(エラー表示を含む) 問2 選らんだ数字とボーナス数字を1次元配列で表示しなさい 問3 選んだ数字とボーナス数字を小さい順に並べなさい 問4 ランダムに抽選されるプログラムを作り選んだ数字と比較し、以下の中の1つを表示させなさい Match 6 Jackpot Match 5 + Bonus Almost - just 1 away Match 5 Holidays paid for Match 4 + Bonus Night out Match 4 Full petrol tank Match 3 + Bonus Grub at local takeaway 問5 何回数字を選んだか表示しなさい (例)1はx回選ばれました [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン: [3.3] 言語:C言語 [4] 期限:2008年3月3日まで [5] その他の制限:ありません 丸投げです。どなたかよろしくおねがいします。
471 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 09:24:35 ] >>470 久々に書くと酷いな kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6104.txt
472 名前:470 [2008/02/28(木) 09:35:36 ] >>470 ほんとうにありがとうございます。 質問なんですが問4のランダム抽選はどのように表示されますか?
473 名前:470 [2008/02/28(木) 09:56:40 ] ↑アンカーミスです。。 >>471 ほんとうにありがとうございます。
474 名前:デフォルトの名無しさん [2008/02/28(木) 10:20:39 ] >>468 ありがとうございます。さっそくやってみたのですが、 test2.c(26) : error C2143: 構文エラー : ';' が '型' の前にありません。 test2.c(26) : error C2143: 構文エラー : ';' が '型' の前にありません。 test2.c(26) : error C2143: 構文エラー : ')' が '型' の前にありません。 test2.c(26) : error C2143: 構文エラー : ';' が '型' の前にありません。 test2.c(26) : error C2065: 'ic' : 定義されていない識別子です。 test2.c(26) : warning C4552: '<' : 演算子にプログラム上の作用がありません。作用 を伴う演算子を使用してください test2.c(26) : error C2059: 構文エラー : ')' test2.c(26) : error C2065: 'ic' : 定義されていない識別子です。 test2.c(26) : error C2143: 構文エラー : ';' が '{' の前にありません。 test2.c(27) : error C2065: 'ic' : 定義されていない識別子です。 と表示されるのですが…
475 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 10:47:43 ] >>474 int ic; for (ic = 1; ic < argc; ++ic) { に変えたら?
476 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:38:15 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):キーボードから整数の入力を4回繰り返し,それらの値を2次元配列 A の各要素に順に代入し,その行列のそれぞれの要素と行列式を表示するプログラムを作成せよ. 結果例 1行1列の要素? 6 1行2列の要素? 5 2行1列の要素? 4 2行2列の要素? 3 行列A = 6 5 4 3 行列式 = 2 [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: VC [3.3] 言語: C++ [4] 期限: 本日夕方6時まで もしよろしければどなたかお願いします。
477 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:50:12 ] >>476 #include <stdio.h> int main(void) { int a[2][2],i,j; for(i=0;i<2;i++){ for(j=0;j<2;j++){ printf("%d行%d列の要素? ",i+1,j+1); scanf("%d",&a[i][j]); } } printf("行列A =\n%d %d\n%d %d\n",a[0][0],a[0][1],a[1][0],a[1][1]); printf("行列式 = %d",a[0][0]*a[1][1]-a[0][1]*a[1][0]); return 0; }
478 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:10:59 ] >>477 早すぎるお仕事、ありがとうございました
479 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 21:18:18 ] 宿題マダー?
480 名前:デフォルトの名無しさん [2008/02/28(木) 21:29:27 ] では300Mのテキストファイルを速くブロックソートするプログラム作ってくれよ 昨日から作ってるけど速くならない
481 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:31:48 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6106.txt [3] 環境 [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2008年3月1日 [5] その他の制限:
482 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 00:56:15 ] >>480 どんな環境でどんなデータに対してどれだけ時間がかかるのが遅いって言うんだ? 基準をplz
483 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 01:06:59 ] >>481 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #define BSIZE 128 int main(int argc, char **argv){ int rfd, rdnum char buf[BSIZE]; if ((rfd = open(argv[1], O_RDONLY)) == -1) { perror(argv[1]);exit(1); } else { printf("ファイルのオープンに成功しました\n"); } while(1){ if ((rdnum=read(rfd,buf,BSIZE))<1) break; printf(" %d\n",rdnum); } close(rfd); return 0; }
484 名前:デフォルトの名無しさん [2008/02/29(金) 01:11:21 ] >>482 全文字列を展開してソートした場合 #include <iostream> #include <string> #include <set> #include <time.h> using namespace std; class gou{ public: string str; int num; gou(string a, int b){str=a; num=b;} bool operator<(const gou& a)const{return str<a.str;}}; main(){ int sz=20000,n; string a(sz,'\0'); for(n=0;n<sz;n++)a[n]=rand()&255; multiset<gou> s; int cl=clock(); for(n=0;n<sz;n++){ s.insert(gou(a,n)); a=a.substr(1)+a[0];} cl=clock()-cl; cout<<"20kのブロックーソート "<<(cl+0.0)/1000<<"sec \n"; }
485 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 01:15:30 ] >>483 トン
486 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 02:33:11 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 1) 3つの「点」からなる構造体「三角形」を作成しなさい。1つの「三角形」を構成する3つの頂「点」の座標を読み込み、三角形の重心を求めなさい。 2) 「三角形」の重心を計算する関数を作成しなさい。この関数を用いて問題1を行いなさい。 3) 2つの「三角形」の「頂点」の座標を読み込み、どちらの「三角形」の中心点が原点に近いか求めなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Borland C++Compiler Version 2.31 [3.3] 言語:C++ [4] 期限: 2008年2/29日中 [5] その他の制限: なし 切羽詰って依頼します。よろしくお願いします。
487 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 03:54:35 ] >>486 3)は、「中心点が原点に近いか」じゃなくて「重心が原点に近いか」じゃないの?
488 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 07:58:42 ] 重心の求め方がわからない? 各座標のx,yをそれぞれ足して3で割るだけじゃん。
489 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:57:25 ] >>486 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6107.txt
490 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 17:06:38 ] >>484 多少は早いんじゃないかと思う。 20kで動かせないからわからないけど #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/time.h> #include<math.h> typedef unsigned char byte_t; int srcsize; int comp(const void *p1, const void *p2){ return memcmp(*(byte_t**)p1, *(byte_t**)p2, srcsize); } int main(void){ int n; byte_t *src, *blockarea, *tmp, **blocklst; struct timeval stv={0}, etv={0}; srcsize=20000; src = (byte_t *)calloc(sizeof(byte_t),srcsize); blockarea = (byte_t *)calloc(sizeof(byte_t),(srcsize*srcsize)); blocklst = (byte_t **)calloc(sizeof(byte_t*),srcsize); if(src == NULL || blockarea == NULL || blocklst == NULL){ return 1; } for(n=0;n<srcsize;n++)src[n]=rand()&255; gettimeofday(&stv, NULL); memcpy(blockarea, src, srcsize); blocklst[0] = blockarea; for(n=1,tmp=blockarea+srcsize; n<srcsize; n++, tmp+=srcsize){ memcpy(tmp, src+n, srcsize-n); memcpy(tmp+srcsize-n, src, n); blocklst[n] = tmp; } qsort(blocklst, srcsize, sizeof(byte_t*), comp); gettimeofday(&etv, NULL); fprintf(stderr, "time %g sec\n", (etv.tv_sec-stv.tv_sec)+abs(etv.tv_usec-stv.tv_usec)/1000000.0); return 0; }
491 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 17:30:14 ] >>490 あっ、インデックス保持してやないや メモリの解放もわすれてるし・・・ どうも、ボケてるな
492 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:18:41 ] 486です。レス遅くなってしまったがありがとうございました。
493 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:33:08 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): <四則演算機の作成> テキストファイルから数式を読み出し、計算結果を別ファイル名で出力する。 数式には、+−*/()を含む。計算結果は整数とし、小数点以下は切り捨てる。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: 2008年3月3日10:00まで [5] その他の制限:逆ポーランド記法に並び替えて計算するという手順で プログラムを作成しなさいとの説明がありました。逆ポーランド記法に 並び替えるプログラムで詰まってしまい先に進めらなくなってしまいました。 丸投げなのですがよろしくおねがいします。
494 名前:デフォルトの名無しさん [2008/03/02(日) 16:00:36 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): <copying-GCをC言語で作成 > 授業で行ったcopying-GCをC言語でせよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 2008年3月5日00:00まで [5] その他の制限:なし C言語が大の苦手で、今遅れを取り戻そうとしているのですが。 期限が迫り、自分ではやってみるもののまったくわからないのでお願いします。
495 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 16:09:41 ] これはひどいwwwww
496 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 16:17:11 ] おい、だれかエスパーを呼んでくれ
497 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 16:36:47 ] ぎゃぼー俺には解けそうにない
498 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 17:34:48 ] この中に誰か授業に行った奴はいないのか!
499 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:22:58 ] >>494 #include "copying-GC.h" #include <stdio.h> int main(void) { char s1[]="copying-"; char s2[]="GC"; printf("%s\n", copygin-GC(s1, s2)); return 0; }
500 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 23:03:31 ] 個人で作成代行してくれるところってある? 雑誌の後ろらへんとか見てみたんだけどなかった、、、かといって会社に頼むとめちゃくちゃ高いし...
501 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 23:11:24 ] それが宿題ならここで丸投げすればいい。 そうでないならそもそもスレ違い。
502 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 23:23:03 ] 宿題だが、難しいから探してる スレ違いということなので、他で探してくる...orz
503 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 23:53:26 ] いや、宿題ならとりあえずテンプレに沿って書いてみれば? 専門知識が必要だと厳しいかも知れんが、参考になりそうなサイトでの添付してくれれば やさしいお兄さんが答えてくれる可能性はグンと上がると思うよ?
504 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 23:55:16 ] >>502 前方後円墳の容積を求める宿題なら。。
505 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 08:26:08 ] >>493 途中までです。仕事から帰ったら完成させます。すんません。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6112.txt
506 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 09:58:24 ] >>493 泥臭い kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6113.txt
507 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 19:16:16 ] >>484 C言語で書いてみたんだが、まだ必要だったらレスplz 参考までに速度比較(速度調べるために遅いマシンで測定した) >>484 のコードで 20000 の時 8.96 sec 書いてみたコード 20000 の時 0.11 sec 書いてみたコード 200000 の時 1.41 sec
508 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 19:19:39 ] >505,506 493です、ありがとうございました。 直前で見ることができなかったのですが、 なんとか明日まで延ばしてもらえたので ありがたくいただきます。
509 名前:デフォルトの名無しさん mailto:rinji_you@hotmail.co.jp [2008/03/03(月) 19:53:44 ] >>504-504 ありがとう でも前ちょっと聞いたんだけどスルーされちゃったから(キャプチャ関係) ちょっと切羽詰ってて、やらなきゃいけないので 当然謝礼はちゃんと出しますのでやって頂ける方はメールください(捨てアドでいいので) スレ違いすぎるのでとりあえずこれくらいで書き込みはやめます よろしくお願いします
510 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 20:36:52 ] >>493 もう書いてる人いるけどせっかくだから張ってみる。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6118.cpp
511 名前:デフォルトの名無しさん mailto:age [2008/03/03(月) 20:58:44 ] 素数を求めるC言語プログラミングを教えてください 条件が有りまして for文のネストもしくはwhile文のネストを使ってなおかつgoto文を使って下さい よろしくお願いします。
512 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 21:01:18 ] >>511 >>1 を読んで書き直すか下のURLクリック ttp://pc11.2ch.net/test/read.cgi/tech/1203343907/394
513 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:08:59 ] 「goto使え」って指定は初めて見たなw
514 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:33:35 ] map<int, map<int, int>> hogehoge; ↑外側 ↑内側 これの内側のmapにデータがある時に外側のmapをclearした場合、内側のmapに格納してあるデータは自動的に解放されるのでしょうか?
515 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:36:46 ] >>514 解放されます というか、特定の型の場合だけ残すほうが難しいよ
516 名前:デフォルトの名無しさん [2008/03/03(月) 22:45:31 ] >>515 ありがとうございます。 感謝です。 いつもわざわざ内側をclearしてから外側をclearしていました。><
517 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 23:07:59 ] >>510 おお、さらに書いていただけたとは・・。 ここまで短くなるものなのですね。自分で途中まで書いてたものが えらく長かったので助かります。505-506の方のと両方参考にして 提出後自分で練り直してみたいとおもいます。 ありがとうございました。
518 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:41:18 ] >>493 俺も作ったから貼ってみる kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6119.c
519 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 02:05:34 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):() for文を使用して、15パズルを作成せよ。 出来るなら経過時間も表示させること。 [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C++ [4] 期限: 2008年3月29日まで [5] その他の制限: 学校の課題です。出来るところまでやってみたものをろだにあげてあります。 開始時にランダムにピースを配置するものと、正解判定、経過時間の表示が手付かずの状態です。 出来ればあれ(ろだ、6120.txt)に手を加える形で作って頂ければ助かります。
520 名前:519 mailto:sage [2008/03/04(火) 02:08:50 ] ろだへのアドレスを貼り忘れました。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6120.txt です。
521 名前:505 mailto:sage [2008/03/04(火) 02:19:22 ] >>493 当方で確認した環境は WindowsXP, 処理系は cygwin(gcc 3.4.4)です。 すでに他の方のすばらしいものがあり、私のもののメリットは皆無です。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6121.txt
522 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 02:20:54 ] >>519 まずは、パズル.bmpと、空きに、指定する、数字と、完成形を、示して、ください
523 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 03:24:29 ] >>522 大変もうしわけありませんでした。 パズル.bmpはこちら(ttp://neko-loader.net/pict/src/neko18219.bmp)です。アップローダー(ねころだ)ですがご容赦ください。 完成形は、どう言えば良いんでしょうか。 「実行したときには、すでに数字パネルがバラバラに配置されている」「それをパズル.bmpのように元通りに直したら完成と表示される」 といった形です。 最初に表示される画像は完成したパズルの形だけれども、その後バラバラに配置されて……といった流れはなくとも大丈夫のようです。 15パズルとしては、Wikiペディア(ttp://ja.wikipedia.org/wiki/15%E3%83%91%E3%82%BA%E3%83%AB)に書いてあるものと同じスタンダードなものです。 メイン関数の部分にオセロゲーム、と書いてありますが、そこは消し忘れですので気になさらないでください。 本当に申し訳ないのですが、「空きに指定する数字」というのがよくわからず……。 こちらの知識不足で、ご迷惑をおかけしますが、どういったことでしょうか。
524 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 08:00:38 ] >>523 なにが判らないのか判らない。15パズルが、ピースを一つずつずらしていくパズルだと言うことは理解できているの? 先ずはWeb上にある15パズルを探してきて自分で動かしてみたら?
525 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 12:51:42 ] >>524 一応、そのあたりのことは理解しているつもりなのですが……。 現状(6120.txt)では、キーボードの上下左右を押して、ピースをずらす、という段階までは作れたつもりなんですが 「ピースを順番どおりにきちんと並びかえたときに、どうやってそれを判定するのか」 「最初にどうやってピースがバラバラに配置された状態にすればいいのか」 の二つがわからなかったんです。
526 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:14:32 ] >>525 きちんと並んだかどうかは、例えば1から15までのピースに1から15までの番号を振りブランクに0を振ったとして、 それらが1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0になったかどうかで判断すればいい。 初期位置は、解けないパズルになる可能性が合ってもいいなら、1から15までとブランクをシャッフルして配置すれば宜しい。 解けないパズルになってはいけないのなら、揃った状態からプログラム的にランダムにピースを操作するしかない。
527 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:37:12 ] >>526 > 揃った状態からプログラム的にランダムにピースを操作するしかない。 本当?
528 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:38:43 ] パリティを考慮して配置すればOK。でもめんどいw
529 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 15:35:20 ] >>527 の言うとおりに、揃った状態から盤面をランダムにする方がいいと思う
530 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 16:04:17 ] >>526 if(masu[1][0]==1)&&(masu[2][0]==2)……という風にやっていけば大丈夫でしょうか。 ひとまずやってみます。アドバイス本当にありがとうございます。 ピース配置のほうも、助かりました。>>529 さんも、ありがとうございます。 揃った状態から盤面をランダムにする、という方法でひとまずやってみたいと思うのですが……。 randを使用すれば良いんでしょうか。
531 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 18:42:17 ] >>528 パリティが奇だったら最後の2ピースひっくり返すだけ。面倒でもないよね。
532 名前:528 mailto:sage [2008/03/04(火) 19:35:34 ] 私が確認するのが面倒なの!w
533 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 19:39:34 ] >>530 15パズルなら、randで4まで出るようにして、それを空白のマスで行う、とか 1……空白マスの上を動かす 2……右を 3……下を 4……左を ってな具合に 角と辺では別処理
534 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 01:05:26 ] >>533 ありがとうございます。自分では考えもつきませんでした……。 戴いた助言どおりに進めてみることにします。
535 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 04:56:30 ] >>519 簡単に作ってみた。C++詳しくないんで中身はほとんどCだけど。 元のソースはよくわからんかったので全く利用してませんが悪しからず。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6123.cpp
536 名前:535 mailto:sage [2008/03/05(水) 05:45:15 ] malloc()のとこ、型変えたのに直し忘れてた。 sizeof(unsigned char) ではなく sizeof(unsigned int) です。
537 名前:535 mailto:sage [2008/03/05(水) 06:59:44 ] 確認不足で申し訳ない。見直したら不具合が残ってたので訂正。 moveTest()のDIR_NとDIR_Sは case DIR_N: return (y_size > 1 && i >= x_size); case DIR_S: return (x_size == 1) ? (y_size > 1 && i < y_size-1) : (y_size > 1 && i < (x_size-1) * y_size); にしといて下さい。 あとshuffle()は最初のほうに if(x_size == 1 && y_size == 1) return; を加えて下さい。
538 名前:519 mailto:sage [2008/03/05(水) 12:42:03 ] >>537 本当にありがとうございます。助かりました。
539 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:29:19 ] >>531 すみません。15パズルのパリティの計算を教えてください。
540 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:44:18 ] >>539 初期状態に、戻すように、入れ替えて、いけば、いい、 それが、偶数回の、作業か、奇数回の、作業か、という、意味
541 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 00:05:03 ] [1] 授業単元:オペレーティングシステム [2] 問題文(含コード&リンク):ls -lの様な結果を表示するプログラムを作成しなさい。 [3] 環境 [3.1] OS:Linux [3.2] gcc [3.3] 言語: C [4] 期限:2008年3月8日まで kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6124.c ↑自力でここまで作ったのですが、user、group、ownerのアクセス方式の表示の仕方が分かりません。 それが表示出来るようになればst.st_modeの値の代わりにそれを表示出来るようにさせたいです。 よろしくお願いします。
542 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 00:17:11 ] >>541 各ビットの意味はmanページに書いてあるだろ。 ttp://www.linux.or.jp/JM/html/LDP_man-pages/man2/stat.2.html 例えばls -lがどう表示するのか知りたいならinfoにある。 スティッキービットなどを考慮しなくていいのなら、 drwxrwxrwx形式でdはディレクトリ、以下ユーザ、グループ、他人の、それぞれ読み込み、書き込み、実行許可。 そうそう、dの部分はシンボリックリンクやデバイスなどの場合はそれに合わせて変わるのも忘れずに。
543 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 00:24:48 ] >>541 自力でそこまでできるんだったら、モードの表示も自力でできるだろう? 先頭の文字は、S_ISDIR(st.st_mode)ならば'd'、S_ISCHR(st.st_mode)ならば 'c'という風に表示すればいい。どう表示するかはman lsしてくれ。 残りの9文字は、st.st_mode & S_IRWXU ? 'r' : '-' のように一文字ずつ 出していけばいい。ただし、スティッキービットに注意すること。
544 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 00:32:01 ] >>543 間違えた。st.st_mode & S_IRUSR ? 'r' : '-' だた。
545 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 05:06:37 ] >>540 15パズルの任意の局面は、 (A) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (B) 1 2 3 4 5 6 7 8 9 10 11 12 13 15 14 のいずれかからスタートした入れ替え操作で到達可能という意味. (A)を(B)にする入れ替え操作は存在しない。(証明は簡単)
546 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 05:54:00 ] >>519 亀レスだし、VCないからcursesライブラリ使ってだけど、できたからうpってみる kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6126.txt
547 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 09:17:44 ] >>539 #include <iostream> using namespace std; #define XX 99 int parity(int *board) { int p = 0; for (int i = 0; i < 16; ++i) if (board[i] == XX) p ^= !(i & 4); else for (int j = i+1; j < 16; ++j) if (board[i] > board[j]) p = !p; return p; } int main() { int board[] = { 1,XX, 2, 4, 5, 6, 3, 8, 9,10, 7,11, 13,14,15,12 }; printf("parity = %d\n", parity(board)); }
548 名前:519 mailto:sage [2008/03/06(木) 10:14:55 ] まだ完成してはいないのですが、どうにか15パズルの課題、仕上げることが出来そうです。 >>546 さん、>>547 さん、 また、今まで助言を下さった方々、本当にありがとうございました。
549 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 19:13:46 ] >>545 それを、あらかじめ、判定するという、話なんですが
550 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:07:33 ] >>549 #define HEIGHT 4 #define WIDTH 4 typedef struct tab_board_t{ int num[HEIGHT][WIDTH]; }board_t; int is_solvable(board_t *board){ int ret=1, x, y; for(y=0;y<HEIGHT;y++){ for(x=0;x<WIDTH;x++){ ret=(ret+(board->num[y][x]/WIDTH-y))&1; ret=(ret+((board->num[y][x]%WIDTH)-x))&1; } } return ret; } /* 但し、完成した状態の定義を board_t board={{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}}; とする */
551 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:34:23 ] >>550 間違ってるな
552 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:43:44 ] >>550 {{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,15,14,13}}を、与えると、1が、返ってきて、しまいましたが、、、 未完の、大作と、評価して、おきます
553 名前:550 mailto:sage [2008/03/06(木) 21:50:12 ] >>550 の修正版 (完成した状態の定義は board_t board={{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,SPACE}}; とする) #define HEIGHT 4 #define WIDTH 4 #define BOARD_SIZE ((HEIGHT)*(WIDTH)) #define SPACE ((BOARD_SIZE)-1) typedef struct tag_board_t{ int num[BOARD_SIZE]; }board_t; int swap(int *a, int *b){ int c; c=*a; *a=*b; *b=c; return (*a!=SPACE && *b!=SPACE); // 空白との交換はカウントしない } int sign(int a){ return (a>0)?1:(a<0)?-1:0; } // 数値の符号を返すだけ int is_solvable(board_t *board){ int check_pos, swap_pos, target_pos, swap_count=0; int diff_x, diff_y; board_t work; work=*board; for(check_pos=0;check_pos<WIDTH*HEIGHT;check_pos++){ for(target_pos=0;work.num[target_pos]!=check_pos;target_pos++); while(work.num[check_pos]!=check_pos){ diff_x = (check_pos%WIDTH) - (target_pos%WIDTH); diff_y = (check_pos/WIDTH) - (target_pos/WIDTH); if(diff_x) swap_pos=target_pos + sign(diff_x); else swap_pos=target_pos + sign(diff_y)*WIDTH; swap_count+=swap(&work.num[target_pos], &work.num[swap_pos]); target_pos=swap_pos; } } return (swap_count%2==0); }
554 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:34:55 ] 547 のほうが数段美しいな。非破壊的だし。
555 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:52:37 ] [1] 授業単元: ひまつぶし [2] 問題文(含コード&リンク):() 大きな川のこちらの岸辺に n 艘の船がある。 船 j は川を t_j 分で渡ることができる。 船を動かすとき、二艘繋いで動かすこともできる。 このときは、遅い船の時間だけかかってしまう。 こちらの岸辺にある船をすべて向こうの岸辺に 持って行くためにかかる最短時間を求めよ。 入力: 船の艘数 n (≦ 1000000) 各船が川を渡る時間 t_1, ..., t_n 出力: 最短時間 [3] 環境 [3.1] OS: 問わず [3.2] コンパイラ名とバージョン: 問わず [3.3] 言語: どちらでも可 [4] 期限: 03/10 まで [5] その他の制限: 特になし。
556 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:57:38 ] >>555 全部、同時に、出港すれば、、、、
557 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:58:45 ] 全ての船が一斉に渡り始めればいいので、 t_1からt_nの中の最小値が答え。
558 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:59:15 ] 最大値だったw
559 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:01:23 ] プログラム必要なしw
560 名前:555 mailto:sage [2008/03/07(金) 01:07:34 ] 条件の後出しですんません、船の運転手は 1 人です。 よくある問題設定なので書かなくても察してくれると思ってた・・・。
561 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:09:32 ] 甘いな、そんな素直に解釈するような連中だと思うのか?w
562 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:13:16 ] 2艘を繋いだり外したりする時間は考慮しなくていいのか?
563 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:13:46 ] 「二艘繋いで動かすこともできる。』と、いうのは、1+2=3という、意味ですか、それとも、1+1=2と、いう意味ですか?
564 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:22:15 ] 一番早い船に乗って、往復して一艘ずつ曳航すればいいのかな。 int required_time(int* t, int n) { if(n<=0) return 0; else if(n==1) return *t; else return std::accumulate(t, t+n, 0) + *min_element(t, t+n) * (n-1); }
565 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:27:01 ] 最後のところ訂正 else return std::accumulate(t, t+n, 0) + *std::min_element(t, t+n) * (n-2);
566 名前:555 mailto:sage [2008/03/07(金) 01:28:44 ] >>565 船の速さが 1 2 5 10 のとき、その解法だと 19 になりますが 最適解は 17 です({1,2}, {1}, {5,10}, {2}, {1,2})
567 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:35:27 ] それ以前に19になるか?
568 名前:555 mailto:sage [2008/03/07(金) 01:44:05 ] 実行して気づきました。問題文が不十分だったんですね。 > 遅い船の時間だけかかってしまう。 は、遅い船のスピードに支配される、という意味で使っていました。 ああ、もうぼろぼろ・・・
569 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 08:37:08 ] キニスルナ(・∀・) 春休み中はスレも停滞するし、暇つぶしの問題は歓迎だろ。 ただ、2つの場所を種々の条件で移動する問題はなぞなぞの要素が強いと思われ。
570 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 08:54:01 ] 作業系の問題よりは暇つぶしにはいいんじゃねーの? まあ俺はわからんけど
571 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:10:30 ] 個別の数値が決まってる奴はこの手のなぞなぞの定番だけど、一般化は考えたことなかったな。 少し考えてみようか。 解けない気がするけどw
572 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:47:35 ] 若干強引だけどこれでいけるか? int required_time(int* t, int n) { int t_temp; switch(n){ case 1: return t[0]; case 2: return t[1]; case 3: return t[0] + t[1] + t[2]; case 4: return t[0] + 3 * t[1] + t[3]; default: t_temp = 2 * t[0] + 3 * t[1] + t[n-1]; t[1] = t[0]; return temp_t + required_time(t + 1, n - 3); } }
573 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 19:59:42 ] >>572 なんかちがわね? t[] = {1,3,4,4} のとき そのプログラムだと 1 + 3*3 + 4 = 14 だけど (1,3)->, <-(1), (1,4)->, <-(1), (1,4)-> で13 になるよ
574 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 22:43:47 ] >>555 また、お前か
575 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:34:16 ] >>555 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6128.txt 総当りでやってみた。100万艘とかは無理w でもいろいろやってみると、以下が鉄則のようにみえる。 一、速い二艘を往復に使うべし 一、遅い方の船から二艘ずつを組にして渡るべし
576 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 16:08:31 ] [1] 授業単元:プログラミング演習 [2] 問題文:データ構造スタックを用いた逆ポーランド電卓の作成 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:bcc32 [3.3] 言語: C [4] 期限: 3月中 初心者です 四則演算が行える電卓を作りたいのですが、よろしくお願いします。
577 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 11:12:29 ] 宿題ではないのですが [1] 授業単元:n/a [2] 問題文(含コード&リンク):n/a [3] 環境 [3.1] OS: (WindowsXPproSP2) [3.2] コンパイラ名とバージョン: (bccフリー版最新) [3.3] 言語: (どちらでも可) [4] 期限: (無期限) [5] その他の制限: () 基本的なノリは成分分析やバーコードバトラーです。 ・任意の文字列(桁数固定表記の数値がメイン)を任意のリスト(*)に基づいて一字ごとに点数化し、その和を返すプログラム。 ・a.txtファイル内に一行毎に一個の文字列を記録した文字列を、上記で丸ごと処理しc.txtファイル(**)として返すプログラム。 リスト自体は別個に独立したb.txtファイルで。 * リストの書式は丸投げですが、二軸マトリックス(x軸…対象文字列内の位置、y軸…対象となる文字の内容)でお願いします。 ** 点数が一行に一個ずつ並んでるだけです。 cd実行後のコマンドは"enscore a.txt b.txt c.txt"みたいな感じで。 例:"14159265358979323846"を点数化したい場合 x(左からA〜T),y(上から0〜10)。尚、y=10は数字以外の場合に適用されます、だから大小区別の英数字ならy=0〜62になります。 以下、該当部分が()で括られています。 {y=0|8,56,88,114,100,88,67,10,12,116,107,18,126,60,92,42,44,3,41,73} {y=1|(124),56,(46),41,81,15,126,95,86,17,105,80,126,71,35,5,107,109,118,15} {y=2|122,61,19,107,96,(50),128,96,64,46,6,18,73,69,44,(69),33,83,8,27} {y=3|84,57,100,128,38,88,86,52,(110),7,42,43,23,101,(47),45,(1),81,6,99} {y=4|3,(116),77,62,88,45,32,1,17,101,59,20,27,26,69,18,41,81,(24),107} {y=5|25,17,13,(2),108,120,7,(98),123,(65),121,122,116,91,40,109,70,13,73,23} {y=6|2,19,7,44,91,121,(88),10,58,98,123,109,119,93,88,40,88,99,112,(33)} {y=7|72,83,32,66,88,86,63,104,27,2,106,84,(7),9,73,18,0,64,6,118} {y=8|51,75,79,16,102,98,78,51,48,31,(118),36,110,47,12,68,98,(17),106,80} {y=9|68,109,114,49,(53),70,84,9,62,67,1,(44),80,(117),0,79,16,84,66,56} {y=10|60,34,105,58,73,99,110,127,9,61,115,23,45,60,39,80,36,3,14,101} 124+116+46+2+53+50+88+98+110+65+118+44+7+117+47+69+1+17+24+33} =1229
578 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 15:58:16 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 0001.jpg 0002.jpg 0003.jpg ....というファイルを順に読み込み、 動画として表示するアプリケーションを作成せよ。 問題文全文 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6131.txt [3] 環境 [3.1] OS:linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C++ [4] 期限:[2008年3月15日まで] [5] その他の制限: FLTKを使用する。 映像を直接扱うクラスやライブラリは使わない。(e.g., mpegs) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6132.txt 上は、自分でやったとこまでです。初心者なので訳が分からなくなってます。 あと、問題文が英語で本当にすみません。
579 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 16:55:37 ] >>577 Cで作ってみた kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6133.txt
580 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 21:11:36 ] >>579 ありがとう、夜勤から帰ったらためしてみる。まずは取り急ぎ
581 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:57:24 ] >>576 当方の環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6134.txt K&R2 4.3 よりも無駄に長く汚くなってしまいました。とりあえず、そっちを読んでください。
582 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:55:05 ] >>581 バグがありました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6135.txt
583 名前:577 mailto:sage [2008/03/11(火) 11:25:18 ] >>579 折角作って頂いたのに本当に申し訳ないんだが、enscoreコマンド実行時にリストの中身と計算過程の表示を省くには何処を削ればいいんでしょう? 処理個数が多くなりそうなので…。
584 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:40:59 ] >>583 あれ?リストの中身表示、計算過程って表示されちゃってる? #define DEBUG ってなってなければ、表示されない(プログラムの実行コードに含まれない)はずなんだけど・・・ コンパイラによってデフォルトで DEBUG ついちゃうのかな? まぁ、#ifdef DEBUG 〜 #endif の間を削除しちゃえばいいさぁ〜
585 名前:デフォルトの名無しさん [2008/03/12(水) 11:51:16 ] 宿題じゃないいんですけれども [1] 授業単元:独学 [2] 問題文(含コード&リンク):stl [3] 環境 [3.1] OS: ubuntu [3.2] コンパイラ名とバージョン: g++ [3.3] 言語: c++ [4] 期限: (無期限) [5] その他の制限: stlの使い方について質問です。今リストの中に1,2,4,8,16,32,64 と入っているんですが、"erase" を使って5番目の数字を削除して中身を表示し、 その後に3番目の数字を削除して表示。 そして、"insert"を使って3番目と4番目の 数字の間に7を入れて表示という感じにするにはどうしたらいいんですか? #include <iostream> #include <iterator> #include <list> using namespace std; int main(){ list<int> mylist; for(int i=1; i<=64; i *= 2) mylist.push_back(i); cout<<endl; list<int>::const_iterator itr1; for(itr1 = mylist.begin(); itr1 != mylist.end(); itr1++) cout<< *(itr1)<<" "; return 0; }
586 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 13:18:17 ] >>585 スレ違い。 初心者歓迎スレでもSTLスレでもお好きな方ヘどうぞ。
587 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 00:15:41 ] あー・・・春だなぁ。5〜6月までは、あんまりネタがないのかなぁ。
588 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 02:20:40 ] 今のうちに、C/C++とかアルゴリズムを勉強しておくといいんじゃね。 Structure and Interpretation of Computer Programs (SICP)辺りを読むのも良いかもな
589 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 16:58:40 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):約分を行う関数を作成せよ。 ただし、分子と分母をメンバとする構造体を用いて、分数を表す。 構造体タグには、typedefによってBUNSUという名前をつけて使用する。 [3] 環境 [3.1] OS:WindowsXP SP2 [3.2] コンパイラ名とバージョン:Developer studio [3.3] 言語:C++ [4] 期限:無制限 [5] その他の制限:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6136.txt *1〜2の、約分処理と関数の呼び出し方がわかりません。 もしよければお願いします。
590 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 17:07:56 ] >構造体タグには、typedefによってBUNSUという名前をつけて使用する。 は? C++に構造体タグなんてありませんが。構造体名自体が型として使えるので、typedefする必要もありませんが。
591 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 18:21:48 ] どっちかといえば期限無制限に突っ込むべきだろ
592 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 21:20:13 ] 俺の半分は優しさで出来ています #include<stdio.h> typedef struct bunsu{ int bunshi; int bunbo; } BUNSU; int getgcd(int m, int n){ while(m*n){ if(m>n) m%=n; else n%=m; } return m+n; } void yakubun_p(BUNSU *x){ int gcd; gcd = getgcd(x->bunshi, x->bunbo); x->bunshi /= gcd; x->bunbo /= gcd; } int main(void){ BUNSU a; printf("分子?"); scanf("%d", &a.bunshi); printf("分母?"); scanf("%d", &a.bunbo); printf("%d / %d = ", a.bunshi, a.bunbo); yakubun_p(&a); printf("%d / %d\n", a.bunshi, a.bunbo); return 0; }
593 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 00:31:46 ] >>592 ありがとうございました。 C言語をはじめたばかりですが、がんばっていこうと思います!
594 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 00:54:42 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): VisualC++を使用して「はさみ将棋」を作成せよ。 テクスト、授業で配布したプリントのほかにも、自分で参考となる資料を集めて利用しても構わない。 [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C++ [4] 期限: 2008年3月28日まで [5] その他の制限:特になし。ただ、出来るだけ平易な文で作っていただけると助かります。
595 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 01:15:00 ] てst
596 名前:541 mailto:sage [2008/03/14(金) 01:59:06 ] [1] 授業単元:オペレーティングシステム [2] 問題文(含コード&リンク):ls -lの加え-a、-w、-F結果が表示出来るようにしなさい [3] 環境 [3.1] OS:Linux [3.2] gcc [3.3] 言語: C [4] 期限:2008年3月17日まで kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6140.c 前回は助けて頂きありがとうございました。 ↑自力でここまで作ってみたのですが、-a、-wなどの部分を作成がまったく見当がつきません。 助けて頂けるとありがたいです、よろしくお願いします。
597 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 04:50:33 ] >>593 ちょっと待て。 > [3.3] 言語:C++ >C言語をはじめたばかりですが、がんばっていこうと思います! おまいさんは、何語を習っているのかさえ判っていなかったのか?
598 名前: ◆nUWYoBn0RQ [2008/03/14(金) 16:48:25 ] 助けてください。 課題で c言語の文字列ソートで char * month[]={"january" ,"february", "march","april","may","june","july"} をアルファベット順にソートかつ大文字に変えて表示するやり方 がわかりません。 教えてください。今日までなので時間がありません。 お願いします
599 名前:サッカー [2008/03/14(金) 17:09:48 ] 1] 授業単元:プログラミング [2] 問題文 :c言語の文字列ソートで char * month[]={"january" ,"february", "march","april","may","june","july"} をアルファベット順にソートかつ大文字に変えて表示しろ。 [3] 環境 [3.1] OS: windowsxp [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C言語 [4] 期限: 2008年3月15日まで 助けてください。 やり方が全くわかりません。 教えてください。 お願いします
600 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 17:43:58 ] >>599 ほいよ #include<stdio.h> #include<stdlib.h> #include<string.h> int cmp(const void*a,const void*b){return strcmp(a,b);} int main(void){ char * month[]={"january" ,"february", "march","april","may","june","july"}; const int N = sizeof month / sizeof * month; int i; qsort(month , N , sizeof * month , cmp); for(i=0;i<N;++i){ const char*it; for(it=month[i];*it;++it)putchar(toupper(*it)); puts(""); } return 0; }
601 名前:600 mailto:sage [2008/03/14(金) 17:46:38 ] わりい一行バグってた。cmpを置き換えてくれ int cmp(const void*a,const void*b){return strcmp(*(char**)a,*(char**)b);}
602 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 17:50:09 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 1、,学籍番号と名前と年齢からなる構造体「学生」を定義して、以下の二人の「学生」を 作りなさい。 ・学籍番号1番、「青木三郎」20歳 ・学籍番号2番、「加藤武雄」21歳 2,「学生」の学籍番号、名前、年齢を設定する関数を作り、1の問題を行いなさい。 [3] 環境 [3.1] OS: (Windows/Linux/等々) Windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Borland C++ [3.3] 言語: (C/C++/どちらでも可 のいずれか) C++ [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) できるだけ早く [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) クラスの作り方がよくわかりません。 よろしくお願いします。
603 名前:サッカー [2008/03/14(金) 17:53:30 ] マジ天才です。 助かりました。 ありがとうございます。
604 名前: ◆zCS1o.kilU [2008/03/14(金) 18:17:37 ] 1] 授業単元:プログラミング [2] 問題文 :mystrlen関数作成せよ。プロトタイプはint mystrlen (char*); またmain関数からmystrlen関数を呼び出し自分の名前の長さを求め なさい。 実行例「 ”山田太郎”は0008バイトです 」 [3] 環境 [3.1] OS: windowsxp [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C言語 [4] 期限: できるだけ早くお願いします。 [5] strlen関数使用禁止 お願いします。
605 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 18:27:16 ] >>604 好きなんどーぞ int mystrlen(char*p){ return strcspn(p,""); } int mystrlen(char*p){ return (char*)memchr(p,0,-1) - p; } int mystrlen(char*p){ return strchr(p,0) - p; }
606 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 18:27:23 ] >>602 struct Gakusei { int num; char* name; int age; void set(int _num, char* _name, int _age) { num = _num; name = _name; age = _age; } }; int main() { // 1 Gakusei g1 = {1, "青山三郎", 20}; Gakusei g2 = {2, "加藤武雄", 21}; // 2 g1.set(1, "青山三郎", 20); g2.set(2, "加藤武雄", 21); }
607 名前: ◆zCS1o.kilU [2008/03/14(金) 18:40:28 ] ありがとうございます。 もうひとつだけお願いがあります。1] 授業単元:プログラミング [2] 問題文 :キーボードから西暦と月を入力するとカレンダーを 表示するプログラムを作成せよ [3] 環境 [3.1] OS: windowsxp [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C言語 [4] 期限: できるだけ早くお願いします。 [5] scanf使用不可. fgetsでお願いします。 お願いします
608 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 18:44:19 ] >>604 当方で確認した環境はcygwin/WindowsXP, 処理系はgcc3.4.4 です。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6142.txt
609 名前: ◆zCS1o.kilU [2008/03/14(金) 19:03:27 ] そうなんですか。 ありがとうございます。
610 名前: ◆TJ9qoWuqvA [2008/03/14(金) 19:55:04 ] 教えてください。 わからないよ〜。 最後にこれができないと 単位がもらえないよ。
611 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:06:27 ] >>610 お前が誰だかわからないよ
612 名前:607 [2008/03/14(金) 20:21:56 ] 607 です。ありがとうございます。 もうひとつだけお願いがあります。1] 授業単元:プログラミング [2] 問題文 :キーボードから西暦と月を入力するとカレンダーを 表示するプログラムを作成せよ [3] 環境 [3.1] OS: windowsxp [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C言語 [4] 期限: できるだけ早くお願いします。 [5] scanf使用不可. fgetsでお願いします。 お願いします
613 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 21:20:32 ] >>607 >>612 当方で確認した環境は cygwin/WindowsXP, 処理系はgcc3.4.4 です。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6143.txt
614 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 22:21:48 ] [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):データ構造・スタックの作成 [3] 環境 [3.1] OS: windows vista [3.2] コンパイラ名とバージョン: bcc32 [3.3] 言語: C [4] 期限: できるだけ早く www2.uploda.org/uporg1305086.txt ↑スタックとして、これを使用したいと思います。 しかし、整数しか扱えず、浮動小数点数のプッシュが行えません。 関数の返却値をdouble型に変更してみたり、確保する型の変更など 試してみましたが、うまくいきませんでした。 浮動小数点数を扱える様に変更をよろしくおねがいします。
615 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 22:25:22 ] ksk
616 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 22:39:38 ] >>614 当方で確認した環境はcygwin/WindowsXP, 処理系はgcc3.4.4です。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6144.txt
617 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 22:47:22 ] >>616 614です。 ありがとうございます。 実行してみたところ、一か所エラーがでてしまいました。13行目ですが、 エラー E2034 13: 'void *' 型は 'double *' 型に変換できない(関数 StackAlloc(Stack *,int) ) 処理系の違いによるものでしょうか。 何か対策がありましたら教えて頂けると助かります。
618 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 22:49:54 ] >>617 元のファイルもコンパイルできなかったのかな?
619 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 22:50:46 ] >>617 if ((s->stk = (double *)calloc(max, sizeof(double))) == NULL) { でどうでしょうか?
620 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 22:59:48 ] 614です。 >>618 614のファイルでは、整数のみ扱える状態でコンパイル、実行が行えました。 >>619 実行できました。ありがとうございます。 本当に助かりました。 このスタックを用いてプログラムの作成を行うのですが、 また解らないことがありましたら、質問させていただけたらと思いますので その際はよろしくお願いいたします。
621 名前:デフォルトの名無しさん [2008/03/14(金) 23:08:12 ] >>617 C++としてコンパイルしているだろ?
622 名前:607 [2008/03/14(金) 23:21:48 ] 613さんありがとうございます。たすかりました。
623 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 23:33:12 ] 614です。 >>617 拡張子を.cpp としてコンパイルしていました。 Cでコンパイルしたところ動きました。 ご指摘ありがとうございます。今後気を付けます。 >>619 訂正していただいたのにすみませんでした。 言語をCとせずにコンパイルしていたのが原因でした。 616が動作することも確認できました。 ありがとうございました。
624 名前:616 mailto:sage [2008/03/15(土) 05:59:16 ] >>620 該当行は double のときは、calloc() -> malloc() に訂正しておいてください。
625 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 07:40:55 ] >>596 後半だれてたから、読みづらいソースになってるかもしんないけど、 一応できたからうp。参考程度にどうぞ (間違ってたらごめんね) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6145.txt
626 名前:デフォルトの名無しさん [2008/03/15(土) 09:00:05 ] 英文字A-Zに対して、異なる二つの文字ごとに得点が与えられているとします 最も得点が高くなる文字列を求めたい 例えば3文字で次のように得点が与えられていれば AB 1 AC 5 BA 2 BC 3 CA 10 CB 1 BCA の得点13が最高得点
627 名前:デフォルトの名無しさん [2008/03/15(土) 09:02:50 ] 英字(26文字)を、1-1000までの数字に置き換えても求められるプログラムがよいです 計算量が増えますから、総当たりが難しいです
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] その他の制限:なし よろしくお願いします