1 名前:デフォルトの名無しさん [2010/01/18(月) 23:25:55 BE:265079647-S★(508111)] あなたが解けない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++の宿題片付けます 133代目 pc12.2ch.net/test/read.cgi/tech/1260532772/
556 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 23:28:36 ] まぁどれも期日まで時間があるからゆっくりやるべきだ 最近の学生は甘え過ぎ 粘って苦しめてやれというのはウソにせよ 期日ぎりぎりに催促されたら貼ってやる って感じで
557 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 23:30:40 ] >>549 scanf("%1f",&r); の %1f を %lf に修正。※lは小文字のL main関数が値を返して無いので、最後に return 0; 等を追加。
558 名前:デフォルトの名無しさん [2010/02/09(火) 23:32:55 ] >>556 余計なこと書くなよw 日付変えてくるだろうが
559 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 23:45:48 ] >>551 問題の題意がイマイチよく分からんので、適当に解釈 #include<stdio.h> main() { int suretu1[]={2,4,6,8,10,12,14,16,18,20}; int suretu2[]={1,2,4,8,16,32,64,128,258,512}; int kotae=0; int count; printf("二つの整列の和によってできる数列は\n"); for (count = 0; count <10; count++ ) { printf("%d ", suretu1[count]+suretu2[count]); kotae += suretu1[count] + suretu2[count]; } printf("\n数列の和は %d\n",kotae); return 0; }
560 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 23:47:16 ] >>535 #include <stdio.h> #include <string.h> int main(void){ #define CONTENTS "01abc¥n02123¥n03def¥n04456¥n05ghi¥n06789¥n07jkl¥n08000¥n" FILE *f; int i=0; char Fgets[256],Strcat[256],Sprintf[256]; f=fopen("test02.txt","r"); if(f==NULL) return 0; Strcat[0]=0; for(;;){ if(NULL==fgets(Fgets,256,f))break; sprintf(Sprintf,"%02d%s",++i,Fgets); strcat(Strcat,Sprintf); } fclose(f); if(0==strcmp(Strcat,CONTENTS))printf("%s",CONTENTS); return 0; }
561 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 00:01:18 ] >>552 1.Swapの引数が値渡しなので、Swap関数内で値を変更しても 関数呼び出し元の変数には影響を与えないから。 2.Swap関数内のbuf変数がポインタで定義されていて、その初期化されていないポインタの 示す先を一時保存場所として使用している為、正しく値が交換されない。 3. void Swap(int *p1, int *p2) { int buf; buf = *p1; *p1 = *p2; *p2 = buf; }
562 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 00:39:59 ] >>561 素早い回答ありがとうございます。助かりました。
563 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 00:57:05 ] [1] 授業単元: DirectX研究2 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10504.txt [3] 環境 [3.1] OS: (Windows vista) [3.2] コンパイラ名とバージョン:visual stdio 2008 [3.3] 言語: C++ [4] 期限: ([2010年2月10日17:00まで] [5] その他の制限:
564 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 01:26:05 ] >>547 スレ違いだけどFortran77で kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10505.txt
565 名前:564 mailto:sage [2010/02/10(水) 02:17:10 ] スレ違いのまま失礼… 訂正版 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10506.txt
566 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 02:19:37 ] >>548 思ったより難しかった
567 名前:566 mailto:sage [2010/02/10(水) 02:38:49 ] 入力==>200 1361015212836455566789110512013615317119000000000191 2591420273544546577901041191351521701890000000192172 4813192634435364768910311813415116918800000193173154 7121825334252637588102117133150168187000194174155137 1117243241516274871011161321491671860195175156138121 1623314050617386100115131148166185196176157139122106 2230394960728599114130147165184019717715814012310792 2938485971849811312914616418301981781591411241089379 3747587083971121281451631820199179160142125109948067 4657698296111127144162181020018016114312611095816856 5668819511012614316118020001811621441271119682695746 6780941091251421601791990182163145128112978370584737 7993108124141159178198018316414612911398847159483829 9210712314015817719701841651471301149985726049393022 1061221391571761961851661481311151008673615040312316 1211381561751950186167149132116101877462514132241711 1371551741940001871681501331171028875635242332518127 1541731930000018816915113411810389766453433426191384 1721920000000189170152135119104907765544435272014952 1910000000019017115313612010591786655453628211510631
568 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 02:42:04 ] [1]数値計算演習 [2] 極座標で表される曲線 r(t)=sin^2(πt) θ(t)=α sin(πt^2) (0<=t<=1)でαを指定した時 の曲線の長さと囲む面積の近似値を求め、π/4<=α<=πまで変化させる時、 面積/曲線の長さが最大になるαを推定する 曲線上の代表点をとり隣接する点の間の距離の和で曲線の長さを近似。 面積は隣接する代表点と原点が作る三角形の面積の和で近似する。 [3] [3-1] Mac-OS-X panther [3-2] XCode [3-3] C/C++どちらでも可能 [4] 2/18迄 [5] 特に無し
569 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 02:50:49 ] >>555 ビット演算の問題と解釈 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10507.txt
570 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 03:48:14 ] >>555 タイプミスに苦闘したが5分で打ち込めた kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10509.zip
571 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 04:05:07 ] >>568 答えがπになってしまった。間違ってたらごめんね kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10510.txt
572 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 05:31:38 ] >>555 好奇心で書いてみた めちゃ読みづらいけど勘弁 testhp.ddo.jp/prog.c
573 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 07:39:07 ] >>555 入力数を何でも対応できるように むりやりキャストしてポインター使ってみた codepad.org/xjtWz8N3
574 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 07:47:33 ] 大きい順と小さい順を勘違いしてた codepad.org/Z5aQHsCW
575 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 08:53:50 ] おまえら必死だな
576 名前:553 mailto:sage [2010/02/10(水) 09:05:02 ] >>575 入力==>200 13610152128364555667891105120136153171190 259142027354454657790104119135152170189 48131926344353647689103118134151169188 7121825334252637588102117133150168187 111724324151627487101116132149167186 1623314050617386100115131148166185 2230394960728599114130147165184 29384859718498113129146164183 374758708397112128145163182 4657698296111127144162181 56688195110126143161180200 678094109125142160179199 7993108124141159178198 92107123140158177197 106122139157176196 121138156175195 137155174194 154173193 172192 191 1)文字列を繋いで、1〜nまでの三角形を作る(上の図参照) 2)それを1文字ずつに分解して、上下反転、左右反転する 3)1と2で出来た物を左右に並べて、隙間がなくなるまで近づける 4)空いた隙間には0を詰める
577 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 09:10:09 ] >>575 問題が魅力的だったからみんなやったんだろうな
578 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 10:38:11 ] >>576 数値自身は左右反転じゃないぞ
579 名前:553 mailto:sage [2010/02/10(水) 12:56:23 ] #define MAXL 100 main(){ int num, i, j, k, len, maxlen; char wrk[4], mat1[MAXL][MAXL*2], mat2[MAXL][MAXL*2], tmp[MAXL]; printf("入力==>"); scanf("%d", &num); for(i=0;i<MAXL;i++) mat1[i][0] = mat2[i][0] = (char)0; i=1, j=0, k=0; while(i<=num){ if(k<0) { k = ++j; if(j >= MAXL) {puts("ERR"); return 1;} // てきとう } sprintf(wrk, "%d", i++); strcat(mat1[k--], wrk); /* LEFT */ strcpy(tmp, mat2[k+1]); /* RIGHT */ sprintf(mat2[k+1], "%d", i-1); strcat(mat2[k+1], tmp); } maxlen = k = 0; for(i=0;i<=j;i++){ len = strlen(mat1[i]) + strlen(mat2[j-i]); if(len > maxlen) maxlen = len, k=i; } for(i=0;i<=j;i++){ len = strlen(mat1[i]) + strlen(mat2[j-i]); for(k=maxlen-len-1;k>=0;k--) strcat(mat1[i], "0"); // めんどう strcat(mat1[i], mat2[j-i]); } for(i=0;i<=j;i++) puts(mat1[i]); }
580 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 13:00:22 ] >>548 codepad.org/nCjDliKG
581 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 13:12:52 ] >>548 デバッグ用のprintfがあるので見づらいが、>>580 では 1) 上半分の三角形(>>576 のような)の各行の長さを求める 2) 出力される配列の長さを決める( (i行目の長さ + (h-1-i)行目の長さ)の最大値 ) 3) 出力 という流れ。三角形の(i,j)の位置のにある数字は簡単に計算できるので メモリには各行の長さだけ記憶すれば十分。
582 名前:デフォルトの名無しさん [2010/02/10(水) 13:13:57 ] [1] 授業単元:なし [2] 問題文(含コード&リンク):MSPAINTの色の選択(カラーダイヤログ)を表示して、選択した色(RGB)を文字列として取得する秀丸用のDLLを作成してください [3] 環境 [3.1] OS:Windows XP or Vista [3.2] コンパイラ名とバージョン: なんでも [3.3] 言語: CかC++どちらでも可 [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: とくになし DLLの使用などはこちらを参照してください ttp://homepage3.nifty.com/kons/hidemaru/helpsite/hidemac/html/200_Dll.html
583 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 13:19:45 ] >>582 それ、宿題じゃねーだろ。
584 名前:570 mailto:sage [2010/02/10(水) 13:32:22 ] >>555 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10512.zip 多くの部分に間違いがあった。 さすがに700行/分の入力ではミスが起こるわなw
585 名前:570 mailto:sage [2010/02/10(水) 13:46:27 ] スマン まだ一カ所ミスが... 入力チェックをミスってる #define INPUT()で でwhileロジックを while ( (m<1)||(m>10) ) に修正して
586 名前:デフォルトの名無しさん [2010/02/10(水) 13:51:16 ] >>336 課題4と課題5どなたかよろしくお願いします。期日すぎても提出できるので、なんとかならないか必死です。
587 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 17:24:00 ] >>586 5番のグラフって何グラフ?
588 名前:デフォルトの名無しさん [2010/02/10(水) 17:40:46 ] 入力データの例 1.2 3.7 2.1 4.2 2.9 1.3 4.0 2.5 x,y軸を-や+で表現して、それぞれ座標の点(4つ)を*でプロットする感じです。
589 名前:555 mailto:sage [2010/02/10(水) 19:03:12 ] >>572 >>573 >>570 どうもありがとうございました。 >>570 さんのコードは非常にわかりやすいです。 3600行を5分で入力とは凄いですね。 タッチタイピング速度はどの位でそれくらいに なるんでしょうか?自分は1分間に賞味150文字が 精一杯です。(IME変換時間を含む) 他の皆様もいろいろと工夫をされておられ特にビット 操作とかポインタ操作とか裏技的な技法は非常に参考 になると思います。
590 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:45:14 ] >>570 ひらいてみた。ちょwwww
591 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:52:14 ] 世間では一昔前はコード1行1万が 相場だった時代もあったね。 >>570 のコードだといくらになるんだかw **確認事項** ここで答えてやっても事後を含め 一切依頼者に報酬を請求出来ない
592 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:54:41 ] >>591 ここで答えるようなのって単体じゃどうせ金にならなくないか?
593 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 20:55:23 ] >>570 >>584 クソワロタ
594 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 21:15:31 ] ここで解かれている問題とその回答を 応用してもいいけど事後問題になる可 能性もあるんで(2ちゃんねるから 引用ってw格式ある組織ではそれだけ で処分対象w)
595 名前:570 mailto:sage [2010/02/10(水) 22:38:17 ] >>555 いえいえ。 タッチタイピングの上達のコツは このスレの他の回答者に聞いてくれ 企業秘密なんで。 この業界では毎分400文字〜500文字 (IME入力変換時間を含む)の入力が 生き残りの最低条件なんでw 今回は実にのんびりしたテンポで入力 したよ。 >>590 >>593 何かおもしろいところあるのかい?
596 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 22:50:17 ] いやここまで冗長なプログラムは初めて見たもんで 一行いくらならこういう方法でガツガツ稼げるなw
597 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 23:16:03 ] 冗長? 見た目だろ。 ロジックそのものはこれほど直接的なものはない コードは常に短く書けばいいというもんでもないと 目から鱗が落ちたような気分 コードを(最初から)短く書くのが偉いとかそういう 奇妙な信仰はかなり弊害もあるんじゃないかと もっとも一つのint変数しか使えない状況での プログラミングもかなりナンセンスだと思うが
598 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 23:16:59 ] 回路に例えるとワイヤードロジックな 普通のプログラムがマイクロプログラムに例える事が出来るかも
599 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 23:21:30 ] >>555 って__asmでスタックとレジスタ使えばint変数一つでも楽勝なんじゃないのw
600 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 02:07:11 ] >>555 逃避したくなったので書いてみた。 codepad.org/HcRNGiZZ
601 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 11:03:25 ] 勉強になるなぁ。hhdかー。
602 名前:デフォルトの名無しさん [2010/02/11(木) 13:05:19 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク): #include <stdio.h> int main(void){ int a=0,k; for (k=0;k<100;k++){a++; if(a%5==0&&a%9==0)printf("A\n"); else if(a%5==0)printf("B\n"); else if(a%9==0)printf("C\n"); else printf("%d\n",a); }return 0;} この処理のプログラムをスペース、改行を含み140字以内で書き直したい。 [3] 環境 [3.1] OS:Windows XP Pro [3.2] コンパイラ名とバージョン:VisualStudio2005 [3.3] 言語:C [4] 期限: [5] その他の制限:特になし よろしくお願いします。
603 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 13:29:10 ] >>602 #include <stdio.h> int main(){ int k; for (k=1;k<=100;k++){ printf(k%5==0&&k%9==0?"A\n":k%5==0?"B\n":k%9==0?"C\n":"%d\n",k); }}
604 名前: ◆/91kCCQXBo mailto:sage [2010/02/11(木) 13:54:38 ] #include <stdio.h> int main(void){ int a; for(a=1;a<=100;a++) printf(a%45?a%5?a%9?"%d\n":"C\n":"B\n":"A\n",a); return 0; }
605 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 14:04:38 ] >>602 変な問題ですが無理なのでは166byte
606 名前:デフォルトの名無しさん [2010/02/11(木) 14:05:22 ] 602です。 <<603 <<604 の方ありがとうございます。 助かりました。
607 名前:605 mailto:sage [2010/02/11(木) 14:05:28 ] 失礼3項演算子があったのね
608 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 14:11:20 ] >>555 きっと反則技なんだろうけど。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10517.c
609 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 21:34:45 ] >>602 code golfするの? a;main(){for(;++a<101;)printf(a%45?a%5?a%9?"%d\n":"C\n":"B\n":"A\n",a);}
610 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 22:11:13 ] >>555 int a; scanf("%ld %ld %ld%*c", (long *)&a, (long *)&argc, (long *)&argv); じゃだめか Windows XP HomeEditionって64bitないよね
611 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 22:54:33 ] >>610 たった3行の制約条件を見逃すようじゃ、お前マの適性ない。 転職を勧める。
612 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 01:00:07 ] >>555 もう需要ないかと思うが、面白そうなのでやってみた。 バブルソートのありがたみを出すため、かつ、4bit余ったため、入力する値を4つに勝手に変更。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10519.txt
613 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 01:03:56 ] >>612 1〜10だよ。
614 名前:612 mailto:sage [2010/02/12(金) 01:26:00 ] >>613 1〜10にしてますよー。
615 名前:デフォルトの名無しさん [2010/02/12(金) 01:32:57 ] [1] 授業単元:計算機実習 [2] 問題文(含コード&リンク): hermes.esys.tsukuba.ac.jp/~sano/NumCompEx/project2.pdf [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン:VisualStudio2008 [3.3] 言語:C [4] 期限: 3/5 [5] その他の制限:特になし よろしくお願いします。
616 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 02:49:14 ] >>611 その前に就職をしないと
617 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 11:43:57 ] >>615 問題文が理解できません! orz
618 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 12:44:18 ] このスレの人ってちょっと考えると皆精神病院予備軍だな >>585 とか >>548 を解いて喜ぶ人とかw
619 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 12:49:19 ] >>618 パズルを解く感覚だよ
620 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 12:50:35 ] さすが現役精神病の方は言うことが違うね
621 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 17:21:53 ] トルヒーヨのハルディンはここですか?
622 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 19:30:20 ] >>555 n番煎かしれんがオラも参加! kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10521.c
623 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 19:31:59 ] >>622 それは突っ込み待ちか?
624 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 19:33:42 ] >>622 キレイに書くねー。
625 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 20:21:21 ] >>555 n+1番煎じしてみた。 どこにも「同じ数字が複数回入力された場合、まとめてはならない」なんて書いてないよね。 ttp://codepad.org/C0n9Shhq
626 名前:625 mailto:sage [2010/02/12(金) 20:26:28 ] ミスった… × #define PSHORT_A(x) (((uint16_t*)&x)+2) ○ #define PSHORT_A(x) (((uint16_t*)&x)+1) SHORT_Aも同様。
627 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 01:48:01 ] >>555 の問題って、入力がintの範囲内であることは暗黙の了解としても、[0, 10]の範囲にあることの確認は不可能だよね? charの範囲内としたら、(たとえintが規格的に最小な16bitでも)できそうだが。
628 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 02:07:59 ] >>627 お前は何を言っているんだ。
629 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 03:01:56 ] 答えが多すぎて、このパターンだけでいいか。出席を取ります。 @intをポインタとして実際使うメモリはintの配列 Aintを分解して4バイトとして4個の数字を使う B1個の数字しか使わない pc12.2ch.net/test/read.cgi/tech/1255277760/l2
630 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 03:58:19 ] >>628 「半角文字以外に「あ」とか「阿」のような全角文字が入力される場合まで考えると、正しい結果が得られなくなる場合があるのでは?」 って言ってるんだと俺は推測する。 JISとかユニとかの知識が乏しいので、俺には実際どうなのかはわからんが。
631 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 04:33:14 ] 誰も>>585 のコード見て苛つかないの? 同レベルだとみなされかねないし... 常連回答者だったら清書したくならないか?
632 名前:622 mailto:sage [2010/02/13(土) 05:17:54 ] んじゃ、マクロを大文字に修正 #n s/v(\(.\))/V(\1)/g s/swap/SWAP/g s/w\([^h]\)/W\1/g p
633 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 09:50:31 ] しかしこういうビット演算は今までまったくやったことが無いので、 回答者のみんながホントスゲーんだなと分かる。 >>625 さんのようなバケットソートぽいのを自分でも書こうと思ったが、 まったく書けなかったのが辛いところ。
634 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 12:54:49 ] >>633 まずは愚直なコードからでもいいから一歩を踏み出す事が大事。
635 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 18:42:25 ] >>555 たぶんできてるはず。570のインスパイヤ #include <stdio.h> #include <stdlib.h> int compareInt(int * left, int * right) { return *left - *right; } FILE * OUT; int length = 3, * ans, * vals; void createSwitch(int current, int * vals) { int i; if (current == length) { for (i = 0; i < length; i++) ans[i] = vals[i]; qsort(ans, length, sizeof(int), (int(*)(const void*, const void*)) compareInt); fprintf(OUT, "printf(\""); for (i = 0; i < length; i++) { if (i != 0) fprintf(OUT, " "); fprintf(OUT, "%%d"); } fprintf(OUT, "\\n\", "); for (i = 0; i < length; i++) { if (i != 0) fprintf(OUT, ", "); fprintf(OUT, "%d", ans[i]); } fprintf(OUT, ");\n"); return; } fprintf(OUT, "val = getchar() - '0';\ngetchar();\nswitch (val) {\n"); for (i = 0; i < 10; i++) { vals[current] = i; fprintf(OUT, "case "); fprintf(OUT, "%d", i); fprintf(OUT, ":\n"); createSwitch(current + 1, vals); fprintf(OUT, "break;\n"); } fprintf(OUT, "default:\nputs(\"input error\");\nreturn 1;\n}\n"); } int main(void) { OUT = fopen("shukudai555.c", "w"); vals = (int *) malloc(sizeof(int) * length); ans = (int *) malloc(sizeof(int) * length); fprintf(OUT, "#include <stdio.h>\nint main(void) {\nint val;\n"); createSwitch(0, vals); fprintf(OUT, "return 0;\n}"); return 0; }
636 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 18:44:07 ] C言語の宿題と聞いて飛んできました。
637 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 20:28:20 ] >>629 @Aは、環境が書いてあるから、intを4bytesとして扱ったりポインタとして扱ったりの環境依存コードがかけるという解釈なんだろうか。
638 名前:568 mailto:sage [2010/02/13(土) 20:45:46 ] >>571 ありがとうございました。自分今のところFORTRANしか 組めないんでFORTRANに移植するのやってみます。
639 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 21:33:20 ] >>635 すげ〜 といいたいところだが>>584 と同レベルかそれ以下である ということを示していない気がしないでもない
640 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 22:40:48 ] >>555 >>570 をマクロで見やすくしてみた ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10525.c
641 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 23:14:51 ] うむ。 マクロを使うとここまで短く出来るんだな。 行数で稼いでいるプログラマは犯罪的だ という教条の根拠か... しかしこれは逆に言えば、マクロを使うことが 禁止された時、それを読む人が地獄の責め苦 を受けることをまた意味しているとも言えるなw
642 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 23:42:56 ] >>612 を改良した。 ・入力する値を5つに勝手に変更。この方法だと6つ以上は俺には無理だな・・・ ・マクロの使用で見やすくした。 ・範囲外(全角文字も含む)が入力されても、問題なく再入力を促すのを確認。(01や09は範囲外としている) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10526.txt
643 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:50:52 ] >>641 コードのアセンブリ(実行最小単位)に対する圧密 度はC言語の出身地であるシステム記述の分野 では非常に重要な評価ポイントらしいね その世界ではコードは圧密に書けば良いというもので もなく逆に極端に希薄に書けば良いというものでも なく結構奥深いらしい。 それにしても>>584 と>>640 の例は同じ記述が書き 方によって極端に変わる良い例なんだろな
644 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 01:32:40 ] >>640 おみごと
645 名前: ◆/91kCCQXBo mailto:sage [2010/02/14(日) 12:09:11 ] 555 たぶんできてるはず。570のインスパイヤ >>639 >>635 のを借りて見た目I/Oを改良 #include <stdio.h> #include <stdlib.h> FILE *OUT; int length = 3, *ans, *vals; int compareInt(int *left, int *right) { return *left - *right; } void createSwitch(int current, int *vals) { int i; if (current == length) { for (i = 0; i < length; i++) ans[i] = vals[i]; qsort(ans, length, sizeof(int), (int(*)(const void*, const void*)) compareInt); fprintf(OUT, "puts(\""); for (i = 0; i < length; i++) { if (i != 0) fprintf(OUT, " "); fprintf(OUT, "%d", ans[i]); } fprintf(OUT, "\");"); return; } fprintf(OUT, "while((val=1, printf(\">\"), scanf(\"%%d%%*c\", &val)) != 1 || val<1 || val>10) {\n" "\t\t\t\t\tprintf(\"ERROR\\n\"); if(val==1) scanf(\"%%*s\");}\n\tswitch (val) {\n"); for (i = 0; i < 10; i++) { vals[current] = i + 1; fprintf(OUT, "\t\tcase "); fprintf(OUT, "%d", i + 1); fprintf(OUT, ": "); createSwitch(current + 1, vals); fprintf(OUT, " break;\n"); } fprintf(OUT, "\t}\n\t\t\t"); } int main(void) { OUT = fopen("shukudai555.c", "w"); vals = (int *) malloc(sizeof(int) * length); ans = (int *) malloc(sizeof(int) * length); fprintf(OUT, "#include <stdio.h>\nint main(void) {\n\tint val;\n\t\t\t\t"); createSwitch(0, vals); fprintf(OUT, "return 0;\n}\n"); /* return 0; */}
646 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 12:45:49 ] あのー。誰も突っ込まないので俺が言う。 >>555 > 但しmain関数内ではint変数一つだけが使えるものとします。 > またmain関数の再帰呼び出しも出来ません。 > (main関数の引数、argc,argvをint変数として使用することも勿論禁止します) > main関数のみで構成されるプログラムとして下さい。 お前一人だけどうあがいても落第だよw
647 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 13:36:52 ] ソースを生成するんだろうけど、出てくるのはつまらなそうだね。 これなら、秀丸のマクロでいいんじゃね。
648 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:47:49 ] >>555 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10527.c
649 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:57:40 ] なんか、問題自体が不毛だよなぁ。
650 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:00:58 ] とんち合戦の様相を呈してきたな。
651 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:06:28 ] いやむしろIOCCC2ch版というべきか
652 名前:633 mailto:sage [2010/02/14(日) 16:09:58 ] あ、思いついちゃった。 >>648 さんの方法で、データを0-9で保存して1-10と表示させると、 INT_MAX.to_s.sizeの個数の数を扱えそう。 けどソートはどうするんだろうw
653 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:53:38 ] てか依頼者が消えた問題にいつまでも拘泥するのは 宿題スレのマナー違反
654 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:25:56 ] 【質問テンプレ】 [1] 授業単元:データ構造とアルゴリズム [2] 問題文(含コード&リンク): 生徒数1000人分の学力テスト(五教科)の得点データが有る。ここで、任意の生徒Aと 得点の傾向が一番近い生徒の番号を高速で抽出できるようデータ構造を組みなさい。 (合計点が近い、ではなく、各教科の得点の傾向が大事のようです。) [3] 環境 [3.1] OS: WinXP [3.2] コンパイラ名とバージョン: VC++ [3.3] 言語: どちらでも可 [4] 期限: 無期限 [5] その他の制限: 無し 生徒のデータはstruct seito{int tensuu[5];};こんな感じです。 単に全部検索して得点差を計算したのを提出したらダメと言われました。 こういう問題を解く定石のようなものがあるのでしょうか・・・ 先輩方、よろしくお願いします。
655 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:34:10 ] >>654 簡単に考えれば、 0-20をE 21-40をD 41-60をC 61-80をB 81-100をA みたいに評価をつけて、同じものを抽出すればいい気がする。 もうちょっと細かくランク分けしたほうがいいかな
656 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 12:33:42 ] >>654 プログラムを組む以前の問題として、どうゆう回答をすれば先生が満足するのか そこがイマイチ不明だ・・・。 傾向が似ているかどうか、というだけなら、各教科の得点を偏差値に変換して、 5次元空間上にプロットした時に、任意の生徒Aとのユークリッド距離が 最も近い生徒を選べばいい気がする・・・。 仮にそれでいいとして、高速抽出するためのデータ構造を組め、ってなると 要は任意の生徒Aに最も近い得点の傾向の生徒Bを予め計算しておいて AとBを対で持たせておけばいいとか、そうゆうことかな?