要件定義の例題と練習問題

第13章

BMI計算アプリの要件定義 (bmi-req.md)

リスト13-14

# BMI計算プログラム

体重と身長からBMIを計算する

## 1. 入力
  - 体重(kg単位)と身長(cm単位)をキーボードから入力する(小数可)
  - キーボード入力では入力プロンプトを表示する
  - 入力例
    - 体重(kg単位)> 70.5
    - 身長(cm単位)> 175.2

## 2. 処理
  - BMIを計算する
    - 計算式: BMI = 体重(kg) / (身長(m) * 身長(m))
    - 計算結果は、小数点以下1桁までに丸める
    - 計算例:70.5kg、175.2cm → BMI = 23.0

## 3. 出力
  - 体重、身長、BMIをコンソールに表示する
    - 項目名を付けて表示し、項目の間はスペースで区切る
    - 表示例
      - 体重:70.5kg  身長:175.2cm  BMI:23.0

## 4. 作成条件
  - エラー処理は行わない
  - main関数は作成しない

練習問題13-2-1

# 円の面積・周の長さ計算プログラム
円の半径の長さから円の面積と円周を計算する

## 1. 入力
  - ******************をキーボードから入力する(小数入力可)
  - キーボード入力では入力プロンプトを表示する
  - 入力例:
     - **********************************

## 2. 処理
  - 円の半径から面積と周の長さを計算する
    - 計算式:
      - ************************************
      - ************************************
    - 計算結果は小数点以下1桁までに丸める
      
## 3. 出力
  - 半径、面積、周の長さを1行で表示する
    - 項目名を付けて表示する
    - 項目の間は読点とスペースで区切る
    - 表示例:
      - ******************************************************

## 4. 作成条件
   - エラー処理は行わない
   - main関数は作成しない

練習問題13-2-2

# 単利計算プログラム
単利での資金の運用結果を計算する

## 1. 入力
  - ****************************************をキーボードから入力する
  - 元金は整数、その他は小数で入力可
  - キーボード入力では入力プロンプトを表示する
     - 入力例:
       - ***************************
       - ***************************
       - ***************************

## 2. 処理 
  - 元金、年利、預け入れ年数から、利息と元利合計を計算する
    - 計算式:利息 = ***************************
    - 利息は小数点以下を丸めて整数にする

## 3. 出力
   - 項目名を付けて、*****************************************を表示する
   - 元金、利息、元利合計は*********************************で表示する
   - 項目の間は読点とスペースで区切る
   - 表示例:
     - 元金:100,000円、 年利:2.5%、 年数:3.0年、 利息:7,500円、 元利合計:107,500円

## 4. 作成条件
   - エラー処理は行わない
   - main関数は作成しない

練習問題13-3-1

# 旅行の所要時間計算プログラム
距離と速度から所要時間を計算する

## 1. 入力 
  - ********************************をキーボードから入力する(小数入力可)
  - キーボード入力では入力プロンプトを表示する
    - 入力例:
       - ***********************
       - ***********************

## 2. 処理
  - 距離と速度から所要時間を計算する
    - 計算式:************************* 
  - 所要時間は、時間と分に分けて計算する

## 3. 出力
  - ********************を項目名を付けて表示する
  - 項目の間は読点とスペースで区切る
  - 表示例:
    - 距離:150.0km、 速度:60.0km/h、 所要時間:2時間30分

## 4. 作成条件
   - エラー処理は行わない
   - main関数は作成しない
   - 直接実行時のみスクリプトを実行する

練習問題13-4-1

# 2点間の距離計算
2次元座標PとQの間の距離を計算する

## 1. 入力
  - 2つの座標、***********, **********の値を入力する
  - 入力例:
    - P: x1, y1 > 5.1, 8.2
    - Q: x2, y2 > 10.5, 2.9

## 2. 処理
  - PとQの間の距離を計算する
    - 計算式: ********************************************
    - 距離の値は、小数点以下1桁に丸める

## 3. 出力
  - 2つの座標の距離を表示する
  - 表示例:
    - *****************************

## 4. 作成条件
   - エラー処理は行わない

第14章

練習問題14-1-11

# マークダウンファイル抽出プログラム
指定のフォルダとすべてのサブフォルダからマークダウンファイルだけを抽出する

## 1. 入力
- キーボードから*************を入力する
  - 入力例: *************を入力してください > C:\python\workspace\chapter13

## 2. 処理
1.****************場合はメッセージを表示して終了する
  - 終了メッセージ: 指定されたパスが存在しません
2.************************場合はメッセージを表示して終了する
  - 終了メッセージ: 指定されたパスはディレクトリではありません 
3.フォルダおよびそのすべてのサブフォルダからマークダウンファイルだけを抽出して
   ファイルリストを作る
  - マークダウンファイルの拡張子は************************************
  - ********************場合はエラーメッセージを出して終了する
    - 終了メッセージ: 指定されたフォルダにはマークダウンファイルがありません
4.ファイルリストを表示する

## 3. 出力
- 抽出したマークダウンファイルのリストを表示する
  - 指定フォルダからの***********************を表示する
  - 1行に1つのパスを表示する
  - 相対パスの昇順で表示する
  - 表示例
    
```text
    bmi/bmi-req.md
    bmi/bmi-spec.md
    ex13-1/circle/circle-req.md
    ex13-1/circle/circle-spec.md
```

## 作成条件
- なし

第15章

練習問題15-2-6

# 単語ファイルの読み込みと抽出結果の表示
単語ファイルから単語を入力し、5文字以上の単語の単語リストを作り表示する

## 1. 入力データ
  - words.txtファイルから複数の英単語が書かれたデータを入力する
  - パスの既定値はカレントディレクトリの直下
    - エンコーディングはUTF-8である 
    - 1行に1つの英単語が記録されているが、単語の前後に余分な空白があるものや、空行も含まれる
    - データの例示(. は1つの半角空白文字、□ は1つの全角空白文字を示す)
        - **************
        - **************
        - **************
        - **************
        - **************
        - **************
        - **************
        - **************

## 2. 処理
  - words.txtファイルを1行ずつ読み込み以下の処理を実行する
    - 行データの前後にある******************を除いて単語だけを取り出す
    - 読み込んだ行データが****なら無視する
    - 単語が書かれていたら、総単語数をカウントアップする
    - 単語が****************かどうか調べる
    - *********なら、単語リストに単語を追加する
  - *****************************************をコンソールに表示する

## 3. 表示方法
  - 表示例の形式でコンソールに表示する
  - 表示例

```text
    総単語数:7
    長さが5文字以上の単語数:4
    apple
    watermelon
    strawberry
    blueberry
```

## 4. 作成条件
  - なし

練習問題15-3-1

# 取引明細表の集計プログラム
取引明細ファイルの入出金データを集計して精算済み取引明細ファイルを作る

## 1.入力
- 取引明細ファイルを入力する
  - ファイル名:************
 - パスの既定値:カレントディレクトリの直下
  - ファイルエンコーディング:**************
  - ファイル形式:**************************
  - ファイルの内容
    - 1行目はタイトル行:****************************************************
    - 2行目以降はデータ行
    - ただし、累計入金、累計出金、残高は**************
    - 同じ日付を持つデータはない
    - データ件数は**********
    - データの内容にはエラーがないことを前提とする(CSV内容の妥当性検証は不要)
    - データの例示:
        | 日付        | 入金   | 出金  | 取引相手  | 累計入金 | 累計出金 | 残高 |
        |:-----------|:------|:------|:--------|:---------|:-------|:----|
        | 2026-01-18 | 30000 | 0     | A社      |          |          |      |
        | 2026-02-02 | 75000 | 0     | F社      |          |          |      |

## 2.処理
- 取引明細の行データを**********にソートする
- 取引明細の各行データの************************を計算してデータを更新する
  - 計算方法:
    - ******************************************
    - ******************************************
    - ******************************************
- 更新した取引明細をファイル出力する
  
## 3.出力
- 更新した取引明細をファイルに出力する
   - ファイル名:**********************
  - パスの既定値:カレントディレクトリの直下
   - ファイルエンコーディング:******
   - ファイル形式:CSVファイル(コンマ区切り)
   - ファイルの内容
     - 1行目はタイトル行:***************************************************
     - 2行目以降はデータ行

## 4.作成条件
- なし

練習問題15-3-2

# BMIの計算と表示
測定データファイルのデータを使ってBMIを計算する

## 1. 入力データ
  - ************************から個人別の測定データを入力する
   - パスの既定値はカレントディレクトリの直下である
    - ファイルのエンコーディングは******である
    - 1行目は項目名、データは2行目以降
    - データの例示
        - 名前,体重(kg),身長(cm)
        - 山田太郎,65.5,172.8

## 2. 処理
  - CSVファイルの2行目以降について次の処理を繰り返し適用する
    - CSVとして1行ずつ読み込み、名前、体重、身長を得る
    - 行データについて以下をチェックする
      - 項目数は***********
      - *******の項目はない
      - 体重、身長は***********************
      - 体重、身長は***********************
    - チェックして不正だった行データは****************************
      - 〇件目は不正なデータです、というエラーメッセージを表示すること
        - 表示例:3件目は不正なデータです
        - ただし、件数はヘッダー行を除いてカウントする
    - データからBMIを計算する
      - 計算式: ************************************
      - 身長はcm単位で入力されるため、計算前にm単位に変換する
      - 計算結果は、******************に丸める
      - 計算例:
        - 体重:70.5kg 身長:175.2cm → BMI = 70.5 / (1.752 * 1.752) ≈ 23.0
    - 名前と体重、身長、BMIをコンソールに表示する

## 3. 表示方法
  - 名前と体重、身長、BMIをコンソールに表示する
   - 結果は、項目名を付けて表示する。
    - 項目の間はスペースで区切る。
    - 表示例
      - 名前:山田太郎 体重:70.5kg 身長:175.2cm BMI:23.0

## 4. 作成条件
  - なし

第18章

オブジェクトを使う要件定義(bmi-req.md)

リスト18-01

# BMIの計算と表示

測定データファイルのデータを使ってBMIを計算する

## 1. 入力データ
  - CSVファイル(person.csv)から個人別の測定データを入力する
    - パスの既定値はカレントディレクトリの直下である
    - ファイルのエンコーディングは UTF-8 である
    - 1行目は項目名、データは2行目以降
    - データの例示
        - 名前,体重(kg),身長(cm)
        - 山田太郎,70.5,175.2

## 2. 処理
  - CSVファイルの2行目以降について次の処理を繰り返し適用する
    - コンマ位置で分割し、名前、体重、身長を得る
    - 行データについて以下をチェックする
      - 項目数は3である
      - 空文字の項目はない
      - 体重、身長は正しく数値に変換できる
      - 体重、身長は正の数である
    - チェックして不正だった行データはメッセージを表示して読み飛ばす
      - 〇件目は不正なデータです、というエラーメッセージを表示すること
        - 表示例:3件目は不正なデータです
        - ただし、件数はヘッダー行を除いてカウントする
    - データからBMIを計算する
      - 計算式: BMI = 体重(kg) / (身長(m) * 身長(m))
      - 身長はcm単位で入力されるため、計算前にm単位に変換する
      - 計算結果は、小数点以下1桁までに丸める
      - 計算例:
        - 体重:70.5kg 身長:175.2cm → BMI = 70.5 / (1.752 * 1.752) ≈ 23.0

## 3. 表示方法
  - 名前と体重、身長、BMIをコンソールに表示する
   - 結果は、項目名を付けて表示する。
    - 項目の間はスペースで区切る。
    - 表示例
      - 名前:山田太郎 体重:70.5kg 身長:175.2cm BMI:23.0

## 4. 作成条件
  - クラスを定義する