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


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

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



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を対で持たせておけばいいとか、そうゆうことかな?






[ 続きを読む ] / [ 携帯版 ]

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

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