【情報I】プログラミング問題に強くなる10個の基礎(苦手な人必見)

eyecatch-3360v2

生徒
生徒

情報1のプログラミング問題って難しくない?

と感じている人に向けた記事となっています。

プログラミング問題とは「プログラムを読み解く」問題です。とは言っても、プログラムの読み方を学んでいる人は少ないはず。

生徒
生徒

なんかプログラムで出てくる「=」って、数学のイコールと違うの?よくわからないんだけど…

というように、そもそも解き方がわからない人も多いのではないでしょうか

しかし、プログラム問題は実は以下を理解できれば読み解けるようになるのです。

プログラム問題を読むために知っておくべきこと
  1. プログラムを構成する3種類の構造
  2. プログラミングの基本項目10個

そこでこの記事では、学習塾で「情報I」を指導している筆者が、プログラム問題を読むためのコツを順序立てて紹介します。

この記事を読めば「情報I」のプログラム問題に強くなりますよ!

実際の塾での授業の2~3回分の分量があります。

長くて文字も多いので一度で読み切らなくてもかまいません、そんなときは何度も読んでみてください!

注意①

この記事でのコードの記述については「情報」科で規定する擬似言語の表記に則っています。

注意②

情報1のプログラム問題を解くためにイメージを掴みやすいような言葉を選ぶように心がけています。そのため、プログラミングそのものの原理原則や理屈と照らし合わせた時に齟齬がある場合もありますがご了承ください。

本記事の信頼性

この記事の信頼性
kz2
コトゼニ(@kotozeni
  • 教育業界・学習塾で10年以上勤務。教員免許状所持
  • 500人以上の生徒に学習・進路指導:合格率 94.7%
  • プロ家庭教師・小学校学習支援サポーター、校内予備校の教室長
  • AIツールやオンラインでの豊富な指導経験を持つ
  • 不登校傾向のある生徒やギフテッドの特徴を持つ生徒も指導中

プログラムを構成する3種類の構造

「情報」のプログラミング問題を理解するために、まずはプログラムの3つの構造を理解しよう。ここでは、Scratchというビジュアルプログラミング言語を用いて説明する。

ソースコード・プログラムを読むうえでの前提

はじめに、ソースコードを読むうえでの前提を念のために確認する。

※「ソースコード」とはコンピュータに指示を出すためのコードのこと

※ここではScratchのソースコードは「ブロック」と表記する

【プログラム起動時】

プログラムを実行(起動)すると(1行目)から順に行われる。

※Scratchでは「(緑の旗)が押されたとき」ブロックを指す。

【プログラムの終了時点】

プログラムの中に書かれているコードのすべてを実行したらプログラムを終了

※Scratchではつながっているすべてのブロックが実行された時点で終了

プログラムの読む順番

さきほど「プログラムを実行(起動)すると(1行目)から順に行われる。」と書いたが、このように上から順番に処理を実行する方法を順次構造という。

順次構造

これはプログラムの基本中の基本。基本的にプログラムは順次構造で作られている。

順次構造では、プログラムが上から下へ、順番に命令を実行する

コンピュータが一つひとつの命令を順番に処理することで、タスクが完了する。

反復構造

反復構造では、ある一連の処理を何度も繰り返す。ループとも呼ばれるこの構造は、特定の条件が満たされるまで「繰り返し(ループ)」で囲まれた処理を繰り返すために使われる。

図2のプログラムにおいて、

使っている「ループ」は

図3の「3回繰り返す」であり、

繰り返す内容は、図4の「X座標を50ずつ変える」~「 Y座標を50ずつ変える」となる。

この場合は、先ほどの順次構造のプログラム(図1)を3回実行した結果と同じとなる。

図5を用いて反復構造のコードの追い方を確認しよう。

図2のプログラムは(強制的に)「3回繰り返す」ことになる。

つまり1回目の「 Y座標を50ずつ変える」が実行された後、

その後も「X座標を50ずつ変える」「1秒待つ」「 Y座標を50ずつ変える」を(それぞれ合計3回)繰り返し、 3回目の「 Y座標を50ずつ変える」を終えた時点で、プログラムは終了する。

つまり、図2のプログラムは(順次構造だけで書いた)図6のプログラムと同じなのである。※順次構造だけで書くとコードが冗長になるので、繰り返しを使って記述する。

図5
図6

条件構造(分岐構造)

分岐構造は、特定の条件に応じて処理の流れを変える構造をいう。

難しく感じるかもしれないが、分岐処理は「質問・確認」と考えよう。

分岐地点で「〇〇が当てはまりますか?」と質問(確認)され、YesかNoかでそのあとの処理が変わる、というものである。

たとえば、図7のような条件分岐のコードが備わった

ルーレットがあったとする。

このルーレットが図8のように青色で止まれば、「(青)色に触れた」という条件を

満たしたことになり、その時の処理「『当たり』と言う」が実行される。

図8

分岐構造は、入れ子構造にすることができる。入れ子構造とは、条件分岐の中に、さらに別の条件分岐を入れる構造のこと。複数の条件を順番に確認して処理を決めたいときや、最初の条件に合った後で追加の条件を調べるときに使う。

この答えは「『まだ大丈夫だよ』と言う」である。

1つ目の質問「『体力>50』ですか?」にはNoとなるが、2つ目の質問「『体力>30』ですか?」はYesとなるからである。

プログラムを構成する3種類の構造まとめ

すべてのプログラムはどれだけ複雑になったとしても、これらの

  • 順次構造
  • 反復構造
  • 条件分岐(分岐構造)

の3種類でできている。

つまり、

プログラム(を作っているソースコード)は、

順次構造をベースに、

やりたいことに応じて(必要になったら)

・反復構造

・条件分岐(分岐構造)

を挿入しているだけなのである。

まずはこの点を把握しよう。

そこに、

  • 値を扱うための「変数」、「配列」
  • 値を計算するための「演算子」
  • 決まった処理を(書くのが面倒なので)まとめておくための「関数」
  • コードを読み解くためのヒントである「コメント」

これらが、プログラムでやりたいことを実現するために考えられたアルゴリズムに沿って散りばめられているだけなのである。

プログラムのソースコードは

  • 他者が読んでも分かりやすい
  • 修正しやすい
  • 間違えにくい
  • 同じ処理を何度も書かない
  • 必要以上に無駄な処理をしない

ことを目標にされる。そのために「変数」や「配列」、「関数」といったプログラミング特有の書き方を通して「良いソースコード」へと改善していくのである。

良いソースコードへと編集していく過程を例として挙げておく。

良いソースコードへの編集過程1
良いソースコードへの編集過程2

プログラム問題を読み解く10つのポイント

ここからは「プログラミングの基本項目」を順に確認しよう。

そもそもなぜ、プログラミングの基本項目を順に確認するのか。それは

共通テスト形式の問題に頻出する、配列を使った繰り返し処理を読めるようになるためである。

言い換えると、「基本項目を学ぶゴールは『配列を使った繰り返し処理を読めるようになる』こと」と捉えても良い。

配列を使った繰り返し処理は、インデックスループとも呼ばれ、配列に入っている複数の値を、番号を使って一つずつ取り出し、順番に処理するプログラムである。

このプログラムを読むために、変数・配列・演算子・条件分岐・繰り返しを一つずつ学ぶのである。

つまり、インデックスループは、プログラミングの基本項目を組み合わせた「総合問題」とも言える。

具体的には以下のコードを読めることをゴールとしよう。

解読目標

この短いコードの中には、基本事項がほぼ全部入っている。

解読目標の解説

基本項目を学んだ後にこのコードを読めるようになるために、部品(基本項目)を一つずつ確認しよう。

値・文字列

プログラムの中で「値」というのは、データそのもののことを指す。

たとえば…

– 100

– 「こんにちは」

– true(ほんとう)/false(うそ)

これらすべてが「値」である。

プログラム内では、値を変数に入れたり、計算したり、画面に表示したりする。

「文字列(もじれつ)」とは、文字や文章を1つのかたまりとして扱う値のこと。

値・文字列ポイント

この文字列や値を共通テストではどのように表記されるかを確認しよう。

変数

情報Ⅰ-変数

変数とは値に「名前」をつけて、あとから何度でも使えるようにしたり可読性を上げたりするための仕組みのこと。

難しい説明よりも、値を使うときには箱(変数)を使うのが原則。と覚えておくとよい。

また問題を解くコツとして、変数には値などのデータが入っているため、プログラムで登場した際には、「(そのコードの行の時点で、)その変数にどのような値・データが入っているのか」を意識するようにしましょう。

コトゼニ
コトゼニ

現実世界でも液体は箱(入れ物)に入れないと思うように扱えないですよね。

同じようにプログラムでも値は入れ物に入れないと処理できないとイメージしましょう。

変数の代入【重要】

変数の中に値を入れることを「代入」といい、

「=」を使う。図11のコードは図12のように、「変数に値を代入する」という意味である。
(Scratchでは図13のブロックのように「●●にする」という表記)

というルールがあります。

コトゼニ
コトゼニ

重要な点は数学で使う「=」の意味と違うということです!

 そもそもなぜ変数を使うの?

●計算の意味を分かりやすくする(可読性)

●値が変わっても利用しやすくする(再利用性)

ためである。Scratchで例を確認しよう。

改めて、このことから、プログラムの中で値を使うときには変数を使うのが原則だと覚えておくこと

配列

配列とはデータを格納する変数のまとまりのこと

変数は1つにつき、1つのデータしか格納できないが、変数を束にして持つ配列なら、それぞれの変数にデータを格納することができるため、複数のデータを処理する時に役立つ。

そして擬似言語での表記ルールを確認しよう。

ここで出てきた「要素」「添字(そえじ)」。これらは配列の特徴である。

配列で覚えるべき特徴はこれらを含めて3つだけ。

なお、「要素」は「値を格納する箱そのものを指す」文脈で使われることもあり、

添字」とは「要素番号を差すための数字」と考えよう。

また、「配列の長さ」は「要素数」ともいう。

要素の指定

では実際にソースコードの中で、配列の特定の箱を使うときにはどうするのかを確認しよう。

演算子(算術演算・比較演算・論理演算)

数と数を計算する「算術演算子」、大きい・小さい・同じを判定する「比較演算子」、条件を組み合わせる「論理演算子」が演算子である。演算子はどれも数学の記号と似ていますが、プログラミング特有のものを中心に覚えるようにしよう。

制御文(条件分岐)

条件分岐は3つの構造の一つ「条件分岐」を作るために使う。「IF文」とも言う。

ここでは擬似言語で用いられる3つのパターンの「条件分岐」をScratchでの表し方と比較しながら把握しよう。

制御文(繰り返し)

情報Ⅰ-繰り返し

続いては制御文の2つ目「繰り返し」です。

プログラムは、基本的に書かれた順に上から実行されていきます。そのことを「順次」構造と言います。

この「順次」に「条件分岐」と「繰り返し」の3つでどれだけ大きく複雑なプログラムも構成されていると言われています。

そのため、先程紹介した「条件分岐」と、この「繰り返し」を読み解けるようになれば、プログラムをより一層読み解きやすくなるのです。

繰返し処理は

(繰り返す条件):
| # 処理1
| # 処理2
└ # 処理3

と表記します。意味は

  • そもそも(繰り返す条件)で書かれていることを満たさない場合は「繰り返しブロック」を抜け出し、それ以降の処理を進める
  • (繰り返す条件)で書かれていることを満たす場合、「 # 処理1」「#処理2」「#処理3」を順に行いなさい
  • 処理1〜3を終えた時点で、もう一度(繰り返す条件)を見直し、条件を満たしているか確認しなさい
  • (繰り返す条件)を満たしていれば、再度「処理1〜3」を実行しなさい
  • (繰り返す条件)を満たさなくなれば、制御文の範囲より後ろ(続き)の行のコードへ移りなさい

となります。

条件分岐の時同様に、繰り返して行いたい処理を「|」と「└」の範囲で囲います。なお、処理の最後の行は「└」を使います。

実際の例を見てみましょう。

使用例

# 1〜10まで足した合計を求めるプログラム
# 合計は 変数 goukei に代入する。

  goukei = 0 

# 繰り返し処理
  x = 1 
  x <= 10 の間繰り返す:
  | goukei = goukei + x
  └ x = x + 1 
 
  表示する(goukei)

# 実行結果: 55

解説

8行目から繰り返し文が登場しています。

8行目に到達した時点で、xに代入されている値は「1」です(7行目で定義されている)。そのため、繰り返し条件である「x≦10」を満たすため、9行目、10行目の処理に移ります。

9行目では、変数同士を算術演算子で演算しています。そのときには右辺を優先して演算し、その結果を左辺の変数に代入するのでしたね。

ですので、9行目の時点で変数goukeiは「0」が代入されているため、

goukei + x  #goukei は 0、xは1のため、0+1 という計算式になる。

となり、goukeiに右辺の演算結果「1」が改めて代入されることになります。

そして、処理の2つ目である、

x = x + 1

へと移ります。

ここでも右辺の演算を優先します。はじめて10行目に到達した時点でxは「1」が代入されているので、

x = x + 1 #xが1のため、1 + 1 という計算式になる。

となり、その結果が改めてxに代入されることになります。

さらに、10行目の処理を終えた時点でxには「2」が代入されているため、繰り返し条件である「x≦10」を満たすため、再び9行目、10行目の処理を実行することになるのです。

9行目、10行目の処理を繰り返し、「x≦10」を満たさなくなった時、繰り返し文の範囲を抜けて、次の処理「12行目」に移ることになります。

使用例2

# 配列 Data に個々の得点が代入されており、その得点の和を求めるプログラム
 Data = {25,40,55,70,62}
# 合計は 変数 goukei に代入する。

  goukei = 0 

# 配列の要素の数だけ繰り返し処理
  x を 0 から Dataの要素の数 まで 1 ずつ増やしながら繰り返す:
  └ goukei = goukei + Data[x] 
 
  表示する(goukei)

# 実行結果: 252

上記2つの例のように

  1. 条件式を満たす間、繰り返す
  2. 変数を用いて一定回数繰り返す

2つのパターンが多く出てくるでしょう。

繰り返し処理を用いて、どのような処理結果を得ようとしているのかをコードから読み取るようにしましょう。

関数

情報Ⅰ-関数

関数はメソッドと呼ばれ、処理をまとめたものとして捉えましょう。

実際のプログラミング言語にはすでにプリセットされている関数とエンジニアが定義する(いわばオリジナルの)関数の2つに分けられます。

「情報」の問題では問題文中に定義されていることが多いため、その関数でどのような処理がひとまとめになっているかを確認するようにしましょう。

なお関数は

関数名(引数)

と記述します。

試作問題でも出てますね。

img試作問題(関数)

関数を捉える上で、覚えておきたいことは「引数(ひきすう)」です。

引数とは「追加情報」のようなもので、引数があれば、「引数(で与えられた値)で関数を実行する」ことになります。

コトゼニ
コトゼニ

英語で言うならば、目的語にあたるのが引数です。

たとえば

使用例

 # 関数の例

  計算(50)

   表示する("あなたの点数は", tensu ,"です")

 # 上記の例では「計算()」「表示する()」が関数名
 # 上記の例ではそれぞれ「50」、「"あなたの点数は", tensu ,"です"」が引数

上記の例なら

”引数「50」を使って、「計算」という関数を実行する”、”引数「”あなたの点数は”, tensu ,”です”」を使って「表示する」という関数を実行する”という意味になります。

このように引数は関数を実行する際の追加情報(関数の処理対象)として使われるものとして捉えておきましょう。

コメント

情報Ⅰ-コメント

最後はコメントです。

コメントは、その名の通り、プログラムの中に記述して細く説明をするために記述します。

「情報I」では「#」から始まる文章がコメントとなります。コメントとして書かれた文章はプログラム実行時には無視されるルールとなります。

たとえば以下のようなプログラムコードでは

使用例

#変数 length に 3 を代入する。

length = 3

#変数 fruit に ”りんご” を代入する

fruit = "りんご"
  • (1行目)「#変数 length に 3 を代入する。 」
  • (5行目)「#変数 fruit に ”りんご” を代入する 」

がコメントとなり、プログラム実行時にはコンピュータに無視される文章となります。

一方でコメントがついていない

  • (3行目)length = 3
  • (7行目)fruit = “りんご”

の文については、実行される処理となります。

このコメントがあるかないかは問題によってさまざまですが、コメントが記載されている時には解読の手助けとして必ず読むようにしましょう。

コトゼニ
コトゼニ

実際のプログラムファイルの中にもたくさんコメントは記述されます

練習問題

最後に、上記のことを踏まえてプログラムを読んでみましょう。

まずは1〜13の数字の中で好きな数字を思い浮かべてください。そして以下のコードにおいて、コメントの通りの処理ができるように、「ア」~「オ」にあてはまるものを選択肢から選んでください。

# 1〜13の中で好きな数字を思い浮かべ、変数 num に代入します。

  num = 【思い浮かべた数】

# 以降のそれぞれの計算結果は変数 result に代入します。
# 思い浮かべた数字に4を足します。

  result = num  4

# さらに倍にします。

  result = result  2

# そこから6を引きます。

  result = result  6

# さらに2で割ります。

  result = result  2

# そこから最初に思い浮かべた数字を引きます。
  result = result  num

# その結果を表示します
  表示する(result)

ア〜オの選択肢

ア〜オに入る適切な演算子を以下から選びなさい。なお選択肢は複数使っても良い。

  1. +
  2. *
  3. /
  4. %

そして解答は以下の通りです。

解答

それぞれコメントに書かれた計算に適した演算子を選びましょう。解答は、

ア:1 (+)

イ:3 (*)

ウ:2 (ー)

エ:4 (/)

オ:2 (ー)

となります。

なお、この処理を行うと、1〜13どの数を選んでも表示される結果(resultの値)は「1」となります。

結果が「1」にならない場合は、演算子が間違えていることになりますので、見直してみましょう。

解説コード

# 1〜13の中で好きな数字を思い浮かべ、変数 num に代入します。

  num = 【思い浮かべた数】

# 以降のそれぞれの計算結果は変数 result に代入します。
# 思い浮かべた数字に4を足します。

  result = num + 4

# さらに倍にします。この時点で右辺の変数 result に入っている値は最初の数に4を足した数字(8行目の結果)です。

  result = result * 2

# そこから6を引きます。この時点で右辺の変数 result に入っている値は12行目の右辺で計算した結果の値です。

  result = result - 6

# さらに2で割ります。この時点で右辺の変数 result に入っている値は16行目の右辺で計算した結果の値です。

  result = result / 2

# そこから最初に思い浮かべた数字(変数 num に入っている値)を引きます。この時点で右辺の変数 result に入っている値は20行目の右辺で計算した結果の値です。
  result = result - num

# その結果を表示します。この時点で変数 result に入っている値は23行目の右辺で計算した結果の値です。
  表示する(result)

まとめ

情報I、大学入学共通テスト「情報」科の範囲となっているプログラミング問題について、読み解くコツを解説しました。

これらのコツを知った上で、プログラムを多く読み解くようにすれば何を行いたいのかがわかりやすくなります。

プログラムコードを読み進めると同時に、各行でどういったことが行われているか、つまり「いま何をしているのか」を読み解けるようになればプログラム問題に強くなれるでしょう。

コトゼニ
コトゼニ

「情報」科で高得点を目指すためにプログラミング問題を解けるようにしていきましょうね。

最後まで読んでいただきありがとうございました。

この記事が少しでも参考になれば幸いです。

それではまたここで会いましょう!

ブログランキング・にほんブログ村へにほんブログ村

ブログ村に参加中です。上のバナーをクリックいただくだけで当ブログにポイントが入ります。いつも応援クリックありがとうございます。

Twitter

Twitter やってます。

新着記事のお知らせをしていますのでぜひフォローしてください!

人気の記事

この記事を読んだ人はこちらの記事も読んでいます。

▶︎「【塾長分析】大学入学共通テスト2025「情報」まとめ【難易度・対策】

共通テスト情報・対策共通テスト「情報」対策に必要なことは?塾講師が解説!勉強法と参考書

▶︎「【最新】(情報1)共通テスト試作問題 難易度と3つの対策

eyecatch-2491【最新】(情報1)共通テスト試作問題 難易度と3つの対策

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA