見出し画像

【2分×30節で読める基礎】擬似言語の教科書(基本情報技術者, 科目B)

このNoteは、科目Bの「擬似言語の記述形式」の理解に特化した講座です。1節2分で読めるぐらいに小分けにしたので、2分×30節=60分が読めるのがコンセプト。勿論、良い区切りで休憩/翌日回しで構いません。

擬似言語/プログラムのテキストって、くっっっっっっっそ読むの心折れませんか?

最初にフローチャートだのアルゴリズムやって、擬似言語。それでもまだ何のプログラム言語(python, Javaなど)が使えるようになるわけでもない。学習ハードル高すぎぃ!

テキストは、基本的に文字数多くて、ページも分厚い。私も授業では教科書なんてやってらんないので、プリント作ってます。

このNoteでは、科目B問題の最初に載ってる「擬似言語の記述形式」だけに特化しました。FE合格を目標にしてるなら、載ってるのだけ理解すれば良いのは自明です。

FEに不合格になった方、擬似言語の得点が伸びない方、学習しようにもどうも手が進まない方、学習に挫折された方。少しでも役に立てたら嬉しいです。


このNoteは、私がIT専門学校で授業したことを基に作成しています。IT専門学校でFEは第一目標として、カリキュラムが構築されています。何も知らずに入学しても、1年生10月にはFE合格していきますよ。実績ある教育ノウハウを詰め込んだので、少しでも信頼して頂けたら嬉しいです。

>全Noteへのリンク(FE節)
※科目Aのテーマ別/科目B/旧FE午後など沢山作りました!

【NOTICE】著作権を侵害には即座に法的措置をしています。人格否定もブロックなどの自衛手段を行います。私は1個人であり、公人ではありません。プライベート時間の全てを費やして作成してきました。ご理解頂ける方のみ、ご活用されると嬉しいです🫠



①注釈(コードのメモ書き)

まずは超絶簡単のから。

注釈(コメントアウト)は、プログラムにメモを残します。

そのままメモを書いたら、コンピュータにプログラムだと解釈されて「プログラム言語で書けボケ」と怒られます。

特殊文字前に「//」置くかor挟む「/*」「*/」と、「プログラムコードじゃないのね」と無視されます。

//実行されない(1行だけ)

/*実行されない(挟んでいる箇所)*/

/*
 複数行コメントするのに便利
 実行されない
 実行されない
*/




②変数名とデータ型

「変数」はデータを入れる箱。一軒家とも。

「このデータ使うから箱に大事に入れといてね」って。

「宣言」で、変数名「データ型」を明示します。

例えば「aって名前の変数で、整数を入れる用として使うよ」。

整数型:a

「整数型」「データ型」の一種を指します。

整数(小数点以下なし)を入れる用の「整数型」。実数(小数点あり)を入れる用の「実数型」。色んな型があります。後節で勢揃いさせますね。




③変数への代入(値と文字)

変数にデータを入れる「代入」「←」を使うだけ。

整数型:a
a ← 0

数学の「=」を「←」に変えただけと思ってOK。実際プログラムでも「a=1」と書きます。

宣言と初代入を一緒にしても構いません。

整数型:a ← 0


文字「”」で挟みます。

文字列型:c
c ← "あい"
c ← "1"

「文字列型の変数c」は計算には使えません。

「数値の1」と「文字の1」は扱いが違うんです。

「整数型:a←”1”」もできません。文字は入れられない変数なので。「文字列型:c←1」もダメ。




④変数のデータ型いろいろ

FE科目Bに出た「データ型」は以下。

出題頻度を見れば一目瞭然。最優先は「整数型」。数値じゃないデータを扱う「文字列型」。

あとは問題演習で自然に覚えていきますよ。論理型は「true(真)」「false(偽)」の2値だけ。ビット型は「2進数でしょ」程度でOK。




⑤演算子(算数でお馴染み)

「演算子」は「データとデータをどう操作する」かって記号。

「演算子」って難しい言葉ですが、数学でお馴染みの「+」「-」「×」「÷」

整数型:a
a ← 1 + 3

aには4が代入されます。


FE問題用紙には「演算子の優先順」が載ってますが、一旦忘れてください。小中学校で習った「()が最優先」ぐらい知っておけばOKです。

ちょっとコツ。()を書いた方が良いですよ。「2+3×2」は「3×2」から計算しますが、「2+(3×2)」と書いた方がミスがありません。

整数型:a
a ← 2 + (3 × 2)




⑥変数への代入(プログラムならではの数式)

変数への代入には、変数も参加できますよ。

整数型:a, b, c
a ← 1 + 2
b ← a + 3
c ← a + b

aに3、bに6、cに9、が入った状態になります。

ここまでは数学とも同じなので分かり易かったですね。


さて本題。「プログラムならではの書き方」を学習します。

数学でa=a+3ってあり得ないですよね。どんな数をxに入れても成立しません。

プログラムでは書けるんです。

整数型:a
a ← 1
a ← a + 1

1行目で、変数に1が代入。2行目で+1されて、aには2が入ってます。

「a←a+1」って書き方は、繰り返し処理(ループ)で良く使われます。そのうち慣れますよ。




⑦少し変わった演算子mod

「mod」は、科目Aにも出てきましたね。割り算して「余り」を求める演算子。>【FEA計算⑦】modのNote

整数型:a
a ← 5 mod 3

aには2が入ります。5÷3=1・・・2。余りは2なので。

実は「mod」は1問にしか出てません。
>【FEB】令和07年問01のNote

「商」「余り」「割り切れる」という表現が多いです。
>【FEB】令和07年問02のNote(商)
>【FEB】令和05年問03のNote(商)
>【FEB】サンプル2問02のNote(商)
>【FEB】サンプル1問02のNote(割り切れる)
>【FEB】サンプル1問13のNote(商)
>【FEB】サンプル1問16のNote(商, 余)

多分、商の算出方法が難しめだからかな。




⑧プログラムでの関数

数学での関数は、複雑な数式の代理表現ですね。「y=2x+5」を「f(x)」と簡単に書けます。

大事なのは、”関数”f(x)にx=1を”入れたら”、計算結果の7が”出てくる”って性質。

数学では、関数は計算処理をして結果(数値)を出しました。

プログラムでは、計算や数値に拘りません。関数への入力は数値でも文字でもできるし、処理結果も数でも文字でもできます。なんなら、画面表示する、ロボットアームを動かすも関数の処理に含まれます。関数は「プログラムの塊」「機能」と解釈すると分かり易いかも。

関数への入力を受ける変数を「引数」、関数からの返事データを「返り値(戻り値, 返却値)」と云います。

y=f(x)なら、関数f(x)のxが引数。yに代入されるデータが返り値。




⑨関数の定義(引数, 返り値)

関数も変数と同じく宣言をして使います。

例えば「xにデータを入れて、f(x)を呼び出したら、x+3した計算結果を出す関数」を作ってみます。

○整数型:f(整数型:x)
  return x+3
  • 「○」が関数を宣言するって意味
    変数の時は「○」なし、でしたね。

  • 「○」の次に「返り値」のデータ型

  • 関数の名前「f」

  • 「(」「)」の間に引数
    引数は変数なので変数の宣言で。

「○」で関数が宣言できたら、関数の処理を書きます。

○整数型:f(整数型:x)
  return x+3

だったら、f(x)にx=1を入力したら1+3=4が返答されます。return文が返事をする文。

○整数型:f(整数型:x)
  return x+3


// ここから実行
整数型:y
y ← f(1)
yを表示

4が表示されます。




⑩関数の定義(引数/返り値なし)

プログラムでは「引数がない」「返り値がない」関数も作れます。


引数がない関数。

○整数型:f()
  return 2


// ここから実行
整数型:y
y ← f()
yを表示

2が表示されます。必ず数値2を返す関数で、用途はないですけどね💦

問われる出題はないし、マイナーです。意識しなくOK。>【FEB】令和07年問03のNote(pop関数)



返り値のない関数。

○f(整数型:a)
  変数a内のデータを表示する


// ここから実行
f(3)

3が表示されます。

問われる出題はないし、マイナーです。意識しなくOK。>【FEB】サンプル2問03のNote(append関数)


引数も返り値もない関数

○f()
  ”関数が実行されました”と表示する


// ここから実行
f()

「関数が実行されました」と表示されます。

問われる出題はないし、マイナーです。意識しなくOK。>【FEB】令和05年問02のNote(proc関数)




⑪関数の引数(複数設置)

関数の引数は複数設置できます。

○整数型:f(整数型:x ,整数型:y)
  x ← x + y
  return x


/*ここから実行*/
整数型:a
a ← f(1, 2)
aを表示する

3が表示されます。

「返り値を複数設置できるか?」と思った方。センスいいですね!できますが、このNoteではスルーしますね。科目Bに出てない(出てるけどフォーカスされない)ので。




⑫演算子(指数演算)

「指数」は、エクセルでは「^」、他ソフトでは「**」が演算子なのを知ってるかもですね。

擬似言語やプログラム言語では、指数を演算子では処理しません。対応言語はありますが…FE科目Bではスルー。

FE科目Bでは、pow(x, y)って「xのy乗」を計算する関数が登場しました。>【FEB】サンプル問題1問05のNote(pow関数)

掛け算のループでも計算できます。「2の3乗」は「2を3回掛ければ良い」ですからね。>【FEB】令和06年問02のNote(掛け算ループ)

ただし、指数は小数点(0.5=平方根)や負数(-1=分数)もできるので、掛け算ループはあくまで整数しか対応できません。よって別途用意された関数を使わせてもらうんです。

提供される便利なプログラムの集まりを「ライブラリ」と云います。自分でゼロから作らなくて済みます。ありがたい!




⑬演算子(等号, 不等号, 論理)

演算子の最後は等号/不等号。小中学校で習いましたね。

a>bは、左側のaが、右側のb「より」大きい。a≧bは、aがb「以上」。「より大きい」と「同じ」でもOK。「≧」が「>」と「=」の合成なので分かり易いかな。

また「=」は「同じ(等しい)」ですが、「≠」「等しくない」を意味します。

科目Aでは「AND」「OR」「NOT」を論理回路・ブール代数で学びましたね。擬似言語でも使います。
>【FEA計算⓯】ベン図/真理値表のNote
>【FEA計算⓰】論理回路のNote


「>, ≧, =, ≠, ≦, <」「AND, OR, NOT」は、条件判断に使われます。

例えば数学では、「a>b」は「aはbより大きい」って関係を意味してました。擬似言語では「aはbより大きいか?」って疑問/判定な感じで使われます。

次節からの分岐/反復の制御で使います。




⑭分岐(処理を切り替える)

ifは英語で「もし」。転じて「もし~だったら(条件と合ったら)こうしてね」って制御で使います。

整数型:walk
walk ← 本日の歩数

if(walk ≧ 10000)
  「目標達成」と表示する
endif

万歩計アプリのイメージ。歩数センサーの結果が1万歩を超えてたら「目標達成」と表示。


ifは「合ったら」「合わなかったら」の分かれ道2つが基本ですが。更に「elseif」で、分かれ道を増やせます。

整数型:walk
walk ← 本日の歩数

if(walk ≧ 10000)
  「目標達成」と表示する
elseif(walk ≧ 5000)
  「目標まで半分!」と表示する
endif

1万歩以上じゃなかったら、5千歩以上かを判断、5千歩以上だったら「目標まで半分!」と表示されます。もし1万歩以上だったら「目標達成」と表示されます。次の5千歩以上の判断はしません。

if, elseifは、上から順番に判断されます。条件を満たした処理をしたらendifに飛びます。


elseifはいくつでも追加できます。

整数型:walk
walk ← 本日の歩数

if(walk ≧ 10000)
  「目標達成」と表示する
elseif(walk ≧ 5000)
  「目標まで半分!」と表示する
elseif(walk ≧ 0)
  「頑張ろう!」と表示する
endif


「else」は「今までのif, elseifの全てに合わなかったら」と”全てのハズレ”のための実行を書きます。

整数型:walk
walk ← 本日の歩数

if(walk ≧ 10000)
  「目標達成」と表示する
elseif(walk ≧ 5000)
  「目標まで半分!」と表示する
elseif(walk ≧ 0)
  「頑張ろう!」と表示する
else
  「センサー異常」と表示する
endif

1万歩以上じゃない、5千歩以上じゃない、0歩以上じゃない。つまり歩数計が負の値。「センサー異常」と表示します。

条件分岐
if(条件)
  処理
elseif(条件)
  処理
elseif(条件)
  処理
else
  処理
endif
の形です。




⑮反復(for文)

for文は、繰り返し処理(ループ処理)を制御します。

繰り返す回数の制御には、「ループカウンタ」を使うのが王道です。iがループカウンタ。

整数型:i
for(iを1から3まで1ずつ増やす)
 iを表示する
endfor

i=1, 2, 3はfor内の処理をし、i=4になったらやらずにスキップします(endforに飛ぶ)。

処理結果は「1, 2, 3」が表示されます。


for文は二重、三重にできます。ループカウンタは、i, j, kを使うのが通例。

整数型:i, j
for(iを1から3まで1ずつ増やす)
 for(jを1から2まで1ずつ増やす)
  「(i,j)」を表示する
 endfor
endfor

結果は「(1,1)(1,2)(2,1)(2,2)(3,1)(3,2)」と表示されます。i=1の時にj=1と2のループをして、i=2になってj=1と2、i=3になってj=1と2、と処理が進みます。

九九を出力する擬似言語を考えて見て下さい。>(Note企画中*)


for文の中にif文を入れるのもできますよ。

整数型:i
for(iを1から3まで1ずつ増やす)
 if(iが2と等しい)
  iを表示する
 endif
endfor

i=2の時「2」が表示されます。他のi=1, 3の時はif文内は実行されません。

偶数を出力する擬似言語を考えてみて下さい。if文の条件で、演算子modを使ってみてくださいね。>(Note企画中*)




⑯反復(while文)

while文もfor文と同じく、繰り返し処理を制御します。for文はループ回数を制御する方向性ですが、while文は条件を満たす限りループする制御で使われます。

for文。

整数型:i
for(iを1から3まで1ずつ増やす)
 iを表示する
endfor

while文にします。

整数型:i ← 1

while(i ≦ 3)
  iを表示する
  i ← i + 1
endwhile

「i←1」「i←i+1」を追加せねばならないので、for文より面倒ですよね。回数制御はfor文の方が楽です。


while文は「こうある限り続けてね」「こうなったらやめていいよ」という制御向き。

整数型:sec
sec←3
while(sec ≧ 0)
  1秒待つ
  sec ← sec - 1
endwhile
「時間になりました!」と表示する

他にも「~が見つかるまで続けてね」とか「ファイルの最後の行まで読み込むまで」とか。




⑰反復の離脱(break)

whileループを「その場で抜けたい」時は、科目Bでは「繰返し処理を終了する」と書いてます(break文)。

整数型:i ← 1
while(i≦10)
  if(iが2に等しい)
    繰返し処理を終了する
  endif
  i ← i + 1
endwhile

i=2になった時、if文の条件を満たしbreakします。「while(i≠2)」でも同じ動作をしますが。

breakの使い所は、”これ以上やっても意味がないって分かった時”、”エラーが出たのですぐ中止した時”などです。


i=3から始めると、i=2には一生ならないので、i=11でwhile条件を満たさなくなってループ終了します。

整数型:i ← 3
while(i≦10)
  if(iが2に等しい)
    繰返し処理を終了する
  endif
  i ← i + 1
endwhile

つまりbreakを設けると、ループ脱出が2経路以上になります。while条件+breakの個数だけ脱出経路があります。

breakをあっちこっちに仕込むと、どれでbreakしたのか分かりにくくなったり、想定外のbreakで誤った処理結果になるかもなので注意です。

breakの個数を絞るか、仕込む箇所を集めるか、breakの理由を返り値でメッセージとして送るかなどの工夫は必要かも。


なお無限ループを抜け出す使い方もあります。むしろ王道。

「PRESS START BUTTON」と表示する
while(True)
  if(ボタンが押されたか)
    break
endwhile

ゲームのタイトル画面って「PRESS START BUTTN」ってメッセージが出てて、ボタン押さえるの待ってますよね。

While(True)は条件判定が、常にTrue(真)で変わらないので、無限ループになります。


科目Bでの出題例をまとめます
>【FEB】令和07年問01のNote(for)
>【FEB】令和05年問01のNote(for)
>【FEB】令和07年問03のNote(while)
私はfor文でのbreakはあまり使わないかなぁ。回数が決まってる時にfor文使うので途中でbreakする必要がないというか…。




⑱反復(do while | 一度も出てない)

do whileは出題がないので、一旦忘れて良いかも。でも簡単ですよ。ループを続けるかの判断が最後になっただけ。

例えば、サイコロを1回は振るのが確定してて、6の目が出たらもう1回振れる!って処理。

○整数型:dice
  do
    dice = rollDice()
  while (diceが6と等しい)

//rollDice()は、1~6の整数を1つだけランダムに返す関数

ループ判定がループ処理後に行われるので、処理が必ず1回は実行されます。




⑲未定義な値

下コードにはバグがあります。アルゴリズムは正しいけど、コンピュータの事情で不具合が発生します。

整数型:i, sum
for(iを1から3まで1ずつ増やす)
  sum ← sum + i
endfor

1回目のループ(i=1)の時「sum←sum+1」を実行しますが、sumに何が入ってるか分かりません。もし100が入ってたら、sumは101になってしまいます。

変数や配列は実際はメモリを使うので、前のデータやデータの欠片が入ってます。いわば、部屋に住もうとしたら、前住んでた人のタンスが残ってて困っちゃう感じ。

初期値の代入(初期化)は大事です。「sum←0」にしました。

整数型:i, sum ← 0
for(iを1から3まで1ずつ増やす)
  sum ← sum + i
endfor

宣言をしただけで、何に何が入っているか/入ってないかすら分からないのを「未定義の値」と科目Bでは云ってます。

FE科目Bでは、”未定義”とは、”変数に値が格納されていない状態”と指してます。

プログラマ界隈では「NULL値」と云います。”からっぽ”ってこと。空き部屋ですね。

なお、私の専門学校では「不定」と教えています。空っぽのことは「NULL」と教えています。




⑳配列(アパートか一軒家か)

例えば1~12月の売上を集計する時、変数を12個必要。JAN, FEB, MAR…って。

整数型:JAN, FEB, MAR, APR, MAY,~略~, DEC

くっそ面倒なので、「配列」を使います。

1月売上をsales[1]に代入、2月分をsales[2]に~略~12月分をsales[12]にって具合。

アパートの名前と部屋番号と思ってください。[]内を、「要素番号(添え字)」、配列の要素の個数を「要素数」と云います。

sales[1]~sales[12]だと、[1]や[12]が要素番号、要素数は12([1]~[12]なので)。

変数は一軒家、配列はアパート、と授業では例えてます。




㉑配列(要素番号, 要素)

配列の使い方を学習していきます。

まずは「宣言」変数と同じで名前とデータ型を明示します。

整数型の配列:sales

使う要素数が決まっているなら指定します。一括代入ができます。最初にデータを入れておきたい時に使われてます。

整数型の配列:sales ← {100, 120, 160,~省略、合計12個の要素~}


データの代入や読み出しも、変数と同じく「←」でできます。配列では配列名に加えて、要素番号も指定する点に注意です。

整数型の配列:sales ← {100, 120, 160,~省略、合計12個の要素~}
整数型:a

sales[1]を表示する //1月の売上を表示

a ← sales[1] //1月の売上を変数aに代入
aを表示する

sales[1] ← 120 //1月の売上を120に修正

配列では、「添え字(要素番号)」「要素(データ)」の取扱いが重要ポイントです。

整数型の配列:sales ← {100, 120, 160,~省略、合計12個の要素~}
整数型:i, sum ← 0

for (iを1から12まで1ずつ増やす)
  sum = sum + sales[i]
endfor

難しくなると、要素番号に数式/配列が入ってきますよ。




㉒配列の宣言/初期化の色々

科目Bで出た配列の扱い方にはバリエーションがあります。

配列って、型と個数をガッチリ決めるもんなんです。

メモリを確保するので。自分がホテルマンだったら、「泊まりたいけど何部屋かは追々伝えるね」って予約されたら困りますよね。

でも、個数を臨機応変に変えるやり方もあります。

科目Bで出題された書き方を見ます。覚えなくても、理解できればOKです。


使うデータが決まっている時。

代入は、変数と同じく「←」、ただし「{」「}」で囲みます。

オリンピックのメダル数を配列で扱う例。

整数型の配列:medal ← {5, 7, 12} //金, 銀, 銅

整数型の配列:medal ← {3個の0} //擬似言語ならでは
// {0, 0, 0}になる


データは今から格納するけど、個数が決まっている時。

部屋は確保できてるので自由に代入できます。読み出しはダメ(未定義の値なので)。

整数型の配列:medal ← {3個の 未定義の値}
medal[3] ← 12
// {未定義の値, 未定義の値, 12}になる


データも個数も決まってない時。

1個ずつ「末尾に追加」していきます。

整数型の配列:medal ← {}
medalの末尾に5を追加
medalの末尾に7を追加
// {5, 7}になる




㉓配列「要素の数」

配列の取り扱いでは「要素の数」が良く使われます。

例えば、配列要素を1つずつ読み出す時、添え字を1から「要素の数」まで動かせば良いです。部屋数が3のアパートの部屋番号は、1から3ですからね。

整数型の配列:medal ← {5, 7, 12} //金, 銀, 銅
整数型:sum ← 0
for(iを1から medalの要素数 まで1ずつ増やす)
  sum ← sum + medal[i]
endfor

「medalの要素数まで」は「3まで」でもOKですが、要素数が未定/増減する場合がありますからね。


また「ループの度に配列から1個ずつ取り出す」こともできます。

整数型の配列:medal ← {5, 7, 12} //金, 銀, 銅
整数型:sum ← 0, a
for(aに medalの要素を順に代入する)
  sum ← sum + a
endfor

配列から1個ずつ呼び出しは、複雑な配列になると便利です。

ループカウンタ(i)でfor文回すには、配列の要素数を数える必要があります。また要素数がずっと変わらない配列しか使えません。使いにくいケースあり。




㉔二次元配列(高層アパート)

配列の考えを拡張します。

もし2026年トリノ五輪、2022年北京五輪の金銀銅メダル数を記録したい時。medal2026[], medal2022[]を用意するのはテ。

整数型の配列:medal2026 ← {5, 7, 12} //金, 銀, 銅
整数型の配列:medal2022 ← {3, 7,  8} //金, 銀, 銅

でも、歴代五輪を扱うなら、2000年以降でも7個準備する必要。もう面倒になってきました。各月の売上に変数12個必要だったのと同じ。


もう一つの方法「二次元配列」

整数型の二次元配列:medal ← {{5, 7, 12}, {3, 7, 8}} 
//金, 銀, 銅。2026, 2022の順。

medal[1, 1]が2026年の金メダル5個、medal[1, 2]が銀メダル7個、medal[1, 3]が銅メダル12個。medal[2, 1]が2022年の金メダル3個、medal[2, 3]が銅メダル8個。

一次元配列が1階建てアパートなら、二次元配列は2階建てアパートですね。




㉕二次元配列の宣言/初期化の色々

一次元配列の時と同じく、二次元配列の扱いを学習します。

使うデータが決まっている時。

整数型の二次元配列:medal ← {{5, 7, 12}, {3, 7, 8}} 
/*
 {
  {5, 7, 12}
  {3, 7, 8}
 }
になる
*/

/*コメント*/に書いた通り、二次元配列は表的に理解すると分かり易くなります。日本語だって、1行に何文も書かれるより、適度に改行されてないと読み難いですよね。

データは今から格納するけど、個数が決まっている時。

整数型の配列:medal ← {2行3列の 未定義の値}
medal[1, 1] ← 5
medal[2, 3] ← 8
/*
 {
  {5, 未定義の値, 未定義の値}
  {未定義の値, 未定義の値, 8}
 }
になる
*/

「2行3列の 未定義の値」。1階と2階に3部屋確保した状態。

メダル数だったら、0に初期化した方が絶対良いですが。学習用なので"未定義の値"にしました。ご容赦🙏


2次元配列は”揃っている”必要はありません。

整数型の配列:array←{{1, 2, 3}, {4}, {5, 6}}
/*
 {
  {1, 2, 3}
  {4}
  {5, 6}
 }
になる
*/

とはいえ、私はイビツな配列の使い方はしないかなぁ。




㉖オブジェクト指向(クラス)

オブジェクト指向は、設計図「クラス」変数や関数を内包させて、クラスをモノ「オブジェクト」に具現化させて、働かさせる思想です。

例えば、犬ってクラスを作って、名前や毛色を保管する変数、歩いたり吠えたりする関数を含ませます。犬クラスを具現化させる時に、名前や毛色を入力して具現化「インスタンス化」します。
後は野に話して時間を薦めてあげれば、犬が歩いたり吠えたりします。

設計図を1つ作っておくだけで、インスタンス化をバンバンやっちゃえば、犬をどんどん作れるんです。

シューティングゲームの敵機とか隕石とかイメージすると分かり易いかもですね。大量生産できないと無理ですね

ここまで書いてて、科目Bには大量のインスタンス化は出てません。”1個のクラスで1個のオブジェクトを作ったので、変数「メンバー変数」関数「メソッド」を使ってみてね”って問題が出るだけです。




㉗オブジェクト指向(メソッド)

お財布のクラスを作ってみました。

重要なのは「クラス名がWallet」「メソッドが2つ。deposit(), withdraw()」。できれば「変数が2つowner, balance」まで。

  • クラス Wallet

    • メンバー変数

      • 文字列型: owner

      • 整数型: balance

    • コンストラクタ(初期化処理)

      • コンストラクタ Wallet(文字列型: name, 整数型: init)

      • owner ← name

      • balance ← init

    • メソッド

      • deposit(整数型: amount) // 入金
        balanceにamountを加算

      • 論理型:withdraw(整数型: amount) // 出金
        balance≧amountなら、balanceからamountを引いて、trueを返す。balance<amountなら、falseを返す


まずクラスをオブジェクトにします。インスタンス化

Wallet型:wallet ← Wallet("sagara", 100)

「wallet」って名前のオブジェクトを作りました(インスタンス化)。インスタンス化する時は、コンストラクタって関数で初期化もします。

sagaraさんは100円持ってる状態。name←"sagara"とbalance←100が内部で実行されてます。

メソッド「deposit()」を使って入金してみます。オブジェクト名「wallet」の後に「.」をつけて「deposit()」を呼び出します。

wallet.deposit(200)
// 200円入金、wallet内のbalanceが100から300に変更。

メソッド「withdraw()」を使って出金してみます。

wallet.withdraw(150)
// 150円出金。wallet内のbalanceが300から150に変更。
wallte.withdraw(400)
// 400円出金。balance内に300しかないので、処理されず。

なお、withdraw()はtrue/falseを返すので、返り値を受け取らねばいけません。報告するのに報告を聞く人いないとエラーになります。

論理型:result
result ← wallet.withdraw(400)
if( result が true)
 「出金が完了しました」と表示する
else
 「残高不足で出金できません」と表示する  
endif

if条件に直接書けもしますが、私は別々の方が読み易いかな。


if( wallet.withdraw(400) が true)
 「出金が完了しました」と表示する
else
 「残高不足で出金できません」と表示する  
endif




㉘オブジェクト指向(メンバー変数)

メンバー変数の直接操作はどうしよう。

メンバー変数にもアクセスできます。

wallet.nameを表示する
//「sagara」と表示される

代入もできます(ちょっと問題あり)。

wallet.balace ← 1000000

残高が100万円になりました😅

※実際は「メンバー変数」に直接アクセスはさせず、メソッドを介すことが多いです。名前を表示するメソッド、名前を変えるメソッドも準備せねば。とはいえ、次節でメンバー変数にアクセスする出題を学習するので…。




㉙オブジェクト指向(ポインタ)

メンバー変数を値/文字ではなく、指し示す「ポインタ」役割としての活用法が出題されます。

ちょっと難しいので「まぁ解ける」「まぁなんか分かる」ぐらいにボカしますね。捨てても良いですよ。出題されたから対応してるだけ。


下図クラスのメンバ変数「next」について。すっごく浅く流しますよ。

下図みたくリストが既がある時、「prev.next」が次のリストを指しているって理解に繋げます。

1番目のリスト(メモリアドレスが101)がprevってオブジェクト名で「prev.val」に”a”、「prev.next」に105(次リストのアドレス)が格納されてる状態。

つまり「prev.next」は2番目リストを指している。2番目リストのnextは3番目リストを指している。よって「prev.next.next」は3番目リスト。

上図下の「prev.next ← prev.next.next」とは、1番目リスト(prev)の次(.next)を、3番目リスト(prev.next.next)にするって意味。つまり2番目をリストから切り離す処理です。


「ポインタ」と云います。表現がとても難しいです。データ, アドレスそのものではなく、指し示すモノ。

冒頭の通り。「オブジェクト指向」ましてや「ポインタ」は軽く流して何となく解ける程度or捨ててください。
>【FEB】サンプル2問03のNote
>【FEB】サンプル1問10のNote




㉚変数や配列の「大域」

「大域:~」は、プログラム全体で共通して使えるモノって意味。グローバル変数(大域変数)などが代表的に出題されます。

  • 局所変数(ローカル変数):ある範囲内で有効。

  • 大域変数(グローバル変数):どこからでも有効(全体で使う)。

「大域」はプログラム全体で共通して使えること。大域じゃない「局所」は関数の内側だけで使えること。

以下では、大域変数aを総理大臣の名前(日本全体で共通)、局所変数iをfuncA学校の加藤さん、funcB学校の加藤さん(別人)と考えると理解しやすいです。

大域:整数型:a ← 1

○funcA()
  整数型:i ← 2
  iを表示する //・・・【2】, 【8】
  a ← 4
  aを表示する //・・・【3】, 【9】

○funcB()
  整数型:i ← 3
  iを表示する //・・・【5】
  aを表示する //・・・【6】


// ここから実行
aを表示する //・・・【1】
funcA()
aを表示する //・・・【4】
funcB()
aを表示する //・・・【7】
funcA()
aを表示する //・・・【10】

表示結果は、以下。

  1. 大域変数aの「1」が表示

  2. funcA内の局所変数iの「2」が表示

  3. 大域変数aの「4」が表示(funcAで変更された)

  4. 大域変数aの「4」が表示

  5. funcB内の局所変数iの「3」が表示

  6. 大域変数aの「4」が表示

  7. 大域変数aの「4」が表示

  8. funcA内の局所変数iの「2」が表示

  9. 大域変数aの「4」が表示

  10. 大域変数aの「4」が表示

2, 5, 8に注目。funcA内のi、funcB内のiは別物。互いに干渉しません。

1, 3, 4, 6, 7, 9, 10での大域変数aは、funcA, funcB, 外側で全て共通して使うので、値が変われば全員に影響がでます。

詳しい理解は問題演習の後にして下さい。>【FEB】令和05年科目B問03のNote




まとめ

お疲れ様でした!

これで、FE科目B合格への必要充分かつ最小限の知識基礎が固まりました。フローチャートやcaseとか超カットしてます。出てないので。

次は、合計値平均値の計算、数値の並べ替え文字列探索などの目的ある処理「アルゴリズム」を学びつつ。擬似言語(プログラム)の基礎や考え方へ発展させます。>(企画中*)

プログラムに興味ある方は、その後にプログラムに応じた学習を薦めます。擬似言語で出てきた「配列から1つずつ呼び出す」は、pythonは標準でできますが、C言語はできない、など違いがあるんです。だから科目Bでは曖昧にボカしてる記述が散見してるんです(初学者は気づかなくてOK、PG経験者は違和感ありましたね)。

私は学校の授業でC言語、独学でperl、AIが流行ってpython, 授業でJava, VC#と広げてきました。今からならJava, pythonが最初ですね。私の学校でも1年生後期から授業します。

私のどこまでNoteを作れるか分かりませんが、引き続きIT専門学校の授業/プリント教材の言語化/Note化を続けていきたいと思います。


最後に私のお薦めの演習順番。

❶学習前の”分からせ”
>【FEB】サンプル問題2のNote
❷テキスト
>【FEB】擬似言語の教科書Note ←今ここ
↓※必要なら
うかる! 基本情報技術者 [科目B・セキュリティ編](amazon)
うかる! 基本情報技術者 [科目B・アルゴリズム編](amazon)
❸各年度の公開問題
>【FEB】令和07年科目BのNote
>【FEB】令和06年科目BのNote
>【FEB】令和05年科目BのNote
➍解法の総復習(➋や➌と併用可)
>【FEB】擬似言語の11の解法Note
➎模擬試験
>【FEB】サンプル問題1のNote(擬似言語)
>【FEB】サンプル問題1のNote(セキュリティ)


少しでも合格やスキルアップのお役に立てたら嬉しいです。別のNoteでもお会いできるのを楽しみにしております。でわでわ。


いいなと思ったら応援しよう!

せんないの過去問解説Note 学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ