C/C++の宿題片付けます 134代目at TECH
C/C++の宿題片付けます 134代目 - 暇つぶし2ch448:434
10/02/03 19:33:42
DB板で相談したところすんなりとコードを
書いて頂けました。
もちろん許可をとってないのでお見せする
わけにはいかないのですが合計250行にも
なる立派なコードでした。

449:デフォルトの名無しさん
10/02/03 19:43:01
>>446
ご回答ありがとうございます。
試してみたんですが、コンパイルはうまくいきましたが何も表示されませんでした。
何か打ち込まなくては、いけないのですか?

質問ばっかですいません。。。

450:デフォルトの名無しさん
10/02/03 19:54:22
>>448
「立派なコード」を「すんなり」ですか

451:yui ◆zuLLaJzEzk
10/02/03 20:26:20
[1] 授業単元:情報処理入門
[2] 問題文(含コード&リンク):
rep1.ppmとrep2.ppmの2つの画像を加算するプログラムを作成せよ.
プログラム中で加算したデータは,コントラスト強調を行った上で
PPM画像ファイル(h12r.ppm)として保存するようにすること.
Cのソースファイルh12r.cおよび実行することにより作成
される画像ファイルを提出すること.rep1.ppmとrep2.ppmの
サイズはいずれも横124×縦124画素である.h12r.ppmのサイズも同じとする.

rep1.ppm
URLリンク(kansai2channeler.hp.infoseek.co.jp)
rep2.ppm
URLリンク(kansai2channeler.hp.infoseek.co.jp)


[3] 環境
[3.1] OS: (Windows/Linux/等々)
Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc 3.4
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
Cでおねがいします。
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
提出期限2010年2月8日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
特にありません。


前回は皆さんに本当にお世話になりました。あらためてお礼を言いたいです。本当にありがとうございました。
今回が最終レポートになるのですがどうか助けていただけないでしょうか?
よろしくお願い致します。

452:デフォルトの名無しさん
10/02/03 21:15:14
>>451
#include <stdio.h>
#define W 124
#define H 124
int main(){
double d,cl = -10.0;
unsigned char data1[H*W*3],data2[H*W*3],data3[H*W*3];
char buff[128];
FILE *fin1,*fin2,*fout;
int i;
if((fin1=fopen("rep1.ppm","rb"))==NULL)goto EXIT;
if((fin2=fopen("rep2.ppm","rb"))==NULL)goto EXIT;
if((fout=fopen("h12r.ppm","wb"))==NULL)goto EXIT;
for(i=0;i<3;i++)fgets(buff,128,fin1);
for(i=0;i<3;i++)fgets(buff,126,fin2);
fread(data1,1,sizeof(data1),fin1);
fread(data2,1,sizeof(data2),fin2);
for(i=0;i<H*W*3;i++){
d=data1[i]+data2[i];
d=d+cl*(d-127.5);
if(d>255)data3[i]=255;
else if(d<0)data3[i]=0;
else data3[i]=(unsigned char)d;
}
fprintf(fout,"P6\n124 124\n255\n");
fwrite(data3,1,H*W*3,fout);
EXIT:
if(fin1)fclose(fin1);
if(fin2)fclose(fin2);
if(fout)fclose(fout);
return 0;
}

453:デフォルトの名無しさん
10/02/03 21:25:30
>>447
ひえーこの場合はこれで正解なのか
偶然だな

454:デフォルトの名無しさん
10/02/03 22:51:55
>>447
ご回答ありがとうございます。

その処理を
00000
00000
11111
00000
00000

でしたいんですが、どうしたらいいですか?

455:デフォルトの名無しさん
10/02/03 23:31:12
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):課題2-2と2-3です。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: [2010年02月07日23:59まで]
[5] その他の制限:
よろしくお願いします。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

456:デフォルトの名無しさん
10/02/03 23:59:33
[1] 授業単元: データ演習
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C言語
[4] 期限: [2010年02月08日20:00まで]
[5] その他の制限:
努力はするも此方も断念 何方か宜しくお願い致す。

URLリンク(kansai2channeler.hp.infoseek.co.jp)


457:447
10/02/04 01:19:54
>>454
// 入力
for(i=0; i<MAX; ++i)
  for(j=0; j<MAX; ++j)
    a[i][j] = (i==MAX/2)?1:0;

458:デフォルトの名無しさん
10/02/04 01:28:05
>>457
ありがとうございます。
ちゃんと表示されました。

459:デフォルトの名無しさん
10/02/04 01:35:10
[1] 授業単元:プログラミング実践
[2] 問題文
アフィン変換のプログラムを作成し、下の図の真ん中を座標の中心にして60°回転した結果を出力せよ。
(図)affin.txt
000000000
000010000
000010000
000010000
011111110
000010000
000010000
000010000
000000000

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名: gcc
 [3.3] 言語:C++
[4] 期限:2010年2月5日まで
[5] その他の制限:特にありません

420のものです。
度々申し訳ありませんが、よろしくお願いします。

460:デフォルトの名無しさん
10/02/04 02:03:01
>>459
・問題文は、出題されたまま全文を書いてください。

もしそのまま出題されているとするなら糞問題です
添削スレで晒しちゃいましょう

461:デフォルトの名無しさん
10/02/04 02:29:39
良問自作テキスト:熱心な先生だ
悪問自作テキスト:着服しただろこいつ

462:447
10/02/04 02:45:18
URLリンク(kansai2channeler.hp.infoseek.co.jp)
数学なら左回転でいいのでした。

463:デフォルトの名無しさん
10/02/04 03:51:41
>459
アンチエイリアシング

464:デフォルトの名無しさん
10/02/04 05:56:57
>>460
なぜ糞問題と思ったのでしょうか、そこをひとつ。

465:デフォルトの名無しさん
10/02/04 07:29:06
[2] CIP法での1次元の移流計算
[3] 環境
[3.1] OS:Vista
[3.2] コンパイラ名:Microsoft Visual Studio 2008  
[3.3] 言語:C++
自分で以下のプログラムを作ったところ。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

tの値を増やすにつれてf[n][t]のnの初期のほうの値がなぜかでかい数字が出てしまいます。
自分の計算ではtの値を増やせば、f[n][t]のnの初期のほうの値は0になると思うんですが、一体どこが悪いのか、ご教授をお願いいたします。

466:デフォルトの名無しさん
10/02/04 08:26:07
>>459
これでいいのかな?
URLリンク(kansai2channeler.hp.infoseek.co.jp)

467:デフォルトの名無しさん
10/02/04 08:40:53
>>466
オレなら
if(x>=-4 && x<=4 && y>=-4 && y<=4)
mat2[i][j] = mat1[4 + x][4 + y];
こうするな
はみ出たらカット

468:447
10/02/04 12:23:47
>>462 間違い sqrt(3)/2 だった。
x = i - MAX/2;
y = j - MAX/2;
m = x/2.0 - y*SQRT3/2;
n = x*SQRT3/2 + y/2.0;
x = m + MAX/2;
y = n + MAX/2;
if(x<0 || x>=MAX) continue;
if(y<0 || y>=MAX) continue;
// 左回転
if(b[x][y]==0)
  b[x][y] = a[i][j];

469:デフォルトの名無しさん
10/02/04 20:21:37
>>462
>>466

ありがとうございました。
手つかずだったので、ほんと助かりました。。

470:466
10/02/05 16:32:53
要素の計算方法が逆だったのかな?と今考えてるけど。
変換先位置から変換元の要素を求めたんだけど、
画像の変換の問題じゃないんだから、逆の方が良かったかな?

471:デフォルトの名無しさん
10/02/05 19:17:12
>>470
90度回転なら、どちらの方法でも、隙間ができない。
60度回転では、・・・

ってことがポイントになる問題だったのでは?
画像かどうかは関係ないでしょ。


472:デフォルトの名無しさん
10/02/06 15:42:11
>>455
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
どうぞ。

473:デフォルトの名無しさん
10/02/06 16:15:20
どなたか406お願い出来ないでしょうか?

474:っっ
10/02/06 16:26:33
このプログラミングの前まではうまくいっているのですが、この部分がうまくいきません。助けてくださいm(_ _)m

printf("A/Sの式\n");
for(j=1;j<=12;j++){
a[i][j]/s[j];
printf("%3.1f\n",a[i][j]);
}

475:っっ
10/02/06 16:32:18
                          _. - ._             _
                      /. --- \             l `i   __
                         //      ヽ          } ´ ̄ ´ '´ う
                     |{      /\  ____  j     /
      ( ヽ              '.l.   ___/    ヽ´  ー-=ニ.¨`7     r '
   r─’ `ヽ            .ゞ ' ´         '.       `丶、  /
 (´_ ̄       ヽ         /             |       \  \/
 ‘ー⊂.         \      /  ,    l  |    |、        ヽ‐-,ヽ
      ̄ ̄\     \.     /  /     !  ∧   ||ヽ__|     ∨ `
          \     \  /  /     | / '   ||'´ヽ l      l. ',     オワタ
            \     \l  '    |  ,ィ´′ ∨ ハ. |   Nヽ.   |、 i
              \     \l.    |  /|/     / /       ',   |、ヽ!
                \     ヽ、.  | i       ∨    三三 ハ.  ! \
                  \.   /\ | | xィ彡        ・{ l. ∧ /
                /\ /   }'ヽ! "´       ,、_,   l |∨ ∨
                  / /   /   \     ‘7´  )   .ノ |     l
               {      /    ',\    、__,. ' ,/  |    /
                 \   /      ', ヽ----r ' ´ |   |  ./
                 | ー ´         ',  ',   ヽ    |   |  /

提出期限過ぎてしまった

476:デフォルトの名無しさん
10/02/06 19:00:28
>474
s/\//\/=/

477:デフォルトの名無しさん
10/02/06 20:55:03
>>406

478:デフォルトの名無しさん
10/02/06 20:56:51
>>474
a[i][j]/s[j];
の結果をどうしたいのですか?どこに保存するのですか?

479:デフォルトの名無しさん
10/02/06 23:49:03
>>475
小学校の国語から始めるべきです
C言語はその後で良いでしょう

480:デフォルトの名無しさん
10/02/07 01:25:57
[2] プログラム
環境
[3.1] OS:Linux
[3.2] コンパイラ名:gcc  
[3.3] 言語:C++
以下の実行結果はどうなるか


#include<stdio.h>
#define N10
int main(){
int i,wa=0;
for(i=1;i<N;i++){
if((i%2) == 0) continue;
wa+=i;}
printf("%d\n",wa);
return 0;}


よろしくお願いします。

481:デフォルトの名無しさん
10/02/07 01:31:24
>>480
Nが未定義という類のエラーが出るでしょう

482:デフォルトの名無しさん
10/02/07 01:40:50
>>480
URLリンク(codepad.org)

483:デフォルトの名無しさん
10/02/07 03:45:18
[1] C言語プログラミング初歩(専門学校)
[2] int型の配列変数A[64][32]をB[32][64]に代入する.
次の対応があるようにすること
A[0][0] -> A[0][1] -> A[0][31] ->A[1][0] ->....->A[63][31]
B[0][0] -> B[0][1]-> B[0][31] -> B[0][32]->....->B[31][63]
(上の段と下の段が一致)
A[m][n]には値 (m+n) % 31が入っているものとする。
[3] Windows Vista /Visual studio 2008/C言語
[4] 2/15迄
[5] 1月開講です。ポインタはまだ習ってません

484:デフォルトの名無しさん
10/02/07 05:03:38
>>483
こんな感じ?

#include<stdio.h>
int main()
{
  static int A[64][32], B[32][64];
  int m,n;

  for(m=0;m<64;m++)
    for(n=0;n<32;n++)
      A[m][n]=(m+n)%31;

  for(m=0;m<32;m++)
    for(n=0;n<64;n++)
      B[m][n]=A[2*m+n/32][n%32];

  return(0);
}

485:冷やかしです
10/02/07 05:41:31
return(0)はかっこ良すぎ(カッコ付け過ぎ)
return 0;で十分w
てか関数呼び出しと見間違えやすいので付けないほうが吉

486:温めます
10/02/07 09:35:40
int *a = &A[0][0], *b = &B[0][0];

for(m=0;m<32;m++)
  for(n=0;n<64;n++)
    *b++ = *a++;

487:前スレ639
10/02/07 11:46:40
宿題でなく質問させてもらいます。
スレリンク(tech板:652番)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上のプログラムについて聞きたいのですが

このプログラムはfor文を2回まわしているので数列の長さをLとしたとき計算量は2LなのでO(L)と言えるのでしょうか?
それと、ソースの下の方にある ? はifの省略記法なのでしょうか?

初心者でよくわからなかったのでお教えください

488:デフォルトの名無しさん
10/02/07 12:08:15
>>487
O(n^2) 実際に適当な値入れて何回実行されるか考えたらいいと思う。

そういう捉え方もできなくもないが別物。
三項演算子とかでググったらいいと思う。

489:前スレ639
10/02/07 12:22:19
>>488
このプログラムを作ったくれた作者さんのレスを載せると

>数列のn[i]について毎回「n[i]の前後にn[i]よりも大きい数と小さい数があるか」を調べる場合、
>計算量は数列の長さをLとして O(L^2)かかる。
>一方、>>646のように、n[i]までの最大値と最小値を先に計算してしまうと計算量はO(L)で済む。

と書いてあり、
自分で考えてみてもl-1回計算するfor文が2個あるので2l-2なので、やはりO(L)といえる気もしますが・・・よくわかりません。


?は条件演算子ですね。分かりました。ありがとうございました。

490:デフォルトの名無しさん
10/02/07 12:23:36
>>487
>計算量は2LなのでO(L)と言えるのでしょうか?
YES。入れ子になってれば積になってO(L^2)だけど、
別々になっているので全体の計算量は多い方(今回は同じ)になる。

?は "c ? a : b" という三項演算子の一部。詳細はぐぐれば分かる。
基本的にはifとは別物だが、非常に限定された場面では代わりに使うこともできる。

491:488
10/02/07 12:30:26
最初の奴はよく見てなかった。

492:デフォルトの名無しさん
10/02/07 12:31:17
しかも、今度は途中送信スマン

493:前スレ639
10/02/07 12:38:12
それでは計算量は作者のとおりO(L)ということで正しいのですね?
ありがとうございます!勉強になりました!

494:デフォルトの名無しさん
10/02/07 13:14:34
【質問テンプレ】
[1] 授業単元:C言語入門
[2] 問題文:
キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。その数だけアスタリスクを表示する。ただし、入力を終了するときはCtrl+Zを押すものとする。(vowel.c)
[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2月8日
[5] その他の制限:特にありません。

よろしくお願いします。

495:デフォルトの名無しさん
10/02/07 14:55:13
>>494
URLリンク(kansai2channeler.hp.infoseek.co.jp)
こんな感じでしょうか。

496:デフォルトの名無しさん
10/02/07 15:55:53
>>495
ありがとうございます!
ですがコンパイル出来ませんでした;
制御構造の単元なのですが、While文などを使ってもう少し簡単にしていただくことはできるでしょうか?;

497:495
10/02/07 16:46:58
>>496
エラーメッセージを全部コピペしてもらえます?

498:デフォルトの名無しさん
10/02/07 17:18:05
>>497
vowel.c:
エラー E2140 vowel.c 31: ここでは宣言はできない(関数 countVowel )
エラー E2141 vowel.c 32: 宣言の構文エラー(関数 countVowel )
エラー E2139 vowel.c 70: 宣言に ; がない(関数 countVowel )
エラー E2134 vowel.c 70: 複合文に } がない(関数 countVowel )
*** 4 errors in Compile ***
です。


499:デフォルトの名無しさん
10/02/07 17:24:13
>>497
すみません。
こちら側のミスでエラではなく警告のみでした。
vowel.c:
警告 W8057 vowel.c 68: パラメータ 'argc' は一度も使用されない(関数 main )
警告 W8057 vowel.c 68: パラメータ 'argv' は一度も使用されない(関数 main )

500:デフォルトの名無しさん
10/02/07 17:35:10
>>499
int main (int argc, char* argv[])



int main ()

もしくは

int main(void)

に書き換えてみてください。

501:デフォルトの名無しさん
10/02/07 17:58:32
>>500
int main()に書き換えたらコンパイル出来ました!
for文苦手なので本当に助かりました。
ありがとうございました!!

502:デフォルトの名無しさん
10/02/07 18:16:02
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
  入力された2つの文字列str1,str2を比較し、str1にstr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す関数、strcmpを作成せよ。
int strcmp( char *str1, char *str2);
ex. str1=”abaabab” , str2=”aab” 1
ex. str1=”abaabab” , str2=”abb” -1
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 出来れば今日中に。急ぎで申し訳ありません。
#include<stdio.h>
#include<string.h>
#define LENGTH 10

int strcmp(char *sp1,char *sp2);
int main(){
char str1[LENGTH+1];
char str2[LENGTH+1];

printf("aとbを使って10文字入力してください。\n");
scanf("%s",str1);
printf("aとbを使って2文字入力してください。\n");
scanf("%s",str2);

printf(結果)

strcmp(&str1[0],&str2[0]);

ここまで作ったのですが(中途半端ですみません)関数に行き詰まり、ネットで調べたところ本来のstrcmpの使い方とこの課題で求められているstrcmpの使い方が異なることが分かりどうすればいいのか混乱してしまいました。
この後、関数strcmpを使い、str1とstr2を比較して・・・をどうのようにすれば良いでしょうか?


503:デフォルトの名無しさん
10/02/07 19:23:30
>>502
URLリンク(kansai2channeler.hp.infoseek.co.jp)
これでいいかな。
「strcmp」という名前で関数を定義できなかたので、別名をつけています。

> ネットで調べたところ本来のstrcmpの使い方とこの課題で求められている
> strcmpの使い方が異なることが分かりどうすればいいのか混乱してしまいました。

その通り。
標準関数のstrcmpは、二つの文字列が一致しているか判定する関数。
課題の出し方が悪いと思う。
(あるいは学生をあえて混乱させようとしているのか・・・)

504:デフォルトの名無しさん
10/02/07 19:47:32
strstrだよね

505:デフォルトの名無しさん
10/02/07 20:54:35
strstrでググったら実装がすぐ見つかっちゃうからじゃないの
strcmpと被せたのは<string.h>使わせないためとか

506:デフォルトの名無しさん
10/02/07 21:00:09
それ以前に今日中という期限設定は常識を疑いたいもの

507:デフォルトの名無しさん
10/02/07 21:02:59
#include<string.h>をはずして関数名strcmpにしてなんとか形になりました。
>>503さん、本当にありがとうございました。
またこのスレにお世話になってしまうかもしれませんが宜しくお願いします。

508:デフォルトの名無しさん
10/02/07 21:20:25
1] 授業単元:プログラミング演習
[2] 問題文:次のプログラムを改造し、定積分の面積を求めるプログラムにせよ
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:無期限
URLリンク(kansai2channeler.hp.infoseek.co.jp)

お願いします

509: ◆QZaw55cn4c
10/02/07 21:49:54
>>456
ちょっと皆さんにご意見をお聞きしたいところです。
二分木で番兵(sentinel) をおく意義がわからない、どんなsentinel をおけばいいかわからないのですが、
どうすればいいのでしょうか。
sentinel をおくことで if 文が減らなければならない、と考えているのですが。

510:デフォルトの名無しさん
10/02/07 21:50:58
URLリンク(ameblo.jp)
ここで解説出てるよ

511:デフォルトの名無しさん
10/02/07 22:02:39
>>510
真に受けた俺が悪うございました。

512:デフォルトの名無しさん
10/02/07 23:32:58
>>509
[1] 授業単元:プログラミングコミュニケーション演習
[2] 問題文:>>456の正解を皆さんに”必ず”知らせてください。
[3] 環境
 [3.1] OS:2ch
 [3.2] コンパイラ名とバージョン:jd等
 [3.3] 言語:無制限
[4] 期限:無期限

513:デフォルトの名無しさん
10/02/08 01:34:32
>>508
単純な台形則による定積分で、関数F(X)のXY座標を、X座標の小さい順に
V[][0], v[][1] に入力と解釈するなら

#include <stdio.h>
double daikei(double xa, double ya, double xb, double yb){
return(ya+yb)*(xb-xa)/2;
}

int main(void){
 int n;
 int i;
 double V[1000][2];
 double S,D;

 scanf("%d",&n);
 for(i=0;i<n;i++){
  scanf("%lf",&V[i][0]);
  scanf("%lf",&V[i][1]);
 }

 S=0.0;
 for(i=0;i<n-1;i++)
  S+=daikei(V[i][0],V[i][1],V[i+1][0],V[i+1][1]);

 printf("\n面積:%f\n",S);
 return 0;
}

とか?

514:デフォルトの名無しさん
10/02/08 03:11:53
>>509
NODE sentinel;
NODE *root = &sentinel;
以降、全ての NULL を &sentinel に置き換える。
(malloc の戻り値チェックの NULL はそのまま)

元々 NULL が番兵の役割を果たしていたので、簡単な変更で済む。
NULL が番兵ではないと誤認識させる糞問題でした。


515:デフォルトの名無しさん
10/02/08 04:49:23
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文:
input.ppm というPPMフォーマットのファイルを読み込み, ヘッダをつけて縦横をそれぞれ 1/2(面積にして1/4) にして出力するプログラムを書きなさい.
input.ppm のサイズは 410x307 である.
[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2/8

よろしくお願いします。

516:デフォルトの名無しさん
10/02/08 07:56:54
>515
URLリンク(kansai2channeler.hp.infoseek.co.jp)

517:デフォルトの名無しさん
10/02/08 09:07:12
>>516
丁寧にありがとうございます
ですが難しくてよく分からないです
たぶんもっとシンプルで(いい加減で)良い課題なので、それを参考にもう少し頑張ります

518:デフォルトの名無しさん
10/02/08 12:09:37
>517
論理ミスしていた
diff main.c main.c.bk
75,76c75,76
< rl.x = (x == 0 ? 1 : x*2);
< rl.y = (y == 0 ? 1 : y*2);
---
> rl.x = x*2;
> rl.y = y*2;

縦横1/2の間引きだから、単純に縮小先の画素から見た縮小元の2x2の画素の平均値を新しい画素値にすればいいけど、
1/2の線形補間はになるためあまりきれいに縮小できない
以下疑似コード
x, yは、整数, imageは元画像, new_imageは縮小画像を表す
array(u, v)は、imageの縦u, 横vの値を表す
height, widthは、それぞれ元画像の縦幅と横幅を表す
for y in 0 <= y < height/2
 for x in 0 <= x < width/2
  new_value <- image(y*2, x*2) + image(y*2, x*2+1) + image(y*2+1, x*2) + image(y*2+1, x*2+1)
  new_value <- new_value / 4
  new_image(y, x) <- new_value
 end
end
実際のコードでは、RGBの値をそれぞれ計算しないといけないけど

519:デフォルトの名無しさん
10/02/08 12:15:31
>518
diff恥ずかしいなぁ、寝不足はいかんね

520:デフォルトの名無しさん
10/02/08 14:01:32
>>515-517
mkr_allocate_3d_array()で行のポインタがheightを一つ越えて
初期化されてしまってますね。バグバグバグ。

521:デフォルトの名無しさん
10/02/08 17:59:07
>>513
台形規則のプログラムではなくて
画像の関数の始点Aから終点Bで囲まれた赤色の面積を求めるような
プログラムが欲しいです・・・
URLリンク(www1.axfc.net)

文章の記述不足すみません

522:デフォルトの名無しさん
10/02/08 18:02:02
台形近似でも面積を求めることに変わりはないと思うんだが・・・

523:デフォルトの名無しさん
10/02/08 18:25:02
>>521
それを求める公式の一つが台形則。
希望があるならそれを明記しないと伝わらんぞ。

524:デフォルトの名無しさん
10/02/08 18:45:13
すみません;;
教科書読んだら台刑則のプログラムで面積を求めることが出来ると書いてありました…

あとプログラムについて質問なのですが
S+=daikei(V[i][0],V[i][1],V[i+1][0],V[i+1][1]);
の部分の+=という演算子はどのような働きがあるのかと
コンパイルしたあとは始点(xa,ya)終点(xb,yb)だけを打ち込めばいいのかわかりません
そこについてもよろしくお願いします

525:デフォルトの名無しさん
10/02/08 18:50:14
a+=bはa=a+bと同義

526:デフォルトの名無しさん
10/02/08 19:43:34
>>524
(1)最初に関数F(x)上の点の数nを入力
(2)F(x)上の点(x,y)を、x座標の小さい順にn回入力。

下図を良~く見れば、そのうち分かってくるはず
URLリンク(upload.wikimedia.org)

527:デフォルトの名無しさん
10/02/08 23:35:10
>520
ありがとうございます
潜在的なバグの原因になり兼ねますね

有効なアドレスを参照しているからメモリチェッカでは検出できていませんでした
修正は簡単だけど、エレガントなコードが浮かばない
もう、ppm.c自体の完成度が低すぎて笑える、即席の使いまわしの接ぎ木

528:至急お願いします。
10/02/09 03:50:53
[1] 授業単元:C言語
[2] 問題文: ガウス分布における数値積分 I=∫f(x)dx,←xmin~xmax f(x)=1/√(2*π*σ)*exp(a)  a=-(x-μ)*(x-μ)/(2*σ*σ)
積分区間は[xmin,xmax]=[myuu-2siguma,myuu+2siguma]として計算すること。なおμ=0,σ=1とした場合、I=0.95449と
  なるので確認すること。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2/9 正午まで 出来ればすぐにお願いします。


529:デフォルトの名無しさん
10/02/09 03:59:06
>>528
確認しました。

で提出すりゃいいよ。

530:至急お願いします。
10/02/09 04:09:11
追記 528>>関数を使ってください。

531:至急お願いします。
10/02/09 04:10:07
529>>どういうことですか?


532:デフォルトの名無しさん
10/02/09 04:26:05
計算すること
確認すること

参考書のページ数稼ぎによくあるパターンだな

533:デフォルトの名無しさん
10/02/09 05:39:00
>>528
多少誤差があるけど

#include <stdio.h>
#include <math.h>

double f(double sigma, double mu, double x)
{
return 1/sqrt(2*M_PI*sigma) * exp(-(x-mu)*(x-mu)/(2*sigma*sigma));
}

int main(int argc, char *argv[])
{
int i, n = 10000000;
double sigma=1, mu=0;
double xmin = mu-2*sigma, xmax=mu+2*sigma;
double a = f(sigma, mu, xmin), b;
double sum = 0.0;

for(i = 0; i < n; i++){
b = f(sigma, mu, xmin+(xmax-xmin)/n*i);
sum += (a+b)*(xmax-xmin)/n/2;
a = b;
}

printf("%f\n", sum);

return 0;
}


534:デフォルトの名無しさん
10/02/09 07:18:38
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
配列に
Institute of Technology
という文字列を代入し、ポインタを利用して
・各文字が格納されているアドレス
・そのアドレスに格納されている文字
を表示するプログラムを作成せよ。

[3] 環境
 [3.1] OS:windows XP
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:[2010年2月9日まで]
[5] その他の制限:
お願いします。

535:デフォルトの名無しさん
10/02/09 07:33:03
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
まず次の内容のテキストファイルを準備せよ。
(メモ帳で作成し、test02.txtという名前で保存すること)

abc
123
def
456
ghi
789
jkl
000

次に、作成したテキストファイルから内容を読み出し、
各行の先頭に 01 02 03 というように番号を付加して
画面に出力するプログラムを作成せよ。
[3] 環境
 [3.1] OS:windows XP
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:[2010年2月10日まで]
[5] その他の制限:


536:デフォルトの名無しさん
10/02/09 09:23:35
>>534
#include <stdio.h>

int main(void)
{
char *pstr,str[30]="Institute of Technology";
pstr = str;
for(;*pstr!='\0';++pstr)
printf("%08x: %c\n",&*pstr,*pstr);
}


537:デフォルトの名無しさん
10/02/09 09:26:13
>>535
#include <stdio.h>

int main(void){
int i=0;
char text[200];
FILE *ifp;
ifp = fopen("test02.txt", "r");
if(!ifp) return 1;
while(fgets(text,200,ifp) != NULL)
printf("%02d %s", ++i, text);
fclose(ifp);
}

538:デフォルトの名無しさん
10/02/09 11:34:00
>>535
#include <stdio.h>
int main(void){
FILE *f;
f=fopen("test02.txt","r");
if(f==NULL) return 0;
fclose(f);
printf("01abc¥n02123¥n03def¥n04456¥n05ghi¥n06789¥n07jkl¥n08000¥n");
return 0;
}
センセーが期待した解答とは異なるだろうがよ

539:至急お願いします。
10/02/09 14:07:26
534>>ありがとうございます。argvの後はなんてかいてあるのですか?

540:デフォルトの名無しさん
10/02/09 14:37:13
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
URLリンク(codepad.org)
上のコードが正しく動かないんです・・・
input.txtとして
1
2
3
4
5
の内容を保存して実行ファイルから読み込ませる
./a input.txt
[3] 環境
 [3.1] OS:ubuntu
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[出来れば今日中で]
[5] その他の制限:

541:デフォルトの名無しさん
10/02/09 15:17:43
>>540
自分が作ったプログラムを理解出来ていないようだ。(笑)
input.txtとして↓を与える。
5
1
2
3
4
5

542:デフォルトの名無しさん
10/02/09 15:32:17
うわ、そんな安易な間違いでしたか・・・
ずっとプログラム睨んでました。
ありがとうございます。

543:デフォルトの名無しさん
10/02/09 16:07:04
バカもん。
> ずっとプログラム睨んでました。

プログラム睨んでたら普通気が付くだろ。

544:デフォルトの名無しさん
10/02/09 16:32:55
コードは鏡、自分自身が見えます。

545:デフォルトの名無しさん
10/02/09 16:36:53
自分で書いてないのがバレバレだなw

546:デフォルトの名無しさん
10/02/09 20:17:21
>>538
死ね

547:デフォルトの名無しさん
10/02/09 22:17:58
[1] 情報処理応用
[2] Fortranで,


階乗 n! を計算する関数を作成し,

順列
n個の異なるものからr個取り出して並べる。
このときの順列の総数をnPrとあらわす。
nPr=n(n-1)(n-2)・・・(n-r+1)
を計算する関数を作成し,

組み合わせ
異なるn個からr個取り出して組を作る。
このときの組合せの総数をnCrとあらわす。
nCr = nPr/r!
を計算するプログラムを作成してください
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:fortran
[4] 期限: 明日まで。急ぎですみません。
[5] その他の制限: 特にないですが、板を間違えていたらすみません。


548:デフォルトの名無しさん
10/02/09 22:18:01
[1]C言語課題
[2] コマンドラインに与えられた文字列が単数で自然数を表しているとい
下の例ように出力されるプログラムを作れ
入力==>3
132
231
入力==>5
1304
2552
4031
入力==>10
136107
259084
480952
710631
入力==>20
13610150016
25914201711
48131918127
71218191384
11172014952
16001510631
[3] [3-1]Linux [3-2]GNU C++ [3-3]C言語
[4] 2/22日正午迄 それ以降は不可
[5]stdio.h string.h stdlib.hを使用可能

549:デフォルトの名無しさん
10/02/09 22:39:57
[1] 授業単元:プログラミング 1
[2] 問題文(含コード&リンク):
球の体積をもとめよ。またこの問題は間違っているのでそれを書き換えよ
#include<stdio.h>

int main(void)
{
double r,v;


printf("直径を入力して下さい\n");

scanf("%1f",&r);
v=4.0/3.0*3.14159*(r/2.0)*(r/2.0)*(r/2.0);
printf("直径%fの球の体積は%fです。\n",r, v);


}
[3] 環境
 [3.1] OS:windows vista
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:[2010年2月10日まで]
[5] その他の制限:


550:デフォルトの名無しさん
10/02/09 22:40:50
>>547
とりあえずスレタイをn!回声に出して読んでみようか

551:デフォルトの名無しさん
10/02/09 22:47:32
[1] 授業単元:プログラミング 1
[2] 問題文(含コード&リンク):
二つの数列の和を表示したい。またこの問題は間違っているのでそれを書き換えよ
#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;
int count;

for (count = 0; count <=10; count++ )
printf("%d,", suretu1[count]+suretu2[count]);
{
suretu1[count] = 2 * count +2;
suretu2[count] = count* count;
kotae= suretu1[count] + suretu2[count];
printf("二つのの整列の和によってできる数列は,\n");
printf("%d\t",kotae);
}
}
[3] 環境
 [3.1] OS:windows vista
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:[2010年2月10日まで]
[5] その他の制限:


552:デフォルトの名無しさん
10/02/09 23:00:56
[1] プログラミング基礎
[2] URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限:2月10日 18時まで
[5] その他の制限: 説明は詳しく書いてくれるととてもありがたいです。

現在とても困っています。皆さんよろしくお願いします。

553:デフォルトの名無しさん
10/02/09 23:15:56
>>548
入力==>15
136101511
259141127
481311384
712114952
111510631
入力==>11
1361011
2590007
4800084
7000952
1110631
入力==>9
13607
25984
48952
70631
入力==>8
1367
2584
4852
7631
入力==>6
1364
2552
4631
入力==>4
134
202
431

554:デフォルトの名無しさん
10/02/09 23:19:47
[1] 授業単元:プログラミング 1
[2] 問題文(含コード&リンク):
/*************************
ある二つの文字列str1,str2 の編集距離はつぎの3つの操作を行うことによりstr1 をstr2 に変換するのに要する操作の最低回数である
・ 1文字挿入する
・ 1文字削除する
・ 1文字を他の1文字に置き換える
たとえば str1="sport" はstr2="sort" に, 文字 'p' を削除することによりstr2 に変換できるため編集距離は 1 である

str_n を文字列str の頭からn 番目までの部分列としm(i,j)をstr i とstr j の編集距離を表すものとする.m(i,j)とm(i+1,j),m(i,j+1),m(i+1,j+1)の間に成り立つ再帰式を記述しなさい

この再帰式に基づき効率良く編集距離を計算するプログラムを2次元配列を利用して作成しなさい.ただし,関数m(i,j)はint型の編集距離を返り値とする.
******************************/
[3] 環境
 [3.1] OS:windows vista
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:[2010年2月10日まで]
[5] その他の制限:


555:デフォルトの名無しさん
10/02/09 23:20:08
[1]C言語とプログラミング
[2] キーボードから3つの整数を受け取り大きさの小さい順に出力するプログラムを作りなさい。
但しmain関数内ではint変数一つだけが使えるものとします。またmain関数の再帰呼び出しも
出来ません。(main関数の引数、argc,argvをint変数として使用することも勿論禁止します)
main関数のみで構成されるプログラムとして下さい。
入力される数は1から10までの範囲にあることを常にチェックし、それ以外の入力の場合は
再入力を促して下さい。
[3]
[3-1]Windows XP HomeEdition
[3-2]Visual Studio 2008
[3-3]C言語
[4] 2/11迄
[5] 特に無し

556:デフォルトの名無しさん
10/02/09 23:28:36
まぁどれも期日まで時間があるからゆっくりやるべきだ
最近の学生は甘え過ぎ
粘って苦しめてやれというのはウソにせよ
期日ぎりぎりに催促されたら貼ってやる
って感じで

557:デフォルトの名無しさん
10/02/09 23:30:40
>>549
scanf("%1f",&r); の %1f を %lf に修正。※lは小文字のL
main関数が値を返して無いので、最後に return 0; 等を追加。

558:デフォルトの名無しさん
10/02/09 23:32:55
>>556
余計なこと書くなよw
日付変えてくるだろうが

559:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/10 00:39:59
>>561
素早い回答ありがとうございます。助かりました。


563:デフォルトの名無しさん
10/02/10 00:57:05
[1] 授業単元: DirectX研究2
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: (Windows vista)
 [3.2] コンパイラ名とバージョン:visual stdio 2008
 [3.3] 言語: C++
[4] 期限: ([2010年2月10日17:00まで]
[5] その他の制限:

564:デフォルトの名無しさん
10/02/10 01:26:05
>>547
スレ違いだけどFortran77で
URLリンク(kansai2channeler.hp.infoseek.co.jp)

565:564
10/02/10 02:17:10
スレ違いのまま失礼… 訂正版
URLリンク(kansai2channeler.hp.infoseek.co.jp)


566:デフォルトの名無しさん
10/02/10 02:19:37
>>548
思ったより難しかった

567:566
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/10 02:50:49
>>555
ビット演算の問題と解釈
URLリンク(kansai2channeler.hp.infoseek.co.jp)

570:デフォルトの名無しさん
10/02/10 03:48:14
>>555
タイプミスに苦闘したが5分で打ち込めた
URLリンク(kansai2channeler.hp.infoseek.co.jp)

571:デフォルトの名無しさん
10/02/10 04:05:07
>>568
答えがπになってしまった。間違ってたらごめんね
URLリンク(kansai2channeler.hp.infoseek.co.jp)

572:デフォルトの名無しさん
10/02/10 05:31:38
>>555
好奇心で書いてみた
めちゃ読みづらいけど勘弁
URLリンク(testhp.ddo.jp)

573:デフォルトの名無しさん
10/02/10 07:39:07
>>555
入力数を何でも対応できるように
むりやりキャストしてポインター使ってみた
URLリンク(codepad.org)

574:デフォルトの名無しさん
10/02/10 07:47:33
大きい順と小さい順を勘違いしてた
URLリンク(codepad.org)

575:デフォルトの名無しさん
10/02/10 08:53:50
おまえら必死だな

576:553
10/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:デフォルトの名無しさん
10/02/10 09:10:09
>>575
問題が魅力的だったからみんなやったんだろうな

578:デフォルトの名無しさん
10/02/10 10:38:11
>>576
数値自身は左右反転じゃないぞ

579:553
10/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:デフォルトの名無しさん
10/02/10 13:00:22
>>548
URLリンク(codepad.org)

581:デフォルトの名無しさん
10/02/10 13:12:52
>>548
デバッグ用のprintfがあるので見づらいが、>>580では
 1) 上半分の三角形(>>576のような)の各行の長さを求める
 2) 出力される配列の長さを決める( (i行目の長さ + (h-1-i)行目の長さ)の最大値 )
 3) 出力
という流れ。三角形の(i,j)の位置のにある数字は簡単に計算できるので
メモリには各行の長さだけ記憶すれば十分。

582:デフォルトの名無しさん
10/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の使用などはこちらを参照してください
URLリンク(homepage3.nifty.com)

583:デフォルトの名無しさん
10/02/10 13:19:45
>>582
それ、宿題じゃねーだろ。

584:570
10/02/10 13:32:22
>>555
URLリンク(kansai2channeler.hp.infoseek.co.jp)
多くの部分に間違いがあった。
さすがに700行/分の入力ではミスが起こるわなw

585:570
10/02/10 13:46:27
スマン
まだ一カ所ミスが...
入力チェックをミスってる
#define INPUT()で
でwhileロジックを
while ( (m<1)||(m>10) )
に修正して

586:デフォルトの名無しさん
10/02/10 13:51:16
>>336
課題4と課題5どなたかよろしくお願いします。期日すぎても提出できるので、なんとかならないか必死です。

587:デフォルトの名無しさん
10/02/10 17:24:00
>>586
5番のグラフって何グラフ?

588:デフォルトの名無しさん
10/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
10/02/10 19:03:12
>>572
>>573
>>570
どうもありがとうございました。
>>570さんのコードは非常にわかりやすいです。
3600行を5分で入力とは凄いですね。
タッチタイピング速度はどの位でそれくらいに
なるんでしょうか?自分は1分間に賞味150文字が
精一杯です。(IME変換時間を含む)
他の皆様もいろいろと工夫をされておられ特にビット
操作とかポインタ操作とか裏技的な技法は非常に参考
になると思います。

590:デフォルトの名無しさん
10/02/10 20:45:14
>>570
ひらいてみた。ちょwwww

591:デフォルトの名無しさん
10/02/10 20:52:14
世間では一昔前はコード1行1万が
相場だった時代もあったね。
>>570のコードだといくらになるんだかw

**確認事項**
ここで答えてやっても事後を含め
一切依頼者に報酬を請求出来ない

592:デフォルトの名無しさん
10/02/10 20:54:41
>>591
ここで答えるようなのって単体じゃどうせ金にならなくないか?

593:デフォルトの名無しさん
10/02/10 20:55:23
>>570
>>584
クソワロタ

594:デフォルトの名無しさん
10/02/10 21:15:31
ここで解かれている問題とその回答を
応用してもいいけど事後問題になる可
能性もあるんで(2ちゃんねるから
引用ってw格式ある組織ではそれだけ
で処分対象w)

595:570
10/02/10 22:38:17
>>555
いえいえ。
タッチタイピングの上達のコツは
このスレの他の回答者に聞いてくれ
企業秘密なんで。
この業界では毎分400文字~500文字
(IME入力変換時間を含む)の入力が
生き残りの最低条件なんでw
今回は実にのんびりしたテンポで入力
したよ。

>>590
>>593
何かおもしろいところあるのかい?

596:デフォルトの名無しさん
10/02/10 22:50:17
いやここまで冗長なプログラムは初めて見たもんで
一行いくらならこういう方法でガツガツ稼げるなw

597:デフォルトの名無しさん
10/02/10 23:16:03
冗長?
見た目だろ。
ロジックそのものはこれほど直接的なものはない
コードは常に短く書けばいいというもんでもないと
目から鱗が落ちたような気分
コードを(最初から)短く書くのが偉いとかそういう
奇妙な信仰はかなり弊害もあるんじゃないかと
もっとも一つのint変数しか使えない状況での
プログラミングもかなりナンセンスだと思うが

598:デフォルトの名無しさん
10/02/10 23:16:59
回路に例えるとワイヤードロジックな
普通のプログラムがマイクロプログラムに例える事が出来るかも

599:デフォルトの名無しさん
10/02/10 23:21:30
>>555って__asmでスタックとレジスタ使えばint変数一つでも楽勝なんじゃないのw

600:デフォルトの名無しさん
10/02/11 02:07:11
>>555
逃避したくなったので書いてみた。
URLリンク(codepad.org)

601:デフォルトの名無しさん
10/02/11 11:03:25
勉強になるなぁ。hhdかー。

602:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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
10/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:デフォルトの名無しさん
10/02/11 14:04:38
>>602
変な問題ですが無理なのでは166byte

606:デフォルトの名無しさん
10/02/11 14:05:22
602です。
<<603
<<604
の方ありがとうございます。 助かりました。

607:605
10/02/11 14:05:28
失礼3項演算子があったのね


608:デフォルトの名無しさん
10/02/11 14:11:20
>>555
きっと反則技なんだろうけど。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

609:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/11 22:11:13
>>555
int a;
scanf("%ld %ld %ld%*c", (long *)&a, (long *)&argc, (long *)&argv);
じゃだめか
Windows XP HomeEditionって64bitないよね

611:デフォルトの名無しさん
10/02/11 22:54:33
>>610
たった3行の制約条件を見逃すようじゃ、お前マの適性ない。
転職を勧める。

612:デフォルトの名無しさん
10/02/12 01:00:07
>>555
もう需要ないかと思うが、面白そうなのでやってみた。
バブルソートのありがたみを出すため、かつ、4bit余ったため、入力する値を4つに勝手に変更。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

613:デフォルトの名無しさん
10/02/12 01:03:56
>>612
1~10だよ。

614:612
10/02/12 01:26:00
>>613
1~10にしてますよー。

615:デフォルトの名無しさん
10/02/12 01:32:57
[1] 授業単元:計算機実習
[2] 問題文(含コード&リンク):
URLリンク(hermes.esys.tsukuba.ac.jp)
[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン:VisualStudio2008
 [3.3] 言語:C
[4] 期限: 3/5
[5] その他の制限:特になし

よろしくお願いします。


616:デフォルトの名無しさん
10/02/12 02:49:14
>>611
その前に就職をしないと

617:デフォルトの名無しさん
10/02/12 11:43:57
>>615
問題文が理解できません! orz


618:デフォルトの名無しさん
10/02/12 12:44:18
このスレの人ってちょっと考えると皆精神病院予備軍だな
>>585とか
>>548を解いて喜ぶ人とかw

619:デフォルトの名無しさん
10/02/12 12:49:19
>>618
パズルを解く感覚だよ

620:デフォルトの名無しさん
10/02/12 12:50:35
さすが現役精神病の方は言うことが違うね

621:デフォルトの名無しさん
10/02/12 17:21:53
トルヒーヨのハルディンはここですか?

622:デフォルトの名無しさん
10/02/12 19:30:20
>>555
n番煎かしれんがオラも参加!
URLリンク(kansai2channeler.hp.infoseek.co.jp)

623:デフォルトの名無しさん
10/02/12 19:31:59
>>622
それは突っ込み待ちか?

624:デフォルトの名無しさん
10/02/12 19:33:42
>>622
キレイに書くねー。

625:デフォルトの名無しさん
10/02/12 20:21:21
>>555
n+1番煎じしてみた。
どこにも「同じ数字が複数回入力された場合、まとめてはならない」なんて書いてないよね。
URLリンク(codepad.org)

626:625
10/02/12 20:26:28
ミスった…
× #define PSHORT_A(x) (((uint16_t*)&x)+2)
○ #define PSHORT_A(x) (((uint16_t*)&x)+1)
SHORT_Aも同様。

627:デフォルトの名無しさん
10/02/13 01:48:01
>>555の問題って、入力がintの範囲内であることは暗黙の了解としても、[0, 10]の範囲にあることの確認は不可能だよね?
charの範囲内としたら、(たとえintが規格的に最小な16bitでも)できそうだが。

628:デフォルトの名無しさん
10/02/13 02:07:59
>>627
お前は何を言っているんだ。

629:デフォルトの名無しさん
10/02/13 03:01:56
答えが多すぎて、このパターンだけでいいか。出席を取ります。
①intをポインタとして実際使うメモリはintの配列
②intを分解して4バイトとして4個の数字を使う
③1個の数字しか使わない

スレリンク(tech板)l2

630:デフォルトの名無しさん
10/02/13 03:58:19
>>628
「半角文字以外に「あ」とか「阿」のような全角文字が入力される場合まで考えると、正しい結果が得られなくなる場合があるのでは?」
って言ってるんだと俺は推測する。
JISとかユニとかの知識が乏しいので、俺には実際どうなのかはわからんが。

631:デフォルトの名無しさん
10/02/13 04:33:14
誰も>>585のコード見て苛つかないの?
同レベルだとみなされかねないし...
常連回答者だったら清書したくならないか?

632:622
10/02/13 05:17:54
んじゃ、マクロを大文字に修正
#n
s/v(\(.\))/V(\1)/g
s/swap/SWAP/g
s/w\([^h]\)/W\1/g
p

633:デフォルトの名無しさん
10/02/13 09:50:31
しかしこういうビット演算は今までまったくやったことが無いので、
回答者のみんながホントスゲーんだなと分かる。
>>625さんのようなバケットソートぽいのを自分でも書こうと思ったが、
まったく書けなかったのが辛いところ。

634:デフォルトの名無しさん
10/02/13 12:54:49
>>633
まずは愚直なコードからでもいいから一歩を踏み出す事が大事。

635:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/13 18:44:07
C言語の宿題と聞いて飛んできました。

637:デフォルトの名無しさん
10/02/13 20:28:20
>>629
①②は、環境が書いてあるから、intを4bytesとして扱ったりポインタとして扱ったりの環境依存コードがかけるという解釈なんだろうか。

638:568
10/02/13 20:45:46
>>571
ありがとうございました。自分今のところFORTRANしか
組めないんでFORTRANに移植するのやってみます。

639:デフォルトの名無しさん
10/02/13 21:33:20
>>635
すげ~
といいたいところだが>>584と同レベルかそれ以下である
ということを示していない気がしないでもない

640:デフォルトの名無しさん
10/02/13 22:40:48
>>555
>>570 をマクロで見やすくしてみた
URLリンク(kansai2channeler.hp.infoseek.co.jp)

641:デフォルトの名無しさん
10/02/13 23:14:51
うむ。
マクロを使うとここまで短く出来るんだな。
行数で稼いでいるプログラマは犯罪的だ
という教条の根拠か...
しかしこれは逆に言えば、マクロを使うことが
禁止された時、それを読む人が地獄の責め苦
を受けることをまた意味しているとも言えるなw

642:デフォルトの名無しさん
10/02/13 23:42:56
>>612を改良した。

・入力する値を5つに勝手に変更。この方法だと6つ以上は俺には無理だな・・・
・マクロの使用で見やすくした。
・範囲外(全角文字も含む)が入力されても、問題なく再入力を促すのを確認。(01や09は範囲外としている)

URLリンク(kansai2channeler.hp.infoseek.co.jp)

643:デフォルトの名無しさん
10/02/14 00:50:52
>>641
コードのアセンブリ(実行最小単位)に対する圧密
度はC言語の出身地であるシステム記述の分野
では非常に重要な評価ポイントらしいね
その世界ではコードは圧密に書けば良いというもので
もなく逆に極端に希薄に書けば良いというものでも
なく結構奥深いらしい。
それにしても>>584>>640の例は同じ記述が書き
方によって極端に変わる良い例なんだろな

644:デフォルトの名無しさん
10/02/14 01:32:40
>>640
おみごと

645: ◆/91kCCQXBo
10/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:デフォルトの名無しさん
10/02/14 12:45:49
あのー。誰も突っ込まないので俺が言う。

>>555
> 但しmain関数内ではint変数一つだけが使えるものとします。
> またmain関数の再帰呼び出しも出来ません。
> (main関数の引数、argc,argvをint変数として使用することも勿論禁止します)
> main関数のみで構成されるプログラムとして下さい。

お前一人だけどうあがいても落第だよw

647:デフォルトの名無しさん
10/02/14 13:36:52
ソースを生成するんだろうけど、出てくるのはつまらなそうだね。
これなら、秀丸のマクロでいいんじゃね。

648:デフォルトの名無しさん
10/02/14 15:47:49
>>555
URLリンク(kansai2channeler.hp.infoseek.co.jp)

649:デフォルトの名無しさん
10/02/14 15:57:40
なんか、問題自体が不毛だよなぁ。


650:デフォルトの名無しさん
10/02/14 16:00:58
とんち合戦の様相を呈してきたな。

651:デフォルトの名無しさん
10/02/14 16:06:28
いやむしろIOCCC2ch版というべきか

652:633
10/02/14 16:09:58
あ、思いついちゃった。
>>648さんの方法で、データを0-9で保存して1-10と表示させると、
INT_MAX.to_s.sizeの個数の数を扱えそう。
けどソートはどうするんだろうw

653:デフォルトの名無しさん
10/02/14 16:53:38
てか依頼者が消えた問題にいつまでも拘泥するのは
宿題スレのマナー違反

654:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/15 11:34:10
>>654
簡単に考えれば、
0-20をE
21-40をD
41-60をC
61-80をB
81-100をA
みたいに評価をつけて、同じものを抽出すればいい気がする。
もうちょっと細かくランク分けしたほうがいいかな

656:デフォルトの名無しさん
10/02/15 12:33:42
>>654
プログラムを組む以前の問題として、どうゆう回答をすれば先生が満足するのか
そこがイマイチ不明だ・・・。

傾向が似ているかどうか、というだけなら、各教科の得点を偏差値に変換して、
5次元空間上にプロットした時に、任意の生徒Aとのユークリッド距離が
最も近い生徒を選べばいい気がする・・・。

仮にそれでいいとして、高速抽出するためのデータ構造を組め、ってなると
要は任意の生徒Aに最も近い得点の傾向の生徒Bを予め計算しておいて
AとBを対で持たせておけばいいとか、そうゆうことかな?

657:デフォルトの名無しさん
10/02/15 12:44:28
モデル化してそれに最適なデータ構造考えろと言ってるんだろ。
モデル化の部分はこれまで授業で触れられていると思う。

658:デフォルトの名無しさん
10/02/15 13:54:43
>>654
皆全員0点だった場合は誰を選べばいい?

659:デフォルトの名無しさん
10/02/15 14:14:59
誰でもいいんじゃね? みんな一緒だし。

660:デフォルトの名無しさん
10/02/15 14:16:28
656 のやり方で、データを読み込むとき予めソートしておくというのはどう?

661:デフォルトの名無しさん
10/02/15 14:17:26
日本語おかしいな。
データを読み込むときソートした状態にスレばいいんじゃないか?

662:デフォルトの名無しさん
10/02/15 14:19:12
>>654
極端な例の場合
ある生徒の得点分布が(50,51,52,53,54)
の場合(52,52,52,52,52)よりも(95,96,97,98,99)
の人のほうを選出したほうがいいの?

663:デフォルトの名無しさん
10/02/15 15:04:57
(0,20,40,60,100)のほうが近いとオモ

664:デフォルトの名無しさん
10/02/15 15:42:32
単に差を出したらダメって言ってるんだから、{52,52,52,52,52}だろうよ

665:デフォルトの名無しさん
10/02/15 17:17:46
>>654
「傾向が近い」というのは、例えば
A (70,63,77)
B (70,70,70)
C (90,81,99)
だと、A≒B じゃなくて A≒C、という解釈
・・・でいいのか?


666:デフォルトの名無しさん
10/02/15 17:32:36
1) 合計の偏差値を取り、Aに近い10%を抽出候補を絞る
2) 五科目点数の総当たりの大小比較を行い、Aと共通なら1異なったら0として
その合計が最大のBを選出。
3) Bが複数出たらさてどうするか。

667:デフォルトの名無しさん
10/02/15 18:21:10
取り敢えずまだまだC言語で純正に一気に解決終了!
って出来る問題じゃなさそうだな
数学の複素多様体の知識とかデータベースの知識も要りそう
な問題で他のシステム(殆どが固有の言語を持つ)との
連携も要るような..

668:デフォルトの名無しさん
10/02/15 18:23:34
[4] 期限: 無期限
てのも何かコエーよw

669:デフォルトの名無しさん
10/02/15 18:29:58
foreach(生徒 in 生徒たち) {
 if(指定生徒 == 生徒) continue;

  match_average = 0;
 for(科目番号 = 0; 科目番号 < 5; 科目番号++) {
   diff = 生徒の得点[科目番号] - 指定生徒の得点[科目番号];
   match_average += diff * diff;
 }
 
 if(best_match_average > match_average) {
   best_match_average = match_average
傾向が似ている生徒 = 生徒
 }
}

考え方は、これでいいのかな?
match_average は、ユークリッド距離とか平均二乗偏差を意味する数値だけど、
あえて平方根をとらないことが高速化になってるしw
 

670:デフォルトの名無しさん
10/02/15 18:34:10
>>667
問題によっては複数の支援ツールからなるソリューションパッケージは
あっても単独ソルバーアプリにまではとても出来てない問題って沢山あ
るからな

671:669
10/02/15 18:56:34
>>654
URLリンク(kansai2channeler.hp.infoseek.co.jp)
うpしてみる


672:デフォルトの名無しさん
10/02/15 19:22:00
俺だったら「極座標」を使い、生徒の得点を中心からの距離と
緯度、経度とかの角度で表す。
「成績球」を半径方向と角度方向の非合同領域に分割し
生徒がどこに所属しているかで似ているかどうかを決める。
データ入力の段階で所属を決めるから、検索はデータの1回の
通読だけで至って単純。
だが領域の取り方が相当恣意的になりデータの分布が事前に
分かっていたら結果のコントロールもかなり出来るんで
敢えて書くべきコードじゃないと思うんでパス
(実際の問題では球の中に決して一様に分布しないんで
この方法は不適)

673:デフォルトの名無しさん
10/02/15 20:02:38
>672
出だしと、まとめが矛盾してるぞ?
まあ、つべこべ言わずにコードを書いてみろ。
言ってることが難しすぎて俺にはトンと理解できねえ、
どんなコードになるのか興味あるわ。
書いてください、お願いします。

674:デフォルトの名無しさん
10/02/15 20:12:17
>>670
CとかC++とかJavaがソリューション系では好かれない理由は
書くべきプログラムは音楽みたいにmainで始まりトップダウ
ンに一気に終了ってパターンであるという固定観念を印象づ
けるからじゃね?ソリューション系ではどっちかというと
「絵」とか「図」を書くに近いんで。
多くのC/C++ Javaプログラムの実際はそうではないことは
ベテランにはわかってるんだが、教育プロセスにおいて
OJTで新人に教える時にコード字面から植え付けられる先入観が
結構邪魔してると認識されることが多いんじゃないかと

675:671
10/02/15 20:25:39
>651
問題をよく読んでいなかった、データ構造を組まなきゃいけないのね。
0点だわwww


676:デフォルトの名無しさん
10/02/15 22:13:02
>>654
類似度は得点を正規化して内積を取ったものとしている
URLリンク(kansai2channeler.hp.infoseek.co.jp)

677:676
10/02/15 23:03:19
>>676
一番近いものだけ分かればいいから qsort じゃなくてもよかった

678:デフォルトの名無しさん
10/02/15 23:25:17
依頼者(今回は質問者かな?)のレベルに追いついたことはわかったw

679:デフォルトの名無しさん
10/02/16 01:41:40
>>615
問題を解説してくれたまへ
ここまでで挫けた

ステップ1
double v(double x){
return 4*(pow(x, -12)-pow(x, -6));
}
v(x)==εn (但しεn=-0.75) となる二つの x を二分法で求めよ


ステップ2
ステップ1 で求めた xin xout を用いて次の積分を計算せよ
s(εn)=2*γ*∫sqrt(εn-v(x))dx


ステップ3
ステップ2 の結果を用いて n を求めよ


ステップ4
???

ステップ1~4 を使って γ の値を変化させ…頑張れ

680:デフォルトの名無しさん
10/02/16 01:59:58
ちょっと関係ないかもしれないんだが、今の時期って大学とか休みだから、今ある質問って何の宿題?
長期休暇とかの?それとも高校のか?

681:デフォルトの名無しさん
10/02/16 03:16:24
大学院の専門分野での研究課題や入試問題を貼ってて、その後何も反応が
無い依頼は釣りだと思って、スルーしてたんだけど(´・ω・`) チガウノカナ?

682:デフォルトの名無しさん
10/02/16 04:12:58
>>681


683:デフォルトの名無しさん
10/02/16 05:08:42
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: WindowsVista
 [3.2] Visual C++ 2008
 [3.3] 言語: C++
[4] 期限: 2月17日まで
[5] その他の制限: 特になし

よろしくお願いします。

684:デフォルトの名無しさん
10/02/16 07:39:27
>>681
研究室レベルのものはあったが(>>615) 入試はみかけない。

685:デフォルトの名無しさん
10/02/16 08:02:15
実際に解く内容は簡単だけど
問題を理解するのが難しいw

686:デフォルトの名無しさん
10/02/16 08:57:46
>>684
例えば >>554 とか、プログラム作成を除けば、東京大学大学院の
入試問題↓とほとんど同じだったりするからさ。
URLリンク(www.i.u-tokyo.ac.jp)

普通の回答依頼かとも思ったんだが、真面目に答えて後釣り宣言されるのも
アレだから、微妙に情報系を逸脱する宿題はスルーして様子を見てることにしてる

687:デフォルトの名無しさん
10/02/16 09:58:04
>>684
>>615 は、基礎的な数値計算だろ。学部1年生レベル。

688:デフォルトの名無しさん
10/02/16 10:04:02
数式こそ長くて複雑だが、やってることは方程式の解を求めることや数値積分だ。
2分法、セカント法、シンプソン公式を使えばいい。

689:デフォルトの名無しさん
10/02/16 14:48:36
>>676
これは>654の求めてるものと違うんじゃないかな?
『使いまわしの効かない検索用情報』の収集を
フルスキャンで行っているので、力まかせの探索にしかなってないよね。


690:デフォルトの名無しさん
10/02/16 16:36:07
>>689
一応正規化した段階の情報だけは使いまわせる

691:デフォルトの名無しさん
10/02/16 17:40:44
>>654
>>676 の改造版
先に全ての生徒間の類似度を計算してみた

予め O(N^2) のコストがかかっているので、検索回数が N に比べて十分に多いときだけ有効
URLリンク(kansai2channeler.hp.infoseek.co.jp)

692:デフォルトの名無しさん
10/02/16 17:45:15
データ数が増えた時のパフォーマンスの低下率
条件付きUPDATE処理に置ける実更新率
こういった観点からデータ構造に見直しが入る
やりかたは一つじゃなく、データの分布に
前提条件を置くことによって、相当のパフォーマンス
改善になるが、汎用性と信頼性は犠牲になる

693:デフォルトの名無しさん
10/02/16 19:02:05
k-dimension tree の出番ですか。

694:デフォルトの名無しさん
10/02/16 20:36:27
>>693
ある範囲内をすべて列挙するのは簡単そうだけど
ある場所の近所だけを調べるってのは簡単なの?

695:デフォルトの名無しさん
10/02/17 02:44:01
C言語固有の問題では無さそう。
データベース板か数学板で聞いてからの
ほうが良さげ。てか依頼者はもう見てないのか?

696:デフォルトの名無しさん
10/02/17 03:38:52
>>654
傾向の近さの指標として相関係数を使用。gccを使用しているので、VC++では改変が必要かも。
また高速化の余地は十分あると思います。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

697:デフォルトの名無しさん
10/02/17 05:59:24
こういう問題は、「相関度」は外部関数としてブラックボックス
として扱うんじゃね?

698:デフォルトの名無しさん
10/02/17 06:09:13
相関度に最適なデータ構造の設計も課題なのだが。
そうだ、これもブラックボックスにしよう。

699:デフォルトの名無しさん
10/02/17 06:34:49
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
  URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (VC8)
 [3.3] 言語: (C++)
[4] 期限: ([2010年2月17日12:00まで]

非常に短い期間を設定していますがあくまで希望納期です


700:デフォルトの名無しさん
10/02/17 10:01:02
>>699
無料デバッガ募集でつか?(・∀・)ニヤニヤ

701:デフォルトの名無しさん
10/02/17 10:04:06
無料デバッグしてやるでつよ(・∀・)ニヤニヤ

m_SumList.AddTail((void*)&List1);

m_SumList.AddTailに渡すのは(void *)(CStringList **)&List1で本当にいいんでつか?

702:デフォルトの名無しさん
10/02/17 11:34:42
>699
いくらでも生じる可能性はある

それにしてもC++で(void *)とか何考えているんだ

703:デフォルトの名無しさん
10/02/17 14:03:40
funkてw

704:デフォルトの名無しさん
10/02/17 14:52:59
>>697
そうだね。だが難しい。相関度に適当な仮定を入れないと
無理だろ
>>698は回答として完全にナンセンスだが、それ以前に
問題も曖昧過ぎかもね。

705:デフォルトの名無しさん
10/02/17 21:09:00
[1] 授業単元:C
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: 問わず
 [3.2] Cがコンパイルできれば・・・
 [3.3] 言語: C
[4] 期限: 今日
[5] その他の制限:左側の要素をしきい値としたクイックソートです.閾値と等しい場合は右側へ
お願いします

706:デフォルトの名無しさん
10/02/17 22:00:48
>>697
この問題の場合は高速で処理できることも重視されてるようだから、
ブラックボックス化しても処理速度が同等以上ならそのほうが良いけれど、
そうでなければ、どちらがいいかは一概には言えないよ。

707:デフォルトの名無しさん
10/02/17 22:32:12
>>705
今日迄というのはいくら何でも んG

708:デフォルトの名無しさん
10/02/18 16:28:57
[1] 授業単元:
期末レポート
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
FreeBSD バージョンは知りません
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc バージョンは知りません
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
C言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
2月末日まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
C言語どころか、UNIXマシンの操作もおぼつきません。急ぎませんので
片付けて頂ければうれしいです

709:デフォルトの名無しさん
10/02/18 17:06:42
>>708
int binarycopy(FILE *, FILE *);
int main(int argc, char **argv){
FILE *src, *dest;
if (argc != 3) return -1;
src = fopen(argv[1], "rb");
if(src == NULL) {
fprintf(stderr, "%s が開けない\n", argv[1]);
return -1;
}
dest = fopen(argv[2], "wb");
if (dest == NULL) {
fprintf(stderr, "%s が作成できない\n", argv[2]);
return -1;
}
if(!binarycopy(src, dest)) {
remove(argv[2]);
fprintf(stderr, "複製に失敗\n");
return -1;
}
fclose(src);fclose(dest);
return 0;
}

710:デフォルトの名無しさん
10/02/18 17:07:25
>>708 続き。
int binarycopy(FILE *s, FILE *d) {
#define BUFFSIZE 256
char buff[BUFFSIZE], size = sizeof (char);
size_t n = 0, total = 0, buffsize = BUFFSIZE;
#undef BUFFSIZE
for (;;) {
n = fread(buff, size, buffsize, s);
n = fwrite(buff, size, n, d);
total += n;
// エラーが生じた場合や、end-of-file(ファイルの最後)に達した場合、
// 返り値は指定した個数よりも小さい値(またはゼロ)となる。
if (n == 0 || n < buffsize) break;
}
return total;
}

711:デフォルトの名無しさん
10/02/18 21:35:42
>>699
いf(pぃst2){
POSITION pos2 = plist1->GetHeadPositon();
CString str = plist1->GetNext(pos2);


712:デフォルトの名無しさん
10/02/18 21:37:02
>>711
pぃst2じゃねーや1だ

713:デフォルトの名無しさん
10/02/19 15:26:05
HPはどのページも3クリック以内でたどり着けるのが良いとされています。
さて問題です。どのページからも、すべてのページへこの条件を満たすようにするには
各ページにリンクはいくつ必要でしょうか。
link(n)をページnのリンク数としたとき min { link(n) } を決定するという問題です。

714:713
10/02/19 15:27:42
ページ数は、1000から1万の任意の値が与えられる物とします。

715:デフォルトの名無しさん
10/02/19 15:38:17
min(Σlink(n))じゃなくて?
インデックスページを作り、
他のページはインデックスページへ1つのリンクを持てば
どのページへも2クリックで行けるから
min(link(n))はインデック以外のページすべて=1

716:デフォルトの名無しさん
10/02/19 15:43:44
∩★テンプレに即していないんで★雑談扱いとさせて頂きます★∩

717:デフォルトの名無しさん
10/02/19 15:53:55
min(max(link(n)))

718:デフォルトの名無しさん
10/02/19 15:59:21
ページのリンクの最大数を、最も小さくするようにするってことでした。

719:デフォルトの名無しさん
10/02/19 16:03:43
面白いけど奥深すぎ

720:デフォルトの名無しさん
10/02/19 17:16:00
>>654
クラスタリング k-meansでググれ

721:デフォルトの名無しさん
10/02/20 01:10:58
>>713
ページ数Nに対して 2√N くらいじゃないかね

戦略:
・全部のページを同じ大きさのm個のグループに分ける(各グループには N/m ページある)
・各グループにインデックスページを作り、
 グループ内の他の全てのページと相互リンクする
・各グループのインデックスページを全て相互リンクする
・任意の2ページ間は多くても
  自グループのインデックス→目標グループのインデックス→目標ページ
 の3クリックで移動できる

一番リンクの数が多いのは各グループのインデックスページで、
 max(link(n)) = (インデックス間の全結合) + (グループ内のリンク) ≒ m + N/m
これが最小になるのは m=√N のときで min(max(link(n))) ≒ 2√N

722:デフォルトの名無しさん
10/02/20 01:29:14
>>721を書いてから半分にできることに気づいた

戦略:
・全部のページを同じ大きさのm個のグループに分ける
・グループ内のページは全て相互リンクする
・グループ内の(m-1)個のページにそれぞれ担当のグループを割り当て、
 グループ間の担当のページ同士を相互リンクする
・任意の2ページ間は多くても
  自グループの担当ページ→目標グループの担当ページ→目標ページ
 の3クリックで移動できる

このとき、リンクの数が一番多いのはグループ間を繋ぐ担当のページで、
 max(link(n)) = (グループ内の全結合) + (担当グループへのリンク) = N/m-1 + 1
最も効率が良くなるのは、グループ内の全てのページが他のグループの担当ページになるとき、
つまり N/m = m のときで、そのときm = √Nであって、 min(max(link(n))) = √N。

723:デフォルトの名無しさん
10/02/20 01:41:52
独り言を書くのは俺も含めて勝手だが...
>一番リンクの数が多いのは...
と勝手に決めて、それが最小になるのは...
とする論法は頂けませんなw
希望的見積もりというのなら分かるが...

このスレで常連回答者やってる人どんな質問にも
答えがあって、答えなければいけないんだと
思い込む空気が醸成されておりそれに毒されてしまっ
てるかもしれないことに常に気をつけなければならないね。
プログラミングの場合は、数学の問題と違って
必ずしも正解があるとは限らない対象も扱わざるを得ない
場合が多くて大変だからこそ...

724:722
10/02/20 01:51:03
>>723
>>一番リンクの数が多いのは...
>と勝手に決めて、それが最小になるのは...
>とする論法は頂けませんなw
ごめんなさいごめんなさい。>>721の勢いで適当なこと書きました。
ちゃんと計算したら max(link(n)) ≒ N/m + m/(N/m) で、
min(max(link(n)) ≒ 1.89*(N)^(1/3) くらいでしたorz

というかC/C++の宿題じゃないな、その点についても謝る

725:デフォルトの名無しさん
10/02/20 01:56:24
論点がずれてた件…
「この戦略のもと」ってちゃんと書かないといけないな
採った戦略が厳密に最適かは分からんが、
それでも準最適な戦略を考え出すのがプログラムに必要な能力

726:デフォルトの名無しさん
10/02/20 02:03:49
>>713
最適解かどうかは不明だけど、実現可能な解
#include<stdio.h>
#include<stdlib.h>

int max_min(long n)
{
long i, j;

if(n==1) return 0;
if(n<=4) return 1;
for(i=0;;i++)
{
for(j=1;j<=i;j++)
{
if(j*(i-j+1)*(i+1)+j>=n) return i;
}
}
return -1;
}

int main(int argc, char *argv[])
{
int n=1000;

if(argc==2) n=atoi(argv[1]);
printf("%d\n", max_min(n));

return 0;
}

727:726
10/02/20 02:32:46
>>726
間違ってたorz

728:デフォルトの名無しさん
10/02/20 02:53:03
頭の中のハイパーリンクも含めたらそうなるなw

729:726
10/02/20 03:03:20
>>713
これで実現可能になった…はず
#include<stdio.h>
#include<stdlib.h>

int max_min(long n){
long i, j;

if(n==1) return 0;
if(n<=4) return 1;
if(n<=7) return 2;
for(i=2;;i++){
for(j=2;j<=i;j++){
if(j*(i-j+1)*(i-j+1)+j>=n){
return i;
}
}
}
return -1;
}

int main(int argc, char *argv[]){
int n=1000;

if(argc==2) n=atoi(argv[1]);
printf("%d\n", max_min(n));

return 0;
}

730:デフォルトの名無しさん
10/02/20 03:23:33
正解と汚解ってかW
>>555に対する>>570とかの解答とかな

731:デフォルトの名無しさん
10/02/20 04:06:13
>>615
URLリンク(codepad.org)
γ=100を計算するところまで。解析解との比較は面倒だからやってない。
x_in、x_outが単調に増減してるからそんなに間違ってないはず。
γ変えて議論するのは自分でやってくれ。γは128行目

732:デフォルトの名無しさん
10/02/20 04:54:56
スレ違いだけど解きたくなっちゃうのは仕方ないよな

733:デフォルトの名無しさん
10/02/20 05:01:57
解くべきはまずはその問題の出所。というよりも問題意識に共感できること。
そして実は対象に問題はなく真の問題は解きたいと思う汝自身に発している
かも知れないということも考えると間違いは少ない。

以上チラ裏

734:デフォルトの名無しさん
10/02/20 06:13:09
>>713
スレリンク(tech板:740番)

735: ◆/91kCCQXBo
10/02/20 10:52:17
スレリンク(tech板:739番)

#include<stdio.h>
int main(void){
  int n,m,i,j;
  float ans;
  /* 解答 */
  printf("ページ数:");
  scanf("%d%*c", &n); m=n;
  ans = (n+1)/3.0;
  if((n=ans) != n) n++;
  printf("\n%d[page] %d[link/page]", m, n);
  /* 結果 */
  for(i=1;i<=m;i++){
    printf("\n%d:",i);
    for(j=0;j<n;j++){
      printf("%d ", (i + j*(n-1))%m+1 );
    }
  }
  puts(""); return 0;
}

736: ◆/91kCCQXBo
10/02/20 11:05:35
なんか、今見たら違ってる。

737: ◆/91kCCQXBo
10/02/20 13:18:05
もっと減らせそう
#include<stdio.h>
int main(void){
  int n,m,i,j;
  float ans;
  /* 解答 */
  printf("ページ数:");
  scanf("%d%*c", &n); m=n;
  ans = (n+1)/3.0;
  if((n=ans) != n) n++;
  printf("\n%d[page] %d[link/page]", m, n);
  /* 結果 */
  for(i=1;i<=m;i++){
    printf("\n%d:",i);
    for(j=0;j<n;j++){
      printf("%d ", (i + j*3)%m+1 );
    }
  }
  puts(""); return 0;
}

738:デフォルトの名無しさん
10/02/20 14:17:55
>>737
>>722 のアルゴリズムの場合
ページ数 20 のときリンクの最大数は 4
これより減ることはあっても増えるのは無しだろう
1 : 2 3 4 5
2 : 1 6 7 8
3 : 1 2 9 10
4 : 1 2 11 12
5 : 1 2 13 14
6 : 1 2 15 16
7 : 1 2 17 18
8 : 1 2 19 20
9 : 1 2
10 : 1 2
11 : 1 2
12 : 1 2
13 : 1 2
14 : 1 2
15 : 1 2
16 : 1 2
17 : 1 2
18 : 1 2
19 : 1 2
20 : 1 2

739:738
10/02/20 14:50:48
>>722 のアルゴリズムじゃねーw

740:デフォルトの名無しさん
10/02/20 21:27:37
実際にリンク組んで確かめるプログラムはないんですか。

741:デフォルトの名無しさん
10/02/20 23:30:28
ていうか、あってるかどうか確認するプログラムって、オーダはどうなる?
ページ数をN、最大クリック数をCとしたら、NCでできるのか?

742:デフォルトの名無しさん
10/02/21 00:10:35
U個のユニットに分け、ユニットをそれぞれG個のグループに分ける。
各々のグループにはn枚目のページがあるとする。
また、n >= Uという条件をつける。

このとき、総ページ数N = U*G*n

まず、グループ内のn枚のページで、相互リンクを貼る。
相互リンクの数は (n-1)個

次に、グループ内のm枚目のページにm番目のユニットの各々のグループ内のページ(どれでもいい)各1枚へのリンクを貼る。
グループ外リンクの数は、G個

こうすると、(ユニット, グループ, ページ) = (u1, g1, p1)から(u2, g2, p2)へ行くのに、最大でも
(u1, g1, p1) -> (u1, g1, u2) -> (u2, g2, ??) -> (u2, g2, p2)の3クリックで行ける。

また、このとき合計リンク数はG + (n-1)個

G + (n-1)が最小となり、N = U*G*n, n >= Uを満たす数字を考えると
・まず、Uを増やして数を稼ぎたいので、U=n
・よって、N=G*n^2を満たし、G+(n-1)が最小となるn, Gを求める
・計算の結果、それはn^3=2N, G=n/2のとき

743:デフォルトの名無しさん
10/02/21 00:19:18
例えば、64ページあるとき、
Unit 0{
 Group 0{ Page 0 = [(0,0,1), (0,0,2),(0,0,3),(0,1,0)], Page 1 = [(0,0,1), (0,0,2),(0,0,3),(1,0,0),(1,1,0)], ...}
 Group 1{ Page 0 = [(0,1,1), (0,1,2),(0,1,3),(0,0,0)], Page 1 = [(0,1,1), (0,1,2),(0,1,3),(1,0,0),(1,1,0)], ...}
}
Unit 1{
 Group 0{ Page 0 = [(1,0,1), (1,0,2),(1,0,3),(0,0,0),(0,1,0)], Page 1 = [(1,0,1), (1,0,2),(1,0,3),(1,1,0)], ...}
 Group 1{ Page 0 = [(1,1,1), (1,1,2),(1,1,3),(0,0,0),(0,1,0)], Page 1 = [(1,1,1), (1,1,2),(1,1,3),(1,0,0)], ...}
}
...
になって、グループ数=2, ユニット数=ページ数=4で、最大リンク数は5


744:デフォルトの名無しさん
10/02/21 00:57:26
ヒューリスティックアプローチを探したいものだが
C/C++言語ではやめたほうがいいかも
VM上で実行できる処理系でないと
カーネルコードが書ける処理系ではお勧め出来ない

745:738
10/02/21 02:02:28
>>738 のアルゴリズムで解いた結果は
総ページ数 1000 のとき、最大リンク数 18
総ページ数 10000 のとき、最大リンク数 40
合ってるかどうか未確認

詳細内容 50kB
URLリンク(kansai2channeler.hp.infoseek.co.jp)

746:デフォルトの名無しさん
10/02/21 08:46:43
[1] 授業単元:
UNIX C Programming
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
Mac OSX 10.5.8
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc 4.0.1
 [3.3] 言語: どちらでも可
[4] 期限: 2010年2月24日夜7時まで
[5] その他の制限:
可能であれば強引な方法でも構いません。
上記リンクはCで書いてありますが、C++でも構いません。
何卒よろしくお願いします。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch