プログラム問題例と詳しい解き方
情報Ⅰで頻出の処理を、DNCL・Python・JavaScriptの3言語で比べます。 文法が変わっても、値を追う手順は同じです。
ここでは答えだけでなく、どの変数をどの順番で確認すればよいかを示します。 まず問題文とコードから自分の答えを出し、その後に「解き方」を開いて確認してください。
EXAMPLE 1・基礎
配列の添字を読み取る
問題:実行後に表示される値を答えてください。
DNCL
Data = [5, 10, 15, 20] x = Data[1] 表示する(x)
Python
data = [5, 10, 15, 20] x = data[1] print(x)
JavaScript
const data = [5, 10, 15, 20]; const x = data[1]; console.log(x);
答えと解き方を見る
答えは 10 です。
3言語とも、配列の先頭は添字0です。したがって、添字と値の対応は
0→5、1→10、2→15、3→20となります。[1]は「1番目」ではなく、
先頭から数えて2個目を表す点に注意します。
この種類の問題では、配列の上に0、1、2、3と添字を書くだけで取り違えを防げます。 DNCLでは変数名の先頭を大文字にする例もありますが、添字の考え方はPython・JavaScriptと共通です。
EXAMPLE 2・標準
条件に合う値の個数を数える
問題:実行後に表示されるcountの値を答えてください。
DNCL
Nums = [3, 8, 5, 2] count = 0 i を 0 から 3 まで 1 ずつ増やしながら繰り返す: |もし Nums[i] >= 5 ならば: ⎿⎿ count = count + 1 表示する(count)
Python
nums = [3, 8, 5, 2]
count = 0
for n in nums:
if n >= 5:
count = count + 1
print(count)
JavaScript
const nums = [3, 8, 5, 2];
let count = 0;
for (const n of nums) {
if (n >= 5) {
count = count + 1;
}
}
console.log(count);
答えとトレース表を見る
答えは 2 です。
| 調べる値 | 5以上か | count |
|---|---|---|
| 3 | × | 0 |
| 8 | ○ | 1 |
| 5 | ○ | 2 |
| 2 | × | 2 |
countは条件を満たした回数を保存する変数です。8と5の2個が「5以上」に当てはまるため、 0から2回増えて最終的に2になります。「5より大きい」ではなく「5以上」なので、 5自身も数えることが重要です。
DNCLは添字iで配列を参照し、PythonとJavaScriptは値nを順に取り出しています。 書き方は違いますが、「各要素を1回ずつ調べる」という処理は同じです。
EXAMPLE 3・標準
最大値を順番に更新する
問題:実行後に表示されるmaxValueの値を答えてください。
DNCL
Scores = [68, 91, 74, 86] maxValue = Scores[0] i を 1 から 3 まで 1 ずつ増やしながら繰り返す: |もし Scores[i] > maxValue ならば: ⎿⎿ maxValue = Scores[i] 表示する(maxValue)
Python
scores = [68, 91, 74, 86]
max_value = scores[0]
for score in scores[1:]:
if score > max_value:
max_value = score
print(max_value)
JavaScript
const scores = [68, 91, 74, 86];
let maxValue = scores[0];
for (let i = 1; i < scores.length; i++) {
if (scores[i] > maxValue) {
maxValue = scores[i];
}
}
console.log(maxValue);
答えとトレース表を見る
答えは 91 です。
| 比較する値 | 比較前の最大値 | 比較後の最大値 |
|---|---|---|
| 開始時 | — | 68 |
| 91 | 68 | 91 |
| 74 | 91 | 91 |
| 86 | 91 | 91 |
最初の68を暫定の最大値にします。次の91は68より大きいため更新します。 その後の74と86は91より小さいため更新しません。最大値を求める処理では、 「今までに見た値の中で最大」というmaxValueの意味を保ちながら1個ずつ比較します。
初期値を0にすると、負の数だけを含む配列で誤答になることがあります。 先頭要素を初期値にする方法なら、配列に少なくとも1個の値がある限り正しく処理できます。
3言語を比べるときの要点
- 配列の添字は、いずれも0から始まります。
- DNCLは日本語に近い表記、Pythonは字下げ、JavaScriptは波かっことセミコロンが特徴です。
- 文法ではなく「初期値・条件・更新・繰り返す範囲」に印を付けると、どの言語でも同じ手順で読めます。
- 実行結果を暗算せず、繰り返し1回につき表を1行書くと、添字や更新のミスを減らせます。