package j1.lesson11basic;
import java.io.*;
/**
* 課題1113 - 解答例.
* @author java2005
* @version $Id: ArrayCircumferenceOfPolygon_java.rps,v 1.1 2006/07/14 05:33:59 java2005 Exp $
*/
public class ArrayCircumferenceOfPolygon {
/**
* コンソールから多角形の頂点データを次々と入力し、多角形の周の長さを表示するプログラム。
* mainメソッドの動作を表す擬似コードは以下の通りである。
* <pre><code>
* プログラム全体
* print "頂点数を入力:"
* numberOfVertices = コンソール入力 (整数)
* if numberOfVertices が2以下
* print "頂点数は、3以上にして下さい。"
* プログラムの終了
* x = 長さ numberOfVertices の新しい配列 (double[])
* y = 長さ numberOfVertices の新しい配列 (double[])
* // データの入力
* for i を 0 から x.length - 1 まで
* print "x[" + i + "]を入力: "
* x[i] = コンソール入力(実数)
* print "y[" + i + "]を入力: "
* y[i] = コンソール入力(実数)
* // 各辺の長さの合計を求める(外周の長さを求める)
* totalLength = 0
* for i を 0 から x.length - 2 まで
* totalLength にi番目の頂点とi+1番目の頂点の間の距離を加える
* totalLength に0番目の頂点と最後の頂点の間の距離を加える
* print "外周の長さ:" + totalLength
* </code></pre>
* @param args 無視される
* @throws IOException 入力時に例外が発生した場合
*/
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// データの個数を入力する
System.out.print("頂点数を入力: ");
int numberOfVertices = Integer.parseInt(reader.readLine());
if (numberOfVertices <= 2) {
System.out.print("頂点数は、3以上にして下さい。");
return;
}
// データを入力する
double[] x = new double[numberOfVertices];
double[] y = new double[numberOfVertices];
for (int i = 0; i < x.length; i++) {
System.out.print("x[" + i + "]を入力: ");
x[i] = Double.parseDouble(reader.readLine());
System.out.print("y[" + i + "]を入力: ");
y[i] = Double.parseDouble(reader.readLine());
}
// 各辺の長さの合計を求める(外周の長さを求める)
double totalLength = 0;
for (int i = 0; i <= x.length - 2; i++) {
double tmpX = x[i] - x[i + 1];
double tmpY = y[i] - y[i + 1];
totalLength += Math.sqrt(tmpX * tmpX + tmpY * tmpY);
}
double tmpX = x[x.length - 1] - x[0];
double tmpY = y[x.length - 1] - y[0];
totalLength += Math.sqrt(tmpX * tmpX + tmpY * tmpY);
System.out.println("外周の長さ:" + totalLength);
}
}
|