IT1-CODE-POCKET

プログラム問題例と詳しい解き方

情報Ⅰで頻出の処理を、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
81
52
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
916891
749191
869191

最初の68を暫定の最大値にします。次の91は68より大きいため更新します。 その後の74と86は91より小さいため更新しません。最大値を求める処理では、 「今までに見た値の中で最大」というmaxValueの意味を保ちながら1個ずつ比較します。

初期値を0にすると、負の数だけを含む配列で誤答になることがあります。 先頭要素を初期値にする方法なら、配列に少なくとも1個の値がある限り正しく処理できます。

3言語を比べるときの要点

  • 配列の添字は、いずれも0から始まります。
  • DNCLは日本語に近い表記、Pythonは字下げ、JavaScriptは波かっことセミコロンが特徴です。
  • 文法ではなく「初期値・条件・更新・繰り返す範囲」に印を付けると、どの言語でも同じ手順で読めます。
  • 実行結果を暗算せず、繰り返し1回につき表を1行書くと、添字や更新のミスを減らせます。

次に読むページ