問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