問1
〔概要〕基本情報技術者試験 科目Bのサンプル問題 問1を実装するプログラムである。
参考:「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.0
〔技法〕条件判断
〔実行例〕
〔プログラム〕
プロジェクトファイル(プログラムファイル):右クリックでダウンロードして、EduBlocksで読み込むことにより実行できます。
問2
<留意事項>基本情報技術者試験の問題とEduBlocksやPythonなどのプログラミング言語とでは配列(リスト)のインデックス(要素番号、添え字)の扱いが異なります。基本情報技術者試験の問題では、要素番号が1から始まります(Scratchも同じ)。それに対して、EduBlocksやPythonでは、要素番号が0から始まります。
〔概要〕基本情報技術者試験 科目Bのサンプル問題 問2を実装するプログラムである。
〔技法〕配列
(a)要素番号を0開始とする場合(EduBlocksやPythonでの通常の方法)
この場合、設問空欄の選択肢と異なるコードになります。
<元のコード>
right ← array の要素数 - left + 1
<EduBlocksのコード>
right = len(array) – left – 1
配列は次のように想定します。
〔実行例〕
〔プログラム〕
プロジェクトファイル(プログラムファイル):右クリックでダウンロードして、EduBlocksで読み込むことにより実行できます。
(b)要素番号を1開始とする場合
※この場合、設問空欄の選択肢と同じコードになります。
要素番号を1から始めるために、実装する場合に、配列を次のように変更します。
〔実行例〕
〔プログラム〕
プロジェクトファイル(プログラムファイル):右クリックでダウンロードして、EduBlocksで読み込むことにより実行できます。
問3
基本情報技術者試験 科目Bのサンプル問題 問3を実装するプログラムである。
(a) EduBlocks版
〔概要〕サンプル問題よりさらにオブジェクト指向化しています。
〔実行例〕
〔プログラム〕
(b) Python版
〔概要〕サンプル問題よりさらにオブジェクト指向化しています。
〔実行例〕
A
B
C
〔プログラム〕
class ListElement:
def __init__(self, qVal):
self.val = qVal
self.next = None
self.listHead = None
def append(self, qVal):
self.curr = ListElement(qVal)
if self.listHead == None:
self.listHead = self.curr
else:
self.prev = self.listHead
while self.prev.next != None:
self.prev = self.prev.next
self.prev.next = self.curr
def printList(self):
self.curr = self.listHead
while self.curr != None:
print(self.curr.val)
self.curr = self.curr.next
l1 = ListElement(None)
l1.append('A')
l1.append('B')
l1.append('C')
l1.printList()
(c) Java版
〔概要〕擬似言語の内容をほぼそのまま実装しました。ただし、Javaには大域変数はないので、publicクラスとstatic変数(クラス変数)で擬似的にグローバル変数を模倣しています。したがって、変数名は「クラス名.クラス変数名」の形式で、たとえば「Global.listHead」のように指定します。
〔実行例〕
(出力表示なし)
〔プログラム〕
public class Global {
public static ListElement listHead = null;
}
public class ListElement {
char val;
ListElement next = null;
public ListElement(char qVal) {
this.val = qVal;
}
}
public class Hello{
static void append (char qVal) {
ListElement prev, curr;
curr = new ListElement(qVal);
if (Global.listHead == null) {
Global.listHead = curr;
} else {
prev = Global.listHead;
while (prev.next != null) {
prev = prev.next;
}
prev.next = curr;
}
}
public static void Main(){
append('A');
append('B');
append('C');
}
}
(d) Javaオブジェクト指向版
〔概要〕サンプル問題よりさらにオブジェクト指向化しています。大域変数に相当する変数を取り除き、コンストラクタにより初期値設定を行っています。なお、クラスの構造を変更しています。
〔実行例〕
A
B
C
〔プログラム〕
public class ListElement {
char val;
ListElement listHead, next, curr, prev;
public ListElement() {
listHead = null;
}
public ListElement(char qVal) {
val = qVal;
next = null;
}
public void append(char qVal) {
curr = new ListElement(qVal);
if (listHead == null) {
listHead = curr;
} else {
prev = listHead;
while (prev.next != null) {
prev = prev.next;
}
prev.next = curr;
}
}
public void printList() {
curr = listHead;
while (curr != null) {
System.out.println(curr.val);
curr = curr.next;
}
}
}
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
ListElement l1 = new ListElement();
l1.append('A');
l1.append('B');
l1.append('C');
l1.printList();
}
}
Copyright (C) 2022 Easy Programming