演習問題11解答例

情報科学1 演習問題11
氏名
学籍番号
第1問 xy平面上の3点A、B、Cで表される三角形ABCが原点を内部に含むかどうかを判定する
プログラムを作りなさい。図1は原点を含み、図2は原点を含まない場合である。
A
B
図1
A
A
B
C
図2
B
C
図3
Z
A
Z
C
図4
B
C
三角形が原点を含むとき、原点Zを頂点とする3つの三角形ZAB、ZAC、ZBCの面積の和はABCの面
積に等しいが、原点を含まない場合には三角形ZAB、ZAC、ZBCの面積の和はABCの面積より大きく
なる。(図3,図4)4つの三角形の面積を変数Sabc、Szab、Szac、Szbcで表すとき、原点が三角
形ABCに含まれるかどうかを判定するif文を書きなさい。
if (
Sabc < Szab+Szac+Szbc
)
printf("原点を内部に含まない\n");
else
printf("原点を内部に含む\n");
xy平面上の3点A、B、Cのxy座標を変数Xa、Ya、Xb、Yb、Xc、Ycで表すとして、3つの座標
を入力するためのscanfを用いたC言語の文を書きなさい。ただし、6つの変数はdouble型とする。
%lg または %lf または %le
scanf("%lg %lg %lg %lg %lg %lg",&Xa,&Ya,&Xb,&Yb,&Xc,&Yc);
xy平面上の3点A、B、Cのxy座標を
とするとき、三角形ABCの面積は以下の式で求めることが出来る。
Sabc、Szab、Szac、Szbcの値を求めるC言語の文(代入文が4つ必要)を書きなさい。ただし、
変数はすべてdouble型とする。(原点の座標は(0,0)であることに注意)
Sabc=0.5*fabs((Xa-Xc)*(Yb-Yc)-(Ya-Yc)*(Xb-Xc))
;
Szab=0.5*fabs(Xa*Yb-Ya*Xb)
;
Szac=0.5*fabs(Xa*Yc-Ya*Xc)
;
Szbc=0.5*fabs(Xb*Yc-Yb*Xc)
(double型の数の絶対値を求める関数はについては教科書を調べること。)
;
裏面に続く
第2問 書籍に付けられるISBN(International Standard Book Number)は13桁の整数であ
らわされ、最後の一桁は残りの12桁から計算される0∼9の値のチェックデジットになってい
る。このチェックデジットを計算し、正しいISBNであることを判定するプログラムを作りなさ
い。(ISBNはハイフンまたはスペースで区切られているが、それが無いものとして13桁の整
数として扱う)講義で使用した教科書には978427064401という番号がついている。
チェックデジットの計算方法は次のようなものである。
チェックデジットを除いた一番左側の桁から順に1,3,1,3,...を書けてそれらの和をと
る。和を10で割って出たあまりから10を10から引く。ただし、10で割って出たあまりが0
である場合は0とする。
ISBN 978-4-11-109215-□ のチェックディジット(□部分)を求めなさい。
9X1+7X3+8X1+4X3+1X1+1X3+1X1+0X3+9X1+2X3+1X1+5X3
= (1)
(1)
(1) mod 10 = (2)
86
(2)
10-(2)=(3)
6
(3)
4
(1)の値を変数nであらわした場合、チェックデジットcdを求めるC言語の文をif文を用いて書き
なさい。(mod演算には%を使う)
if (n%10==0)
cd=0;
else
cd=10-(n%10);
13桁のISBNから13桁目のチェックデジットを取り出すためには、ISBNを10で割ったあまりを求
めればよい。同様に、12桁目の値はISBNを10で割った値をさらに10で割り、そのあまりを求
めればよい。ISBNを変数isbnであらわす場合、12桁目の値n12を求めるC言語の文で書きなさ
い。また、同様な方法で11桁目の値n11、10桁目の値n10を求めるC言語の文で書きなさい。
n12 = (isbn/10)%10
;
n11 = (isbn/100)%10
;
n10 = (isbn/1000)%10
;
ISBNの一桁目から12桁目をそれぞれn1 n12であらわす場合、(1)の値を変数nであらわす場合、
nを求めるC言語の文を書きなさい。
n = n1+n2*3+n3+n4*3+n5+n6*3+n7+n8*3+n9+n10*3+n11+n12*3
;