ソフトウエア演習B(2000年度)

 2年生のための指導の要点

第1回
10/06
ソフトウエア開発概説およびC言語初歩

●学習者(1年生)の前提知識

 ソフトウエア演習Aを学んできた。

  1. WSの基本的な操作は習得している(ファイルの操作等)。
  2. プログラミングについては、シェルプログラミングをやっている(if文、case文、for文、while文、until文など;演習A第13回)。
  3. 手書きでフローチャートを書いた経験もある(演習A第13回)。
  4. muleやviを使うことができる(演習A第4回)。
  5. 図を埋め込んだLatex 文書も作ることができる(演習A第6〜10回)。
  6. 電子メール、Web、ftp、telnet等のインターネットサービスも利用できる。

●演習B指導上の注意点(全体を通して)

  1. レポート作成には、必ずmuleもしくはvi を使わせること(テキストエディタは使わない)。
  2. ファイルマネージャは使わせないこと(必ずコマンドラインから操作させること)。  

●学習目標(第1回)

  1. 端子記号・データ記号・処理記号・判断記号・ 準備記号を用いたフローチャートが書けるようになる。
  2. C言語でプログラムを組み、コンパイルをし、実行をするという一連の流れができるようになる。

●指導の要点(第1回)

 [フローチャートに関して]

 [C言語について]

●レポート評価上の注意

 

ソフトウエア演習Bのページへ

 

第2回
10/13
C言語文法基礎(1)

●演習B指導上の注意点(全体を通して)

  1. レポート作成には、必ずmuleもしくはviで行い(テキストエディタは使わない)、そしてLatex を使わせること。
  2. ファイルマネージャは使わせないこと(必ずコマンドラインから操作させること)。  

●指導の要点

 前回の演習で学んだ知識を使いながら(復習をしながら)、やっていくとよいでしょう。
 特にフロチャートでやった部分は、選択構造(if等)、制御構造(while等) をはじめとして、さらに宣言と式や演算子等の話にもつなげることができます(X,Yとかの変数を利用して代入や加算などを考えたりしたので)。
 printf関数の話なども、前回のHello Worldで出てきた延長線上の話としてできると思います。
 鈴木研には本棚(学生研究室の棚の一番右)に、参考図書が置いてあることも確認しておいてください。

 まだまだ1年生はプログラム(C言語)には慣れていないので、とういよりも初めてまともにプログラムを組むことになりますので、根気よく指導してあげてください。

[重要と思われる点をいくつか]

●レポート評価上の注意

 

ソフトウエア演習Bのページへ

 

第3回
10/20
C言語文法基礎(2)

今回は、テキストの内容が盛りだくさんです(つめこみすぎって話しも...)。教える内容がいっぱいありますので、うまく時間を使って(ある程度区切って、わかったかを確認しながら)教えてあげてください。演習内容は、大きくわけて、データ型と関数とスコープの3つがあります。

●学習目標

  1. 自分の作成するプログラムにとって適切な、データ型の宣言と入出力の変換仕様の指定を行うことができる。
  2. 引数を受け取り、戻り値を返す関数を自分で定義できるようになる。
  3. 関数を利用したプログラム中で、ローカル変数とグローバル変数のスコープを説明することができる。

●指導の要点(重要と思われる点を挙げておきます)

●レポート評価上の注意

 

ソフトウエア演習Bのページへ

 

第4回
11/10
変数と型(1)

 今回も重要な概念を詰め込みすぎ状態です。1年生が理解したかを一歩づつ確かめながら進めていってください。

●学習目標

  1. 配列を利用してデータを整理し、forループなどを利用して効率良くデータを参照できるようになる。
  2. ポインタを利用したデータの代入と、関数の参照呼出しができるようになる。
  3. argvとargcを用いて、コマンドからの引数をプログラム中で利用することができるようになる。
  4. キャスト変換を用いて、データの型を変換することができるようになる。

●指導の要点(重要と思われる点や注意しなければならない点を挙げておきます)

●レポート評価上の注意

ソフトウエア演習Bのページへ

 

第5回
11/17
変数と型(2)

 今回は構造体のみがテーマなので、学ぶべきことはわかりやすいのですが、これまで学習したこと(例えば第4回の配列とポインタ、第3回のメモリ、関数や再帰..などなど)を理解していないと、ちんぷんかんぷんになってしまいます。もし、1年生がよく理解していない場合は、どこでつまずいているのかを明らかにし、そこに戻って指導してあげるようにしてください。なお、今回のテキストの途中に共用体なるものがありますが、課題にも出ていないし、何に利用できるのかテキストを読んでもさっぱりわかりませんので、フォローするか、もしくは後で読んでね程度で詳しくは触れなくてもけっこうです(この下に少し解説しておきましたので、これを読ませても良い)。

●学習目標

  1. 構造体の宣言(構造体変数の宣言も含む)ができるようになる。
  2. 構造体メンバへの代入と参照ができるようになる。
  3. 構造体配列を宣言と初期化をし、メンバの参照ができるようになる。
  4. 構造体へのポインタを利用した、メンバへの代入・参照ができるようになる。
  5. 構造体型の関数を定義し、構造体型の変数を戻り値とすることができるようになる。
  6. ビットフィールドを用いた構造体メンバを宣言し、代入・参照ができるようになる。

●指導の要点

●レポート評価(作成)上の注意

●番外編 「共用体」って何に使えるの?

 共用体は、構造体とほぼ構造の面は一緒だが(宣言もそっくり)、同じアドレスからはじまるメモリ領域に複数の型の変数を重ねて割り当て、1つの名前で管理するもの(p.9)である。つまり、共用体のメンバはすべて重なって存在していることになる。ということは、ひとつのメンバに何かの値を代入し、もうひとつのメンバーに何か値を代入したら、先に代入していたメンバの値は壊れてしまう。つまり、格納できるのは1回にどれかのメンバひとつのみである。 あるデータが、実体としては同じなのに、あたかも違った構造を持つデータとしてアクセスできるのが「共用体」の考え方です。こんなたとえがありました→「お弁当箱の「仕切り方」が、中身に応じて変わるのと同じこと」。
 さて、これが実際にどのような場所で利用されるのか?共用体は、構造体のメンバで使われることが多く、知っているとプログラムがシンプルになるときもある。たとえば、企業で個人データを扱う構造体があり、氏名・年齢・給与がメンバだとする。企業には正社員もいればバイトもいるとすれば、給与が月給(特別手当、交通費を含む)であったり、日給(交通費を含む)であったり、時給であったりする。しかし、これらをひとつの個人データの構造体で扱いたい。では、どうするか。構造体のメンバの給与部分を、共用体(+構造体)で表現すればよい。.(この例は、あくまでも使い方の例なので、月給に特別手当?など、その意味は深くは考えないように)。ちょっと無理があった例ではあるが、本当は、この月給とか日給の構造体のそれぞれの部分に、まったく違ったデータ型、doubleやfloa,charを入れた例を考えたかったけど(本当はこれが大きな利点)、パッと思いつかなかった。 まあ、ご愛嬌。

struct { int payment,bonus,trans } paymonth;
struct { int payment,trans } payday;
struct { int payment } paytime;

struct personaldata {
 char *name;
 int age;
 int paytype; /* 0:paymonth , 1:payday , 2: paytime */
 union {
  paymonth m;
  payday d;
  paytime t;
  } pay;
 };

 これで、paytypeを見て、pay.m(月給)、pay.d(日給)、pay.t(時給)を使い分ければよい。

つまり、構造体というのは共通の形式のデータを利用するわけなんだけど、同じメンバでも、どうしても違う形式のデータも使いたいということがある。 そんなときに利用するとプログラムが簡潔になって良い場合がある。まあ、他にも利用法はあるだろうが、これが代表的な使いかただと思う。 共用体を単独で用いることはあまりない。

ソフトウエア演習Bのページへ

 

第6回
12/01
C言語開発環境

 今回は、プログラムを効率的に作成する方法などを学びます。大規模なプログラムを作成する場合には、特に有効なものですが、小さなプログラムを作っている限りは、たいして必要性を感じないものも多く、イメージしにくいかもしれませんので、そのあたりを補足してあげてください。分割コンパイルなどは、自分で開発すること以外にも、WSにソフトウエアをインストールする時にも必要な知識となりますので、覚えておいて損はありません。また、プログラム開発につきものの、デバッグは重要ですので、これまでプログラムにミスがあったときにどう対処していたかを振り返ってもらいながら、指導してあげてください。

●学習目標

●指導の要点

●レポート評価(作成)上の注意

ソフトウエア演習Bのページへ

 

第7回
12/08
ライブラリの利用

 今回は、さまざまなライブラリの関数を扱ってみるというものです。ファイルの操作をはじめとして、今後プログラミングの上でよく扱うものが多数含まれています。

●学習目標

●指導の要点

●レポート評価(作成)上の注意

ソフトウエア演習Bのページへ

 

第8回
12/15
アルゴリズムとデータ構造1 −ソーティング

 今回から、アルゴリズムとデータ構造に入るようです。アルゴリズムやデータ構造を効率よく実現することは、プログラミングで最も重要な課題のひとつと言えるでしょう。今回はそのなかでも、データの並べ替え(ソーティング)についてのみ学習することになります。テキストには、プログラムの例がほとんど載っておらず、アルゴリズムの考え方が記されているだけです。1年生がどうプログラムを作っていいのか途方にくれているときには、答えを直接教えずにヒントを出すような感じでお願いします。

●学習目標

●指導の要点

●レポート評価(作成)上の注意

ソフトウエア演習Bのページへ

 

第9回
12/22
アルゴリズムとデータ構造2 −リストと木構造

 今回は、アルゴリズムとデータ構造の2回目です。かなり重要な部分です。内容的にも以前と比べてだいぶ難しくなってきました。構造体とポインタを活用することになります(C言語ではこれができないと)。テキスト中に出てくるリストや木構造を理解してもらうのはもちろんのこと、特に随時変数(構造体)を動的確保しながら、ポインタを利用してつなげていく(つまり各データがポインタによりつながれる、参照される)という概念を理解させてあげてください。

※完全に出来ない場合でも、必ずできたところまでを期限どおりに提出するようにと今一度確認してください!!! (できないから提出しないとか、表紙だけを提出ということのないように)。

●学習目標

●指導の要点

●レポート評価(作成)上の注意

ソフトウエア演習Bのページへ

 

第10回
01/12
アルゴリズムとデータ構造3 −グラフ

 今回は、アルゴリズムとデータ構造の3回目で、グラフについてです。テキストには、これまで同様にプログラムの例はほとんど載っておらず、考え方のみが示されています。問題解決を行う際には、現実世界をモデル化し、コンピュータによって処理させるということがあります。グラフは、ノードと辺(点と線)や、重み(ノード間のつながりの情報)、方向(辺の方向)等によってモデル化を行うというものです。本課題を通して、そのあたりのイメージもあわせてつかんでもらえたらと思います。

●学習目標

●指導の要点

●レポート評価(作成)上の注意

 

ソフトウエア演習Bのページへ

第11回・第12回
01/26,02/02
総合演習 システムの設計と開発

 2回をかけて、ひとつのアプリケーションを設計し、開発してもらいます。これまでの演習の内容を振り返りながら、自分の力でプログラムを書くようにと指導してあげてください(今までの演習で習ったことを利用すれば開発できますので、復習的な位置付けでもあります)。行き詰まる可能性も多々ありますので、演習時間外のフォローもよろしくお願いします。

目標

「拡張機能を1つ以上入れた、住所録管理アプリケーションを作成する」
 (住所録管理アプリケーションの要求は、テキストに載っています)

●第11回評価上の注意

 4つの提出物があること(仕様書、設計書、プログラムリスト、チェックリスト)。それらの内容が適切であること。
  (設計書の中には、関数仕様書が含まれます)。
 拡張機能は、オリジナリティがあり、なるべく利便性が高いものを期待します。あまりにもたいしたことないものは、考え直させてください。
 プログラムは実際に動作し、レコードの一覧表示、データの保存・読み込み、新規レコードの追加・削除、レコード内の任意の項目に対して修正ができること。
 ソート機能は、昇順と降順が決まっているか、決まってなければ決めさせましょう。

●第12回評価上の注意

 プログラムがすべて完成し、利用手引書が用意されていること(実際に利用手引き書を見ながら、操作してみてください)。
  特に、拡張機能の部分がきちんと動いていること。
 グループ内でメンバーを集めてお披露目会(デモンストレーション)をしてもらってもいいです。

 

ソフトウエア演習Bのページへ


ichikawa@soft.iwate-pu.ac.jp