プログラミング II・2月 2日


先週の Keytouch2000の結果

平均が下がってしまった。
これまでの結果

先週の課題について

複素数を real, imaginaryの 2つの double型のメンバを持つ構造体 complexとして定義し、共役複素数を求める関数 conjを定義せよ。
解答例:
#include <stdio.h>

struct complex {
  double real, imaginary;
};

struct complex conj(struct complex z) {
  z.imaginary *= -1;
  return z;
}

int main () {
  struct complex c1, c2;
  
  printf("複素数の実部と虚部を入力してください。\n");
  scanf("%lf %lf", &(c1.real), &(c1.imaginary));
  c2 = conj(c1);
  printf("その共役複素数の実部, 虚部は %g, %gです。\n", c2.real, c2.imaginary);
}
コメント:

第 5 章 ポインタと構造体

5.2.4 リスト構造(の途中) 〜
char**の絵

第 6 章 オブジェクト指向とクラス


今週の課題

  1. スケジュールのリスト schに対して、 与えられた日付 dに予定があれば、"予定があります。"というメッセージと その予定を出力し、予定がなければ、"予定がありません。" と出力する関数 void findSchedule(struct st_schedule* sch, int d)を定義せよ。
  2. スケジュールのリスト schに対して、 各スケジュールの次の日に、休み("Vacation!")というスケジュールを挿入する関数 void insertVacation(struct st_schedule* sch)を定義せよ。 つまり、次のような予定
    20000202	プログラミング II
    20000215	○○期末試験
    
    は次のようになる:
    20000202	プログラミング II
    20000203	休み!
    20000215	○○期末試験
    20000216	休み!
    
    なお、スケジュールが各月の末日の場合の繰り上がり処理は、 この課題では考慮しなくて良い。

    テンプレート:
    #include <stdio.h>
    
    struct st_schedule {
      int date;
      char memo[128];
      struct st_schedule* next;
    };
    
    void insertSchedule(struct st_schedule* prev, int date, char* memo){
       struct st_schedule* newSch;
     
       newSch = (struct st_schedule*)malloc(sizeof(struct st_schedule));
       newSch->date = date;
       strcpy(newSch->memo, memo);
       
       newSch->next = prev->next;
       prev->next   = newSch;
    }
    
    void printSchedule(struct st_schedule* sch) {
       for(; sch!=NULL; sch=sch->next) {
          printf("%d: %s\n", sch->date, sch->memo);
       }
    }
    
    void findSchedule(struct st_schedule* sch, int date) {
      /* ここに書き足す。*/
    }
    
    void insertVacation(struct st_schedule* sch) {
      /* ここに書き足す。*/
    }
    
    int main() {
       struct st_schedule dummy = {0, "", (struct st_schedule *)NULL};
       int  date;
       char buf[256], memo[128]; 
       struct st_schedule *cur=&dummy, *prev;  
    
       /* いちいちキーボードから入力するのが面倒なときは次のコメントをはずす */
       /*
       struct st_schedule prog2[] = {
          19991105, "第1回レポート提出", (struct st_schedule *)NULL,
          19991126, "第2回レポート提出", (struct st_schedule *)NULL,
          20000118, "第3回レポート提出", (struct st_schedule *)NULL,
          20000202, "プログラミングII最終日", (struct st_schedule *)NULL,
          20000223, "第4回レポート提出", (struct st_schedule *)NULL,
       };
     
       int i;
       int n=sizeof(prog2)/sizeof(struct st_schedule);
    
       dummy.next = prog2;
       for (i=1; i<n; i++) {
         prog2[i-1].next = &prog2[i];
       }
       cur = &prog2[n-1];
       */
    
       while(1) {  /* 入力 */ 
          printf("「年月日 用件」を入力(例: 20000203 Setsubun)\n");
          printf("空行で終了\n");
          fgets(buf, 256, stdin);
          if (sscanf(buf, "%d %s", &date, memo)<2) break;
          insertSchedule(cur, date, memo);
          cur=cur->next;
       }
    
       findSchedule(dummy.next, 20000223);
       /* insertVacation(dummy.next); */
       printSchedule(dummy.next);
    }
    


「プログラミング II」アンケート(2000年 2月 2日)


プログラミング IIで扱えなかった事柄

以下の C言語に関する事柄は、プログラミング IIの中で扱えませんでした。 今後、必要になることもありますので、是非とも各自で学習しておいてください。
PREV, UP
Koji Kagawa (kagawa@eng.?????)