/* 三角形判定プログラム TrinagleHandler.c */ #define DIGITS 4 #include <stdio.h> #include <string.h> #include <stdlib.h> void triangle_handler(int side1, int side2, int side3); void input(int* val); void isosceles(); void equilateral(); void scalene(); /*********************** * 関数名: main * 機能 : (1)辺1〜3を初期化する。 (2)辺1〜3の値をコンソールからそれぞれ取得する。 (3)三角形を判定する。 * 引数 : 辺の値 * 戻り値: なし ***********************/ int main() { //辺1、辺2、辺3を初期化 int side1 = 0; int side2 = 0; int side3 = 0; //辺1、辺2、辺3を入力 input(&side1); input(&side2); input(&side3); //三角形を判定する triangle_handler(side1, side2, side3); return 0; } /*********************** * 関数名: input * 機能 : (1)コンソールから文字列を取得する。 (2)文字列の末尾を'\n'から'\0'にする (3)入力桁が4桁以上の場合は、プログラムを終了する。 (4)取得した文字列をchar型から、int型に変換する * 引数 : 辺の値 * 戻り値: なし ***********************/ void input(int* val) { int i; int len = 0; char str[DIGITS]; //辺を入力 fgets(str, sizeof(str), stdin); //文字列の長さを取得 len = strlen(str) - 1; //文字列の末尾の改行を'\0'に置き換える if (str[len] == '\n') { str[len] = '\0'; } else { //入力桁数が多い場合は、プログラム終了する while (getchar() != '\n') { printf("入力エラー\n"); exit(1); } } //入力した文字列に0〜9が含まれていない場合は、 //プログラムを終了する for (i = 0; i < len; i++) { if (!(str[i] >= '0' && str[i] <= '9')) { printf("入力エラー\n"); exit(1); } } //文字列を整数型に変換する *val = atoi(str); } /*********************** * 関数名: triangle_handler * 機能 : 3辺から三角形の種類を判定する * 引数 : 辺1、辺2、辺3 * 戻り値: なし ***********************/ void triangle_handler(int side1, int side2, int side3) { //正三角形、二等辺三角形、不等辺三角形を判定する if ((side1 + side2 >= side3) && (side2 + side3 >= side1) && (side3 + side1 >= side2)) { if (side1 == side2 && side2 == side3 && side3 == side1) { //正三角形の表示 equilateral(); } else if ((side1 == side2) || (side2 == side3) || (side3 == side1)){ //二等辺三角形の表示 isosceles(); } else { //不等辺三角形の表示 scalene(); } } else { printf("三角形ではありません\n"); } } /*********************** * 関数名: equilateral * 機能 : 正三角形のメッセージを表示 * 引数 : なし * 戻り値: なし ***********************/ void equilateral() { printf("正三角形\n"); } /*********************** * 関数名: isosceles * 機能 : 二等辺三角形のメッセージを表示 * 引数 : なし * 戻り値: なし ***********************/ void isosceles() { printf("二等辺三角形\n"); } /*********************** * 関数名: scalene * 機能 : 不等辺三角形のメッセージを表示 * 引数 : なし * 戻り値: なし ***********************/ void scalene() { printf("不等辺三角形\n"); }
下記に実行結果の例を示す。
下記に、入力手順例を示す。
5 6 7 不等辺三角形
今回の自己採点シートを示します。
問題 | 項目 | 配点(点) |
---|---|---|
三角形判定プログラム | 問題文を一通り読んだ | 50 |
テスト項目を作成した | 40 | |
机上または実機テストを行い、バグを検出できた | 10 | |
表2 自己採点シート |
ソフトウェアテストの大変なところは、仕様やプログラムを作成する以上に、「検証」という「後戻りの作業」が多くあるためです。皆さんも、毎日、悪戦苦闘していることでしょう。
今回は、三角形判定問題を出題しました。皆さんは、システマチックにテスト項目を作成し、バグを見つけることができたでしょうか。また、実際に机上、実機で確認した方は、バグを見つけることができたでしょうか。次回、解答を掲載しますので、結果を確かめてください。
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.