【PowerShellでやさしいプログラミング】第8回:練習問題集

これまで第1回~第7回までPowerShellを使ってプログラムングの基礎について学んできました。

今回はそのまとめとして、練習問題を4つ用意しました。

これが全て解ければ、プログラマーとしてはビギナーを脱却し、普通のプログラマーになったと言えるでしょう!

もし解けなかった人も、答えを見て理解できれば、一人前のプログラマーにまた一歩グッと近づけます。

力試しだと思って解いてみてください!

練習問題

問題1

身長と体重を入力させて、BMIを計算して結果を表示せよ。
また、BMIの計算結果から判定基準が何になるかも、合わせて表示せよ。

BMIの計算方法と判定基準は以下を参照。

BMIの計算方法

BMI = 体重[kg] ÷ 身長[m]の2乗

判定基準

BMI判定基準
18.5未満低体重(痩せ型)
18.5〜25未満普通体重
25〜30未満肥満(1度)
30〜35未満肥満(2度)
35〜40未満肥満(3度)
40以上肥満(4度)

プログラムの実行イメージ

身長を入力してください。: 160
体重を入力してください。: 60
あなたのBMIは23.4375 です。
あなたは「普通体重」です。

問題2

for文を用いて、以下のように掛け算九九の表を出力するプログラムを作成せよ。

プログラムの実行イメージ

0 1 2 3 4 5 6 7 8 9
1 1 2 3 4 5 6 7 8 9
2 2 4 6 8 10 12 14 16 18
3 3 6 9 12 15 18 21 24 27
4 4 8 12 16 20 24 28 32 36
5 5 10 15 20 25 30 35 40 45
6 6 12 18 24 30 36 42 48 54
7 7 14 21 28 35 42 49 56 63
8 8 16 24 32 40 48 56 64 72
9 9 18 27 36 45 54 63 72 81

問題3

5人の身長を入力させて、各自の身長と、最も高い人、最も低い人、平均の身長をそれぞれ出力するプログラムを作成せよ。
但し、入力した身長は配列に格納するようにせよ。

プログラムの実行イメージ

1 人目の身長を入力してください。: 120
2人目の身長を入力してください。: 130
3 人目の身長を入力してください。: 140
4 人目の身長を入力してください。: 150
5 人目の身長を入力してください。: 160
1人目の身長は120です。
2人目の身長は130です。
3人目の身長は140です。
4人目の身長は150です。
5人目の身長は160です。
最も高い身長は160です。
最も低い身長は120です。
平均身長は140です。

問題4

「しりとりプログラム」を作成せよ。
入力された言葉がしりとりになっていなければゲームオーバー、
「ん」で終わればゲームオーバーとなるようにせよ。

プログラムの実行イメージ1

しりとりスタート!
しりとり
りんご
ああ
語尾がりになっていません。
ゲームオーバー

プログラムの実行イメージ2

しりとりスタート!
しりとり
りぼん
「ん」で終わります。
ゲームオーバー

問題の答え

答え1

#身長を入力してもらう
$height = Read-Host "身長を入力してください。"

#体重を入力してもらう
$weight = Read-Host "体重を入力してください。"

$BMI = $weight / [Math]::Pow($height/100,2)

#BMI値を表示
Write-Output "あなたのBMIは$BMI です。"

#判定基準
$Result = ""

if ($BMI -lt 18.5) {
    $Result = "低体重(痩せ型)"
}
elseif ($BMI -lt 25) {
    $Result = "普通体重"
}
elseif ($BMI -lt 30) {
    $Result = "肥満(1度)"
}
elseif ($BMI -lt 35) {
    $Result = "肥満(2度)"
}
elseif ($BMI -lt 40) {
    $Result = "肥満(3度)"
}
else {
    $Result = "肥満(4度)"
}

Write-Output "あなたは「$Result」です。"

答え2


for ($i = 0; $i -lt 10; $i++)
{    
    $row = ""
    for ($j = 0; $j -lt 10; $j++)
    {
        if ($i -eq 0)
        {
            $row += $j.ToString().PadLeft(3," ")
        }
        else
        {
            if ($j -eq 0)
            {
                $row += $i.ToString().PadLeft(3," ")
            }
            else
            {
                $row += ($i * $j).ToString().PadLeft(3," ")   
            }
        }
    }
    Write-Output $row
}

答え3

$HeightList = New-Object System.Collections.ArrayList

#身長を入力してもらう
for ($i = 0; $i -lt 5; $i++) {
    $height = Read-Host ($i + 1) "人目の身長を入力してください。"
    $HeightList.Add($height) | Out-Null
}

#各自の身長を表示
for ($i = 0; $i -lt 5; $i++) {
    $text = "" + ($i + 1) + "人目の身長は" + $HeightList[$i] + "です。"
    Write-Output $text
}

#最大値を表示
$MAX = 0
foreach($height in $HeightList)
{
    if ($MAX -lt $height) {
        $MAX = $height
    }
}
$text = "最も高い身長は" + $MAX + "です。"
Write-Output $text


#最小値を表示
$MIN = [System.Int32]::MaxValue
foreach($height in $HeightList)
{
    if ($MIN -gt $height) {
        $MIN = $height
    }
}
$text = "最も低い身長は" + $MIN + "です。"
Write-Output $text

#平均身長を表示
$SUM = 0
foreach($height in $HeightList)
{
    $SUM += $height
}
$text = "平均身長は" + $SUM/$HeightList.Count + "です。"
Write-Output $text

答え4


$beforeWord = "しりとり"
Write-Output "しりとりスタート!"
Write-Output $beforeWord

while ($true)
{
    $word = Read-Host

    if ($word.Substring(0,1) -ne $beforeWord.Substring($beforeWord.Length - 1, 1))
    {
        $text = "始めの文字が" + $beforeWord.Substring($beforeWord.Length - 1, 1) + "になっていません。"
        Write-Output $text
        Write-Output "ゲームオーバー"
        break
    }
    elseif ($word.Substring($word.Length - 1, 1) -eq "ん") {
        Write-Output "「ん」で終わります。"
        Write-Output "ゲームオーバー"
        break
    }
    else {
        $beforeWord = $word
    }
}