トップページ⇒tech
36コメント15KB

Cマガ電脳くらぶ

■ このスレッドは過去ログ倉庫に格納されています
0001お腹さん@名無しいっぱい。NGNG
Cでパズル。
00021NGNG
今月号どうよ?
0003説けないNGNG
終了!
0004すぐNGNG
解けた。ひひひひひ。
0005ファイルが見つかりません。NGNG
どんな問題?
0006デフォルトの名無しさんNGNG
>>5
手を使わないでオナニーするにはどうしたら良いか
0007デフォルトの名無しさんNGNG
>>6
 Hな夢を見る
0008デフォルトの名無しさんNGNG
>>6 それじゃ Cじゃないじゃないか!!
0009デフォルトの名無しさんNGNG
>>8
じゃ、
手を使わないでセクースするにはどうしたら良いか
0010カン違いクンNGNG
> 9

> 手を使わないでセクースするにはどうしたら良いか

真中のアシを使う。
0011デフォルトの名無しさんNGNG
>>1
初心者の俺にとっては、今月号はよかった。
0012デフォルトの名無しさんNGNG
>>11
あげるの忘れてるよ
0013デフォルトの名無しさんNGNG
C使いのくせにCマガ買ってない奴居るのか?
許さねぇ
0014デフォルトの名無しさんNGNG
>>13
ごめんなさい
001513NGNG
>>14
(´(エ)`)ノポーッ
0016デフォルトの名無しさんNGNG
>>6
コンニャク
0017デフォルトの名無しさんNGNG
あの問題って思ったより難しいよなぁ。。。
以前書いたプログラムは50時間走らせても
全ての解が出せなかったけど誌面の正解者は
30秒足らずで解いてたのには驚いた
0018デフォルトの名無しさんNGNG
>>9
乙武洋匡様にききなされ。
0019デフォルトの名無しさんNGNG
sage
0020ななし〜NGNG
今月号はすぐ解けそうだが…
0021デフォルトの名無しさんNGNG
今月号の「ハードウェア入門」。

あの結論に全く同意できない。
ハードウェアの仕組みを知ることも大事かもしれないが、
プログラミング能力を伸ばすには他にもっと大事なことが
あるはずだ。

O太さん、ひょっとしてmalloc論争でボケたのか、それとも
もともとああいう人だったのか。
0022デフォルトの名無しさんNGNG
>>21
パフォーマンスクリティカルなコードを書く必要のない
ビジネス系のプログラマには理解できないかもしれないね。

でもハードやマシン語の知識がなければ、
いつまでたっても地に足を付けることはできないよ。
すべてはそれからだ。
0023デフォルトの名無しさんNGNG
>>22
もしかしたら、古い人間の戯言かもしれないって
少し思ってしまうんですよ。
ハードやマシンの知識って。
特に、Windowsでプログラムをしている場合などは‥。

最近、ハードウェア直でアクセスした方が良い機械に触れられて
なんか、嬉しい。
0024デフォルトの名無しさんNGNG
>>22
>パフォーマンスクリティカルなコードを書く必要のない
>ビジネス系のプログラマには理解できないかもしれないね。

今日は大漁だね、パパ。

つーことで、誰も理解できるだの出来ないだのという話は
してないんだよ。
つーか、あんた、Cマガ読んだか?

>でもハードやマシン語の知識がなければ、
>いつまでたっても地に足を付けることはできないよ。

ハァ?
0025デフォルトの名無しさんNGNG
>>24
>テストプログラムを書いて性能評価を行うことも大切だが、
>それと同時にハードウェアやOSの仕組みや性質を理解して、
>その背景にある設計思想に逆らわないプログラミングを
>心がけることも重要になる。
>ハードウェアが理解できるようになれば、より立体的で高度な
>視点から自分のプログラミングを眺めることができるようになり
>プログラミングの技術もいっそうスムーズに向上するはずだ。
引用:C-MAGAZINE2001.5 P27

で?どこに同意できないのよ。
ハードウェアの知識「も」大切だという意見だと思うのだが。
0026デフォルトの名無しさんNGNG
うーん。あのハードの内容は食い足りない感じだったなあ。
自分的にはもっと詳しく書かれてもOKな感じ。
0027デフォルトの名無しさんNGNG
ハードウェアの記事は興味深く読ませていただきました。
しかし、新連載がすべて入門レベルで萎え萎え〜
002824NGNG
>>25
うむ、話せそうな奴と見うけられるので、ちょっと続けてみたりする。

俺が納得できないのは、

>効率的でパフォーマンスのよいプログラムを書くには、
>自分の書いたプログラムが計算機の中でどのように
>実行されているか、いいかえればそのプログラムが
>計算機のさまざまなハードウェアをどのように利用
>しているかを理解するのが最善の方法だ。
引用:C-MAGAZINE2001.5 P27

の部分。

効率的でパフォーマンスの良いプログラムを書くには、
まず、その言語の特徴と、ライブラリの理解、プラス、
普遍的なアルゴリズム・手法の理解の方が先だ。

この前の段落で、

>(略)〜ようでは、初級プログラマから脱却できる日は遠い。

と書かれていることを見ると、どうもこの「まとめ」は
初級プログラマ宛に書かれてるのではないかと推測される。

それだったら、なおのこと、この特集で解説されているよう
なことよりも、先に上で言ったようなことを勉強するべきだ。

・・・というのが、俺の主張。

もちろん、ハードウェアの知識が必要ない、などと言うつもり
はないが、O太さん、プライオリティが違うんじゃないですか、
と言いたいのだ。
002924NGNG
そういや、昔NiftyのFPROGで、
「DOSの知識(メモリモデルとか)は初学者には必要か」
という論争があったのを思い出した。

初級レベルは、基本情報処理試験に出るくらいのハードの
知識があれば十分で、今回の特集で説明されているような
ことは「必須」でも「最初に学習すべきもの」でも無い。

もちろん、あっても別にかまわないが。
0030デフォルトの名無しさんNGNG
電脳倶楽部
003124NGNG
いいじゃん、Cマガつながりだし。
駄目?
003225NGNG
>>24
プログラマには設計能力と実装能力の両方が求められる。
どちらかが欠けていれば、
そのプログラマは、まだ初級レベルと言わざるを得ない。

>その言語の特徴と、ライブラリの理解、プラス、
>普遍的なアルゴリズム・手法の理解の方が先だ。
これはどちらかというと設計レベルの話だけど、
その言語がどうマシン語にコンパイルされ、
アルゴリズムやライブラリがどうインプリメントされ、
どうハードウェアで実行されるか
ということを知らなければ、
良いコードを書くことはできないと思うのよ。

だから、アルゴリズムや言語の知識はもちろん重要だけど
ハードウェア系の知識も同じ位重要だというのが俺の主張。
0033デフォルトの名無しさんNGNG
電脳倶楽部マンセー
祝一平マンセー
003424NGNG
>>32

俺は「最善の方法だ」に引っかかってるんだよね。

例えばディスクアクセスがボトルネックになってる場合、
ハードウェア的なディスクアクセスの仕組みなんて
知らなくてもいいんだよね。それがボトルネックになって
いる、と認識できさえすれば。

で、どうやってそれを解消するかというと、それは
ハードウェアの知識では解消出来ないんだよ。

つまり、ハードウェアの知識より、ライブラリやアルゴリズム
の方が必要とされるわけ。

だから、「初心者脱皮」と言う面で見れば、まず「ハードウェア
の知識」ではなく「ソフトウェアの知識」が必要だ、と俺は
考える。

まぁ、見解の相違だろうから、俺はこのへんで。
0035wwNGNG
さっき書いたんだけどあってんのかなあ。誰か判定/チューン求む。
(送る気はありません)
#include <stdio.h>
#include <stdlib.h>
typedef unsigned short word;
int main() {
  word *op0 = malloc(0x400);
  word *op1 = malloc(0x400);
  word *ip0 = malloc(0x400);
  word *ip1 = malloc(0x400);
  word *tmpp;
  word a,b;
  int oc0,oc1,ic0,ic1,i,count;
  unsigned char och[0x200],ich[0x200];
  for(i=1;i<0x200;i++){
    och[i] = 0;
    ich[i] = 0;
  }
  och[0] = 1;
  op0[0] = 0;
  oc0 = 1;
  ic0 = 0;
  count = 0;
  while(oc0+ic0){
    oc1 = 0;
    ic1 = 0;
    for(i=0;i<oc0;i++){
      a = op0[i];
      b = (((a&0x3)<<7) + ((a&0x4)<<4) + ((a&0x1f8)>>3))^0x80;
      if(ich[b] == 0){
        ip1[ic1++] = b;
        ich[b] = 1;
      }
      b = (((a&0x7)<<6) + ((a&0x8)<<2) + ((a&0x1f)>>4))^0x140;
      if(och[b] == 0){
        op1[oc1++] = b;
        och[b] = 1;
      }
      b = (((a&0x1f)<<4) + ((a&0x20)>>2) + ((a&0x1c)>>6))^0x5;
      if(ich[b] == 0){
        op1[oc1++] = b;
        och[b] = 1;
      }
      b = (((a&0x3f)<<3) + ((a&0x40)>>4) + ((a&0x18)>>7))^0x2;
      if(ich[b] == 0){
        ip1[ic1++] = b;
        ich[b] = 1;
      }
    }
    for(i=0;i<ic0;i++){
      a = ip0[i];
      b = (((a&0x3)<<7) + ((a&0x4)<<4) + ((a&0x1f8)>>3))^0x100;
      if(och[b] == 0){
        op1[oc1++] = b;
        och[b] = 1;
      }
      b = (((a&0x3f)<<3) + ((a&0x40)>>4) + ((a&0x180)>>7))^0x1;
      if(och[b] == 0){
        op1[oc1++] = b;
        och[b] = 1;
      }
    }
    count++;
    oc0 = oc1;
    tmpp = op1;
    op1 = op0;
    op0 = tmpp;
    ic0 = ic1;
    tmpp = ip1;
    ip1 = ip0;
    ip0 = tmpp;
    if(och[0x1ff] || ich[0x1ff]){
      printf("%d move",count);
      return 0;
    }
  }
  return 1;
}
0036デフォルトの名無しさんNGNG
>>35
んじゃあ、正解は締切りの後で。
■ このスレッドは過去ログ倉庫に格納されています