これまで第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
    }
}


	        		            
	        		            
	        		            
	        		            
	        		            
	        		            
	        		            
	        		            
最近のコメント