お兄ちゃんの宿題、私が答えるよ
レス数が1000を超えています。これ以上書き込みはできません。
0001麻衣
NGNGこれからは私がお兄ちゃんの宿題手伝ってあげる。
でもあんまり詳しくないから分からないこといっぱいあるから
みんも一緒に考えてね。
お願い。
↓ お姉ちゃんのスレ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=972032579
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG萎えるなぁ。
0004デフォルトの名無しさん
NGNGなどと書く自分の馬鹿さ加減に鬱....
0005研究中?
NGNGエラーメッセージが出ます。
これはどういう意味なんでしょうか?
0006麻衣ちゃんじゃないけど
NGNG2.ファイルフォーマットがプラットホームと
あってない(<CR><LF>とか)から。
のどっちかだとおもいます。
0007名無しさん。
NGNGまんまじゃん。
てのじゃ駄目?
0008デフォルトの名無しさん
NGNGやって
#endif
が無い場合とかもあるね。
まいちゃんもよくやるよ。
0009研究中?
NGNGありがとうございました。
0010人生にもif文を・・・
NGNG}
else{
}
を使う場合、ifの処理の中身は少なくて、elseに
主な処理がくるって邪道かな?
0011デフォルトの名無しさん
NGNGS→aB|bA
A→a|aS|bAA
B→b|bS|aBB
このとき,列aaabbabbbaの最左導出を求めよ.
っていう課題なんだけど,全然わかりません.
0012デフォルトの名無しさん
NGNG普通にソートじゃん?
0013デフォルトの名無しさん
NGNGどれかひとつでもx<n<yを満たすならループから抜け、
全てのnについて満たさないときはxとyを表示させるという
サブルーチンを作りたいです。
for,if,goto等をいろいろ組み合わせたのですが、望む結果が得られません。
どのような構造にすればいいのかアドバイスをお願いします。
0014デフォルトの名無しさん
NGNG{
if(n>x && n<y)
{
break;
}
}
if(n==11)
{
printf("x=%d y=%d" , x , y);
}
001513
NGNG質問なんですが、n=0ではじめのif文の条件を満たして
いないと、次の処理の流れはどこに行くのでしょうか?
(二つ目のif文か、それともn=1での比較か)
それにしてもすごくスッキリしているんですね。
自分の書いたソースは見にくくって・・・。
0016デフォルトの名無しさん
NGNGfor を抜けるのは for が n<=10 を満たさなくなったとき
または始めの if を満たし break で for を抜けたとき
for を抜けたときは n は11になってる。
if の break で抜けたときは n は if を満たしたとき(10以下)になってる
2番目の if で n を調べ for で抜けたか if(break) で抜けたかを判定
001713
NGNGn<=10 という条件に反するように感じるのですが
いいのですか?
0019デフォルトの名無しさん
NGNG>n<=10 という条件に反するように感じるのですが
>いいのですか?
ちょっと表現が変だった。
for は n<=10 の間ループしてる。
つまりループを抜けたときは n は 11 になってる。ってこと。
break で抜けたときは n は 10以下。
分かる?
002013
NGNGnの値が重要なんですね。少し勘違いしていました。
14さん、補足してくださった方、どうもありがとうございました。
0021麻衣
NGNG>>11
文脈自由言語とかだよね。ここだとスペースが省略して表示されちゃうんで木がかけないんだけど、文字列を左から見ていくと最初に来るのはaだよね。
初期状態はSで最初にaが来るのは
S->aB
のルールだから、Sは左の子にa、右の娘にBを持つノードになるのね。
で、次の文字を見ると、やっぱりaなの。
Bの状態で一番左にaが来るのは、
B->aBB
のルールだから、このBは左の娘にa、真ん中の娘にB、右の娘にBを持つノードになるの。
仮に真ん中の娘をBB1、右の娘をBB2と名前を付けてあげると、
今の状態をディレクトリで表してあげるとこんな感じ。
S\a 終端記号なのでここまで
S\B\a 〃
S\B\BB1
S\B\BB2
で、BB1は終端記号じゃないからBB1の本来の状態、Bで次の文字を見てあげるの。そうするとやっぱりaだから、
S\a
S\B\a
S\B\BB1\a
S\B\BB1\BBB1
S\B\BB1\BBB2
S\B\BB2
になるの。 区切るね。
0022麻衣
NGNGで、次にBBB1を処理してあげるの次の文字はbだから、BBB1は
B->b
B->bS
のどっちか。ここで、bの次の文字からSを構成できるかどうかを考えるの。
構成することが出来なかったら、BBB1は
B->b
のルールを適用、できたら、
B->bS
ね。あとはこの繰り返し。
がんばってね、おにいちゃん&hearts;
#ネカマってよくこれを持続できるなぁ・・・。
002321=22
NGNG・・・ちぇっきんぐ
$ bison test.y
test.y contains 4 shift/reduce confilicts.
$
0024お姉さん
NGNGこれからもよろしくね!
0025デフォルトの名無しさん
NGNG出力するにはどうすればいいの?
0026デフォルトの名無しさん
NGNGちなみに言語はCね。
C++では教えてもらったんだけど。
0027麻衣
NGNGFILE *fp;
char fname[32], str[32];
fp = fopen( fname, "wt" );
fprintf( fp, "%s", str );
fclose(fp);
fname,strにはなにか文字列を入れてね♪
でも、リダイレクトじゃダメなのかな?
0028デフォルトの名無しさん
NGNGそもそもリダイレクトってな〜に?&hearts;
0029麻衣
NGNG32に深い意味はないの。
2,4,8,16,32,64のような倍々してしまうコンピュータ病なの。
リダイレクトとは、DOSで
dir > ファイル名
をしたらdirだけしたら画面に表示されるのがファイルに出力されるの。
おわかりになられて?
0030麻衣
NGNG32は適当なバッファサイズだよ♪
足りなければ大きくしてねっ☆ ていうか、多分足りないかな?
必要なバッファサイズを決めるのも設計の一部だから頑張ってね♯
あと、上の例では入ってないけどfpの結果がNULL(エラー)の場合の対処も必要だよっ∬
リダイレクトはプロセスの出力結果を他のプロセスやファイルに渡すことかなぁ��
ex1)
ls -l > ls.log
"ls -l"の結果を"ls.log"というファイルに格納する
ex2)
rm * < yes
"rm *"に"yes"から入力を渡しつづける
0031デフォルトの名無しさん
NGNGls -l rmってUNIXコマンド?
0032麻衣
NGNGていうか、この麻衣はDOS知らない☆
0033デフォルトの名無しさん
NGNGするのですが、桁数がばらばらでとっても見づらいです。
十の位から、小数点以下9桁まで表示させたいのですが
どうすればいいのでしょうか?
0034デフォルトの名無しさん
NGNGヘルプでprintfのフォーマット調べろや。%sは文字列、とかそういうやつな。
0035麻衣
NGNG0036麻衣
NGNG%12.9f だよ
0037デフォルトの名無しさん
NGNGまたヨロシクね。
0038麻衣をチンしました。
NGNG想像以上の効きめです!
失禁脱糞対策にあらかじめ中のみえるビニール袋に閉じこめて500Wでまずは30秒にTRY!
小娘とはいえコンビニ弁当より重いんだし余裕かなと思ったんだけど・・・
たった12秒で袋を蹴破りでてきました。目が逝っちゃってたのでとりあえず出してあげました。
犬みたいにハアハア出し入れしている舌は真っ赤です。顔を近づけてみたら吐く息が
すっごく熱くてビックリ!耳もすっごく熱くなってて真っ赤でした。やっぱ肉の薄い部分だからかな。
案の定、中で失禁しちゃってました。失禁は日課なのですっかり慣れて手袋もせず処理しました。
いつもなら罰として更に厳しい愛の鞭を与えるんだけど、今日は頑張ったのでご褒美に
乾燥エサを10粒もあげました。3日間なにも与えてなかったので腹が減っていたのか
ガツガツ喰ってました。まだ手や足の末端の肉の薄い部分は熱くなってます。
だいぶ回復してきたので手足耳をカーテンに糸で縫いつけて大の字型に宙づりにしてます。
また失禁しやがりました。むかついたのでエアガンを乱射してます。 ヘ(^^ヘ)(ノ^^)ノ
0039麻衣
NGNGしくしく(涙)
0040デフォルトの名無しさん
NGNG盤上の駒をクリックすると、その駒が移動できる範囲が示されますよね。
あれって、どういうアルゴリズムなんでしょうか?
障害物を考慮しないなら、その駒の移動能力の最大値を到達距離として、
その内側を全部カバーすればいい、っていうのはわかるんですが。
途中に障害物があると、それを迂回させないといけないわけで、
うーん、どうすりゃいいのかな。どなたかわかる方います?
スレ違いかもしれませんが、よろしくお願いします>麻衣ちゃんズの皆さん
0041デフォルトの名無しさん
NGNG動的計画法という手法のいい練習問題でしょう。
ちょっと大げさだけれど、グラフを使うといいかもしれません。
説明は面倒なので、グラフの場合はアルゴリズムとデータ構造スレで、
動的計画法の場合は「ナップザック問題」で検索をかけてみてください。
0042デフォルトの名無しさん
NGNG思いつきだけど、再帰使うような感じになるのかな?
自分に移動できる量を持たせて6方向検索で再帰かければ
簡単な気がする。
思いつきだから あんまり突っ込まないでね。
0043デフォルトの名無しさん
NGNG4方向で考えてみた
/* 移動範囲(x,y:座標 move:移動力)
void movement(int x, int y, int move)
{
int mp; /* 移動力 */
if(getMoveFlag(x,y)) return; /* 既にチェックされていたら終了 */
mp = getCost(x,y); /* 移動コスト取得 */
mp = move - mp;
if(move < 0) return; /* 移動力がなくなれば終了 */
setMoveFlag(x,y); /* 移動可能フラグ?をON */
movement(x - 1, y, move); /* 上方向のチェック */
movement(x + 1, y, move); /* 下方向のチェック */
movement(x, y - 1, move); /* 左方向のチェック */
movement(x, y + 1, move); /* 右方向のチェック */
}
こいつを6方向に拡張すればいい
0044麻衣
NGNG上下左右、右斜め上、右斜め下の六方向に移動できる四角マスマップを表示上で奇数列をずらしてるだけと思えばわかるよね。
004542
NGNGヘクス1つが6方向への参照をもつオブジェクトとして
作るってのはあんまり意味無いかな?
平面っていう制限がとれたりとか・・・・
これも思いつきだからキツいつっこみはかんべんしてね。
004740
NGNG>43
実は、似たようなアルゴリズムは自分でも考えたんです。それで、結論としては
>if(getMoveFlag(x,y)) return; /* 既にチェックされていたら終了 */
これがマズいってことになりまして。
例えば、以下のようなマップがあるとします。左上のSからスタートして、9でできた島を迂回し、洞窟の
奥のG(ゴール)を目指します。数字は、そのマスに移動するのに必要なコストをあらわし、最初の時点で
持っている移動力13から引き算していき、0になったら動けなくなります。簡単にするために、
4方向移動だけで斜め移動はなしです。
S551999
199211G
1991999
1111999
時計回りで島を迂回するコースを先に検索させてしまうと、洞窟の入り口の2で力尽きます。ここでこのマス
にフラグが立ってしまうので、その後、反時計回りで迂回するコースを検索させてもだめなんです。もちろん、
先に左回りを検索させればそんなことにはなりませんけど、どちらを先に検索したらいいかなんて、
コンピューターには期待できません。全体が見えてないと判断できないですから。
しかも、たいていの場合、ゴールまでに複数のルートがあるときは一番移動コストが少ないのをユーザーに
提示したいわけです。結局、まともに解こうとすると、
1) 移動コストを無視したときの最大移動距離範囲内にある全てのマスを選ぶ。
2) それぞれのマスについて、考え得る全ての組み合わせの経路を調べる。
3) その中で、最も移動コストが少ないルートを記憶させておく。
これを、(1)の全てのマスについてやる必要があるんです。
ここで41さんが紹介してくれた「ナップザック問題」の解き方が応用できるんですが、
それは要するに「総当たり」です。あるマスを使うか使わないかを判断して全ての組み合わせを
考慮するわけで、移動できる最大範囲内に10個マスがあれば2^10ですから1024通り。20個マスが
あれば百万通りです。とてもゲームに使えるアルゴリズムではないです。
でも、わりにショボいマシンのゲームでもこの手の機能ってインプリされてますよね。きっとなんかうまい手が
ありそうな気がするんで、それで質問してみたんです。うーん、麻衣ちゃんの手には余る質問だったかな?
0048麻衣
NGNGひとつだけヒントあげるね。
一度通過したところは、フラグ立てるんじゃなくて、
移動コストを書き込んでおけばしあわせになれるよ。
0049デフォルトの名無しさん
NGNGconst
SX = 1;
SY = 1;
GX = 7;
GY = 2;
Map: array[0..5,0..8] of Integer = (
(-1,-1,-1,-1,-1,-1,-1,-1,-1),
(-1, 1, 5, 5, 1, 9, 9, 9,-1),
(-1, 1, 9, 9, 2, 1, 1, 1,-1),
(-1, 1, 9, 9, 1, 9, 9, 9,-1),
(-1, 1, 1, 1, 1, 9, 9, 9,-1),
(-1,-1,-1,-1,-1,-1,-1,-1,-1)
);
var
Cost: array[0..5,0..8] of Integer;
x, y, RootCount: Integer;
Root: array[0..99] of TPoint;
procedure sub(x,y: Integer; tcost: Integer);
begin
if Map[y,x] >= 0 then begin
if Cost[y,x] > Map[y,x] + tcost then begin
if Map[y,x] + tcost > 13 then Exit;//移動力超えたらヤメ
Cost[y,x] := Map[y,x] + tcost;
if (GX = x) and (GY = y) then Exit;//ゴール着ならヤメ
sub(x,y-1,Cost[y,x]);
sub(x+1,y,Cost[y,x]);
sub(x,y+1,Cost[y,x]);
sub(x-1,y,Cost[y,x]);
end;
end;
end;
begin
//コストクリア
for y := 0 to 5 do
for x := 0 to 8 do Cost[y,x] := 999;
//コスト書き込み
Cost[SY,SX] := Map[SY,SX];
Sub(SX,SY-1, Cost[SY,SX]);
Sub(SX+1,SY, Cost[SY,SX]);
Sub(SX,SY+1, Cost[SY,SX]);
Sub(SX-1,SY, Cost[SY,SX]);
//移動力13の範囲
for y := 0 to 5 do
for x := 0 to 8 do
if Cost[y,x] >= 1 and Cost[y,x] <= 13 then
FillRect(...);
//ゴール→スタートの最短経路
x := GX;
y := GY;
Root[0].x := x;
Root[0].y := y;
RootCount := 1;
while (Cost[y,x] > Map[SY,SX]) do begin
if Cost[y,x-1] < Cost[y,x] then Dec(x)
else if Cost[y+1,x] < Cost[y,x] then Inc(y)
else if Cost[y,x+1] < Cost[y,x] then Inc(x)
else if Cost[y-1,x] < Cost[y,x] then Dec(y)
else break;//到達不可能
Root[RootCount].x := x;
Root[RootCount].y := y;
Inc(RootCount);
end;
end;
005040
NGNG単なるフラグではなく移動コストを書き込んでおいて、再度そのマスにたどりついたら
現在までの移動コストと比較して、もし小さければ上書きしてしまえばいいのか。
麻衣ちゃん48が言ってるのは、サブ手続きの3行目と5行目のことですね!
最短経路を求めるのも、スタートからではなく、逆にゴールからたどることで、たった
ひとつの最適解を簡単に求められますね。これもスマート、お見事です。
すごい、すごいよ。ぼくはしあわせになったよ! ありがとう、みんな! ありがとう麻衣ちゃん49!!・・・って、自分までネタキャラになりきってどうする。つーか、本当にありがとうございます>49
一緒に考えてくれた他の麻衣ちゃんズの皆さんにも感謝。またよろしくお願いします。
0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNG4方向のうち一番コストの少ないのを選ばないといけないと思われ
0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNG0056父です
NGNG1〜6までを答えなさい。また間違った部分を訂正しなさい。
って問題がでたんだけど分かりません教えて下さい!
#include <studio.h>
int kikan(int y1,int m1,int d1,int y2,int m2,int d2);
int main(void)
{
int tyear, tmonth, tday, year , month, day;
printf("今日は?");
scanf("%d %d %d", &tyear, &tmonth, &tday);
printf("生年月日は?");
scanf("%d %d %d", &year, &month, &day);
printf("今日はあなたが生まれて%d日目です。\n",�@);
return (0);
}
int kikan(int y1,int m1,int d1,int y2,int m2,int d2);
{
int tndays; /*西暦元年から今日までの経過日数 */
int ndays; /*西暦元年から誕生日までの経過日数 */
if(m1 = 1){
y1 = �A ;
m1 = �B ;
}
tndays = 365*y1 + y1/4 - y1 / 400 + 306 * (m1 + 1) / 10 + d1 - 428;
if(m2 = 2){
y2 = �C ;
m2 = �D ;
}
ndays = 365*y2 + y2/4 - y2 / 400 + 306 * (m2 + 1) / 10 + d2 - 428;
return (�E);
}
0057名無しさん
NGNGまず、何も見ずに自分で考えてプログラム書いてみたら?
それから問題見直すと、簡単に解けると思われ
0058デフォルトの名無しさん
NGNG写しまちがってねえ?
0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNGオレもif条件の中が二つとも間違ってるに1票。
しかし==にしたとしてもおかしい気が。<=2じゃないのか?
0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNG3接点スイッチにDフリップフロップ回路かますのが理論的には理想
でもたかがスイッチ一つにそこまでは普通しない。
CRで適当にごまかせ。
006462ではないが
NGNG抵抗器とコンデンサじゃないの?
006659
NGNGてゆうかだ、ハード部の連中いつかぶっとばしてやる
0067制御屋さん
NGNG0068デフォルトの名無しさん
NGNGスイッチなら規定時間の間、条件を満たしていればOKにすればいいんじゃない?
おいらは、10msec毎にサンプリングして、6回同じ条件ならOKにしている。
もしA/D入力だったら、フィルター処理を追加してみれば。
int dAd[2]; // dAd[0] = 前回値, dAd[1] = 今回値
dAd[0] = ( dAd[0]*15 + dAd[1] ) / 16;
フィルターの乗数は追随速度やカッティング周波数にあわせて調整してくれ。
0069デフォルトの名無しさん
NGNG押された時は早く反応し、離された時はゆっくり
反応するようにすべきです。
0070デフォルトの名無しさん
NGNGスタジオ じゃないだろ
stdio.h のことかい?
007168
NGNG60msecで遅いと言われたことはないです。
とくに連打するようなスイッチはありませんので。
もしかすると、業界が違うのかな?
こちらは家電系です。
0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNG#include <stdio.h>
int kikan(int y1,int m1,int d1,int y2,int m2,int d2);
int main(void)
{
int tyear, tmonth, tday, year , month, day;
printf("今日は?");
scanf("%d %d %d", &tyear, &tmonth, &tday);
printf("生年月日は?");
scanf("%d %d %d", &year, &month, &day);
printf("今日はあなたが生まれて%d日目です。\n",
kikan(tyear, tmonth, tday, year, month, day));
return (0);
}
int kikan(int y1, int m1, int d1, int y2, int m2, int d2)
{
int tndays; /*西暦元年から今日までの経過日数*/
int ndays; /*西暦元年から誕生日までの経過日数*/
if(m1 <= 2){
y1 = y1 - 1;
m1 = m1 + 12;
}
tndays = 365*y1 + y1/4 - y1 / 400 + 306 * (m1 + 1) / 10 + d1 - 428;
if(m2 <= 2){
y2 = y2 - 1;
m2 = m2 + 12;
}
ndays = 365*y2 + y2/4 - y2 / 400 + 306 * (m2 + 1) / 10 + d2 - 428;
return(tndays - ndays);
}
007468
NGNGそうだったらいいのにね。
007569
NGNGこれ以上は書けません。
スマソ
0076父です
NGNGおかげで合格しました。
0077麻衣
NGNGええとね、2回同じだったらでいいと思うよ
http://www.infoeddy.ne.jp/~tensyo/prog/ALGO.HTM#CHAR1
というか今まで2回同じだったらの方法でダメだったことないよ
0078デフォルトの名無しさん
NGNGどんなスイッチで経験があります?
マイクロスイッチやシートキーとかでも大丈夫でしたか?
0079デフォルトの名無しさん
NGNGバネ付でびよんびよん のスィッチだったので2回ッくらいじゃ
全然駄目でした。つーわけで10ms間隔8回くらいのandです。
0080麻衣
NGNGでも10mS毎じゃダメ
メカスイッチのチャタリングは70msはあるから25〜40mS毎に見て2回ね
ようはさ、2度押しにならない事と
火花パチパチノイズで間違わない事がうまくいったらいいの
0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNG008368
NGNG>>68 10msec 6回 タクタイルスイッチ、カーボンと基盤パターンを接触させるスイッチ
>>80 25〜40msec 2回 マイクロスイッチ、シートスイッチ
>>79 10msec 8回 バネ付でびよんびよんのスィッチ
タクタイルスイッチとマイクロスイッチはあまり変わらないので、
おれのやり方(>>68)が一番効率悪い模様。
50〜80msecの一致時間を必要とすることでは意見が一致。
008479
NGNG>メカスイッチのチャタリングは70msはあるから
そんなにあったのね。10ms×8回でよかったというのは
はだか戦隊ぎりぎりセーフだったってとこですか・・・
何はともあれ、ありがとう!
ほんとに女の子なら今度結婚しよう!
0085麻衣
NGNG片方しか複数確認しないと100mS連続で見てもきびしいのよホント
OnOn とOfOffでチェックするから オーケって感じ
お兄ちゃんと結婚なんて考えくない
0086デフォルトの名無しさん
NGNG双方向ポートに抵抗1本(100KΩ)付けて、
・前回の入力値を常時は出力
・入力する直前に入力ポートにして直後に読み込む
という方法も1チップでは良く使われる。
抵抗値と、入力ポートの寄生容量とでCRを構成
ハイインピータンスにしてから実際の入力迄の時間でシュミット特性
を出すという手法だ。
0087デフォルトの名無しさん
NGNGスイッチキャパシタを使う
http://www.infoeddy.ne.jp/~tensyo/prog/TMP47.HTM
みたいな方法が一番シンプルで安全確実、調整容易
しかも壊れ難い
0088デフォルトの名無しさん
NGNG一次元で説明すると、1次微分(-1,1)は傾き、
2次微分(1,-2,1)は傾きの変化だよ。
元の輝度 0 0 0 1 5 9 10 10 10
1次微分 0 0 1 4 4 1 0 0 0
2次微分 * 0 1 3 0 -3 -1 0 *
0089コロ助子ちゃん
NGNGが、宿題でどうしてもとけないのがあるんです。
ax^2+bx+c=0
ケース1(a=3,b=12,c=39)、
ケース2(a=3,b=0,c=-28.83)、
ケース3(a=2,b=10.6,c=13.44)、
3のケースについての解を求めよ
これをifを使って
if (b*b-4*a*c > 0)
{
}
if (b*b-4*a*c == 0)
{
}
if (b*b-4*a*c < 0)
{
}
ってな感じで解きたいんです…後、3っつの
ケースの答えを同時に出すにはループを使う
しかないと思うんですが…よく詳しい使い方
が解りません(泣)。誰か助けて〜!
0090デフォルトの名無しさん
NGNGif (..) {...
}
a = 3; b = 0; c = -28.83;
if (..) {..
}
って感じで、バカ正直に3回書いておけ。
人には自分にあったレベルというものがある。
変に背伸びして、格好つけようとするんじゃない。
0091デフォルトの名無しさん
NGNG高校の問題でしょうか。
普通はガウス(ジョルダン)の消去法を使うと思うのだが。
0092デフォルトの名無しさん
NGNG少なくとも、高校レヴェルではなかろう。
0093デフォルトの名無しさん
NGNGそれって、連立方程式?
0094麻衣
NGNGただ、返したい値が二つになるよね?
おにいちゃんは複素数は知ってる? 知らないかな?
知らないとすると、この場合、答えの他に、答えが何個あるかどうも返したいんだとするね?
どこでBOOLが定義されてるかどうかは調べてね
int answer(double a , double a, double a, double *x1,double *x2)
{ double D=b*b-4*a*c ;
if(D>0){
*x1= ここは自分で埋めてね;
*x2= ここは自分で埋めてね;
return 2;
}else
if(D==0){
*x2=*x1= ここは自分で埋めてね;
return 1;
}else return 0;//解が無い
}
このanswerをどう使うかは宿題だあ
0095麻衣
NGNG×int answer(double a , double a, double a, double *x1,double *x2)
○int answer(double a , double b, double c, double *x1,double *x2)
ついでだから答え書く
void printAns((double a , double b, double c)
{ double x1,x2;
switch(answer(a,b,c,&x1,&x2))
{
case 0: printf("%s\n","答えがありません");break;
case 1: printf("%s %15.3f\n","答えがひとつあります",x1);break;
case 2: printf("%s %15.3f %15.3f\n","どちらかが答えです->",x1,x2);break;
}
}
int main()
{
printf("%s","最初の問題は "); printAns( 3 , 12 , 39);
printf("%s","2番目の問題は "); printAns( 3 , 0 , -28.83);
printf("%s","最後の問題は "); printAns( 2 , 10.6 , 13.44);
return 0;
}
それから、>>91さんは無視してもOK
あまり読まずに連立1次方程式の問題と勘違いしちゃったのかな
0096デフォルトの名無しさん
NGNGa = 0の場合、 a = b = 0の場合は?
# そこまで要求されてるかどーかは知らないが
0097麻衣
NGNG, ――
γ∞γ~ \
人w/ 从从) ) / ̄ ̄ ̄
ヽ | |┬ イ |〃 < >>96 こめけえヤツ
`wハ~ ^ ノ) \___
/ \`「
0098お局
NGNGあら、その細かいことが実際にプログラミングするときに大きな問題になることを
ご存じのうえでおっしゃってるのかしら?
確かに宿題の回答としては96さんのおっしゃる指摘は細かすぎるかもしれないわ。
アタシも94のコードは学校の宿題の回答レベルとしては十分だと思うしね。
でも、プログラムを組む上で重要な考え方を提示してくださっている96さんの
発言に対して「こめけえヤツ」とは、ずいぶんなおっしゃいようじゃなくって?
少なくとも教育的配慮には欠けるといわざるを得ないし、技術者としてミスを
指摘されたときの模範的な応対とは言えないと思うんだけど、いかが?
それともアタクシなんかには想像もつかないような高尚なお考えをお持ちで、
わざと97のような発言をなさっているんでしょうか?
もしそうだとしたらごめんあそばせ。その場合は、できれば後学のためにも
その高尚なお考えをぜひとも御開陳願いたいものだわ。
0099デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG0102麻衣
NGNGんでも、課題はa,b,cが与えられてるのよ。
で、中間的に関数を使った方が簡単だよって話だよ。
ライブラリにしとけば後から使えるとかの話ならさあ、
複素数に対応してから後じゃない?
0103デフォルトの名無しさん
NGNGチンを作りたいんだけど、どうすればいいの?
fgets を使うんだろうけど、これは文字数をあらかじめ
指定しないといけないよね。最終的には一続きの文字列
として取り出したいの。
ああ、でもこのルーチンを使うと呼び出した先で
malloc しちゃうのかあ。それも気持ち悪いなあ。
というわけで、みんなこの辺りをどうやって解決してる
の?答えてくれたらお兄ちゃんがいっしょにお風呂に入っ
てあげるよ。
0104麻衣
NGNG☆fgetsして\nがないならmalloc/realloc
☆コルーチンにして順次処理し1行分のバッファを不要にする
☆メモリマップファイルにしてメモリから読む
0106麻衣
NGNG0107お局
NGNG思ってるんだけど、麻衣ちゃんのご高説では、ライブラリとか、複素数対応なんていう
要件拡張の話が突然でてきて、ちょっと理解に苦しむわ。もう少しアタシみたいなバカにも
わかるように説明していただけないかしら?
assertをたったひとつかふたつ書くことが、そんなに面倒なのかしら?
それともアタシには見えないけど、コードにはきちんとコメントが書いてあるのかしら?
プログラミングを始めたばかりの人に、プロの正しい習慣を示すことと、プロとしては
あまり適切でない応対を見せることの、どちらが宿題のアドバイザーとして求められる
姿なのかしら?
それに、複素数に対応することと、環境によってはプログラムがクラッシュすることを
避けることの二つに優先順位をつけるときに、前者が優先するっていうのも、アタクシ
のような古い人間には大変興味深い価値観だわ。
それとも、もしかして麻衣ちゃんは素人に毛が生えたレベルのプログラミングで満足で、それ
以上のレベルに行く気はないってことかしら。
それならそれでもいいんじゃないかしら。いつまでも半人前扱いで、ちゃん付けで呼ばれる
なんていう屈辱的な状況に耐えられそうにないから、アタシはゴメンだけど。
お目汚し失礼。お忙しいでしょうから、特に反論はいただかなくても結構よ。ごめんあそばせ。
0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG0110>107
NGNG>教育的配慮に欠ける
なんだそら?よくもそこまで邪推できるもんだ。
だれもそんなことで影響受けやしないし、技術者の姿勢云々なんて発想は
しやしない。洒落や愛嬌の範疇じゃん。
>それに、複素数に対応することと、環境によってはプログラムがクラッシュすることを
>避けることの二つに優先順位をつけるときに
この発想は変だよね。優先順位をつけるなんてありえないもの。
プログラムがクラッシュしないのは絶対条件であって、何かとトレード
オフなんてできるわけ無いじゃん。
ましてプログラムに要求された機能とクラッシュ云々は何の関係もない。
>前者が優先するっていうのも
そもそも誰もそんな事言ってないし。
こめけえヤツ(笑
0111麻衣
NGNGだって要件は >>89 だよ。
それにさあ、ここでなんでassertの話が出るの?
assertで止まるのと除算エラーで止まるのとそんなにちがうの? みかけいっしょじゃん!
だいいち除算エラーでクラッシュするような環境って何?
そんなばかちんなマシンって宿題につかうの?
a=0で x1=-c/bを返したら多少汎用に近くなるのはたしかだけど、
中途半端な汎用性は麻衣キライ!
0112お局
NGNG>>110
書き込みを拝見すると新人さんではないとおもうので、独り善がりにそう仮定させていただくわ。
新人がプログラムを書いたとするわね。で、アナタがそのプログラムをレビューして不適切に思える
箇所があったとするわ。そのミスを指摘して、新人に「こめけえヤツ」という旨のことを言われた
とするわね。そういう新人さんをアナタはどう思う?
そしてもしその新人さんは「学校の先生はミスを指摘されたときに、そういう対応をしていました」
と弁明したとするわね。そういう先生をアナタはどう思う?
アタシだったら、その先生の応対は教育的配慮に欠くと思うわ。
>だれもそんなことで影響受けやしないし、技術者の姿勢云々なんて発想は
>しやしない。洒落や愛嬌の範疇じゃん。
アナタはそう思ったのね。アタシはそう思わなかったのよ。
アナタはアタシのことを独り善がりひとと評してくださったけど、もしその評が当たっているとするなら、
アナタも独り善がりなひとになるわけね。もちろん相手にわざわざ指摘するくらいなので、自覚はお有りだと
思うけど。
>プログラムがクラッシュしないのは絶対条件であって、何かとトレード
>オフなんてできるわけ無いじゃん。
>ましてプログラムに要求された機能とクラッシュ云々は何の関係もない。
あら、まったくその通りよ。アタシの主張を繰り返していただいてありがとう。
ご存じの通り、引用してくださっている部分の書き込みは、102の麻衣ちゃんの書き込みに対する反論の
つもりなのよ。
アタシは102の麻衣ちゃんは「クラッシュするのを避けるより先に、複素数に対応するべきだ」という旨の
発言をしていると解釈したのよ。読解力のないアタシが勘違いしていたらごめんあそばせ。
というわけで
>そもそも誰もそんな事言ってないし。
アタシは102で麻衣ちゃんがそうおっしゃっていると解釈しているわ。
>こめけえヤツ(笑
お褒めにあずかり光栄だわ。今後もよろしくお願いいたします。
0113お局
NGNGお忙しいでしょうにわざわざご回答くださってありがとう。
>えとね、麻衣にしたら a=0なんて方が要件拡張にみえちゃうっていってるの!
繰り返しになるけど、学校の宿題の回答としては、a=0の場合を考慮しなくても充分だと思うわ。
麻衣ちゃんももちろんご存じだとは思うんだけど、長い間いろいろなプログラムを組んでいると、
過去に再利用するとは思っていなかったようなサブルーチンを使うことって結構あるのよ。
だからその時に備えておくことはプログラマとしては良い習慣だと思うのね。
それに96のような指摘は仕事上でコードをレビューしてもらっていればわかってくださると思うけど、
非常にありがたい指摘なのよ。問題が発生する前に、バグを指摘してくれたわけでしょ?
その指摘に対して、97のような応対をするのはプログラマとしては望ましいものとは、アタシは
思わないのよ。
掲示板に書いたコードに対するバグ指摘に対して97のような応対をするだけなら、わざわざ指摘する
必要もないと思うわ。だけど初心者向けの教えてあげるスレで、講師役の方がああいう応対をするの
には、ちょっと苦言を呈したくなったのよ。
>それにさあ、ここでなんでassertの話が出るの?
>assertで止まるのと除算エラーで止まるのとそんなにちがうの? みかけいっしょじゃん!
あら、こんなに明らかなことをバカのふりをして質問するってことは、アタシのことを試してくださって
いるのね。
サブルーチンの引数をチェックするassertを入れることで、サブルーチンの動作条件、責任範囲が明確に
なるわ。もしassertがなくて除算エラーで止まった場合には、呼び出し側に問題があるのか、サブルーチン側に
問題があるのかがすぐにはわからないわ。
0114お局
NGNG具体的にはアタシだったら94のコードは、96の指摘を受けた後には、以下のように修正すると思うの
(本当は数値誤差も考慮するべきだけど、そこはちょっと違う話だから置いておくわ)。
int answer(double a, double b, double c, double *x1,double *x2)
{
assert( a!=0.0 );
(以下そのまま)
こうやって記述してあれば、この answerが将来再利用されて、a=0で呼び出されたときにはassertで停止する、
つまりa=0を入れて呼び出した側が悪いことがすぐにわかるわ。
除算エラーで止まった場合には、answerのバグなのか、呼び出す側の使い方が悪いのかは明確じゃないわよね。
ずいぶんちがわないかしら? assertで止まることと除算エラーで止まることは。
>中途半端な汎用性は麻衣キライ!
あら、アタシも中途半端な汎用性はキライよ。気が合うわね。
そういう中途半端な汎用性を要求されないためにも、サブルーチンの動作条件を明確にするassertを使用する
べきなんじゃないかしら。
0115麻衣
NGNGγ∞γ~ \
人w/ 从从) ) / ̄ ̄
ヽ | | l l |〃 < ん〜わかった ごめん
`wハ~ ーノ) \__
/ \`「
でも、将来再利用を考えるなら別の設計にするな麻衣は
0116デフォルトの名無しさん
NGNG0117舞
NGNGclass SecondCurve {
double a,b,c; //y=a*x*x+b*x+c
public:
double getD(void){return b*b-4*a*c; };
double getX1(void){double d=getD(); return (-b+sqrt(d))/a/2.0; };
double getX2(void){double d=getD(); return (-b-sqrt(d))/a/2.0; };
SecondCurve(double aa,double bb,double cc){ a=aa;b=bb;c=cc;};
};
class err{};
int _matherr(struct _exception *e){ throw err();}
int main()
{
struct pclass:SecondCurve {
pclass(double a,double b,double c):SecondCurve(a,b,c){};
void print()
{
try{ cout << getX1() <<" ";}catch(...){};
try{ cout << getX2() <<" ";}catch(...){};
cout << endl;
}
} d1( 3 , 12 , 39)
,d2( 3 , 0 , -28.83)
,d3( 2 , 10.6 , 13.44);
d1.print();
d2.print();
d3.print();
}
0118デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNG「お局」なんていうハンドルネームを、デブオタが考え付くとは思えない。
北島パヤ(マヤではない)なんていうキーワードに反応するはず(w
0121デフォルトの名無しさん
NGNGオカマ発見!
0122全員落第!
NGNG#include <complex>
#include <math.h>
#include <iostream.h>
// 二次方程式 "A*x*x + B*x + C = 0" を解く。戻り値は解の個数。
int quadratic_equation(double A, double B, double C,
double_complex &x1, double_complex &x2) {
if (A != 0) { // A が非ゼロなら、通常の二次方程式。
// 方程式を "x*x - 2*b*x + c = 0" の形式に変換する。
double b = -B / 2 / A, c = C / A;
double d = b*b - c; // 判別式 D / 4
if (d >= 0) {
// 計算誤差を避けるため、絶対値の大きい解を先に求める。
x1 = (b > 0) ? b + sqrt(d) : b - sqrt(d);
// もう一方の解は、解と係数の関係で求める。
x2 = c / x1;
} else { // 判別式が負の場合、複素解。
double imag = sqrt(-d);
x1 = double_complex(b, imag);
x2 = double_complex(b, -imag);
}
return 1 + (d != 0);
} else if (B != 0) { // AがゼロでBが非ゼロの場合は、通常の一次方程式。
x1 = -C / B;
return 1;
}
return 0; // 不定または不能。
}
int main() {
double coef[3][3] = { {3, 12, 39}, {3, 0, -28.83}, {2, 10, 13.44} };
for (int i = 0; i < 3; i++) {
double a = coef[i][0], b = coef[i][1], c = coef[i][2];
double_complex x[2];
int nx = quadratic_equation(a, b, c, x[0], x[1]);
cout << "方程式: " << a << "*x*x + " << b << "*x + " << c << " = 0"
<< " の解は、" << nx << "個。" << endl;
for (int j = 0; j < nx; j++) cout << j << "個目の解: " << x[j] << endl;
}
return 0;
}
0123麻衣
NGNG0124デフォルトの名無しさん
NGNGそんなに怒るこたぁないと思うが同意だね。
「2次方程式の解を求める」関数を作り、
その関数を使って目的を達成させるのであれば、
関数は、どんな引数を与えても、
それに対応した答えを返すべき。
96の言う通り、あらゆる可能性で動作するように、
int answer() を変えるべきでしょ。
細かいどころか、このくらい普通だと思うね。
でもさ、他人のコードをコピーして
課題を済まそうとする奴に
そこまで教える必要ないでしょ。
90は極論過ぎると思うけど(^^;
0125全員落第!
NGNGすべての可能な引数に対し考慮しろって言うのは、素人の発言。
動作を保証する前提条件というのが、通常はある。たとえば、NULLポインタは不可とかな。
あと、assertを入れればいいというのは、大嘘、または素人の発言だ。
assertは、デバッグ用にコンパイルしたときだけが有効なので、
ライブラリ用にコンパイルされたオブジェクトには、assertは入らないと思っていい。
いずれにせよ、この程度の宿題で問題にするほどの事ではないな。
それより、例題には明らかに複素数の解を持つ例が含まれているので、
それをサポートするのは、宿題であっても必須だ。
0126デフォルトの名無しさん
NGNGassert はどうだろう?
assert 使うよりは、122のように
a=0で、明確に処理を分けた方がいいと思うんだけど。
エラー出るの分かってるのに、その中で処理しないのはどうかと。
>> 89
ま、とにかく、C++ やる前に、C 勉強してください(藁
0127デフォルトの名無しさん
NGNG>>125
>すべての可能な引数に対し考慮しろって言うのは、素人の発言。
うーん。書き方がまずかったか。
俺は、係数のことに対して言いたかっただけなんだが。
つまり「どんな係数であっても、答えを返す」
べきだってことを言いたかったのよ。
もちろん、動作保証は引数が
double A, double B, double C
である場合で問題無しです。だから
「NULLポインタは不可」。当然でしょ。
>それより、例題には明らかに複素数の解を持つ例が含まれているので、
>それをサポートするのは、宿題であっても必須だ。
同意。あと「不定・不能」の判別もね。
0128全員落第!
NGNGウザい事ぬかすから、>>122みたいに面倒なコードになるのよ。
これだって、不定と不能の区別とか、A=0と重根の区別ができない。
プログラムなんて、与えられた条件で動けばいいのだから、
今回の条件ならば、>>90のやり方でいいと思って、俺は90に書き込みしたんだがな。
0129全員落第!
NGNGこんな感じかな。動くかどうかは知らない。っていうか、もう寝る。
#include <stdio.h>
/*
* 指定入力から、一行読みこむ。バッファは必要なだけ内部で確保する。
* 返り値は読みこんだ文字数。改行文字も(あれば)読みこむ。
* 1文字も読まずにファイル終端となったときは、0を返しバッファは確保しない。
* エラー時には-1を返す
*/
int fgetline(FILE *fp, char **line) {
int sz = 80, cc = 0, c;
char *lp = malloc(sz);
*line = lp;
if (lp == NULL) return -1;
while ((c = fgetc(fp)) != EOF) {
if (sz <= cc) {
lp = realloc(lp, sz += 80);
if (lp == NULL) free(*line);
*line = lp;
if (lp == NULL) return -1;
}
lp[cc++] = c;
if (c == '\n') break;
}
lp[cc] = 0;
if (cc == 0) {
free(lp);
*line = NULL;
} else {
lp = realloc(cc + 1);
if (lp != NULL) *line = lp;
}
return cc;
}
0130全員落第!
NGNGというわけで、修正版↓。
> // 計算誤差を避けるため、絶対値の大きい解を先に求める。
> x1 = (b >= 0) ? b + sqrt(d) : b - sqrt(d);
> // もう一方の解は、解と係数の関係で求める。
> x2 = (x1.real() != 0) ? c / x1.real() : x1;
0131デフォルトの名無しさん
NGNG1、 a=0なら2次方程式じゃない
2、a=0はゼロ除算例外が出る。>>94の関数スタイルなら
assertで確認すべきは x1,x2のポインタの方
3、assertはプログラムを異常終了させる。 3つ答えを求めようと
して最初にassertを踏んだら3つとも答えは出ない。 それより
例外を出すべき
4、算術的にはa=0以外にも aが小さくbが極端に大きい時には
オーバーフローエラーが出る場合もある。それだけを言うの
は片手落ち
5、そもそも、教育を言うなら まず誉めるべし。
頭の回る子供は特に誉めるべし。
誉めれば勝手に次の課題でそれくらいはやってくる
0132麻衣
NGNG0133お局
NGNGまず論点の確認ね。
アタシの元の主張は「ミスを指摘されたら素直に認めて修正しましょう」ってこと。98を
ご覧になってね。この点については麻衣ちゃんとはある程度意見の一致をみたから(111,113,115)、
特にもう言うことはないわ。
で、いまみなさんが盛り上がっているのは、2次方程式の解を求める関数の望ましい書き方は
どうあるべきか? という話題よね。
だからアタシの認識では、131の「麻衣 VS お局」という書き方はあまり適当ではないと思うわ。
アタシがassertを入れるべきだ、という主張をしたのは、ミスを指摘された場合に最低限するべきこと
の一例として示しただけだからよ。
うーん、たしかに107の書き方を見ると「assertを入れろ」という指摘に見えるかもしれないけど、
いちおう他の選択肢も挙げてあるわよね。オカマったらしいイヤミのオブラートに包んであるけどね。
みなさんの読解力を信頼していてよ。ほほほ。
0134お局
NGNGで、アタシたちの話題から派生した別の話題であるところの、2次方程式の解を求める関数の
望ましい書き方はどうあるべきか? という話題にも厚かましく加わらせて頂くわ。
この話題はサブルーチンの望ましい書き方はどうあるべきか、というより大きな問題でもあるわね。
アタシは元の話題ではこっちの問題を論じているつもりだったので、まずこれについて意見を述べさせて
いただくわ。
極端なひとつの考え方としては、どんな状況でも適切に動作するようにサブルーチンを記述すべきだ、
というものがあるわね。どんな計数の組み合わせでも、double変数にstd::numeric_limits<double>::max()
が渡されても、返り値を返すためのポインタが無効なアドレスを指していたときにも動くサブルーチン。
ステキ、うっとりしちゃうわね。
でも、この要求は一般には非現実的に高すぎるわ。設計実装に時間はかかるし、まずテストケースが膨大に
なるでしょうし、コードサイズも実行速度も各種のチェックに費やされて大きくなるでしょうね。
逆の極端の考え方としては、いま要求されているギリギリ最低限の状況で動作するサブルーチンを記述
すべきだ、というものがあるわね。移植性なんて考えない、いま動けばそれで良し。包括的なテスト
ケースなんて必要なし。男らしいわね。
でも、このやり方では高い品質と生産性は望めないわね。仕様は必ず変わるし、プログラムは必ず
修正されるんだから、モジュールが増えてゆくにしたがってとれにくいバグに汚染されてゆくでしょう。
アタシも若い頃はよくやったわ。
もちろろんみなさんもご存じのとおり、現実には上のふたつの中間をとることになるわね。
どっちよりの中間をとるかは、その時々で判断することだから、ここでは論じないわ。
でも、記述したサブルーチンが、どっちよりの中間をとったかは、記録しておかなくちゃいけないと
思うの。そうしないと、本来ならしなくて良いチェックを呼び出し側でしちゃったり(この場合は単に実行時間の
ロスが発生するわね)、本来ならしなくてはならないチェックを呼び出し側でしなかったり(この場合は
クラッシュするかもしれないわ)、ということが発生するからよ。
そして、その責任範囲の記録方法としては、assertは優れた方法だと思うわけ。根拠は113-114に書いたとおりよ。
0135お局
NGNG2次方程式サブルーチンでは、最初に提示された解はa=0に対応していなかったわ。そして状況から判断して
a=0の場合にも正しい答えを返す必要はないと思ったの。だから、このサブルーチンはa=0に対応していない
ということを明示するためのassertを追加するのが、この場合は適切な対応だと思って提案したのよ。
ご理解いただけたかしら?
ただ、2次方程式の解を求めるくらいなら、122さんなどが示して下さったように、全ての(正確にはほとんどの)
係数の組み合わせで適切に動作するコードを書くのは難しくないかもしれないわ(ほとんどというのは、
たとえばaが非常に0に近く、b,cが非常に大きな数の場合はオーバーフローを起こすかもしれないわよね)。
だからウダウダ言わずに、122さんのようなコードを書くのも良いと思うわ。
0136お局
NGNG>>124 =126
ご賛同いただいてありがとう。
おっしゃるように、2次方程式では122さんのようなコードを書いちゃって良いと思うの。
エラーでるのはわかってるけど、対応するのはものすごくたいへん、かつ、いまは必要ないときにはassertする
のがいいんじゃないかしら、というのがアタシの意見よ。いかが?
>>125
ずいぶんと自信がおありね。うらやましいわ。
アタシが実務で触れてきたライブラリには、デバッグモードで、つまりassertを含めてコンパイルした開発時に
使うライブラリコードと、リリースモードで、つまりassertを含めずコンパイルしたライブラリコードがついてきた
ものだけど、錯覚だったのかしら。分野によっても違うのかしらね。
アタシのまわりとは大きく異なる常識をご丁寧にご教授下さって、どうもありがとう。
>>128 =90
潔くて好きよ。
>>131
1.そのとおり。問題はその確認をサブルーチンと呼び出し側のどちらでやるかでしょ?
assertを入れるのはそれを明示するひとつの方法だと思うって話なのよ。
2.ポインタの非NULL確認はやってもいいと思うわ。
3.例外を出すというのは、つまりa=0の場合に対応するのは呼び出し側の責任にしよう、ということね?
それなら、呼び出し側がサブルーチンコールの前にa=0のチェックをして、このルーチンを呼ばないように
するべきじゃないかしら。
4.おっしゃるとおり。その点については114で触れているわよね? 論点がぼやけるので明示しなかったのよ。
5.アタシは教わる側のことを論じた覚えはないので、これはアナタがここで新たに提案なさっていることね?
「それくらい」ってなんのことかよくわからないので、所感は述べられないわ。ごめんあそばせ。
アタシの意見に賛成しないことはわかったけど、麻衣ちゃんの意見に賛成する根拠を教えて下されば幸いですわ。
0137お局
NGNGはい、次のかたどうぞ。
0138麻衣
NGNGどうして要件ではない a=0について書かなかった事がミスなの?
麻衣がごめんってあやまったのはそのことじゃないよ。
>>97でチャカした書き方した事についてあやまったの!
それは別にして、
麻衣はa=0についてassert入れるようなのは大嫌いなの!
実行結果で例外投げればいいじゃん!
それに、汎用にするならテンプレート使うべぇし!
ベクトルや行列渡せるようにね
0139デフォルトの名無しさん
NGNG0140>麻衣
NGNGテンプレート使う場合は解の公式は使わないで
ニュートン法とか直接数値解法使うようにね〜
まあsqrtを定義してもいいけどさ
0141お局
NGNGカルシウムが足りないのかしら。小魚や牛乳をちゃんと採ってちょうだいね。
>どうして要件ではない a=0について書かなかった事がミスなの?
アタシは、そのことについて糾弾する気はもう無いわ。アタシが不適切だと思った97の
書き込みについては謝っても頂いているので、解決ずみよ。他のみなさんはどうか知らないけど。
みなさんがassertがキライかどうかはどうでもいいわ。お好きになさい。例外投げたければ、
それもいいんじゃないかしら。なんども言うように宿題レベルではどっちでもいいと思うしね。
assertはアタシのスタイルを述べたまでよ。
それから「お局」ってハンドルからわかるように、若いオンナに見られる「ちゃん付けでわざと
自らを半人前扱いさせる」っている態度が鼻につくの。だから半分は難癖つけただけよ。
簡単にいえばイビリね。
アタシはオンナノコが大嫌いなオカマなの。ちなみにオトコノコは好き、オトコとオンナはふつうよ。
クソオカマの嫌みったらしい書き方も、細かいことにこだわってるのも、そういうこと。138で
その目的も達したみたいだから、アタシの当初の目的は全て達成されたわ。みなさまご協力
ありがとうございました。
ああ、140にさらに補足させていただくと、ニュートン法なんかを使うときには、解の推定初期値を
与えないとうまく動かないわよ。n次式の解を求めるルーチンを書くのは大仕事。詳しくは
数値計算の専門書をご覧になってね。
アタシだったら、恐くてそんな汎用化は考えられないわ。よっぽど自信がおありになるのね、
麻衣ちゃんは。若いって恐いもの知らずでいいわね。うらやましいわ。
ではみなさんごきげんよう。ババァは引っ込むので、麻衣ちゃんにご用のある次の方、どうぞ。ほほほ。
0142>お局
NGNGこのまま行ってもスレの趣旨とずれるのは目に見えてるし、やりたきゃ別スレ立ててやれば?
「もの知りお局の自己顕示スレッド」
なんてどう?
しかし負けず嫌いもそこまで行くと見苦しさを通り越して哀れだね。
下手くそなオカマキャラまで立てて、まったく情けないというかなんというか…
0143デフォルトの名無しさん
NGNG0144デフォルトの名無しさん
NGNG「こめけえヤツ」ってのも大人気無いよね。
\_ ____________________/
|/
∧_∧
Ψ (∀・ )
□ (∩∩ ) チョットネ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNG0147デフォルトの名無しさん
NGNGこのスレで突っ込んでほしいのー>お局
0148デフォルトの名無しさん
NGNGそれは嫌。お局の発言はうざいだけだし。
あの程度の主張・知識はそこらに腐るほどころがっているよ。
そのうえここでまで見たくないって感じ。お腹一杯だって。
現実世界の”粘着いちゃもん・解説男”を見ているようで気分悪いよ。
0149デフォルトの名無しさん
NGNG麻衣ちゃん萌え〜
0150147
NGNGそうかなー。まあ各人の好みだから仕方がないけど、例えば
Kernighan & Pike の「プログラミング作法」を読んで学ぶのも
いいけど、キャラを演じつつ プライドをかけてやりあってるのを
見て、なおかつ勉強になる、ってのも俺は楽しいなー。
0151デフォルトの名無しさん
NGNG宿題解決スレだろ?
何でそこまで一般化にこだわるかね。
0152デフォルトの名無しさん
NGNG暇だからでしょう。
0153デフォルトの名無しさん
NGNG喧嘩しないで、マターリ逝きましょうや。
俺、お局ファンだから、別スレ立てよや。
ねくすと宿題かもん、ということで麻衣がむばれ。
0154デフォルトの名無しさん
NGNG0155age
NGNG0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNGお局の「ちょっとひとこといいかしら?」
ってのはどう?なかなかナイスなキャラだとおもいます。両方がんばって欲しい。
0158麻衣
NGNG0159デフォルトの名無しさん
NGNG麻衣ちゃんどうか作り方を教えてくだちぃ
0160>159
NGNGんで、モジコード変換部は入り口と出口に書くってカンジで。
0161麻衣
NGNG宿題でそんなコード提出したら怒られちゃうと思うの。
厨房は向こう行っててね(はぁと
0162159
NGNGrxのソース眺めてみたんですが
英語のコメントで理論もよくわからないんです
すみませんがよろしければ理論レベルから教えて下さい (涙)
0163麻衣
NGNG0164160>161
NGNG文字列処理でガイジンの作ったライブラリを使う事ってあんまりないけどね。
修正に要する工数や問題は少なかったよ。
まあ、おれはまいちゃんじゃないしね。
他にどんな方法があるっちゅうのよ、いもうとよ・・
0165160>162
NGNG日本人が書いたやつも2、3冊あると思うが。
あと、こういったライブラリは、まず使ってみて動作を把握する事からしないと移植なんて無理だよ。
0166159=162
NGNG構造が理解できるようなれば良いらしいです
NFAと最適化は組むように言われています
>>165
図書館には使い方の本はあったのですが組み方の本は置いてませんでした
組むには本読まないと組めないでしょうか?(難しいかな)
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNG< > &lt; &gt;
0169デフォルトの名無しさん
NGNG#define&nbsp;_SAMPLE_STREAM_
#if&nbsp;_MSC_VER&nbsp;&gt;&nbsp;1000
#pragma&nbsp;once
#endif&nbsp;//&nbsp;_MSC_VER&nbsp;&gt;&nbsp;1000
#include&nbsp;&lt;Sstream&gt;
#include&nbsp;&lt;windows.h&gt;
class&nbsp;sample_buf&nbsp;:&nbsp;public&nbsp;std::basic_stringbuf&lt;char&gt;
{
public:
&nbsp;&nbsp;&nbsp;&nbsp;sample_buf()&nbsp;:&nbsp;std::basic_stringbuf&lt;char&gt;(std::ios_base::out)
&nbsp;&nbsp;&nbsp;&nbsp;{}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;virtual&nbsp;~sample_buf()&nbsp;{}
protected:
&nbsp;&nbsp;&nbsp;&nbsp;virtual&nbsp;int&nbsp;sync()
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;表示動作
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
};
class&nbsp;sample_stream&nbsp;:&nbsp;public&nbsp;std::basic_ostream&lt;char&gt;
{
public:
&nbsp;&nbsp;&nbsp;&nbsp;sample_stream()&nbsp;:&nbsp;std::basic_ostream&lt;char&gt;&nbsp;(&amp;_db)&nbsp;{}
&nbsp;&nbsp;&nbsp;&nbsp;virtual&nbsp;~sample_stream()&nbsp;{}
&nbsp;&nbsp;&nbsp;&nbsp;
protected:
&nbsp;&nbsp;&nbsp;&nbsp;sample_buf&nbsp;_db;
};
#endif
というコードを書いたんですけど、VCで
{
&nbsp;&nbsp;sample_stream smp;
&nbsp;&nbsp;smp << "test" << endl;
}
でsample_buffer::sync()を通過するのに、何故か友人のBCBだと通過しないそうです。
家にBCBが無いので、なんで通過しないのかわかりません。
どうか教えてください。
0170169
NGNG0171デフォルトの名無しさん
NGNG0172麻衣
NGNG単に、endlが定義されてないってでたよ
0173169
NGNG使う前に、
using namespace std;
していただけるか、もしくは、endlに名前空間決定子(だっけ?)を付けて、
smp << "test" << std::endl;
としてください。
0174169
NGNG0175169
NGNG0176麻衣
NGNGVC++は flush() で pubsync()が呼ばれる
BCBでは ちょっと複雑で追いかけるのはメンドクサイ
フリーのBCB55落として自分でおいかけてよね
0177169
NGNG一応追ってみることはってみたんです。(人に聞く前に試してみないと某水野になっちゃう(藁))
でも私にはVCのHP版とBCBのRougeWave版の、動作の相違点を見つけられなかったんです。
とりあえず、stringstreamではオブジェクトを作ったときに、stringstream用のstreambuffer、basic_stringbufferを自分に登録します。
この状態でstringstream >> std::endlを実行すると、 stringstream.flush() が実行されて、最終的にbasic_stringbuffer.syncが実行されるみたい。
というわけでsample_streamもこの方式に従って作ったんですけど、残念ながらBCBでは
sample_stream >> std::endlをしても sample_buffer.sync()をカスリもしなかったんです。
自宅にBCBは持っていませんし、まさか人のBCB環境に「これテストしてくれる〜?」って改造したSTLを渡すわけにも逝かないので、麻衣ちゃんに聞いてみようかな?と思った次第です。
0178デフォルトの名無しさん
NGNGなんでこれでハノイの塔ができるのか理解できません
そもそもどのような処理を行っているんでしょうか?
厨房な質問で申し訳ありませんが宜しくお願いします
0179埋
NGNGなんで自分で理解できてないプログラムを組めるのだ〜?ま、いっか。
n枚のハノイの塔だったら、やってる処理はこれだけ。
・小さい n-1 枚を別の棒に移す <-- ☆
・一番下のデカいヤツを空いてる棒に移す
・さっき動かした n-1 枚をデカいのの上に全部移す <-- ☆
☆印の部分は今度は n-1枚のハノイの塔問題なので、再帰で行けるのサ。
0180デフォルトの名無しさん
NGNGhttp://www.borland.co.jp/cppbuilder/freecompiler/index.html
デバッカもあるから落として コンソールアプリででも試したらいいんじゃないの?
0181デフォルトの名無しさん
NGNGテンプレートを展開してくれるツールでもないと、デバッカ使えないんじゃないの?
0182169
NGNG0183デフォルトの名無しさん
NGNGなお、氏名は14文字以内、忍従は50人以内とする」
(2)この名簿の作成をリスト構造を用いた処理に変更せよ
っと言う問題が解けません・・・・
言語はCです
分かる方本当に答え教えて下さい お願いします
0184デフォルトの名無しさん
NGNG0185デフォルトの名無しさん
NGNGどこがわからないんだ?
うっ、こう書くと煽りだな(^^;;;
つまりー、わからない理由は何よ?
「リスト構造がわからない」とか「入力作業がわからない」とかあるだろ?
そこら辺をきちんと整理しないで言われると凄く答える気をなくすんだよ。
0186麻衣
NGNG2番だけなら
struct nameList:;
struct nameList { nameList *next; char name[15];} * Top=NULL;
void Input(char *name)
[
struct nameList *q=NULL;
struct nameList *p=Top;
struct nameList *new=malloc(sizeof *p);
while(p!=NULL){
if( comp(p->name,name) ) brealk;
q=p;
p=p->next;
}
new->next=p;
if(p==NULL)p=Top; else p->next=new;
}
ちょっとネムイ テストしてない ごめん おやすみ
0187デフォルトの名無しさん
NGNGおいらもねよう・・・。
0188183
NGNGライブラリ関数でやるのかなぁって思ってたんですが・・・・
リスト構造使う前の一番から分からなくて・・・・
初心者何で・・・
入力作業は、gets関数で一行全部を出すようにすればいいのかなぁって
思ってたんですよ 参考書にライブラリ関数でs1とs2のような二文字の
入れ替えのがあったんでそれも使うのかなぁって思って・・・・
>>186
これってC言語ですか?
僕じゃ読む事出来ないです・・・・
0189185
NGNG最初に名前の配列と、名前へのポインタの配列を作るんだよ。
とりあえず、人数が50人以内ってあるから、要素数は50で良いだろ。
最初にすることは名前の読み込み。
これは50回、getsを繰り返せばオッケー。
入力が""だったらその時点で名前の読み込みを終える。
でもって、名前のポインタの配列を初期化。
ポインタの配列の1番目のポインタは、名前の配列の1番をさして、
ポインタの配列の2番目のポインタは、名前の配列の2番をさして、
・・・っていう風にしてやる。
つぎに、ポインタの指し示している名前を比較するようにしてクイックソート。
クイックソートは省略。
最後にポインタの配列を1番から終わりまで表示して終わり。
0190183
NGNG今日結構考えたんですけど、どうも思い描けなくて
明日起きたらもう一回考えてみます
分からなかったらまた来ます・・・・・
0191模範解答(藁
NGNG#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct member_tag{struct member_tag *next;char name[15];} member;
int main(void){member m[50],*top=0;char buf[256];{int i;for(i=0;(i<50)&&
gets(buf);++i){member *p=top,*q=&m[i],**r=&top;q->next=0;sscanf(buf,"%14s",
q->name);while(p&&(strcmp(p->name,q->name)<=0?1:(q->next=p,0)))p=*(r=&(p->next));*r=q;}}
{member *p=top;while(p){printf("%s\n",p->name);p=p->next;}}return EXIT_SUCCESS;}
0192191
NGNGダウンロードできる所教えて下さい。
0193麻衣
NGNG0194188
NGNGデータの入れ替えの仕方がやっぱり分かりません・・・・
僕の書いたプログラムを一度見て下さい 見難いかも知れませんがお許しを
#include <stdio.h>
#include <string.h>
main()
{
char name[50];
int i=0,s,n=0;
do{
printf("氏名を入力して下さい\n");
gets(name);
s=strlen(name);
if(s>14)
printf("14字以内の名前を入力して下さい\n");
i++;
}while(i<50&&*name!='0' );
return(0);
}
0195埋
NGNGまだ全然入れ替え云々まで達してないよぉ…
キミの書いたソースの変数 name は何を表す変数のつもり?
name[0] が一個目の名前、name[1] は二個目…ってする予定なんだろうけど、
それなら char name[50][15]; だね。
で、gets するたびに違う場所に名前を保存しなきゃいけないわけだから、
gets( name[i] );
ってやる。(…てゆーかこのままじゃ、15文字以上入れられたらバッファオーバーフローするなぁ(汗。ま、いいか。 )
0197194
NGNGwhile文の終了条件の「0」を実行中に入れても
終わりません・・・・何が間違っているのか教えて下さい お願いします
0198埋
NGNG終了条件って *name!='0' ←コレ?
とーぜんこのままじゃダメだからね。
ようするにやりたいのは、「直前に入れた名前が 0 だったら終了」でしょ。
そうなる用に考えてみ?
# あと、この流れのままだと14文字より長いの入力されたときの対処が面倒そうだから、
# とりあえず完成するまではそーゆー事態は気にしないことにしちゃえば?ダメ?(^^;
0199197
NGNGそれを気にしない事にしようかと・・・・(^^;
後、終了条件「−1」をすればいいんですよね???
そうしたら終了する事出来ました 何か嬉しかったです 感謝です
やっとここまでこれた・・・後は最難関の交換・・・・
0200191
NGNG何かアルゴリズムの本持ってるかな。なれないうちは
図を丁寧に書いて(できればメモリ図まで書く)理解したほうがいいよ。
ソートは標準関数を使うほうが一番楽だけど
バブル、インサート、シェル、クイックいろいろあるから
そこから頭に入れよう。
0202199
NGNGはい ありがとうございます これはリスト構造使ってますよね?
僕その前でつまずいていまして・・・・ 今軽く動いたのでミスチェックお願いします
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main()
{
char name[50][15];
int i=0,j,s,n=0;
printf("氏名を入力して下さい\n");
do{
gets(name[i]);
s=strlen(name[i]);
if(s>14)
printf("14字以内の名前を入力して下さい\n");
qsort( name, n, 15, strcmp );
i++;n++;
}while(*name[i-1]!='0');
for( j=0; j<n; j++ )
printf( "%d %s\n", j+1, name[j] );
return(0);
}
実行すると、左側の数字で「0」と後、四人の名前を入力すると次の番号の「5」
ってのが現れてしまいます。 後一つ、終了条件でリターンキーで終了にしたい
場合はどうすればいいんでしょうか?
0204デフォルトの名無しさん
NGNG5がでるのは正しくない入力(0)のときもnが加算されてるから
じゃないでしょうか。リターンキーで終了するなら s == 0 で
だめかなぁ・・(たぶん)
#ちなみにソートするなら最後にかけたほうがいいですね
0206202
NGNG0207202
NGNG0208埋
NGNG最新版はコッチ?
http://piza.2ch.net/test/read.cgi?bbs=tech&key=979529893&st=475&to=475&nofirst=true
・qsortはループの外に
・リターンで終了の方は if( s==0 ) break; にして、
while() の中身には50人で終了って方の条件を書いておく
・s>14 だったら i++ やら n++ はしない
・ループ後の謎の n++ は何?
かな。
0209207
NGNG指摘された部分を直して、一応は完成する事が出来ました
ありがとうございます
次はこれをリスト構造を使って書き直さないと・・・・
うぅ・・・・・
0210202
NGNGq->next=0;sscanf(buf,"%14s",q->name);
{member *p=top,*q=&m[i],**r=&top;q->next=0;sscanf(buf,"%14s",
q->name);while(p&&(strcmp(p->name,q->name)<=0?1:(q->next=p,0)))p=*(r=&(p->next));*r=q;}}
{member *p=top;while(p){printf("%s\n",p->name);p=p->next;}}return EXIT_SUCCESS;}
この辺りなんですが、ほとんど理解出来ません
リスト構造と言うのを理解していないんですが・・・・
大変申し訳ないのですが、もう少し僕のプログラムに沿って簡単になりませんか・・・
ホント厚かましいですね・・・・
0211191
NGNG説明だけね. (qsortでリストっていうのはなんだか違うような気が少しするので)
麻衣ちゃんすれなので.
多分、読むの嫌になると思うので麻衣が少しゆっくり解説するね.
大枠は、データ入力しながら昇順のリストをつくって、リスト順に出力してます.
構造体 member_tag (typedef as member) はリストとなるポインタと名前をいれる
器です. ポインタ next は、次の名前を入れた member_tag を指します.
そして先頭を指すために top があります.
top->[nextが次を指す,name]->[nextが次を指す,name]->...
終端の next は null です. リストが空のときは top が null . (初期状態)
次はコード.
while((n<50)&&gets(buf)) { ... }
↑n が今取り込む行の番号を指していて, 入力は行単位で 0 .. 49 行まで(n<50).
50 行以上になればループを終了. 一行に何文字入力されるかわからないけど
とりあえず 256 文字までとして、行バッファ buf(行データ入れる場所)に
いれます. もし処理する行がないなら gets(buf) は null になりループ抜けます.
p=top;q=&m[n];r=&top;
↑p はリストの先頭を指します. null なら空ですね. q は今入れる行番号 n に
対応する member を指します. r は今指してる q をどこに入れようかっていう
場所.
q->next=0;sscanf(buf,"%14s",q->name);
↑q の next を null にして(これが終端になるかもしれないから) q の name に
buf から 14 文字分まで取り込んで入れます. これで一行が 14 文字より多くても
大丈夫です.
0212191麻衣
NGNG*r=q;
↑まず p を見ます. これは今注目してるリスト上での行になります. (先頭から
辿っています) もし、今見てるところが無いなら p は null なのでループを抜けます. 最初はリストができていないので null です, そのまま抜けますが, r は
top を指しているのでここに q が書き込まれて top の内容は q を指すように
なります. q の next は 0 なのでリストができています.
p が null じゃないなら, 次に p の名前と q の名前を比べます.
これは, q の入る場所を探しているんです. もし p のほうがアルファベット順に
小さいか、等しいなら 0 以下の値になるので, p にリストの次を指してもらって
リストの最後になるまで ( p = p->next が 0 ) 繰り返します.
ここで, 繰り返すときに r が p->next を指すように変更してるところに注目して
下さい. ループを抜けたとき, r は最後に見た p の next に変更されているので
*r = q; で p の next が q を指すようになるんです.
↓これは q よりアルファベット順で大きい(strcmp>0)
[next,name]--&gt;[next,name]--&gt;[next,name]--&gt; ...
↑ r は前に見た member, ここの next を指す
↑ q をここに入れるときは *r = q になればいい.
strcmp>0 のときにすることがあとひとつ残っています.
q の next が次の member を指すようにすること. すでに p は q より大きいので
これは q->next=p したら良いです. あとは続ける必要ないのでループを抜けます.
(strcmp(p->name,q->name)<=0?1:(q->next=p,0))
この繰り返しでリストが出来ていきます.
0213191麻衣
NGNGあとは, top が先頭の member を指し、その next が順に次を指していく
(next が null になったら終わり)リストができているので,
p に先頭を指すようにして(p=top) p が null でない間、名前の表示し
(printf("%s\n",p->name);)、次を見る(p=p->next;)を繰り返して
終わりです.
ごちゃごちゃしてますが、リスト構造の基本はつなげていくことです.
a --&gt; b --&gt; c --&gt; ... こんな感じに.
あとはあなたの学習に期待します.
0214191
NGNG0215デフォルトの名無しさん
NGNG/ ̄ l | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
■■-っ < んなーこたーない
´∀`/ \__________
__/|Y/\.
Ё|__ | / |
| У.. |
0216210
NGNG今一度読んだのですが、何度も読まないと僕の頭では
理解できないみたいなので、何度も読んで理解してみます。
残り三日でどこまでやれるか分からないのですが
とりあえず、出来る所までやって会社に提出しようと思ってます
全部で10問あるのですが、上のは9番で、それまでの奴の
フローチャートもこれから書かないといけないので出来るかどうかは
僕の努力次第って事ですね。
0218210
NGNGとりあえず、出来るだけ頑張ってみます・・・・
学生生活最後と言うか、社会人前の残りの時間に
遊べないのは少し憂鬱ですが、今までやってなかった自分が
悪いからしょうがないや・・・・
0219デフォルトの名無しさん
NGNG0220210
NGNG言っている意味は分かっているつもりなんですが・・・・
どうなんでしょうかね・・・・
0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNG30分以上悩んでるけど、うまい説明が思いつかない。
0225デフォルトの名無しさん
NGNG「ここは処理をカスタマイズしているんだよ」とでもいえば?
あとは自分で考えよう。
っていうか多態抜きでそんなこと説明して意味あるの?
0226デフォルトの名無しさん
NGNG難しい言葉使うなゴルァ!!とか言われたんだよ・・・。鬱。
0227デフォルトの名無しさん
NGNG「言葉」と「概念」はレベルが違う
0228デフォルトの名無しさん
NGNGそのかみ砕きかた、私も知りたいなぁ♪
0229デフォルトの名無しさん
NGNG選ばれて実行されます。
以前の手法では、どの処理が適切な処理なのか、プログラマがひとつひとつ
確認して指定する必要がありました。その確認処理が自動化されたので、
ミスが減少し、品質の高いプログラムが作成しやすくなりました。
とか
0230デフォルトの名無しさん
NGNGでもそれでもまだ「難しい」と言われるかも。
噛み砕き方なんてどうでもいいんよ。
自分が「多態性」を使う時のイメージを使えば。
それにしても、224ってバイト君で、
会社でのチームリーダーかなんかにそういうこと言われたのかな?
だとしたら相当・・・
0231デフォルトの名無しさん
NGNGさんくすあろっと ふぉー おーる♪
0232質問厨房
NGNG関数の先頭アドレスとかは普通に判るんで、そこからnバイト〜とかやっていても、
途中のコード変えたりコンパイルオプション変えたりするとズレますよね。
自己書き換えっつっても、AIとかじゃなくて、プログラムサイズ縮小狙ってます。
0233232
NGNG解決ですね。厨房カキコすみません。
0234デフォルトの名無しさん
NGNGせいぜいデバッガで追うくらいしかないんでは?
最適化かけたら元のソースと一対一対応なんてつかないし。