09/04/14 14:41:40
6個のreal型変数x1、y1、x2、y2、x3、y3を定義しそれぞれに実数つを読み込んで、xy平面上の3点
(x1、y1)(x2、y2)(x3、y3)を頂点に持つ三角形の面積を計算して、その値を表示するプログラムを作成してください。
・公式:底辺x高さ÷2を使って計算してください。
お願いします!!
877:デフォルトの名無しさん
09/04/14 14:47:38
それを正規表現でやるのか
878:デフォルトの名無しさん
09/04/14 16:15:56
包茎が治る正規表現を教えてください。
先っぽの皮が余ってしょうがないんです。
お願いします!!
879:デフォルトの名無しさん
09/04/14 22:41:17
>>876
これはひどいwww
ここまで来ると逆に尊敬するマルチ野郎だな。
スレリンク(tech板:493番)
スレリンク(tech板:770番)
スレリンク(tech板:499番)
スレリンク(tech板:774番)
スレリンク(tech板:876番)
スレリンク(tech板:66番)
スレリンク(tech板:499番)
スレリンク(tech板:808番)
スレリンク(tech板:821番)
スレリンク(tech板:16番)
スレリンク(tech板:934番)
良識を疑うよ。
880:デフォルトの名無しさん
09/04/14 22:54:02
>>879
すれ違いだけど
俺もそれ学校の問題で出されたことある。
定番かな。構造体使うC言語の問題で。
はっきりいって、三角形の公式使わないほうが楽だよね。
一点を原点移動して例の公式を適用するのが一番シンプルだと思う。
881:デフォルトの名無しさん
09/04/15 18:25:02
>>876
ヘロンの定理でググれカス。
882:デフォルトの名無しさん
09/04/15 20:12:01
>>881
不覚にも
883:デフォルトの名無しさん
09/04/16 00:50:48
何と戦ってるんだろう
884:デフォルトの名無しさん
09/04/16 12:31:02
>>879
そんな事より
答え書けよ!
885:デフォルトの名無しさん
09/04/16 13:25:44
>>881
ヘロンの定理
イラナイだろ
とんち問題だよ
886:デフォルトの名無しさん
09/04/16 13:39:16
>>880 >>881
ヘロンの定理で良いから
プロ書いてみたら
887:デフォルトの名無しさん
09/04/16 13:58:24
いや、どう考えてもプログラミングしてくれってのがおかしいだろ。
正規表現のスレで出る話題じゃない。
888:デフォルトの名無しさん
09/04/16 14:04:39
#include <stdio.h>
#include <math.h>
int main(void)
{
double x1, y1, x2, y2, x3, y3;
double a, b, c, s, S;
#define INPUT(x) printf(#x ": "); scanf("%lf", &x)
INPUT(x1); INPUT(y1);
INPUT(x2); INPUT(y2);
INPUT(x3); INPUT(y3);
a = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
b = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
c = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
s = (a + b + c) / 2.0;
S = sqrt(s * (s - a) * (s - b) * (s - c));
printf("三角形の面積は %lg\n", S);
return 0;
}
889:デフォルトの名無しさん
09/04/16 19:48:18
ヘロンの公式キターーー
890:デフォルトの名無しさん
09/04/16 20:06:18
>>888
こういう一見親切そうな行動をする人間が、世の中のすべてを駄目にする。
891:デフォルトの名無しさん
09/04/16 20:26:15
ヘロンの公式とかこの問題を解くのにふさわしくない
892:デフォルトの名無しさん
09/04/16 20:36:33
>>891
照合するのに使う
893:デフォルトの名無しさん
09/04/16 20:38:14
>>890
お舞いも
書いてみたら
894:デフォルトの名無しさん
09/04/16 20:56:34
性器表現できません><
895:デフォルトの名無しさん
09/04/16 21:54:39
行列式でも出るよ
さあ誰か書け
896:デフォルトの名無しさん
09/04/16 22:04:04
↑お麻衣が書くニダ
897:デフォルトの名無しさん
09/04/16 22:17:53
>>876
>それぞれに実数つを読み込んで
ココ
とても難しい
どこから?
どうやって?
それで
乱数で与えてみる
898:デフォルトの名無しさん
09/04/16 22:44:34
ヘロン公式は
√を使うから
誤差はどう?
899:デフォルトの名無しさん
09/04/16 22:49:03
JavaScriptが動く HTML実験部屋
URLリンク(homepage2.nifty.com)
900:デフォルトの名無しさん
09/04/16 23:01:38
<center><script> var x1, y1, x2, y2, x3, y3; var a, b, c, s, S; var S1,S2,M,N;
/*倍率*/ M=100000000;
/*回数*/ N=1000;
document.write('<style>td,th{font-size:10;}</style><table border=1><tr>');
document.write('<th>x1</th><th>y1</th><th>x2</th><th>y2</th><th>x3</th><th>y3</th>');
document.write('<th>底辺x高さ÷2公式<br>による面積計算結果</th>');
document.write('<th>ヘロン公式による<br>√を使った面積計算結果</th>');
document.write('<th>問題となる誤差<br>倍率'+M+'倍</th></tr>');
for(i=0;N>i;i++){ // 数値を自動代入
x1=(Math.random()*2-1)*M; y1=(Math.random()*2-1)*M;
x2=(Math.random()*2-1)*M; y2=(Math.random()*2-1)*M;
x3=(Math.random()*2-1)*M; y3=(Math.random()*2-1)*M;
a=Math.abs(x1-x2)*Math.abs(y1-y2)/2; // 底辺x高さ÷2公式による面積の計算
b=Math.abs(x2-x3)*Math.abs(y2-y3)/2;
c=Math.abs(x3-x1)*Math.abs(y3-y1)/2;
s=(Math.max(Math.max(x1,x2),x3)-Math.min(Math.min(x1,x2),x3))
s*=(Math.max(Math.max(y1,y2),y3)-Math.min(Math.min(y1,y2),y3)); S=s-a-b-c; S1=S;
a = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); // ヘロン公式による√を使った面積の計算
b = Math.sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
c = Math.sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
s = (a + b + c) / 2.0; S = Math.sqrt(s * (s - a) * (s - b) * (s - c)); S2=S;
document.write('<tr><td> '+x1+'</td><td> '+y1+'</td>'); // 計算結果と誤差を表示
document.write('<td> '+x2+'</td><td> '+y2+'</td><td> '+x3+'</td><td> '+y3+'</td>');
document.write('<td> '+S1+'</td><td> '+S2+'</td><td> '+(S1-S2)+'</td></tr>');
}document.write('</table>');
</script>
901:デフォルトの名無しさん
09/04/16 23:02:20
>>888 >>900 ⇒ >>899
902:デフォルトの名無しさん
09/04/16 23:13:33
/*倍率*/ M=1000; // 変更
903:デフォルトの名無しさん
09/04/16 23:20:59
言語Perlです。
あるCのソースから構造体(typedefも)を抽出したいのですが、
この例のようなstructやunionを含んでるstructを
マッチさせるにはどう書けばいいんですか?
struct A{
unsigned short a;
unsigned long b
char* c;
struct{
long e[8];
long f;
}d;
};
904:デフォルトの名無しさん
09/04/16 23:24:21
↑一旦文字変換してから
matchさせると良い
905:デフォルトの名無しさん
09/04/16 23:29:33
-21761253.57183114 8544355.772346469 61664545.39556769 62137654.31616132 79934094.82325418 66218011.1129441 659766221291321.5 319359195447661.56 340407025843659.94
906:デフォルトの名無しさん
09/04/16 23:47:31
たとえば?
data=list*->A.c;
if(data.match(/.*/)){
}
907:デフォルトの名無しさん
09/04/16 23:48:55
x=(79934094.82325418)-(-21761253.57183114);
y=(66218011.1129441)-(8544355.772346469);
908:デフォルトの名無しさん
09/04/17 00:15:56
>>903
>この例のようなstructやunionを含んでるstructを
一般に、任意にネストできる構造は正規表現で照合できない
(実は、「Perlの」正規表現ではできてしまうけど、ごちゃごちゃしたものになるので
オススメしない)。正確に抽出したいならCのパーザを自前で書くか、どっかからCのパーザ
拾ってくるのが良い
909:デフォルトの名無しさん
09/04/17 00:22:26
簡単な検証方法
<center><script> var x1, y1, x2, y2, x3, y3; var a, b, c, s, S; var S1,S2,M,N;
/*可変*/ N=1000;
document.write('<style>td,th{font-size:10;} </style><table border=1><tr>');
document.write('<th>x1 </th><th>y1 </th><th>x2 </th><th>y2 </th><th>x3 </th><th>y3 </th>');
document.write('<th>底辺x高さ÷2公式<br>による面積計算結果 </th>');
document.write('<th>ヘロン公式による<br>√を使った面積計算結果 </th>');
document.write('<th>問題となる誤差<br>倍率'+M+'倍 </th> </tr>');
for(i=-N;N>=i;i++){ // 数値を自動代入
x1=0; y1=i;
x2=-1; y2=0;
x3=1; y3=0;
a=Math.abs(x1-x2)*Math.abs(y1-y2); // 底辺x高さ÷2公式による面積の計算
b=Math.abs(x2-x3)*Math.abs(y2-y3);
c=Math.abs(x3-x1)*Math.abs(y3-y1);
s=(Math.max(Math.max(x1,x2),x3)-Math.min(Math.min(x1,x2),x3))
s*=(Math.max(Math.max(y1,y2),y3)-Math.min(Math.min(y1,y2),y3)); S=s-(a+b+c)/2; S1=S;
a = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); // ヘロン公式による√を使った面積の計算
b = Math.sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
c = Math.sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
s = (a + b + c) / 2.0; S = Math.sqrt(s * (s - a) * (s - b) * (s - c)); S2=S;
document.write('<tr><td> '+x1+' </td><td> '+y1+' </td>'); // 計算結果と誤差を表示
document.write('<td> '+x2+' </td><td> '+y2+' </td><td> '+x3+' </td><td> '+y3+' </td>');
document.write('<td> '+S1+' </td><td> '+S2+' </td><td> '+(S1-S2)+' </td> </tr>');
}document.write(' </table>');
</script>
910:デフォルトの名無しさん
09/04/17 00:28:10
誤差を検証してみた
その結果√を使用すると
誤差が大きいと判断される
>>909 ⇒ >>900 ⇒ >>888
JavaScriptが動く HTML実験部屋
URLリンク(homepage2.nifty.com)
911:デフォルトの名無しさん
09/04/17 00:44:36
perl5.8.8を使用しています。
<td>タグの中身を取得したいのですが、ネストしている場合は、
内側のタグのみを対象としたいです。
そこで否定先読みで<td>と</td>の間の文字列でかつ、"<td>"に続かない
ものにマッチするという正規表現を書こうとしています。
現状では以下のような感じです。
$_ =<<DATA;
<td>データ1</td>
<td>
<tr>
<td>データ2</td>
</tr>
</td>
DATA
# 内側のテーブルタグのみにマッチさせたい
@res = /<td>(?![\s\w<>]+?<td>)[\s\S]+?<\/td>/gm; # こっちはOK
#@res = /<td>(?![\s\S]+?<td>)[\s\S]+?<\/td>/gm; # NG
分からないのはNGと書いた方が上手く動かない理由です。
現象としては、否定先読み条件の中の最短マッチが適用されていないように思います。
上の例ですと、データ2のみが取得されてしまいます。
修正方法を教えていただけないでしょうか。
912:デフォルトの名無しさん
09/04/17 02:14:58
↑
[\s\S]って
.
と同じ?
913:デフォルトの名無しさん
09/04/17 02:36:13
>>911 ⇒ >>910 サンプル
<center><script> var x1, y1, x2, y2, x3, y3; var a, b, c, s, S; var S1,S2,M,N;
/*可変*/ N=1000; P='';
P+=('<style>td,th{font-size:10;} </style><table border=1><tr>');
P+=('<th>x1 </th><th>y1 </th><th>x2 </th><th>y2 </th><th>x3 </th><th>y3 </th>');
P+=('<th>底辺x高さ÷2公式<br>による面積計算結果 </th>');
P+=('<th>ヘロン公式による<br>√を使った面積計算結果 </th>');
P+=('<th>問題となる誤差<br>倍率'+M+'倍 </th> </tr>');
for(i=-N;N>=i;i++){ // 数値を自動代入
x1=0; y1=i;
x2=-1; y2=0;
x3=1; y3=0;
a=Math.abs(x1-x2)*Math.abs(y1-y2); // 底辺x高さ÷2公式による面積の計算
b=Math.abs(x2-x3)*Math.abs(y2-y3);
c=Math.abs(x3-x1)*Math.abs(y3-y1);
s=(Math.max(Math.max(x1,x2),x3)-Math.min(Math.min(x1,x2),x3))
s*=(Math.max(Math.max(y1,y2),y3)-Math.min(Math.min(y1,y2),y3)); S=s-(a+b+c)/2; S1=S;
a = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); // ヘロン公式による√を使った面積の計算
b = Math.sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
c = Math.sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
s = (a + b + c) / 2.0; S = Math.sqrt(s * (s - a) * (s - b) * (s - c)); S2=S;
P+=('<tr><td> '+x1+' </td><td> '+y1+' </td>'); // 計算結果と誤差を表示
P+=('<td> '+x2+' </td><td> '+y2+' </td><td> '+x3+' </td><td> '+y3+' </td>');
P+=('<td> '+S1+' </td><td> '+S2+' </td><td> '+(S1-S2)+' </td></tr>');}P+=('</table>');
data=P; data=data.replace(/(<td>)([^<>]*)(<\/td>)/g,'$1 消去$3'); document.write(data);
</script>
914:デフォルトの名無しさん
09/04/17 02:37:52
>>911
これを参考に・・・
data=data.replace(/(<td>)([^<>]*)(<\/td>)/g,'$1消去$3');
915:デフォルトの名無しさん
09/04/17 02:51:50
>>895
せっかく>>876を行列式で書くなら
3D空間で同様に書いてみたら?
つまり宇宙的規模と言う事です。
(x1,y1,z1) (x2,y2,z2) (x3,y3,z3)
916:デフォルトの名無しさん
09/04/17 02:54:13
↑2Dサンプルは>>910参照
917:デフォルトの名無しさん
09/04/17 03:08:46
>>912
同じといえば同じ。
ただし、. と違って常に改行にもマッチする。
否定形で使うと何ともマッチすることのないものになる。