2 部データ構造とアルゴリズムI レポート課題

本講義では以下の 2 通のレポートで評価する。 レポートは A4 の紙を縦に使い、適宜表紙を付けて提出すること。 またプログラムは C 言語で作成しなさい。

課題1

レポート締切日: 2004年11月25日(木)

次の 3 つの課題を合わせて行い、報告しなさい。

課題 1-1

次の条件を満たす関数 dispArray() を作りなさい。

  1. 入力は整数型のポインタ
  2. 入力されたポインタに対して、順に格納されている正の整数を 10 個ずつ 表示する。
  3. 入力に -1 が入っていたら終了する

例えば整数型の配列 a[] が 1 から 15 まで順に入っていて、最後に -1 が入っ ている時、dispArray(a) は次のような出力をする。

1 2 3 4 5 6 7 8 9 10
11 12 13 14 15

課題 1-2

次の条件を満たす関数 rotate() を作りなさい。

  1. 入力は整数型のポインタ
  2. 入力データはポインタから順に正の整数が並び、最後に -1 の値で終了す る
  3. この関数は入力されたポインタに対して、最初の正の整数値を一番後ろ (-1 の手前)に移動し、残りのデータは一つずつ前にずらす。

例えば 1, 2, 3, -1 という配列の先頭番地を rotate() に与えると 2, 3, 1, -1 となります。

課題 1-3

課題 1-1, 1-2 で作成した dispArray(), rotate() に対して次のプログラム を動かし結果を報告しなさい。

#include <stdio.h>
dispArray(int *p);
rotate(int *p);
#define N 99
main(){
  int *a[5];
  int b[]={-1};
  int c[]={1,-1};
  int d[]={1,2,3,-1};
  int e[N+1];
  int i,j;
  for(i=0;i<N;i++){
    e[i]=i;
  }
  e[N]=-1;
  a[0]=b; a[1]=c; a[2]=d; a[3]=e; a[4]=NULL;
  for(i=0;a[i]!=NULL;i++){
    dispArray(a[i]);
    for(j=0;j</*学籍番号の下 3 桁*/; j++){
      rotate(a[i]);
    }
    dispArray(a[i]);
  }
}

課題2

レポート締切日: 2005年1月13日(木)

テキストファイルの入力に対して行数の短い順に並べて出力しなさい。 但し、空行は出力しないこと。 また、各行は高々 80 文字と仮定し、もし 80 文字を越えている行があればそ れは 80 文字までしか読まないこととする。

実行例として、作成したプログラムリストと、 http://www.w3c.org/のページのソース ファイルをそれぞれ与え、出力される最初の 5 行と最後の 5 行を示しなさい。


坂本直志 <sakamoto@c.dendai.ac.jp>
東京電機大学工学部情報通信工学科