記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
みなさん、こんにちは。
今回の授業ではいよいよ『プログラミング』について学びます。
「情報」が大学入学共通テストに追加されると発表された際にも「プログラミングが入試に!」などと言われ、不安に思っている人も多いのではないでしょうか。
その不安が少しでも和らぐように、プログラミングの基礎をひとつずつ抑えていきましょう。
それでは最後までお付き合いください!
目次
「そもそもプログラム、プログラミングとは何か」ということから考えてみましょう。
プログラムとは、コンピュータに特定のタスクを実行させるために記述された一連の命令のことです。
プログラムは、コンピュータが理解できる形式で書かれた指示の集まりであり、コンピュータはこの指示に従って動作します。
たとえば、電卓で計算をする、ウェブサイトにアクセスする、ゲームをプレイするなど、これらの動作はすべてプログラムによって実行されています。
一方、プログラミングとは、プログラムを作成する行為そのものを指します。
つまり、プログラミングとは、コンピュータが実行するための指示を順序立てて書き出す作業のことです。
プログラミングは、問題を解決するための手順やルールを考え、それをコードとして表現するプロセスです。
例を挙げると、
- プログラムは、料理のレシピに例えられます。レシピには、料理を作るための手順や必要な材料が順番に書かれています。このレシピに従うことで、料理が完成します。
- プログラミングは、そのレシピを書くことに相当します。料理の手順を考え、どの材料をどの順番で使うか、どのように調理するかを決めてレシピを作る作業がプログラミングです。
では、プログラムを作成するには、どのような基本的な構造が必要でしょうか?
ここで重要なのが、プログラムを動作させるための3つの基本構造です。
これから紹介する『順次構造』、『反復構造』、『分岐構造』が、プログラムの基本的な動作を支える重要な要素となります。
これはプログラムの基本中の基本です。
順次構造では、プログラムが上から下へ、順番に命令を実行していきます。
コンピュータが一つひとつの命令を順番に処理することで、タスクが完了します。
順次構造の例
プログラム: 2つの数を足し算して結果を表示するプログラム
# 順次構造の例
# 1. ユーザーから2つの数を入力する
num1 = int(input("1つ目の数を入力してください: "))
num2 = int(input("2つ目の数を入力してください: "))
# 2. それらを足し算する
sum = num1 + num2
# 3. 結果を表示する
print("2つの数の合計は:", sum)
説明:このプログラムは順次構造を持っており、入力、計算、出力の順に実行されます
このプログラムのように、処理を実行するコードだけを書けば、上から順に下に向かって実行されていきます。
反復構造では、ある一連の処理を何度も繰り返します。
ループとも呼ばれるこの構造は、特定の条件が満たされるまで「繰り返し(ループ)」で囲まれた処理を繰り返すために使われます。
反復構造の例
プログラム: 1から10までの数字を表示するプログラム
# 反復構造の例# 1から10までの数字を繰り返し表示する
for i in range(1, 11):
print(i)
説明:このプログラムでは for
ループを使って1から10までの数字を順に表示しています。反復構造により、同じ処理が複数回繰り返されます。
変数 i が1から11(になる)まで、「変数iを表示する」というforの中の処理を繰り返します。
この場合、
・繰り返し条件:変数 i が1から11(になる)
・繰り返す処理:変数iを表示する
となります。
分岐構造は、特定の条件に応じて処理の流れを変える構造です。
条件が満たされた場合に実行する処理を選択することで、プログラムはより複雑で柔軟な動作が可能になります。
難しく感じるかもしれませんが、分岐処理は「質問・確認」と考えましょう。
分岐地点で「〇〇が当てはまりますか?」と質問(確認)され、YesかNoかでそのあとの処理が変わる、というものです。
分岐構造の例
プログラム: 入力された数が偶数か奇数かを判定し、それに応じてメッセージを表示するプログラム
# 分岐構造の例# 数値を入力してもらう
num = int(input("数を入力してください: "))
# 入力された数が偶数か奇数かを判定する
if num % 2 == 0:
print(num, "は偶数です。")
else:
print(num, "は奇数です。")
説明:このプログラムでは if
文を使って、入力された数が偶数か奇数かを判定しています。条件によって実行される処理が変わる、これが分岐構造です。
この「if」の部分が「分岐」です。変数「num のあまりが0ですか」と質問・確認されています。
当てはまる、つまりYesなら、「num(変数)は偶数です」と表示し、
当てはまらない、つまりNoなら、「num(変数)は奇数です」と表示するように指示しています。
ここからはプログラミングの基本項目を学びます。
先ほど、プログラムの基本構造について学びましたが、なぜ学んだのかを理解しておきましょう。
なぜプログラムの基本構造を理解することが重要なのか。
プログラムは、コンピュータに特定のタスクを実行させるための指示の集まりです。
この指示をどのように組み立てるかが、プログラムの動作を決定します。
基本構造を理解することで、複雑な処理をシンプルに表現でき、効率的で分かりやすいプログラムを作成することが可能になります。
具体的には、順次構造、反復構造、分岐構造の3つの基本構造が、プログラムを作成する際の基礎となります。
すべてのプログラムはこの3つの構造の組み合わせで成り立っているのです。
プログラムにおいてこの3つの構造が使われているので、それぞれの性質や特徴を理解してもらったのです。
では、これからプログラミングの基本項目について説明します。
『値と文字列』、『変数』、『配列』、『算術演算子』、『論理演算子』、『比較演算子』、『制御文(条件分岐、繰り返し)』、『関数』、そして『コメント』が含まれます。
これらの項目は、プログラムを作成し、効率的に動作させるために欠かせない要素です。
それぞれを細かく説明する前に、そもそも大学入学共通テストに出題されているコードはどういったことが書かれているのかを確認しておきましょう。
さっそく、試作問題で出題されたプログラミング問題を見てみましょう。
※2つ目の図(問3)は1つ目(問2)で登場した「変数」「繰り返し」「関数」も使われていますが、図の中に解説として含めていません。
このように、プログラムは上記9つのポイントを押さえれば読み解けるのです。
順に解説しますが、その前に、そもそもプログラムにはどう言ったことが書かれているのかという点を確認しましょう。
情報1で出てくるプログラミング問題のプログラムの中では、
プログラムの中では
- 定義や設定
- 何かしらの動作や処理の実行
のどちらかしか行われていません。
つまり、プログラム内の各行の文章は上記のいずれかの意味を表しているのです。
試作問題で確認しても、それがわかります。
この記事では、プログラムのそれぞれの行で、上記のどちらが行われているのかを読むことができることが目標です。
前置きが長くなりましたが、ここから基本項目を順に解説していきましょう。
まずは『値』と『文字列』です。
値とは、プログラムで扱う数やデータのことを指します。
これには整数、小数、論理値(true/false)などが含まれます。
値は、プログラム内で計算されたり、表示されたり、他の処理に使われたりします。
一方、文字列は、文字の集まりを意味します。
例えば、『Hello, World!』や『プログラミング』などが文字列です。
文字列は、「” ”(ダブルクオーテーション)」囲んで表現します。
たとえば、大学入学共通テストで使う疑似言語では次のように書きます。
例
- 値: 3 , 100 ,10000 など
- 文字列: ”プログラミング”、”情報1”、”abcdefg” など
変数とは、数字や文字などのデータを格納するために用意する箱のようなものです。
プログラムでデータを扱う際、値を直接使うのではなく、変数に代入してから使うことが多いです。
変数を使ってプログラム内でデータを一時的に保存し、そのデータに名前を付けて後から参照できるようにします。
変数があると、値を簡単に操作したり、変更したりとプログラムが柔軟に動作し、複雑な処理をシンプルに記述することができます。
変数の定義や代入
変数を使う際・定義する際には
- 英数字を使う
- 格納するデータの性質などを表す単語やローマ字で表記する 例:tate , yoko , width , length
- 変数名が複数の単語にわかれるときには「_」で繋ぐ 例:kingaku_kei
- データを変数へ格納する(代入する)ときには「=」を使う
というルールがあります。
特に最後のデータを変数へ格納する(代入する)ときには「=」を使うというルールは非常に重要です。
変数にデータを書くのすることを「代入する」といい、「=(イコール)」を使います。
使用例
#変数 length に 3 を代入する。
length = 3
#変数 fruit に ”りんご” を代入する
fruit = "りんご"
上記のコードが表す意味は、それぞれ
- (3行目)『length』という名前のついた変数(箱)にデータ(「3」)を代入する
- (7行目)『fruit』という名前のついた変数に「りんご」という文字列データを代入する
となります。
重要な点は
- 数学で使う「=」の意味と違うということ、
- 代入している文(コード)を読む際には、右辺から解読すること
です。
変数をなぜ使うのか
変数を使う理由は主に以下の3つです。
- 再利用性: 一度値を変数に保存すると、同じ値をプログラム内で何度でも利用できます。これにより、コードが簡潔になり、ミスも減ります。
- 可読性: 変数に意味のある名前を付けることで、プログラムの目的やデータの役割が明確になり、コードが読みやすくなります。
- 柔軟性: 変数の値を簡単に変更できるため、プログラムの動作を調整しやすくなります。たとえば、ユーザーの入力に応じて動作を変えるプログラムを作成する際に非常に便利です。
例を見ていきましょう。
まず、変数を使わずに同じ処理を行うコードを見てみましょう。
# 変数を使わない例
total_cost = 150 * 3 # 商品1つの価格が150円で、3つ購入した場合の合計金額
print("合計金額は:", total_cost, "円です。")
このコードは動作しますが、商品1つの価格や購入する商品の数が固定されており、これらを変更する場合はコードを直接書き換えなければなりません。
また、 150
や 3
という数字が何を意味しているのかが一目で分かりにくく、可読性が低いです。
次に、同じ処理を変数を使って書いたコードを見てみましょう。
# 変数を使った例
price_per_item = 150 # 商品1つの価格
number_of_items = 3 # 購入した商品数
total_cost = price_per_item * number_of_items # 合計金額を計算
print("合計金額は:", total_cost, "円です。")
この例では、price_per_item
という変数に商品1つの価格を、number_of_items
という変数に購入した商品の数を保存しています。そして、これらの変数を使って合計金額を計算し、表示しています。
コード例では、price_per_itemに150を、number_of_itemsに3を代入していますが、これらの数字が変更となった場合、2行目、3行目のみを変更すれば済むことになります。
まとめると、
1. 再利用性:
- 商品の価格や購入数が変わった場合でも、変数
price_per_item
やnumber_of_items
の値を変更するだけで、簡単に合計金額を再計算できます。
2. 可読性:
- 変数名(
price_per_item
やnumber_of_items
)が何を意味しているのかが明確で、コードを読んだ他の人にもわかりやすいです。
3. 柔軟性:
- プログラムを使って他の商品の合計金額を計算したり、異なるシナリオに簡単に対応できるようになります。たとえば、商品の価格が変わるたびにプログラム全体を書き換える必要がなく、変数の値を変えるだけで済みます。
このように、変数を使うことでプログラムはより柔軟で管理しやすくなります。変数を使わずにすべての値を直接コードに書いてしまうと、プログラムが長くなり、メンテナンスが難しくなります。これが、変数を使う最大のメリットです。
より柔軟で、再利用可能なものになります。これが、変数を使う最大のメリットです。
次は『配列』についてです。
配列とは、同じ種類の値を複数保存できるデータ構造です。簡単に言うと、配列とはデータを格納する変数のまとまりのことです。
1つの変数につき、1つのデータしか格納できませんが、変数を束にして持つ配列なら、それぞれの変数にデータを格納することができるため、複数のデータを処理する時に役立ちます。
配列も変数同様に、「定義や設定」に着目しましょう。
配列の定義や設定
配列を使う際・定義する際には
- 英数字を使う
- 格納するデータの性質などを表す単語やローマ字で表記する 例:tate , yoko , width , length
- 変数名が複数の単語にわかれるときには「_」で繋ぐ 例:kingaku_kei
- データを変数へ格納する(代入する)ときには「=」を使う
- 配列名は先頭文字が大文字
- 「配列名[]」で表記し、[]の中の数字は添字(そえじ)といい、配列が持つ変数(箱)の数を表す
- 添字は(特に問題文で説明がない限り)0 から始まる
というルールにもとに行われます。
使用例
#配列 tokuten の 1番目の変数に 80 を代入する。
tokuten[0] = 80
#配列 seiseki の 3番目の変数に ”優” を代入する
seiseki[2] = "優" #添字は0から始まるので、3番目の変数の添字は2となる
配列は、後述する「繰り返し文」とよく併せて使われます。
続いては算術演算子です。
算術演算子とは、「値を計算するために使われる記号」のことで、その多くが算数・数学でも使われているものです。
一部、プログラムならではの表現がありますので、その点を覚えてプログラムを読み解くようにしましょう。
プログラムで登場する算術演算子(加減乗除)は、
演算子 | 意味 |
---|---|
+ (プラス) | 加法 |
- (マイナス) | 減法 |
* (アスタリスク) | 乗法 |
/ (スラッシュ) | 除法 |
で表します。ポイントは
- 掛け算の時には「×」ではなく「*」(アスタリスク)
- 割り算の時には「÷」ではなく、「/」(スラッシュ)
を使う
ということです。
厳密には、整数の除法の際には、商を出すために「÷」が使われます。
また、プログラム独特なものは、
演算子 | 意味 |
---|---|
+ (プラス) | 文字列や(変数の)値を連結 |
% (パーセント) | 除法における余り |
** (アスタリスク(2つ)) | べき乗 |
となります。それぞれの演算子が表す意味をしっかり覚えましょう。
さらに、四則演算を行う際には、数学同様、加減乗除の優先順位となります。つまり、「+とー」「×と÷」が同じ式の中にある場合は、乗法と除法が優先されます。
そのため、加法・減法を優先的に行いたい場合は、数学同様()で囲ってあげましょう。
使用例
# 例
heikin = 35 + 50 + 60 + 70 + 50 / 5
# この場合、225 が代入されます。一方、
heikin = ( 35 + 50 + 60 + 70 + 50 ) / 5
# この場合、53 が代入されます
ここで重要なことは、「=」です。「=」は代入を意味するのでしたね。
つまり、
heikin = ( 35 + 50 + 60 + 70 + 50 ) / 5
という文章も、
NG
「heikin」が、 ( 35 + 50 + 60 + 70 + 50 ) / 5 の結果と等しい
という意味ではなく、
GOOD
( 35 + 50 + 60 + 70 + 50 ) / 5 の結果 を変数「heikin」に代入する
という意味となります。
つまり、「=」が使われている式は基本的には右辺の処理を優先するということを覚えておきましょう。
論理演算子とは
「かつ」「または」「否定(=●●ではない)」のことで、複数の条件を組み合わせて、より複雑な条件を表すときに使います。
数学でも使いますよね。ベン図の重なり合うところ、そうでないところなど指定の仕方によって指す範囲が異なります。
そして、情報Iのプログラムにおいてはそれぞれ
- かつ : and
- または : or
- 否定 : not
と表記されます。
使用例
# AかつB
A and B
# AまたはB
A or B
# AがBでない
not A == B
具体的な例を表記すると、
# 変数 english には英語の点数が代入されている。
# 変数 math には数学の点数が代入されている
# 英語・数学の点数が両方80点以上
english >= 80 and math >= 80
# 英語・数学の点数のいずれかが80点以上
english >= 80 or math >= 80
# 英語・数学の点数が両方80点以上でない
not (english >= 80 and math >= 80)
このように
条件式 (and , or , not)条件式
という形式で記述します。
論理演算子を用いた条件分岐はプログラムにおいても非常に多用さるため、それぞれどのような意味か、ベン図のどの範囲を指すのかという点を意識して把握できるようになりましょう。
比較演算子は大小関係を示すために使用します。
比較演算子は数学でも使用しているため、馴染み深いものばかりです。
条件分岐や論理演算子と併用することが非常に多いので、押さえておきましょう。
比較演算子 | 意味 | 記述方法 |
---|---|---|
== | 等しい | x == y |
< | 小なり | x < y |
> | 大なり | x > y |
<= | 以下 | x <= y |
>= | 以上 | x >= y |
!= | 等しくない | x != y |
一見して、その演算子の意味がわかりやすいかと思いますが、プログラムならではのルールも押さえておきましょう。
- 等しいは「=」ではなく「==」で表現する。
- 「等しくない」という表現ができる(「 != 」を使う)
- 「以上 ≦」、「以下 ≧」は「>」と「=」をそれぞれ書く「 <= , >= 」
続いて制御文です。まずはその中の一つ「条件分岐」です。
条件分岐とは「もし〜なら」という条件を示す文章を用いて、
- 値などが条件を満たす場合
- そうでない(条件を満たさない)場合
それぞれで実行する処理を分けるために用いられます。
プログラミングの基本構造で学んだ「分岐構造」を表現します。
実際のプログラミング言語でも「if(条件式)」のような記述方法で条件分岐を設定していくのですが、
情報Iでは
もし (条件式) ならば:
└ # 条件式を満たすときの処理
と表記し、意味は
▶︎条件式で書かれていることを満たす場合、「 # 条件式を満たすときの処理」を行いなさい、満たさない時には、制御文の範囲より後ろ(続き)の行のコードへ移りなさい
となります。
それに加えて、いくつかポイントを押さえましょう。
条件式を満たす時の処理が複数ある場合
もし (条件式) ならば:
| # 条件式を満たすときの処理1
| # 条件式を満たすときの処理2
└ # 条件式を満たすときの処理3
もし~ならばの条件を満たすときに行いたい処理を「|」と「└」の範囲で囲います。なお、処理の最後の行は「└」を使います。
条件式が複数ある場合
もし (条件式A) ならば:
| # 条件式Aを満たすときの処理
そうでなければ:
└ # 条件式Aを満たさないときの処理
もし (条件式A) ならば:
| # 条件式Aを満たすときの処理
そうでなくもし (条件式B) ならば:
| # 条件式Bを満たすときの処理
そうでなければ:
└ # 条件式A、条件式Bを満たさないときの処理
続いては制御文の2つ目「繰り返し」です。
プログラムの基本構造における「反復構造」を表現します。
繰返し処理は
(繰り返す条件):
| # 処理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つの例のように
- 条件式を満たす間、繰り返す
- 変数を用いて一定回数繰り返す
2つのパターンが多く出てくるでしょう。
繰り返し処理を用いて、どのような処理結果を得ようとしているのかをコードから読み取るようにしましょう。
関数はメソッドと呼ばれ、処理をまとめたものとして捉えましょう。
実際のプログラミング言語にはすでにプリセットされている関数とエンジニアが定義する(いわばオリジナルの)関数の2つに分けられます。
「情報」の問題では問題文中に定義されていることが多いため、その関数でどのような処理がひとまとめになっているかを確認するようにしましょう。
なお関数は
関数名(引数)
と記述します。
試作問題でも出てますね。
関数を捉える上で、覚えておきたいことは「引数(ひきすう)」です。
引数とは「追加情報」のようなもので、引数があれば、「引数(で与えられた値)で関数を実行する」ことになります。
英語で言うならば、目的語にあたるのが引数です。
たとえば
使用例
# 関数の例
計算(50)
表示する("あなたの点数は", tensu ,"です")
# 上記の例では「計算()」「表示する()」が関数名
# 上記の例ではそれぞれ「50」、「"あなたの点数は", tensu ,"です"」が引数
上記の例なら
”引数「50」を使って、「計算」という関数を実行する”、”引数「”あなたの点数は”, tensu ,”です”」を使って「表示する」という関数を実行する”という意味になります。
このように引数は関数を実行する際の追加情報(関数の処理対象)として使われるものとして捉えておきましょう。
最後はコメントです。
コメントは、その名の通り、プログラムの中に記述して細く説明をするために記述します。
「情報I」では「#」から始まる文章がコメントとなります。コメントとして書かれた文章はプログラム実行時には無視されるルールとなります。
たとえば以下のようなプログラムコードでは
使用例
#変数 length に 3 を代入する。
length = 3
#変数 fruit に ”りんご” を代入する
fruit = "りんご"
- (1行目)「#変数 length に 3 を代入する。 」
- (5行目)「#変数 fruit に ”りんご” を代入する 」
がコメントとなり、プログラム実行時にはコンピュータに無視される文章となります。
一方でコメントがついていない
- (3行目)length = 3
- (7行目)fruit = “りんご”
の文については、実行される処理となります。
このコメントがあるかないかは問題によってさまざまですが、コメントが記載されている時には解読の手助けとして必ず読むようにしましょう。
今日の授業では、プログラミングの基本的な要素について学びました。
値や変数、配列といったデータの扱い方から、算術演算子や論理演算子、比較演算子を使った処理、そして条件分岐や繰り返しといった制御構造、さらには関数を使ったプログラムの整理方法まで幅広く取り上げました。また、コメントの重要性も理解できたと思います。
これらの基本項目は、プログラムを作成する上で基本となるものであり、これからさらに複雑なプログラムを読み解く際にも役立ちます。ぜひ問題演習を通じて、ひとつひとつを理解してくださいね。
スポンサーリンク