/*
三角形判定プログラム
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 自己採点シート | ||
ソフトウェアテストの大変なところは、仕様やプログラムを作成する以上に、「検証」という「後戻りの作業」が多くあるためです。皆さんも、毎日、悪戦苦闘していることでしょう。
今回は、三角形判定問題を出題しました。皆さんは、システマチックにテスト項目を作成し、バグを見つけることができたでしょうか。また、実際に机上、実機で確認した方は、バグを見つけることができたでしょうか。次回、解答を掲載しますので、結果を確かめてください。
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
バグ検出ドリル(19)たかが1円されど1円……1円足りないバグの恐怖
バグ検出ドリル(18)IoT時代だからこそ重要、単純でも検出が難しい通信系バグ
バグ検出ドリル(17)「よくある単純なバグ」だからこそ見つけにくい
バグ検出ドリル(16)音楽プレーヤーに潜むバグを見つけ出せ
バグ検出ドリル(15)なぜ「山田三郎」が「まだまだ天田三郎」に化けるのかCopyright © ITmedia, Inc. All Rights Reserved.
組み込み開発の記事ランキング
コーナーリンク
よく読まれている編集記者コラム