メインコンテンツへスキップ
見出し画像

【基本情報 科目B②】擬似言語の記号で迷わない|演算子・変数・引数の基礎

    はじめに

    「擬似言語の ← と = は何が違うの?」
    「変数や引数、戻り値と言われても、何のことかピンとこない……」
    基本情報技術者試験(FE)の科目Bを勉強していて、このような疑問を感じたことはありませんか?

    科目Bでは、擬似言語で書かれたプログラムを読み、その処理内容を理解する力が求められます。しかし、プログラミング未経験者にとっては、アルゴリズム以前に、プログラムで使われる記号や基本文法そのものが最初の壁になりがちです。

    例えば、a ← a + 1 という1行。
    数学の式(a  = a + 1 )として読むと不思議に感じるかもしれませんが、プログラミングではごく基本的な処理です。

    本記事では、IPAの擬似言語の記述形式をベースに、プログラムを読むための前提知識をゼロから整理します。

    この記事でわかること

    • データ型・変数・代入・初期化の意味

    • 算術演算子・比較演算子・論理演算子の読み方

    • 演算子の優先順位と計算順序

    • 配列・添字・二次元配列の基本記法

    • 条件分岐・繰返し処理の基本構文

    • 関数・引数・戻り値・スコープの考え方



    1.擬似言語とは?|まずは基本の読み方を知ろう

    1-1.擬似言語はプログラムの動きを表すための言語

    擬似言語とは、プログラムの処理を、特定のプログラミング言語に依存しない形で表現したものです。

    例えば、次のプログラムを見てください。

    整数型: a ← 3
    整数型: b ← 5
    a ← a + b

    これは、aに3、bに5を設定し、最後にaとbを足した値をaに代入する処理です。処理が終わると、aの値は8になります。

    初めて見ると記号が難しそうですが、実際には「値を用意する」「計算する」「結果を保存する」という単純な操作を表しています。

    1-2.最初に覚えたい基本記法

    特に大切なのは、← は代入、= は比較という違いです。この2つを区別できるだけでも、擬似言語がかなり読みやすくなります。

    画像


    2.データ型・変数・代入・初期化

    2-1.データ型とは?|値の種類を表すもの

    プログラムで扱う値には、整数、文字列、真偽値など、さまざまな種類があります。その種類を表すのがデータ型です。

    画像

    例えば、整数型: age は「整数を保存するageという変数を用意する」という意味です。データ型は、変数にどのような値が入るのかを理解する手掛かりになります。

    2-2.変数とは?|値を保存する名前付きの箱

    変数とは、値を保存しておくための名前付きの領域です。

    例えばscore という名前の箱を用意し、その中に80を入れるイメージです。この場合、変数名が score、データ型が整数型、保存される値が80です。

    整数型: score ← 80

    変数には後から別の値を代入できます。

    score ← 90

    この処理が行われると、scoreの値は80から90に更新されます。

    2-3.代入とは?|右側を計算して左側へ保存する

    擬似言語では、代入を ← で表します。

    a ← 5
    a ← a + 1

    1行目でaに5を保存します。
    2行目では、まず右側の a + 1 を計算します。
    その時点のaは5なので、計算結果は6です。
    最後に、その6をaへ保存します。

    つまり、a ← a + 1 は「aを1増やす」という意味になります。数学の等式とは異なり、代入文は値を更新する命令だと考えましょう。

    画像

    2-4.初期化とは?|最初の値を設定する

    変数を使い始めるときに、初めて値を設定することを初期化といいます。

    整数型: count ← 0

    これは、countという整数型の変数を用意し、初期値として0を設定する処理です。

    一方、次の記述では、変数の宣言だけが行われています。

    整数型: count

    IPAの擬似言語では、値が格納されていない状態を「未定義」といいます。初期値が指定されていない変数に、勝手に0が入っていると考えないことが重要です。


    3.演算子の基本|計算・比較・条件判断の記号

    演算子とは、計算や比較などを行うための記号です。

    3-1.算術演算子

    画像

    特に覚えておきたいのが、mod です。
    7 mod 3 は、7を3で割ったときの余りを求めます。

    3-2.比較演算子

    比較演算子は、2つの値を比較するための記号です。

    画像

    例えば、5 > 3 は正しいので true、5 = 3 は正しくないので false になります。比較演算の結果は、基本的に true または false です。

    3-3.論理演算子|and・or・not

    論理演算子は、複数の条件を組み合わせたり、条件の真偽を反転したりするときに使います。

    • and:両方の条件が真の場合に真

    • or:少なくとも一方の条件が真の場合に真

    • not:真と偽を反転

    例えば、次の条件を考えます。

    (age ≥ 18) and (age < 65)

    これは、ageが18以上、かつ65未満であるかを判定します。ageが30ならtrue、70ならfalseです。and と or の違いは、次の真理値表で確認できます。



    4.配列の基本|複数の値をまとめて扱う

    4-1.配列とは?

    配列とは、複数の値を順番にまとめて保存する仕組みです。

    例えば、3人分の点数を次のように保存できます。
    配列の中に保存されたそれぞれの値を「要素」といいます。擬似言語では、{} を使用して配列の内容を表します。

    整数型の配列: scores ← {80, 90, 70}


    4-2.添字とは?|どの要素を取り出すかを指定する番号

    配列の特定の要素を取り出すときには、[] を使います。例えば、要素番号が1から始まると指定されている場合、次のように読み取ります。

    画像

    この [1] や [2] に指定する番号が、添字(要素番号)です。

    ここで重要な注意点があります。
    配列の要素番号が0から始まるのか、1から始まるのかは、問題文の指定を確認してください。IPAの公開問題では、「配列の要素番号は1から始まる」と明記される例があります。すべての配列が必ず1始まりだと決めつけないようにしましょう。

    画像

    4-3.二次元配列とは?

    二次元配列は、表のように行と列で値を管理する配列です。

    例えば、次の配列を考えます。

    整数型の二次元配列: data ← {{1, 2, 3}, {4, 5, 6}}

    これを表にすると、次のようになります。

    画像

    要素番号が1から始まる場合、data[2, 3] は2行3列目の値6を表します。IPAの擬似言語では、二次元配列の要素番号を「行番号、列番号」の順に指定します。


    5.条件分岐|if・elseif・elseの基本

    条件分岐とは、条件によって実行する処理を切り替える仕組みです。
    擬似言語では、主に if、elseif、else を使います。

    例えば、次のプログラムを考えます。

    if (score ≥ 80)
        result ← "A"
    elseif (score ≥ 60)
        result ← "B"
    else
        result ← "C"
    endif

    このプログラムは、scoreの値によってresultに代入する文字を変更します。
    scoreが90なら、最初の条件が真なので"A"になります。
    scoreが70なら、最初の条件は偽ですが、2番目の条件が真なので"B"になります。
    scoreが50なら、いずれの条件にも該当しないため"C"になります。

    重要なのは、上から順番に条件を判定し、最初に真になった条件に対応する処理だけを実行することです。一度条件が成立したら、その後の elseif や else の処理は実行しません。

    画像

    6.繰返し処理|for・while・doの違い

    繰返し処理は、同じ処理を何度も実行するときに使います。

    6-1.for文|指定した範囲で繰り返す

    整数型: i
    
    for (iを1から3まで1ずつ増やす)
        // 繰返し実行する処理
    endfor

    この例では、iの値を1、2、3と変えながら処理を実行します。
    for は、繰返しの範囲や増減の仕方を制御記述に指定する構文です。

    6-2.while文|条件が真の間、繰り返す

    整数型: i ← 1
    
    while (i ≤ 3)
        i ← i + 1
    endwhile

    while は、処理を実行する前に条件を判定します。
    最初から条件が偽の場合、処理が一度も実行されないことがあります。

    6-3.do文|少なくとも1回は実行する

    整数型: i ← 1
    
    do
        i ← i + 1
    while (i ≤ 3)

    do では、最初に処理を実行し、その後で条件を判定します。そのため、最初の条件が偽になる場合でも、処理は少なくとも1回実行されます。

    6-4.3種類の違いを整理

    画像

    特に while と do の違いは重要です。処理より前に条件を確認するか、処理した後で確認するかを区別しましょう。

    画像

    7.関数・引数・戻り値|値を渡して結果を受け取る

    7-1.関数とは?|まとまった処理に名前を付けたもの

    関数とは、複数の処理をまとめ、名前を付けて呼び出せるようにしたものです。

    例えば、2つの数値を足して、その結果を返す関数を考えます。

    ○整数型: add(整数型: a, 整数型: b)
        整数型: result
        result ← a + b
        return result

    この関数の名前は add です。整数型のaとbを受け取り、2つの値を足した結果を整数型の値として返します。

    7-2.引数とは?|関数に渡す値

    引数とは、関数に渡す値や、関数側でその値を受け取るための変数のことです。

    例えば、先ほどの関数を次のように呼び出します。

    add(3, 5)

    この場合、3と5が関数に渡されます。

    関数内では、aとbを使って渡された値を参照します。
    ここでは、aが3、bが5です。

    7-3.戻り値とは?|関数から返される結果

    戻り値とは、関数が処理を終えたときに呼出し元へ返す値です。

    先ほどの関数では、

    return result

    が戻り値を返す部分です。
    add(3, 5) の結果は8になります。

    関数の呼出し結果を変数に保存することもできます。

    整数型: answer ← add(3, 5)

    この場合、answerには8が代入されます。

    引数と戻り値は、次のように考えると分かりやすくなります。
    引数=関数に渡す入力、戻り値=関数から受け取る出力

    画像

    8.スコープとは?|変数を使える範囲

    スコープとは、変数を参照できる範囲のことです。
    代表的なものに、局所変数と大域変数があります。

    8-1.局所変数(ローカル変数)

    局所変数は、特定の関数や処理の内部で使う変数です。

    ○整数型: double(整数型: x)
        整数型: result ← x × 2
        return result

    この例のresultは、関数doubleの内部で宣言された変数です。
    通常、別の関数から直接参照することはできません。

    8-2.大域変数(グローバル変数)

    大域変数は、複数の関数などから参照できるように、広い範囲で宣言された変数です。IPAの擬似言語では、次のように 大域: と記述される例があります。

    大域: 整数型: count ← 0

    大域変数は、関数をまたいで共有する状態を表すためにも使われます。

    ただし、スコープに関する詳しい条件は、プログラムの宣言方法や問題文の説明に従って判断してください。特に、同じ名前の変数が複数登場する場合は、どの範囲で宣言された変数なのかを意識することが重要です。

    画像

    9.擬似言語の基本文法|間違えやすいポイントを総復習

    ここまでの内容から、初学者が特に混同しやすいポイントを整理します。

    画像
    画像



    10.まとめ|擬似言語は記号の意味が分かると読みやすくなる

    今回は、基本情報技術者試験の科目Bで必要となる、擬似言語の前提知識を整理しました。まず押さえたいのは、次のポイントです。

    1. データ型は値の種類を、変数は値の保存先を表す

    2. ← は代入、= は比較を表す

    3. 演算子には優先順位がある

    4. 配列は要素番号を指定して参照する

    5. if は条件分岐、for・while・do は繰返しを表す

    6. 関数は引数を受け取り、必要に応じて戻り値を返す

    7. スコープは変数を参照できる範囲を表す

    プログラミング未経験者にとって、最初からすべての文法を覚えるのは大変かもしれません。しかし、科目Bの学習では、記号を見たときに「どのような処理を表しているか」を理解できることが大切です。

    今回紹介した基本文法を身につけたら、実際のプログラムを1行ずつ読み、変数の値がどう変化するのかを追ってみましょう。



    あわせて読みたい記事

    アルゴリズム・疑似言語の学習はまずこちらの記事からスタート

    アルゴリズム・疑似言語を体系的に学びたい人へ

    今後、「基本情報試験対策 [科目B(疑似言語/アルゴリズム)]」マガジンに以下解説18記事を投稿予定です。過去の出題実績と対応する形でテーマを選定しているため、全18記事のトピックを理解することで、基本情報試験での過去出題テーマを100%カバーできます。よろしければ、本記事および以下マガジンをフォローしてお待ちください。

    画像


    基本情報の学習計画を立てたい方へ

    科目A・科目Bをどのような順番で学習すればよいか、独学での進め方を解説しています。

    学習を進めた後、試験直前に復習したい方へ

    科目Bの解法パターンを整理したチートシートを紹介しています。基礎学習と問題演習を終えた後の総復習におすすめです。




    あなたへのおすすめ