>>873 他人をバカにする暇があったら自分の人生を充実させ解けと言うことだ。
効き目が右目だと理系。
効き目が左目だと文系。
どうでもいいことだが、
>とりあえず、高校生の時点での大学進学を決める際に
>「理系は文系よりも所得が低い」という現実を知らされてない人は
>アンテナ低すぎる人種だね。
「いいのか?所得すくないぞ!」としゃべる教育者と、
それを鵜呑みにするような人間はイラネ(`〆´)/
878 :
仕様書無しさん:03/06/13 10:32
愚痴が多いのが文系。
独り言が多いのが理系。
879 :
仕様書無しさん:03/06/13 11:39
>873 ひょっとしてあのアンケート鵜呑みにしてるのか?
もうちょっと現実見たほうがいいぞ・・・
回答率30%の調査を信じる神経が理解できないのだが。
遅レスだが
>>489 の問題について、いい方法を思いついた。
>素人がプログラムを組むと、よく間違えて無限ループになったりする。
>それを実行するのは時間の無駄だから、実行前にチェックしたい。
>そこで、任意のプログラムを入力として読み込んで、それが正常に終了するか
>終了しないで無限ループになるかどうかを判定するプログラムを作ってくれ。
(1) まず、プログラムを1ステップだけ実行し、実行後のプログラムの状態(メ
モリの一部とレジスタの内容)をどこかに退避しておく(この保存領域をAと
する)。
(2) そこからさらにプログラムを2ステップ実行し、実行後のプログラムの状
態を別の場所(領域B)に退避する。
(3) 領域Aに保存しておいたプログラムの状態をシステムに復帰させ、1ステッ
プ実行する。そして、実行後の状態を領域Aに退避する。
(4) 領域Bに保存しておいたプログラムの状態をシステムに復帰させ、2ステッ
プ実行する。そして、実行後の状態を領域Bに退避する。
(5) 領域Aの内容と領域Bの内容を比較する。もし一致していれば無限ループに
入っている。そうでなければ(3)に戻って繰り返す。
>>520 は理系なのか?
882 :
名無し@沢村:03/06/17 09:41
文系と理系がどっちが偉いかはいちがいには言えないよ。
というのは、文系にもザコもいるしザコでないやつもいる、理系にもザコもいるしザコでないやつもいるからだ。
まあ、文系と理系とザコの比率はどっちが多いというのは、あるかもしれないけどね…
だから問題は、文系か理系かではなく、ザコかザコではないかということだよ。
884 :
仕様書無しさん:03/06/17 09:51
>>489 ループに入る条件って言えば限られてる。
無限自己再帰があるとかfor文などの条件ミス
この点を考慮してかんがえる。
forの条件が内部で変更されているか調べチェックする
再帰については大雑把にスタックが4までなどなど
>>884 いったい何の話をしている? お客さんは、「任意のプログラムを入力と
して読み込んで、それが正常に終了するか終了しないで無限ループにな
るかどうかを判定するプログラム」がほしいと言ってるんだよ。
>>885 何が言いたいのかわからない。それは無限ループじゃないだろ。
887 :
名無し@沢村:03/06/17 10:22
>>881の方法は、ほとんどのやつの考えがそこにいきつくと思われる方法だね。
つまりとりたてて語るに値しない、初歩的な方法だよ。
>>886 全ての無限ループは、1ステップで無限ループに突入するの?
スーパープログラマ>>(超えられない壁)>>優秀なプログラマ>>>>(理解力と適正と理系的思考の壁)
>>>>SE>=普通のプログラマ>>>融通の利かないSE>>打ち込むだけのプログラマ(か?)
スーパープログラマ 変態または神
優秀なプログラマ 上流工程も当たり前のようにできるが、実装が好きな変人
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
SE 要領良いの人
普通のプログラマ 普通の人
JR山崎駅より上は、外交能力があるかどうかはまた別のはなし。ある人もいる。
注1)JR山崎駅より下が文系というわけでもない。
注2)支払われる対価はこの順番の限りではない。(w
>>889 >全ての無限ループは、1ステップで無限ループに突入するの?
もちろん、そんなことはない。
>>881 の方法はあるステップ数を実
行した後で無限ループの入り口に入った場合でも、きちんとその無
限ループを検出する。
>>892 んじゃ、無限ループが無い場合、このプログラムはどうやって終了するの?
894 :
名無し@沢村:03/06/17 11:18
>>893 ぎゃははははははぁぁぁぁぁああああああああああああーーーーーーーーーーっ!!!!!
>>892 そんなメンドクサイ事しなくても、プログラム中でカウンタが変化する
部分だけ抜き出して実行し、カウンタの履歴を取っておき、過去一度で
も同じ値があった場合には無限ループだと判断すればいいんじゃないの?
あっでも↓のような場合は駄目か。
Do While i <> 1
i = Int(Rnd * 5)
Loop
>>893 普通に終了する。(4)のところで、ずつ2ステップ実行しているが、ここの実行のときに終了
状態に達し、無限ループが存在しなかったことが確定する。
>>894 うるさい。
899 :
仕様書無しさん:03/06/18 04:43
余りの出る割り算OKじゃないと無理だよね?
それはいいとして、高校数学ってもっと現代的な数学で再解釈できるものなの?
高校数学なんてちょろっとやって、問題の解き方が体に馴染んだら
直ぐにでもそれを捨てるべきっていう人が数学板には多いんだけど。
>>898 >
>>881みたいな虱潰しは、(a,b,c)みたいに少ない場合は良いが
> 比べる要素の数が増えた場合組み合わせが膨大になる。
>(この場合、n^2のオーダで増える)
いいかげんなことを言うな。どこが「虱潰し」だ。
>>881のオーダーはO(n)。
>>899 >余りの出る割り算OKじゃないと無理だよね?
無理じゃない。
901 :
仕様書無しさん:03/06/18 11:09
903 :
仕様書無しさん:03/06/18 17:36
>>900 3,4,7,8は
7/4=1
っていうの認めないと無理だろ
うむ、すまん。。
誤読だった。。
>>881の処理を特定の環境下で行った場合の速度をものっすごい大雑把な概算で考えてみたよ。
面倒だから1GBは1,000,000,000byteだし、環境による細かい変化の一切も無視する。
それに、数学なんて忘れちゃったからあちこち書き方がおかしいかも知れない。
ってぎゃー、会社から書き込めなかったから
相当後ろの方に来てしまった。
まあいいや。書き込もう。
まず、ソフトウェアが一回の実行で常に1MBのメモリーを使用していると仮定する。
また、1GHzのCPUを使用し、実行開始からCPU時間丁度1秒後に無限ループに突入すると仮定する。
>881の方法だと、領域Aに保存するプロセスが
無限ループ入り口まで実行されるために1Gステップ使い、
保存書き込みで1G回、復帰読み込みで1G回、復帰書き込みで1G回メモリにアクセスする。
(G回ってあからさまにおかしいけど面倒だからこう書くよ)
領域Bに保存するプロセスが、領域Aに保存するプロセスと平行して
実行されるために2Gステップを使う。二倍進むことになってるからね。
そして、保存書き込みで1G回、復帰読み込みで1G回、復帰書き込みで1G回メモリにアクセスする。
そうすると、全部で3Gステップ実行し、メモリーに6G回アクセスすることになる。
1GHzのCPUで3Gステップの実行は3秒だね。これは少なすぎるので無視していい。
それじゃあメモリーの方はどうかと言うと、
6G回の全てにおいて、1MBのメモリーを読むか書くかしないといけないんだよ!
つまり、
6,000,000,000(step/sec) * 1,000,000(byte) = 6,000,000,000,000,000 byte = 6(PB/sec)
(6PBって6ペタバイトでいいのかな)
あわわ、1秒の計算に11時間もかかるよ!
実際には相当キャッシュが効くだろうし、
計算の大雑把っぷり、適当っぷりは相当なもんだから、
実測は相当違うものになるかも知れない。
それでも、結構な時間がかかりそうだね。
誰かやってみてくれないかな。実装からして面倒くさそー。
これらを全てメインメモリー上で行ったとしよう。
http://www.inter-craft.co.jp/NK_BP/new_page_5.htm 適当に検索して出てきたこのページにある最速のメモリーを使用したとして、
5.4GB/secの速度が出るね。
6(PB/sec) / 5.4(GB/sec) ≒ 1,000,000(sec) ≒ 11(hour)
あわわ、1秒の計算に11時間もかかるよ!
実際には相当キャッシュが効くだろうし、
計算の大雑把っぷり、適当っぷりは相当なもんだから、
実測は相当違うものになるかも知れない。
それでも、結構な時間はかかりそうだね。
誰か実測してくれないかな。
ぎっぎぎぎいっっぎぎぎぎぎいぎぎ
>>898 8の3乗根(=2)x7ー4 とかだめかなぁ?
3478 の他に、1167, 1189, 3357, 4679, 5679 も答えが一つしかない。
1167 (6 / (1 + 1)) + 7
1189 ((1 + 1) * 9) - 8
あとは分らん。有理数が入るとめんどくさくなる。
3357 ((3 * 3) - 7) * 5 だな。
残り二つは誰かお願い。
#include <iostream>
#include <string>
class N {
std::string exp;
int n, d;
N(int nn, int dd, const std::string& e) : n(nn), d(dd), exp(e) {}
public:
N(int nn) : n(nn), d(1) { exp += nn + '0'; }
std::string get_exp() const { return exp; }
N operator+(const N& r) const { return N(n*r.d + d*r.n, d*r.d, '('+exp+'+'+r.exp+')'); }
N operator-(const N& r) const { return N(n*r.d - d*r.n, d*r.d, '('+exp+'-'+r.exp+')'); }
N operator*(const N& r) const { return N(n*r.n, d*r.d, '('+exp+'*'+r.exp+')'); }
N operator/(const N& r) const { return N(n*r.d, d*r.n, '('+exp+'/'+r.exp+')'); }
int operator==(int r) const {return d && n == d * r; }
};
void f(N a[], int n=4)
{
if (n == 1 && a[0] == 10) std::cout << a[0].get_exp().substr(1, 11) << '\n';
for (int i = 0; i < n; i++) {
N x = a[i];
a[i] = a[n-1];
for (int j = i; j < n-1; j++) {
N y = a[j];
a[j] = x + y; f(a, n-1);
a[j] = x - y; f(a, n-1);
a[j] = y - x; f(a, n-1);
a[j] = x * y; f(a, n-1);
a[j] = x / y; f(a, n-1);
a[j] = y / x; f(a, n-1);
a[j] = y;
}
a[i] = x;
}
}
int main() {
N a[4] = {1, 1, 6, 7}; f(a);
N b[4] = {1, 1, 8, 9}; f(b);
N c[4] = {3, 3, 5, 7}; f(c);
N d[4] = {4, 6, 7, 9}; f(d);
N e[4] = {5, 6, 7, 9}; f(e);
}
おぉ、なかなかやるねw
ほす
__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
>>887-888 「『停止問題』と無限ループ判定問題は異なる」ことを
無限ループ判定問題のアルゴリズムを実際に構成することで示す
という点でまあそれなりに意味があると思うのですが.
#昔数学板の基礎論スレで,二つの違いに気づかずにネタをふって
#すぐに指摘されたことを思い出しました.
#言われてみればすぐわかるんですが(^^;
∧_∧
( ^^ )< ぬるぽ(^^)
∧_∧ ∧_∧
ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ