2024年度「プログラミング言語1」「プログラミング言語演習」のページ

練習問題

2024年7月11日出題

  1. 標準入力からテキストを入力し、それを元に三つのファイルredとgreenとblueを作るプログラムを書け。

    どんなに長い行にも対応できるプログラムが望ましい。難しければ、行の長さ(改行文字を除く文字数)が1024未満であると仮定しても良い。

    1. 行番号を 3 で割って 1 余る行をファイルredに、 2 余る行をファイルgreenに、割り切れるファイルをblueに書き込む。なお、行番号は 1 から始まるものとする。

    2. 行番号が 2n の形で書ける行をファイルredに、 2np の形で書ける行をファイルgreenに、その他の行をファイルをblueに書き込む。ただし、 n は非負整数、 p2 以外の素数とする。なお、行番号は 1 から始まるものとする。

      ヒント
      ある正整数 x2n であるか 2np であるかそれ以外であるかは、次のようにして判定できる。
      • x2 で割れるだけ割る。その結果を y をする。
        • y1 ならば、 x2n の形である。
        • y が素数ならば、 x2np の形である。
        • y が上記二項のいずれでもなければ、 x2n でも 2np でもない。
    3. #で始まる行をファイルredに、%で始まる行をファイルgreenに、その他の行をファイルblueに書き込む。

      ヒント
      いまいる行の先頭の文字が何であったかを覚えておくようにすれば良い。
    4. アルファベットで始まる行をファイルredに、数字で始まる行をファイルgreenに、その他の行をファイルblueに書き込む。

    5. [やや難]  #で始まりその次の文字がアルファベットである行をファイルredに、%で始まりその次の文字が数字である行をファイルgreenに、その他の行をファイルblueに書き込む。

  2. 二つのテキストファイルgoldとsilverがあるとする。以下を行うプログラムをそれぞれ書け。

    1. まず、ファイルgoldの中身を標準出力に出力し、その後、ファイルsilverの中身を標準出力に出力する。

    2. ファイルgoldの中身とファイルsilverの中身を行ごとに交互に標準出力に出力する。すなわち、ファイルgoldの1行目、ファイルsilverの1行目、ファイルgoldの2行目、ファイルsilverの2行目、ファイルgoldの3行目、ファイルsilverの3行目、……のように標準出力に出力する。どちらかのファイルが先に尽きたら、残りはそのまま出力するものとする。

  3. 標準入力からテキストを入力し、各行ごとに以下の処理を行って標準出力に出力するプログラムを書け。ただし、各行は以下の書式であると仮定して良い。

    • 1行は1023文字以下である。(改行文字は数えない)
    • アルファベット1文字と1個以上8個以下の整数が空白区切りでこの順に並んでいる。
    • それ以外の余計な文字は一切含まれない。
    1. 最初の文字が A のときはその行に最初に出現する整数を、a のときは最後に出現する整数を、M のときはその行の整数の最大値を、m のときは最小値を出力する。それ以外のときは * だけからなる行を出力する。

  4. まず、標準入力からファイル名の一部(以下、仮にnameとする)を読み込む。 二つのファイルname_i1, name_i2があって、それぞれ、long longで扱える範囲の整数がテキスト形式で空白文字(isspace()で真と判定される文字)で区切られて格納されているものとする。すなわち、どちらのファイルもfscanf(fp, "%lld", &x)を繰り返して入力できる形式で整数の並びが格納されているものとする。以下の計算を行い、その結果を二つのファイルname_o1, name_o2に書き込むプログラムをそれぞれ書け。ただし、該当するファイル名のファイルが存在しなければ作成し、すでに存在すれば上書きせよ。

    以下、ファイルname_i1の中身は x 1 x 2 x 3 x m で、ファイルname_i2の中身は y 1 y 2 y 3 y n であるとする。 m = n とは限らないので、以下、 N = min { m , n } とする。

    1. ファイルname_o1に min { x 1 , y 1 } min { x 2 , y 2 } min { x 3 , y 3 } min { x N , y N } を計算したものを書き込み、ファイルname_o2に max { x 1 , y 1 } max { x 2 , y 2 } max { x 3 , y 3 } max { x N , y N } を計算したものを書き込む。


奈良女子大学生活環境学部文化情報学科生活情報通信科学コース