Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

平成19年度秋季基本情報午後問4

平成19年度秋季 基本情報技術者試験(FE)の午後問題4は、

  • スタックを使って、実数値を10新文字列(文字列)に変換する副プログラムFloatFormat

に関する問題でした。

f:id:rahaema:20190328183751p:plain

プログラム例(h19a_fe_pm4.c)

疑似言語を具現化するにあたり、FloatFormat関数の仕様を以下のように変更してあります。

  • 返り値が文字列の長さでしたが、char型へのポインタを返すように変更
  • 仮引数名Floatをvalに変更

実行結果

$ gcc h19a_fe_pm4.c && ./a.out
12.345
34.56
-12.3
0.01
0.0
-0.01

関連

平成20年度春季ソフトウェア開発午後問5

平成20年度春季 ソフトウェア開発技術者試験(SW)の午後問題5は、

に関する問題でした。

f:id:rahaema:20190326183842p:plain

プログラム例(h20h_sw_pm5.c)*1

実行結果

$ gcc h20h_sw_pm5.c && ./a.out
1 2 3 4 5 6 7 8

バブルソートとの速度比較

これだけで終わっては面白くないので、効率の悪いことで有名な O(n^2)アルゴリズムであるバブルソートと速度比較を行ってみました。

次のようにプログラムを加筆修正しました。

#include <time.h>

void bubble_sort(int [], int );

void bubble_sort(int a[], int n) {
  int i, j, tmp;
  for (i = 0; i < n - 1; i++) {
    for (j = n - 1; j > i; j--) {
      if (a[j - 1] > a[j]) {
        tmp = a[j - 1];
        a[j - 1] = a[j];
        a[j] = tmp;
      }
    }
  }
}

int main(void) {
  int hnum = 100000, i;
  int arr1[hnum], arr2[hnum];
  clock_t c1, c2;

  srand((unsigned)time(NULL));
  for (i = 0; i < hnum; i++) {
    arr1[i] = arr2[i] = rand();
  }

  c1 = clock();
  merge_sort(arr1, 0, hnum - 1);
  c2 = clock();
  printf("Merge Sort  = %f[s]\n", (double)(c2-c1)/CLOCKS_PER_SEC);

  c1 = clock();
  bubble_sort(arr2, hnum);
  c2 = clock();
  printf("Bubble Sort = %f[s]\n", (double)(c2-c1)/CLOCKS_PER_SEC);
  return 0;
}

実行結果

要素の数を100000個でやってみたのが以下です。

$ gcc h20h_sw_pm5_cmp.c && ./a.out
Merge Sort  = 0.044918[s]
Bubble Sort = 36.233415[s]

以前、ヒープソートとバブルソートでの速度比較を行ったときも、O(n \log n)O(n^2)の性能差を肌で感じることができましたが、O(n \log n)アルゴリズムであるマージソートも高速ですね。

関連

*1:実装の都合でフローチャートの関数構成と少し変更しています。

平成20年度春季基本情報午後問10

平成20年度春季 基本情報技術者試験(FE)の午後問題10は、

に関する問題でした。

f:id:rahaema:20190324221843p:plain

プログラム例(h20h_fe_pm10.c)

実行結果

$ gcc h20h_fe_pm10.c && ./a.out
32 = 32/1
5.237 = 5237/1000
0.875 = 7/8
1.{3} = 4/3
0.2{142857} = 3/14

平成20年度春季基本情報午後問6

平成20年度春季 基本情報技術者試験(FE)の午後問題6は、

  • 文書から参考資料名を抜き出して、参照番号に置き換えるとともに、文書の末尾に参考資料名の一覧を追加して、出力するプログラム

に関する問題でした。

f:id:rahaema:20190324173651p:plain

プログラム例

C言語版(h20h_fe_pm6.c)

Ruby版(h20h_fe_pm6.rb)

実行結果

from.txt(元の文書)

The program language includes C, COBOL, Java, etc\Computer Journal. The feature of the Java language has been to have taken the idea of object-oriented\Java Report. In other languages, the idea of object-oriented is being taken\Computer Journal.

コンパイル & 実行

$ gcc h20h_fe_pm6.c && ./a.out from.txt to.txt (C言語での実行)
$ ruby h20h_fe_pm6.rb from.txt to.txt          (Rubyでの実行)

to.txt(出力された文書)

The program language includes C, COBOL, Java, etc[1]. The feature of the Java language has been to have taken the idea of object-oriented[2]. In other languages, the idea of object-oriented is being taken[1].

References

    

[1] Computer Journal

[2] Java Report

平成20年度春季基本情報午後問4

平成20年度春季 基本情報技術者試験(FE)の午後問題4は、

  • 配列を用いたリスト

に関する問題でした。

f:id:rahaema:20190323180320p:plain

プログラム例(h20h_fe_pm4.c)

実行結果

設問2を実行した様子が以下です。

$ gcc h20h_fe_pm4.c && ./a.out
usb -> cgi -> cpu -> dos -> fat
1
cgi -> usb -> cpu -> dos -> fat
2
cpu -> cgi -> usb -> dos -> fat
3
dos -> cpu -> cgi -> usb -> fat

平成20年度春季基本情報午後問2

平成20年度春季 基本情報技術者試験(FE)の午後問題2は、

に関する問題でした。

f:id:rahaema:20190322213046p:plain

プログラム例(h20h_fe_pm2.c)

実行結果

$ gcc h20h_fe_pm2.c && ./a.out
2

関連

平成20年度秋季基本情報午後問10

平成20年度秋季 基本情報技術者試験(FE)の午後問題10は、

  • (換字暗号)与えられた平文を、換字表を用いて暗号文に変換する関数encrypt_text関数

に関する問題でした。

f:id:rahaema:20190321150541p:plain

プログラム例(h20a_fe_pm10.c)

実行結果

試験問題では、暗号化する関数のみでしたが、元に戻せないと面白くないので、平文に戻す復号関数(decrypt_text)も作って試してみました。換字表についても、問題文とは異なっています(単純な換字表です)。

コンパイル

$ gcc h20a_fe_pm10.c -o fecrypt

平文(in.txt)

This is a plain text.
Good Luck!!

暗号化(in.txt -> out.txt)

$ ./fecrypt e in.txt out.txt
 !"#$%&'()*+,-./0123456
789:;<=>?@ABCDEFGHIJKLM
NOPQRSTUVWXYZ[\]^_`abcd
efghijklmnopqrstuvwxyz{

暗号化されたファイル(out.txt)

Qkjt$ee.N3qmRxe)ufyu0
E++N6GzTz99

復号(out.txt -> tmp.txt)

$ ./fecrypt d out.txt tmp.txt
 !"#$%&'()*+,-./0123456
789:;<=>?@ABCDEFGHIJKLM
NOPQRSTUVWXYZ[\]^_`abcd
efghijklmnopqrstuvwxyz{
$ cat tmp.txt
This is a plain text.
Good Luck!!

関連