プログラミング部門1級 無断転載禁止
2013 年?月?日 実施
平成 25 年度(新検定基準による出題例)
情 報 処 理 検 定 試 験
<プログラミング部門>
第1級 試 験 問 題
この問題は,平成 24 年5月時点の参考資料です。
1.監督者の指示があるまで,試験問題に手を触れないでください。
2.試験問題は,10 ページあります。
3.解答はすべて解答用紙に記入します。
4.
【1】
【2】
【3】
【4】【5】【6】は共通問題です。
5.
【7】の問題は,Java・マクロ言語・COBOLのいずれか1つを選択し,
解答用紙の選択言語を で囲んでください。
6.電卓などの計算用具は使用できません。
7.筆記用具などの物品の貸借はできません。
8.問題用紙の回収については監督者の指示にしたがってください。
9.制限時間は,60 分です。
注 意 事 項
主催 公益財団法人 全国商業高等学校協会
[1級 共通問題] 【1】 次の説明文に最も適した答えを解答群から選び,記号で答えなさい。 1.複数のハードディスク装置を1つの装置として管理し,アクセスの高速化や信頼性を高めるための技術。 2.経路選択機能やパケットのフィルタリング機能を持ち,ネットワーク上のデータを中継する装置。 3.システム全体をいくつかの工程に分割し,各工程の成果物をもとに後工程を順次進め,前の工程に戻らない ことを前提として開発する手法 4.異機種間のデータ通信を可能とするために,国際標準化機構が制定した通信機器の持つべき機能を階層別に 定義したネットワーク設計指針。 5.電子商取引などの暗号化通信において使用される公開鍵の正当性を認める第3者機関。 【2】 次のA群の語句に最も関係の深い説明文をB群から選び,記号で答えなさい。 <A群> 1.サブネットマスク 2.ブラックボックステスト 3.VRAM 4.トップダウンテスト 5.MIME <B群> ア.NICなどのネットワーク機器を一意に識別するためのハードウェア固有の番号。 イ.ディスプレイ装置に表示するための画像情報を一時的に保持する専用の記憶装置。 ウ.インターネットやイントラネットなどの情報通信ネットワークを使って,音声データを送受信する技術。 エ.複数のモジュールを結合してテストをするさいに,スタブと呼ばれるダミーの下位モジュールを用意して, 上位モジュールから順番に行うテスト手法。 オ.プログラムの内部構造に着目せず,入力データに対する出力結果が正しいかどうかを検証すること。 カ.複数のモジュールを結合してテストをするさいに,ドライバと呼ばれるダミーの上位モジュールを用意して, 下位モジュールから順番に行うテスト手法。 キ.各国の言語や,画像,音声,動画など形式の異なる様々なデータを電子メールで扱うための規格。 ク.IPアドレスから,特定のグループを示すネットワークアドレスを取り出すための値。 ケ.プログラムの内部構造に着目し,設計したとおりに動作するかどうかを検証すること。 コ.ハードディスク装置の代替として利用されており,記憶媒体としてフラッシュメモリを使用している補助記 憶装置。 【3】 次の説明文に最も適した答えをア,イ,ウの中から選び,記号で答えなさい。 1.10進数の7.25を2進数で表したもの。 ア.111.01 イ.111.1 ウ.111.11 2.LAN内部のクライアントの代理としてインターネット接続を行うサーバ。 ア.DNSサーバ イ.プロキシサーバ ウ.POPサーバ 3. 入力が「0」と「1」または,「1」と「0」のときだけ「1」を出力する論理回路。 ア.AND回路 イ.OR回路 ウ.XOR回路 4. システムの一部に障害が発生しても,最低限の機能でシステムの稼働を継続する設計思考。 ア.フェールセーフ イ.フェールソフト ウ.フールプルーフ 5.平均シーク時間が 15 ミリ秒,6,000 回転/分の磁気ディスク装置の平均待ち時間はいくらか。 ア.10 ミリ秒 イ.15 ミリ秒 ウ.20 ミリ秒 ア.認証局 イ.プロトタイプモデル ウ.シンクライアント エ.HTTPS オ.UPS カ.ルータ キ.ウォータフォールモデル ク.プログラム設計 ケ.RAID コ.ディジタル署名 サ.OSI参照モデル シ.ハブ 解答群
[1級 共通問題] 【4】 次の各問いに答えなさい。 問1.流れ図の説明を読んで,流れ図の(1)~(2)にあてはまる答えを解答群から選び,記号で答えなさい。 <流れ図の説明> 処理内容 配列に記憶された数値を並べ替える流れ図である。 処理条件 1.配列 Pt は2桁の数値が記憶されており,デー タ件数はnである。 配列 Pt 71 ~ 24 (0) ~ (n-1) 2.配列 Pt の数値を先頭から昇順に並べ替える。 3.条件式が「かつ」で複合されている場合,先に 記述された条件式が偽となった時点で,判定を終 了するものとする。 4.並べ替えが終わったら,配列 Pt の内容をディ スプレイに表示する。 問2.流れ図の説明を読んで,流れ図の(3)~(5)にあてはまる答えを解答群から選び,記号で答えなさい。 <流れ図の説明> 処理内容 配列に記憶された数値に順位を付ける流れ図であ る。 処理条件 1.配列 Nin は整数値が記憶されており,データ件 数はnである。 配列 Nin 271 ~ 523 (0) ~ (n-1) 2.配列 Jun を利用して,配列 Nin の数値の降順に 順位を付ける。 配列 Jun ~ (0) ~ (n-1) 3.順位付けが終わったら,配列 Nin と Jun の内容 をディスプレイに表示する。 <流れ図> <流れ図> ア.0 → Jun(p) イ.Jun(s) + 1 → Jun(s) ウ.t は s + 1 から 1 ずつ増やして エ.Jun(t) + 1 → Jun(t) オ.t は s から 1 ずつ増やして カ.1 → Jun(p) 解答群 ア.Work → Pt(t + 1) イ.s ≦ n ウ.Work → Pt(t) エ.s ≦ n - 1 解答群 は じ め ループ1 s は 1 から 1 ずつ増やして (1) の間 配列 Pt を準備し, データを記憶する t ≠ s - 1 NO YES お わ り データ件数 → n ループ2 t は s - 1 から 1 ずつ減らして t ≧ 0 かつ Pt(t) > Work の間 配列 Pt を表示 Pt(s) → Work Pt(t) → Pt(t + 1) ループ2 (2) ループ1 は じ め ループ2 s は 0 から 1 ずつ増やして s < n - 1の間 配列 Nin を準備し, データを記憶する NO YES お わ り データ件数 → n ループ3 (4) t < n の間 ループ3 ループ2 配列 Jun を準備する ループ1 p は 0 から 1 ずつ増やして p < n の間 ループ1 (3) Nin(s) < Nin(t) Nin(s) > Nin(t) 解答不要 (5) YES NO ループ4 p は 0 から 1 ずつ増やして p < n の間 ループ4 Nin(p),Jun(p) を表示
[1級 共通問題] 【5】 流れ図の説明を読んで,流れ図の(1)~(5)にあてはまる答えを解答群から選び,記号で答えなさい。 <流れ図の説明> 処理内容 発生順に記録された営業成績データを読み,キーボードから入力 された担当地区の営業成績状況を表示する流れ図である。 入力データ 社員ID (Sid) ×××× 取扱品目コード (Tcodo) ×× 販売金額 (Kin) ×××× 実行結果 処理条件 1.社員は 100 人であり,配列 Hsid には社員IDが,配列 Htiku には担当地区が,社員IDの昇順にあらかじめ記憶されている。 なお,配列 Hsid と Htiku は添字で対応している。 配列 (0) (1) ~ (99) Hsid 1001 1005 ~ 4502 (0) (1) ~ (99) Htiku 関東 九州 ~ 北陸 2.第1図の入力データを読み,次の処理を行う。 ・ 社員IDをもとに配列 Hsid を探索する。なお,見つからな い場合は,入力データのエラーとし,社員IDとエラーメッセ ージを表示する。 ・ 配列 Hkin に取扱品目別に販売金額を集計する。なお,取扱 品目コードは1~20 であり,配列 Hkin の列方向の添字と対応 しており,行方向の添字は配列 Hsid と対応している。また, 21 列目に社員別の合計を集計する。 配列 Hkin (0) (1) ~ (20) (21) (22) (0) ~ (1) ~ ~ ~ ~ ~ ~ ~ ~ (99) ~ (不使用) (品目1) ~ (品目 20) (合計) (順位) ・ 配列 Hkin の 22 列目に合計の降順に順位を付ける。だたし, 合計が同じ場合は,同順位とする。 3.入力データが終了したら,キーボードから入力された担当地区 の社員だけを,社員IDの昇順に営業成績状況をディスプレイに 表示する。 4.キーボードから「end」 が入力されたら処理を終了する。 5.社員ID以外のデータにエラーはないものとする。 3405 社員IDエラー 1345 社員IDエラー 担当地区を入力してください→ 北陸 (担当地区) 北陸 (社員ID) (品目1) ~ (品目20) (合計) (順位) ×××× ××, ××× ~ ××, ××× ×××, ××× ×× ~ ~ ~ ~ ~ ~ ×××× ××, ××× ~ ××, ××× ×××, ××× ×× 担当地区を入力してください→ 関東 (担当地区) 関東 ~ ~ ~ ~ ~ ~ (第1図) (第2図) <流れ図> は じ め 配列 Hsid Htikuを準備し データを記憶する ループ1 データがある間 探索処理
(1)
ループ1 ループ3 h は 0 から 1 ずつ増やして h ≦ 98 の間(2)
ループ4 k は j から 1 ずつ増やして k ≦ 99 の間 Hkin(k,22) + 1 → Hkin(k,22) ループ6 お わ り ループ4 探索処理 入 口 0 → Ka 99 → Jo (Ka + Jo) ÷ 2 → m ループ7 Sid ≠ Hsid(m) かつ Ka ≦ Jo の間 Sid > Hsid(m)(5)
m - 1 → Jo (Ka + Jo) ÷ 2 → m ループ7 YES NO 出 口 ※ データを読む ※ ※ 小数点以下切り捨て 配列 Hkin を 準備し,初期化する Hkin(m,21) + Kin → Hkin(m,21) キーボードから Tiku を入力(3)
YES 解答不要 NO Hkin(h,22) + 1 → Hkin(h,22) YES NO(4)
YES "担当地区を入力してください→" を表示 Hsid(g),Hkin(g,1)~ Hkin(g,22)を表示 Tiku を表示 NO ループ2 g は 0 から 1 ずつ増やして g ≦ 99 の間 キーボードから Tiku を入力 "担当地区を入力してください→" を表示 ループ2 1 → Hkin(g,22) ループ3 ループ6 g は 0 から 1 ずつ増やして g ≦ 99 の間 ループ5 Tiku ≠ "end" の間 ループ5 Ka ≦ Jo YES NO Sid "社員IDエラー" を表示 ア.m - 1 → Kaイ.Hkin(m,Tcodo) + Kin → Hkin(m,Tcodo) ウ.Hkin(Tcodo,m) + Kin → Hkin(Tcodo,m) エ.m + 1 → Ka オ.Hkin(h,21) > Hkin(k,21) カ.Tiku = Htiku(m) キ.h + 1 → k ク.Tiku = Htiku(g) ケ.Hkin(h,21) < Hkin(k,21) コ.h + 1 → j 解答群
[1級 共通問題] 【6】 流れ図の説明を読んで,流れ図の(1)~(5)にあてはまる答えを解答群から選び,記号で答えなさい。 <流れ図の説明> 処理内容 開発商品評価データを読み,開発商品評価表を表示 する流れ図である。 入力データ 商品番号 (SyoBan) ×× 評価コード (Hcod) × 評価1 (Hyo(1)) ×× ~ 評価5 (Hyo(5)) ×× (第1図) 実行結果 (第2図) 処理条件 1.開発商品は 50 個であり,商品番号1~50 が割り 当てられている。 2.評価コードは1:消費者評価,2:社長評価であ る。評価1~評価5は1~10 点であり,消費者評価 のみ,各評価に配列 Omomi の値を乗じて求める。な お,値はあらかじめ記憶されている。 配列 (0) (1) (2) (3) (4) (5) 0momi 不使用 2 1 3 2 2 3.第1図の入力データを読み,以下の手順で配列 Kei に集計する。なお,配列 Kei の行方向は商品番号と 添字で対応している。 ・ 商品番号を0列目に転記する。 ・ 評価コードが1の場合,各評価を配列 Omomi で 乗じて求め,1列目から5列目に記憶する。評価 コードが2の場合,各評価をそのまま6列目から 10 列目に記憶する。 ・ 11 列目には評価計を集計する。 配列 Kei (0) (1) ~ (5) (6) ~ (10) (11) (0) ~ ~ (1) ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ (49) ~ ~ (50) ~ ~ (商品番号) (評価 1) ~ ( 評 価 5) (評価 1) ~ (評価5) (評価計) 4.入力データが終了したら,配列 Kei のデータを評 価計の降順に並べ替える。ただし,評価計が同じ場 合は商品番号の昇順に並べ替える。 5.データにエラーはないものとする。 ア.Kei(0,11) > Kei(n,11) イ.Hcod + 5 → h ウ.g + 5 → h エ.Hyo(SyoBan) × Omomi(g) オ.Kei(s,t) カ.Kei(0,s) → Kei(n + 1,s) キ.Hyo(g) × Omomi(g) ク.Kei(0,11) < Kei(n,11) ケ.Kei(t,s) コ.Kei(m,s) → Kei(0,s) 解答群 (開発商品評価表) (消費者評価) (社長評価) (商品番号) (評価1)~(評価5) (評価1)~(評価5) (評価計) 4 20 ~ 12 5 ~ 7 105 2 14 ~ 14 1 ~ 8 103 35 16 ~ 18 5 ~ 2 103 ~ ~ ~ ~ ~ ~ ~ ~ 31 2 ~ 18 5 ~ 7 60 6 8 ~ 6 6 ~ 8 54 <流れ図> は じ め ループ1 データがある間 SyoBan → Kei(SyoBan,0) お わ り ループ2 g は 1 から 1 ずつ増やして g ≦ 5 の間 ループ3 m は 2 から 1 ずつ増やして m ≦ 50 の間 ループ5 Kei(m,s) → Kei(0,s) YES NO 配列 Omomi を準備し, データを記憶する データを読む Hcod = 1 配列 Kei を準備し, 初期化する (1) → Kei(SyoBan,g) Kei(SyoBan,11) + Kei(SyoBan,g) → Kei(SyoBan,11) (2) Hyo(g) → Kei(SyoBan,h) Kei(SyoBan,11) + Kei(SyoBan,h) → Kei(SyoBan,11) ループ2 ループ4 s は 0 から 1 ずつ増やして s ≦ 11 の間 ループ4 ループ5 n は m - 1 から 1 ずつ減らして (3) の間 Kei(n,s) → Kei(n + 1,s) (4) ループ7 s は 0 から 1 ずつ増やして s ≦ 11 の間 ループ7 ループ8 t は 1 から 1 ずつ増やして t ≦ 50 の間 ループ9 ループ9 s は 0 から 1 ずつ増やして s ≦ 11 の間 (5) を表示 ループ8 ループ3 ループ1 ループ6 s は 0 から 1 ずつ増やして s ≦ 11の間 ループ6
[1級 Java選択者のための問題] 【7】 プログラムの説明を読んで,プログラムの(1)~(5)を答えなさい。 <プログラムの説明> 処理内容 データベースに記録された学籍番号と進路先コードから,学年進路先別割合を表示するプログラムである。 入力データ (表名:sinro) 実行結果 処理条件 1.第1図の入力データは,学籍番号と進路先コードが記録されている。なお,進路先コードは次のとおりである。 0:四大 1:短大 2:専門 3:企業 4:公務員 5:その他 sinro 表の内容 gakusekiBango code 3101 1 3102 4 ~ ~ 3540 0
2.sinro 表から学籍番号の昇順に抽出する 1 件分のデータごとに,getInt メソッドで取得したデータを次のような syukei オブジェクトと sinrobetu オブジェクトに人数を集計する。
syukei オブジェクト(配列) sinrobetu オブジェクト(配列)
getInt メソッドは,ResultSet オブジェクトの現在行にある指定された列の値を int として取得する。
3.第1図の入力データが終了したら,syukei オブジェクトの内容を第2図の実行結果のようにディスプレイに表示す る。 4.syukei オブジェクトの学年合計の降順に並べ替えを行う。なお,同じ人数の場合は,進路先コードの昇順に並べ替えら れる。 5.最後に,生徒人数に対する進路先別の割合を計算し,syukei オブジェクトと sinrobetu オブジェクトの内容を第2図の 実行結果のようにディスプレイに表示する。 <Javaプログラム> //クラス Sinro
public class Sinro {
public static void main(String[] args) { Syori syori = new Syori();
syori.sinrobetuSyukei(); Hyoji hyoji = new Hyoji(syori); hyoji.KurasuHyoji(); syori. (1) ; hyoji.GakunenHyoji(); } } //クラス Syori import java.sql.*; public class Syori {
private String[] sinrosaki = {"四 大","短 大", "専 門","企 業","公務員","その他"}; private int[][] syukei = new int[6][6];
private int[] sinrobetu = new int[3]; private int seitonin;
private ResultSet rs; private Statement stmt; private Connection con; public Syori(){ try {
Class.forName("ドライバ名");
con = DriverManager.getConnection("データベースの場所", "ユーザ名", "パスワード"); stmt = con.createStatement();
String sqlStr = "SELECT * FROM sinro ORDER BY gakusekiBango ASC"; rs = stmt.executeQuery(sqlStr); } catch (ClassNotFoundException e) { System.out.println("クラスが見つかりません"); } catch (SQLException e) { (0) (進学) (1) (就職) (2) (その他) (0) (1) (2) ~ (5) (0) ~ (3 年 1 組) (1) ~ (3 年 2 組) ~ ~ ~ ~ ~ ~ ~ (4) ~ (3 年5組) (5) ~ (学年合計) (四大) (短大) (専門) ~ (その他) (学籍番号) gakusekiBango ×××× ~ ~ ~ ~ ~ ~ ~ (進路先コード) code × (第1図) (第2図)
[1級 Java選択者のための問題]
System.out.println("エラーが発生しました"); }
}
public String[] getSinrosaki(){ return sinrosaki;
}
public int[][] getSyukei(){ return syukei; }
public int[] getSinrobetu(){ return sinrobetu; }
public int getSeitonin(){ return seitonin; }
public void sinrobetuSyukei() { try{
while (rs.next()) { int soe2;
int gakusekiNo = rs.getInt("gakusekiBango"); int sinroNo = rs.getInt("code");
int soe1 = gakusekiNo / 100 - 31; (2) ; syukei[5][sinroNo]++; if (sinroNo <= 2) { soe2 = 0; } else if (sinroNo <= 4) { soe2 = 1; } else { soe2 = 2; } sinrobetu[soe2]++; seitonin++; } rs.close(); stmt.close(); con.close(); } catch (SQLException e) { System.out.println("エラーが発生しました"); } }
public void sinrobetuSort() {
for (int m = syukei[5].length - 1; m > 0; m--) { for (int n = 0; n < m; n++) {
if (syukei[5][n] < syukei[5][n + 1]) { int hozonKei = syukei[5][n]; syukei[5][n] = syukei[5][n + 1]; syukei[5][n + 1] = hozonKei; String hozonSaki = sinrosaki[n]; sinrosaki[n] = sinrosaki[n + 1]; (3) = hozonSaki; } } } } } //クラス Hyoji public class Hyoji {
private Syori syori; private String[] sinrosaki; private int[][] syukei; private int[] sinrobetu; private int seitonin; public Hyoji(Syori syori){ this.syori = syori; sinrosaki = syori.getSinrosaki(); syukei = (4) ; sinrobetu = syori.getSinrobetu(); seitonin = syori.getSeitonin(); }
public void KurasuHyoji() { for (int m = 0; m < 5; m++) { int kumi = m + 1;
System.out.print("3 年" + kumi + "組");
for (int n = 0; (5) ; n++) { String ninzu = String.format("%2d",syukei[m][n]);
System.out.print("\t" + sinrosaki[n] + ":" + ninzu + "名"); }
System.out.println(); }
}
public void GakunenHyoji() { syori.sinrobetuSort();
System.out.println("◇学年進路先別割合◇"); for (int m = 0; m < syukei[5].length; m++) {
double wari = (double)syukei[5][m] * 100 / seitonin; String per = String.format("%.1f", wari);
System.out.println(sinrosaki[m] + ":" + "約" + per + "%"); } System.out.print("進 学:" + sinrobetu[0] + "名" + "\t"); System.out.print("就 職:" + sinrobetu[1] + "名" + "\t"); System.out.print("その他:" + sinrobetu[2] + "名" + "\t"); } }
[1級 マクロ言語選択者のための問題] 【7】 次のプログラムの説明を読んで,プログラム中の空欄(1)~(5)を答えなさい。 <プログラムの説明> 処理内容 ユーザーフォームから備品貸出返却情報を入力し,予約情報の更新および貸出可能リストを表示するプログラムである。 入出力データ ユーザーフォーム・実行結果 備品データ(ファイル名:bihin.csv) 備品管理番号 ××× ×~× 備品名 貸出フラグ × 貸出簿データ(ファイル名:kasidasi.csv) 備品管理番号 ××× 部署コード ××× ×××××× 貸出年月日 ×××××× 返却予定日 返却フラグ × 処理条件 1.第1図の備品データは,次のように備品管理番号の昇順に記録 されている。なお,備品数は 300 件以内であり,貸出フラグは 1 が 貸出中を示している。 bihin.csv の内容 配列 101,プロジェクタ ZX01,0 102,プロジェクタ ZX02,0 ~ ~ ~ 845,ホワイトボード,WBK4,1 2.第2図の貸出簿データは,次のように貸出番号の昇順に記録されている。なお,返却フラグは 1 が貸出中の備品である。 Kasidasi.csv の内容 配列 Kasi (0) (1) (2) (3) (4) (0) ~ (9999) (備品管理番号) (部署コード) (貸出年月日) (返却予定日) (返却フラグ) 3.TextBox1 および TextBox4 の日付の表示形式は次のとおりである。 例 2012 年 1 月 1 日 ⇒ 120101 4.備品データのうち,貸出可能機器(貸出フラグが 0 である備品)の備品管理番号と備品名を TextBox5 に表示する。 5.貸出の場合は,TextBox2~TextBox4 に使用者の情報を入力し、貸出ボタンをクリックする。 6.返却の場合は,借用している備品管理番号を TextBox2 に入力し、返却ボタンをクリックすると使用者情報を TextBox3 および TextBox4 に表示し、確認したのち、処理を行う。 7.貸出処理および返却処理を1件行うごとに、貸出可能リスト(TextBox5)を更新する。 8.終了ボタンをクリックすると第1図の備品データと第2図の貸出簿データを最新の状況に更新し,処理を終わる。 9.備品管理番号以外のデータにエラーはなく,操作は正常に行われるものとする。 <マクロ言語プログラム> Option Explicit
Dim Kasi(9999, 4) As Long
Dim BBkno(299) As Integer, BNamae(299) As String, BFlg(299) As Integer
Dim Kekka As Integer, f As Integer, n As Integer, p As Integer, h As Integer, s As Integer Private Sub UserForm_Initialize()
Call Byomi Call Kyomi
'▼システム日付を TextBox1 に表示する
TextBox1 = Format(Right(Year(Date), 2), "00") & Format(Month(Date), "00") & Format(Day(Date), "00") End Sub
Private Sub Byomi()
Open "bihin.csv" For Input As #1 n = 0
Do While (EOF(1) = False)
Input #1, BBkno(n), BNamae(n), BFlg(n) If BFlg(n) = 0 Then
TextBox5.Text = TextBox5.Text & BBkno(n) & " " & BNamae(n) & vbCr End If
n = n + 1 Loop
Close #1 End Sub
Private Sub Kyomi()
Open "kasidasi.csv" For Input As #2 p = 0
Do While (EOF(2) = False)
Input #2, Kasi(p, 0), Kasi(p, 1), Kasi(p, 2), Kasi(p, 3), Kasi(p, 4) p = p + 1
Loop Close #2 End Sub
Private Sub clr()
TextBox2.Text = "": TextBox3.Text = "": TextBox4.Text = "" End Sub (第1図) (第3図) BBkno BNamae BFlg (0) (0) (0) ~ ~ ~ ~ ~ ~ (299) (299) (299) (備品名) (第2図) 101,115,120425,120512,1
~ ~ ~ ~ ~
返却 本日の日付 120106 備品管理番号 244 (TextBox1) (TextBox2) 部署コード 114 (TextBox3) 返却予定日 120204 (TextBox4) 貸出可能リスト 備品管理番号 備品名 101 プロジェクタZX01 102 プロジェクタZX02 105 プロジェクタZX05 201 ノートPC BZ323 202 ノートPC BZ324 205 ノートPC BZ327 貸出 終了 (TextBox5) 貸出 ~ ~ 貸出 返却[1級 マクロ言語選択者のための問題] Private Sub 貸出_Click()
Dim k As Integer
Call tansaku(Val(TextBox2.Text)) If (1) And BFlg(Kekka) = 0 Then
Kasi(p, 0) = Val(TextBox2.Text): Kasi(p, 1) = Val(TextBox3.Text): Kasi(p, 2) = Val(TextBox1.Text) Kasi(p, 3) = Val(TextBox4.Text): Kasi(p, 4) = 1: BFlg(Kekka) = 1
TextBox5.Text = ""
MsgBox "貸出処理が完了しました" p = p + 1
Else
If Kekka >= 0 And BFlg(Kekka) = 1 Then MsgBox "入力された備品は貸出中です" Else MsgBox "備品管理番号が間違っています。再入力してください。" End If End If For k = 0 To n - 1 If BBkno(k) <> 0 Then If BFlg(k) = 0 Then
TextBox5.Text = TextBox5.Text & BBkno(k) & " " & (2) & vbCr End If Else Exit For End If Next k Call clr End Sub
Private Sub 返却_Click() Dim Kotae As Integer For f = 0 To n - 1 If Val(TextBox2.Text) = (3) Then Exit For End If Next f TextBox3.Text = Str(Kasi(f, 1)) TextBox4.Text = Str(Kasi(f, 3))
Kotae = MsgBox("部署コードと返却予定日に間違いはありませんか?", vbYesNo) '▼「はい」「いいえ」を選択する MsgBox If Kotae = 6 Then '▼「はい」がクリックされた時 Kasi(f, 4) = 0 Call tansaku(Val(TextBox2.Text)) BFlg(Kekka) = 0 TextBox5.Text = "" For s = 0 To n - 1 If BFlg(s) = 0 Then
TextBox5.Text = TextBox5.Text & BBkno(s) & " " & BNamae(s) & vbCr End If Next s MsgBox "返却処理が完了しました" Call clr Else '▼「いいえ」がクリックされた時 MsgBox "返却処理を中止しました" Call clr End If End Sub
Private Sub tansaku(h As Integer)
Dim Ue As Integer, Sita As Integer, m As Integer, Chk As Integer Ue = n: Sita = -1: Chk = 0
Do While (Chk = 0) m = (4) Select Case BBkno(m) Case Is = h: Chk = 1 Case Is < h: Sita = m Case Else: Ue = m End Select If Sita + 1 = Ue Then Chk = 2 End If Loop Select Case Chk Case 1: (5) Case 2: Kekka = -1 End Select End Sub
Private Sub 終了_Click()
Open "bihin.csv" For Output As #1 For f = 0 To n - 1
Write #1, BBkno(f), BNamae(f), BFlg(f) Next f
Close #1
Open "kasidasi.csv" For Output As #2 For f = 0 To p - 1
Write #2, Kasi(f, 0), Kasi(f, 1), Kasi(f, 2), Kasi(f, 3), Kasi(f, 4) Next f
Close #2 End End Sub
[1級 COBOL選択者のための問題] 【7】 プログラムの説明を読んで,プログラムの(1)~(5)を答えなさい。 <プログラムの説明> 処理内容 ある高校の生徒ファイルと図書館貸出ファイルを読み,図書貸出数一覧表を印字するプログラムプログラムである。 入力データ 生徒ファイル(ファイル名:SEITO-FL,レコード名:SEITO-REC) 生徒番号 (S-BAN) ×××× 名前 (S-NAMAE) ×~× 図書館貸出ファイル(ファイル名:KASIDASI-FL,レコード名:KASIDASI-REC) 貸出日 (K-TUKIHI) ×××× 生徒番号 (K-BAN) ×××× 分類番号 (K-BUN) ××× 図書番号 (K-NO) ××× 実行結果 (ファイル名:OUT-FL,レコード名:OUT-REC) 処理条件 1.第1図の生徒ファイルは,生徒番号の昇順に記録されている。なお,生徒数は 1,000 人以内である。 2.生徒ファイルを読み,テーブル NAMAE-TBL に名前を,テーブル TOSYO-TBL の1列目に生徒番号を記憶する。 テーブル NAMAE-TBL T-NAMAE (1) ■~■ (2) ▽~▽ ~ ~ (1000) テーブル TOSYO-TBL T-TOSYO (1) (2) ~ (11) (12) (13) (1) 1101 ~ (2) 1102 ~ ~ ~ ~ ~ ~ ~ ~ (1000) ~ (生徒番号) (000~099) (総記) ~ ~ (900~999) (文学) (合計) (順位) 3.第2図の図書館貸出ファイルを読み,テーブル TOSYO-TBL に図書貸出数を集計する。なお,12 列目には生徒ごとの貸出 数の合計を集計する。 ・ 生徒番号をもとに,テーブル TOSYO-TBL の1列目を探索し,行方向の添字を求める。 ・ 分類番号の百の位は大分類(0~9)であり,列方向の添字(2~11)を計算により求める。 4.図書館貸出ファイルを読み終えたあと,テーブル TOYO-TBL の合計の降順に順位をつける。 5.第3図のように順位の昇順に印字する。 6.データにエラーはないものとする。 (第3図) (図書貸出数一覧表) (生徒番号) (名前) (総記) ~ (文学) (合計) (順位) 2204 ×~× 14 ~ 21 277 1 3622 △~△ 8 ~ 33 275 2 ~ ~ ~ ~ ~ ~ ~ 1329 ○~○ 0 ~ 1 12 792 (第1図) (第2図)
[1級 COBOL選択者のための問題] <COBOLプログラム>
WORKING-STORAGE SECTION. ~
01 PRINT-L.
02 PIC X(02) VALUE SPACE. 02 P-BAN PIC 9(04).
02 PIC X(06) VALUE SPACE. 02 P-NAMAE PIC X(14).
02 P-SYUKEI OCCURS 12.
03 PIC X(03) VALUE SPACE. 03 P-SU PIC Z,ZZ9.
PROCEDURE DIVISION.
S1. OPEN INPUT SEITO-FL KASIDASI-FL OUTPUT OUT-FL INITIALIZE E-FLG CNT TOSYO-TBL
PERFORM UNTIL E-FLG = 1 READ SEITO-FL
AT END MOVE 1 TO E-FLG NOT AT END
COMPUTE CNT = CNT + 1 MOVE S-NAMAE TO T-NAMAE(CNT) MOVE S-BAN TO T-TOSYO(CNT 1) (1) END-READ
END-PERFORM INITIALIZE E-FLG
PERFORM UNTIL E-FLG = 1 READ KASIDASI-FL
AT END MOVE 1 TO E-FLG NOT AT END
MOVE 0 TO KAG
(2) COMPUTE M = (KAG + JOG) / 2 PERFORM UNTIL T-TOSYO(M 1) = K-BAN IF T-TOSYO(M 1) < K-BAN
THEN MOVE M TO KAG ELSE MOVE M TO JOG END-IF
COMPUTE M = (KAG + JOG) / 2 END-PERFORM
(3)
COMPUTE T-TOSYO(M SOE) = T-TOSYO(M SOE) + 1 COMPUTE T-TOSYO(M 12) = T-TOSYO(M 12) + 1 END-READ
END-PERFORM
PERFORM VARYING N FROM 1 BY 1 UNTIL N = CNT COMPUTE S = N + 1
PERFORM VARYING T FROM S BY 1 UNTIL T > CNT IF (4)
THEN COMPUTE T-TOSYO(N 13) = T-TOSYO(N 13) + 1 ELSE IF T-TOSYO(N 12) > T-TOSYO(T 12)
THEN COMPUTE T-TOSYO(T 13) = T-TOSYO(T 13) + 1 END-IF
END-IF END-PERFORM END-PERFORM
PERFORM VARYING JUN FROM 1 BY 1 UNTIL JUN > CNT PERFORM VARYING N FROM 1 BY 1 UNTIL N > CNT IF T-TOSYO(N 13) = JUN
THEN MOVE T-TOSYO(N 1) TO P-BAN MOVE T-NAMAE(N) TO P-NAMAE
PERFORM VARYING (5) MOVE T-TOSYO(N P) TO P-SU(P - 1)
END-PERFORM
WRITE OUT-REC FROM PRINT-L AFTER 1 END-IF
END-PERFORM END-PERFORM
CLOSE SEITO-FL KASIDASI-FL OUT-FL STOP RUN.