Mae向きなブログ

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

平成16年度春期基本情報午後問10

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

  • C言語の注釈を除去して標準出力へ出力するプログラム

に関する問題でした。

f:id:rahaema:20190603215346p:plain

プログラム1(h16h_fe_pm10_1.c)

実行結果

コンパイル後、自分自身(h16h_fe_pm10_1.c)の注釈を除去してみました。うまく除去できているようですが、これはたまたまうまく実行できたにすぎません。

$ gcc h16h_fe_pm10_1.c && ./a.out < h16h_fe_pm10_1.c
#include <stdio.h>
void quote(char );

int main(void) {
  int c1, c2;

  while ((c1 = getchar()) != EOF) {

    if (c1 == '\'') quote('\'');

    else if (c1 == '\"') quote('\"');

次に9行目をif (c1 == '\'')だけにして実行してみると、以下のように注釈文がきちんと除去されませんでした。これは設問1の内容ですが、先の実験が偶然うまくいったにすぎないということが分かりますね。

$ ./a.out < h16h_fe_pm10_1.c
#include <stdio.h>
void quote(char );

int main(void) {
  int c1, c2;

  while ((c1 = getchar()) != EOF) {

    if (c1 == '\'')
    /* 二重引用符の検出 */
    else if (c1 == '\"') quote('\"');

プログラム2(h16h_fe_pm10_2.c)

プログラム1の欠点を修正したものが以下です。

実行結果

プログラム1では除去できなかった注釈文を今度はきちんと除去することができました。

$ gcc h16h_fe_pm10_2.c && ./a.out < h16h_fe_pm10_1.c
#include <stdio.h>
void quote(char );

int main(void) {
  int c1, c2;

  while ((c1 = getchar()) != EOF) {

    if (c1 == '\'')

    else if (c1 == '\"') quote('\"');

関連

平成16年度春期基本情報午後問6

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

  • n個の点が与えられたとき、これらの点を全て含む円のうち、半径が最小である円の中心座標と半径を求めるプログラム

に関する問題でした。n個の点の座標やLOOPMAXを色々と変化させて試してみると面白そうですね。

f:id:rahaema:20190602212426p:plain

プログラム例(h16h_fe_pm6.c)

実行結果

$ gcc h16h_fe_pm6.c && ./a.out
  円の中心座標 (  55.00000000,  55.00000000 ) 半径 =  45.27692569

関連

平成16年度春期基本情報午後問4

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

に関する問題でした。「情報処理技術者試験の過去問を実際に動かしてみよう!」のリストを見ると、マージソートは過去少なくとも3回は出題されていますね。

f:id:rahaema:20190601143452p:plain

プログラム例(h16h_fe_pm4.c)

実行結果

$ gcc h16h_fe_pm4.c && ./a.out
 10 25 33 47 55 68 74 89

関連

平成16年度秋期基本情報午後問6

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

に関する問題でした。

f:id:rahaema:20190522212635p:plain

プログラム例(h16a_fe_pm6.c)

実行結果

"基本情報技術者試験"という文字列(UTF-8)をURLエンコードし、URLデコードして元の文字列に戻るかどうかテストしています。

$ gcc h16a_fe_pm6.c && ./a.out
%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93
基本情報技術者試験

関連

平成16年度秋期基本情報午後問4

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

  • M進文字列をN進文字列に基数変換するプログラム

に関する問題でした。

f:id:rahaema:20190520051649p:plain

プログラム例(h16a_fe_pm4.c)

実行結果

実行例の1行目は、10進数の255を2進数へ。2行目は16進数のFFを2進数へ。最後の行は、16進数のFFを2進数に変換後すぐに16進数に戻しています。

$ gcc h16a_fe_pm4.c && ./a.out
11111111
11111111
FF

関連

平成16年度秋期基本情報午後問10

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

  • タートルグラフィックス(簡易版)

に関する問題でした。本問ではマーカ(亀)の進行方向が上下左右の4通りしか指定できませんが、t60などと角度指定できるように拡張すれば、もっと面白くなりそうですね。

f:id:rahaema:20190519170221p:plain

プログラム例(h16a_fe_pm10.c)

描画先をTikZにしてみました。それに伴い以下のような変更を行なっています。

  • キャンバスのサイズ、マーカの初期値を1/10に設定
  • 座標の原点が左上から左下へ

実行結果

$ gcc h16a_fe_pm10.c && ./a.out > picture.tex
$ ptex2pdf -u -l picture.tex && open picture.pdf

f:id:rahaema:20190519165216p:plain

注意点

空欄eは、要注意です。}に到達した時点で繰り返し回数の1回分を実行したことになりますね。引っかかってしまいました。

関連

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

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

  • リスト

に関する問題でした。

f:id:rahaema:20190518103351p:plain

プログラム例(h17h_sw_pm5.c)

実行結果

リストに対して設問1を実行してみました。

$ gcc h17h_sw_pm5.c && ./a.out
(10, 40, 20)

関連